diff options
Diffstat (limited to 'nss')
-rw-r--r-- | nss/digits_dots.c | 84 | ||||
-rw-r--r-- | nss/getXXbyYY.c | 15 | ||||
-rw-r--r-- | nss/getXXbyYY_r.c | 12 | ||||
-rw-r--r-- | nss/nsswitch.h | 6 |
4 files changed, 32 insertions, 85 deletions
diff --git a/nss/digits_dots.c b/nss/digits_dots.c index 4dc897c32c..17207945b9 100644 --- a/nss/digits_dots.c +++ b/nss/digits_dots.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1999, 2000, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999, 2000, 2001, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by H.J. Lu <hjl@gnu.ai.mit.edu>, 1997. @@ -37,8 +37,7 @@ int __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, char **buffer, size_t *buffer_size, size_t buflen, struct hostent **result, - enum nss_status *status, int *typep, - int flags, int *afp, int *h_errnop) + enum nss_status *status, int af, int *h_errnop) { int save; @@ -67,14 +66,6 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, char **h_alias_ptr; size_t size_needed; int addr_size; - int af; - - if (typep != NULL) - af = *typep; - else if (afp != NULL) - af = *afp; - else - af = -1; switch (af) { @@ -87,18 +78,8 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, break; default: - if (typep != NULL) - { - /* This must not happen. */ - if (h_errnop != NULL) - *h_errnop = HOST_NOT_FOUND; - goto done; - } - else - { - af = (_res.options & RES_USE_INET6) ? AF_INET6 : AF_INET; - addr_size = af == AF_INET6 ? IN6ADDRSZ : INADDRSZ; - } + af = (_res.options & RES_USE_INET6) ? AF_INET6 : AF_INET; + addr_size = af == AF_INET6 ? IN6ADDRSZ : INADDRSZ; break; } @@ -180,38 +161,25 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, (*h_addr_ptrs)[0] = (char *) host_addr; (*h_addr_ptrs)[1] = NULL; resbuf->h_addr_list = *h_addr_ptrs; - if ((typep != NULL && *typep == AF_INET6) - || (af == AF_INET - && (_res.options & RES_USE_INET6))) + if (af == AF_INET && (_res.options & RES_USE_INET6)) { - if (typep != NULL && (flags & AI_V4MAPPED) == 0) - { - /* That's bad. The user hasn't specified that she - allows IPv4 numeric addresses. */ - *result = NULL; - *h_errnop = HOST_NOT_FOUND; - goto done; - } - else - { - /* We need to change the IP v4 address into the - IP v6 address. */ - char tmp[INADDRSZ]; - char *p = (char *) host_addr; - int i; - - /* Save a copy of the IP v4 address. */ - memcpy (tmp, host_addr, INADDRSZ); - /* Mark this ipv6 addr as a mapped ipv4. */ - for (i = 0; i < 10; i++) - *p++ = 0x00; - *p++ = 0xff; - *p++ = 0xff; - /* Copy the IP v4 address. */ - memcpy (p, tmp, INADDRSZ); - resbuf->h_addrtype = AF_INET6; - resbuf->h_length = IN6ADDRSZ; - } + /* We need to change the IP v4 address into the + IP v6 address. */ + char tmp[INADDRSZ]; + char *p = (char *) host_addr; + int i; + + /* Save a copy of the IP v4 address. */ + memcpy (tmp, host_addr, INADDRSZ); + /* Mark this ipv6 addr as a mapped ipv4. */ + for (i = 0; i < 10; i++) + *p++ = 0x00; + *p++ = 0xff; + *p++ = 0xff; + /* Copy the IP v4 address. */ + memcpy (p, tmp, INADDRSZ); + resbuf->h_addrtype = AF_INET6; + resbuf->h_length = IN6ADDRSZ; } else { @@ -242,14 +210,6 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, host_addr_list_t *h_addr_ptrs; size_t size_needed; int addr_size; - int af; - - if (typep != NULL) - af = *typep; - else if (afp != NULL) - af = *afp; - else - af = -1; switch (af) { diff --git a/nss/getXXbyYY.c b/nss/getXXbyYY.c index 6ec9097c04..854a3e859b 100644 --- a/nss/getXXbyYY.c +++ b/nss/getXXbyYY.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996-2001,2003 Free Software Foundation, Inc. +/* Copyright (C) 1996-2001,2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -66,15 +66,10 @@ # define H_ERRNO_VAR_P NULL #endif -#ifndef HAVE_TYPE -# define TYPE_VAR_P NULL -# define FLAGS_VAR 0 -#endif - #ifdef HAVE_AF -# define AF_VAR_P &af +# define AF_VAL af #else -# define AF_VAR_P NULL +# define AF_VAL AF_INET #endif /* Prototype for reentrant version we use here. */ @@ -112,9 +107,7 @@ FUNCTION_NAME (ADD_PARAMS) if (buffer != NULL) { if (__nss_hostname_digits_dots (name, &resbuf, &buffer, - &buffer_size, - 0, &result, NULL, TYPE_VAR_P, - FLAGS_VAR, AF_VAR_P, + &buffer_size, 0, &result, NULL, AF_VAL, H_ERRNO_VAR_P)) goto done; } diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c index b17f33c8e0..6338aa5905 100644 --- a/nss/getXXbyYY_r.c +++ b/nss/getXXbyYY_r.c @@ -99,15 +99,10 @@ # define H_ERRNO_VAR_P NULL #endif -#ifndef HAVE_TYPE -# define TYPE_VAR_P NULL -# define FLAGS_VAR 0 -#endif - #ifdef HAVE_AF -# define AF_VAR_P &af +# define AF_VAL af #else -# define AF_VAR_P NULL +# define AF_VAL AF_INET #endif /* Type of the lookup function we need here. */ @@ -151,8 +146,7 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer, #ifdef HANDLE_DIGITS_DOTS switch (__nss_hostname_digits_dots (name, resbuf, &buffer, NULL, - buflen, result, &status, - TYPE_VAR_P, FLAGS_VAR, AF_VAR_P, + buflen, result, &status, AF_VAL, H_ERRNO_VAR_P)) { case -1: diff --git a/nss/nsswitch.h b/nss/nsswitch.h index c419708d1d..96568c69a6 100644 --- a/nss/nsswitch.h +++ b/nss/nsswitch.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1996-1999,2001,2002,2003 Free Software Foundation, Inc. +/* Copyright (C) 1996-1999,2001,2002,2003,2004 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -172,8 +172,8 @@ extern int __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, char **buffer, size_t *buffer_size, size_t buflen, struct hostent **result, - enum nss_status *status, int *typep, - int flags, int *afp, int *h_errnop); + enum nss_status *status, int af, + int *h_errnop); libc_hidden_proto (__nss_hostname_digits_dots) #endif /* nsswitch.h */ |