svn commit: samba r16500 - in branches/SOC/mkhl/ldb-map/modules: .
mkhl at samba.org
mkhl at samba.org
Sat Jun 24 19:29:11 GMT 2006
Author: mkhl
Date: 2006-06-24 19:29:10 +0000 (Sat, 24 Jun 2006)
New Revision: 16500
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16500
Log:
So the sorting was a dumb idea and needed forward declarations. Bah.
Fix other compilation issues.
Martin
Modified:
branches/SOC/mkhl/ldb-map/modules/ldb_map.c
Changeset:
Modified: branches/SOC/mkhl/ldb-map/modules/ldb_map.c
===================================================================
--- branches/SOC/mkhl/ldb-map/modules/ldb_map.c 2006-06-24 17:19:09 UTC (rev 16499)
+++ branches/SOC/mkhl/ldb-map/modules/ldb_map.c 2006-06-24 19:29:10 UTC (rev 16500)
@@ -327,7 +327,7 @@
int i;
for (i = 0; i < msg->num_elements; i++) {
- map = find_attr_local(data, msg->elements[i]);
+ map = find_attr_local(data, msg->elements[i].name);
if (map && map->type != MAP_IGNORE)
return 1;
}
@@ -1612,6 +1612,23 @@
/* } */
+/* Add the local record */
+static
+int
+map_add_do_local(struct ldb_async_handle *handle)
+{
+ struct map_async_context *ac;
+
+ ac = talloc_get_type(handle->private_data, struct map_async_context);
+
+ ldb_set_timeout_from_prev_req(ac->module->ldb,
+ ac->orig_req, ac->local_req);
+
+ ac->step = MAP_DO_ADD_LOCAL;
+
+ return ldb_next_request(ac->module, ac->local_req);
+}
+
/* Add a record */
static
int
@@ -1707,10 +1724,12 @@
return LDB_ERR_OPERATIONS_ERROR;
}
-/* Add the local record */
+
+
+/* Modify the local record */
static
int
-map_add_do_local(struct ldb_async_handle *handle)
+map_modify_do_local(struct ldb_async_handle *handle)
{
struct map_async_context *ac;
@@ -1719,12 +1738,50 @@
ldb_set_timeout_from_prev_req(ac->module->ldb,
ac->orig_req, ac->local_req);
- ac->step = MAP_DO_ADD_LOCAL;
+ ac->step = MAP_DO_MODIFY_LOCAL;
return ldb_next_request(ac->module, ac->local_req);
}
+/* Modify the remote record */
+static
+int
+map_modify_do_remote(struct ldb_async_handle *handle)
+{
+ struct map_async_context *ac;
+ struct ldb_message *msg;
+ char *dn;
+ ac = talloc_get_type(handle->private_data, struct map_async_context);
+
+ /* no remote record, add it instead */
+ if (ac->remote_dn == NULL) {
+ /* turn request into 'add' */
+ msg = discard_const_p(struct ldb_message,
+ ac->remote_req->op.mod.message);
+ ac->remote_req->operation = LDB_ADD;
+ ac->remote_req->op.add.message = msg;
+ /* TODO: Could I just leave msg in there? I think so,
+ but it looks clearer this way. */
+
+ /* update local 'IS_MAPPED' */
+ msg = discard_const_p(struct ldb_message,
+ ac->local_req->op.mod.message);
+ dn = ldb_dn_linearize(msg, ac->remote_dn);
+ if (ldb_msg_add_empty(msg, IS_MAPPED, LDB_FLAG_MOD_ADD) != 0)
+ return LDB_ERR_OPERATIONS_ERROR;
+ if (ldb_msg_add_string(msg, IS_MAPPED, dn) != 0)
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+
+ ldb_set_timeout_from_prev_req(ac->module->ldb,
+ ac->orig_req, ac->remote_req);
+
+ ac->step = MAP_DO_MODIFY_REMOTE;
+
+ return ldb_next_remote_request(ac->module, ac->remote_req);
+}
+
/* Modify a record */
static
int
@@ -1817,97 +1874,35 @@
return LDB_ERR_OPERATIONS_ERROR;
}
-/* Modify the remote record */
+
+/* Delete the local record */
static
int
-map_modify_do_remote(struct ldb_async_handle *handle)
+map_delete_do_local(struct ldb_async_handle *handle)
{
struct map_async_context *ac;
- struct ldb_message *msg;
- char *dn;
ac = talloc_get_type(handle->private_data, struct map_async_context);
- /* no remote record, add it instead */
- if (ac->remote_dn == NULL) {
- /* turn request into 'add' */
- msg = discard_const_p(struct ldb_message,
- ac->remote_req->op.mod.message);
- ac->remote_req->operation = LDB_ADD;
- ac->remote_req->op.add.message = msg;
- /* TODO: Could I just leave msg in there? I think so,
- but it looks clearer this way. */
-
- /* update local 'IS_MAPPED' */
- msg = discard_const_p(struct ldb_message,
- ac->local_req->op.mod.message);
- dn = ldb_dn_linearize(msg, ac->remote_dn);
- if (ldb_msg_add_empty(msg, IS_MAPPED, LDB_FLAG_MOD_ADD) != 0)
- return LDB_ERR_OPERATIONS_ERROR;
- if (ldb_msg_add_string(msg, IS_MAPPED, dn) != 0)
- return LDB_ERR_OPERATIONS_ERROR;
+ /* prepare the local operation */
+ ac->local_req = talloc_zero(ac, struct ldb_request);
+ if (ac->local_req == NULL) {
+ ldb_oom(ac->module->ldb);
+ return LDB_ERR_OPERATIONS_ERROR;
}
- ldb_set_timeout_from_prev_req(ac->module->ldb,
- ac->orig_req, ac->remote_req);
+ *(ac->local_req) = *(ac->orig_req); /* copy the request */
- ac->step = MAP_DO_MODIFY_REMOTE;
-
- return ldb_next_remote_request(ac->module, ac->remote_req);
-}
-
-/* Modify the local record */
-static
-int
-map_modify_do_local(struct ldb_async_handle *handle)
-{
- struct map_async_context *ac;
-
- ac = talloc_get_type(handle->private_data, struct map_async_context);
-
+ ac->local_req->async.context = NULL;
+ ac->local_req->async.callback = NULL;
ldb_set_timeout_from_prev_req(ac->module->ldb,
ac->orig_req, ac->local_req);
- ac->step = MAP_DO_MODIFY_LOCAL;
+ ac->step = MAP_DO_DELETE_LOCAL;
return ldb_next_request(ac->module, ac->local_req);
}
-
-/* Delete a record */
-static
-int
-map_delete(struct ldb_module *module,
- struct ldb_request *req)
-{
- struct ldb_async_handle *h;
- struct map_async_context *ac;
-
- /* do not manipulate our control entries */
- if (ldb_dn_is_special(req->op.del.dn))
- return ldb_next_request(module, req);
-
- /* TODO: check that DN is under the local baseDN */
-
- /* prepare async context and handle */
- h = map_init_handle(req, module);
- if (h == NULL)
- return LDB_ERR_OPERATIONS_ERROR;
- ac = talloc_get_type(h->private_data, struct map_async_context);
-
- /* return or own handle to deal with this call */
- req->async.handle = h;
-
- /* prepare the search operation */
- ac->search_req = build_self_req(ac, req->op.del.dn);
- if (ac->search_req == NULL)
- return LDB_ERR_OPERATIONS_ERROR;
-
- ac->step = MAP_SEARCH_SELF_DELETE;
-
- return ldb_next_request(module, ac->search_req);
-}
-
/* Delete the remote record */
static
int
@@ -1943,46 +1938,17 @@
return ldb_next_remote_request(ac->module, ac->remote_req);
}
-/* Delete the local record */
+/* Delete a record */
static
int
-map_delete_do_local(struct ldb_async_handle *handle)
-{
- struct map_async_context *ac;
-
- ac = talloc_get_type(handle->private_data, struct map_async_context);
-
- /* prepare the local operation */
- ac->local_req = talloc_zero(ac, struct ldb_request);
- if (ac->local_req == NULL) {
- ldb_oom(ac->module->ldb);
- return LDB_ERR_OPERATIONS_ERROR;
- }
-
- *(ac->local_req) = *(ac->orig_req); /* copy the request */
-
- ac->local_req->async.context = NULL;
- ac->local_req->async.callback = NULL;
- ldb_set_timeout_from_prev_req(ac->module->ldb,
- ac->orig_req, ac->local_req);
-
- ac->step = MAP_DO_DELETE_LOCAL;
-
- return ldb_next_request(ac->module, ac->local_req);
-}
-
-
-/* Rename a record */
-static
-int
-map_rename(struct ldb_module *module,
+map_delete(struct ldb_module *module,
struct ldb_request *req)
{
struct ldb_async_handle *h;
struct map_async_context *ac;
/* do not manipulate our control entries */
- if (ldb_dn_is_special(req->op.rename.olddn))
+ if (ldb_dn_is_special(req->op.del.dn))
return ldb_next_request(module, req);
/* TODO: check that DN is under the local baseDN */
@@ -1997,51 +1963,42 @@
req->async.handle = h;
/* prepare the search operation */
- ac->search_req = build_self_req(ac, req->op.rename.olddn);
+ ac->search_req = build_self_req(ac, req->op.del.dn);
if (ac->search_req == NULL)
return LDB_ERR_OPERATIONS_ERROR;
- ac->step = MAP_SEARCH_SELF_RENAME;
+ ac->step = MAP_SEARCH_SELF_DELETE;
return ldb_next_request(module, ac->search_req);
}
-/* Rename the remote record */
+
+/* Rename the local record */
static
int
-map_rename_do_remote(struct ldb_async_handle *handle)
+map_rename_do_local(struct ldb_async_handle *handle)
{
struct map_async_context *ac;
ac = talloc_get_type(handle->private_data, struct map_async_context);
- /* no remote record, continue locally */
- if (ac->remote_dn == NULL)
- return map_rename_do_local(handle);
-
- /* prepare the remote operation */
- ac->remote_req = talloc_zero(ac, struct ldb_request);
- if (ac->remote_req == NULL) {
+ /* prepare the local operation */
+ ac->local_req = talloc_zero(ac, struct ldb_request);
+ if (ac->local_req == NULL) {
ldb_oom(ac->module->ldb);
return LDB_ERR_OPERATIONS_ERROR;
}
- *(ac->remote_req) = *(ac->orig_req); /* copy the request */
+ *(ac->local_req) = *(ac->orig_req); /* copy the request */
- ac->remote_req->async.context = NULL;
- ac->remote_req->async.callback = NULL;
+ ac->local_req->async.context = NULL;
+ ac->local_req->async.callback = NULL;
ldb_set_timeout_from_prev_req(ac->module->ldb,
- ac->orig_req, ac->remote_req);
+ ac->orig_req, ac->local_req);
- /* operate on remote record */
- ac->remote_req->op.rename.olddn = ac->remote_dn;
- ac->remote_req->op.rename.newdn
- = map_local_dn(ac->module, ac->remote_req,
- ac->orig_req->op.rename.newdn);
+ ac->step = MAP_DO_RENAME_LOCAL;
- ac->step = MAP_DO_RENAME_REMOTE;
-
- return ldb_next_remote_request(ac->module, ac->remote_req);
+ return ldb_next_request(ac->module, ac->local_req);
}
/* Update the local 'IS_MAPPED' attribute */
@@ -2096,38 +2053,82 @@
return LDB_ERR_OPERATIONS_ERROR;
}
-/* Rename the local record */
+/* Rename the remote record */
static
int
-map_rename_do_local(struct ldb_async_handle *handle)
+map_rename_do_remote(struct ldb_async_handle *handle)
{
struct map_async_context *ac;
ac = talloc_get_type(handle->private_data, struct map_async_context);
- /* prepare the local operation */
- ac->local_req = talloc_zero(ac, struct ldb_request);
- if (ac->local_req == NULL) {
+ /* no remote record, continue locally */
+ if (ac->remote_dn == NULL)
+ return map_rename_do_local(handle);
+
+ /* prepare the remote operation */
+ ac->remote_req = talloc_zero(ac, struct ldb_request);
+ if (ac->remote_req == NULL) {
ldb_oom(ac->module->ldb);
return LDB_ERR_OPERATIONS_ERROR;
}
- *(ac->local_req) = *(ac->orig_req); /* copy the request */
+ *(ac->remote_req) = *(ac->orig_req); /* copy the request */
- ac->local_req->async.context = NULL;
- ac->local_req->async.callback = NULL;
+ ac->remote_req->async.context = NULL;
+ ac->remote_req->async.callback = NULL;
ldb_set_timeout_from_prev_req(ac->module->ldb,
- ac->orig_req, ac->local_req);
+ ac->orig_req, ac->remote_req);
- ac->step = MAP_DO_RENAME_LOCAL;
+ /* operate on remote record */
+ ac->remote_req->op.rename.olddn = ac->remote_dn;
+ ac->remote_req->op.rename.newdn
+ = map_local_dn(ac->module, ac->remote_req,
+ ac->orig_req->op.rename.newdn);
- return ldb_next_request(ac->module, ac->local_req);
+ ac->step = MAP_DO_RENAME_REMOTE;
+
+ return ldb_next_remote_request(ac->module, ac->remote_req);
}
+/* Rename a record */
+static
+int
+map_rename(struct ldb_module *module,
+ struct ldb_request *req)
+{
+ struct ldb_async_handle *h;
+ struct map_async_context *ac;
+ /* do not manipulate our control entries */
+ if (ldb_dn_is_special(req->op.rename.olddn))
+ return ldb_next_request(module, req);
+
+ /* TODO: check that DN is under the local baseDN */
+
+ /* prepare async context and handle */
+ h = map_init_handle(req, module);
+ if (h == NULL)
+ return LDB_ERR_OPERATIONS_ERROR;
+ ac = talloc_get_type(h->private_data, struct map_async_context);
+
+ /* return or own handle to deal with this call */
+ req->async.handle = h;
+
+ /* prepare the search operation */
+ ac->search_req = build_self_req(ac, req->op.rename.olddn);
+ if (ac->search_req == NULL)
+ return LDB_ERR_OPERATIONS_ERROR;
+
+ ac->step = MAP_SEARCH_SELF_RENAME;
+
+ return ldb_next_request(module, ac->search_req);
+}
+
+
/* Asynchronism */
-/* last request was run for the current step */
+/* last request that was run for the current step */
static
struct ldb_request *
map_async_get_req(struct map_async_context *ac)
@@ -2210,8 +2211,7 @@
/* Async trampoline */
static
int
-map_async_wait(struct ldb_async_handle *handle,
- enum ldb_async_wait_type type)
+mp_async_wait(struct ldb_async_handle *handle)
{
struct map_async_context *ac;
struct ldb_request *req;
@@ -2349,7 +2349,7 @@
if (dn == NULL) {
ldb_debug(module->ldb, LDB_DEBUG_ERROR, "ldb_map: "
"Failed to construct the '%s' DN!\n", MAP_DN_NAME);
- goto failed;
+ return LDB_ERR_OPERATIONS_ERROR;
}
ret = ldb_search(module->ldb, dn, LDB_SCOPE_BASE, NULL, attrs, &res);
@@ -2362,7 +2362,7 @@
"No results for '%s=%s'!\n", MAP_DN_NAME, name);
return LDB_ERR_CONSTRAINT_VIOLATION;
}
- if (result->count > 1) {
+ if (res->count > 1) {
ldb_debug(module->ldb, LDB_DEBUG_ERROR, "ldb_map: "
"Too many results for '%s=%s'!\n", MAP_DN_NAME, name);
return LDB_ERR_CONSTRAINT_VIOLATION;
@@ -2398,31 +2398,31 @@
/* specified ones go first */
for (i = 0; attrs[i].local_name; i++) {
- data->context.attribute_maps
+ data->attribute_maps
= talloc_realloc(data, data->attribute_maps,
struct ldb_map_attribute, last+1);
- data->context.attribute_maps[last] = attrs[i];
+ data->attribute_maps[last] = attrs[i];
last++;
}
/* built-in ones go last */
for (i = 0; builtin_attribute_maps[i].local_name; i++) {
- data->context.attribute_maps
+ data->attribute_maps
= talloc_realloc(data, data->attribute_maps,
struct ldb_map_attribute, last+1);
- data->context.attribute_maps[last] = builtin_attribute_maps[i];
+ data->attribute_maps[last] = builtin_attribute_maps[i];
last++;
}
/* ensure 'local_name == NULL' for the last entry */
- data->context.attribute_maps
- = talloc_realloc(data, data->context.attribute_maps,
+ data->attribute_maps
+ = talloc_realloc(data, data->attribute_maps,
struct ldb_map_attribute, last+1);
- memset(&data->context.attribute_maps[last], 0,
+ memset(&data->attribute_maps[last], 0,
sizeof(struct ldb_map_attribute));
/* store list of objectClass maps */
- data->context.objectclass_maps = ocls;
+ data->objectclass_maps = ocls;
}
More information about the samba-cvs
mailing list