summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-01-25 21:24:48 +0100
committerVolker Lendecke <vl@samba.org>2008-02-02 11:03:21 +0100
commit0afbfa4284db8204a3696f4fea6cff96965e6074 (patch)
tree431cc875538207f6817d883f1a4ddfc71b8d3909 /source3/smbd
parent3e5b98555b832772d6fe93a57005bc39222a5189 (diff)
downloadsamba-0afbfa4284db8204a3696f4fea6cff96965e6074.tar.gz
samba-0afbfa4284db8204a3696f4fea6cff96965e6074.tar.bz2
samba-0afbfa4284db8204a3696f4fea6cff96965e6074.zip
Convert read_smb_length_return_keepalive to return NTSTATUS
(This used to be commit 73a79a957a33a8761acf54598ce71e3604ecf3c5)
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/process.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index 4672510d8d..d6301d0d00 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -300,24 +300,30 @@ static ssize_t receive_smb_raw_talloc(TALLOC_CTX *mem_ctx,
size_t *p_unread)
{
char lenbuf[4];
- ssize_t len,ret;
+ size_t len;
+ ssize_t ret;
int min_recv_size = lp_min_receive_file_size();
+ NTSTATUS status;
set_smb_read_error(get_srv_read_error(),SMB_READ_OK);
*p_unread = 0;
- len = read_smb_length_return_keepalive(fd, lenbuf,
- timeout, get_srv_read_error());
- if (len < 0) {
- DEBUG(10,("receive_smb_raw: length < 0!\n"));
+ status = read_smb_length_return_keepalive(fd, lenbuf, timeout, &len);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(10, ("receive_smb_raw: %s\n", nt_errstr(status)));
- /*
- * Correct fix. smb_read_error may have already been
- * set. Only set it here if not already set. Global
- * variables still suck :-). JRA.
- */
+ if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
+ set_smb_read_error(get_srv_read_error(), SMB_READ_EOF);
+ return -1;
+ }
- 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;
}