summaryrefslogtreecommitdiff
path: root/source3/utils/smb-agent.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/utils/smb-agent.c')
-rw-r--r--source3/utils/smb-agent.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/source3/utils/smb-agent.c b/source3/utils/smb-agent.c
index fd8697771d..dc110fb1da 100644
--- a/source3/utils/smb-agent.c
+++ b/source3/utils/smb-agent.c
@@ -323,7 +323,8 @@ static void filter_reply(char *buf, int moff)
SCVAL(buf, smb_mid, x);
}
-void process_cli_sock(struct sock_redir **sock)
+
+static BOOL process_cli_sock(struct sock_redir **sock)
{
struct cli_state *s = (*sock)->s;
if (s == NULL)
@@ -331,9 +332,7 @@ void process_cli_sock(struct sock_redir **sock)
s = init_client_connection((*sock)->c);
if (s == NULL)
{
- sock_redir_free(*sock);
- *sock = NULL;
- return ;
+ return False;
}
(*sock)->s = s;
}
@@ -342,9 +341,7 @@ void process_cli_sock(struct sock_redir **sock)
if (!receive_smb((*sock)->c, packet, 0))
{
DEBUG(0,("client closed connection\n"));
- sock_redir_free(*sock);
- *sock = NULL;
- return;
+ return False;
}
filter_reply(packet, (*sock)->mid_offset);
@@ -354,12 +351,11 @@ void process_cli_sock(struct sock_redir **sock)
if (!send_smb(s->fd, packet))
{
DEBUG(0,("server is dead\n"));
- sock_redir_free(*sock);
- *sock = NULL;
- return;
+ return False;
}
}
}
+ return True;
}
static int get_smbmid(char *buf)
@@ -513,6 +509,7 @@ static void start_agent(void)
if (FD_ISSET(s, &fds))
{
+ FD_CLR(s, &fds);
c = accept(s, (struct sockaddr*)&addr, &in_addrlen);
if (c != -1)
{
@@ -528,7 +525,12 @@ static void start_agent(void)
}
if (FD_ISSET(socks[i]->c, &fds))
{
- process_cli_sock(&socks[i]);
+ FD_CLR(socks[i]->c, &fds);
+ if (!process_cli_sock(&socks[i]))
+ {
+ sock_redir_free(socks[i]);
+ socks[i] = NULL;
+ }
}
if (socks[i] == NULL)
{