1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

s4:dsdb/schema: add a function to generate the "extendedAttributeInfo" values

metze
This commit is contained in:
Stefan Metzmacher 2008-11-14 08:49:06 +01:00
parent 203544e690
commit 3c0f03ade2
2 changed files with 87 additions and 8 deletions

View File

@ -20,6 +20,7 @@
*/
#include "includes.h"
#include "dsdb/samdb/samdb.h"
#include "librpc/ndr/libndr.h"
#define IF_NULL_FAIL_RET(x) do { \
if (!x) { \
@ -36,7 +37,12 @@ char *schema_attribute_description(TALLOC_CTX *mem_ctx,
const char *equality,
const char *substring,
const char *syntax,
bool single_value, bool operational)
bool single_value, bool operational,
uint32_t *range_lower,
uint32_t *range_upper,
const char *property_guid,
const char *property_set_guid,
bool indexed, bool system_only)
{
char *schema_entry = talloc_asprintf(mem_ctx,
"(%s%s%s", seperator, oid, seperator);
@ -55,11 +61,13 @@ char *schema_attribute_description(TALLOC_CTX *mem_ctx,
"SUBSTR %s%s", substring, seperator);
IF_NULL_FAIL_RET(schema_entry);
}
schema_entry = talloc_asprintf_append(schema_entry,
"SYNTAX %s%s", syntax, seperator);
IF_NULL_FAIL_RET(schema_entry);
if (syntax) {
schema_entry = talloc_asprintf_append(schema_entry,
"SYNTAX %s%s", syntax, seperator);
IF_NULL_FAIL_RET(schema_entry);
}
if (single_value) {
schema_entry = talloc_asprintf_append(schema_entry,
"SINGLE-VALUE%s", seperator);
@ -71,7 +79,47 @@ char *schema_attribute_description(TALLOC_CTX *mem_ctx,
"NO-USER-MODIFICATION%s", seperator);
IF_NULL_FAIL_RET(schema_entry);
}
if (range_lower) {
schema_entry = talloc_asprintf_append(schema_entry,
"RANGE-LOWER '%u'%s",
*range_lower, seperator);
IF_NULL_FAIL_RET(schema_entry);
}
if (range_upper) {
schema_entry = talloc_asprintf_append(schema_entry,
"RANGE-UPPER '%u'%s",
*range_upper, seperator);
IF_NULL_FAIL_RET(schema_entry);
}
if (property_guid) {
schema_entry = talloc_asprintf_append(schema_entry,
"PROPERTY-GUID '%s'%s",
property_guid, seperator);
IF_NULL_FAIL_RET(schema_entry);
}
if (property_set_guid) {
schema_entry = talloc_asprintf_append(schema_entry,
"PROPERTY-SET-GUID '%s'%s",
property_set_guid, seperator);
IF_NULL_FAIL_RET(schema_entry);
}
if (indexed) {
schema_entry = talloc_asprintf_append(schema_entry,
"INDEXED%s", seperator);
IF_NULL_FAIL_RET(schema_entry);
}
if (system_only) {
schema_entry = talloc_asprintf_append(schema_entry,
"SYSTEM-ONLY%s", seperator);
IF_NULL_FAIL_RET(schema_entry);
}
schema_entry = talloc_asprintf_append(schema_entry,
")");
return schema_entry;
@ -94,6 +142,34 @@ char *schema_attribute_to_description(TALLOC_CTX *mem_ctx, const struct dsdb_att
attribute->lDAPDisplayName,
NULL, NULL, talloc_asprintf(tmp_ctx, "'%s'", syntax),
attribute->isSingleValued,
attribute->systemOnly,/* TODO: is this correct? */
NULL, NULL, NULL, NULL,
false, false);
talloc_free(tmp_ctx);
return schema_description;
}
char *schema_attribute_to_extendedInfo(TALLOC_CTX *mem_ctx, const struct dsdb_attribute *attribute)
{
char *schema_description;
TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx);
if (!tmp_ctx) {
return NULL;
}
schema_description
= schema_attribute_description(mem_ctx,
TARGET_AD_SCHEMA_SUBENTRY,
" ",
attribute->attributeID_oid,
attribute->lDAPDisplayName,
NULL, NULL, NULL,
false, false,
attribute->rangeLower,
attribute->rangeUpper,
GUID_hexstring(tmp_ctx, &attribute->schemaIDGUID),
GUID_hexstring(tmp_ctx, &attribute->attributeSecurityGUID),
(attribute->searchFlags & SEARCH_FLAG_ATTINDEX),
attribute->systemOnly);
talloc_free(tmp_ctx);
return schema_description;

View File

@ -278,7 +278,10 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum dsdb_sch
substring,
syntax,
single_value,
false);
false,
NULL, NULL,
NULL, NULL,
false, false);
if (schema_entry == NULL) {
ret.failures++;