[SCM] Samba Shared Repository - branch master updated

Volker Lendecke vlendec at samba.org
Sun Feb 20 13:41:01 MST 2011


The branch, master has been updated
       via  367b35b s3: Fix pdb_ads_enum_aliasmem for empty aliases
       via  ff6c175 s3: Support SetGroupInfo in pdb_ads
       via  9512603 s3: Fix a debug message
       via  4c45078 s3: Fix pdb_ads_enum_group_members for empty groups
       via  288b396 s3: Fix error returns in pdb_ads_mod_groupmem
      from  fd880fd s4-version: Fix version finding for bzr branches.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 367b35b1ffd353070b9dca4f00e3089f6788b266
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Feb 20 19:55:01 2011 +0100

    s3: Fix pdb_ads_enum_aliasmem for empty aliases
    
    Autobuild-User: Volker Lendecke <vlendec at samba.org>
    Autobuild-Date: Sun Feb 20 21:40:40 CET 2011 on sn-devel-104

commit ff6c175ae6cfb10d466db2920a9a7f9e67709ede
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Feb 20 18:39:30 2011 +0100

    s3: Support SetGroupInfo in pdb_ads

commit 95126034b02f0536b521a250a7935fd1472c77d2
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Feb 20 18:39:09 2011 +0100

    s3: Fix a debug message

commit 4c45078d8f8d7cde4ecb5e7b08d96b9abd538ea5
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Feb 20 17:53:26 2011 +0100

    s3: Fix pdb_ads_enum_group_members for empty groups

commit 288b396411bfe8f8eb7353193991a1910c97751e
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Feb 20 17:41:22 2011 +0100

    s3: Fix error returns in pdb_ads_mod_groupmem

-----------------------------------------------------------------------

Summary of changes:
 source3/passdb/pdb_ads.c |   86 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 77 insertions(+), 9 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/passdb/pdb_ads.c b/source3/passdb/pdb_ads.c
