[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha8-910-g1de9805

Volker Lendecke vlendec at samba.org
Sat Aug 8 05:45:06 MDT 2009


The branch, master has been updated
       via  1de9805fa3d5f05d187df092a65955dfc62a3d81 (commit)
       via  e8088e16f812d682e08ad558865d0cc6eab2ad9c (commit)
      from  e1a95e7961a4ffe67ee7abe61faad0e7e65417d6 (commit)

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


- Log -----------------------------------------------------------------
commit 1de9805fa3d5f05d187df092a65955dfc62a3d81
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 8 13:43:41 2009 +0200

    Implement db_rbt_traverse

commit e8088e16f812d682e08ad558865d0cc6eab2ad9c
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 8 13:42:55 2009 +0200

    Make wbinfo also print the members when querying a group

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

Summary of changes:
 nsswitch/wbinfo.c        |   20 ++++++++++++++++++--
 source3/lib/dbwrap_rbt.c |   37 +++++++++++++++++++++++++++++++++----
 2 files changed, 51 insertions(+), 6 deletions(-)


Changeset truncated at 500 lines:

diff --git a/nsswitch/wbinfo.c b/nsswitch/wbinfo.c
index 5dd96f9..ac5b4c4 100644
--- a/nsswitch/wbinfo.c
+++ b/nsswitch/wbinfo.c
@@ -233,17 +233,25 @@ static bool wbinfo_get_groupinfo(const char *group)
 {
 	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
 	struct group *grp;
+	char **mem;
 
 	wbc_status = wbcGetgrnam(group, &grp);
 	if (!WBC_ERROR_IS_OK(wbc_status)) {
 		return false;
 	}
 
-	d_printf("%s:%s:%u\n",
+	d_printf("%s:%s:%u:",
 		 grp->gr_name,
 		 grp->gr_passwd,
 		 (unsigned int)grp->gr_gid);
 
+	mem = grp->gr_mem;
+	while (*mem != NULL) {
+		d_printf("%s%s", *mem, *(mem+1) != NULL ? "," : "");
+		mem += 1;
+	}
+	d_printf("\n");
+
 	wbcFreeMemory(grp);
 
 	return true;
@@ -254,17 +262,25 @@ static bool wbinfo_get_gidinfo(int gid)
 {
 	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
 	struct group *grp;
+	char **mem;
 
 	wbc_status = wbcGetgrgid(gid, &grp);
 	if (!WBC_ERROR_IS_OK(wbc_status)) {
 		return false;
 	}
 
-	d_printf("%s:%s:%u\n",
+	d_printf("%s:%s:%u:",
 		 grp->gr_name,
 		 grp->gr_passwd,
 		 (unsigned int)grp->gr_gid);
 
+	mem = grp->gr_mem;
+	while (*mem != NULL) {
+		d_printf("%s%s", *mem, *(mem+1) != NULL ? "," : "");
+		mem += 1;
+	}
+	d_printf("\n");
+
 	wbcFreeMemory(grp);
 
 	return true;
diff --git a/source3/lib/dbwrap_rbt.c b/source3/lib/dbwrap_rbt.c
index cf4faa2..e9b0e46 100644
--- a/source3/lib/dbwrap_rbt.c
+++ b/source3/lib/dbwrap_rbt.c
@@ -335,16 +335,45 @@ static int db_rbt_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
 	return 0;
 }
 
+static int db_rbt_traverse_internal(struct rb_node *n,
+				    int (*f)(struct db_record *db,
+					     void *private_data),
+				    void *private_data)
+{
+	struct db_rbt_node *r;
+	struct db_record rec;
+	int ret;
+
+	if (n == NULL) {
+		return 0;
+	}
+
+	ret = db_rbt_traverse_internal(n->rb_left, f, private_data);
+	if (ret != 0) {
+		return ret;
+	}
+
+	r = db_rbt2node(n);
+	ZERO_STRUCT(rec);
+	db_rbt_parse_node(r, &rec.key, &rec.value);
+
+	ret = f(&rec, private_data);
+	if (ret != 0) {
+		return ret;
+	}
+
+	return db_rbt_traverse_internal(n->rb_right, f, private_data);
+}
 
 static int db_rbt_traverse(struct db_context *db,
 			   int (*f)(struct db_record *db,
 				    void *private_data),
 			   void *private_data)
 {
-	/*
-	 * Nobody uses this so far, and unused code is broken code :-)
-	 */
-	return -1;
+	struct db_rbt_ctx *ctx = talloc_get_type_abort(
+		db->private_data, struct db_rbt_ctx);
+
+	return db_rbt_traverse_internal(ctx->tree.rb_node, f, private_data);
 }
 
 static int db_rbt_get_seqnum(struct db_context *db)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list