mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
r2527: - add a dummy for a simple ldb backend
- handle the complete rootDSE search (maybe this will be also a partition module) metze
This commit is contained in:
parent
e2fe685849
commit
6fc904a71c
@ -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
|
||||
#######################
|
||||
|
@ -32,12 +32,18 @@ void ldapsrv_RootDSE_Search(struct ldapsrv_call *call,
|
||||
{
|
||||
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 @@ void ldapsrv_RootDSE_Search(struct ldapsrv_call *call,
|
||||
|
||||
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 @@ void ldapsrv_RootDSE_Search(struct ldapsrv_call *call,
|
||||
}
|
||||
|
||||
done = &done_r->msg.r.SearchResultDone;
|
||||
done->resultcode = 0;
|
||||
done->resultcode = code;
|
||||
done->dn = NULL;
|
||||
done->errormessage = NULL;
|
||||
done->referral = NULL;
|
||||
|
@ -198,10 +198,9 @@ 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)
|
||||
{
|
||||
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 @@ static void ldapsrv_SearchRequest(struct ldapsrv_call *call)
|
||||
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);
|
||||
|
||||
|
55
source/ldap_server/ldap_simple_ldb.c
Normal file
55
source/ldap_server/ldap_simple_ldb.c
Normal file
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user