diff options
author | Andrew Tridgell <tridge@samba.org> | 2007-04-05 07:37:21 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:49:51 -0500 |
commit | 4685a42eaf28e0d4644bfa4cf18ef08abee329d3 (patch) | |
tree | 701141ba7dd2cde6edb15b26784e3cb96782e1c9 /source4/libcli/cldap | |
parent | 432dfdbcd186cbe8b8a85701e792085de407d18a (diff) | |
download | samba-4685a42eaf28e0d4644bfa4cf18ef08abee329d3.tar.gz samba-4685a42eaf28e0d4644bfa4cf18ef08abee329d3.tar.bz2 samba-4685a42eaf28e0d4644bfa4cf18ef08abee329d3.zip |
r22090: fix error handling in cldap client library to cope with bad host names
(This used to be commit 99c51b104d05a8ad32563497216271e2f20d4985)
Diffstat (limited to 'source4/libcli/cldap')
-rw-r--r-- | source4/libcli/cldap/cldap.c | 16 | ||||
-rw-r--r-- | source4/libcli/cldap/cldap.h | 3 |
2 files changed, 13 insertions, 6 deletions
diff --git a/source4/libcli/cldap/cldap.c b/source4/libcli/cldap/cldap.c index 96b60da25f..c68a037552 100644 --- a/source4/libcli/cldap/cldap.c +++ b/source4/libcli/cldap/cldap.c @@ -165,7 +165,8 @@ static void cldap_request_timeout(struct event_context *event_ctx, return; } - req->state = CLDAP_REQUEST_TIMEOUT; + req->state = CLDAP_REQUEST_ERROR; + req->status = NT_STATUS_IO_TIMEOUT; if (req->async.fn) { req->async.fn(req); } @@ -186,10 +187,14 @@ static void cldap_socket_send(struct cldap_socket *cldap) status = socket_sendto(cldap->sock, &req->encoded, &len, req->dest); if (NT_STATUS_IS_ERR(status)) { - DEBUG(3,("Failed to send cldap request of length %u to %s:%d\n", + DEBUG(0,("Failed to send cldap request of length %u to %s:%d\n", (unsigned)req->encoded.length, req->dest->addr, req->dest->port)); DLIST_REMOVE(cldap->send_queue, req); - talloc_free(req); + req->state = CLDAP_REQUEST_ERROR; + req->status = status; + if (req->async.fn) { + req->async.fn(req); + } continue; } @@ -442,9 +447,10 @@ NTSTATUS cldap_search_recv(struct cldap_request *req, } } - if (req->state == CLDAP_REQUEST_TIMEOUT) { + if (req->state == CLDAP_REQUEST_ERROR) { + status = req->status; talloc_free(req); - return NT_STATUS_IO_TIMEOUT; + return status; } ldap_msg = talloc(mem_ctx, struct ldap_message); diff --git a/source4/libcli/cldap/cldap.h b/source4/libcli/cldap/cldap.h index 8bae2aa41b..928cf1f3e4 100644 --- a/source4/libcli/cldap/cldap.h +++ b/source4/libcli/cldap/cldap.h @@ -28,7 +28,7 @@ struct ldap_message; enum cldap_request_state {CLDAP_REQUEST_SEND, CLDAP_REQUEST_WAIT, CLDAP_REQUEST_DONE, - CLDAP_REQUEST_TIMEOUT}; + CLDAP_REQUEST_ERROR}; /* a cldap request packet @@ -39,6 +39,7 @@ struct cldap_request { struct cldap_socket *cldap; enum cldap_request_state state; + NTSTATUS status; /* where to send the request */ struct socket_address *dest; |