[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-2110-g14a2974

Volker Lendecke vlendec at samba.org
Sun Jun 7 10:32:01 GMT 2009


The branch, master has been updated
       via  14a2974092bec50d37feaa33e0cdd6fd336f492c (commit)
       via  f3b227c0d2abb0d4f02fa2313ff59750a35a4cd2 (commit)
      from  83dee900bc50099311c6a4b6bf7a293c3a10d29a (commit)

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


- Log -----------------------------------------------------------------
commit 14a2974092bec50d37feaa33e0cdd6fd336f492c
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Jun 7 12:30:26 2009 +0200

    Make "net sam list" work for groups, aliases and builtins

commit f3b227c0d2abb0d4f02fa2313ff59750a35a4cd2
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Jun 7 12:04:56 2009 +0200

    Return full info in pdb_ads_search_users()

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

Summary of changes:
 source3/passdb/pdb_ads.c |   87 +++++++++++++++++++++++++++++++++++++++------
 1 files changed, 75 insertions(+), 12 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/passdb/pdb_ads.c b/source3/passdb/pdb_ads.c
index c55140e..3c5cd44 100644
--- a/source3/passdb/pdb_ads.c
+++ b/source3/passdb/pdb_ads.c
@@ -849,15 +849,16 @@ static void pdb_ads_search_end(struct pdb_search *search)
 	TALLOC_FREE(state);
 }
 
-static bool pdb_ads_search_users(struct pdb_methods *m,
-				 struct pdb_search *search,
-				 uint32 acct_flags)
+static bool pdb_ads_search_filter(struct pdb_methods *m,
+				  struct pdb_search *search,
+				  const char *filter,
+				  struct pdb_ads_search_state **pstate)
 {
 	struct pdb_ads_state *state = talloc_get_type_abort(
 		m->private_data, struct pdb_ads_state);
 	struct pdb_ads_search_state *sstate;
-	const char * attrs[] = { "objectSid", "sAMAccountName",
-				 "userAccountControl" };
+	const char * attrs[] = { "objectSid", "sAMAccountName", "displayName",
+				 "userAccountControl", "description" };
 	struct tldap_message **users;
 	int i, rc, num_users;
 
@@ -865,12 +866,11 @@ static bool pdb_ads_search_users(struct pdb_methods *m,
 	if (sstate == NULL) {
 		return false;
 	}
-	sstate->acct_flags = acct_flags;
 
 	rc = tldap_search_fmt(
 		state->ld, state->domaindn, TLDAP_SCOPE_SUB,
 		attrs, ARRAY_SIZE(attrs), 0, talloc_tos(), &users,
-		"(objectclass=user)");
+		"%s", filter);
 	if (rc != TLDAP_SUCCESS) {
 		DEBUG(10, ("ldap_search_ext_s failed: %s\n",
 			   tldap_errstr(debug_ctx(), state->ld, rc)));
@@ -901,9 +901,21 @@ static bool pdb_ads_search_users(struct pdb_methods *m,
 		}
 		sid_peek_rid(&sid, &e->rid);
 		e->acct_flags = ACB_NORMAL;
-		e->account_name = "Name";
-		e->fullname = "Full Name";
-		e->description = "Beschreibung";
+		e->account_name = tldap_talloc_single_attribute(
+			users[i], "samAccountName", sstate->entries);
+		if (e->account_name == NULL) {
+			return false;
+		}
+		e->fullname = tldap_talloc_single_attribute(
+                        users[i], "displayName", sstate->entries);
+		if (e->fullname == NULL) {
+			e->fullname = "";
+		}
+		e->description = tldap_talloc_single_attribute(
+                        users[i], "description", sstate->entries);
+		if (e->description == NULL) {
+			e->description = "";
+		}
 
 		sstate->num_entries += 1;
 		if (sstate->num_entries >= num_users) {
@@ -914,20 +926,71 @@ static bool pdb_ads_search_users(struct pdb_methods *m,
 	search->private_data = sstate;
 	search->next_entry = pdb_ads_next_entry;
 	search->search_end = pdb_ads_search_end;
+	*pstate = sstate;
+	return true;
+}
+
+static bool pdb_ads_search_users(struct pdb_methods *m,
+				 struct pdb_search *search,
+				 uint32 acct_flags)
+{
+	struct pdb_ads_search_state *sstate;
+	bool ret;
+
+	ret = pdb_ads_search_filter(m, search, "(objectclass=user)", &sstate);
+	if (!ret) {
+		return false;
+	}
+	sstate->acct_flags = acct_flags;
 	return true;
 }
 
 static bool pdb_ads_search_groups(struct pdb_methods *m,
 				  struct pdb_search *search)
 {
-	return false;
+	struct pdb_ads_search_state *sstate;
+	char *filter;
+	bool ret;
+
+	filter = talloc_asprintf(talloc_tos(),
+				 "(&(grouptype=%d)(objectclass=group))",
+				 GTYPE_SECURITY_GLOBAL_GROUP);
+	if (filter == NULL) {
+		return false;
+	}
+	ret = pdb_ads_search_filter(m, search, filter, &sstate);
+	TALLOC_FREE(filter);
+	if (!ret) {
+		return false;
+	}
+	sstate->acct_flags = 0;
+	return true;
 }
 
 static bool pdb_ads_search_aliases(struct pdb_methods *m,
 				   struct pdb_search *search,
 				   const DOM_SID *sid)
 {
-	return false;
+	struct pdb_ads_search_state *sstate;
+	char *filter;
+	bool ret;
+
+	filter = talloc_asprintf(
+		talloc_tos(), "(&(grouptype=%d)(objectclass=group))",
+		sid_check_is_builtin(sid)
+		? GTYPE_SECURITY_BUILTIN_LOCAL_GROUP
+		: GTYPE_SECURITY_DOMAIN_LOCAL_GROUP);
+
+	if (filter == NULL) {
+		return false;
+	}
+	ret = pdb_ads_search_filter(m, search, filter, &sstate);
+	TALLOC_FREE(filter);
+	if (!ret) {
+		return false;
+	}
+	sstate->acct_flags = 0;
+	return true;
 }
 
 static bool pdb_ads_uid_to_rid(struct pdb_methods *m, uid_t uid,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list