svn commit: samba r1718 - trunk/source/passdb

mimir at samba.org mimir at samba.org
Wed Aug 11 05:23:56 GMT 2004


Author: mimir
Date: 2004-08-11 05:23:55 +0000 (Wed, 11 Aug 2004)
New Revision: 1718
WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/&rev=1718&nolog=1
Log:
Deleting trust password stored in ldap directory is now possible.


rafal


Modified:
   trunk/source/passdb/pdb_ldap.c

Changeset:
Modified: trunk/source/passdb/pdb_ldap.c
===================================================================
--- trunk/source/passdb/pdb_ldap.c	2004-08-11 04:02:54 UTC (rev 1717)
+++ trunk/source/passdb/pdb_ldap.c	2004-08-11 05:23:55 UTC (rev 1718)
@@ -3701,7 +3701,7 @@
 static NTSTATUS ldapsam_update_trust_passwd(struct pdb_methods *methods, const SAM_TRUST_PASSWD *trust)
 {
 	struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)methods->private_data;
-	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
+	NTSTATUS nt_status = NT_STATUS_OK;
 	SAM_TRUST_PASSWD trustpw;
 	char **attr_list;
 	LDAPMessage *res = NULL;
@@ -3796,7 +3796,65 @@
 
 static NTSTATUS ldapsam_delete_trust_passwd(struct pdb_methods *methods, const SAM_TRUST_PASSWD *trust)
 {
-	NTSTATUS nt_status = NT_STATUS_NOT_IMPLEMENTED;
+	struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)methods->private_data;
+	NTSTATUS nt_status;
+	const char *dom_name;
+	char **attr_list, *dn = NULL;
+	LDAPMessage *res = NULL;
+	int rc, count;
+
+	if (!trust) {
+		DEBUG(0, ("trust was NULL!\n"));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	dom_name = pdb_get_tp_domain_name_c(trust);
+	if (!dom_name) {
+		DEBUG(0, ("Couldn't get char-converted domain name\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+	
+	attr_list = get_attr_list(trustpw_attr_list);
+
+	/* Checking if such trust password already exists in the directory
+	   - search and count the results */
+	rc = ldapsam_search_trustpw_by_name(ldap_state, dom_name, &res, attr_list);
+	if (rc != LDAP_SUCCESS) {
+		free_attr_list(attr_list);
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	/* Counting the actual number of entries returned (we need only one) */
+	count = ldap_count_entries(ldap_state->smbldap_state->ldap_struct, res);
+	if (count < 1) {
+		DEBUG(0, ("Trust password (%s) does not exist in the directory!\n", dom_name));
+		return NT_STATUS_UNSUCCESSFUL;
+
+	} else if (count > 1) {
+		DEBUG(0, ("Multiple entries found for trust password [%s]!\n", dom_name));
+		return NT_STATUS_UNSUCCESSFUL;
+
+	} else
+		DEBUG(3, ("Trust password (%s) found in the directory\n", dom_name));
+
+	/* Getting distinguished name of the ldap entry */
+	dn = smbldap_get_dn(ldap_state->smbldap_state->ldap_struct, res);
+	if (!dn) {
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	/* Time to delete ... */
+	rc = smbldap_delete(ldap_state->smbldap_state, dn);
+	if (rc != LDAP_SUCCESS) {
+		char *ldap_err = NULL;
+		ldap_get_option(ldap_state->smbldap_state->ldap_struct, LDAP_OPT_ERROR_STRING,
+				&ldap_err);
+		DEBUG(1, ("Failed to delete trustpw dn= %s with %s\n\t%s\n", dn,
+			  ldap_err2string(rc), ldap_err ? ldap_err : "unknown"));
+		SAFE_FREE(ldap_err);
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
 	return nt_status;
 }
 



More information about the samba-cvs mailing list