svn commit: samba r23772 - in branches: SAMBA_3_0/source/libads SAMBA_3_0/source/utils SAMBA_3_0_26/source/libads SAMBA_3_0_26/source/utils

gd at samba.org gd at samba.org
Mon Jul 9 16:03:03 GMT 2007


Author: gd
Date: 2007-07-09 16:03:00 +0000 (Mon, 09 Jul 2007)
New Revision: 23772

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=23772

Log:
Add ads_find_samaccount() helper function.

Guenther

Modified:
   branches/SAMBA_3_0/source/libads/ldap.c
   branches/SAMBA_3_0/source/utils/net_ads_gpo.c
   branches/SAMBA_3_0_26/source/libads/ldap.c
   branches/SAMBA_3_0_26/source/utils/net_ads_gpo.c


Changeset:
Modified: branches/SAMBA_3_0/source/libads/ldap.c
===================================================================
--- branches/SAMBA_3_0/source/libads/ldap.c	2007-07-09 15:53:08 UTC (rev 23771)
+++ branches/SAMBA_3_0/source/libads/ldap.c	2007-07-09 16:03:00 UTC (rev 23772)
@@ -3272,4 +3272,64 @@
 	return ADS_ERROR_LDAP(LDAP_SUCCESS);
 }
 
+ADS_STATUS ads_find_samaccount(ADS_STRUCT *ads,
+			       TALLOC_CTX *mem_ctx,
+			       const char *samaccountname,
+			       uint32 *uac_ret,
+			       const char **dn_ret)
+{
+	ADS_STATUS status;
+	const char *attrs[] = { "userAccountControl", NULL };
+	const char *filter;
+	LDAPMessage *res = NULL;
+	char *dn = NULL;
+	uint32 uac = 0;
+
+	filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))",
+		samaccountname);
+	if (filter == NULL) {
+		goto out;
+	}
+
+	status = ads_do_search_all(ads, ads->config.bind_path,
+				   LDAP_SCOPE_SUBTREE,
+				   filter, attrs, &res);
+	
+	if (!ADS_ERR_OK(status)) {
+		goto out;
+	}
+
+	if (ads_count_replies(ads, res) != 1) {
+		printf("no result\n");
+		goto out;
+	}
+
+	dn = ads_get_dn(ads, res);
+	if (dn == NULL) {
+		status = ADS_ERROR(LDAP_NO_MEMORY);
+		goto out;
+	}
+
+	if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
+		status = ADS_ERROR(LDAP_NO_SUCH_ATTRIBUTE);
+		goto out;
+	}
+
+	if (uac_ret) {
+		*uac_ret = uac;
+	}
+
+	if (dn_ret) {
+		*dn_ret = talloc_strdup(mem_ctx, dn);
+		if (!*dn_ret) {
+			status = ADS_ERROR(LDAP_NO_MEMORY);
+			goto out;
+		}
+	}
+ out:
+	ads_memfree(ads, dn);
+	ads_msgfree(ads, res);
+
+	return status;
+}
 #endif

Modified: branches/SAMBA_3_0/source/utils/net_ads_gpo.c
===================================================================
--- branches/SAMBA_3_0/source/utils/net_ads_gpo.c	2007-07-09 15:53:08 UTC (rev 23771)
+++ branches/SAMBA_3_0/source/utils/net_ads_gpo.c	2007-07-09 16:03:00 UTC (rev 23772)
@@ -46,10 +46,7 @@
 	TALLOC_CTX *mem_ctx;
 	ADS_STRUCT *ads;
 	ADS_STATUS status;
-	const char *attrs[] = { "userAccountControl", NULL };
-	LDAPMessage *res = NULL;
-	const char *filter;
-	char *dn = NULL;
+	const char *dn = NULL;
 	struct GROUP_POLICY_OBJECT *gpo_list = NULL;
 	uint32 uac = 0;
 	uint32 flags = 0;
@@ -66,38 +63,17 @@
 		return -1;
 	}
 
-	filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))", argv[0]);
-	if (filter == NULL) {
-		goto out;
-	}
-
 	status = ads_startup(False, &ads);
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
-	status = ads_do_search_all(ads, ads->config.bind_path,
-				   LDAP_SCOPE_SUBTREE,
-				   filter, attrs, &res);
-	
+	status = ads_find_samaccount(ads, mem_ctx, argv[0], &uac, &dn);
 	if (!ADS_ERR_OK(status)) {
+		printf("failed to find samaccount for %s\n", argv[0]);
 		goto out;
 	}
 
