summaryrefslogtreecommitdiff
path: root/source4/ldap_server/ldap_server.c
diff options
context:
space:
mode:
authorSimo Sorce <idra@samba.org>2006-01-13 00:38:35 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:50:57 -0500
commita7a79d2b256c97bd6ffa6e9740d14366ebc7602e (patch)
tree3b7b912a8ae86a8f0a523fad0f697d6516d30f70 /source4/ldap_server/ldap_server.c
parent0ac6b5232d1e52bab55227fc5251b363fd97b333 (diff)
downloadsamba-a7a79d2b256c97bd6ffa6e9740d14366ebc7602e.tar.gz
samba-a7a79d2b256c97bd6ffa6e9740d14366ebc7602e.tar.bz2
samba-a7a79d2b256c97bd6ffa6e9740d14366ebc7602e.zip
r12880: Remove ldap partitions useless now and probably we
will not use it anyway as we plan to support partitions in ldb directly like with rootdse Merge ldap_simple_ldb into ldap_backend, it is not simple anymore and makes no sense to have it separated now that ldap partitions are gone Initial attempt at working to some limit to avoid DOSs for the ldap server. Simo. (This used to be commit 97bff3e049eba48019f2b0f3eb5a19e32fef2e23)
Diffstat (limited to 'source4/ldap_server/ldap_server.c')
-rw-r--r--source4/ldap_server/ldap_server.c43
1 files changed, 30 insertions, 13 deletions
diff --git a/source4/ldap_server/ldap_server.c b/source4/ldap_server/ldap_server.c
index 28995f6eb2..d8124e5f24 100644
--- a/source4/ldap_server/ldap_server.c
+++ b/source4/ldap_server/ldap_server.c
@@ -228,7 +228,12 @@ static void ldapsrv_recv(struct stream_connection *c, uint16_t flags)
{
struct ldapsrv_connection *conn =
talloc_get_type(c->private, struct ldapsrv_connection);
-
+
+ if (conn->limits.ite) {
+ talloc_free(conn->limits.ite);
+ conn->limits.ite = NULL;
+ }
+
packet_recv(conn->packet);
}
@@ -257,13 +262,22 @@ static void ldapsrv_send(struct stream_connection *c, uint16_t flags)
packet_queue_run(conn->packet);
}
+static void ldapsrv_conn_init_timeout(struct event_context *ev,
+ struct timed_event *te,
+ struct timeval t,
+ void *private)
+{
+ struct ldapsrv_connection *conn = talloc_get_type(private, struct ldapsrv_connection);
+
+ ldapsrv_terminate_connection(conn, "Timeout. No requests after initial connection");
+}
+
/*
initialise a server_context from a open socket and register a event handler
for reading from that socket
*/
static void ldapsrv_accept(struct stream_connection *c)
{
- struct ldapsrv_partition *part;
struct ldapsrv_service *ldapsrv_service =
talloc_get_type(c->private, struct ldapsrv_service);
struct ldapsrv_connection *conn;
@@ -337,23 +351,26 @@ static void ldapsrv_accept(struct stream_connection *c)
return;
}
- part = talloc(conn, struct ldapsrv_partition);
- if (part == NULL) {
- ldapsrv_terminate_connection(conn, "talloc failed");
+ if (!NT_STATUS_IS_OK(ldapsrv_backend_Init(conn))) {
+ ldapsrv_terminate_connection(conn, "backend Init failed");
return;
}
- part->base_dn = "*"; /* default partition */
- part->ops = ldapsrv_get_sldb_partition_ops();
- if (!NT_STATUS_IS_OK(part->ops->Init(part, conn))) {
- ldapsrv_terminate_connection(conn, "default partition Init failed");
- return;
- }
+ /* TODO: load limits from the conf partition */
+
+ conn->limits.initial_timeout = 10;
+ conn->limits.conn_idle_time = 60;
+ conn->limits.max_page_size = 100;
+ conn->limits.search_timeout = 10;
- conn->default_partition = part;
- DLIST_ADD_END(conn->partitions, part, struct ldapsrv_partition *);
+ /* register the server */
irpc_add_name(c->msg_ctx, "ldap_server");
+
+ /* set connections limits */
+ conn->limits.ite = event_add_timed(c->event.ctx, conn,
+ timeval_current_ofs(conn->limits.initial_timeout, 0),
+ ldapsrv_conn_init_timeout, conn);
}
static const struct stream_server_ops ldap_stream_ops = {