summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2007-01-02 14:53:45 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:35:57 -0500
commitb885bc4a20e99a77d433b46c7af68cb0b5914208 (patch)
treec800fb738a1f45a25f56275add681a7d6a9a118c /source4
parentd70852659b4dbef9979be81f5d42e5587fc94c75 (diff)
downloadsamba-b885bc4a20e99a77d433b46c7af68cb0b5914208.tar.gz
samba-b885bc4a20e99a77d433b46c7af68cb0b5914208.tar.bz2
samba-b885bc4a20e99a77d433b46c7af68cb0b5914208.zip
r20477: get rid of the spcial case for unicode strings
metze (This used to be commit ececda44c74ae4ccbaa0492acb67a88aa5c05126)
Diffstat (limited to 'source4')
-rw-r--r--source4/dsdb/schema/schema_init.c28
-rw-r--r--source4/dsdb/schema/schema_syntax.c11
-rw-r--r--source4/librpc/idl/drsuapi.idl9
3 files changed, 22 insertions, 26 deletions
diff --git a/source4/dsdb/schema/schema_init.c b/source4/dsdb/schema/schema_init.c
index 41998a16db..6de87708c7 100644
--- a/source4/dsdb/schema/schema_init.c
+++ b/source4/dsdb/schema/schema_init.c
@@ -427,18 +427,34 @@ static struct drsuapi_DsReplicaAttribute *dsdb_find_object_attr_name(struct dsdb
d_printf("%s: %s == NULL\n", __location__, attr); \
return WERR_INVALID_PARAM; \
} \
- if (strict && _a->value_ctr.unicode_string.num_values != 1) { \
+ if (strict && _a->value_ctr.data_blob.num_values != 1) { \
d_printf("%s: %s num_values == %u\n", __location__, attr, \
- _a->value_ctr.unicode_string.num_values); \
+ _a->value_ctr.data_blob.num_values); \
return WERR_INVALID_PARAM; \
} \
- if (_a && _a->value_ctr.unicode_string.num_values >= 1) { \
- (p)->elem = talloc_steal(mem_ctx, _a->value_ctr.unicode_string.values[0].string);\
+ if (_a && _a->value_ctr.data_blob.num_values >= 1) { \
+ ssize_t _ret; \
+ _ret = convert_string_talloc(mem_ctx, CH_UTF16, CH_UNIX, \
+ _a->value_ctr.data_blob.values[0].data->data, \
+ _a->value_ctr.data_blob.values[0].data->length, \
+ (void **)discard_const(&(p)->elem)); \
+ if (_ret == -1) { \
+ DEBUG(0,("%s: invalid data!\n", attr)); \
+ dump_data(0, \
+ _a->value_ctr.data_blob.values[0].data->data, \
+ _a->value_ctr.data_blob.values[0].data->length); \
+ return WERR_FOOBAR; \
+ } \
} else { \
(p)->elem = NULL; \
} \
} while (0)
+#define GET_DN_DS(s, r, attr, mem_ctx, p, elem, strict) do { \
+ /* TODO: ! */ \
+ (p)->elem = NULL; \
+} while (0)
+
#define GET_BOOL_DS(s, r, attr, p, elem, strict) do { \
struct drsuapi_DsReplicaAttribute *_a; \
_a = dsdb_find_object_attr_name(s, r, attr, NULL); \
@@ -594,8 +610,8 @@ WERROR dsdb_class_from_drsuapi(struct dsdb_schema *schema,
GET_UINT32_DS(schema, r, "objectClassCategory", obj, objectClassCategory);
GET_STRING_DS(schema, r, "rDNAttID", mem_ctx, obj, rDNAttID, False);
- GET_STRING_DS(schema, r, "defaultObjectCategory", mem_ctx, obj, defaultObjectCategory, True);
-
+ GET_DN_DS(schema, r, "defaultObjectCategory", mem_ctx, obj, defaultObjectCategory, True);
+
GET_STRING_DS(schema, r, "subClassOf", mem_ctx, obj, subClassOf, True);
obj->systemAuxiliaryClass = NULL;
diff --git a/source4/dsdb/schema/schema_syntax.c b/source4/dsdb/schema/schema_syntax.c
index 8a2747bd9d..5a96f11d6b 100644
--- a/source4/dsdb/schema/schema_syntax.c
+++ b/source4/dsdb/schema/schema_syntax.c
@@ -747,17 +747,6 @@ static WERROR dsdb_syntax_UNICODE_drsuapi_to_ldb(const struct dsdb_schema *schem
{
uint32_t i;
-switch (attr->attributeID_id) {
-case DRSUAPI_ATTRIBUTE_description:
-case DRSUAPI_ATTRIBUTE_adminDisplayName:
-case DRSUAPI_ATTRIBUTE_adminDescription:
-case DRSUAPI_ATTRIBUTE_lDAPDisplayName:
-case DRSUAPI_ATTRIBUTE_name:
-case DRSUAPI_ATTRIBUTE_sAMAccountName:
-case DRSUAPI_ATTRIBUTE_gPLink:
- 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);
diff --git a/source4/librpc/idl/drsuapi.idl b/source4/librpc/idl/drsuapi.idl
index 624835121f..79f6e6928a 100644
--- a/source4/librpc/idl/drsuapi.idl
+++ b/source4/librpc/idl/drsuapi.idl
@@ -519,15 +519,6 @@ interface drsuapi
} drsuapi_DsAttributeValueCtrGUID;
typedef [nodiscriminant] union {
- /* UnicodeString */
- [case(DRSUAPI_ATTRIBUTE_description)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
- [case(DRSUAPI_ATTRIBUTE_adminDisplayName)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
- [case(DRSUAPI_ATTRIBUTE_adminDescription)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
- [case(DRSUAPI_ATTRIBUTE_lDAPDisplayName)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
- [case(DRSUAPI_ATTRIBUTE_name)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
- [case(DRSUAPI_ATTRIBUTE_sAMAccountName)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
- [case(DRSUAPI_ATTRIBUTE_gPLink)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
-
/* DN String */
[case(DRSUAPI_ATTRIBUTE_member)] drsuapi_DsAttributeValueCtrDNString dn_string;
[case(DRSUAPI_ATTRIBUTE_objectCategory)] drsuapi_DsAttributeValueCtrDNString dn_string;