summaryrefslogtreecommitdiff
path: root/source4/ldap_server/ldap_parse.c
diff options
context:
space:
mode:
authorSimo Sorce <idra@samba.org>2004-11-15 11:40:27 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:05:51 -0500
commit679e95db033fd11d17c1f1ac5e44f6cc4df2220e (patch)
tree2a6138f9c6c66025ac0e68965dc73f32846f0d1b /source4/ldap_server/ldap_parse.c
parent5b397619ccd3a2189c053209387093b60ff53094 (diff)
downloadsamba-679e95db033fd11d17c1f1ac5e44f6cc4df2220e.tar.gz
samba-679e95db033fd11d17c1f1ac5e44f6cc4df2220e.tar.bz2
samba-679e95db033fd11d17c1f1ac5e44f6cc4df2220e.zip
r3754: merge in ldb modules support from the tmp branch ldbPlugins
(This used to be commit 71323f424b4561af1fdddd2358629049be3dad8c)
Diffstat (limited to 'source4/ldap_server/ldap_parse.c')
-rw-r--r--source4/ldap_server/ldap_parse.c75
1 files changed, 74 insertions, 1 deletions
diff --git a/source4/ldap_server/ldap_parse.c b/source4/ldap_server/ldap_parse.c
index b4e0eaadf9..269f51704c 100644
--- a/source4/ldap_server/ldap_parse.c
+++ b/source4/ldap_server/ldap_parse.c
@@ -75,7 +75,80 @@ static char *parse_slash(char *p, char *end) {
} \
} while(0)
-struct ldap_dn *ldap_parse_dn(TALLOC_CTX *mem_ctx, const char *orig_dn)
+#if 0
+static void ldap_parse_attributetypedescription(struct ldap_schema *schema, DATA_BLOB *data)
+{
+ char *desc;
+
+ desc = (char *)talloc(schema, data->lenght + 1);
+ memcpy(desc, data->data, data->lenght);
+ desc[data->lenght] = '\0';
+
+}
+
+static void ldap_parse_objectclassdescription(struct ldap_schema *schema, DATA_BLOB *data)
+{
+ char *desc;
+
+ desc = (char *)talloc(schema, data->lenght + 1);
+ memcpy(desc, data->data, data->lenght);
+ desc[data->lenght] = '\0';
+
+}
+
+static struct ldap_schema *ldap_get_schema(void *mem_ctx, struct ldap_schema *schema, struct ldb_context *ldb)
+{
+ NTSTATUS status;
+ struct ldap_schema *local_schema;
+ struct ldb_message **res;
+ const char *errstr;
+ const char *schema_dn = "cn=schema";
+ const char *attr_filter = "attributeTypeDescription=*";
+ const char *class_filter = "objectClassDescription=*";
+ const char *attrs = "attributeTypeDescription";
+ const char *classes = "objectClassDescription";
+ enum ldb_scope scope = LDAP_SCOPE_SUBTREE;
+ int count, i, j, k;
+
+ local_schema = schema;
+ if (local_schema == NULL) {
+ local_schema = talloc_p(mem_ctx, struct ldap_schema);
+ ALLOC_CHECK(local_schema);
+ }
+
+ count = ldb_search(ldb, schema_dn, scope, attr_filter, attrs, &res);
+
+ for (i = 0; i < count; i++) {
+ if (res[i]->num_elements == 0) {
+ goto attr_done;
+ }
+ for (j = 0; j < res[i]->num_elements; j++) {
+ for (k = 0; res[i]->elements[j].num_values; k++) {
+ ldap_parse_attributetypedescription(local_schema, &(res[i]->elements[j].values[k]));
+ }
+ }
+attr_done:
+ }
+
+ count = ldb_search(ldb, schema_dn, scope, class_filter, classes, &res);
+
+ for (i = 0; i < count; i++) {
+ if (res[i]->num_elements == 0) {
+ goto class_done;
+ }
+ for (j = 0; j < res[i]->num_elements; j++) {
+ for (k = 0; res[i]->elements[j].num_values; k++) {
+ ldap_parse_objectclassdescription(local_schema, &(res[i]->elements[j].values[k]));
+ }
+ }
+class_done:
+ }
+
+ return local_schema;
+}
+#endif
+
+struct ldap_dn *ldap_parse_dn(void *mem_ctx, const char *orig_dn)
{
struct ldap_dn *dn;
struct dn_component *component;