Only set smb_read_error if not already set.
authorJeremy Allison <jra@samba.org>
Sat, 23 Feb 2002 21:03:21 +0000 (21:03 +0000)
committerJeremy Allison <jra@samba.org>
Sat, 23 Feb 2002 21:03:21 +0000 (21:03 +0000)
Jeremy.
(This used to be commit 8220135fd16b4a1778e49f8315f64754924af0d8)

source3/lib/util_sock.c

index 45beb38ac9e2560bb17e065b711ae833209ddfcf..9081f28f83508b81e1fccc73d87edc8fe7bcd968 100644 (file)
@@ -663,10 +663,15 @@ BOOL receive_smb(int fd,char *buffer, unsigned int timeout)
        len = read_smb_length_return_keepalive(fd,buffer,timeout);
        if (len < 0) {
                DEBUG(10,("receive_smb: length < 0!\n"));
-               /* XXX: You might think that we ought to set
-                * smb_read_error here, but apparently that breaks the
-                * recursive main loop in oplock.c.  Global variables
-                * suck. */
+
+               /*
+                * Correct fix. smb_read_error may have already been
+                * set. Only set it here if not already set. Global
+                * variables still suck :-). JRA.
+                */
+
+               if (smb_read_error == 0)
+                       smb_read_error = READ_ERROR;
                return False;
        }
 
@@ -678,7 +683,15 @@ BOOL receive_smb(int fd,char *buffer, unsigned int timeout)
        if (len > (BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE)) {
                DEBUG(0,("Invalid packet length! (%d bytes).\n",len));
                if (len > BUFFER_SIZE + (SAFETY_MARGIN/2)) {
-                       smb_read_error = READ_ERROR;
+
+                       /*
+                        * Correct fix. smb_read_error may have already been
+                        * set. Only set it here if not already set. Global
+                        * variables still suck :-). JRA.
+                        */
+
+                       if (smb_read_error == 0)
+                               smb_read_error = READ_ERROR;
                        return False;
                }
        }
@@ -686,7 +699,8 @@ BOOL receive_smb(int fd,char *buffer, unsigned int timeout)
        if(len > 0) {
                ret = read_socket_data(fd,buffer+4,len);
                if (ret != len) {
-                       smb_read_error = READ_ERROR;
+                       if (smb_read_error == 0)
+                               smb_read_error = READ_ERROR;
                        return False;
                }
        }