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:
parent
203544e690
commit
3c0f03ade2
@ -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;
|
||||||
|
@ -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++;
|
||||||
|
Loading…
Reference in New Issue
Block a user