r20475: remove special case for GUID values
authorStefan Metzmacher <metze@samba.org>
Tue, 2 Jan 2007 13:54:37 +0000 (13:54 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:35:56 +0000 (14:35 -0500)
metze

source/dsdb/schema/schema_init.c
source/dsdb/schema/schema_syntax.c
source/libnet/libnet_become_dc.c
source/librpc/idl/drsuapi.idl

index 4c781946e2c8f7546b56734865a321b274a34f66..23b5fd9dcc130efb6e0fc71ff2117cf723d4793c 100644 (file)
@@ -23,7 +23,8 @@
 #include "includes.h"
 #include "dsdb/samdb/samdb.h"
 #include "lib/util/dlinklist.h"
-#include "librpc/gen_ndr/drsuapi.h"
+#include "librpc/gen_ndr/ndr_misc.h"
+#include "librpc/gen_ndr/ndr_drsuapi.h"
 
 WERROR dsdb_load_oid_mappings(struct dsdb_schema *schema, const struct drsuapi_DsReplicaOIDMapping_Ctr *ctr)
 {
@@ -479,12 +480,19 @@ static struct drsuapi_DsReplicaAttribute *dsdb_find_object_attr_name(struct dsdb
        } \
 } while (0)
 
-#define GET_GUID_DS(s, r, attr, p, elem) do { \
+#define GET_GUID_DS(s, r, attr, mem_ctx, p, elem) do { \
        struct drsuapi_DsReplicaAttribute *_a; \
        _a = dsdb_find_object_attr_name(s, r, attr, NULL); \
-       if (_a && _a->value_ctr.guid.num_values >= 1 \
-           && _a->value_ctr.guid.values[0].guid) { \
-               (p)->elem = *_a->value_ctr.guid.values[0].guid;\
+       if (_a && _a->value_ctr.data_blob.num_values >= 1 \
+           && _a->value_ctr.data_blob.values[0].data \
+           && _a->value_ctr.data_blob.values[0].data->length == 16) { \
+               NTSTATUS _nt_status; \
+               _nt_status = ndr_pull_struct_blob_all(_a->value_ctr.data_blob.values[0].data, \
+                                                     mem_ctx, &(p)->elem, \
+                                                     (ndr_pull_flags_fn_t)ndr_pull_GUID); \
+               if (!NT_STATUS_IS_OK(_nt_status)) { \
+                       return ntstatus_to_werror(_nt_status); \
+               } \
        } else { \
                ZERO_STRUCT((p)->elem);\
        } \
@@ -519,10 +527,10 @@ WERROR dsdb_attribute_from_drsuapi(struct dsdb_schema *schema,
                        win_errstr(status)));
                return status;
        }
-       GET_GUID_DS(schema, r, "schemaIDGUID", attr, schemaIDGUID);
+       GET_GUID_DS(schema, r, "schemaIDGUID", mem_ctx, attr, schemaIDGUID);
        GET_UINT32_DS(schema, r, "mAPIID", attr, mAPIID);
 
-       GET_GUID_DS(schema, r, "attributeSecurityGUID", attr, attributeSecurityGUID);
+       GET_GUID_DS(schema, r, "attributeSecurityGUID", mem_ctx, attr, attributeSecurityGUID);
 
        GET_UINT32_DS(schema, r, "searchFlags", attr, searchFlags);
        GET_UINT32_DS(schema, r, "systemFlags", attr, systemFlags);
@@ -581,7 +589,7 @@ WERROR dsdb_class_from_drsuapi(struct dsdb_schema *schema,
                        win_errstr(status)));
                return status;
        }
-       GET_GUID_DS(schema, r, "schemaIDGUID", obj, schemaIDGUID);
+       GET_GUID_DS(schema, r, "schemaIDGUID", mem_ctx, obj, schemaIDGUID);
 
        GET_UINT32_DS(schema, r, "objectClassCategory", obj, objectClassCategory);
        GET_STRING_DS(schema, r, "rDNAttID", mem_ctx, obj, rDNAttID, False);
