merge fixes from 3.0
authorGerald Carter <jerry@samba.org>
Tue, 10 Feb 2004 04:04:24 +0000 (04:04 +0000)
committerGerald Carter <jerry@samba.org>
Tue, 10 Feb 2004 04:04:24 +0000 (04:04 +0000)
source/lib/util_sock.c

index 12c748e5f2a5ced2726aa97c02f14cd23ec8e544..782f5f3f7310aa41dbac2badfacf159bbe55c771 100644 (file)
@@ -29,6 +29,29 @@ int lastport=0;
 
 int smb_read_error = 0;
 
+static char *get_socket_addr(int fd)
+{
+       struct sockaddr sa;
+       struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa);
+       int     length = sizeof(sa);
+       static fstring addr_buf;
+
+       fstrcpy(addr_buf,"0.0.0.0");
+
+       if (fd == -1) {
+               return addr_buf;
+       }
+       
+       if (getsockname(fd, &sa, &length) < 0) {
+               DEBUG(0,("getpeername failed. Error was %s\n", strerror(errno) ));
+               return addr_buf;
+       }
+       
+       fstrcpy(addr_buf,(char *)inet_ntoa(sockin->sin_addr));
+       
+       return addr_buf;
+}
+
 /****************************************************************************
  Determine if a file descriptor is in fact a socket.
 ****************************************************************************/
@@ -552,6 +575,10 @@ BOOL receive_smb_raw(int fd,char *buffer, unsigned int timeout)
                                smb_read_error = READ_ERROR;
                        return False;
                }
+               
+               /* not all of samba3 properly checks for packet-termination of strings. This
+                  ensures that we don't run off into empty space. */
+               SSVAL(buffer+4,len, 0);
        }
 
        return True;
@@ -954,29 +981,6 @@ char *get_peer_addr(int fd)
        return addr_buf;
 }
 
-static char *get_socket_addr(int fd)
-{
-       struct sockaddr sa;
-       struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa);
-       int     length = sizeof(sa);
-       static fstring addr_buf;
-
-       fstrcpy(addr_buf,"0.0.0.0");
-
-       if (fd == -1) {
-               return addr_buf;
-       }
-       
-       if (getsockname(fd, &sa, &length) < 0) {
-               DEBUG(0,("getpeername failed. Error was %s\n", strerror(errno) ));
-               return addr_buf;
-       }
-       
-       fstrcpy(addr_buf,(char *)inet_ntoa(sockin->sin_addr));
-       
-       return addr_buf;
-}
-
 /*******************************************************************
  Create protected unix domain socket.