diff options
Diffstat (limited to 'source4/ldap_server/ldap_server.c')
-rw-r--r-- | source4/ldap_server/ldap_server.c | 43 |
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 = { |