summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2008-08-15 12:08:10 +1000
committerAndrew Bartlett <abartlet@samba.org>2008-08-15 12:08:10 +1000
commita3faed4bfe14192292d7656d673e9fcc52084075 (patch)
tree042a8410276ac7baf6b4246bc67efaa57854e74a
parent427b3baba3fe5489c96fd79ef1b1ee1adef7b834 (diff)
downloadsamba-a3faed4bfe14192292d7656d673e9fcc52084075.tar.gz
samba-a3faed4bfe14192292d7656d673e9fcc52084075.tar.bz2
samba-a3faed4bfe14192292d7656d673e9fcc52084075.zip
Paramaterise the seperator in ad2OLschema
This will allow me to add a new mode, with the CN=Aggregate schema format automatically generated. Andrew Bartlett (This used to be commit 7d2a890a7077e446e45527847f78bba84d22bc4c)
-rw-r--r--source4/utils/ad2oLschema.c149
1 files changed, 82 insertions, 67 deletions
diff --git a/source4/utils/ad2oLschema.c b/source4/utils/ad2oLschema.c
index 51b03b8e8f..dcc0094ab7 100644
--- a/source4/utils/ad2oLschema.c
+++ b/source4/utils/ad2oLschema.c
@@ -152,6 +152,7 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum convert_
struct ldb_dn *schemadn;
struct schema_conv ret;
struct dsdb_schema *schema;
+ const char *seperator;
char *error_string;
int ldb_ret;
@@ -223,8 +224,10 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum convert_
switch (target) {
case TARGET_OPENLDAP:
+ seperator = "\n ";
break;
case TARGET_FEDORA_DS:
+ seperator = "\n ";
fprintf(out, "dn: cn=schema\n");
break;
}
@@ -236,7 +239,8 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum convert_
const char *syntax = attribute->attributeSyntax_oid;
bool single_value = attribute->isSingleValued;
- const struct syntax_map *map = find_syntax_map_by_ad_oid(syntax);
+ const struct syntax_map *const_map = find_syntax_map_by_ad_oid(syntax);
+ struct syntax_map map, *map_p = NULL;
char *schema_entry = NULL;
int j;
@@ -254,19 +258,21 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum convert_
}
}
- switch (target) {
- case TARGET_OPENLDAP:
- schema_entry = talloc_asprintf(mem_ctx,
- "attributetype (\n"
- " %s\n", oid);
- break;
- case TARGET_FEDORA_DS:
- schema_entry = talloc_asprintf(mem_ctx,
- "attributeTypes: (\n"
- " %s\n", oid);
- break;
+ if (const_map) {
+ map = *const_map;
+
+ /* We might have been asked to remap this oid,
+ * due to a conflict, or lack of
+ * implementation */
+ for (j=0; map.Standard_OID && oid_map && oid_map[j].old_oid; j++) {
+ if (strcasecmp(map.Standard_OID, oid_map[j].old_oid) == 0) {
+ map.Standard_OID = oid_map[j].new_oid;
+ break;
+ }
+ }
+
+ map_p = &map;
}
- IF_NULL_FAIL_RET(schema_entry);
/* We might have been asked to remap this name, due to a conflict */
for (j=0; name && attr_map && attr_map[j].old_attr; j++) {
@@ -276,53 +282,60 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum convert_
}
}
+ switch (target) {
+ case TARGET_OPENLDAP:
+ schema_entry = talloc_asprintf(mem_ctx,
+ "attributetype (");
+ break;
+ case TARGET_FEDORA_DS:
+ schema_entry = talloc_asprintf(mem_ctx,
+ "attributeTypes: (");
+ break;
+ }
+ IF_NULL_FAIL_RET(schema_entry);
+
schema_entry = talloc_asprintf_append(schema_entry,
- " NAME '%s'\n", name);
+ "%s%s%s", seperator, oid, seperator);
+
+ schema_entry = talloc_asprintf_append(schema_entry,
+ "NAME '%s'%s", name, seperator);
IF_NULL_FAIL_RET(schema_entry);
if (description) {
#if 0 /* If you want to re-enable this, you must first figure out a sane escaping of ' in the description */
schema_entry = talloc_asprintf_append(schema_entry,
- " DESC '%s'\n", description);
+ "DESC '%s' ", description);
IF_NULL_FAIL_RET(schema_entry);
#endif
}
- if (map) {
- const char *syntax_oid;
- if (map->equality) {
+ if (map_p) {
+ if (map_p->equality) {
schema_entry = talloc_asprintf_append(schema_entry,
- " EQUALITY %s\n", map->equality);
+ "EQUALITY %s%s", map_p->equality, seperator);
IF_NULL_FAIL_RET(schema_entry);
}
- if (map->substring) {
+ if (map_p->substring) {
schema_entry = talloc_asprintf_append(schema_entry,
- " SUBSTR %s\n", map->substring);
+ "SUBSTR %s%s", map_p->substring, seperator);
IF_NULL_FAIL_RET(schema_entry);
}
- syntax_oid = map->Standard_OID;
- /* We might have been asked to remap this oid,
- * due to a conflict, or lack of
- * implementation */
- for (j=0; syntax_oid && oid_map && oid_map[j].old_oid; j++) {
- if (strcasecmp(syntax_oid, oid_map[j].old_oid) == 0) {
- syntax_oid = oid_map[j].new_oid;
- break;
- }
- }
- schema_entry = talloc_asprintf_append(schema_entry,
- " SYNTAX %s\n", syntax_oid);
- IF_NULL_FAIL_RET(schema_entry);
+
+ syntax = map_p->Standard_OID;
}
+ 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\n");
+ "SINGLE-VALUE%s", seperator);
IF_NULL_FAIL_RET(schema_entry);
}
schema_entry = talloc_asprintf_append(schema_entry,
- " )");
+ ")");
switch (target) {
case TARGET_OPENLDAP:
@@ -357,10 +370,6 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum convert_
continue;
}
- may = dsdb_full_attribute_list(mem_ctx, schema, objectclass_name_as_list, DSDB_SCHEMA_ALL_MAY);
-
- must = dsdb_full_attribute_list(mem_ctx, schema, objectclass_name_as_list, DSDB_SCHEMA_ALL_MUST);
-
/* We might have been asked to remap this oid, due to a conflict */
for (j=0; oid_map && oid_map[j].old_oid; j++) {
if (strcasecmp(oid, oid_map[j].old_oid) == 0) {
@@ -369,64 +378,69 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum convert_
}
}
+ /* We might have been asked to remap this name, due to a conflict */
+ for (j=0; name && attr_map && attr_map[j].old_attr; j++) {
+ if (strcasecmp(name, attr_map[j].old_attr) == 0) {
+ name = attr_map[j].new_attr;
+ break;
+ }
+ }
+
+ may = dsdb_full_attribute_list(mem_ctx, schema, objectclass_name_as_list, DSDB_SCHEMA_ALL_MAY);
+
+ must = dsdb_full_attribute_list(mem_ctx, schema, objectclass_name_as_list, DSDB_SCHEMA_ALL_MUST);
+
switch (target) {
case TARGET_OPENLDAP:
schema_entry = talloc_asprintf(mem_ctx,
- "objectclass (\n"
- " %s\n", oid);
+ "objectclass (");
break;
case TARGET_FEDORA_DS:
schema_entry = talloc_asprintf(mem_ctx,
- "objectClasses: (\n"
- " %s\n", oid);
+ "objectClasses: (");
break;
}
+ schema_entry = talloc_asprintf_append(schema_entry,
+ "%s%s%s", seperator, oid, seperator);
+
IF_NULL_FAIL_RET(schema_entry);
if (!schema_entry) {
ret.failures++;
break;
}
- /* We might have been asked to remap this name, due to a conflict */
- for (j=0; name && attr_map && attr_map[j].old_attr; j++) {
- if (strcasecmp(name, attr_map[j].old_attr) == 0) {
- name = attr_map[j].new_attr;
- break;
- }
- }
-
schema_entry = talloc_asprintf_append(schema_entry,
- " NAME '%s'\n", name);
+ "NAME '%s'%s", name, seperator);
IF_NULL_FAIL_RET(schema_entry);
if (!schema_entry) return ret;
if (description) {
schema_entry = talloc_asprintf_append(schema_entry,
- " DESC '%s'\n", description);
+ "DESC '%s'%s", description, seperator);
IF_NULL_FAIL_RET(schema_entry);
}
if (subClassOf) {
schema_entry = talloc_asprintf_append(schema_entry,
- " SUP %s\n", subClassOf);
+ "SUP %s%s", subClassOf, seperator);
IF_NULL_FAIL_RET(schema_entry);
}
switch (objectClassCategory) {
case 1:
schema_entry = talloc_asprintf_append(schema_entry,
- " STRUCTURAL\n");
+ "STRUCTURAL%s", seperator);
IF_NULL_FAIL_RET(schema_entry);
break;
case 2:
schema_entry = talloc_asprintf_append(schema_entry,
- " ABSTRACT\n");
+ "ABSTRACT%s", seperator);
IF_NULL_FAIL_RET(schema_entry);
break;
case 3:
schema_entry = talloc_asprintf_append(schema_entry,
- " AUXILIARY\n");
+ "AUXILIARY%s", seperator);
IF_NULL_FAIL_RET(schema_entry);
break;
}
@@ -446,17 +460,18 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum convert_
} \
\
schema_entry = talloc_asprintf_append(schema_entry, \
- " %s", \
+ "%s ", \
attr_name); \
IF_NULL_FAIL_RET(schema_entry); \
if (attributes[k+1]) { \
- schema_entry = talloc_asprintf_append(schema_entry, \
- " $"); \
IF_NULL_FAIL_RET(schema_entry); \
if (target == TARGET_OPENLDAP && ((k+1)%5 == 0)) { \
schema_entry = talloc_asprintf_append(schema_entry, \
- "\n "); \
+ "$%s ", seperator); \
IF_NULL_FAIL_RET(schema_entry); \
+ } else { \
+ schema_entry = talloc_asprintf_append(schema_entry, \
+ "$ "); \
} \
} \
} \
@@ -464,30 +479,30 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum convert_
if (must) {
schema_entry = talloc_asprintf_append(schema_entry,
- " MUST (");
+ "MUST ( ");
IF_NULL_FAIL_RET(schema_entry);
APPEND_ATTRS(must);
schema_entry = talloc_asprintf_append(schema_entry,
- " )\n");
+ ")%s", seperator);
IF_NULL_FAIL_RET(schema_entry);
}
if (may) {
schema_entry = talloc_asprintf_append(schema_entry,
- " MAY (");
+ "MAY ( ");
IF_NULL_FAIL_RET(schema_entry);
APPEND_ATTRS(may);
schema_entry = talloc_asprintf_append(schema_entry,
- " )\n");
+ ")%s", seperator);
IF_NULL_FAIL_RET(schema_entry);
}
schema_entry = talloc_asprintf_append(schema_entry,
- " )");
+ ")");
switch (target) {
case TARGET_OPENLDAP: