[PATCH] s4-drs: Synchronous Implementation of generated ParentGUID - ToDo List ParentGUID fix

tridge at samba.org tridge at samba.org
Fri Nov 13 18:23:37 MST 2009


Hi Fernando,

 > This patch is an implementation, in a synchronous manner, of the generated
 > ParentGUID

Thanks for the patch!

There are a few problems with the patch that need fixing before it can
be accepted. You are quite close though!

The changes in construct_parent_guid() looks mostly good. It would be
a bit neater to move the code that puts a objectGUID into a message
into a new helper function in dsdb/common/util.c, perhaps called
dsdb_msg_add_guid().

The change in operational_search() is not correct. You can see what is
wrong by trying the following two searches, which should produce the
same result:

  ldbsearch -H $PREFIX/private/sam.ldb objectclass=user createtimestamp parentguid 
  ldbsearch -H $PREFIX/private/sam.ldb objectclass=user parentguid createtimestamp

If you try it with your patch, you'll see that the first search
correctly produces both the createtimestamp and parentguid attributes,
but the 2nd search only produces the parentguid. The reason is that
you are putting a NULL value into the search_attrs[] array, which
terminates the array, so the backend never sees the request for the
createtimestamp attribute.

For your changes in objectclass.c, please just remove the
objectclass_rename_callback() function, rather than using #if 0. I
know that during the tutorial I used an #if 0, but that was just to
illustrate what to remove, I didn't mean you to patch it like this.

I also suspect you could remove a bit more code from objectclass.c. If
you look in objectclass_rename() then you'll see this comment:

	/* note that the results of this search are kept and used to
	   update the parentGUID in objectclass_rename_callback() */

perhaps we could remove that search completely? You should see if you
can, making sure that everything still works (check the code
carefully, and also run "make test").

You're also getting a warning like this in your code:

 dsdb/samdb/ldb_modules/operational.c:173: warning: passing argument 3 of ‘ldb_msg_add_value’ from incompatible pointer type
 lib/ldb/include/ldb.h:1744: note: expected ‘const struct ldb_val *’ but argument is of type ‘struct datablob *’

if you remember I was a bit puzzled by this when we came across it
during our tutorial session. I've now found that the cause is that
operational.c has the wrong #include lines at the top. The
"includes.h" line should come first, as that defines the override for
the struct ldb_val to be the same as a struct datablob.

Cheers, Tridge


More information about the samba-technical mailing list