s4/ldif: Handle Schema:prefixMap blobs in W2K3 and W2K8
authorKamen Mazdrashki <kamen.mazdrashki@postpath.com>
Wed, 20 Jan 2010 16:10:05 +0000 (18:10 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 1 Feb 2010 14:23:31 +0000 (15:23 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
source4/lib/ldb-samba/ldif_handlers.c

index 84bee7823185a1cf252758c1fb703a3cdb9d9f7f..a3400dd774ca4be7a4d85222cc54db53b1724e64 100644 (file)
@@ -597,12 +597,22 @@ static int ldif_write_prefixMap(struct ldb_context *ldb, void *mem_ctx,
        uint32_t i;
 
        if (ldb_get_flags(ldb) & LDB_FLG_SHOW_BINARY) {
-               return ldif_write_NDR(ldb, mem_ctx, in, out, 
-                                     sizeof(struct prefixMapBlob),
-                                     (ndr_pull_flags_fn_t)ndr_pull_prefixMapBlob,
-                                     (ndr_print_fn_t)ndr_print_prefixMapBlob,
-                                     true);
-                                     
+               int err;
+               /* try to decode the blob as S4 prefixMap */
+               err = ldif_write_NDR(ldb, mem_ctx, in, out,
+                                    sizeof(struct prefixMapBlob),
+                                    (ndr_pull_flags_fn_t)ndr_pull_prefixMapBlob,
+                                    (ndr_print_fn_t)ndr_print_prefixMapBlob,
+                                    false);
+               if (0 == err) {
+                       return err;
+               }
+               /* try parsing it as Windows PrefixMap value */
+               return ldif_write_NDR(ldb, mem_ctx, in, out,
+                                     sizeof(struct drsuapi_MSPrefixMap_Ctr),
+                                     (ndr_pull_flags_fn_t)ndr_pull_drsuapi_MSPrefixMap_Ctr,
+                                     (ndr_print_fn_t)ndr_print_drsuapi_MSPrefixMap_Ctr,
+                                     true);
        }
 
        blob = talloc(mem_ctx, struct prefixMapBlob);