I can't get away without a 'length' arg. :-).
authorJeremy Allison <jra@samba.org>
Sun, 4 Nov 2007 01:41:26 +0000 (18:41 -0700)
committerJeremy Allison <jra@samba.org>
Sun, 4 Nov 2007 01:41:26 +0000 (18:41 -0700)
Jeremy.
(This used to be commit 95d01279a5def709d0a5d5ae7224d6286006d120)

15 files changed:
source3/auth/pampass.c
source3/lib/access.c
source3/lib/substitute.c
source3/lib/util_sock.c
source3/modules/vfs_expand_msdfs.c
source3/printing/print_cups.c
source3/printing/print_iprint.c
source3/rpc_server/srv_netlog_nt.c
source3/smbd/connection.c
source3/smbd/process.c
source3/smbd/server.c
source3/smbd/service.c
source3/smbd/session.c
source3/smbd/sesssetup.c
source3/web/cgi.c

index 9b8faf16092ac34d38c774d829b48ca766af0300..c7ec79b969469fe801ebd1f2915df72850cc0777 100644 (file)
@@ -470,7 +470,7 @@ static bool smb_pam_start(pam_handle_t **pamh, const char *user, const char *rho
        if (rhost == NULL) {
                our_rhost = client_name();
                if (strequal(our_rhost,"UNKNOWN"))
-                       our_rhost = client_addr(addr);
+                       our_rhost = client_addr(addr,sizeof(addr));
        } else {
                our_rhost = rhost;
        }
index 31bc515b47d563b211cf4d3d9c9d15a8de64bbe7..1e4df83607912d8627b8582e6ed52a4087771d82 100644 (file)
@@ -358,24 +358,24 @@ bool check_access(int sock, const char **allow_list, const char **deny_list)
                        ret = allow_access(deny_list,
                                        allow_list,
                                        "",
-                                       get_peer_addr(sock,addr));
+                                       get_peer_addr(sock,addr,sizeof(addr)));
                } else {
                        DEBUG (3, ("check_access: hostnames in "
                                "host allow/deny list.\n"));
                        ret = allow_access(deny_list,
                                        allow_list,
                                        get_peer_name(sock,true),
-                                       get_peer_addr(sock,addr));
+                                       get_peer_addr(sock,addr,sizeof(addr)));
                }
 
                if (ret) {
                        DEBUG(2,("Allowed connection from %s (%s)\n",
                                 only_ip ? "" : get_peer_name(sock,true),
-                                get_peer_addr(sock,addr)));
+                                get_peer_addr(sock,addr,sizeof(addr))));
                } else {
                        DEBUG(0,("Denied connection from %s (%s)\n",
                                 only_ip ? "" : get_peer_name(sock,true),
-                                get_peer_addr(sock,addr)));
+                                get_peer_addr(sock,addr,sizeof(addr))));
                }
        }
 
index a6195ef9d745d99cdde494afaad1ed0f38ff84de..d4c7cd6467e0d7f4e6e071fd6922096e5b345648 100644 (file)
@@ -495,7 +495,8 @@ char *alloc_sub_basic(const char *smb_name, const char *domain_name,
                        a_string = realloc_string_sub(a_string, "%D", r);
                        break;
                case 'I' :
-                       a_string = realloc_string_sub(a_string, "%I", client_addr(addr));
+                       a_string = realloc_string_sub(a_string, "%I",
+                                               client_addr(addr, sizeof(addr)));
                        break;
                case 'i': 
                        a_string = realloc_string_sub( a_string, "%i", client_socket_addr() );
index b1e508182d6ebba661aea18c93f0b4c8f1df108e..5422bc21803d3775cdc2e8db43a3d283d3c8c890 100644 (file)
@@ -590,7 +590,7 @@ void client_setfd(int fd)
        char addr[INET6_ADDRSTRLEN];
        client_fd = fd;
        safe_strcpy(client_ip_string,
-                       get_peer_addr(client_fd,addr),
+                       get_peer_addr(client_fd,addr,sizeof(addr)),
                        sizeof(client_ip_string)-1);
 }
 
@@ -659,9 +659,9 @@ const char *client_name(void)
        return get_peer_name(client_fd,false);
 }
 
-const char *client_addr(char addr[INET6_ADDRSTRLEN])
+const char *client_addr(char *addr, size_t addrlen)
 {
-       return get_peer_addr(client_fd,addr);
+       return get_peer_addr(client_fd,addr,addrlen);
 }
 
 const char *client_socket_addr(void)
