summaryrefslogtreecommitdiff
path: root/source3/passdb
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2006-03-15 17:40:28 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:15:31 -0500
commit41a0da4cfc3e0bb37b81ea22fc2eb15aa89298e1 (patch)
tree5612ee2ec5ee5513c9ee75d04d143465c5e91a74 /source3/passdb
parentc17e40be33322049c3a12915790b8a149eb8c10e (diff)
downloadsamba-41a0da4cfc3e0bb37b81ea22fc2eb15aa89298e1.tar.gz
samba-41a0da4cfc3e0bb37b81ea22fc2eb15aa89298e1.tar.bz2
samba-41a0da4cfc3e0bb37b81ea22fc2eb15aa89298e1.zip
r14457: Add a few more special cases for RID 513 in the samr code.
Now that I know what all the requirements for this group are I can generalize the code some more and make it cleaner. But at least this is working with lusrmgr.msc on XP and 2k now. (This used to be commit d2c1842978cd50485849bfc4fb6d94767d96cab0)
Diffstat (limited to 'source3/passdb')
-rw-r--r--source3/passdb/passdb.c12
-rw-r--r--source3/passdb/pdb_interface.c22
2 files changed, 32 insertions, 2 deletions
diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c
index d795888180..876f04bdfe 100644
--- a/source3/passdb/passdb.c
+++ b/source3/passdb/passdb.c
@@ -548,6 +548,18 @@ BOOL lookup_global_sam_name(const char *user, int flags, uint32_t *rid,
{
GROUP_MAP map;
BOOL ret;
+
+ /* Windows treats "MACHINE\None" as a special name for
+ rid 513 on non-DCs. You cannot create a user or group
+ name "None" on Windows. You will get an error that
+ the group already exists. */
+
+ if ( strequal( user, "None" ) ) {
+ *rid = DOMAIN_GROUP_RID_USERS;
+ *type = SID_NAME_DOM_GRP;
+
+ return True;
+ }
/* LOOKUP_NAME_GROUP is a hack to allow valid users = @foo to work
* correctly in the case where foo also exists as a user. If the flag
diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c
index 4061e7b5db..82890fee2d 100644
--- a/source3/passdb/pdb_interface.c
+++ b/source3/passdb/pdb_interface.c
@@ -734,13 +734,31 @@ NTSTATUS pdb_enum_group_members(TALLOC_CTX *mem_ctx,
size_t *p_num_members)
{
struct pdb_methods *pdb = pdb_get_methods();
+ NTSTATUS result;
if ( !pdb ) {
return NT_STATUS_UNSUCCESSFUL;
}
- return pdb->enum_group_members(pdb, mem_ctx, sid,
- pp_member_rids, p_num_members);
+ result = pdb->enum_group_members(pdb, mem_ctx,
+ sid, pp_member_rids, p_num_members);
+
+ /* special check for rid 513 */
+
+ if ( !NT_STATUS_IS_OK( result ) ) {
+ uint32 rid;
+
+ sid_peek_rid( sid, &rid );
+
+ if ( rid == DOMAIN_GROUP_RID_USERS ) {
+ *p_num_members = 0;
+ *pp_member_rids = NULL;
+
+ return NT_STATUS_OK;
+ }
+ }
+
+ return result;
}
NTSTATUS pdb_enum_group_memberships(TALLOC_CTX *mem_ctx, struct samu *user,