svn commit: samba r20766 - in branches/SAMBA_4_0/source: dsdb/schema torture/ldap

metze at samba.org metze at samba.org
Sun Jan 14 15:22:13 GMT 2007


Author: metze
Date: 2007-01-14 15:22:12 +0000 (Sun, 14 Jan 2007)
New Revision: 20766

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=20766

Log:
when creating dsdb_attribute or dsdb_class structs from ldb, try the oid mapping
if the dsdb_schema has mappings attached

metze
Modified:
   branches/SAMBA_4_0/source/dsdb/schema/schema_init.c
   branches/SAMBA_4_0/source/torture/ldap/schema.c


Changeset:
Modified: branches/SAMBA_4_0/source/dsdb/schema/schema_init.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/schema/schema_init.c	2007-01-14 15:17:48 UTC (rev 20765)
+++ branches/SAMBA_4_0/source/dsdb/schema/schema_init.c	2007-01-14 15:22:12 UTC (rev 20766)
@@ -361,13 +361,28 @@
 	}\
 } while (0)
 
-WERROR dsdb_attribute_from_ldb(struct ldb_message *msg, TALLOC_CTX *mem_ctx, struct dsdb_attribute *attr)
+WERROR dsdb_attribute_from_ldb(const struct dsdb_schema *schema,
+			       struct ldb_message *msg,
+			       TALLOC_CTX *mem_ctx,
+			       struct dsdb_attribute *attr)
 {
+	WERROR status;
+
 	GET_STRING_LDB(msg, "cn", mem_ctx, attr, cn, True);
 	GET_STRING_LDB(msg, "lDAPDisplayName", mem_ctx, attr, lDAPDisplayName, True);
 	GET_STRING_LDB(msg, "attributeID", mem_ctx, attr, attributeID_oid, True);
-	/* set an invalid value */
-	attr->attributeID_id = 0xFFFFFFFF;
+	if (schema->num_prefixes == 0) {
+		/* set an invalid value */
+		attr->attributeID_id = 0xFFFFFFFF;
+	} else {
+		status = dsdb_map_oid2int(schema, 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);
 	GET_UINT32_LDB(msg, "mAPIID", attr, mAPIID);
 
@@ -379,8 +394,18 @@
 	GET_UINT32_LDB(msg, "linkID", attr, linkID);
 
 	GET_STRING_LDB(msg, "attributeSyntax", mem_ctx, attr, attributeSyntax_oid, True);
-	/* set an invalid value */
-	attr->attributeSyntax_id = 0xFFFFFFFF;
+	if (schema->num_prefixes == 0) {
+		/* set an invalid value */
+		attr->attributeSyntax_id = 0xFFFFFFFF;
+	} else {
+		status = dsdb_map_oid2int(schema, attr->attributeSyntax_oid, &attr->attributeSyntax_id);
+		if (!W_ERROR_IS_OK(status)) {
+			DEBUG(0,("%s: '%s': unable to map attributeSyntax_ %s: %s\n",
+				__location__, attr->lDAPDisplayName, attr->attributeSyntax_oid,
+				win_errstr(status)));
+			return status;
+		}
+	}
 	GET_UINT32_LDB(msg, "oMSyntax", attr, oMSyntax);
 	GET_BLOB_LDB(msg, "oMObjectClass", mem_ctx, attr, oMObjectClass);
 
@@ -408,13 +433,28 @@
 	return WERR_OK;
 }
 
-WERROR dsdb_class_from_ldb(struct ldb_message *msg, TALLOC_CTX *mem_ctx, struct dsdb_class *obj)
+WERROR dsdb_class_from_ldb(const struct dsdb_schema *schema,
+			   struct ldb_message *msg,
+			   TALLOC_CTX *mem_ctx,
+			   struct dsdb_class *obj)
 {
+	WERROR status;
+
 	GET_STRING_LDB(msg, "cn", mem_ctx, obj, cn, True);
 	GET_STRING_LDB(msg, "lDAPDisplayName", mem_ctx, obj, lDAPDisplayName, True);
 	GET_STRING_LDB(msg, "governsID", mem_ctx, obj, governsID_oid, True);
-	/* set an invalid value */
-	obj->governsID_id = 0xFFFFFFFF;
+	if (schema->num_prefixes == 0) {
+		/* set an invalid value */
+		obj->governsID_id = 0xFFFFFFFF;
+	} else {
+		status = dsdb_map_oid2int(schema, obj->governsID_oid, &obj->governsID_id);
+		if (!W_ERROR_IS_OK(status)) {
+			DEBUG(0,("%s: '%s': unable to map governsID %s: %s\n",
+				__location__, obj->lDAPDisplayName, obj->governsID_oid,
+				win_errstr(status)));
+			return status;
+		}
+	}
 	GET_GUID_LDB(msg, "schemaIDGUID", obj, schemaIDGUID);
 
 	GET_UINT32_LDB(msg, "objectClassCategory", obj, objectClassCategory);

Modified: branches/SAMBA_4_0/source/torture/ldap/schema.c
===================================================================
--- branches/SAMBA_4_0/source/torture/ldap/schema.c	2007-01-14 15:17:48 UTC (rev 20765)
+++ branches/SAMBA_4_0/source/torture/ldap/schema.c	2007-01-14 15:22:12 UTC (rev 20766)
@@ -210,7 +210,7 @@
 		goto failed;
 	}
 
-	status = dsdb_attribute_from_ldb(msg, attr, attr);
+	status = dsdb_attribute_from_ldb(schema, msg, attr, attr);
 	if (!W_ERROR_IS_OK(status)) {
 		goto failed;
 	}
@@ -233,7 +233,7 @@
 		goto failed;
 	}
 
-	status = dsdb_class_from_ldb(msg, obj, obj);
+	status = dsdb_class_from_ldb(schema, msg, obj, obj);
 	if (!W_ERROR_IS_OK(status)) {
 		goto failed;
 	}



More information about the samba-cvs mailing list