summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/dsdb/samdb/ldb_modules/config.mk13
-rw-r--r--source4/dsdb/samdb/ldb_modules/simple_ldap_map.c (renamed from source4/dsdb/samdb/ldb_modules/entryUUID.c)99
-rw-r--r--source4/selftest/env/Samba4.pm6
-rwxr-xr-xsource4/setup/provision2
-rw-r--r--source4/setup/schema-map-openldap-2.33
5 files changed, 69 insertions, 54 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/config.mk b/source4/dsdb/samdb/ldb_modules/config.mk
index 3c43d47cef..e9d9e18e6a 100644
--- a/source4/dsdb/samdb/ldb_modules/config.mk
+++ b/source4/dsdb/samdb/ldb_modules/config.mk
@@ -97,17 +97,18 @@ OBJ_FILES = \
################################################
################################################
-# Start MODULE ldb_entryUUID
-[MODULE::ldb_entryUUID]
+# Start MODULE ldb_simple_ldap_map
+[MODULE::ldb_simple_ldap_map]
SUBSYSTEM = LIBLDB
OUTPUT_TYPE = SHARED_LIBRARY
-INIT_FUNCTION = ldb_entryUUID_module_init
-PRIVATE_DEPENDENCIES = LIBTALLOC
+INIT_FUNCTION = ldb_simple_ldap_map_module_init
+PRIVATE_DEPENDENCIES = LIBTALLOC ldb_map
ENABLE = YES
+ALIASES = entryuuid nsuniqueid
OBJ_FILES = \
- entryUUID.o
+ simple_ldap_map.o
#
-# End MODULE ldb_entryUUID
+# End MODULE ldb_entryuuid
################################################
# ################################################
diff --git a/source4/dsdb/samdb/ldb_modules/entryUUID.c b/source4/dsdb/samdb/ldb_modules/simple_ldap_map.c
index f4231d20d3..2b8b07f0b4 100644
--- a/source4/dsdb/samdb/ldb_modules/entryUUID.c
+++ b/source4/dsdb/samdb/ldb_modules/simple_ldap_map.c
@@ -35,7 +35,7 @@
#include "librpc/gen_ndr/ndr_misc.h"
#include "librpc/ndr/libndr.h"
-struct entryUUID_private {
+struct entryuuid_private {
struct ldb_dn **base_dns;
};
@@ -254,7 +254,7 @@ static struct ldb_val timestamp_to_usn(struct ldb_module *module, TALLOC_CTX *ct
}
-static const struct ldb_map_attribute entryUUID_attributes[] =
+static const struct ldb_map_attribute entryuuid_attributes[] =
{
/* objectGUID */
{
@@ -293,6 +293,15 @@ static const struct ldb_map_attribute entryUUID_attributes[] =
},
},
{
+ .local_name = "name",
+ .type = MAP_RENAME,
+ .u = {
+ .rename = {
+ .remote_name = "samba4RDN"
+ }
+ }
+ },
+ {
.local_name = "whenCreated",
.type = MAP_RENAME,
.u = {
@@ -420,7 +429,7 @@ static const struct ldb_map_attribute entryUUID_attributes[] =
};
/* This objectClass conflicts with builtin classes on OpenLDAP */
-const struct ldb_map_objectclass entryUUID_objectclasses[] =
+const struct ldb_map_objectclass entryuuid_objectclasses[] =
{
{
.local_name = "subSchema",
@@ -433,7 +442,7 @@ const struct ldb_map_objectclass entryUUID_objectclasses[] =
/* These things do not show up in wildcard searches in OpenLDAP, but
* we need them to show up in the AD-like view */
-static const char * const entryUUID_wildcard_attributes[] = {
+static const char * const entryuuid_wildcard_attributes[] = {
"objectGUID",
"whenCreated",
"whenChanged",
@@ -582,31 +591,31 @@ static const char * const nsuniqueid_wildcard_attributes[] = {
static int get_remote_rootdse(struct ldb_context *ldb, void *context,
struct ldb_reply *ares)
{
- struct entryUUID_private *entryUUID_private;
- entryUUID_private = talloc_get_type(context,
- struct entryUUID_private);
+ struct entryuuid_private *entryuuid_private;
+ entryuuid_private = talloc_get_type(context,
+ struct entryuuid_private);
if (ares->type == LDB_REPLY_ENTRY) {
int i;
struct ldb_message_element *el = ldb_msg_find_element(ares->message, "namingContexts");
- entryUUID_private->base_dns = talloc_realloc(entryUUID_private, entryUUID_private->base_dns, struct ldb_dn *,
+ entryuuid_private->base_dns = talloc_realloc(entryuuid_private, entryuuid_private->base_dns, struct ldb_dn *,
el->num_values + 1);
for (i=0; i < el->num_values; i++) {
- if (!entryUUID_private->base_dns) {
+ if (!entryuuid_private->base_dns) {
return LDB_ERR_OPERATIONS_ERROR;
}
- entryUUID_private->base_dns[i] = ldb_dn_new(entryUUID_private->base_dns, ldb, (const char *)el->values[i].data);
- if ( ! ldb_dn_validate(entryUUID_private->base_dns[i])) {
+ entryuuid_private->base_dns[i] = ldb_dn_new(entryuuid_private->base_dns, ldb, (const char *)el->values[i].data);
+ if ( ! ldb_dn_validate(entryuuid_private->base_dns[i])) {
return LDB_ERR_OPERATIONS_ERROR;
}
}
- entryUUID_private->base_dns[i] = NULL;
+ entryuuid_private->base_dns[i] = NULL;
}
return LDB_SUCCESS;
}
static int find_base_dns(struct ldb_module *module,
- struct entryUUID_private *entryUUID_private)
+ struct entryuuid_private *entryuuid_private)
{
int ret;
struct ldb_request *req;
@@ -614,7 +623,7 @@ static int find_base_dns(struct ldb_module *module,
"namingContexts",
NULL
};
- req = talloc(entryUUID_private, struct ldb_request);
+ req = talloc(entryuuid_private, struct ldb_request);
if (req == NULL) {
ldb_set_errstring(module->ldb, "Out of Memory");
return LDB_ERR_OPERATIONS_ERROR;
@@ -633,7 +642,7 @@ static int find_base_dns(struct ldb_module *module,
req->op.search.attrs = naming_context_attr;
req->controls = NULL;
- req->context = entryUUID_private;
+ req->context = entryuuid_private;
req->callback = get_remote_rootdse;
ldb_set_timeout(module->ldb, req, 0); /* use default timeout */
@@ -652,22 +661,22 @@ static int find_base_dns(struct ldb_module *module,
}
/* the context init function */
-static int entryUUID_init(struct ldb_module *module)
+static int entryuuid_init(struct ldb_module *module)
{
int ret;
struct map_private *map_private;
- struct entryUUID_private *entryUUID_private;
+ struct entryuuid_private *entryuuid_private;
- ret = ldb_map_init(module, entryUUID_attributes, entryUUID_objectclasses, entryUUID_wildcard_attributes, NULL);
+ ret = ldb_map_init(module, entryuuid_attributes, entryuuid_objectclasses, entryuuid_wildcard_attributes, NULL);
if (ret != LDB_SUCCESS)
return ret;
map_private = talloc_get_type(module->private_data, struct map_private);
- entryUUID_private = talloc_zero(map_private, struct entryUUID_private);
- map_private->caller_private = entryUUID_private;
+ entryuuid_private = talloc_zero(map_private, struct entryuuid_private);
+ map_private->caller_private = entryuuid_private;
- ret = find_base_dns(module, entryUUID_private);
+ ret = find_base_dns(module, entryuuid_private);
return ldb_next_init(module);
}
@@ -677,7 +686,7 @@ static int nsuniqueid_init(struct ldb_module *module)
{
int ret;
struct map_private *map_private;
- struct entryUUID_private *entryUUID_private;
+ struct entryuuid_private *entryuuid_private;
ret = ldb_map_init(module, nsuniqueid_attributes, NULL, nsuniqueid_wildcard_attributes, NULL);
if (ret != LDB_SUCCESS)
@@ -685,10 +694,10 @@ static int nsuniqueid_init(struct ldb_module *module)
map_private = talloc_get_type(module->private_data, struct map_private);
- entryUUID_private = talloc_zero(map_private, struct entryUUID_private);
- map_private->caller_private = entryUUID_private;
+ entryuuid_private = talloc_zero(map_private, struct entryuuid_private);
+ map_private->caller_private = entryuuid_private;
- ret = find_base_dns(module, entryUUID_private);
+ ret = find_base_dns(module, entryuuid_private);
return ldb_next_init(module);
}
@@ -709,21 +718,21 @@ static int get_seq(struct ldb_context *ldb, void *context,
return LDB_SUCCESS;
}
-static int entryUUID_sequence_number(struct ldb_module *module, struct ldb_request *req)
+static int entryuuid_sequence_number(struct ldb_module *module, struct ldb_request *req)
{
int i, ret;
struct map_private *map_private;
- struct entryUUID_private *entryUUID_private;
+ struct entryuuid_private *entryuuid_private;
unsigned long long max_seq = 0;
struct ldb_request *search_req;
map_private = talloc_get_type(module->private_data, struct map_private);
- entryUUID_private = talloc_get_type(map_private->caller_private, struct entryUUID_private);
+ entryuuid_private = talloc_get_type(map_private->caller_private, struct entryuuid_private);
/* Search the baseDNs for a sequence number */
- for (i=0; entryUUID_private &&
- entryUUID_private->base_dns &&
- entryUUID_private->base_dns[i];
+ for (i=0; entryuuid_private &&
+ entryuuid_private->base_dns &&
+ entryuuid_private->base_dns[i];
i++) {
static const char *contextCSN_attr[] = {
"contextCSN", NULL
@@ -735,7 +744,7 @@ static int entryUUID_sequence_number(struct ldb_module *module, struct ldb_reque
}
search_req->operation = LDB_SEARCH;
- search_req->op.search.base = entryUUID_private->base_dns[i];
+ search_req->op.search.base = entryuuid_private->base_dns[i];
search_req->op.search.scope = LDB_SCOPE_BASE;
search_req->op.search.tree = ldb_parse_tree(search_req, "objectClass=*");
@@ -783,30 +792,30 @@ static int entryUUID_sequence_number(struct ldb_module *module, struct ldb_reque
return LDB_SUCCESS;
}
-static struct ldb_module_ops entryUUID_ops = {
- .name = "entryUUID",
- .init_context = entryUUID_init,
- .sequence_number = entryUUID_sequence_number
+static struct ldb_module_ops entryuuid_ops = {
+ .name = "entryuuid",
+ .init_context = entryuuid_init,
+ .sequence_number = entryuuid_sequence_number
};
static struct ldb_module_ops nsuniqueid_ops = {
.name = "nsuniqueid",
.init_context = nsuniqueid_init,
- .sequence_number = entryUUID_sequence_number
+ .sequence_number = entryuuid_sequence_number
};
/* the init function */
-int ldb_entryUUID_module_init(void)
+int ldb_simple_ldap_map_module_init(void)
{
int ret;
struct ldb_module_ops ops = ldb_map_get_ops();
- entryUUID_ops.add = ops.add;
- entryUUID_ops.modify = ops.modify;
- entryUUID_ops.del = ops.del;
- entryUUID_ops.rename = ops.rename;
- entryUUID_ops.search = ops.search;
- entryUUID_ops.wait = ops.wait;
- ret = ldb_register_module(&entryUUID_ops);
+ entryuuid_ops.add = ops.add;
+ entryuuid_ops.modify = ops.modify;
+ entryuuid_ops.del = ops.del;
+ entryuuid_ops.rename = ops.rename;
+ entryuuid_ops.search = ops.search;
+ entryuuid_ops.wait = ops.wait;
+ ret = ldb_register_module(&entryuuid_ops);
if (ret) {
return ret;
diff --git a/source4/selftest/env/Samba4.pm b/source4/selftest/env/Samba4.pm
index d7c37fab3e..2f846bbdb0 100644
--- a/source4/selftest/env/Samba4.pm
+++ b/source4/selftest/env/Samba4.pm
@@ -220,7 +220,11 @@ sub mk_openldap($$$)
system("$self->{bindir}/ad2oLschema $configuration --option=convert:target=openldap -H $ldapdir/schema-tmp.ldb -I $self->{setupdir}/schema-map-openldap-2.3 -O $ldapdir/backend-schema.schema >&2") == 0 or die("schema conversion for OpenLDAP failed");
my $oldpath = $ENV{PATH};
- $ENV{PATH} = "$ENV{OPENLDAP_PATH}/usr/local/sbin:/usr/sbin:/sbin:$ENV{PATH}";
+ my $olpath = "";
+ if (defined $ENV{OPENLDAP_PATH}) {
+ $olpath = "$ENV{OPENLDAP_PATH}:"
+ }
+ $ENV{PATH} = "$olpath/usr/local/sbin:/usr/sbin:/sbin:$ENV{PATH}";
unlink($modconf);
open(CONF, ">$modconf"); close(CONF);
diff --git a/source4/setup/provision b/source4/setup/provision
index bf03026987..010f7e7708 100755
--- a/source4/setup/provision
+++ b/source4/setup/provision
@@ -141,7 +141,7 @@ if (ldapbackend) {
subobj.LDAPBACKEND = subobj.LDAPI_URI;
}
if (!ldapmodule) {
- subobj.LDAPMODULE = "entryUUID";
+ subobj.LDAPMODULE = "entryuuid";
}
subobj.DOMAINDN_LDB = subobj.LDAPBACKEND;
subobj.DOMAINDN_MOD2 = "," + subobj.LDAPMODULE + ",paged_searches";
diff --git a/source4/setup/schema-map-openldap-2.3 b/source4/setup/schema-map-openldap-2.3
index 44fc3de6df..3bbd6d9e57 100644
--- a/source4/setup/schema-map-openldap-2.3
+++ b/source4/setup/schema-map-openldap-2.3
@@ -1,5 +1,4 @@
#Standard OpenLDAP attributes
-name
labeledURI
createTimeStamp
objectClass
@@ -23,6 +22,8 @@ objectClasses:samba4ObjectClasses
2.5.21.6:1.3.6.1.4.1.7165.4.255.5
subSchema:samba4SubSchema
2.5.20.1:1.3.6.1.4.1.7165.4.255.4
+#'name' is the RDN in AD, but something else in OpenLDAP
+name:samba4RDN
#Remap these so that we don't put operational attributes in a schema MAY
modifyTimeStamp:samba4ModifyTimestamp
2.5.18.2:1.3.6.1.4.1.7165.4.255.3