Author: mkhl Date: 2006-08-01 22:59:36 +0000 (Tue, 01 Aug 2006) New Revision: 17369
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17369 Log: Merge from mainline, r17368. Removed: branches/SOC/mkhl/samdb-map/ldb_modules/password_sync.c Modified: branches/SOC/mkhl/ldb-map/common/ldb_match.c branches/SOC/mkhl/ldb-map/include/ldb.h branches/SOC/mkhl/ldb-map/include/ldb_private.h branches/SOC/mkhl/ldb-map/ldb_ildap/ldb_ildap.c branches/SOC/mkhl/ldb-map/ldb_tdb/ldb_tdb.c Changeset: Modified: branches/SOC/mkhl/ldb-map/common/ldb_match.c =================================================================== --- branches/SOC/mkhl/ldb-map/common/ldb_match.c 2006-08-01 22:46:49 UTC (rev 17368) +++ branches/SOC/mkhl/ldb-map/common/ldb_match.c 2006-08-01 22:59:36 UTC (rev 17369) @@ -81,9 +81,9 @@ match if node is present */ static int ldb_match_present(struct ldb_context *ldb, - struct ldb_message *msg, - struct ldb_parse_tree *tree, - enum ldb_scope scope) + const struct ldb_message *msg, + const struct ldb_parse_tree *tree, + enum ldb_scope scope) { if (ldb_attr_dn(tree->u.present.attr) == 0) { return 1; @@ -97,8 +97,8 @@ } static int ldb_match_comparison(struct ldb_context *ldb, - struct ldb_message *msg, - struct ldb_parse_tree *tree, + const struct ldb_message *msg, + const struct ldb_parse_tree *tree, enum ldb_scope scope, enum ldb_parse_op comp_op) { @@ -138,8 +138,8 @@ match a simple leaf node */ static int ldb_match_equality(struct ldb_context *ldb, - struct ldb_message *msg, - struct ldb_parse_tree *tree, + const struct ldb_message *msg, + const struct ldb_parse_tree *tree, enum ldb_scope scope) { unsigned int i; @@ -183,7 +183,7 @@ } static int ldb_wildcard_compare(struct ldb_context *ldb, - struct ldb_parse_tree *tree, + const struct ldb_parse_tree *tree, const struct ldb_val value) { const struct ldb_attrib_handler *h; @@ -254,8 +254,8 @@ match a simple leaf node */ static int ldb_match_substring(struct ldb_context *ldb, - struct ldb_message *msg, - struct ldb_parse_tree *tree, + const struct ldb_message *msg, + const struct ldb_parse_tree *tree, enum ldb_scope scope) { unsigned int i; @@ -279,7 +279,7 @@ /* bitwise-and comparator */ -static int ldb_comparator_and(struct ldb_val *v1, struct ldb_val *v2) +static int ldb_comparator_and(const struct ldb_val *v1, const struct ldb_val *v2) { uint64_t i1, i2; i1 = strtoull((char *)v1->data, NULL, 0); @@ -290,7 +290,7 @@ /* bitwise-or comparator */ -static int ldb_comparator_or(struct ldb_val *v1, struct ldb_val *v2) +static int ldb_comparator_or(const struct ldb_val *v1, const struct ldb_val *v2) { uint64_t i1, i2; i1 = strtoull((char *)v1->data, NULL, 0); @@ -303,19 +303,19 @@ extended match, handles things like bitops */ static int ldb_match_extended(struct ldb_context *ldb, - struct ldb_message *msg, - struct ldb_parse_tree *tree, + const struct ldb_message *msg, + const struct ldb_parse_tree *tree, enum ldb_scope scope) { int i; const struct { const char *oid; - int (*comparator)(struct ldb_val *, struct ldb_val *); + int (*comparator)(const struct ldb_val *, const struct ldb_val *); } rules[] = { { LDB_OID_COMPARATOR_AND, ldb_comparator_and}, { LDB_OID_COMPARATOR_OR, ldb_comparator_or} }; - int (*comp)(struct ldb_val *, struct ldb_val *) = NULL; + int (*comp)(const struct ldb_val *, const struct ldb_val *) = NULL; struct ldb_message_element *el; if (tree->u.extended.dnAttributes) { @@ -366,8 +366,8 @@ this is a recursive function, and does short-circuit evaluation */ static int ldb_match_message(struct ldb_context *ldb, - struct ldb_message *msg, - struct ldb_parse_tree *tree, + const struct ldb_message *msg, + const struct ldb_parse_tree *tree, enum ldb_scope scope) { unsigned int i; @@ -418,8 +418,8 @@ } int ldb_match_msg(struct ldb_context *ldb, - struct ldb_message *msg, - struct ldb_parse_tree *tree, + const struct ldb_message *msg, + const struct ldb_parse_tree *tree, const struct ldb_dn *base, enum ldb_scope scope) { Modified: branches/SOC/mkhl/ldb-map/include/ldb.h =================================================================== --- branches/SOC/mkhl/ldb-map/include/ldb.h 2006-08-01 22:46:49 UTC (rev 17368) +++ branches/SOC/mkhl/ldb-map/include/ldb.h 2006-08-01 22:59:36 UTC (rev 17369) @@ -502,6 +502,22 @@ */ #define LDB_EXTENDED_START_TLS_OID "1.3.6.1.4.1.1466.20037" +/** + OID for LDAP Extended Operation START_TLS. + + This Extended operation is used to start a new TLS + channel on top of a clear text channel. +*/ +#define LDB_EXTENDED_DYNAMIC_OID "1.3.6.1.4.1.1466.101.119.1" + +/** + OID for LDAP Extended Operation START_TLS. + + This Extended operation is used to start a new TLS + channel on top of a clear text channel. +*/ +#define LDB_EXTENDED_FAST_BIND_OID "1.2.840.113556.1.4.1781" + struct ldb_paged_control { int size; int cookie_len; Modified: branches/SOC/mkhl/ldb-map/include/ldb_private.h =================================================================== --- branches/SOC/mkhl/ldb-map/include/ldb_private.h 2006-08-01 22:46:49 UTC (rev 17368) +++ branches/SOC/mkhl/ldb-map/include/ldb_private.h 2006-08-01 22:59:36 UTC (rev 17369) @@ -171,8 +171,8 @@ int ldb_sqlite3_init(void); int ldb_match_msg(struct ldb_context *ldb, - struct ldb_message *msg, - struct ldb_parse_tree *tree, + const struct ldb_message *msg, + const struct ldb_parse_tree *tree, const struct ldb_dn *base, enum ldb_scope scope); Modified: branches/SOC/mkhl/ldb-map/ldb_ildap/ldb_ildap.c =================================================================== --- branches/SOC/mkhl/ldb-map/ldb_ildap/ldb_ildap.c 2006-08-01 22:46:49 UTC (rev 17368) +++ branches/SOC/mkhl/ldb-map/ldb_ildap/ldb_ildap.c 2006-08-01 22:59:36 UTC (rev 17369) @@ -323,21 +323,18 @@ } } -static int ildb_request_send(struct ldb_module *module, struct ldap_message *msg, - void *context, - int (*callback)(struct ldb_context *, void *, struct ldb_reply *), - int timeout, - struct ldb_handle **handle) +static struct ldb_handle *init_ildb_handle(struct ldb_module *module, + void *context, + int (*callback)(struct ldb_context *, void *, struct ldb_reply *)) { struct ildb_private *ildb = talloc_get_type(module->private_data, struct ildb_private); struct ildb_context *ildb_ac; struct ldb_handle *h; - struct ldap_request *req; h = talloc_zero(ildb->ldap, struct ldb_handle); if (h == NULL) { ldb_set_errstring(module->ldb, talloc_asprintf(module, "Out of Memory")); - return LDB_ERR_OPERATIONS_ERROR; + return NULL; } h->module = module; @@ -346,7 +343,7 @@ if (ildb_ac == NULL) { ldb_set_errstring(module->ldb, talloc_asprintf(module, "Out of Memory")); talloc_free(h); - return LDB_ERR_OPERATIONS_ERROR; + return NULL; } h->private_data = (void *)ildb_ac; @@ -354,6 +351,30 @@ h->state = LDB_ASYNC_INIT; h->status = LDB_SUCCESS; + ildb_ac->module = module; + ildb_ac->context = context; + ildb_ac->callback = callback; + + return h; +} + +static int ildb_request_send(struct ldb_module *module, struct ldap_message *msg, + void *context, + int (*callback)(struct ldb_context *, void *, struct ldb_reply *), + int timeout, + struct ldb_handle **handle) +{ + struct ildb_private *ildb = talloc_get_type(module->private_data, struct ildb_private); + struct ldb_handle *h = init_ildb_handle(module, context, callback); + struct ildb_context *ildb_ac; + struct ldap_request *req; + + if (!h) { + return LDB_ERR_OPERATIONS_ERROR; + } + + ildb_ac = talloc_get_type(h->private_data, struct ildb_context); + req = ldap_request_send(ildb->ldap, msg); if (req == NULL) { ldb_set_errstring(module->ldb, talloc_asprintf(module, "async send request failed")); @@ -366,13 +387,6 @@ } ildb_ac->req = talloc_steal(ildb_ac, req); - ildb_ac->module = module; - ildb_ac->context = context; - ildb_ac->callback = callback; - - req->async.fn = ildb_callback; - req->async.private_data = (void *)h; - talloc_free(req->time_event); req->time_event = NULL; if (timeout) { @@ -381,10 +395,32 @@ ildb_request_timeout, h); } + req->async.fn = ildb_callback; + req->async.private_data = (void *)h; + *handle = h; - return LDB_SUCCESS; +} +static int ildb_request_noop(struct ldb_module *module, struct ldb_request *req) +{ + struct ldb_handle *h = init_ildb_handle(module, req->context, req->callback); + struct ildb_context *ildb_ac; + int ret = LDB_SUCCESS; + + if (!h) { + return LDB_ERR_OPERATIONS_ERROR; + } + + ildb_ac = talloc_get_type(h->private_data, struct ildb_context); + + req->handle = h; + + if (ildb_ac->callback) { + ret = ildb_ac->callback(module->ldb, ildb_ac->context, NULL); + } + req->handle->state = LDB_ASYNC_DONE; + return ret; } /* @@ -466,7 +502,7 @@ /* ignore ltdb specials */ if (ldb_dn_is_special(req->op.add.message->dn)) { - return LDB_SUCCESS; + return ildb_request_noop(module, req); } msg = new_ldap_message(ildb->ldap); @@ -516,7 +552,7 @@ /* ignore ltdb specials */ if (ldb_dn_is_special(req->op.mod.message->dn)) { - return LDB_SUCCESS; + return ildb_request_noop(module, req); } msg = new_ldap_message(ildb->ldap); @@ -564,7 +600,7 @@ /* ignore ltdb specials */ if (ldb_dn_is_special(req->op.del.dn)) { - return LDB_SUCCESS; + return ildb_request_noop(module, req); } msg = new_ldap_message(ildb->ldap); @@ -595,7 +631,7 @@ /* ignore ltdb specials */ if (ldb_dn_is_special(req->op.rename.olddn) || ldb_dn_is_special(req->op.rename.newdn)) { - return LDB_SUCCESS; + return ildb_request_noop(module, req); } msg = new_ldap_message(ildb->ldap); Modified: branches/SOC/mkhl/ldb-map/ldb_tdb/ldb_tdb.c =================================================================== --- branches/SOC/mkhl/ldb-map/ldb_tdb/ldb_tdb.c 2006-08-01 22:46:49 UTC (rev 17368) +++ branches/SOC/mkhl/ldb-map/ldb_tdb/ldb_tdb.c 2006-08-01 22:59:36 UTC (rev 17369) @@ -270,35 +270,27 @@ } ret = ltdb_store(module, msg, TDB_INSERT); - if (ret != LDB_SUCCESS) { - switch (ret) { - case LDB_ERR_ENTRY_ALREADY_EXISTS: - { - TALLOC_CTX *mem_ctx = talloc_new(module); - char *errstring, *dn; - if (!mem_ctx) { - break; - } - dn = ldb_dn_linearize(mem_ctx, msg->dn); - if (!dn) { - break; - } - errstring = talloc_asprintf(mem_ctx, "Entry %s already exists", - dn); - ldb_set_errstring(module->ldb, errstring); - talloc_free(mem_ctx); - break; + + if (ret == LDB_ERR_ENTRY_ALREADY_EXISTS) { + char *dn; + + dn = ldb_dn_linearize(module, msg->dn); + if (!dn) { + return ret; } - } + ldb_set_errstring(module->ldb, talloc_asprintf(module, "Entry %s already exists", dn)); + talloc_free(dn); return ret; } - - ret = ltdb_modified(module, msg->dn); - if (ret != LDB_SUCCESS) { - return LDB_ERR_OPERATIONS_ERROR; + + if (ret == LDB_SUCCESS) { + ret = ltdb_modified(module, msg->dn); + if (ret != LDB_SUCCESS) { + return LDB_ERR_OPERATIONS_ERROR; + } } - return LDB_SUCCESS; + return ret; } /* Deleted: branches/SOC/mkhl/samdb-map/ldb_modules/password_sync.c ===================================================================