diff options
-rw-r--r-- | source3/libsmb/cliconnect.c | 2 | ||||
-rw-r--r-- | source3/libsmb/clientgen.c | 26 |
2 files changed, 27 insertions, 1 deletions
diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 86834ad081..f13aa21fbd 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -1347,7 +1347,7 @@ BOOL cli_session_request(struct cli_state *cli, cli_send_smb(cli); DEBUG(5,("Sent session request\n")); - if (!cli_receive_smb(cli)) + if (!cli_receive_sessionreply(cli)) return False; if (CVAL(cli->inbuf,0) == 0x84) { diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index 9021d1a362..92a9678de5 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -191,6 +191,32 @@ BOOL cli_receive_smb_return_keepalive(struct cli_state *cli) } /**************************************************************************** + Recv an smb session reply +****************************************************************************/ + +BOOL cli_receive_sessionreply(struct cli_state *cli) +{ + ssize_t len; + + /* fd == -1 causes segfaults -- Tom (tom@ninja.nl) */ + if (cli->fd == -1) + return False; + + len = client_receive_smb(cli, False, 0); + + /* If the server is not responding, note that now */ + if (len < 0) { + DEBUG(0, ("Receiving SMB: Server stopped responding\n")); + cli->smb_rw_error = smb_read_error; + close(cli->fd); + cli->fd = -1; + return False; + } + + return True; +} + +/**************************************************************************** Read the data portion of a readX smb. The timeout is in milliseconds ****************************************************************************/ |