PERFORCE change 99303 for review
Michael Bushkov
bushman at FreeBSD.org
Thu Jun 15 13:28:45 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=99303
Change 99303 by bushman at bushman_nss_ldap_cached on 2006/06/15 13:28:03
dns, nis and files module now use their own ***_hostent_data structures, instead of using the one, declared in libc (in netdb_private.h)
some preparations to implement getipnodeby***() functions through gethostby***() functions were made
Affected files ...
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_addrinfo.c#3 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_namadr.c#3 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_name6.c#3 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/nss_dns.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_hosts_namadr.c#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_hosts_name6.c#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/nss_files.c#3 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/nss_files.h#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_nis/nis_hosts_namadr.c#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_nis/nis_hosts_name6.c#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_nis/nss_nis.h#1 add
.. //depot/projects/soc2006/nss_ldap_cached/tests/ipnode_emul/Makefile#1 add
.. //depot/projects/soc2006/nss_ldap_cached/tests/ipnode_emul/hosts_list#1 add
.. //depot/projects/soc2006/nss_ldap_cached/tests/ipnode_emul/ipnode_emul_test.c#1 add
Differences ...
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_addrinfo.c#3 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_namadr.c#3 (text+ko) ====
@@ -74,14 +74,13 @@
#include <syslog.h>
#include <stdarg.h>
#include <nsswitch.h>
-
#include "reentrant.h"
#include "netdb_private.h"
-#include "res_config.h"
+#include "nss_dns.h"
+#include "hosts_namadr.h"
NETDB_THREAD_ALLOC(hostent)
-NETDB_THREAD_ALLOC(hostent_data)
-NETDB_THREAD_ALLOC(hostdata)
+NETDB_THREAD_ALLOC(dns_hostent_data)
static void
hostent_free(void *ptr)
@@ -90,26 +89,14 @@
}
static void
-hostent_data_free(void *ptr)
+dns_hostent_data_free(void *ptr)
{
- struct hostent_data *hed = ptr;
+ struct dns_hostent_data *hed = ptr;
if (hed == NULL)
return;
- hed->stayopen = 0;
-
- if (hed->hostf) {
- (void) fclose(hed->hostf);
- hed->hostf = NULL;
- }
-
- free(hed);
-}
-static void
-hostdata_free(void *ptr)
-{
- free(ptr);
+ free(hed);
}
#define SPRINTF(x) ((size_t)sprintf x)
@@ -507,7 +494,7 @@
size_t buflen;
int *errnop, *h_errnop;
struct hostent *hptr, he;
- struct hostent_data *hed;
+ struct dns_hostent_data *hed;
querybuf *buf;
int n, type, error;
res_state statp;
@@ -523,7 +510,7 @@
*((struct hostent **)rval) = NULL;
statp = __res_state();
- if ((hed = __hostent_data_init()) == NULL) {
+ if ((hed = __dns_hostent_data_init()) == NULL) {
RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
*h_errnop = statp->res_h_errno;
return (NS_NOTFOUND);
@@ -588,7 +575,7 @@
int *errnop, *h_errnop;
const u_char *uaddr;
struct hostent *hptr, he;
- struct hostent_data *hed;
+ struct dns_hostent_data *hed;
int n;
querybuf *buf;
char qbuf[MAXDNAME+1], *qp;
@@ -615,7 +602,7 @@
*((struct hostent **)rval) = NULL;
statp = __res_state();
- if ((hed = __hostent_data_init()) == NULL) {
+ if ((hed = __dns_hostent_data_init()) == NULL) {
RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
*h_errnop = statp->res_h_errno;
return (NS_NOTFOUND);
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/dns_hosts_name6.c#3 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_hosts_namadr.c#2 (text+ko) ====
@@ -66,11 +66,37 @@
#include <nsswitch.h>
#include <arpa/nameser.h> /* XXX */
#include <resolv.h> /* XXX */
+#include "reentrant.h"
#include "netdb_private.h"
+#include "nss_files.h"
#include "hosts_namadr.h"
+NETDB_THREAD_ALLOC(hostent)
+NETDB_THREAD_ALLOC(files_hostent_data)
+
+static void
+hostent_free(void *ptr)
+{
+ free(ptr);
+}
+
+static void
+files_hostent_data_free(void *ptr)
+{
+ struct hostent_data *hed = ptr;
+
+ if (hed == NULL)
+ return;
+
+ if (hed->hostf) {
+ (void) fclose(hed->hostf);
+ hed->hostf = NULL;
+ }
+ free(hed);
+}
+
static void
-sethosthtent(int f, struct hostent_data *hed)
+sethosthtent(int f, struct files_hostent_data *hed)
{
if (!hed->hostf)
hed->hostf = fopen(_PATH_HOSTS, "r");
@@ -80,7 +106,7 @@
}
static void
-endhosthtent(struct hostent_data *hed)
+endhosthtent(struct files_hostent_data *hed)
{
if (hed->hostf && !hed->stayopen) {
(void) fclose(hed->hostf);
@@ -89,7 +115,7 @@
}
static int
-gethostent_p(struct hostent *he, struct hostent_data *hed, int mapped,
+gethostent_p(struct hostent *he, struct files_hostent_data *hed, int mapped,
res_state statp)
{
char *p, *bp, *ep;
@@ -182,7 +208,7 @@
size_t buflen;
int *errnop, *h_errnop;
struct hostent *hptr, he;
- struct hostent_data *hed;
+ struct files_hostent_data *hed;
char **cp;
res_state statp;
int error;
@@ -198,7 +224,7 @@
*((struct hostent **)rval) = NULL;
statp = __res_state();
- if ((hed = __hostent_data_init()) == NULL) {
+ if ((hed = __files_hostent_data_init()) == NULL) {
RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
*h_errnop = statp->res_h_errno;
return (NS_NOTFOUND);
@@ -245,7 +271,7 @@
size_t buflen;
int *errnop, *h_errnop;
struct hostent *hptr, he;
- struct hostent_data *hed;
+ struct files_hostent_data *hed;
res_state statp;
int error;
@@ -261,7 +287,7 @@
*((struct hostent **)rval) = NULL;
statp = __res_state();
- if ((hed = __hostent_data_init()) == NULL) {
+ if ((hed = __files_hostent_data_init()) == NULL) {
RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
*h_errnop = statp->res_h_errno;
return (NS_NOTFOUND);
@@ -296,7 +322,7 @@
char *buffer;
size_t buflen;
int *errnop, *h_errnop;
- struct hostent_data *hed;
+ struct files_hostent_data *hed;
struct hostent *hptr, he;
res_state statp;
@@ -314,7 +340,7 @@
*h_errnop = statp->res_h_errno;
return (NS_NOTFOUND);
}
- if ((hed = __hostent_data_init()) == NULL) {
+ if ((hed = __files_hostent_data_init()) == NULL) {
RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
*h_errnop = statp->res_h_errno;
return (NS_NOTFOUND);
@@ -331,14 +357,14 @@
int
__files_sethostent(void *rval, void *cb_data, va_list ap)
{
- struct hostent_data *hed;
+ struct files_hostent_data *hed;
res_state statp;
int f;
f = va_arg(ap, int);
statp = __res_state();
- if ((hed = __hostent_data_init()) == NULL) {
+ if ((hed = __files_hostent_data_init()) == NULL) {
RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return (NS_UNAVAIL);
}
@@ -351,11 +377,11 @@
int
__files_endhostent(void *rval, void *cb_data, va_list ap)
{
- struct hostent_data *hed;
+ struct files_hostent_data *hed;
res_state statp;
statp = __res_state();
- if ((hed = __hostent_data_init()) == NULL) {
+ if ((hed = __files_hostent_data_init()) == NULL) {
RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return (NS_UNAVAIL);
}
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_hosts_name6.c#2 (text+ko) ====
@@ -105,6 +105,20 @@
#include "netdb_private.h"
#include "hosts_name6.h"
+#ifndef _PATH_HOSTS
+#define _PATH_HOSTS "/etc/hosts"
+#endif
+
+#ifndef MAXALIASES
+#define MAXALIASES 10
+#endif
+#ifndef MAXADDRS
+#define MAXADDRS 20
+#endif
+#ifndef MAXDNAME
+#define MAXDNAME 1025
+#endif
+
static FILE *
_files_open(int *errp)
{
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/nss_files.c#3 (text+ko) ====
@@ -78,6 +78,7 @@
{NSDB_HOSTS, "gethostbyaddr_r", __files_gethostbyaddr_r, NULL},
{NSDB_HOSTS, "ghbyname", __files_ghbyname, NULL},
{NSDB_HOSTS, "ghbyaddr", __files_ghbyaddr, NULL},
+ {NSDB_HOSTS, "getaddrinfo", __files_getaddrinfo, NULL},
{NSDB_HOSTS_INTERNAL, "gethostent_r", __files_gethostent_r, NULL},
{NSDB_HOSTS_INTERNAL, "sethostent", __files_sethostent, NULL},
{NSDB_HOSTS_INTERNAL, "endhostent", __files_endhostent, NULL},
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/nss_files.h#2 (text+ko) ====
@@ -30,3 +30,25 @@
nss_set_ent = 1,
nss_end_ent = 2
};
+
+#ifndef _MAXALIASES
+#define _MAXALIASES 35
+#endif
+#ifndef _MAXLINELEN
+#define _MAXLINELEN 1024
+#endif
+#ifndef _MAXADDRS
+#define _MAXADDRS 35
+#endif
+#ifndef _HOSTBUFSIZE
+#define _HOSTBUFSIZE (8 * 1024)
+#endif
+
+struct files_hostent_data {
+ uint32_t host_addr[4]; /* IPv4 or IPv6 */
+ char *h_addr_ptrs[_MAXADDRS + 1];
+ char *host_aliases[_MAXALIASES];
+ char hostbuf[_HOSTBUFSIZE];
+ FILE *hostf;
+ int stayopen;
+};
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_nis/nis_hosts_namadr.c#2 (text+ko) ====
@@ -40,19 +40,41 @@
#include <stdarg.h>
#include <nsswitch.h>
#include <resolv.h> /* XXX */
-#ifdef YP
+//#ifdef YP
#include <rpc/rpc.h>
#include <rpcsvc/yp_prot.h>
#include <rpcsvc/ypclnt.h>
-#endif
+//#endif
#include <stdarg.h>
#include <nsswitch.h>
+#include "reentrant.h"
#include "netdb_private.h"
+#include "nss_nis.h"
+#include "hosts_namadr.h"
+
+NETDB_THREAD_ALLOC(hostent)
+NETDB_THREAD_ALLOC(nis_hostent_data)
+
+static void
+hostent_free(void *ptr)
+{
+ free(ptr);
+}
+
+static void
+nis_hostent_data_free(void *ptr)
+{
+ struct nis_hostent_data *hed = ptr;
+
+ if (hed == NULL)
+ return;
+ free(hed);
+}
-#ifdef YP
+//#ifdef YP
static int
_gethostbynis(const char *name, char *map, int af, struct hostent *he,
- struct hostent_data *hed)
+ struct nis_hostent_data *hed)
{
char *p, *bp, *ep;
char *cp, **q;
@@ -164,7 +186,7 @@
static int
_gethostbynisname_r(const char *name, int af, struct hostent *he,
- struct hostent_data *hed)
+ struct nis_hostent_data *hed)
{
char *map;
@@ -181,7 +203,7 @@
static int
_gethostbynisaddr_r(const void *addr, socklen_t len, int af,
- struct hostent *he, struct hostent_data *hed)
+ struct hostent *he, struct nis_hostent_data *hed)
{
char *map;
char numaddr[46];
@@ -198,22 +220,22 @@
return (-1);
return (_gethostbynis(numaddr, map, af, he, hed));
}
-#endif /* YP */
+//#endif /* YP */
/* XXX _gethostbynisname/_gethostbynisaddr only used by getipnodeby*() */
struct hostent *
_gethostbynisname(const char *name, int af)
{
-#ifdef YP
+//#ifdef YP
struct hostent *he;
- struct hostent_data *hed;
+ struct nis_hostent_data *hed;
u_long oresopt;
int error;
res_state statp;
statp = __res_state();
if ((he = __hostent_init()) == NULL ||
- (hed = __hostent_data_init()) == NULL) {
+ (hed = __nis_hostent_data_init()) == NULL) {
RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return (NULL);
}
@@ -223,24 +245,24 @@
error = _gethostbynisname_r(name, af, he, hed);
statp->options = oresopt;
return (error == 0) ? he : NULL;
-#else
- return (NULL);
-#endif
+//#else
+// return (NULL);
+//#endif
}
struct hostent *
_gethostbynisaddr(const void *addr, socklen_t len, int af)
{
-#ifdef YP
+//#ifdef YP
struct hostent *he;
- struct hostent_data *hed;
+ struct nis_hostent_data *hed;
u_long oresopt;
int error;
res_state statp;
statp = __res_state();
if ((he = __hostent_init()) == NULL ||
- (hed = __hostent_data_init()) == NULL) {
+ (hed = __nis_hostent_data_init()) == NULL) {
RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return (NULL);
}
@@ -250,22 +272,22 @@
error = _gethostbynisaddr_r(addr, len, af, he, hed);
statp->options = oresopt;
return (error == 0) ? he : NULL;
-#else
- return (NULL);
-#endif
+//#else
+// return (NULL);
+//#endif
}
int
__nis_gethostbyname2_r(void *rval, void *cb_data, va_list ap)
{
-#ifdef YP
+//#ifdef YP
const char *name;
int af;
char *buffer;
size_t buflen;
int *errnop, *h_errnop;
struct hostent *hptr, he;
- struct hostent_data *hed;
+ struct nis_hostent_data *hed;
res_state statp;
name = va_arg(ap, const char *);
@@ -279,7 +301,7 @@
*((struct hostent **)rval) = NULL;
statp = __res_state();
- if ((hed = __hostent_data_init()) == NULL) {
+ if ((hed = __nis_hostent_data_init()) == NULL) {
RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
*h_errnop = statp->res_h_errno;
return (NS_NOTFOUND);
@@ -295,16 +317,16 @@
}
*((struct hostent **)rval) = hptr;
return (NS_SUCCESS);
-#else
- *((struct hostent **)rval) = NULL;
- return (NS_UNAVAIL);
-#endif
+//#else
+// *((struct hostent **)rval) = NULL;
+// return (NS_UNAVAIL);
+//#endif
}
int
__nis_gethostbyaddr_r(void *rval, void *cb_data, va_list ap)
{
-#ifdef YP
+//#ifdef YP
const void *addr;
socklen_t len;
int af;
@@ -312,7 +334,7 @@
size_t buflen;
int *errnop, *h_errnop;
struct hostent *hptr, he;
- struct hostent_data *hed;
+ struct nis_hostent_data *hed;
res_state statp;
addr = va_arg(ap, const void *);
@@ -327,7 +349,7 @@
*((struct hostent **)rval) = NULL;
statp = __res_state();
- if ((hed = __hostent_data_init()) == NULL) {
+ if ((hed = __nis_hostent_data_init()) == NULL) {
RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
*h_errnop = statp->res_h_errno;
return (NS_NOTFOUND);
@@ -343,8 +365,8 @@
}
*((struct hostent **)rval) = hptr;
return (NS_SUCCESS);
-#else
- *((struct hostent **)rval) = NULL;
- return (NS_UNAVAIL);
-#endif
+//#else
+// *((struct hostent **)rval) = NULL;
+ //return (NS_UNAVAIL);
+//#endif
}
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_nis/nis_hosts_name6.c#2 (text+ko) ====
@@ -104,11 +104,11 @@
#include <stdarg.h>
#include <nsswitch.h>
#include <resolv.h> /* XXX */
-#ifdef YP
+//#ifdef YP
#include <rpc/rpc.h>
#include <rpcsvc/yp_prot.h>
#include <rpcsvc/ypclnt.h>
-#endif
+//#endif
#include <stdarg.h>
#include <nsswitch.h>
#include "netdb_private.h"
More information about the p4-projects
mailing list