svn commit: samba r20484 - in branches/SAMBA_4_0/source: dsdb/schema libnet librpc/idl

metze at samba.org metze at samba.org
Tue Jan 2 19:29:33 GMT 2007


Author: metze
Date: 2007-01-02 19:29:32 +0000 (Tue, 02 Jan 2007)
New Revision: 20484

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

Log:
get rid of the special case for DN strings

metze
Modified:
   branches/SAMBA_4_0/source/dsdb/schema/schema_init.c
   branches/SAMBA_4_0/source/dsdb/schema/schema_syntax.c
   branches/SAMBA_4_0/source/libnet/libnet_become_dc.c
   branches/SAMBA_4_0/source/librpc/idl/drsuapi.idl


Changeset:
Modified: branches/SAMBA_4_0/source/dsdb/schema/schema_init.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/schema/schema_init.c	2007-01-02 19:24:32 UTC (rev 20483)
+++ branches/SAMBA_4_0/source/dsdb/schema/schema_init.c	2007-01-02 19:29:32 UTC (rev 20484)
@@ -451,8 +451,35 @@
 } while (0)
 
 #define GET_DN_DS(s, r, attr, mem_ctx, p, elem, strict) do { \
-	/* TODO: ! */ \
-	(p)->elem = NULL; \
+	struct drsuapi_DsReplicaAttribute *_a; \
+	_a = dsdb_find_object_attr_name(s, r, attr, NULL); \
+	if (strict && !_a) { \
+		d_printf("%s: %s == NULL\n", __location__, attr); \
+		return WERR_INVALID_PARAM; \
+	} \
+	if (strict && _a->value_ctr.data_blob.num_values != 1) { \
+		d_printf("%s: %s num_values == %u\n", __location__, attr, \
+			_a->value_ctr.data_blob.num_values); \
+		return WERR_INVALID_PARAM; \
+	} \
+	if (strict && !_a->value_ctr.data_blob.values[0].data) { \
+		d_printf("%s: %s data == NULL\n", __location__, attr); \
+		return WERR_INVALID_PARAM; \
+	} \
+	if (_a && _a->value_ctr.data_blob.num_values >= 1 \
+	    && _a->value_ctr.data_blob.values[0].data) { \
+		struct drsuapi_DsReplicaObjectIdentifier3 _id3; \
+		NTSTATUS _nt_status; \
+		_nt_status = ndr_pull_struct_blob_all(_a->value_ctr.data_blob.values[0].data, \
+						      mem_ctx, &_id3,\
+						      (ndr_pull_flags_fn_t)ndr_pull_drsuapi_DsReplicaObjectIdentifier3);\
+		if (!NT_STATUS_IS_OK(_nt_status)) { \
+			return ntstatus_to_werror(_nt_status); \
+		} \
+		(p)->elem = _id3.dn; \
+	} else { \
+		(p)->elem = NULL; \
+	} \
 } while (0)
 
 #define GET_BOOL_DS(s, r, attr, p, elem, strict) do { \

