Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Apr 2006 08:25:40 GMT
From:      soc-bushman <soc-bushman@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 95781 for review
Message-ID:  <200604210825.k3L8PeoF087278@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=95781

Change 95781 by soc-bushman@soc-bushman_stinger on 2006/04/21 08:24:42

	all hosts-related functions now take resolver options into account

Affected files ...

.. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getaddrinfo.c#11 edit
.. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/gethostnamadr.c#8 edit
.. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/name6.c#10 edit
.. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/nscachedcli.c#10 edit

Differences ...

==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getaddrinfo.c#11 (text+ko) ====

@@ -1537,6 +1537,9 @@
 addrinfo_id_func(char *buffer, size_t *buffer_size, va_list ap, 
 	void *cache_mdata)
 {
+	res_state statp;
+	u_long res_options;
+	
 	const int op_id = 0; /* identifies the getaddrinfo for the cache */
 	char	*hostname;
 	struct addrinfo	*hints;
@@ -1545,10 +1548,14 @@
 	int	ai_flags, ai_family, ai_socktype, ai_protocol;	
 	size_t	desired_size, size;
 		
+	statp = __res_state();
+	res_options = statp->options & (RES_RECURSE | RES_DEFNAMES | 
+		RES_DNSRCH | RES_NOALIASES | RES_USE_INET6);	
+	
 	hostname = va_arg(ap, char *);
 	hints = va_arg(ap, struct addrinfo *);
 	
-	desired_size = sizeof(int) + sizeof(int) * 4;
+	desired_size = sizeof(res_options) + sizeof(int) + sizeof(int) * 4;
 	if (hostname != NULL) {
 		size = strlen(hostname);
 		desired_size += size + 1;
@@ -1570,6 +1577,9 @@
 	}
 	
 	p = buffer;
+	memcpy(p, &res_options, sizeof(res_options));
+	p += sizeof(res_options);
+	
 	memcpy(p, &op_id, sizeof(int));
 	p += sizeof(int);
 	

==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/gethostnamadr.c#8 (text+ko) ====

@@ -162,6 +162,9 @@
 static int 
 host_id_func(char *buffer, size_t *buffer_size, va_list ap, void *cache_mdata)
 {
+	res_state statp;
+	u_long res_options;
+
 	const int op_id = 1;
 	char	*str;
 	int	len, type;
@@ -170,10 +173,11 @@
 	enum nss_lookup_type lookup_type;
 	char	*p;
 	int	res = NS_UNAVAIL;
-	
-	res_state statp;
+		
+	statp = __res_state();
+	res_options = statp->options & (RES_RECURSE | RES_DEFNAMES | 
+		RES_DNSRCH | RES_NOALIASES | RES_USE_INET6);
 	
-	stat_p = __res_state();
 	lookup_type = (enum nss_lookup_type)cache_mdata;
 	switch (lookup_type) {
 	case nss_lt_name:
@@ -181,7 +185,7 @@
 		type = va_arg(ap, int); 
 	
 		size = strlen(str);
-		desired_size = sizeof(stat_p->options) + sizeof(int) + 
+		desired_size = sizeof(res_options) + sizeof(int) + 
 			sizeof(enum nss_lookup_type) + sizeof(int) + size + 1;
 	
 		if (desired_size > *buffer_size) {
@@ -191,8 +195,8 @@
 
 		p = buffer;
 		
-		memcpy(p, &stat_p->options, sizeof(stat_p->options));
-		p += sizeof(stat_p->options);
+		memcpy(p, &res_options, sizeof(res_options));
+		p += sizeof(res_options);
 		
 		memcpy(p, &op_id, sizeof(int));
 		p += sizeof(int);
@@ -212,8 +216,8 @@
 		len = va_arg(ap, int);
 		type = va_arg(ap, int);
 
-		desired_size = sizeof(int) + sizeof(enum nss_lookup_type) +
-			+ sizeof(int) * 2 + len;
+		desired_size = sizeof(res_options) + sizeof(int) + 
+			sizeof(enum nss_lookup_type) + sizeof(int) * 2 + len;
 	
 		if (desired_size > *buffer_size) {
 			res = NS_RETURN;
@@ -221,6 +225,9 @@
 		}
 	
 		p = buffer;
+		memcpy(p, &res_options, sizeof(res_options));
+		p += sizeof(res_options);
+		
 		memcpy(p, &op_id, sizeof(int));
 		p += sizeof(int);
 		

==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/name6.c#10 (text+ko) ====

@@ -291,6 +291,9 @@
 static int 
 ipnode_id_func(char *buffer, size_t *buffer_size, va_list ap, void *cache_mdata)
 {
+	res_state statp;
+	u_long res_options;	
+	
 	const int op_id = 2;
 	char	*name;
 	int	af;
@@ -302,6 +305,10 @@
 	enum nss_lookup_type lookup_type;
 	int	res = NS_UNAVAIL;
 	
+	statp = __res_state();
+	res_options = statp->options & (RES_RECURSE | RES_DEFNAMES | 
+		RES_DNSRCH | RES_NOALIASES | RES_USE_INET6);	
+	
 	lookup_type = (enum nss_lookup_type)cache_mdata;
 	switch (lookup_type) {
 	case nss_lt_name:
@@ -309,8 +316,8 @@
 		af = va_arg(ap, int); 
 	
 		size = strlen(name);
-		desired_size = sizeof(int) + sizeof(enum nss_lookup_type) +
-			sizeof(int) + size + 1;
+		desired_size = sizeof(res_options) + sizeof(int) + 
+			sizeof(enum nss_lookup_type) + sizeof(int) + size + 1;
 	
 		if (desired_size > *buffer_size) {
 			res = NS_RETURN;
@@ -318,6 +325,9 @@
 		}
 		
 		p = buffer;
+		memcpy(p, &res_options, sizeof(res_options));
+		p += sizeof(res_options);		
+		
 		memcpy(p, &op_id, sizeof(int));
 		p += sizeof(int);
 		
@@ -336,8 +346,9 @@
 		len = va_arg(ap, size_t);
 		af = va_arg(ap, int);
 
-		desired_size = sizeof(int) + sizeof(enum nss_lookup_type) +
-			sizeof(int) + sizeof(size_t) + len;
+		desired_size = sizeof(res_options) + sizeof(int) + 
+			sizeof(enum nss_lookup_type) + sizeof(int) + 
+			sizeof(size_t) + len;
 	
 		if (desired_size > *buffer_size) {
 			res = NS_RETURN;
@@ -345,6 +356,9 @@
 		}
 		
 		p = buffer;
+		memcpy(p, &res_options, sizeof(res_options));
+		p += sizeof(res_options);		
+		
 		memcpy(p, &op_id, sizeof(int));
 		p += sizeof(int);
 		

==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/nscachedcli.c#10 (text+ko) ====

@@ -72,7 +72,7 @@
 		nevents = kevent(connection->write_queue, NULL, 0, &eventlist, 
 	    		1, &timeout);
 		if ((nevents == 1) && (eventlist.filter == EVFILT_WRITE)) {			
-			s_result = write(connection->sockfd, data + result, 
+			s_result = _write(connection->sockfd, data + result, 
 				eventlist.data < data_size - result ? 
 		    		eventlist.data : data_size - result);
 			if (s_result == -1)
@@ -114,7 +114,7 @@
 		nevents = kevent(connection->read_queue, NULL, 0, &eventlist, 1, 
 			&timeout);
 		if ((nevents == 1) && (eventlist.filter == EVFILT_READ)) {			
-			s_result = read(connection->sockfd, data + result, 
+			s_result = _read(connection->sockfd, data + result, 
 			eventlist.data <= data_size - result ? eventlist.data : 
 				data_size - result);
 			if (s_result == -1)
@@ -171,7 +171,7 @@
 	
 	nevents = kevent(connection->write_queue, NULL, 0, &eventlist, 1, NULL);
 	if ((nevents == 1) && (eventlist.filter == EVFILT_WRITE)) {
-		result = (sendmsg(connection->sockfd, &cred_hdr, 0) == -1) ? -1 
+		result = (_sendmsg(connection->sockfd, &cred_hdr, 0) == -1) ? -1 
 	    		: 0;	
 		EV_SET(&eventlist, connection->sockfd, EVFILT_WRITE, EV_ADD,
 			0, 0, NULL);
@@ -195,20 +195,20 @@
 		
 	assert(params != NULL);
 	
-	client_socket = socket(PF_LOCAL, SOCK_STREAM, 0);
+	client_socket = _socket(PF_LOCAL, SOCK_STREAM, 0);
 	client_address.sun_family = PF_LOCAL;
 	strncpy(client_address.sun_path, params->socket_path, 
 		sizeof(client_address.sun_path));
 	client_address_len = sizeof(client_address.sun_family) + 
 		strlen(client_address.sun_path) + 1;
 
-	res = connect(client_socket, (struct sockaddr *)&client_address, 
+	res = _connect(client_socket, (struct sockaddr *)&client_address, 
 		client_address_len);	
 	if (res == -1) {
-		close(client_socket);
+		_close(client_socket);
 		return (NULL);
 	}	
-	fcntl(client_socket, F_SETFL, O_NONBLOCK);
+	_fcntl(client_socket, F_SETFL, O_NONBLOCK);
 	
 	retval = malloc(sizeof(struct cached_connection_));
 	assert(retval != NULL);
@@ -238,9 +238,9 @@
 {
 	assert(connection != NULL);
 	
-	close(connection->sockfd);
-	close(connection->read_queue);
-	close(connection->write_queue);
+	_close(connection->sockfd);
+	_close(connection->read_queue);
+	_close(connection->write_queue);
 	free(connection);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200604210825.k3L8PeoF087278>