1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-24 02:04:21 +03:00

Pull in all the schema information during DRS schema fetch

This includes things such as allowed attributes, which were not
populated into the schema structure before.

Andrew Bartlett
This commit is contained in:
Andrew Bartlett 2009-03-04 14:06:11 +11:00
parent 952bdffaad
commit 52542e1aff

View File

@ -1202,6 +1202,34 @@ static struct drsuapi_DsReplicaAttribute *dsdb_find_object_attr_name(struct dsdb
} \
} while (0)
#define GET_STRING_LIST_DS(s, r, attr, mem_ctx, p, elem, strict) do { \
int get_string_list_counter; \
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; \
} \
(p)->elem = _a ? talloc_array(mem_ctx, const char *, _a->value_ctr.num_values + 1) : NULL; \
for (get_string_list_counter=0; \
_a && get_string_list_counter < _a->value_ctr.num_values; \
get_string_list_counter++) { \
size_t _ret; \
if (!convert_string_talloc_convenience(mem_ctx, s->iconv_convenience, CH_UTF16, CH_UNIX, \
_a->value_ctr.values[get_string_list_counter].blob->data, \
_a->value_ctr.values[get_string_list_counter].blob->length, \
(void **)discard_const(&(p)->elem[get_string_list_counter]), &_ret, false)) { \
DEBUG(0,("%s: invalid data!\n", attr)); \
dump_data(0, \
_a->value_ctr.values[get_string_list_counter].blob->data, \
_a->value_ctr.values[get_string_list_counter].blob->length); \
return WERR_FOOBAR; \
} \
(p)->elem[get_string_list_counter+1] = NULL; \
} \
talloc_steal(mem_ctx, (p)->elem); \
} while (0)
#define GET_DN_DS(s, r, attr, mem_ctx, p, elem, strict) do { \
struct drsuapi_DsReplicaAttribute *_a; \
_a = dsdb_find_object_attr_name(s, r, attr, NULL); \
@ -1412,17 +1440,18 @@ WERROR dsdb_class_from_drsuapi(struct dsdb_schema *schema,
GET_STRING_DS(schema, r, "subClassOf", mem_ctx, obj, subClassOf, true);
obj->systemAuxiliaryClass = NULL;
obj->systemPossSuperiors = NULL;
obj->systemMustContain = NULL;
obj->systemMayContain = NULL;
obj->auxiliaryClass = NULL;
obj->possSuperiors = NULL;
obj->mustContain = NULL;
obj->mayContain = NULL;
GET_STRING_LIST_DS(schema, r, "systemAuxiliaryClass", mem_ctx, obj, systemAuxiliaryClass, false);
GET_STRING_LIST_DS(schema, r, "auxiliaryClass", mem_ctx, obj, auxiliaryClass, false);
obj->possibleInferiors = NULL;
GET_STRING_LIST_DS(schema, r, "systemMustContain", mem_ctx, obj, systemMustContain, false);
GET_STRING_LIST_DS(schema, r, "systemMayContain", mem_ctx, obj, systemMayContain, false);
GET_STRING_LIST_DS(schema, r, "mustContain", mem_ctx, obj, mustContain, false);
GET_STRING_LIST_DS(schema, r, "mayContain", mem_ctx, obj, mayContain, false);
GET_STRING_LIST_DS(schema, r, "systemPossSuperiors", mem_ctx, obj, systemPossSuperiors, false);
GET_STRING_LIST_DS(schema, r, "possSuperiors", mem_ctx, obj, possSuperiors, false);
GET_STRING_LIST_DS(schema, r, "possibleInferiors", mem_ctx, obj, possibleInferiors, false);
GET_STRING_DS(schema, r, "defaultSecurityDescriptor", mem_ctx, obj, defaultSecurityDescriptor, false);