Lines 92-101
Link Here
|
92 |
#define MAX_NR_ALIASES 48 |
92 |
#define MAX_NR_ALIASES 48 |
93 |
#define MAX_NR_ADDRS 48 |
93 |
#define MAX_NR_ADDRS 48 |
94 |
|
94 |
|
95 |
#if PACKETSZ > 1024 |
95 |
#if PACKETSZ > 65536 |
96 |
# define MAXPACKET PACKETSZ |
96 |
# define MAXPACKET PACKETSZ |
97 |
#else |
97 |
#else |
98 |
# define MAXPACKET 1024 |
98 |
# define MAXPACKET 65536 |
99 |
#endif |
99 |
#endif |
100 |
/* As per RFC 1034 and 1035 a host name cannot exceed 255 octets in length. */ |
100 |
/* As per RFC 1034 and 1035 a host name cannot exceed 255 octets in length. */ |
101 |
#ifdef MAXHOSTNAMELEN |
101 |
#ifdef MAXHOSTNAMELEN |
Lines 132-142
Link Here
|
132 |
char *buffer, size_t buflen, int *errnop, |
132 |
char *buffer, size_t buflen, int *errnop, |
133 |
int *h_errnop) |
133 |
int *h_errnop) |
134 |
{ |
134 |
{ |
135 |
querybuf host_buffer; |
135 |
querybuf *host_buffer; |
136 |
char tmp[NS_MAXDNAME]; |
136 |
char tmp[NS_MAXDNAME]; |
137 |
int size, type, n; |
137 |
int size, type, n; |
138 |
const char *cp; |
138 |
const char *cp; |
139 |
int map = 0; |
139 |
int map = 0; |
|
|
140 |
enum nss_status status; |
140 |
|
141 |
|
141 |
if ((_res.options & RES_INIT) == 0 && __res_ninit (&_res) == -1) |
142 |
if ((_res.options & RES_INIT) == 0 && __res_ninit (&_res) == -1) |
142 |
return NSS_STATUS_UNAVAIL; |
143 |
return NSS_STATUS_UNAVAIL; |
Lines 168-175
Link Here
|
168 |
&& (cp = res_hostalias (&_res, name, tmp, sizeof (tmp))) != NULL) |
169 |
&& (cp = res_hostalias (&_res, name, tmp, sizeof (tmp))) != NULL) |
169 |
name = cp; |
170 |
name = cp; |
170 |
|
171 |
|
171 |
n = res_nsearch (&_res, name, C_IN, type, host_buffer.buf, |
172 |
host_buffer = (querybuf *) malloc (sizeof (querybuf)); |
172 |
sizeof (host_buffer.buf)); |
173 |
if (host_buffer == NULL) |
|
|
174 |
{ |
175 |
*errnop = ENOMEM; |
176 |
return NSS_STATUS_UNAVAIL; |
177 |
} |
178 |
|
179 |
n = res_nsearch (&_res, name, C_IN, type, host_buffer->buf, |
180 |
sizeof (host_buffer->buf)); |
173 |
if (n < 0) |
181 |
if (n < 0) |
174 |
{ |
182 |
{ |
175 |
enum nss_status status = (errno == ECONNREFUSED |
183 |
enum nss_status status = (errno == ECONNREFUSED |
Lines 181-191
Link Here
|
181 |
by having the RES_USE_INET6 bit in _res.options set, we try |
189 |
by having the RES_USE_INET6 bit in _res.options set, we try |
182 |
another lookup. */ |
190 |
another lookup. */ |
183 |
if (af == AF_INET6 && (_res.options & RES_USE_INET6)) |
191 |
if (af == AF_INET6 && (_res.options & RES_USE_INET6)) |
184 |
n = res_nsearch (&_res, name, C_IN, T_A, host_buffer.buf, |
192 |
n = res_nsearch (&_res, name, C_IN, T_A, host_buffer->buf, |
185 |
sizeof (host_buffer.buf)); |
193 |
sizeof (host_buffer->buf)); |
186 |
|
194 |
|
187 |
if (n < 0) |
195 |
if (n < 0) |
188 |
return status; |
196 |
{ |
|
|
197 |
free (host_buffer); |
198 |
return status; |
199 |
} |
189 |
|
200 |
|
190 |
map = 1; |
201 |
map = 1; |
191 |
|
202 |
|
Lines 193-200
Link Here
|
193 |
result->h_length = INADDRSZ;; |
204 |
result->h_length = INADDRSZ;; |
194 |
} |
205 |
} |
195 |
|
206 |
|
196 |
return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen, |
207 |
status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen, |
197 |
errnop, h_errnop, map); |
208 |
errnop, h_errnop, map); |
|
|
209 |
free (host_buffer); |
210 |
return status; |
198 |
} |
211 |
} |
199 |
|
212 |
|
200 |
|
213 |
|
Lines 232-238
Link Here
|
232 |
char *h_addr_ptrs[MAX_NR_ADDRS + 1]; |
245 |
char *h_addr_ptrs[MAX_NR_ADDRS + 1]; |
233 |
char linebuffer[0]; |
246 |
char linebuffer[0]; |
234 |
} *host_data = (struct host_data *) buffer; |
247 |
} *host_data = (struct host_data *) buffer; |
235 |
querybuf host_buffer; |
248 |
querybuf *host_buffer; |
236 |
char qbuf[MAXDNAME+1], *qp; |
249 |
char qbuf[MAXDNAME+1], *qp; |
237 |
size_t size; |
250 |
size_t size; |
238 |
int n, status; |
251 |
int n, status; |
Lines 289-305
Link Here
|
289 |
break; |
302 |
break; |
290 |
} |
303 |
} |
291 |
|
304 |
|
292 |
n = res_nquery (&_res, qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf, |
305 |
host_buffer = (querybuf *) malloc (sizeof (querybuf)); |
293 |
sizeof host_buffer); |
306 |
if (host_buffer == NULL) |
|
|
307 |
{ |
308 |
*errnop = ENOMEM; |
309 |
return NSS_STATUS_UNAVAIL; |
310 |
} |
311 |
|
312 |
n = res_nquery (&_res, qbuf, C_IN, T_PTR, host_buffer->buf, |
313 |
sizeof (host_buffer->buf)); |
294 |
if (n < 0) |
314 |
if (n < 0) |
295 |
{ |
315 |
{ |
296 |
*h_errnop = h_errno; |
316 |
*h_errnop = h_errno; |
297 |
*errnop = errno; |
317 |
*errnop = errno; |
|
|
318 |
free (host_buffer); |
298 |
return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND; |
319 |
return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND; |
299 |
} |
320 |
} |
300 |
|
321 |
|
301 |
status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen, |
322 |
status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen, |
302 |
errnop, h_errnop, 0 /* XXX */); |
323 |
errnop, h_errnop, 0 /* XXX */); |
|
|
324 |
free (host_buffer); |
303 |
if (status != NSS_STATUS_SUCCESS) |
325 |
if (status != NSS_STATUS_SUCCESS) |
304 |
{ |
326 |
{ |
305 |
*h_errnop = h_errno; |
327 |
*h_errnop = h_errno; |