summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2010-04-06 11:53:33 +0200
committerKarolin Seeger <kseeger@samba.org>2010-05-06 14:08:35 +0200
commit5069a5792e56bb845b4bcacae7c68075a72cdf57 (patch)
treea921edcc914b38c8c97ceb76ac62d70b63a20496
parent07b4b577d49afcac9794187588e32189429e04ed (diff)
downloadsamba-5069a5792e56bb845b4bcacae7c68075a72cdf57.tar.gz
s3: fix crash in winbindd (similar to commit f8cc0e88fbbb082ead023e0cb437b1e12cf35459)
Signed-off-by: Stefan Metzmacher <metze@samba.org> (cherry picked from commit be9a46c9cae2d05a7eb54e871e05480bd8caa609)
-rw-r--r--source3/libsmb/async_smb.c11
-rw-r--r--source3/rpc_client/rpc_transport_np.c6
2 files changed, 15 insertions, 2 deletions
diff --git a/source3/libsmb/async_smb.c b/source3/libsmb/async_smb.c
index 07d832e1b24..e683e375d9a 100644
--- a/source3/libsmb/async_smb.c
+++ b/source3/libsmb/async_smb.c
@@ -1010,6 +1010,11 @@ static void cli_state_handler(struct event_context *event_ctx,
DEBUG(11, ("cli_state_handler called with flags %d\n", flags));
+ if (cli->fd == -1) {
+ status = NT_STATUS_CONNECTION_INVALID;
+ goto sock_error;
+ }
+
if (flags & EVENT_FD_WRITE) {
size_t to_send;
ssize_t sent;
@@ -1123,6 +1128,8 @@ static void cli_state_handler(struct event_context *event_ctx,
}
}
TALLOC_FREE(cli->fd_event);
- close(cli->fd);
- cli->fd = -1;
+ if (cli->fd != -1) {
+ close(cli->fd);
+ cli->fd = -1;
+ }
}
diff --git a/source3/rpc_client/rpc_transport_np.c b/source3/rpc_client/rpc_transport_np.c
index 4ea361bc2a8..fe3303095d7 100644
--- a/source3/rpc_client/rpc_transport_np.c
+++ b/source3/rpc_client/rpc_transport_np.c
@@ -31,6 +31,12 @@ struct rpc_transport_np_state {
static int rpc_transport_np_state_destructor(struct rpc_transport_np_state *s)
{
bool ret;
+
+ if (s->cli->fd == -1) {
+ DEBUG(10, ("socket was closed, no need to send close request.\n"));
+ return 0;
+ }
+
ret = cli_close(s->cli, s->fnum);
if (!ret) {
DEBUG(1, ("rpc_transport_np_state_destructor: cli_close "