diff options
Diffstat (limited to 'source4/ldap_server')
-rw-r--r-- | source4/ldap_server/config.mk | 1 | ||||
-rw-r--r-- | source4/ldap_server/ldap_backend.c | 5 | ||||
-rw-r--r-- | source4/ldap_server/ldap_rootdse.c | 371 | ||||
-rw-r--r-- | source4/ldap_server/ldap_server.c | 16 | ||||
-rw-r--r-- | source4/ldap_server/ldap_server.h | 1 |
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; |