Modified: branches/SAMBA_4_0/source/dsdb/schema/schema_syntax.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/schema/schema_syntax.c	2007-01-02 19:24:32 UTC (rev 20483)
+++ branches/SAMBA_4_0/source/dsdb/schema/schema_syntax.c	2007-01-02 19:29:32 UTC (rev 20484)
@@ -830,20 +830,6 @@
 {
 	uint32_t i;
 
-switch (attr->attributeID_id) {
-case DRSUAPI_ATTRIBUTE_member:
-case DRSUAPI_ATTRIBUTE_objectCategory:
-case DRSUAPI_ATTRIBUTE_hasMasterNCs:
-case DRSUAPI_ATTRIBUTE_dMDLocation:
-case DRSUAPI_ATTRIBUTE_fSMORoleOwner:
-case DRSUAPI_ATTRIBUTE_wellKnownObjects:
-case DRSUAPI_ATTRIBUTE_serverReference:
-case DRSUAPI_ATTRIBUTE_serverReferenceBL:
-case DRSUAPI_ATTRIBUTE_msDS_HasDomainNCs:
-case DRSUAPI_ATTRIBUTE_msDS_hasMasterNCs:
-	return dsdb_syntax_FOOBAR_drsuapi_to_ldb(schema,attr, in, mem_ctx, out);
-}
-
 	out->flags	= 0;
 	out->name	= talloc_strdup(mem_ctx, attr->lDAPDisplayName);
 	W_ERROR_HAVE_NO_MEMORY(out->name);

Modified: branches/SAMBA_4_0/source/libnet/libnet_become_dc.c
===================================================================
--- branches/SAMBA_4_0/source/libnet/libnet_become_dc.c	2007-01-02 19:24:32 UTC (rev 20483)
+++ branches/SAMBA_4_0/source/libnet/libnet_become_dc.c	2007-01-02 19:29:32 UTC (rev 20484)
@@ -31,6 +31,7 @@
 #include "libcli/security/security.h"
 #include "librpc/gen_ndr/ndr_misc.h"
 #include "librpc/gen_ndr/ndr_security.h"
+#include "librpc/gen_ndr/ndr_drsuapi.h"
 
 struct libnet_BecomeDC_state {
 	struct composite_context *creq;
@@ -1154,26 +1155,31 @@
 
 	/* objectCategory: CN=NTDS-DSA,CN=Schema,... */
 	{
-		struct drsuapi_DsAttributeValueDNString *vs;
-		struct drsuapi_DsReplicaObjectIdentifier3 *v;
+		struct drsuapi_DsAttributeValueDataBlob *vs;
+		DATA_BLOB *vd;
+		struct drsuapi_DsReplicaObjectIdentifier3 v[1];
 
-		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDNString, 1);
+		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDataBlob, 1);
 		if (composite_nomem(vs, c)) return;
 
-		v = talloc_array(vs, struct drsuapi_DsReplicaObjectIdentifier3, 1);
-		if (composite_nomem(v, c)) return;
+		vd = talloc_array(vs, DATA_BLOB, 1);
+		if (composite_nomem(vd, c)) return;
 
 		v[0].guid		= GUID_zero();
 		v[0].sid		= s->zero_sid;
-		v[0].dn			= talloc_asprintf(v, "CN=NTDS-DSA,%s",
+		v[0].dn			= talloc_asprintf(vd, "CN=NTDS-DSA,%s",
 							  s->forest.schema_dn_str);
 		if (composite_nomem(v->dn, c)) return;
 
-		vs[0].object		= &v[0];
+		c->status = ndr_push_struct_blob(&vd[0], vd, &v[0],
+						 (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
+		if (!composite_is_ok(c)) return;
 
+		vs[0].data		= &vd[0];
+
 		attrs[i].attid					= DRSUAPI_ATTRIBUTE_objectCategory;
-		attrs[i].value_ctr.dn_string.num_values		= 1;
-		attrs[i].value_ctr.dn_string.values		= vs;
+		attrs[i].value_ctr.data_blob.num_values		= 1;
+		attrs[i].value_ctr.data_blob.values		= vs;
 
 		i++;
 	}
@@ -1206,14 +1212,15 @@
 
 	/* hasMasterNCs: ... */
 	{
-		struct drsuapi_DsAttributeValueDNString *vs;
-		struct drsuapi_DsReplicaObjectIdentifier3 *v;
+		struct drsuapi_DsAttributeValueDataBlob *vs;
+		DATA_BLOB *vd;
+		struct drsuapi_DsReplicaObjectIdentifier3 v[3];
 
-		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDNString, 3);
+		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDataBlob, 3);
 		if (composite_nomem(vs, c)) return;
 
-		v = talloc_array(vs, struct drsuapi_DsReplicaObjectIdentifier3, 3);
-		if (composite_nomem(v, c)) return;
+		vd = talloc_array(vs, DATA_BLOB, 3);
+		if (composite_nomem(vd, c)) return;
 
 		v[0].guid		= GUID_zero();
 		v[0].sid		= s->zero_sid;
@@ -1227,27 +1234,40 @@
 		v[2].sid		= s->zero_sid;
 		v[2].dn			= s->forest.schema_dn_str;
 
-		vs[0].object		= &v[0];
-		vs[1].object		= &v[1];
-		vs[2].object		= &v[2];
+		c->status = ndr_push_struct_blob(&vd[0], vd, &v[0],
+						 (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
+		if (!composite_is_ok(c)) return;
 
+		c->status = ndr_push_struct_blob(&vd[1], vd, &v[1],
+						 (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
+		if (!composite_is_ok(c)) return;
+
+		c->status = ndr_push_struct_blob(&vd[2], vd, &v[2],
+						 (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
+		if (!composite_is_ok(c)) return;
+
+		vs[0].data		= &vd[0];
+		vs[1].data		= &vd[1];
+		vs[2].data		= &vd[2];
+
 		attrs[i].attid					= DRSUAPI_ATTRIBUTE_hasMasterNCs;
-		attrs[i].value_ctr.dn_string.num_values		= 3;
-		attrs[i].value_ctr.dn_string.values		= vs;
+		attrs[i].value_ctr.data_blob.num_values		= 3;
+		attrs[i].value_ctr.data_blob.values		= vs;
 
 		i++;
 	}
 
 	/* msDS-hasMasterNCs: ... */
 	if (w2k3) {
-		struct drsuapi_DsAttributeValueDNString *vs;
-		struct drsuapi_DsReplicaObjectIdentifier3 *v;
+		struct drsuapi_DsAttributeValueDataBlob *vs;
+		DATA_BLOB *vd;
+		struct drsuapi_DsReplicaObjectIdentifier3 v[3];
 
-		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDNString, 3);
+		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDataBlob, 3);
 		if (composite_nomem(vs, c)) return;
 
-		v = talloc_array(vs, struct drsuapi_DsReplicaObjectIdentifier3, 3);
-		if (composite_nomem(v, c)) return;
+		vd = talloc_array(vs, DATA_BLOB, 3);
+		if (composite_nomem(vd, c)) return;
 
 		v[0].guid		= GUID_zero();
 		v[0].sid		= s->zero_sid;
@@ -1261,61 +1281,83 @@
 		v[2].sid		= s->zero_sid;
 		v[2].dn			= s->forest.schema_dn_str;
 
-		vs[0].object		= &v[0];
-		vs[1].object		= &v[1];
-		vs[2].object		= &v[2];
+		c->status = ndr_push_struct_blob(&vd[0], vd, &v[0],
+						 (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
+		if (!composite_is_ok(c)) return;
 
+		c->status = ndr_push_struct_blob(&vd[1], vd, &v[1],
+						 (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
+		if (!composite_is_ok(c)) return;
+
+		c->status = ndr_push_struct_blob(&vd[2], vd, &v[2],
+						 (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
+		if (!composite_is_ok(c)) return;
+
+		vs[0].data		= &vd[0];
+		vs[1].data		= &vd[1];
+		vs[2].data		= &vd[2];
+
 		attrs[i].attid					= DRSUAPI_ATTRIBUTE_msDS_hasMasterNCs;
-		attrs[i].value_ctr.dn_string.num_values		= 3;
-		attrs[i].value_ctr.dn_string.values		= vs;
+		attrs[i].value_ctr.data_blob.num_values		= 3;
+		attrs[i].value_ctr.data_blob.values		= vs;
 
 		i++;
 	}
 
 	/* dMDLocation: CN=Schema,... */
 	{
-		struct drsuapi_DsAttributeValueDNString *vs;
-		struct drsuapi_DsReplicaObjectIdentifier3 *v;
+		struct drsuapi_DsAttributeValueDataBlob *vs;
+		DATA_BLOB *vd;
+		struct drsuapi_DsReplicaObjectIdentifier3 v[1];
 
-		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDNString, 1);
+		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDataBlob, 1);
 		if (composite_nomem(vs, c)) return;
 
-		v = talloc_array(vs, struct drsuapi_DsReplicaObjectIdentifier3, 1);
-		if (composite_nomem(v, c)) return;
+		vd = talloc_array(vs, DATA_BLOB, 1);
+		if (composite_nomem(vd, c)) return;
 
 		v[0].guid		= GUID_zero();
 		v[0].sid		= s->zero_sid;
 		v[0].dn			= s->forest.schema_dn_str;
 
-		vs[0].object		= &v[0];
+		c->status = ndr_push_struct_blob(&vd[0], vd, &v[0],
+						 (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
+		if (!composite_is_ok(c)) return;
 
+		vs[0].data		= &vd[0];
+
 		attrs[i].attid					= DRSUAPI_ATTRIBUTE_dMDLocation;
-		attrs[i].value_ctr.dn_string.num_values		= 1;
-		attrs[i].value_ctr.dn_string.values		= vs;
+		attrs[i].value_ctr.data_blob.num_values		= 1;
+		attrs[i].value_ctr.data_blob.values		= vs;
 
 		i++;
 	}
 
 	/* msDS-HasDomainNCs: <domain_partition> */
 	if (w2k3) {
-		struct drsuapi_DsAttributeValueDNString *vs;
-		struct drsuapi_DsReplicaObjectIdentifier3 *v;
+		struct drsuapi_DsAttributeValueDataBlob *vs;
+		DATA_BLOB *vd;
+		struct drsuapi_DsReplicaObjectIdentifier3 v[1];
 
-		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDNString, 1);
+		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDataBlob, 1);
 		if (composite_nomem(vs, c)) return;
 
-		v = talloc_array(vs, struct drsuapi_DsReplicaObjectIdentifier3, 1);
-		if (composite_nomem(v, c)) return;
+		vd = talloc_array(vs, DATA_BLOB, 1);
+		if (composite_nomem(vd, c)) return;
 
 		v[0].guid		= GUID_zero();
 		v[0].sid		= s->zero_sid;
 		v[0].dn			= s->domain.dn_str;
 
-		vs[0].object		= &v[0];
+		c->status = ndr_push_struct_blob(&vd[0], vd, &v[0],
+						 (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
+		if (!composite_is_ok(c)) return;
 
+		vs[0].data		= &vd[0];
+
 		attrs[i].attid					= DRSUAPI_ATTRIBUTE_msDS_HasDomainNCs;
-		attrs[i].value_ctr.dn_string.num_values		= 1;
-		attrs[i].value_ctr.dn_string.values		= vs;
+		attrs[i].value_ctr.data_blob.num_values		= 1;
+		attrs[i].value_ctr.data_blob.values		= vs;
 
 		i++;
 	}
@@ -1372,24 +1414,29 @@
 
 	/* serverReference: ... */
 	{
-		struct drsuapi_DsAttributeValueDNString *vs;
-		struct drsuapi_DsReplicaObjectIdentifier3 *v;
+		struct drsuapi_DsAttributeValueDataBlob *vs;
+		DATA_BLOB *vd;
+		struct drsuapi_DsReplicaObjectIdentifier3 v[1];
 
-		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDNString, 1);
+		vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDataBlob, 1);
 		if (composite_nomem(vs, c)) return;
 
-		v = talloc_array(vs, struct drsuapi_DsReplicaObjectIdentifier3, 1);
-		if (composite_nomem(v, c)) return;
+		vd = talloc_array(vs, DATA_BLOB, 1);
+		if (composite_nomem(vd, c)) return;
 
 		v[0].guid		= GUID_zero();
 		v[0].sid		= s->zero_sid;
 		v[0].dn			= s->dest_dsa.computer_dn_str;
 
-		vs[0].object		= &v[0];
+		c->status = ndr_push_struct_blob(&vd[0], vd, &v[0],
+						 (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
+		if (!composite_is_ok(c)) return;
 
+		vs[0].data		= &vd[0];
+
 		attrs[i].attid					= DRSUAPI_ATTRIBUTE_serverReference;
-		attrs[i].value_ctr.dn_string.num_values		= 1;
-		attrs[i].value_ctr.dn_string.values		= vs;
+		attrs[i].value_ctr.data_blob.num_values		= 1;
+		attrs[i].value_ctr.data_blob.values		= vs;
 
 		i++;
 	}

Modified: branches/SAMBA_4_0/source/librpc/idl/drsuapi.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/drsuapi.idl	2007-01-02 19:24:32 UTC (rev 20483)
+++ branches/SAMBA_4_0/source/librpc/idl/drsuapi.idl	2007-01-02 19:29:32 UTC (rev 20484)
@@ -519,17 +519,6 @@
 	} drsuapi_DsAttributeValueCtrGUID;
 
 	typedef [nodiscriminant] union {
-		/* DN String */
-		[case(DRSUAPI_ATTRIBUTE_member)]		drsuapi_DsAttributeValueCtrDNString dn_string;
-		[case(DRSUAPI_ATTRIBUTE_objectCategory)]	drsuapi_DsAttributeValueCtrDNString dn_string;
-		[case(DRSUAPI_ATTRIBUTE_hasMasterNCs)]		drsuapi_DsAttributeValueCtrDNString dn_string;
-		[case(DRSUAPI_ATTRIBUTE_dMDLocation)]		drsuapi_DsAttributeValueCtrDNString dn_string;
-		[case(DRSUAPI_ATTRIBUTE_fSMORoleOwner)]		drsuapi_DsAttributeValueCtrDNString dn_string;
-		[case(DRSUAPI_ATTRIBUTE_serverReference)]	drsuapi_DsAttributeValueCtrDNString dn_string;
-		[case(DRSUAPI_ATTRIBUTE_serverReferenceBL)]	drsuapi_DsAttributeValueCtrDNString dn_string;
-		[case(DRSUAPI_ATTRIBUTE_msDS_HasDomainNCs)]	drsuapi_DsAttributeValueCtrDNString dn_string;
-		[case(DRSUAPI_ATTRIBUTE_msDS_hasMasterNCs)]	drsuapi_DsAttributeValueCtrDNString dn_string;
-
 		/* the default is the DATA_BLOB */
 		[default] drsuapi_DsAttributeValueCtrDataBlob data_blob;
 	} drsuapi_DsReplicaAttributeValueCtr;



More information about the samba-cvs mailing list