-	if (ads_count_replies(ads, res) != 1) {
-		printf("no result\n");
-		goto out;
-	}
-
-	dn = ads_get_dn(ads, res);
-	if (dn == NULL) {
-		goto out;
-	}
-
-	if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
-		goto out;
-	}
-
 	if (uac & UF_WORKSTATION_TRUST_ACCOUNT) {
 		flags |= GPO_LIST_FLAG_MACHINE;
 	}
@@ -139,9 +115,6 @@
 	}
 
  out:
-	ads_memfree(ads, dn);
-	ads_msgfree(ads, res);
-
 	ads_destroy(&ads);
 	talloc_destroy(mem_ctx);
 	return 0;
@@ -225,10 +198,7 @@
 	TALLOC_CTX *mem_ctx;
 	ADS_STRUCT *ads;
 	ADS_STATUS status;
-	const char *attrs[] = {"distinguishedName", "userAccountControl", NULL};
-	LDAPMessage *res = NULL;
-	const char *filter;
-	char *dn = NULL;
+	const char *dn = NULL;
 	struct GROUP_POLICY_OBJECT *gpo_list;
 	uint32 uac = 0;
 	uint32 flags = 0;
@@ -243,38 +213,16 @@
 		goto out;
 	}
 
-	filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))", argv[0]);
-	if (filter == NULL) {
-		goto out;
-	}
-
 	status = ads_startup(False, &ads);
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
-	status = ads_do_search_all(ads, ads->config.bind_path,
-				   LDAP_SCOPE_SUBTREE,
-				   filter, attrs, &res);
-	
+	status = ads_find_samaccount(ads, mem_ctx, argv[0], &uac, &dn);
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
-	if (ads_count_replies(ads, res) != 1) {
-		printf("no result\n");
-		goto out;
-	}
-
-	dn = ads_get_dn(ads, res);
-	if (dn == NULL) {
-		goto out;
-	}
-
-	if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
-		goto out;
-	}
-
 	if (uac & UF_WORKSTATION_TRUST_ACCOUNT) {
 		flags |= GPO_LIST_FLAG_MACHINE;
 	}
@@ -289,15 +237,12 @@
 	}
 
 	/* FIXME: allow to process just a single extension */
-	status = gpo_process_gpo_list(ads, mem_ctx, &gpo_list, NULL, flags); 
+	status = gpo_process_gpo_list(ads, mem_ctx, gpo_list, NULL, flags); 
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
 out:
-	ads_memfree(ads, dn);
-	ads_msgfree(ads, res);
-
 	ads_destroy(&ads);
 	talloc_destroy(mem_ctx);
 	return 0;

Modified: branches/SAMBA_3_0_26/source/libads/ldap.c
===================================================================
--- branches/SAMBA_3_0_26/source/libads/ldap.c	2007-07-09 15:53:08 UTC (rev 23771)
+++ branches/SAMBA_3_0_26/source/libads/ldap.c	2007-07-09 16:03:00 UTC (rev 23772)
@@ -3272,4 +3272,64 @@
 	return ADS_ERROR_LDAP(LDAP_SUCCESS);
 }
 
+ADS_STATUS ads_find_samaccount(ADS_STRUCT *ads,
+			       TALLOC_CTX *mem_ctx,
+			       const char *samaccountname,
+			       uint32 *uac_ret,
+			       const char **dn_ret)
+{
+	ADS_STATUS status;
+	const char *attrs[] = { "userAccountControl", NULL };
+	const char *filter;
+	LDAPMessage *res = NULL;
+	char *dn = NULL;
+	uint32 uac = 0;
+
+	filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))",
+		samaccountname);
+	if (filter == NULL) {
+		goto out;
+	}
+
+	status = ads_do_search_all(ads, ads->config.bind_path,
+				   LDAP_SCOPE_SUBTREE,
+				   filter, attrs, &res);
+	
+	if (!ADS_ERR_OK(status)) {
+		goto out;
+	}
+
+	if (ads_count_replies(ads, res) != 1) {
+		printf("no result\n");
+		goto out;
+	}
+
+	dn = ads_get_dn(ads, res);
+	if (dn == NULL) {
+		status = ADS_ERROR(LDAP_NO_MEMORY);
+		goto out;
+	}
+
+	if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
+		status = ADS_ERROR(LDAP_NO_SUCH_ATTRIBUTE);
+		goto out;
+	}
+
+	if (uac_ret) {
+		*uac_ret = uac;
+	}
+
+	if (dn_ret) {
+		*dn_ret = talloc_strdup(mem_ctx, dn);
+		if (!*dn_ret) {
+			status = ADS_ERROR(LDAP_NO_MEMORY);
+			goto out;
+		}
+	}
+ out:
+	ads_memfree(ads, dn);
+	ads_msgfree(ads, res);
+
+	return status;
+}
 #endif

