1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +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 "includes.h"
#include "dsdb/samdb/samdb.h" #include "dsdb/samdb/samdb.h"
#include "librpc/ndr/libndr.h"
#define IF_NULL_FAIL_RET(x) do { \ #define IF_NULL_FAIL_RET(x) do { \
if (!x) { \ if (!x) { \
@ -36,7 +37,12 @@ char *schema_attribute_description(TALLOC_CTX *mem_ctx,
const char *equality, const char *equality,
const char *substring, const char *substring,
const char *syntax, 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, char *schema_entry = talloc_asprintf(mem_ctx,
"(%s%s%s", seperator, oid, seperator); "(%s%s%s", seperator, oid, seperator);
@ -56,9 +62,11 @@ char *schema_attribute_description(TALLOC_CTX *mem_ctx,
IF_NULL_FAIL_RET(schema_entry); IF_NULL_FAIL_RET(schema_entry);
} }
if (syntax) {
schema_entry = talloc_asprintf_append(schema_entry, schema_entry = talloc_asprintf_append(schema_entry,
"SYNTAX %s%s", syntax, seperator); "SYNTAX %s%s", syntax, seperator);
IF_NULL_FAIL_RET(schema_entry); IF_NULL_FAIL_RET(schema_entry);
}
if (single_value) { if (single_value) {
schema_entry = talloc_asprintf_append(schema_entry, schema_entry = talloc_asprintf_append(schema_entry,
@ -72,6 +80,46 @@ char *schema_attribute_description(TALLOC_CTX *mem_ctx,
IF_NULL_FAIL_RET(schema_entry); 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, schema_entry = talloc_asprintf_append(schema_entry,
")"); ")");
return schema_entry; return schema_entry;
@ -94,6 +142,34 @@ char *schema_attribute_to_description(TALLOC_CTX *mem_ctx, const struct dsdb_att
attribute->lDAPDisplayName, attribute->lDAPDisplayName,
NULL, NULL, talloc_asprintf(tmp_ctx, "'%s'", syntax), NULL, NULL, talloc_asprintf(tmp_ctx, "'%s'", syntax),
attribute->isSingleValued, 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); attribute->systemOnly);
talloc_free(tmp_ctx); talloc_free(tmp_ctx);
return schema_description; return schema_description;

View File

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