diff options
-rw-r--r-- | source3/client/smbctool.c | 4 | ||||
-rw-r--r-- | source3/lib/substitute.c | 6 | ||||
-rw-r--r-- | source3/lib/util_sock.c | 58 | ||||
-rw-r--r-- | source3/lib/wins_srv.c | 8 | ||||
-rw-r--r-- | source3/nmbd/nmbd_mynames.c | 5 | ||||
-rw-r--r-- | source3/nmbd/nmbd_sendannounce.c | 4 | ||||
-rw-r--r-- | source3/nmbd/nmbd_winsserver.c | 22 | ||||
-rw-r--r-- | source3/nsswitch/wins.c | 2 | ||||
-rw-r--r-- | source3/torture/rpctorture.c | 2 | ||||
-rw-r--r-- | source3/utils/nmblookup.c | 2 | ||||
-rw-r--r-- | source3/utils/smbcontrol.c | 2 |
11 files changed, 58 insertions, 57 deletions
diff --git a/source3/client/smbctool.c b/source3/client/smbctool.c index 57fd1d6cf7..e7ac80222c 100644 --- a/source3/client/smbctool.c +++ b/source3/client/smbctool.c @@ -3485,7 +3485,7 @@ static int do_message_op(void) snprintf(name_type_hex, sizeof(name_type_hex), "#%X", name_type); fstrcat(server_name, name_type_hex); - zero_ip_v4(&ip); + zero_ip_v4(&ip); if (have_ip) ip = dest_ip; @@ -3595,7 +3595,7 @@ static int do_message_op(void) break; case 'I': { - dest_ip = *interpret_addr2(poptGetOptArg(pc)); + (void)interpret_addr2(&dest_ip, poptGetOptArg(pc)); if (is_zero_ip_v4(dest_ip)) exit(1); have_ip = True; diff --git a/source3/lib/substitute.c b/source3/lib/substitute.c index d4c7cd6467..bd15399b13 100644 --- a/source3/lib/substitute.c +++ b/source3/lib/substitute.c @@ -41,6 +41,7 @@ void set_local_machine_name(const char* local_name, bool perm) { static bool already_perm = False; fstring tmp_local_machine; + char addr[INET6_ADDRSTRLEN]; fstrcpy(tmp_local_machine,local_name); trim_char(tmp_local_machine,' ',' '); @@ -51,7 +52,7 @@ void set_local_machine_name(const char* local_name, bool perm) */ if ( strequal(tmp_local_machine, "*SMBSERVER") || strequal(tmp_local_machine, "*SMBSERV") ) { - fstrcpy( local_machine, client_socket_addr() ); + fstrcpy( local_machine, client_socket_addr(addr, sizeof(addr)) ); return; } @@ -499,7 +500,8 @@ char *alloc_sub_basic(const char *smb_name, const char *domain_name, client_addr(addr, sizeof(addr))); break; case 'i': - a_string = realloc_string_sub( a_string, "%i", client_socket_addr() ); + a_string = realloc_string_sub( a_string, "%i", + client_socket_addr(addr, sizeof(addr)) ); break; case 'L' : if ( StrnCaseCmp(p, "%LOGONSERVER%", strlen("%LOGONSERVER%")) == 0 ) { diff --git a/source3/lib/util_sock.c b/source3/lib/util_sock.c index 3cce12381c..b31736430e 100644 --- a/source3/lib/util_sock.c +++ b/source3/lib/util_sock.c @@ -199,12 +199,11 @@ uint32 interpret_addr(const char *str) A convenient addition to interpret_addr(). ******************************************************************/ -struct in_addr *interpret_addr2(const char *str) +struct in_addr *interpret_addr2(struct in_addr *ip, const char *str) { - static struct in_addr ret; uint32 a = interpret_addr(str); - ret.s_addr = a; - return(&ret); + ip->s_addr = a; + return ip; } /******************************************************************* @@ -331,15 +330,7 @@ bool is_zero_addr(const struct sockaddr_storage *pss) void zero_ip_v4(struct in_addr *ip) { - static bool init; - static struct in_addr ipzero; - - if (!init) { - ipzero = *interpret_addr2("0.0.0.0"); - init = true; - } - - *ip = ipzero; + memset(ip, '\0', sizeof(struct in_addr)); } /******************************************************************* @@ -595,21 +586,20 @@ void client_setfd(int fd) } /**************************************************************************** - Return a static string of an IP address (IPv4 or IPv6). + Return the string of an IP address (IPv4 or IPv6). ****************************************************************************/ -static const char *get_socket_addr(int fd) +static const char *get_socket_addr(int fd, char *addr_buf, size_t addr_len) { struct sockaddr_storage sa; socklen_t length = sizeof(sa); - static char addr_buf[INET6_ADDRSTRLEN]; /* Ok, returning a hard coded IPv4 address * is bogus, but it's just as bogus as a * zero IPv6 address. No good choice here. */ - safe_strcpy(addr_buf, "0.0.0.0", sizeof(addr_buf)-1); + safe_strcpy(addr_buf, "0.0.0.0", addr_len-1); if (fd == -1) { return addr_buf; @@ -621,7 +611,7 @@ static const char *get_socket_addr(int fd) return addr_buf; } - return print_sockaddr_len(addr_buf, sizeof(addr_buf), &sa, length); + return print_sockaddr_len(addr_buf, addr_len, &sa, length); } /**************************************************************************** @@ -664,9 +654,9 @@ const char *client_addr(char *addr, size_t addrlen) return get_peer_addr(client_fd,addr,addrlen); } -const char *client_socket_addr(void) +const char *client_socket_addr(char *addr, size_t addr_len) { - return get_socket_addr(client_fd); + return get_socket_addr(client_fd, addr, addr_len); } int client_socket_port(void) @@ -1672,9 +1662,9 @@ int open_udp_socket(const char *host, int port) int type = SOCK_DGRAM; struct sockaddr_in sock_out; int res; - struct in_addr *addr; + struct in_addr addr; - addr = interpret_addr2(host); + (void)interpret_addr2(&addr, host); res = socket(PF_INET, type, 0); if (res == -1) { @@ -1682,7 +1672,7 @@ int open_udp_socket(const char *host, int port) } memset((char *)&sock_out,'\0',sizeof(sock_out)); - putip((char *)&sock_out.sin_addr,(char *)addr); + putip((char *)&sock_out.sin_addr,(char *)&addr); sock_out.sin_port = htons(port); sock_out.sin_family = PF_INET; @@ -1987,32 +1977,32 @@ out_umask: Get my own canonical name, including domain. ****************************************************************************/ +static fstring dnshostname_cache; + bool get_mydnsfullname(fstring my_dnsname) { - static fstring dnshostname; - - if (!*dnshostname) { + if (!*dnshostname_cache) { struct addrinfo *res = NULL; bool ret; /* get my host name */ - if (gethostname(dnshostname, sizeof(dnshostname)) == -1) { - *dnshostname = '\0'; + if (gethostname(dnshostname_cache, sizeof(dnshostname_cache)) == -1) { + *dnshostname_cache = '\0'; DEBUG(0,("get_mydnsfullname: gethostname failed\n")); return false; } /* Ensure null termination. */ - dnshostname[sizeof(dnshostname)-1] = '\0'; + dnshostname_cache[sizeof(dnshostname_cache)-1] = '\0'; ret = interpret_string_addr_internal(&res, - dnshostname, + dnshostname_cache, AI_ADDRCONFIG|AI_CANONNAME); if (!ret || res == NULL) { DEBUG(3,("get_mydnsfullname: getaddrinfo failed for " "name %s [%s]\n", - dnshostname, + dnshostname_cache, gai_strerror(ret) )); return false; } @@ -2024,16 +2014,16 @@ bool get_mydnsfullname(fstring my_dnsname) if (res->ai_canonname == NULL) { DEBUG(3,("get_mydnsfullname: failed to get " "canonical name for %s\n", - dnshostname)); + dnshostname_cache)); freeaddrinfo(res); return false; } - fstrcpy(dnshostname, res->ai_canonname); + fstrcpy(dnshostname_cache, res->ai_canonname); freeaddrinfo(res); } - fstrcpy(my_dnsname, dnshostname); + fstrcpy(my_dnsname, dnshostname_cache); return true; } diff --git a/source3/lib/wins_srv.c b/source3/lib/wins_srv.c index 0fb0648fec..0e184a6b7c 100644 --- a/source3/lib/wins_srv.c +++ b/source3/lib/wins_srv.c @@ -183,14 +183,16 @@ static void parse_ip(struct tagged_ip *ip, const char *str) char *s = strchr(str, ':'); if (!s) { fstrcpy(ip->tag, "*"); - ip->ip = *interpret_addr2(str); + (void)interpret_addr2(&ip->ip,str); return; } - ip->ip = *interpret_addr2(s+1); + (void)interpret_addr2(&ip->ip,s+1); fstrcpy(ip->tag, str); s = strchr(ip->tag, ':'); - if (s) *s = 0; + if (s) { + *s = 0; + } } diff --git a/source3/nmbd/nmbd_mynames.c b/source3/nmbd/nmbd_mynames.c index 2eb376fc17..62c8dd0cf0 100644 --- a/source3/nmbd/nmbd_mynames.c +++ b/source3/nmbd/nmbd_mynames.c @@ -162,12 +162,13 @@ bool register_my_workgroup_and_names(void) for(subrec = FIRST_SUBNET; subrec; subrec = subrec->next) { for (n=0;n<ARRAY_SIZE(name_types);n++) { struct name_record *namerec; - struct nmb_name nmbname; + struct nmb_name nmbname; + struct in_addr ip; make_nmb_name(&nmbname, my_netbios_names(i), name_types[n]); namerec = find_name_on_subnet(unicast_subnet, &nmbname, FIND_SELF_NAME); if (namerec == NULL) continue; for (a=0;cluster_addresses[a];a++) { - add_ip_to_name_record(namerec, *interpret_addr2(cluster_addresses[a])); + add_ip_to_name_record(namerec, *interpret_addr2(&ip, cluster_addresses[a])); } } } diff --git a/source3/nmbd/nmbd_sendannounce.c b/source3/nmbd/nmbd_sendannounce.c index 6670c55bf3..56cd497568 100644 --- a/source3/nmbd/nmbd_sendannounce.c +++ b/source3/nmbd/nmbd_sendannounce.c @@ -488,7 +488,7 @@ void announce_remote(time_t t) else wgroup = pwgroup; - addr = *interpret_addr2(s2); + (void)interpret_addr2(&addr,s2); /* Announce all our names including aliases */ /* Give the ip address as the address of our first @@ -569,7 +569,7 @@ for workgroup %s on subnet %s.\n", lp_workgroup(), FIRST_SUBNET->subnet_name )); for (ptr=s; next_token(&ptr,s2,NULL,sizeof(s2)); ) { /* The entries are of the form a.b.c.d */ - addr = *interpret_addr2(s2); + (void)interpret_addr2(&addr,s2); DEBUG(5,("announce_remote: Doing remote browse sync announce for server %s to IP %s.\n", global_myname(), inet_ntoa(addr) )); diff --git a/source3/nmbd/nmbd_winsserver.c b/source3/nmbd/nmbd_winsserver.c index 736bbf4068..d4a2c8346e 100644 --- a/source3/nmbd/nmbd_winsserver.c +++ b/source3/nmbd/nmbd_winsserver.c @@ -680,7 +680,7 @@ bool initialise_wins(void) next_token(&ptr,ttl_str,NULL,sizeof(ttl_str)); for(i = 0; i < num_ips; i++) { next_token(&ptr, ip_str, NULL, sizeof(ip_str)); - ip_list[i] = *interpret_addr2(ip_str); + (void)interpret_addr2(&ip_list[i], ip_str); } next_token(&ptr,nb_flags_str,NULL, sizeof(nb_flags_str)); @@ -810,8 +810,9 @@ void wins_process_name_refresh_request( struct subnet_record *subrec, struct name_record *namerec = NULL; int ttl = get_ttl_from_packet(nmb); struct in_addr from_ip; - struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0"); + struct in_addr our_fake_ip; + (void)interpret_addr2(&our_fake_ip, "0.0.0.0"); putip( (char *)&from_ip, &nmb->additional->rdata[2] ); if(bcast) { @@ -1116,8 +1117,9 @@ void wins_process_name_registration_request(struct subnet_record *subrec, struct name_record *namerec = NULL; struct in_addr from_ip; bool registering_group_name = (nb_flags & NB_GROUP) ? True : False; - struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0"); + struct in_addr our_fake_ip; + (void)interpret_addr2(&our_fake_ip, "0.0.0.0"); putip((char *)&from_ip,&nmb->additional->rdata[2]); if(bcast) { @@ -1192,7 +1194,7 @@ to register name %s. Name already exists in WINS with source type %d.\n", */ if(registering_group_name && (question->name_type != 0x1c)) { - from_ip = *interpret_addr2("255.255.255.255"); + (void)interpret_addr2(&from_ip, "255.255.255.255"); } /* @@ -1397,8 +1399,9 @@ static void wins_multihomed_register_query_success(struct subnet_record *subrec, struct name_record *namerec = NULL; struct in_addr from_ip; int ttl; - struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0"); + struct in_addr our_fake_ip; + (void)interpret_addr2(&our_fake_ip, "0.0.0.0"); memcpy((char *)&orig_reg_packet, userdata->data, sizeof(struct packet_struct *)); nmb = &orig_reg_packet->packet.nmb; @@ -1486,9 +1489,10 @@ void wins_process_multihomed_name_registration_request( struct subnet_record *su struct name_record *namerec = NULL; struct in_addr from_ip; bool group = (nb_flags & NB_GROUP) ? True : False; - struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0"); + struct in_addr our_fake_ip; unstring qname; + (void)interpret_addr2(&our_fake_ip, "0.0.0.0"); putip((char *)&from_ip,&nmb->additional->rdata[2]); if(bcast) { @@ -2112,8 +2116,9 @@ static int wins_processing_traverse_fn(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA time_t t = *(time_t *)state; bool store_record = False; struct name_record *namerec = NULL; - struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0"); + struct in_addr our_fake_ip; + (void)interpret_addr2(&our_fake_ip, "0.0.0.0"); if (kbuf.dsize != sizeof(unstring) + 1) { return 0; } @@ -2381,9 +2386,10 @@ void nmbd_wins_new_entry(struct messaging_context *msg, struct name_record *new_namerec = NULL; struct nmb_name question; bool overwrite=False; - struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0"); + struct in_addr our_fake_ip; int i; + (void)interpret_addr2(&our_fake_ip, "0.0.0.0"); if (buf==NULL) { return; } diff --git a/source3/nsswitch/wins.c b/source3/nsswitch/wins.c index 3401918f59..9d6273ce7b 100644 --- a/source3/nsswitch/wins.c +++ b/source3/nsswitch/wins.c @@ -160,7 +160,7 @@ static NODE_STATUS_STRUCT *lookup_byaddr_backend(char *addr, int *count) return NULL; make_nmb_name(&nname, "*", 0); - ip = *interpret_addr2(addr); + (void)interpret_addr2(&ip,addr); status = node_status_query(fd,&nname,ip, count, NULL); close(fd); diff --git a/source3/torture/rpctorture.c b/source3/torture/rpctorture.c index af8d6effdb..d8fcedd8de 100644 --- a/source3/torture/rpctorture.c +++ b/source3/torture/rpctorture.c @@ -405,7 +405,7 @@ enum client_action case 'I': { - cli_info.dest_ip = *interpret_addr2(optarg); + (void)interpret_addr2(&cli_info.dest_ip, optarg); if (is_zero_ip(cli_info.dest_ip)) { exit(1); diff --git a/source3/utils/nmblookup.c b/source3/utils/nmblookup.c index 17fbd485ae..4ce6968473 100644 --- a/source3/utils/nmblookup.c +++ b/source3/utils/nmblookup.c @@ -332,7 +332,7 @@ int main(int argc,char *argv[]) if(lookup_by_ip) { struct sockaddr_storage ss; - ip = *interpret_addr2(lookup); + (void)interpret_addr2(&ip, lookup); in_addr_to_sockaddr_storage(&ss, ip); fstrcpy(lookup,"*"); do_node_status(ServerFD, lookup, lookup_type, &ss); diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c index b79fa29cdb..835adca4bd 100644 --- a/source3/utils/smbcontrol.c +++ b/source3/utils/smbcontrol.c @@ -1087,7 +1087,7 @@ static bool do_nodestatus(struct messaging_context *msg_ctx, ZERO_STRUCT(p); - p.ip = *interpret_addr2(argv[1]); + (void)interpret_addr2(&p.ip, argv[1]); p.port = 137; p.packet_type = NMB_PACKET; |