PERFORCE change 98866 for review

Michael Bushkov bushman at FreeBSD.org
Fri Jun 9 13:33:55 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=98866

Change 98866 by bushman at bushman_nss_ldap_cached on 2006/06/09 13:31:39

	Draft versions of DNS and files nss-modules introduced. There are issues with common fucntionality, issues with getipnodeby* functions (which should be probably be implemented through gethostby* functions). Several changes to gethostnamadr.c were made to implement gethostent() in the more general way.

Affected files ...

.. //depot/projects/soc2006/nss_ldap_cached/src/include/nsswitch.h#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/Makefile#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/include/nss_tls.h#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/gethostnamadr.c#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/netdb_private.h#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/nsdispatch.c#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libnssutil/Makefile#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libnssutil/hosts_namadr.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libnssutil/hosts_namadr.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libnssutil/hosts_name6.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libnssutil/hosts_name6.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/Makefile#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_addrinfo.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_addrinfo.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_namadr.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_namadr.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_name6.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_name6.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/nss_dns.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/Makefile#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_group.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_group.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_hosts_addrinfo.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_hosts_addrinfo.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_hosts_namadr.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_hosts_namadr.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_hosts_name6.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_hosts_name6.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_net.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_net.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_passwd.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_passwd.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_proto.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_proto.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_rpc.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_rpc.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_serv.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_serv.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_shells.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_shells.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/nss_files.c#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/nss_files.h#1 add

Differences ...

==== //depot/projects/soc2006/nss_ldap_cached/src/include/nsswitch.h#2 (text+ko) ====


==== //depot/projects/soc2006/nss_ldap_cached/src/lib/Makefile#2 (text+ko) ====

@@ -25,6 +25,7 @@
 # Otherwise, the SUBDIR list should be in alphabetical order.
 
 SUBDIR=	${_csu} libbsm libcom_err libcrypt libkvm msun libmd libncurses \
+	nss_files nss_dns\
 	libnetgraph libradius librpcsvc libsbuf libtacplus libutil \
 	${_libypclnt} libalias libarchive ${_libatm} \
 	libbegemot ${_libbluetooth} libbsnmp libbz2 libc ${_libc_r} \
@@ -121,6 +122,7 @@
 
 .if ${MK_NIS} != "no"
 _libypclnt=	libypclnt
+_nss_nis=	nss_nis
 .endif
 
 .if ${MK_GPIB} != "no"

==== //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/include/nss_tls.h#2 (text+ko) ====

