summaryrefslogtreecommitdiff
path: root/source4/lib/ldb/ldb_ildap/ldb_ildap.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-06-18 09:48:17 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:18:26 -0500
commit97318cdb45f1022ca2beebbf24ab11af80c07dc2 (patch)
treef68117f9380d06532add2566a330656b7704a92f /source4/lib/ldb/ldb_ildap/ldb_ildap.c
parentca91a8a6919b9bc1b6016310c6b30447723b08d6 (diff)
downloadsamba-97318cdb45f1022ca2beebbf24ab11af80c07dc2.tar.gz
samba-97318cdb45f1022ca2beebbf24ab11af80c07dc2.tar.bz2
samba-97318cdb45f1022ca2beebbf24ab11af80c07dc2.zip
r7719: make the ildap ldb backend use the defaultNamingContext if the basedn
is not specified, so: ldbsearch ldap://hostname '(objectclass=user)' works without knowing the domain name (This used to be commit f6c2c5190737ca11f55a147f5295ccca505fb58b)
Diffstat (limited to 'source4/lib/ldb/ldb_ildap/ldb_ildap.c')
-rw-r--r--source4/lib/ldb/ldb_ildap/ldb_ildap.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/source4/lib/ldb/ldb_ildap/ldb_ildap.c b/source4/lib/ldb/ldb_ildap/ldb_ildap.c
index 9cccec0313..3f63af482f 100644
--- a/source4/lib/ldb/ldb_ildap/ldb_ildap.c
+++ b/source4/lib/ldb/ldb_ildap/ldb_ildap.c
@@ -37,9 +37,9 @@
#include "lib/cmdline/popt_common.h"
struct ildb_private {
- const char *basedn;
struct ldap_connection *ldap;
NTSTATUS last_rc;
+ struct ldb_message *rootDSE;
};
/*
@@ -100,6 +100,8 @@ static int ildb_delete(struct ldb_module *module, const char *dn)
}
+static void ildb_rootdse(struct ldb_module *module);
+
/*
search for matching records
*/
@@ -116,7 +118,13 @@ static int ildb_search(struct ldb_module *module, const char *base,
}
if (base == NULL) {
- base = "";
+ if (ildb->rootDSE == NULL) {
+ ildb_rootdse(module);
+ }
+ if (ildb->rootDSE != NULL) {
+ base = ldb_msg_find_string(ildb->rootDSE,
+ "defaultNamingContext", "");
+ }
}
if (expression == NULL || expression[0] == '\0') {
@@ -352,6 +360,22 @@ static const struct ldb_module_ops ildb_ops = {
/*
+ fetch the rootDSE
+*/
+static void ildb_rootdse(struct ldb_module *module)
+{
+ struct ildb_private *ildb = module->private_data;
+ struct ldb_message **res = NULL;
+ int ret;
+ ret = ildb_search(module, "", LDB_SCOPE_BASE, "dn=dc=rootDSE", NULL, &res);
+ if (ret == 1) {
+ ildb->rootDSE = talloc_steal(ildb, res[0]);
+ }
+ talloc_free(res);
+}
+
+
+/*
connect to the database
*/
int ildb_connect(struct ldb_context *ldb, const char *url,
@@ -366,6 +390,8 @@ int ildb_connect(struct ldb_context *ldb, const char *url,
goto failed;
}
+ ildb->rootDSE = NULL;
+
ildb->ldap = ldap_new_connection(ildb, NULL);
if (!ildb->ldap) {
ldb_oom(ldb);