mirror of
https://github.com/samba-team/samba.git
synced 2025-01-22 22:04:08 +03:00
r12917: fix decoding of ldap controls
some more work on timeouts (This used to be commit a7e2fe3cb33be2effff7eb764047567f2da3cd55)
This commit is contained in:
parent
c582cb23f7
commit
eed0a95128
@ -223,6 +223,19 @@ static NTSTATUS ldapsrv_decode(void *private, DATA_BLOB blob)
|
||||
return ldapsrv_decode_plain(conn, blob);
|
||||
}
|
||||
|
||||
/*
|
||||
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
|
||||
*/
|
||||
@ -231,12 +244,22 @@ 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) {
|
||||
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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -42,6 +42,7 @@ struct ldapsrv_connection {
|
||||
int search_timeout;
|
||||
|
||||
struct timed_event *ite;
|
||||
struct timed_event *te;
|
||||
} limits;
|
||||
};
|
||||
|
||||
|
@ -1264,7 +1264,7 @@ BOOL ldap_decode(struct asn1_data *data, struct ldap_message *msg)
|
||||
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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user