summaryrefslogtreecommitdiff
path: root/source4/ldap_server
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-11-29 08:55:13 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:46:50 -0500
commit53562f774662eda06563870bb7daf857df01590f (patch)
tree022eff0d76d84d7ad08c40f0d2ed4b97afc78bba /source4/ldap_server
parent4ccadc164e144085de4ace0dc5f3f40719fdc527 (diff)
downloadsamba-53562f774662eda06563870bb7daf857df01590f.tar.gz
samba-53562f774662eda06563870bb7daf857df01590f.tar.bz2
samba-53562f774662eda06563870bb7daf857df01590f.zip
r11955: got rid of the old rootDSE code in the ldap server.
The partitioning logic is still there, but we only have one partition. If we need partitioning in the future it might be better to remove this partitioning code and use a partitioning module instead (This used to be commit f4685e7dc9bdc3b9e240c9f5891b9da9251f82e5)
Diffstat (limited to 'source4/ldap_server')
-rw-r--r--source4/ldap_server/config.mk1
-rw-r--r--source4/ldap_server/ldap_backend.c5
-rw-r--r--source4/ldap_server/ldap_rootdse.c371
-rw-r--r--source4/ldap_server/ldap_server.c16
-rw-r--r--source4/ldap_server/ldap_server.h1
5 files changed, 0 insertions, 394 deletions
diff --git a/source4/ldap_server/config.mk b/source4/ldap_server/config.mk
index 38afb3fc5c..4cbc83d1cf 100644
--- a/source4/ldap_server/config.mk
+++ b/source4/ldap_server/config.mk
@@ -7,7 +7,6 @@ INIT_OBJ_FILES = \
ldap_server.o \
ldap_backend.o \
ldap_bind.o \
- ldap_rootdse.o \
ldap_simple_ldb.o
REQUIRED_SUBSYSTEMS = \
LIBCLI_LDAP SAMDB
diff --git a/source4/ldap_server/ldap_backend.c b/source4/ldap_server/ldap_backend.c
index 65e6d9d4d4..a1c08fcc99 100644
--- a/source4/ldap_server/ldap_backend.c
+++ b/source4/ldap_server/ldap_backend.c
@@ -51,11 +51,6 @@ void ldapsrv_queue_reply(struct ldapsrv_call *call, struct ldapsrv_reply *reply)
struct ldapsrv_partition *ldapsrv_get_partition(struct ldapsrv_connection *conn, const char *dn, uint8_t scope)
{
- if (scope == LDAP_SEARCH_SCOPE_BASE
- && strcasecmp("", dn) == 0) {
- return conn->rootDSE;
- }
-
return conn->default_partition;
}
diff --git a/source4/ldap_server/ldap_rootdse.c b/source4/ldap_server/ldap_rootdse.c
deleted file mode 100644
index d4e6003e5f..0000000000
--- a/source4/ldap_server/ldap_rootdse.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- Unix SMB/CIFS implementation.
- LDAP server ROOT DSE
- Copyright (C) Stefan Metzmacher 2004
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "includes.h"
-#include "ldap_server/ldap_server.h"
-#include "system/time.h"
-#include "lib/ldb/include/ldb.h"
-#include "lib/ldb/include/ldb_errors.h"
-
-#define ATTR_BLOB_CONST(val) data_blob_talloc(mem_ctx, val, sizeof(val)-1)
-
-#define ATTR_SINGLE_NOVAL(ctx, attr, blob, num, nam) do { \
- attr->name = talloc_strdup(ctx, nam);\
- NT_STATUS_HAVE_NO_MEMORY(attr->name);\
- attr->num_values = num; \
- attr->values = blob;\
-} while(0)
-
-/*
- this is used to catch debug messages from ldb
-*/
-static void rootdse_db_debug(void *context, enum ldb_debug_level level, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(3,0);
-static void rootdse_db_debug(void *context, enum ldb_debug_level level, const char *fmt, va_list ap)
-{
- char *s = NULL;
- if (DEBUGLEVEL < 4 && level > LDB_DEBUG_WARNING) {
- return;
- }
- vasprintf(&s, fmt, ap);
- if (!s) return;
- DEBUG(level, ("rootdse: %s\n", s));
- free(s);
-}
-
-
-/*
- connect to the SAM database
- */
-NTSTATUS rootdse_Init(struct ldapsrv_partition *partition, struct ldapsrv_connection *conn)
-{
- char *db_path;
- struct ldb_context *ldb;
- TALLOC_CTX *mem_ctx = talloc_new(partition);
-
- db_path = talloc_asprintf(mem_ctx, "tdb://%s",
- private_path(mem_ctx, "rootdse.ldb"));
- if (db_path == NULL) {
- return NT_STATUS_NO_MEMORY;
- }
-
- ldb = ldb_wrap_connect(mem_ctx, db_path, 0, NULL);
- if (ldb == NULL) {
- return NT_STATUS_INTERNAL_DB_CORRUPTION;
- }
-
- ldb_set_debug(ldb, rootdse_db_debug, NULL);
-
- talloc_steal(partition, ldb);
- partition->private = ldb;
- return NT_STATUS_OK;
-}
-
-
-static NTSTATUS fill_dynamic_values(void *mem_ctx, struct ldb_message_element *attrs)
-{
- /*
- * currentTime
- * 20040918090350.0Z
- */
-
- DEBUG(10, ("fill_dynamic_values for %s\n", attrs[0].name));
-
- if (strcasecmp(attrs->name, "currentTime") == 0)
- {
- int num_currentTime = 1;
- DATA_BLOB *currentTime = talloc_array(mem_ctx, DATA_BLOB, num_currentTime);
- char *str = ldb_timestring(mem_ctx, time(NULL));
- NT_STATUS_HAVE_NO_MEMORY(str);
- currentTime[0].data = (uint8_t *)str;
- currentTime[0].length = strlen(str);
- ATTR_SINGLE_NOVAL(mem_ctx, attrs, currentTime, num_currentTime, "currentTime");
- return NT_STATUS_OK;
- }
-
- /*
- * subschemaSubentry
- * CN=Aggregate,CN=Schema,CN=Configuration,DC=DOM,DC=TLD
- */
-
- /*
- * dsServiceName
- * CN=NTDS Settings,CN=NETBIOSNAME,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=DOM,DC=TLD
- */
-
- /*
- * namingContexts
- * DC=DOM,DC=TLD
- * CN=Configuration,DC=DOM,DC=TLD
- * CN=Schema,CN=Configuration,DC=DOM,DC=TLD
- * DC=DomainDnsZones,DC=DOM,DC=TLD
- * DC=ForestDnsZones,DC=DOM,DC=TLD
- */
-
- /*
- * defaultNamingContext
- * DC=DOM,DC=TLD
- */
-
- /*
- * schemaNamingContext
- * CN=Schema,CN=Configuration,DC=DOM,DC=TLD
- */
-
- /*
- * configurationNamingContext
- * CN=Configuration,DC=DOM,DC=TLD
- */
-
- /*
- * rootDomainNamingContext
- * DC=DOM,DC=TLD
- */
-
- /*
- * supportedControl
- * 1.2.840.113556.1.4.319
- * 1.2.840.113556.1.4.801
- * 1.2.840.113556.1.4.473
- * 1.2.840.113556.1.4.528
- * 1.2.840.113556.1.4.417
- * 1.2.840.113556.1.4.619
- * 1.2.840.113556.1.4.841
- * 1.2.840.113556.1.4.529
- * 1.2.840.113556.1.4.805
- * 1.2.840.113556.1.4.521
- * 1.2.840.113556.1.4.970
- * 1.2.840.113556.1.4.1338
- * 1.2.840.113556.1.4.474
- * 1.2.840.113556.1.4.1339
- * 1.2.840.113556.1.4.1340
- * 1.2.840.113556.1.4.1413
- * 2.16.840.1.113730.3.4.9
- * 2.16.840.1.113730.3.4.10
- * 1.2.840.113556.1.4.1504
- * 1.2.840.113556.1.4.1852
- * 1.2.840.113556.1.4.802
- */
-
- /*
- * supportedLDAPVersion
- * 3
- * 2
- */
- if (strcasecmp(attrs->name, "supportedLDAPVersion") == 0)
- {
- int num_supportedLDAPVersion = 1;
- DATA_BLOB *supportedLDAPVersion = talloc_array(mem_ctx, DATA_BLOB, num_supportedLDAPVersion);
- supportedLDAPVersion[0] = ATTR_BLOB_CONST("3");
- ATTR_SINGLE_NOVAL(mem_ctx, attrs, supportedLDAPVersion, num_supportedLDAPVersion, "supportedLDAPVersion");
- return NT_STATUS_OK;
- }
-
- /*
- * supportedLDAPPolicies
- * MaxPoolThreads
- * MaxDatagramRecv
- * MaxReceiveBuffer
- * InitRecvTimeout
- * MaxConnections
- * MaxConnIdleTime
- * MaxPageSize
- * MaxQueryDuration
- * MaxTempTableSize
- * MaxResultSetSize
- * MaxNotificationPerConn
- * MaxValRange
- */
-
- /*
- * highestCommittedUSN
- * 4555
- */
-
- /*
- * supportedSASLMechanisms
- * GSSAPI
- * GSS-SPNEGO
- * EXTERNAL
- * DIGEST-MD5
- */
-
- /*
- * dnsHostName
- * netbiosname.dom.tld
- */
-
- /*
- * ldapServiceName
- * dom.tld:netbiosname$@DOM.TLD
- */
-
- /*
- * serverName:
- * CN=NETBIOSNAME,CN=Servers,CN=Default-First-Site,CN=Sites,CN=Configuration,DC=DOM,DC=TLD
- */
-
- /*
- * supportedCapabilities
- * 1.2.840.113556.1.4.800
- * 1.2.840.113556.1.4.1670
- * 1.2.840.113556.1.4.1791
- */
-
- /*
- * isSynchronized:
- * TRUE/FALSE
- */
-
- /*
- * isGlobalCatalogReady
- * TRUE/FALSE
- */
-
- /*
- * domainFunctionality
- * 0
- */
-
- /*
- * forestFunctionality
- * 0
- */
-
- /*
- * domainControllerFunctionality
- * 2
- */
-
- {
- DATA_BLOB *x = talloc_array(mem_ctx, DATA_BLOB, 1);
- x[0] = ATTR_BLOB_CONST("0");
- ATTR_SINGLE_NOVAL(mem_ctx, attrs, x, 1, attrs->name);
- }
- return NT_STATUS_OK;
-}
-
-static NTSTATUS rootdse_Search(struct ldapsrv_partition *partition, struct ldapsrv_call *call,
- struct ldap_SearchRequest *r)
-{
- NTSTATUS status;
- void *local_ctx;
- struct ldap_SearchResEntry *ent;
- struct ldap_Result *done;
- struct ldb_result *res = NULL;
- int result = LDAP_SUCCESS;
- struct ldapsrv_reply *ent_r, *done_r;
- struct ldb_context *ldb;
- const char *errstr = NULL;
- int ret, j;
- const char **attrs = NULL;
-
- if (r->scope != LDAP_SEARCH_SCOPE_BASE) {
- return NT_STATUS_INVALID_PARAMETER;
- }
-
- local_ctx = talloc_named(call, 0, "rootdse_Search local memory context");
- NT_STATUS_HAVE_NO_MEMORY(local_ctx);
-
- ldb = talloc_get_type(partition->private, struct ldb_context);
-
- if (r->num_attributes >= 1) {
- attrs = talloc_array(ldb, const char *, r->num_attributes+1);
- NT_STATUS_HAVE_NO_MEMORY(attrs);
-
- for (j=0; j < r->num_attributes; j++) {
- DEBUG(10,("rootDSE_Search: attrs: [%s]\n",r->attributes[j]));
- attrs[j] = r->attributes[j];
- }
- attrs[j] = NULL;
- }
-
- ret = ldb_search(ldb, ldb_dn_explode(local_ctx, "cn=rootDSE"), 0, NULL, attrs, &res);
- talloc_steal(local_ctx, res);
-
- if (ret == LDB_SUCCESS && res->count == 1) {
- ent_r = ldapsrv_init_reply(call, LDAP_TAG_SearchResultEntry);
- NT_STATUS_HAVE_NO_MEMORY(ent_r);
-
- ent = &ent_r->msg->r.SearchResultEntry;
- ent->dn = "";
- ent->num_attributes = 0;
- ent->attributes = NULL;
- if (res->msgs[0]->num_elements == 0) {
- goto queue_reply;
- }
- ent->num_attributes = res->msgs[0]->num_elements;
- ent->attributes = talloc_steal(ent_r, res->msgs[0]->elements);
-
- for (j=0; j < ent->num_attributes; j++) {
- if (ent->attributes[j].num_values == 1 &&
- ent->attributes[j].values[0].length >= 9 &&
- strncmp((char *)ent->attributes[j].values[0].data, "_DYNAMIC_", 9) == 0) {
- status = fill_dynamic_values(ent->attributes, &(ent->attributes[j]));
- if (!NT_STATUS_IS_OK(status)) {
- return status;
- }
- }
- }
-queue_reply:
- ldapsrv_queue_reply(call, ent_r);
- }
-
- done_r = ldapsrv_init_reply(call, LDAP_TAG_SearchResultDone);
- NT_STATUS_HAVE_NO_MEMORY(done_r);
-
- if (ret != LDB_SUCCESS) {
- DEBUG(10,("rootdse_Search: error\n"));
- result = LDAP_OTHER;
- errstr = ldb_errstring(ldb);
- } else if (res->count == 0) {
- DEBUG(10,("rootdse_Search: no results\n"));
- result = LDAP_NO_SUCH_OBJECT;
- errstr = ldb_errstring(ldb);
- } else if (res->count == 1) {
- DEBUG(10,("rootdse_Search: results: [%d]\n", res->count));
- result = LDAP_SUCCESS;
- errstr = NULL;
- } else if (res->count > 1) {
- DEBUG(10,("rootdse_Search: too many results[%d]\n", res->count));
- result = LDAP_OTHER;
- errstr = "internal error";
- }
-
- done = &done_r->msg->r.SearchResultDone;
- done->dn = NULL;
- done->resultcode = result;
- done->errormessage = (errstr?talloc_strdup(done_r,errstr):NULL);;
- done->referral = NULL;
-
- talloc_free(local_ctx);
-
- ldapsrv_queue_reply(call, done_r);
- return NT_STATUS_OK;
-}
-
-static const struct ldapsrv_partition_ops rootdse_ops = {
- .Init = rootdse_Init,
- .Search = rootdse_Search
-};
-
-const struct ldapsrv_partition_ops *ldapsrv_get_rootdse_partition_ops(void)
-{
- return &rootdse_ops;
-}
diff --git a/source4/ldap_server/ldap_server.c b/source4/ldap_server/ldap_server.c
index b74bec0b1b..11ee72d989 100644
--- a/source4/ldap_server/ldap_server.c
+++ b/source4/ldap_server/ldap_server.c
@@ -280,7 +280,6 @@ static void ldapsrv_send(struct stream_connection *c, uint16_t flags)
*/
static void ldapsrv_accept(struct stream_connection *c)
{
- struct ldapsrv_partition *rootDSE_part;
struct ldapsrv_partition *part;
struct ldapsrv_service *ldapsrv_service =
talloc_get_type(c->private, struct ldapsrv_service);
@@ -328,21 +327,6 @@ static void ldapsrv_accept(struct stream_connection *c)
goto done;
}
- rootDSE_part = talloc(conn, struct ldapsrv_partition);
- if (rootDSE_part == NULL) {
- ldapsrv_terminate_connection(conn, "talloc failed");
- }
-
- rootDSE_part->base_dn = ""; /* RootDSE */
- rootDSE_part->ops = ldapsrv_get_rootdse_partition_ops();
- if (!NT_STATUS_IS_OK(rootDSE_part->ops->Init(rootDSE_part, conn))) {
- ldapsrv_terminate_connection(conn, "rootDSE Init failed");
- goto done;
- }
-
- conn->rootDSE = rootDSE_part;
- DLIST_ADD_END(conn->partitions, rootDSE_part, struct ldapsrv_partition *);
-
part = talloc(conn, struct ldapsrv_partition);
if (part == NULL) {
ldapsrv_terminate_connection(conn, "talloc failed");
diff --git a/source4/ldap_server/ldap_server.h b/source4/ldap_server/ldap_server.h
index be555146d8..4e0abb4f06 100644
--- a/source4/ldap_server/ldap_server.h
+++ b/source4/ldap_server/ldap_server.h
@@ -27,7 +27,6 @@ struct ldapsrv_connection {
struct auth_session_info *session_info;
struct ldapsrv_service *service;
struct tls_context *tls;
- struct ldapsrv_partition *rootDSE;
struct ldapsrv_partition *default_partition;
struct ldapsrv_partition *partitions;