[SCM] Samba Shared Repository - branch v3-2-test updated -
release-3-2-0pre2-3116-g6cd1575
Michael Adam
obnox at samba.org
Mon Oct 27 14:03:28 GMT 2008
The branch, v3-2-test has been updated
via 6cd1575e1cf7564f7c7c56eedf58af8dcb709f44 (commit)
from ed05ee03c59c7fe9994aaa79b15eb6984d641755 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test
- Log -----------------------------------------------------------------
commit 6cd1575e1cf7564f7c7c56eedf58af8dcb709f44
Author: Michael Adam <obnox at samba.org>
Date: Mon Oct 27 14:28:44 2008 +0100
winbind: fix smbd hanging on Solaris when winbindd closes socket.
On some versions of Solaris, we observed a strange effect of close(2)
on a socket: After the server (here winbindd) called close, the client fd
was not marked as readable for select. And a write call to the fd did
not produce an error EPIPE but just returned as if successful.
So while winbindd had called remove_client(), the corresponding smbd
still thought that it was connected, but failed to retrieve answers
for its queries.
This patch works around the problem by forcing the client fd to
the readable state: Just write one byte into the socket before
closing.
Michael
-----------------------------------------------------------------------
Summary of changes:
source/winbindd/winbindd.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/winbindd/winbindd.c b/source/winbindd/winbindd.c
index 876b2e8..efc1049 100644
--- a/source/winbindd/winbindd.c
+++ b/source/winbindd/winbindd.c
@@ -745,12 +745,17 @@ static void new_connection(int listen_sock, bool privileged)
static void remove_client(struct winbindd_cli_state *state)
{
+ char c = 0;
+
/* It's a dead client - hold a funeral */
if (state == NULL) {
return;
}
-
+
+ /* tell client, we are closing ... */
+ write(state->sock, &c, sizeof(c));
+
/* Close socket */
close(state->sock);
--
Samba Shared Repository
More information about the samba-cvs
mailing list