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
===================================================================

Reply via email to