Same changes as in nss/nss_files/files-hosts.c (Always use inet_pton).
[kopensolaris-gnu/glibc.git] / nis / nss_nis / nis-hosts.c
index bab7f4c..91d30c8 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
 
@@ -31,8 +31,7 @@
 #include "nss-nis.h"
 
 /* Get implementation for some internal functions. */
-#include "../../resolv/mapv4v6addr.h"
-#include "../../resolv/mapv4v6hostent.h"
+#include <resolv/mapv4v6addr.h>
 
 #define ENTNAME         hostent
 #define DATABASE        "hosts"
@@ -47,7 +46,7 @@ struct hostent_data
 
 #define TRAILING_LIST_MEMBER            h_aliases
 #define TRAILING_LIST_SEPARATOR_P       isspace
-#include "../../nss/nss_files/files-parse.c"
+#include <nss/nss_files/files-parse.c>
 LINE_PARSER
 ("#",
  {
@@ -56,8 +55,7 @@ LINE_PARSER
    STRING_FIELD (addr, isspace, 1);
 
    /* Parse address.  */
-   if ((_res.options & RES_USE_INET6)
-       && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
+   if (inet_pton (AF_INET6, p, entdata->host_addr) > 0)
      {
        result->h_addrtype = AF_INET6;
        result->h_length = IN6ADDRSZ;
@@ -87,14 +85,6 @@ LINE_PARSER
    entdata->h_addr_ptrs[1] = NULL;
    result->h_addr_list = entdata->h_addr_ptrs;
 
-   /* If we need the host entry in IPv6 form change it now.  */
-   if (_res.options & RES_USE_INET6)
-     {
-       char *bufptr = data->linebuffer;
-       size_t buflen = (char *) data + datalen - bufptr;
-       map_v4v6_hostent (result, &bufptr, &buflen);
-     }
-
    STRING_FIELD (result->h_name, isspace, 1);
  }
 )
@@ -242,7 +232,7 @@ _nss_nis_gethostent_r (struct hostent *host, char *buffer, size_t buflen,
 }
 
 enum nss_status
-_nss_nis_gethostbyname_r (const char *name, struct hostent *host,
+_nss_nis_gethostbyname2_r (const char *name, int af, struct hostent *host,
                          char *buffer, size_t buflen, int *h_errnop)
 {
   enum nss_status retval;
@@ -297,9 +287,9 @@ _nss_nis_gethostbyname_r (const char *name, struct hostent *host,
 
   parse_res = parse_line (p, host, data, buflen);
 
-  if (!parse_res)
+  if (!parse_res || host->h_addrtype != af)
     {
-      if (errno == ERANGE)
+      if (!parse_res && errno == ERANGE)
        {
          *h_errnop = NETDB_INTERNAL;
          return NSS_STATUS_TRYAGAIN;
@@ -316,6 +306,24 @@ _nss_nis_gethostbyname_r (const char *name, struct hostent *host,
 }
 
 enum nss_status
+_nss_nis_gethostbyname_r (const char *name, struct hostent *host,
+                         char *buffer, size_t buflen, int *h_errnop)
+{
+  if (_res.options & RES_USE_INET6)
+    {
+      enum nss_status status;
+
+      status = _nss_nis_gethostbyname2_r (name, AF_INET6, host, buffer, buflen,
+                                         h_errnop);
+      if (status == NSS_STATUS_SUCCESS)
+       return status;
+    }
+
+  return _nss_nis_gethostbyname2_r (name, AF_INET, host, buffer, buflen,
+                                   h_errnop);
+}
+
+enum nss_status
 _nss_nis_gethostbyaddr_r (char *addr, int addrlen, int type,
                          struct hostent *host, char *buffer, size_t buflen,
                          int *h_errnop)