aboutsummaryrefslogtreecommitdiff
path: root/src/gns/nss/nss_gns.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gns/nss/nss_gns.c')
-rw-r--r--src/gns/nss/nss_gns.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/gns/nss/nss_gns.c b/src/gns/nss/nss_gns.c
index 58aab47fd..d76eac845 100644
--- a/src/gns/nss/nss_gns.c
+++ b/src/gns/nss/nss_gns.c
@@ -29,6 +29,7 @@
29#include <nss.h> 29#include <nss.h>
30#include <stdio.h> 30#include <stdio.h>
31#include <stdlib.h> 31#include <stdlib.h>
32#include <errno.h>
32 33
33#include "nss_gns_query.h" 34#include "nss_gns_query.h"
34 35
@@ -94,8 +95,8 @@ _nss_gns_gethostbyname2_r(const char *name,
94 95
95 address_length = (af == AF_INET) ? sizeof(ipv4_address_t) : sizeof(ipv6_address_t); 96 address_length = (af == AF_INET) ? sizeof(ipv4_address_t) : sizeof(ipv6_address_t);
96 if (buflen < 97 if (buflen <
97 sizeof(char*)+ /* alias names */ 98 sizeof(char*) + /* alias names */
98 strlen(name)+1) 99 strlen (name) + 1)
99 { /* official name */ 100 { /* official name */
100 *errnop = ERANGE; 101 *errnop = ERANGE;
101 *h_errnop = NO_RECOVERY; 102 *h_errnop = NO_RECOVERY;
@@ -108,24 +109,34 @@ _nss_gns_gethostbyname2_r(const char *name,
108 i = gns_resolve_name (af, 109 i = gns_resolve_name (af,
109 name, 110 name,
110 &u); 111 &u);
111 if (-3 == i) 112 if (-1 == i)
112 { 113 {
113 status = NSS_STATUS_NOTFOUND; 114 *errnop = errno;
115 status = NSS_STATUS_UNAVAIL;
116 *h_errnop = NO_RECOVERY;
114 goto finish; 117 goto finish;
115 } 118 }
116 if (-2 == i) 119 if (-2 == i)
117 { 120 {
121 *errnop = ENOENT;
122 *h_errnop = NO_RECOVERY;
118 status = NSS_STATUS_UNAVAIL; 123 status = NSS_STATUS_UNAVAIL;
119 goto finish; 124 goto finish;
120 } 125 }
121 if ( (-1 == i) || 126 if (-3 == i)
122 (u.count == 0) )
123 { 127 {
124 *errnop = ETIMEDOUT; 128 *errnop = ETIMEDOUT;
125 *h_errnop = HOST_NOT_FOUND; 129 *h_errnop = HOST_NOT_FOUND;
126 status = NSS_STATUS_NOTFOUND; 130 status = NSS_STATUS_NOTFOUND;
127 goto finish; 131 goto finish;
128 } 132 }
133 if (0 == u.count)
134 {
135 *errnop = 0; /* success */
136 *h_errnop = NO_DATA; /* success */
137 status = NSS_STATUS_NOTFOUND;
138 goto finish;
139 }
129 /* Alias names */ 140 /* Alias names */
130 *((char**) buffer) = NULL; 141 *((char**) buffer) = NULL;
131 result->h_aliases = (char**) buffer; 142 result->h_aliases = (char**) buffer;
@@ -227,8 +238,14 @@ _nss_gns_gethostbyaddr_r (const void* addr,
227 int *errnop, 238 int *errnop,
228 int *h_errnop) 239 int *h_errnop)
229{ 240{
241 (void) addr;
242 (void) len;
243 (void) af;
244 (void) result;
245 (void) buffer;
246 (void) buflen;
230 *errnop = EINVAL; 247 *errnop = EINVAL;
231 *h_errnop = NO_RECOVERY; 248 *h_errnop = NO_RECOVERY;
232 //NOTE we allow to leak this into DNS so no NOTFOUND 249 /* NOTE we allow to leak this into DNS so no NOTFOUND */
233 return NSS_STATUS_UNAVAIL; 250 return NSS_STATUS_UNAVAIL;
234} 251}