svn commit: samba r2527 - in branches/SAMBA_4_0/source/ldap_server:
.
metze at samba.org
metze at samba.org
Wed Sep 22 14:16:43 GMT 2004
Author: metze
Date: 2004-09-22 14:16:42 +0000 (Wed, 22 Sep 2004)
New Revision: 2527
WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source/ldap_server&rev=2527&nolog=1
Log:
- add a dummy for a simple ldb backend
- handle the complete rootDSE search (maybe this will be also a partition module)
metze
Added:
branches/SAMBA_4_0/source/ldap_server/ldap_simple_ldb.c
Modified:
branches/SAMBA_4_0/source/ldap_server/config.mk
branches/SAMBA_4_0/source/ldap_server/ldap_rootdse.c
branches/SAMBA_4_0/source/ldap_server/ldap_server.c
Changeset:
Modified: branches/SAMBA_4_0/source/ldap_server/config.mk
===================================================================
--- branches/SAMBA_4_0/source/ldap_server/config.mk 2004-09-22 13:14:56 UTC (rev 2526)
+++ branches/SAMBA_4_0/source/ldap_server/config.mk 2004-09-22 14:16:42 UTC (rev 2527)
@@ -5,8 +5,9 @@
[SUBSYSTEM::LDAP]
INIT_OBJ_FILES = \
ldap_server/ldap_server.o \
- ldap_server/ldap_rootdse.o
+ ldap_server/ldap_rootdse.o \
+ ldap_server/ldap_simple_ldb.o
REQUIRED_SUBSYSTEMS = \
- LIBCLI_LDAP
+ LIBCLI_LDAP LIBLDB
# End SUBSYSTEM SMB
#######################
Modified: branches/SAMBA_4_0/source/ldap_server/ldap_rootdse.c
===================================================================
--- branches/SAMBA_4_0/source/ldap_server/ldap_rootdse.c 2004-09-22 13:14:56 UTC (rev 2526)
+++ branches/SAMBA_4_0/source/ldap_server/ldap_rootdse.c 2004-09-22 14:16:42 UTC (rev 2527)
@@ -32,12 +32,18 @@
{
struct ldap_SearchResEntry *ent;
struct ldap_Result *done;
+ int code = 0;
struct ldapsrv_reply *ent_r, *done_r;
int num_attrs = 3;
struct ldap_attribute *attrs;
DEBUG(10, ("Root DSE: %s\n", r->filter));
+ if (r->scope != LDAP_SEARCH_SCOPE_BASE) {
+ code = 32; /* nosuchobject */
+ goto no_base_scope;
+ }
+
attrs = talloc_array_p(call, struct ldap_attribute, num_attrs);
if (!attrs) {
ldapsrv_terminate_connection(call->conn, "no memory");
@@ -233,6 +239,8 @@
ldapsrv_queue_reply(call, ent_r);
+no_base_scope:
+
done_r = ldapsrv_init_reply(call, LDAP_TAG_SearchResultDone);
if (!done_r) {
ldapsrv_terminate_connection(call->conn, "ldapsrv_init_reply() failed");
@@ -240,7 +248,7 @@
}
done = &done_r->msg.r.SearchResultDone;
- done->resultcode = 0;
+ done->resultcode = code;
done->dn = NULL;
done->errormessage = NULL;
done->referral = NULL;
Modified: branches/SAMBA_4_0/source/ldap_server/ldap_server.c
===================================================================
--- branches/SAMBA_4_0/source/ldap_server/ldap_server.c 2004-09-22 13:14:56 UTC (rev 2526)
+++ branches/SAMBA_4_0/source/ldap_server/ldap_server.c 2004-09-22 14:16:42 UTC (rev 2527)
@@ -198,11 +198,10 @@
struct ldapsrv_partition *ldapsrv_get_partition(struct ldapsrv_connection *conn, const char *dn)
{
- static const struct ldapsrv_partition_ops null_ops;
- static struct ldapsrv_partition null_part = {
- .ops = &null_ops
- };
+ static struct ldapsrv_partition null_part;
+ null_part.ops = ldapsrv_get_sldb_partition_ops();
+
return &null_part;
}
@@ -270,11 +269,10 @@
DEBUGADD(10, (" basedn: %s", req->basedn));
DEBUGADD(10, (" filter: %s\n", req->filter));
- if ((strcasecmp("", req->basedn) == 0) &&
- (req->scope == LDAP_SEARCH_SCOPE_BASE)) {
+ if (strcasecmp("", req->basedn) == 0) {
ldapsrv_RootDSE_Search(call, req);
return;
- }
+ }
part = ldapsrv_get_partition(call->conn, req->basedn);
Added: branches/SAMBA_4_0/source/ldap_server/ldap_simple_ldb.c
===================================================================
--- branches/SAMBA_4_0/source/ldap_server/ldap_simple_ldb.c 2004-09-22 13:14:56 UTC (rev 2526)
+++ branches/SAMBA_4_0/source/ldap_server/ldap_simple_ldb.c 2004-09-22 14:16:42 UTC (rev 2527)
@@ -0,0 +1,55 @@
+/*
+ Unix SMB/CIFS implementation.
+ LDAP server SIMPLE LDB implementation
+ 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"
+
+static NTSTATUS sldb_Search(struct ldapsrv_partition *partition, struct ldapsrv_call *call,
+ struct ldap_SearchRequest *r)
+{
+ struct ldap_Result *done;
+ struct ldapsrv_reply *done_r;
+
+ DEBUG(0, ("sldb_Search: %s\n", r->filter));
+
+ done_r = ldapsrv_init_reply(call, LDAP_TAG_SearchResultDone);
+ if (!done_r) {
+ ldapsrv_terminate_connection(call->conn, "ldapsrv_init_reply() failed");
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ done = &done_r->msg.r.SearchResultDone;
+ done->resultcode = 32;
+ done->dn = NULL;
+ done->errormessage = NULL;
+ done->referral = NULL;
+
+ ldapsrv_queue_reply(call, done_r);
+
+ return NT_STATUS_OK;
+}
+
+static const struct ldapsrv_partition_ops sldb_ops = {
+ .Search = sldb_Search
+};
+
+const struct ldapsrv_partition_ops *ldapsrv_get_sldb_partition_ops(void)
+{
+ return &sldb_ops;
+}
More information about the samba-cvs
mailing list