@@ -1700,14 +1700,15 @@ int open_udp_socket(const char *host, int port)
  ******************************************************************/
 
 static const char *get_peer_addr_internal(int fd,
-                               char addr_buf[INET6_ADDRSTRLEN],
+                               char *addr_buf,
+                               size_t addr_buf_len,
                                struct sockaddr_storage *pss,
                                socklen_t *plength)
 {
        struct sockaddr_storage ss;
        socklen_t length = sizeof(ss);
 
-       safe_strcpy(addr_buf,"0.0.0.0",sizeof(addr_buf)-1);
+       safe_strcpy(addr_buf,"0.0.0.0",addr_buf_len-1);
 
        if (fd == -1) {
                return addr_buf;
@@ -1824,11 +1825,11 @@ const char *get_peer_name(int fd, bool force_lookup)
           with dns. To avoid the delay we avoid the lookup if
           possible */
        if (!lp_hostname_lookups() && (force_lookup == false)) {
-               pstrcpy(name_buf, get_peer_addr(fd, addr_buf));
+               pstrcpy(name_buf, get_peer_addr(fd, addr_buf, sizeof(addr_buf)));
                return name_buf;
        }
 
-       p = get_peer_addr_internal(fd, addr_buf, &ss, &length);
+       p = get_peer_addr_internal(fd, addr_buf, sizeof(addr_buf), &ss, &length);
 
        /* it might be the same as the last one - save some DNS work */
        if (strcmp(p, addr_buf_cache) == 0) {
@@ -1881,9 +1882,9 @@ const char *get_peer_name(int fd, bool force_lookup)
  Return the IP addr of the remote end of a socket as a string.
  ******************************************************************/
 
-const char *get_peer_addr(int fd, char addr[INET6_ADDRSTRLEN])
+const char *get_peer_addr(int fd, char *addr, size_t addr_len)
 {
-       return get_peer_addr_internal(fd, addr, NULL, NULL);
+       return get_peer_addr_internal(fd, addr, addr_len, NULL, NULL);
 }
 
 /*******************************************************************
index 12f2c8e72b0a0d09266a164055706f7985cc7850..4b670d5172cb7c3bc6ee16a2e6b83d2eee7cf395 100644 (file)
@@ -71,7 +71,8 @@ static bool read_target_host(const char *mapfile, pstring targethost)
 
                *space = '\0';
 
-               if (strncmp(client_addr(addr), buf, strlen(buf)) == 0) {
+               if (strncmp(client_addr(addr,sizeof(addr)),
+                               buf, strlen(buf)) == 0) {
                        found = True;
                        break;
                }
index ff4c7ebc5f5e009e0861c05a56d2c189588874a3..5709d936243afe2f53b680604acc7cee7a31ddb1 100644 (file)
@@ -620,7 +620,7 @@ static int cups_job_submit(int snum, struct printjob *pjob)
 
        clientname = client_name();
        if (strcmp(clientname, "UNKNOWN") == 0) {
-               clientname = client_addr(addr);
+               clientname = client_addr(addr,sizeof(addr));
        }
 
        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
index 8ee681b3be5d43795daa10fb3c7ee821c709791f..6dd19577f14b91c9ed39cf88e9ad8deefce63709 100644 (file)
@@ -781,7 +781,7 @@ static int iprint_job_submit(int snum, struct printjob *pjob)
 
        clientname = client_name();
        if (strcmp(clientname, "UNKNOWN") == 0) {
-               clientname = client_addr(addr);
+               clientname = client_addr(addr,sizeof(addr));
        }
        
        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
index 6de8cd75723667e447269384dab272b51bb34e1f..f876ee976df634c11e9cb450ccf0ed63bd72c097 100644 (file)
@@ -210,7 +210,7 @@ static NTSTATUS get_md4pw(char *md4pw, char *mach_acct, uint16 sec_chan_type)
      */
 
        if (!allow_access(lp_domain_hostsdeny(), lp_domain_hostsallow(),
-                         client_name(), client_addr(addr)))
+                         client_name(), client_addr(addr,sizeof(addr))))
        {
                DEBUG(0,("get_md4pw: Workstation %s denied access to domain\n", mach_acct));
                return False;
index 4b89668640001e347ed154903c2dc43a7cd19860..f0415138204f4c17ee13574b46b51fd8304d72a2 100644 (file)
@@ -152,7 +152,7 @@ bool claim_connection(connection_struct *conn, const char *name,
        crec.bcast_msg_flags = msg_flags;
        
        strlcpy(crec.machine,get_remote_machine_name(),sizeof(crec.machine));
-       strlcpy(crec.addr,conn?conn->client_address:client_addr(addr),
+       strlcpy(crec.addr,conn?conn->client_address:client_addr(addr,sizeof(addr)),
                sizeof(crec.addr));
 
        dbuf.dptr = (uint8 *)&crec;
index f35e7054d77060bd55c0f01609b6c3fd5ff19d99..24feac463095268ce112a906948cd1eabe446480 100644 (file)
@@ -1471,7 +1471,8 @@ static void process_smb(char *inbuf, size_t nread, size_t unread_bytes)
                                  lp_hostsdeny(-1))) {
                        /* send a negative session response "not listening on calling name" */
                        static unsigned char buf[5] = {0x83, 0, 0, 1, 0x81};
-                       DEBUG( 1, ( "Connection denied from %s\n", client_addr(addr) ) );
+                       DEBUG( 1, ( "Connection denied from %s\n",
+                               client_addr(addr,sizeof(addr)) ) );
                        (void)send_smb(smbd_server_fd(),(char *)buf);
                        exit_server_cleanly("connection denied");
                }
index 34b3d4a32a8d49599d8258d690597595e59a32c5..e77573b9c6ba126ea4abb3fba90f58263c59d429 100644 (file)
@@ -624,8 +624,10 @@ static bool open_sockets_smbd(bool is_daemon, bool interactive, const char *smb_
 
                                /* this is needed so that we get decent entries
                                   in smbstatus for port 445 connects */
-                               set_remote_machine_name(get_peer_addr(smbd_server_fd(),remaddr),
-                                                       False);
+                               set_remote_machine_name(get_peer_addr(smbd_server_fd(),
+                                                               remaddr,
+                                                               sizeof(remaddr)),
+                                                               false);
 
                                /* Reset the state of the random
                                 * number generation system, so
index 2901cd3417ca3711578488ece8039c21195ea746..502fadedc75d7035322a1f37444e8ffa07e77e47 100644 (file)
@@ -758,7 +758,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
 
        add_session_user(user);
 
-       safe_strcpy(conn->client_address, client_addr(addr), 
+       safe_strcpy(conn->client_address, client_addr(addr,sizeof(addr)), 
                    sizeof(conn->client_address)-1);
        conn->num_files_open = 0;
        conn->lastused = conn->lastused_count = time(NULL);
@@ -1302,7 +1302,9 @@ connection_struct *make_connection(const char *service_in, DATA_BLOB password,
                }
 
                DEBUG(0,("%s (%s) couldn't find service %s\n",
-                        get_remote_machine_name(), client_addr(addr), service));
+                       get_remote_machine_name(),
+                       client_addr(addr,sizeof(addr)),
+                       service));
                *status = NT_STATUS_BAD_NETWORK_NAME;
                return NULL;
        }
index 15154162b95df04405c972b699ddc019d3a833de..69f4a37c850f8c45effa8d887bd29fb112415a6e 100644 (file)
@@ -161,7 +161,7 @@ bool session_claim(user_struct *vuser)
 
        hostname = client_name();
        if (strcmp(hostname, "UNKNOWN") == 0) {
-               hostname = client_addr(addr);
+               hostname = client_addr(addr,sizeof(addr));
        }
 
        fstrcpy(sessionid.username, vuser->user.unix_name);
@@ -171,7 +171,7 @@ bool session_claim(user_struct *vuser)
        sessionid.uid = vuser->uid;
        sessionid.gid = vuser->gid;
        fstrcpy(sessionid.remote_machine, get_remote_machine_name());
-       fstrcpy(sessionid.ip_addr_str, client_addr(addr));
+       fstrcpy(sessionid.ip_addr_str, client_addr(addr,sizeof(addr)));
        sessionid.connect_start = time(NULL);
 
        if (!smb_pam_claim_session(sessionid.username, sessionid.id_str,
index 35efbc009f94f5e4b16c64ec6a135a1b5000b88d..87cb3b435b33f7fe8c53c5afe48d39b8498efec8 100644 (file)
@@ -1317,7 +1317,8 @@ static void setup_new_vc_session(void)
 #endif
        if (lp_reset_on_zero_vc()) {
                connections_forall(shutdown_other_smbds,
-                               CONST_DISCARD(void *,client_addr(addr)));
+                               CONST_DISCARD(void *,
+                                       client_addr(addr,sizeof(addr))));
        }
 }
 
index 71328459f0a25e15eb72e48fe5dc7fb2abe7cd6d..41ac29be5d25f810b7a840e3d8ecf12d6768d784 100644 (file)
@@ -648,7 +648,7 @@ const char *cgi_remote_addr(void)
 {
        if (inetd_server) {
                char addr[INET6_ADDRSTRLEN];
-               return get_peer_addr(1,addr);
+               return get_peer_addr(1,addr,sizeof(addr));
        }
        return getenv("REMOTE_ADDR");
 }