@@ -61,7 +61,7 @@
 	rv = _pthread_once(&keyinit, name##_keyinit);		\
 	if (rv != 0)						\
 		return (rv);					\
-	*p = _pthread_getspecific(name##_state_key);		\
+	*p = (struct name##_state *)_pthread_getspecific(name##_state_key);\
 	if (*p != NULL)						\
 		return (0);					\
 	*p = calloc(1, sizeof(**p));				\

==== //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/gethostnamadr.c#2 (text+ko) ====

@@ -64,6 +64,14 @@
 	{ NSSRC_DNS, NS_SUCCESS },
 	{ 0 }
 };
+
+/* Host lookupd order for gethostent() function - it can't be changed through
+ * nsswitch.conf */
+static const ns_src default_gethostent_src[] = {
+	{ NSSRC_FILES, NS_SUCCESS },
+	{ 0 }
+};
+
 #ifdef NS_CACHING
 static int host_id_func(char *, size_t *, va_list, void *);
 static int host_marshal_func(char *, size_t *, void *, va_list, void *);
@@ -654,6 +662,35 @@
 	return ((rval == NS_SUCCESS) ? 0 : -1);
 }
 
+int
+gethostent_r(struct hostent *hptr, char *buffer, size_t buflen,
+    struct hostent **result, int *h_errnop)
+{
+	static const ns_dtab dtab[] = {
+		{ 0 }
+	};
+	
+	int rval, ret_errno;
+	res_state statp;
+
+	statp = __res_state();
+	if ((statp->options & RES_INIT) == 0 && res_ninit(statp) == -1) {
+		RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
+		*h_errnop = statp->res_h_errno;
+		return (-1);
+	}
+
+	/* NOTE: NSDB_HOSTS_INTERNAL is passed to the _nsdispatch() instead of 
+	 * NSDB_HOSTS, so that it won't use nsswitch.conf to determine 
+	 * the appropriate sources, but will use only the provided 
+	 * default_src */
+	rval = _nsdispatch((void *)result, dtab, NSDB_HOSTS_INTERNAL, 
+		"gethostent_r", default_gethostent_src, hp, buf, buflen, 
+		&ret_errno, h_errnop);
+	
+	return ((rval == NS_SUCCESS) ? 0 : -1);
+}
+
 struct hostent *
 gethostbyname(const char *name)
 {
@@ -699,24 +736,43 @@
 	return (rval);
 }
 
+struct hostent *
+gethostent()
+{
+	struct hostdata *hd;
+	struct hostent *rval;
+	int ret_h_errno;
+
+	if ((hd = __hostdata_init()) == NULL)
+		return (NULL);
+	if (gethostent_r(&hd->host, hd->data, sizeof(hd->data), &rval,
+	    &ret_h_errno) != 0)
+		return (NULL);
+	return (rval);	
+}
+
 void
 sethostent(int stayopen)
 {
-	struct hostent_data *hed;
+	static const ns_dtab dtab[] = {
+		{ 0 }
+	};	
 
-	if ((hed = __hostent_data_init()) == NULL)
-		return;
-	_sethosthtent(stayopen, hed);
-	_sethostdnsent(stayopen);
+	int rval;
+	rval = _nsdispatch(NULL, dtab, NSDB_HOSTS_INTERNAL, "sethostent", 
+		default_src, stayopen);
+	/* TODO: should we omit the rval? */
 }
 
 void
 endhostent(void)
 {
-	struct hostent_data *hed;
-
-	if ((hed = __hostent_data_init()) == NULL)
-		return;
-	_endhosthtent(hed);
-	_endhostdnsent();
+	static const ns_dtab dtab[] = {
+		{ 0 }
+	};	
+	
+	int rval;
+	rval = _nsdispatch(NULL, dtab, NSDB_HOSTS_INTERNAL, "endhostent", 
+		default_src);
+	/* TODO: should we omit the rval? */
 }

==== //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/netdb_private.h#2 (text+ko) ====

@@ -30,6 +30,9 @@
 
 #include <stdio.h>				/* XXX: for FILE */
 
+#define NSDB_HOSTS_INTERNAL "__hosts_internal"
+#define NSDB_NETWORKS_INTERNAL "__networks_internal"
+
 #define	NETDB_THREAD_ALLOC(name)					\
 static struct name name;						\
 static thread_key_t name##_key;						\
@@ -55,7 +58,7 @@
 	if (thr_once(&name##_init_once, name##_keycreate) != 0 ||	\
 	    !name##_thr_keycreated)					\
 		return (NULL);						\
-	if ((he = thr_getspecific(name##_key)) != NULL)			\
+	if ((he = (struct name *)thr_getspecific(name##_key)) != NULL)	\
 		return (he);						\
 	if ((he = calloc(1, sizeof(*he))) == NULL)			\
 		return (NULL);						\
@@ -120,26 +123,16 @@
 struct hostent_data *__hostent_data_init(void);
 struct netdata *__netdata_init(void);
 struct netent_data *__netent_data_init(void);
-struct protodata *__protodata_init(void);
-struct protoent_data *__protoent_data_init(void);
 int __copy_hostent(struct hostent *, struct hostent *, char *, size_t);
 int __copy_netent(struct netent *, struct netent *, char *, size_t);
-int __copy_protoent(struct protoent *, struct protoent *, char *, size_t);
 
-void __endprotoent_p(struct protoent_data *);
-int __getprotoent_p(struct protoent *, struct protoent_data *);
-void __setprotoent_p(int, struct protoent_data *);
 void _endhostdnsent(void);
-void _endhosthtent(struct hostent_data *);
 void _endnetdnsent(void);
-void _endnethtent(struct netent_data *);
 struct hostent *_gethostbynisaddr(const void *, socklen_t, int);
 struct hostent *_gethostbynisname(const char *, int);
 void _map_v4v6_address(const char *, char *);
 void _map_v4v6_hostent(struct hostent *, char **, char *);
 void _sethostdnsent(int);
-void _sethosthtent(int, struct hostent_data *);
 void _setnetdnsent(int);
-void _setnethtent(int, struct netent_data *);
 
 #endif /* _NETDB_PRIVATE_H_ */

==== //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/nsdispatch.c#2 (text+ko) ====



More information about the p4-projects mailing list