summaryrefslogtreecommitdiff
path: root/source4/dsdb/samdb/ldb_modules/extended_dn_in.c
diff options
context:
space:
mode:
authorHoward Chu <hyc@symas.com>2013-09-16 19:51:20 -0700
committerNadezhda Ivanova <nivanova@samba.org>2013-09-18 05:56:19 +0200
commit68a4081dd47344651cb4dfdf57247ce8e893a96e (patch)
treee5858004df9c42d00463117abb925f0cd4863280 /source4/dsdb/samdb/ldb_modules/extended_dn_in.c
parent4879d0810a2ad741e32ad174a7a14cd35521aeaf (diff)
downloadsamba-68a4081dd47344651cb4dfdf57247ce8e893a96e.tar.gz
samba-68a4081dd47344651cb4dfdf57247ce8e893a96e.tar.bz2
samba-68a4081dd47344651cb4dfdf57247ce8e893a96e.zip
Add an OpenLDAP-specific extended_dn_in module
Don't "fix" plain DNs before sending them to OpenLDAP Signed-off-by: Howard Chu <hyc@symas.com> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Nadezhda Ivanova <nivanova@symas.com>
Diffstat (limited to 'source4/dsdb/samdb/ldb_modules/extended_dn_in.c')
-rw-r--r--source4/dsdb/samdb/ldb_modules/extended_dn_in.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/extended_dn_in.c b/source4/dsdb/samdb/ldb_modules/extended_dn_in.c
index 034d22a2ca..df45f75265 100644
--- a/source4/dsdb/samdb/ldb_modules/extended_dn_in.c
+++ b/source4/dsdb/samdb/ldb_modules/extended_dn_in.c
@@ -56,6 +56,9 @@ static const char *wkattr[] = {
"otherWellKnownObjects",
NULL
};
+
+static const struct ldb_module_ops ldb_extended_dn_in_openldap_module_ops;
+
/* An extra layer of indirection because LDB does not allow the original request to be altered */
static int extended_final_callback(struct ldb_request *req, struct ldb_reply *ares)
@@ -376,7 +379,14 @@ static int extended_dn_filter_callback(struct ldb_parse_tree *tree, void *privat
has_extended_component = (memchr(tree->u.equality.value.data, '<',
tree->u.equality.value.length) != NULL);
- if (!attribute->one_way_link && !has_extended_component) {
+ /*
+ * Don't turn it into an extended DN if we're talking to OpenLDAP.
+ * We just check the module_ops pointer instead of adding a private
+ * pointer and a boolean to tell us the exact same thing.
+ */
+ if (!has_extended_component) {
+ if (!attribute->one_way_link ||
+ ldb_module_get_ops(filter_ctx->module) == &ldb_extended_dn_in_openldap_module_ops)
return LDB_SUCCESS;
}
@@ -706,8 +716,21 @@ static const struct ldb_module_ops ldb_extended_dn_in_module_ops = {
.rename = extended_dn_in_rename,
};
+static const struct ldb_module_ops ldb_extended_dn_in_openldap_module_ops = {
+ .name = "extended_dn_in_openldap",
+ .search = extended_dn_in_search,
+ .modify = extended_dn_in_modify,
+ .del = extended_dn_in_del,
+ .rename = extended_dn_in_rename,
+};
+
int ldb_extended_dn_in_module_init(const char *version)
{
+ int ret;
LDB_MODULE_CHECK_VERSION(version);
+ ret = ldb_register_module(&ldb_extended_dn_in_openldap_module_ops);
+ if (ret != LDB_SUCCESS) {
+ return ret;
+ }
return ldb_register_module(&ldb_extended_dn_in_module_ops);
}