svn commit: samba r20733 - in branches/SAMBA_4_0/source: dsdb/repl dsdb/schema torture/libnet

metze at samba.org metze at samba.org
Sat Jan 13 15:29:47 GMT 2007


Author: metze
Date: 2007-01-13 15:29:47 +0000 (Sat, 13 Jan 2007)
New Revision: 20733

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

Log:
add a function to load the oid mappings from ldb_val's 

metze
Modified:
   branches/SAMBA_4_0/source/dsdb/repl/replicated_objects.c
   branches/SAMBA_4_0/source/dsdb/schema/schema_init.c
   branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c


Changeset:
Modified: branches/SAMBA_4_0/source/dsdb/repl/replicated_objects.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/repl/replicated_objects.c	2007-01-13 15:28:24 UTC (rev 20732)
+++ branches/SAMBA_4_0/source/dsdb/repl/replicated_objects.c	2007-01-13 15:29:47 UTC (rev 20733)
@@ -187,7 +187,7 @@
 	uint32_t i;
 	int ret;
 
-	status = dsdb_verify_oid_mappings(schema, mapping_ctr);
+	status = dsdb_verify_oid_mappings_drsuapi(schema, mapping_ctr);
 	W_ERROR_NOT_OK_RETURN(status);
 
 	out = talloc_zero(mem_ctx, struct dsdb_extended_replicated_objects);

Modified: branches/SAMBA_4_0/source/dsdb/schema/schema_init.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/schema/schema_init.c	2007-01-13 15:28:24 UTC (rev 20732)
+++ branches/SAMBA_4_0/source/dsdb/schema/schema_init.c	2007-01-13 15:29:47 UTC (rev 20733)
@@ -26,8 +26,9 @@
 #include "lib/util/dlinklist.h"
 #include "librpc/gen_ndr/ndr_misc.h"
 #include "librpc/gen_ndr/ndr_drsuapi.h"
+#include "librpc/gen_ndr/ndr_drsblobs.h"
 
-WERROR dsdb_load_oid_mappings(struct dsdb_schema *schema, const struct drsuapi_DsReplicaOIDMapping_Ctr *ctr)
+WERROR dsdb_load_oid_mappings_drsuapi(struct dsdb_schema *schema, const struct drsuapi_DsReplicaOIDMapping_Ctr *ctr)
 {
 	uint32_t i,j;
 
@@ -74,8 +75,52 @@
 	return WERR_OK;
 }
 
-WERROR dsdb_verify_oid_mappings(const struct dsdb_schema *schema, const struct drsuapi_DsReplicaOIDMapping_Ctr *ctr)
+WERROR dsdb_load_oid_mappings_ldb(struct dsdb_schema *schema,
+				  const struct ldb_val *prefixMap,
+				  const struct ldb_val *schemaInfo)
 {
+	WERROR status;
+	NTSTATUS nt_status;
+	struct prefixMapBlob pfm;
+	char *schema_info;
+
+	nt_status = ndr_pull_struct_blob(prefixMap, schema, &pfm,
+					 (ndr_pull_flags_fn_t)ndr_pull_prefixMapBlob);
+	if (!NT_STATUS_IS_OK(nt_status)) {
+		return ntstatus_to_werror(nt_status);
+	}
+
+	if (pfm.version != PREFIX_MAP_VERSION_DSDB) {
+		return WERR_FOOBAR;
+	}
+
+	if (schemaInfo->length != 21 && schemaInfo->data[0] == 0xFF) {
+		return WERR_FOOBAR;
+	}
+
+	/* append the schema info as last element */
+	pfm.ctr.dsdb.num_mappings++;
+	pfm.ctr.dsdb.mappings = talloc_realloc(schema, pfm.ctr.dsdb.mappings,
+					       struct drsuapi_DsReplicaOIDMapping,
+					       pfm.ctr.dsdb.num_mappings);
+	W_ERROR_HAVE_NO_MEMORY(pfm.ctr.dsdb.mappings);
+
+	schema_info = data_blob_hex_string(pfm.ctr.dsdb.mappings, schemaInfo);
+	W_ERROR_HAVE_NO_MEMORY(schema_info);
+
+	pfm.ctr.dsdb.mappings[pfm.ctr.dsdb.num_mappings - 1].id_prefix	= 0;
+	pfm.ctr.dsdb.mappings[pfm.ctr.dsdb.num_mappings - 1].oid.oid	= schema_info;
+
+	/* call the drsuapi version */
+	status = dsdb_load_oid_mappings_drsuapi(schema, &pfm.ctr.dsdb);
+	talloc_free(pfm.ctr.dsdb.mappings);
+	W_ERROR_NOT_OK_RETURN(status);
+
+	return WERR_OK;
+}
+
+WERROR dsdb_verify_oid_mappings_drsuapi(const struct dsdb_schema *schema, const struct drsuapi_DsReplicaOIDMapping_Ctr *ctr)
+{
 	uint32_t i,j;
 
 	for (i=0; i < ctr->num_mappings; i++) {

Modified: branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c
===================================================================
--- branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c	2007-01-13 15:28:24 UTC (rev 20732)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c	2007-01-13 15:29:47 UTC (rev 20733)
@@ -456,12 +456,12 @@
 		s->schema = talloc_zero(s, struct dsdb_schema);
 		NT_STATUS_HAVE_NO_MEMORY(s->schema);
 
-		status = dsdb_load_oid_mappings(s->schema, mapping_ctr);
+		status = dsdb_load_oid_mappings_drsuapi(s->schema, mapping_ctr);
 		if (!W_ERROR_IS_OK(status)) {
 			return werror_to_ntstatus(status);
 		}
 	} else {
-		status = dsdb_verify_oid_mappings(s->schema, mapping_ctr);
+		status = dsdb_verify_oid_mappings_drsuapi(s->schema, mapping_ctr);
 		if (!W_ERROR_IS_OK(status)) {
 			return werror_to_ntstatus(status);
 		}



More information about the samba-cvs mailing list