Convert receive_smb_raw_talloc to NTSTATUS
authorVolker Lendecke <vl@samba.org>
Fri, 25 Jan 2008 22:18:56 +0000 (23:18 +0100)
committerVolker Lendecke <vl@samba.org>
Sat, 2 Feb 2008 10:03:22 +0000 (11:03 +0100)
(This used to be commit 187707591ffa2668aecd4857cb2ef2cd20bd6b08)

source3/smbd/process.c

index 10ef67c2b220739674f8f909d083b18f7c70b98b..cb7d12a0c3de95507ceb9a5fa205e80746bfa6c7 100644 (file)
@@ -268,37 +268,21 @@ static NTSTATUS receive_smb_raw_talloc_partial_read(TALLOC_CTX *mem_ctx,
        return NT_STATUS_OK;
 }
 
-static ssize_t receive_smb_raw_talloc(TALLOC_CTX *mem_ctx,
-                                       int fd,
-                                       char **buffer,
-                                       unsigned int timeout,
-                                       size_t *p_unread)
+static NTSTATUS receive_smb_raw_talloc(TALLOC_CTX *mem_ctx, int fd,
+                                      char **buffer, unsigned int timeout,
+                                      size_t *p_unread, size_t *plen)
 {
        char lenbuf[4];
        size_t len;
        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;
 
        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)));
-
-               if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
-                       set_smb_read_error(get_srv_read_error(), SMB_READ_EOF);
-                       return -1;
-               }
-
-               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 status;
        }
 
        if (CVAL(lenbuf,0) == 0 &&
@@ -310,31 +294,14 @@ static ssize_t receive_smb_raw_talloc(TALLOC_CTX *mem_ctx,
                        mem_ctx, lenbuf, fd, buffer, timeout, p_unread, &len);
 
                if (!NT_STATUS_IS_OK(status)) {
-
                        DEBUG(10, ("receive_smb_raw: %s\n",
                                   nt_errstr(status)));
-
-                       if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
-                               set_smb_read_error(get_srv_read_error(),
-                                                  SMB_READ_EOF);
-                               return -1;
-                       }
-
-                       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 status;
                }
        }
 
        if (!valid_packet_size(len)) {
-               cond_set_smb_read_error(get_srv_read_error(),SMB_READ_ERROR);
-               return -1;
+               return NT_STATUS_INVALID_PARAMETER;
        }
 
        /*
@@ -346,32 +313,18 @@ static ssize_t receive_smb_raw_talloc(TALLOC_CTX *mem_ctx,
        if (*buffer == NULL) {
                DEBUG(0, ("Could not allocate inbuf of length %d\n",
                          (int)len+4));
-               cond_set_smb_read_error(get_srv_read_error(),SMB_READ_ERROR);
-               return -1;
+               return NT_STATUS_NO_MEMORY;
        }
 
        memcpy(*buffer, lenbuf, sizeof(lenbuf));
 
        status = read_packet_remainder(fd, (*buffer)+4, timeout, len);
        if (!NT_STATUS_IS_OK(status)) {
-               if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
-                       set_smb_read_error(get_srv_read_error(),
-                                          SMB_READ_EOF);
-                       return -1;
-               }
-
-               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 status;
        }
 
-       return len + 4;
+       *plen = len + 4;
+       return NT_STATUS_OK;
 }
 
 static ssize_t receive_smb_talloc(TALLOC_CTX *mem_ctx,
@@ -381,18 +334,33 @@ static ssize_t receive_smb_talloc(TALLOC_CTX *mem_ctx,
                                size_t *p_unread,
                                bool *p_encrypted)
 {
-       ssize_t len;
+       size_t len;
+       NTSTATUS status;
 
        *p_encrypted = false;
 
-       len = receive_smb_raw_talloc(mem_ctx, fd, buffer, timeout, p_unread);
+       set_smb_read_error(get_srv_read_error(), SMB_READ_OK);
+
+       status = receive_smb_raw_talloc(mem_ctx, fd, buffer, timeout,
+                                       p_unread, &len);
+       if (!NT_STATUS_IS_OK(status)) {
+               if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
+                       set_smb_read_error(get_srv_read_error(), SMB_READ_EOF);
+                       return -1;
+               }
+
+               if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
+                       set_smb_read_error(get_srv_read_error(),
+                                          SMB_READ_TIMEOUT);
+                       return -1;
+               }
 
-       if (len < 0) {
+               set_smb_read_error(get_srv_read_error(), SMB_READ_ERROR);
                return -1;
        }
 
        if (is_encrypted_packet((uint8_t *)*buffer)) {
-               NTSTATUS status = srv_decrypt_buffer(*buffer);
+               status = srv_decrypt_buffer(*buffer);
                if (!NT_STATUS_IS_OK(status)) {
                        DEBUG(0, ("receive_smb_talloc: SMB decryption failed on "
                                "incoming packet! Error %s\n",