1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-04 08:22:08 +03:00

r21992: Fix keepalive processing when encryption turned on.

Jeremy.
(This used to be commit 8f113ad191)
This commit is contained in:
Jeremy Allison
2007-03-27 21:55:43 +00:00
committed by Gerald (Jerry) Carter
parent 4a66d0e232
commit 0eab431194
2 changed files with 28 additions and 8 deletions

View File

@ -48,13 +48,13 @@ int cli_set_port(struct cli_state *cli, int port)
*MUST* be of size BUFFER_SIZE+SAFETY_MARGIN.
The timeout is in milliseconds
This is exactly the same as receive_smb except that it never returns
This is exactly the same as receive_smb except that it can be set to never return
a session keepalive packet (just as receive_smb used to do).
receive_smb was changed to return keepalives as the oplock processing means this call
should never go into a blocking read.
****************************************************************************/
static BOOL client_receive_smb(struct cli_state *cli)
static BOOL client_receive_smb(struct cli_state *cli, BOOL eat_keepalives)
{
BOOL ret;
int fd = cli->fd;
@ -71,8 +71,10 @@ static BOOL client_receive_smb(struct cli_state *cli)
}
/* Ignore session keepalive packets. */
if(CVAL(buffer,0) != SMBkeepalive)
break;
if (eat_keepalives && (CVAL(buffer,0) == SMBkeepalive)) {
continue;
}
break;
}
if (cli_encryption_on(cli)) {
@ -94,7 +96,7 @@ static BOOL client_receive_smb(struct cli_state *cli)
Recv an smb.
****************************************************************************/
BOOL cli_receive_smb(struct cli_state *cli)
BOOL cli_receive_smb_internal(struct cli_state *cli, BOOL eat_keepalives)
{
BOOL ret;
@ -103,7 +105,7 @@ BOOL cli_receive_smb(struct cli_state *cli)
return False;
again:
ret = client_receive_smb(cli);
ret = client_receive_smb(cli, eat_keepalives);
if (ret) {
/* it might be an oplock break request */
@ -142,6 +144,24 @@ BOOL cli_receive_smb(struct cli_state *cli)
return True;
}
/****************************************************************************
Recv an smb - eat keepalives.
****************************************************************************/
BOOL cli_receive_smb(struct cli_state *cli)
{
return cli_receive_smb_internal(cli, True);
}
/****************************************************************************
Recv an smb - return keepalives.
****************************************************************************/
BOOL cli_receive_smb_return_keepalive(struct cli_state *cli)
{
return cli_receive_smb_internal(cli, False);
}
static ssize_t write_socket(int fd, const char *buf, size_t len)
{
ssize_t ret=0;