s4-drs: Synchronous Implementation of generated parentGUID
authorFernando J V da Silva <fernandojvsilva@yahoo.com.br>
Thu, 19 Nov 2009 18:37:45 +0000 (15:37 -0300)
committerAndrew Tridgell <tridge@samba.org>
Fri, 20 Nov 2009 02:56:50 +0000 (13:56 +1100)
This generated parentGUID on demand, rather than getting it from the
database

Signed-off-by: Andrew Tridgell <tridge@samba.org>
source4/dsdb/samdb/ldb_modules/operational.c

index cd2a6bc0f657f05e0d43de4939bceb6bfe3eb11f..ccfddbe56edf98530856d2a18d2687b709dfd56e 100644 (file)
   modifiersName: not supported by w2k3?
 */
 
   modifiersName: not supported by w2k3?
 */
 
+#include "includes.h"
 #include "ldb_includes.h"
 #include "ldb_module.h"
 
 #include "ldb_includes.h"
 #include "ldb_module.h"
 
-#include "includes.h"
+#include "librpc/gen_ndr/ndr_misc.h"
+#include "param/param.h"
 #include "dsdb/samdb/samdb.h"
 
 #ifndef ARRAY_SIZE
 #include "dsdb/samdb/samdb.h"
 
 #ifndef ARRAY_SIZE
@@ -108,6 +110,35 @@ static int construct_primary_group_token(struct ldb_module *module,
        }
 }
 
        }
 }
 
+static int construct_parent_guid(struct ldb_module *module,
+               struct ldb_message *msg)
+{
+       struct ldb_context *ldb;
+       struct GUID parent_guid;
+       int ret;
+
+       ldb = ldb_module_get_ctx(module);
+
+       ret = dsdb_find_parentguid_by_dn(ldb, msg->dn, &parent_guid);
+
+
+       if (ret != LDB_SUCCESS){
+
+               /* if there is no parentGUID for this object, then return */
+               if (ret == LDB_ERR_NO_SUCH_OBJECT){
+                       return LDB_SUCCESS;
+               }else{
+                       return ret;
+               }
+
+       }
+
+       ret = dsdb_msg_add_guid(msg, &parent_guid, "parentGUID");
+
+       return ret;
+
+}
+
 
 /*
   a list of attribute names that should be substituted in the parse
 
 /*
   a list of attribute names that should be substituted in the parse
@@ -135,7 +166,8 @@ static const struct {
        { "modifyTimestamp", "whenChanged", NULL },
        { "structuralObjectClass", "objectClass", NULL },
        { "canonicalName", "distinguishedName", construct_canonical_name },
        { "modifyTimestamp", "whenChanged", NULL },
        { "structuralObjectClass", "objectClass", NULL },
        { "canonicalName", "distinguishedName", construct_canonical_name },
-       { "primaryGroupToken", "objectSid", construct_primary_group_token }
+       { "primaryGroupToken", "objectSid", construct_primary_group_token },
+       { "parentGUID", NULL, construct_parent_guid }
 };
 
 /*
 };
 
 /*