[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Thu Nov 10 08:32:04 MST 2011
The branch, master has been updated
via 17f1a97 libcli/cldap: fix a crash bug in cldap_socket_recv_dgram() (bug #8593)
via 88bcdbb s4:finddcs_cldap: debug the correct server address instead of NULL
from 22ddbb5 s3:smbd: don't limit the number of open dptrs for smb2 (bug #8592)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 17f1a97a614db4ed8292544988cb6a6cf56621d8
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Nov 10 14:43:55 2011 +0100
libcli/cldap: fix a crash bug in cldap_socket_recv_dgram() (bug #8593)
After a calling any wrapper of tevent_req_notify_callback(),
e.g. tevent_req_nterror(), tevent_req_done(), tevent_req_nomem(),
a function has to return immediately otherwise it is very likely to
crash, unless in calls tevent_req_defer_callback() before.
metze
Autobuild-User: Stefan Metzmacher <metze at samba.org>
Autobuild-Date: Thu Nov 10 16:31:59 CET 2011 on sn-devel-104
commit 88bcdbb16a42dcd21bb1584d7d7ffa00ac1957b8
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Nov 10 13:18:20 2011 +0100
s4:finddcs_cldap: debug the correct server address instead of NULL
metze
-----------------------------------------------------------------------
Summary of changes:
libcli/cldap/cldap.c | 35 +++++++++++++++++++++++++----------
source4/libcli/finddcs_cldap.c | 3 ++-
2 files changed, 27 insertions(+), 11 deletions(-)
Changeset truncated at 500 lines:
diff --git a/libcli/cldap/cldap.c b/libcli/cldap/cldap.c
index b7df9d2..29c3b7b 100644
--- a/libcli/cldap/cldap.c
+++ b/libcli/cldap/cldap.c
@@ -258,7 +258,8 @@ static bool cldap_socket_recv_dgram(struct cldap_socket *c,
p = idr_find(c->searches.idr, in->ldap_msg->messageid);
if (p == NULL) {
if (!c->incoming.handler) {
- goto done;
+ TALLOC_FREE(in);
+ return true;
}
/* this function should free or steal 'in' */
@@ -266,37 +267,51 @@ static bool cldap_socket_recv_dgram(struct cldap_socket *c,
return false;
}
- search = talloc_get_type(p, struct cldap_search_state);
+ search = talloc_get_type_abort(p, struct cldap_search_state);
search->response.in = talloc_move(search, &in);
search->response.asn1 = asn1;
search->response.asn1->ofs = 0;
DLIST_REMOVE(c->searches.list, search);
- if (!cldap_recvfrom_setup(c)) {
- goto nomem;
+ if (cldap_recvfrom_setup(c)) {
+ tevent_req_done(search->req);
+ return true;
}
+ /*
+ * This request was ok, just defer the notify of the caller
+ * and then just fail the next request if needed
+ */
+ tevent_req_defer_callback(search->req, search->caller.ev);
tevent_req_done(search->req);
- talloc_free(in);
- return true;
+ status = NT_STATUS_NO_MEMORY;
+ /* in is NULL it this point */
+ goto nterror;
nomem:
in->recv_errno = ENOMEM;
error:
status = map_nt_error_from_unix_common(in->recv_errno);
nterror:
+ TALLOC_FREE(in);
/* in connected mode the first pending search gets the error */
if (!c->connected) {
/* otherwise we just ignore the error */
- goto done;
+ return false;
}
if (!c->searches.list) {
- goto done;
+ return false;
}
+ /*
+ * We might called tevent_req_done() for a successful
+ * search before, so we better deliver the failure
+ * after the success, that is why we better also
+ * use tevent_req_defer_callback() here.
+ */
+ tevent_req_defer_callback(c->searches.list->req,
+ c->searches.list->caller.ev);
tevent_req_nterror(c->searches.list->req, status);
-done:
- talloc_free(in);
return false;
}
diff --git a/source4/libcli/finddcs_cldap.c b/source4/libcli/finddcs_cldap.c
index 8199e37..a0f538d 100644
--- a/source4/libcli/finddcs_cldap.c
+++ b/source4/libcli/finddcs_cldap.c
@@ -249,7 +249,8 @@ static void finddcs_cldap_next_server(struct finddcs_cldap_state *state)
NETLOGON_NT_VERSION_IP;
state->netlogon->in.map_response = true;
- DEBUG(4,("finddcs: performing CLDAP query on %s\n", state->netlogon->in.dest_address));
+ DEBUG(4,("finddcs: performing CLDAP query on %s\n",
+ state->srv_addresses[state->srv_address_index]));
subreq = cldap_netlogon_send(state, state->ev,
state->cldap, state->netlogon);
--
Samba Shared Repository
More information about the samba-cvs
mailing list