index a0c72141109655960182cd221b0d2c7a9db3e1f8..f31dfbda2bd5f5cf23e303f06b4003bf2f7be365 100644 (file)
@@ -506,12 +506,6 @@ static WERROR dsdb_syntax_DATA_BLOB_drsuapi_to_ldb(const struct dsdb_schema *sch
 {
        uint32_t i;
 
-switch (attr->attributeID_id) {
-case DRSUAPI_ATTRIBUTE_invocationId:
-case DRSUAPI_ATTRIBUTE_schemaIDGUID:
-       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);
index eb929d57e45cff106ce5f748ac5cf54627b0eba4..30fc1774d5f3e727e828695c188e38fc507d0664 100644 (file)
@@ -29,6 +29,7 @@
 #include "dsdb/common/flags.h"
 #include "librpc/gen_ndr/ndr_drsuapi_c.h"
 #include "libcli/security/security.h"
+#include "librpc/gen_ndr/ndr_misc.h"
 #include "librpc/gen_ndr/ndr_security.h"
 
 struct libnet_BecomeDC_state {
@@ -1113,7 +1114,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
                                               NULL);
                if (composite_nomem(v, c)) return;
 
-               c->status = ndr_push_struct_blob(&vd[0], r, v,(ndr_push_flags_fn_t)ndr_push_security_descriptor);
+               c->status = ndr_push_struct_blob(&vd[0], vd, v,(ndr_push_flags_fn_t)ndr_push_security_descriptor);
                if (!composite_is_ok(c)) return;
 
                vs[0].data              = &vd[0];
@@ -1176,22 +1177,26 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
 
        /* invocationId: random guid */
        {
-               struct drsuapi_DsAttributeValueGUID *vs;
-               struct GUID *v;
+               struct drsuapi_DsAttributeValueDataBlob *vs;
+               DATA_BLOB *vd;
+               const struct GUID *v;
 
-               vs = talloc_array(attrs, struct drsuapi_DsAttributeValueGUID, 1);
+               vs = talloc_array(attrs, struct drsuapi_DsAttributeValueDataBlob, 1);
                if (composite_nomem(vs, c)) return;
 
-               v = talloc_array(vs, struct GUID, 1);
-               if (composite_nomem(v, c)) return;
+               vd = talloc_array(vs, DATA_BLOB, 1);
+               if (composite_nomem(vd, c)) return;
 
-               v[0]                    = s->dest_dsa.invocation_id;
+               v = &s->dest_dsa.invocation_id;
 
-               vs[0].guid              = &v[0];
+               c->status = ndr_push_struct_blob(&vd[0], vd, v, (ndr_push_flags_fn_t)ndr_push_GUID);
+               if (!composite_is_ok(c)) return;
+
+               vs[0].data              = &vd[0];
 
                attrs[i].attid                                  = DRSUAPI_ATTRIBUTE_invocationId;
-               attrs[i].value_ctr.guid.num_values              = 1;
-               attrs[i].value_ctr.guid.values                  = vs;
+               attrs[i].value_ctr.data_blob.num_values         = 1;
+               attrs[i].value_ctr.data_blob.values             = vs;
 
                i++;
        }
index c7c8bc3f7cb0127181daa088e9eb0157f73ac305..dbe0e92be0b98770376f235d4cb13831e221bb21 100644 (file)
@@ -534,10 +534,6 @@ interface drsuapi
                [case(DRSUAPI_ATTRIBUTE_systemFlags)]           drsuapi_DsAttributeValueCtrUINT32 uint32;
                [case(DRSUAPI_ATTRIBUTE_msDS_Behavior_Version)] drsuapi_DsAttributeValueCtrUINT32 uint32;
 
-               /* GUID */
-               [case(DRSUAPI_ATTRIBUTE_invocationId)] drsuapi_DsAttributeValueCtrGUID guid;
-               [case(DRSUAPI_ATTRIBUTE_schemaIDGUID)] drsuapi_DsAttributeValueCtrGUID guid;
-
                /* UnicodeString */
                [case(DRSUAPI_ATTRIBUTE_description)]           drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
                [case(DRSUAPI_ATTRIBUTE_adminDisplayName)]      drsuapi_DsAttributeValueCtrUnicodeString unicode_string;