s4-schema: Set ATTID in schema cache from "msDS-IntId"
authorKamen Mazdrashki <kamen.mazdrashki@postpath.com>
Fri, 18 Dec 2009 02:08:52 +0000 (04:08 +0200)
committerAndrew Tridgell <tridge@samba.org>
Mon, 21 Dec 2009 12:44:29 +0000 (23:44 +1100)
According to http://msdn.microsoft.com/en-us/library/cc223224%28PROT.13%29.aspx
some Attributes OIDs may not use prefixMap.
Setting ATTID in Schema Cache here should work, although
this code snippet should be moved in separate function.

Signed-off-by: Andrew Tridgell <tridge@samba.org>
source4/dsdb/schema/schema_init.c

index 4af36838cda9658874aa693dcd5650ff67f33b5f..b8cbedcb7d115a486720cad898eb1bbfae03d9c5 100644 (file)
@@ -558,14 +558,19 @@ WERROR dsdb_attribute_from_ldb(struct ldb_context *ldb,
                /* set an invalid value */
                attr->attributeID_id = 0xFFFFFFFF;
        } else {
-               status = dsdb_schema_pfm_make_attid(schema->prefixmap,
-                                                   attr->attributeID_oid,
-                                                   &attr->attributeID_id);
-               if (!W_ERROR_IS_OK(status)) {
-                       DEBUG(0,("%s: '%s': unable to map attributeID %s: %s\n",
-                               __location__, attr->lDAPDisplayName, attr->attributeID_oid,
-                               win_errstr(status)));
-                       return status;
+               /* check if msDS-IntId element is set */
+               attr->attributeID_id = samdb_result_uint(msg, "msDS-IntId", 0xFFFFFFFF);
+               if (attr->attributeID_id == 0xFFFFFFFF) {
+                       /* msDS-IntId is not set, make */
+                       status = dsdb_schema_pfm_make_attid(schema->prefixmap,
+                                                           attr->attributeID_oid,
+                                                           &attr->attributeID_id);
+                       if (!W_ERROR_IS_OK(status)) {
+                               DEBUG(0,("%s: '%s': unable to map attributeID %s: %s\n",
+                                       __location__, attr->lDAPDisplayName, attr->attributeID_oid,
+                                       win_errstr(status)));
+                               return status;
+                       }
                }
        }
        GET_GUID_LDB(msg, "schemaIDGUID", attr, schemaIDGUID);