Author: idra
Date: 2006-01-13 22:48:08 +0000 (Fri, 13 Jan 2006)
New Revision: 12917

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12917

Log:

fix decoding of ldap controls
some more work on timeouts


Modified:
   branches/SAMBA_4_0/source/ldap_server/ldap_server.c
   branches/SAMBA_4_0/source/ldap_server/ldap_server.h
   branches/SAMBA_4_0/source/libcli/ldap/ldap.c


Changeset:
Modified: branches/SAMBA_4_0/source/ldap_server/ldap_server.c
===================================================================
--- branches/SAMBA_4_0/source/ldap_server/ldap_server.c 2006-01-13 21:22:25 UTC 
(rev 12916)
+++ branches/SAMBA_4_0/source/ldap_server/ldap_server.c 2006-01-13 22:48:08 UTC 
(rev 12917)
@@ -224,6 +224,19 @@
 }
 
 /*
+ Idle timeout handler
+*/
+static void ldapsrv_conn_idle_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 bind");
+}
+
+/*
   called when a LDAP socket becomes readable
 */
 static void ldapsrv_recv(struct stream_connection *c, uint16_t flags)
@@ -231,12 +244,22 @@
        struct ldapsrv_connection *conn = 
                talloc_get_type(c->private, struct ldapsrv_connection);
 
-       if (conn->limits.ite) {
+       if (conn->limits.ite) { /* clean initial timeout if any */
                talloc_free(conn->limits.ite);
                conn->limits.ite = NULL;
        }
 
+       if (conn->limits.te) { /* clean idle timeout if any */
+               talloc_free(conn->limits.te);
+               conn->limits.te = NULL;
+       }
+
        packet_recv(conn->packet);
+
+       /* set idle timeout */
+       conn->limits.te = event_add_timed(c->event.ctx, conn, 
+                                          
timeval_current_ofs(conn->limits.conn_idle_time, 0),
+                                          ldapsrv_conn_idle_timeout, conn);
 }
 
 /*

Modified: branches/SAMBA_4_0/source/ldap_server/ldap_server.h
===================================================================
--- branches/SAMBA_4_0/source/ldap_server/ldap_server.h 2006-01-13 21:22:25 UTC 
(rev 12916)
+++ branches/SAMBA_4_0/source/ldap_server/ldap_server.h 2006-01-13 22:48:08 UTC 
(rev 12917)
@@ -42,6 +42,7 @@
                int search_timeout;
                
                struct timed_event *ite;
+               struct timed_event *te;
        } limits;
 };
 

Modified: branches/SAMBA_4_0/source/libcli/ldap/ldap.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/ldap/ldap.c        2006-01-13 21:22:25 UTC 
(rev 12916)
+++ branches/SAMBA_4_0/source/libcli/ldap/ldap.c        2006-01-13 22:48:08 UTC 
(rev 12917)
@@ -1264,7 +1264,7 @@
                asn1_start_tag(data, ASN1_CONTEXT(0));
 
                for (i=0; asn1_peek_tag(data, ASN1_SEQUENCE(0)); i++) {
-                       asn1_start_tag(data, ASN1_SEQUENCE(0));
+                       /* asn1_start_tag(data, ASN1_SEQUENCE(0)); */
 
                        ctrl = talloc_realloc(msg, ctrl, struct ldap_Control *, 
i+2);
                        if (!ctrl) {

Reply via email to