mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
Convert read_smb_length_return_keepalive to return NTSTATUS
(This used to be commit 73a79a957a
)
This commit is contained in:
parent
3e5b98555b
commit
0afbfa4284
@ -1141,36 +1141,21 @@ bool send_keepalive(int client)
|
|||||||
Timeout is in milliseconds.
|
Timeout is in milliseconds.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
ssize_t read_smb_length_return_keepalive(int fd,
|
NTSTATUS read_smb_length_return_keepalive(int fd, char *inbuf,
|
||||||
char *inbuf,
|
unsigned int timeout,
|
||||||
unsigned int timeout,
|
size_t *len)
|
||||||
enum smb_read_errors *pre)
|
|
||||||
{
|
{
|
||||||
size_t len=0;
|
|
||||||
int msg_type;
|
int msg_type;
|
||||||
NTSTATUS status;
|
NTSTATUS status;
|
||||||
|
|
||||||
set_smb_read_error(pre, SMB_READ_OK);
|
|
||||||
|
|
||||||
status = read_socket_with_timeout_ntstatus(fd, inbuf, 4, 4, timeout,
|
status = read_socket_with_timeout_ntstatus(fd, inbuf, 4, 4, timeout,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (!NT_STATUS_IS_OK(status)) {
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
|
return status;
|
||||||
set_smb_read_error(pre, SMB_READ_EOF);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
|
|
||||||
set_smb_read_error(pre, SMB_READ_TIMEOUT);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
set_smb_read_error(pre, SMB_READ_ERROR);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
len = smb_len(inbuf);
|
*len = smb_len(inbuf);
|
||||||
msg_type = CVAL(inbuf,0);
|
msg_type = CVAL(inbuf,0);
|
||||||
|
|
||||||
if (msg_type == SMBkeepalive) {
|
if (msg_type == SMBkeepalive) {
|
||||||
@ -1179,7 +1164,7 @@ ssize_t read_smb_length_return_keepalive(int fd,
|
|||||||
|
|
||||||
DEBUG(10,("got smb length of %lu\n",(unsigned long)len));
|
DEBUG(10,("got smb length of %lu\n",(unsigned long)len));
|
||||||
|
|
||||||
return len;
|
return NT_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -1191,15 +1176,31 @@ ssize_t read_smb_length_return_keepalive(int fd,
|
|||||||
|
|
||||||
ssize_t read_smb_length(int fd, char *inbuf, unsigned int timeout, enum smb_read_errors *pre)
|
ssize_t read_smb_length(int fd, char *inbuf, unsigned int timeout, enum smb_read_errors *pre)
|
||||||
{
|
{
|
||||||
ssize_t len;
|
size_t len;
|
||||||
uint8_t msgtype = SMBkeepalive;
|
uint8_t msgtype = SMBkeepalive;
|
||||||
|
|
||||||
|
set_smb_read_error(pre, SMB_READ_OK);
|
||||||
|
|
||||||
while (msgtype == SMBkeepalive) {
|
while (msgtype == SMBkeepalive) {
|
||||||
len = read_smb_length_return_keepalive(fd, inbuf, timeout,
|
NTSTATUS status;
|
||||||
pre);
|
|
||||||
if (len < 0) {
|
status = read_smb_length_return_keepalive(fd, inbuf, timeout,
|
||||||
return len;
|
&len);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
|
||||||
|
set_smb_read_error(pre, SMB_READ_EOF);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
|
||||||
|
set_smb_read_error(pre, SMB_READ_TIMEOUT);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_smb_read_error(pre, SMB_READ_ERROR);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
msgtype = CVAL(inbuf, 0);
|
msgtype = CVAL(inbuf, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1225,21 +1226,28 @@ ssize_t receive_smb_raw(int fd,
|
|||||||
size_t maxlen,
|
size_t maxlen,
|
||||||
enum smb_read_errors *pre)
|
enum smb_read_errors *pre)
|
||||||
{
|
{
|
||||||
ssize_t len,ret;
|
size_t len;
|
||||||
|
ssize_t ret;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
set_smb_read_error(pre,SMB_READ_OK);
|
set_smb_read_error(pre,SMB_READ_OK);
|
||||||
|
|
||||||
len = read_smb_length_return_keepalive(fd,buffer,timeout,pre);
|
status = read_smb_length_return_keepalive(fd,buffer,timeout,&len);
|
||||||
if (len < 0) {
|
|
||||||
DEBUG(10,("receive_smb_raw: length < 0!\n"));
|
|
||||||
|
|
||||||
/*
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
* Correct fix. smb_read_error may have already been
|
DEBUG(10, ("receive_smb_raw: %s!\n", nt_errstr(status)));
|
||||||
* set. Only set it here if not already set. Global
|
|
||||||
* variables still suck :-). JRA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
cond_set_smb_read_error(pre,SMB_READ_ERROR);
|
if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
|
||||||
|
set_smb_read_error(pre, SMB_READ_EOF);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
|
||||||
|
set_smb_read_error(pre, SMB_READ_TIMEOUT);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_smb_read_error(pre, SMB_READ_ERROR);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,24 +300,30 @@ static ssize_t receive_smb_raw_talloc(TALLOC_CTX *mem_ctx,
|
|||||||
size_t *p_unread)
|
size_t *p_unread)
|
||||||
{
|
{
|
||||||
char lenbuf[4];
|
char lenbuf[4];
|
||||||
ssize_t len,ret;
|
size_t len;
|
||||||
|
ssize_t ret;
|
||||||
int min_recv_size = lp_min_receive_file_size();
|
int min_recv_size = lp_min_receive_file_size();
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
set_smb_read_error(get_srv_read_error(),SMB_READ_OK);
|
set_smb_read_error(get_srv_read_error(),SMB_READ_OK);
|
||||||
*p_unread = 0;
|
*p_unread = 0;
|
||||||
|
|
||||||
len = read_smb_length_return_keepalive(fd, lenbuf,
|
status = read_smb_length_return_keepalive(fd, lenbuf, timeout, &len);
|
||||||
timeout, get_srv_read_error());
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
if (len < 0) {
|
DEBUG(10, ("receive_smb_raw: %s\n", nt_errstr(status)));
|
||||||
DEBUG(10,("receive_smb_raw: length < 0!\n"));
|
|
||||||
|
|
||||||
/*
|
if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
|
||||||
* Correct fix. smb_read_error may have already been
|
set_smb_read_error(get_srv_read_error(), SMB_READ_EOF);
|
||||||
* set. Only set it here if not already set. Global
|
return -1;
|
||||||
* variables still suck :-). JRA.
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
cond_set_smb_read_error(get_srv_read_error(),SMB_READ_ERROR);
|
if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
|
||||||
|
set_smb_read_error(get_srv_read_error(),
|
||||||
|
SMB_READ_TIMEOUT);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_smb_read_error(get_srv_read_error(), SMB_READ_ERROR);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user