[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-2228-g96df53f

Volker Lendecke vlendec at samba.org
Wed Jun 10 21:08:48 GMT 2009


The branch, master has been updated
       via  96df53fdc72a36cea849572c8386b77611c0f380 (commit)
       via  6e9e0334ff9b0aff935fcdcdd2a5380e12446a06 (commit)
      from  a9ec21cf219c3aef0388c252539f315d3e606a71 (commit)

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


- Log -----------------------------------------------------------------
commit 96df53fdc72a36cea849572c8386b77611c0f380
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Jun 10 12:54:05 2009 +0200

    Implement pdb_ads_lookup_rids

commit 6e9e0334ff9b0aff935fcdcdd2a5380e12446a06
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Jun 10 11:48:31 2009 +0200

    Fix a segfault in pdb_ads_delete_user()
    
    If a user comes from the passdb cache, priv is NULL

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

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


Changeset truncated at 500 lines:

diff --git a/source3/passdb/pdb_ads.c b/source3/passdb/pdb_ads.c
index 8e30dfb..927c1aa 100644
--- a/source3/passdb/pdb_ads.c
+++ b/source3/passdb/pdb_ads.c
@@ -443,12 +443,20 @@ static NTSTATUS pdb_ads_delete_user(struct pdb_methods *m,
 {
 	struct pdb_ads_state *state = talloc_get_type_abort(
 		m->private_data, struct pdb_ads_state);
-	struct pdb_ads_samu_private *priv = pdb_ads_get_samu_private(m, sam);
+	NTSTATUS status;
+	char *dn;
 	int rc;
 
-	rc = tldap_delete(state->ld, priv->dn, NULL, NULL);
+	status = pdb_ads_sid2dn(state, pdb_get_user_sid(sam), talloc_tos(),
+				&dn);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
+
+	rc = tldap_delete(state->ld, dn, NULL, NULL);
+	TALLOC_FREE(dn);
 	if (rc != TLDAP_SUCCESS) {
-		DEBUG(10, ("ldap_delete for %s failed: %s\n", priv->dn,
+		DEBUG(10, ("ldap_delete for %s failed: %s\n", dn,
 			   tldap_errstr(debug_ctx(), state->ld, rc)));
 		return NT_STATUS_LDAP(rc);
 	}
@@ -1329,10 +1337,76 @@ static NTSTATUS pdb_ads_lookup_rids(struct pdb_methods *m,
 				    const DOM_SID *domain_sid,
 				    int num_rids,
 				    uint32 *rids,
-				    const char **pp_names,
-				    enum lsa_SidType *attrs)
+				    const char **names,
+				    enum lsa_SidType *lsa_attrs)
 {
-	return NT_STATUS_NOT_IMPLEMENTED;
+	struct pdb_ads_state *state = talloc_get_type_abort(
+		m->private_data, struct pdb_ads_state);
+	const char *attrs[2] = { "sAMAccountType", "sAMAccountName" };
+	int i, num_mapped;
+
+	if (num_rids == 0) {
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	num_mapped = 0;
+
+	for (i=0; i<num_rids; i++) {
+		struct dom_sid sid;
+		struct tldap_message **msg;
+		char *sidstr;
+		uint32_t attr;
+		int rc;
+
+		lsa_attrs[i] = SID_NAME_UNKNOWN;
+
+		sid_compose(&sid, domain_sid, rids[i]);
+
+		sidstr = sid_binstring(talloc_tos(), &sid);
+		NT_STATUS_HAVE_NO_MEMORY(sidstr);
+
+		rc = tldap_search_fmt(state->ld, state->domaindn,
+				      TLDAP_SCOPE_SUB, attrs,
+				      ARRAY_SIZE(attrs), 0, talloc_tos(),
+				      &msg, "(objectsid=%s)", sidstr);
+		TALLOC_FREE(sidstr);
+		if (rc != TLDAP_SUCCESS) {
+			DEBUG(10, ("ldap_search failed %s\n",
+				   tldap_errstr(debug_ctx(), state->ld, rc)));
+			continue;
+		}
+
+		switch talloc_array_length(msg) {
+		case 0:
+			DEBUG(10, ("rid %d not found\n", (int)rids[i]));
+			continue;
+		case 1:
+			break;
+		default:
+			return NT_STATUS_INTERNAL_DB_CORRUPTION;
+		}
+
+		names[i] = tldap_talloc_single_attribute(
+			msg[0], "samAccountName", talloc_tos());
+		if (names[i] == NULL) {
+			DEBUG(10, ("no samAccountName\n"));
+			continue;
+		}
+		if (!tldap_pull_uint32(msg[0], "samAccountType", &attr)) {
+			DEBUG(10, ("no samAccountType"));
+			continue;
+		}
+		lsa_attrs[i] = ads_atype_map(attr);
+		num_mapped += 1;
+	}
+
+	if (num_mapped == 0) {
+		return NT_STATUS_NONE_MAPPED;
+	}
+	if (num_mapped < num_rids) {
+		return STATUS_SOME_UNMAPPED;
+	}
+	return NT_STATUS_OK;
 }
 
 static NTSTATUS pdb_ads_lookup_names(struct pdb_methods *m,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list