Modified: branches/SAMBA_3_0_26/source/utils/net_ads_gpo.c
===================================================================
--- branches/SAMBA_3_0_26/source/utils/net_ads_gpo.c	2007-07-09 15:53:08 UTC (rev 23771)
+++ branches/SAMBA_3_0_26/source/utils/net_ads_gpo.c	2007-07-09 16:03:00 UTC (rev 23772)
@@ -46,10 +46,7 @@
 	TALLOC_CTX *mem_ctx;
 	ADS_STRUCT *ads;
 	ADS_STATUS status;
-	const char *attrs[] = { "userAccountControl", NULL };
-	LDAPMessage *res = NULL;
-	const char *filter;
-	char *dn = NULL;
+	const char *dn = NULL;
 	struct GROUP_POLICY_OBJECT *gpo_list = NULL;
 	uint32 uac = 0;
 	uint32 flags = 0;
@@ -66,38 +63,17 @@
 		return -1;
 	}
 
-	filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))", argv[0]);
-	if (filter == NULL) {
-		goto out;
-	}
-
 	status = ads_startup(False, &ads);
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
-	status = ads_do_search_all(ads, ads->config.bind_path,
-				   LDAP_SCOPE_SUBTREE,
-				   filter, attrs, &res);
-	
+	status = ads_find_samaccount(ads, mem_ctx, argv[0], &uac, &dn);
 	if (!ADS_ERR_OK(status)) {
+		printf("failed to find samaccount for %s\n", argv[0]);
 		goto out;
 	}
 
-	if (ads_count_replies(ads, res) != 1) {
-		printf("no result\n");
-		goto out;
-	}
-
-	dn = ads_get_dn(ads, res);
-	if (dn == NULL) {
-		goto out;
-	}
-
-	if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
-		goto out;
-	}
-
 	if (uac & UF_WORKSTATION_TRUST_ACCOUNT) {
 		flags |= GPO_LIST_FLAG_MACHINE;
 	}
@@ -139,9 +115,6 @@
 	}
 
  out:
-	ads_memfree(ads, dn);
-	ads_msgfree(ads, res);
-
 	ads_destroy(&ads);
 	talloc_destroy(mem_ctx);
 	return 0;
@@ -225,10 +198,7 @@
 	TALLOC_CTX *mem_ctx;
 	ADS_STRUCT *ads;
 	ADS_STATUS status;
-	const char *attrs[] = {"distinguishedName", "userAccountControl", NULL};
-	LDAPMessage *res = NULL;
-	const char *filter;
-	char *dn = NULL;
+	const char *dn = NULL;
 	struct GROUP_POLICY_OBJECT *gpo_list;
 	uint32 uac = 0;
 	uint32 flags = 0;
@@ -243,38 +213,16 @@
 		goto out;
 	}
 
-	filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))", argv[0]);
-	if (filter == NULL) {
-		goto out;
-	}
-
 	status = ads_startup(False, &ads);
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
-	status = ads_do_search_all(ads, ads->config.bind_path,
-				   LDAP_SCOPE_SUBTREE,
-				   filter, attrs, &res);
-	
+	status = ads_find_samaccount(ads, mem_ctx, argv[0], &uac, &dn);
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
-	if (ads_count_replies(ads, res) != 1) {
-		printf("no result\n");
-		goto out;
-	}
-
-	dn = ads_get_dn(ads, res);
-	if (dn == NULL) {
-		goto out;
-	}
-
-	if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
-		goto out;
-	}
-
 	if (uac & UF_WORKSTATION_TRUST_ACCOUNT) {
 		flags |= GPO_LIST_FLAG_MACHINE;
 	}
@@ -289,15 +237,12 @@
 	}
 
 	/* FIXME: allow to process just a single extension */
-	status = gpo_process_gpo_list(ads, mem_ctx, &gpo_list, NULL, flags); 
+	status = gpo_process_gpo_list(ads, mem_ctx, gpo_list, NULL, flags); 
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
 out:
-	ads_memfree(ads, dn);
-	ads_msgfree(ads, res);
-
 	ads_destroy(&ads);
 	talloc_destroy(mem_ctx);
 	return 0;



More information about the samba-cvs mailing list