Make explicit draining the socket on RECVFILE. Add
[metze/samba/wip.git] / source3 / smbd / vfs.c
index 21a12ae766a21b2ef248e9ef89951b577731fc3c..78939881d35e1dffe82fc39b2cc7bd9ee61d7b7f 100644 (file)
@@ -428,15 +428,14 @@ ssize_t vfs_write_data(struct smb_request *req,
 
        if (req && req->unread_bytes) {
                SMB_ASSERT(req->unread_bytes == N);
-               ret = SMB_VFS_RECVFILE(smbd_server_fd(),
+               /* VFS_RECVFILE must drain the socket
+                * before returning. */
+               req->unread_bytes = 0;
+               return SMB_VFS_RECVFILE(smbd_server_fd(),
                                        fsp,
                                        fsp->fh->fd,
                                        (SMB_OFF_T)-1,
                                        N);
-               if (ret != -1) {
-                       req->unread_bytes = 0;
-               }
-               return ret;
        }
 
        while (total < N) {
@@ -463,15 +462,14 @@ ssize_t vfs_pwrite_data(struct smb_request *req,
 
        if (req && req->unread_bytes) {
                SMB_ASSERT(req->unread_bytes == N);
-               ret = SMB_VFS_RECVFILE(smbd_server_fd(),
+               /* VFS_RECVFILE must drain the socket
+                * before returning. */
+               req->unread_bytes = 0;
+               return SMB_VFS_RECVFILE(smbd_server_fd(),
                                        fsp,
                                        fsp->fh->fd,
                                        offset,
                                        N);
-               if (ret != -1) {
-                       req->unread_bytes = 0;
-               }
-               return ret;
        }
 
        while (total < N) {