s4-schema_syntax: Use remote prefixMap to map remote ATTID to local one
authorKamen Mazdrashki <kamenim@samba.org>
Thu, 9 Dec 2010 02:45:17 +0000 (04:45 +0200)
committerKamen Mazdrashki <kamenim@samba.org>
Tue, 14 Dec 2010 23:51:19 +0000 (00:51 +0100)
in dsdb_attribute_drsuapi_to_ldb() function.

drsuapi_DsReplicaAttribute *in parameter come from remote DC
so we can't rely on in->attid to map it directly to an
dsdb_attribute in our local schema cache

source4/dsdb/schema/schema_syntax.c

index 2f8f9a58349e535ca264302c3279d8d0b7f68114..1c30065618e5110cec4eb26c488b94bf2b529b01 100644 (file)
@@ -2642,17 +2642,25 @@ WERROR dsdb_attribute_drsuapi_to_ldb(struct ldb_context *ldb,
 {
        const struct dsdb_attribute *sa;
        struct dsdb_syntax_ctx syntax_ctx;
+       uint32_t attid_local;
 
-       sa = dsdb_attribute_by_attributeID_id(schema, in->attid);
+       /* use default syntax conversion context */
+       dsdb_syntax_ctx_init(&syntax_ctx, ldb, schema);
+       syntax_ctx.pfm_remote = pfm_remote;
+
+       /* map remote ATTID to local ATTID */
+       if (!dsdb_syntax_attid_from_remote_attid(&syntax_ctx, mem_ctx, in->attid, &attid_local)) {
+               DEBUG(0,(__location__ "Error: Can't find local ATTID for 0x%08X\n",
+                        in->attid));
+               return WERR_FOOBAR;
+       }
+
+       sa = dsdb_attribute_by_attributeID_id(schema, attid_local);
        if (!sa) {
                DEBUG(1,(__location__ ": Unknown attributeID_id 0x%08X\n", in->attid));
                return WERR_FOOBAR;
        }
 
-       /* use default syntax conversion context */
-       dsdb_syntax_ctx_init(&syntax_ctx, ldb, schema);
-       syntax_ctx.pfm_remote = pfm_remote;
-
        return sa->syntax->drsuapi_to_ldb(&syntax_ctx, sa, in, mem_ctx, out);
 }