index ad38256..f74fb12 100644
--- a/source3/passdb/pdb_ads.c
+++ b/source3/passdb/pdb_ads.c
@@ -744,7 +744,9 @@ static NTSTATUS pdb_ads_update_login_attempts(struct pdb_methods *m,
 }
 
 static NTSTATUS pdb_ads_getgrfilter(struct pdb_methods *m, GROUP_MAP *map,
-				    const char *filter)
+				    const char *filter,
+				    TALLOC_CTX *mem_ctx,
+				    struct tldap_message **pmsg)
 {
 	struct pdb_ads_state *state = talloc_get_type_abort(
 		m->private_data, struct pdb_ads_state);
@@ -764,7 +766,7 @@ static NTSTATUS pdb_ads_getgrfilter(struct pdb_methods *m, GROUP_MAP *map,
 		return NT_STATUS_LDAP(rc);
 	}
 	if (talloc_array_length(group) != 1) {
-		DEBUG(10, ("Expected 1 user, got %d\n",
+		DEBUG(10, ("Expected 1 group, got %d\n",
 			   (int)talloc_array_length(group)));
 		return NT_STATUS_INTERNAL_DB_CORRUPTION;
 	}
@@ -806,6 +808,9 @@ static NTSTATUS pdb_ads_getgrfilter(struct pdb_methods *m, GROUP_MAP *map,
 		map->comment[0] = '\0';
 	}
 
+	if (pmsg != NULL) {
+		*pmsg = talloc_move(mem_ctx, &group[0]);
+	}
 	TALLOC_FREE(group);
 	return NT_STATUS_OK;
 }
@@ -823,7 +828,7 @@ static NTSTATUS pdb_ads_getgrsid(struct pdb_methods *m, GROUP_MAP *map,
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	status = pdb_ads_getgrfilter(m, map, filter);
+	status = pdb_ads_getgrfilter(m, map, filter, NULL, NULL);
 	TALLOC_FREE(filter);
 	return status;
 }
@@ -849,7 +854,7 @@ static NTSTATUS pdb_ads_getgrnam(struct pdb_methods *m, GROUP_MAP *map,
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	status = pdb_ads_getgrfilter(m, map, filter);
+	status = pdb_ads_getgrfilter(m, map, filter, NULL, NULL);
 	TALLOC_FREE(filter);
 	return status;
 }
@@ -1003,7 +1008,64 @@ static NTSTATUS pdb_ads_add_group_mapping_entry(struct pdb_methods *m,
 static NTSTATUS pdb_ads_update_group_mapping_entry(struct pdb_methods *m,
 						   GROUP_MAP *map)
 {
-	return NT_STATUS_NOT_IMPLEMENTED;
+	struct pdb_ads_state *state = talloc_get_type_abort(
+		m->private_data, struct pdb_ads_state);
+	struct tldap_context *ld;
+	struct tldap_mod *mods = NULL;
+	char *filter;
+	struct tldap_message *existing;
+	char *dn;
+	GROUP_MAP existing_map;
+	int rc, num_mods = 0;
+	bool ret;
+	NTSTATUS status;
+
+	ld = pdb_ads_ld(state);
+	if (ld == NULL) {
+		return NT_STATUS_LDAP(TLDAP_SERVER_DOWN);
+	}
+
+	filter = talloc_asprintf(talloc_tos(),
+				 "(&(objectsid=%s)(objectclass=group))",
+				 sid_string_talloc(talloc_tos(), &map->sid));
+	if (filter == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	status = pdb_ads_getgrfilter(m, &existing_map, filter,
+				     talloc_tos(), &existing);
+	TALLOC_FREE(filter);
+
+	if (!tldap_entry_dn(existing, &dn)) {
+		return NT_STATUS_LDAP(TLDAP_DECODING_ERROR);
+	}
+
+	ret = true;
+
+	ret &= tldap_make_mod_fmt(
+		existing, talloc_tos(), &mods, &num_mods, "description",
+		"%s", map->comment);
+	ret &= tldap_make_mod_fmt(
+		existing, talloc_tos(), &mods, &num_mods, "samaccountname",
+		"%s", map->nt_name);
+
+	if (!ret) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	if (num_mods == 0) {
+		TALLOC_FREE(existing);
+		return NT_STATUS_OK;
+	}
+
+	rc = tldap_modify(ld, dn, mods, num_mods, NULL, 0, NULL, 0);
+	if (rc != TLDAP_SUCCESS) {
+		DEBUG(10, ("ldap_modify for %s failed: %s\n", dn,
+			   tldap_errstr(talloc_tos(), ld, rc)));
+		TALLOC_FREE(existing);
+		return NT_STATUS_LDAP(rc);
+	}
+	TALLOC_FREE(existing);
+	return NT_STATUS_OK;
 }
 
 static NTSTATUS pdb_ads_delete_group_mapping_entry(struct pdb_methods *m,
@@ -1061,7 +1123,9 @@ static NTSTATUS pdb_ads_enum_group_members(struct pdb_methods *m,
 	}
 
 	if (!tldap_entry_values(msg[0], "member", &blobs, &num_members)) {
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
+		*pmembers = NULL;
+		*pnum_members = 0;
+		return NT_STATUS_OK;
 	}
 
 	members = talloc_array(mem_ctx, uint32_t, num_members);
@@ -1214,10 +1278,12 @@ static NTSTATUS pdb_ads_mod_groupmem(struct pdb_methods *m,
 	if (rc != TLDAP_SUCCESS) {
 		DEBUG(10, ("ldap_modify failed: %s\n",
 			   tldap_errstr(talloc_tos(), state->ld, rc)));
-		if (rc == TLDAP_TYPE_OR_VALUE_EXISTS) {
+		if ((mod_op == TLDAP_MOD_ADD) &&
+		    (rc == TLDAP_ALREADY_EXISTS)) {
 			return NT_STATUS_MEMBER_IN_GROUP;
 		}
-		if (rc == TLDAP_NO_SUCH_ATTRIBUTE) {
+		if ((mod_op == TLDAP_MOD_DELETE) &&
+		    (rc == TLDAP_UNWILLING_TO_PERFORM)) {
 			return NT_STATUS_MEMBER_NOT_IN_GROUP;
 		}
 		return NT_STATUS_LDAP(rc);
@@ -1644,7 +1710,9 @@ static NTSTATUS pdb_ads_enum_aliasmem(struct pdb_methods *m,
 	}
 
 	if (!tldap_entry_values(msg[0], "member", &blobs, &num_members)) {
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
+		*pmembers = NULL;
+		*pnum_members = 0;
+		return NT_STATUS_OK;
 	}
 
 	members = talloc_array(mem_ctx, struct dom_sid, num_members);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list