[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-unstable-176-g35aaa36

Jeremy Allison jra at samba.org
Sun Nov 4 05:41:46 GMT 2007


The branch, v3-2-test has been updated
       via  35aaa36f82c70964cee5d0778eb04547b226dd3f (commit)
      from  62b5ca3334598aec3304d21118f67702afc3854a (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 35aaa36f82c70964cee5d0778eb04547b226dd3f
Author: Jeremy Allison <jra at samba.org>
Date:   Sat Nov 3 22:34:46 2007 -0700

    Remove more static data from lib/util_sock.c and
    callers.
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source/client/smbctool.c        |    4 +-
 source/lib/substitute.c         |    6 +++-
 source/lib/util_sock.c          |   58 ++++++++++++++++-----------------------
 source/lib/wins_srv.c           |    8 +++--
 source/nmbd/nmbd_mynames.c      |    5 ++-
 source/nmbd/nmbd_sendannounce.c |    4 +-
 source/nmbd/nmbd_winsserver.c   |   22 +++++++++-----
 source/nsswitch/wins.c          |    2 +-
 source/torture/rpctorture.c     |    2 +-
 source/utils/nmblookup.c        |    2 +-
 source/utils/smbcontrol.c       |    2 +-
 11 files changed, 58 insertions(+), 57 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/client/smbctool.c b/source/client/smbctool.c
index 57fd1d6..e7ac802 100644
--- a/source/client/smbctool.c
+++ b/source/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/source/lib/substitute.c b/source/lib/substitute.c
index d4c7cd6..bd15399 100644
--- a/source/lib/substitute.c
+++ b/source/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/source/lib/util_sock.c b/source/lib/util_sock.c
index 3cce123..b317364 100644
--- a/source/lib/util_sock.c
+++ b/source/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/source/lib/wins_srv.c b/source/lib/wins_srv.c
index 0fb0648..0e184a6 100644
--- a/source/lib/wins_srv.c
+++ b/source/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/source/nmbd/nmbd_mynames.c b/source/nmbd/nmbd_mynames.c
index 2eb376f..62c8dd0 100644
--- a/source/nmbd/nmbd_mynames.c
+++ b/source/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/source/nmbd/nmbd_sendannounce.c b/source/nmbd/nmbd_sendannounce.c
index 6670c55..56cd497 100644
--- a/source/nmbd/nmbd_sendannounce.c
+++ b/source/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/source/nmbd/nmbd_winsserver.c b/source/nmbd/nmbd_winsserver.c
index 736bbf4..d4a2c83 100644
--- a/source/nmbd/nmbd_winsserver.c
+++ b/source/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/source/nsswitch/wins.c b/source/nsswitch/wins.c
index 3401918..9d6273c 100644
--- a/source/nsswitch/wins.c
+++ b/source/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/source/torture/rpctorture.c b/source/torture/rpctorture.c
index af8d6ef..d8fcedd 100644
--- a/source/torture/rpctorture.c
+++ b/source/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/source/utils/nmblookup.c b/source/utils/nmblookup.c
index 17fbd48..4ce6968 100644
--- a/source/utils/nmblookup.c
+++ b/source/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/source/utils/smbcontrol.c b/source/utils/smbcontrol.c
index b79fa29..835adca 100644
--- a/source/utils/smbcontrol.c
+++ b/source/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;
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list