summaryrefslogtreecommitdiff
path: root/source4/libcli/cldap
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2007-04-05 07:37:21 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:49:51 -0500
commit4685a42eaf28e0d4644bfa4cf18ef08abee329d3 (patch)
tree701141ba7dd2cde6edb15b26784e3cb96782e1c9 /source4/libcli/cldap
parent432dfdbcd186cbe8b8a85701e792085de407d18a (diff)
downloadsamba-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.c16
-rw-r--r--source4/libcli/cldap/cldap.h3
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;