yann@1
|
1 |
#--- libc/resolv/nss_dns/dns-host.c.jj Tue Sep 14 03:05:08 1999
|
yann@1
|
2 |
#+++ libc/resolv/nss_dns/dns-host.c Thu Oct 10 13:07:33 2002
|
yann@1
|
3 |
#@@ -129,9 +129,10 @@ _nss_dns_gethostbyname2_r (const char *n
|
yann@1
|
4 |
# char *buffer, size_t buflen, int *errnop,
|
yann@1
|
5 |
# int *h_errnop)
|
yann@1
|
6 |
# {
|
yann@1
|
7 |
#- querybuf host_buffer;
|
yann@1
|
8 |
#+ querybuf *host_buffer;
|
yann@1
|
9 |
# int size, type, n;
|
yann@1
|
10 |
# const char *cp;
|
yann@1
|
11 |
#+ enum nss_status status;
|
yann@1
|
12 |
#
|
yann@1
|
13 |
# switch (af) {
|
yann@1
|
14 |
# case AF_INET:
|
yann@1
|
15 |
#@@ -159,16 +160,25 @@ _nss_dns_gethostbyname2_r (const char *n
|
yann@1
|
16 |
# if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)
|
yann@1
|
17 |
# name = cp;
|
yann@1
|
18 |
#
|
yann@1
|
19 |
#- n = res_search (name, C_IN, type, host_buffer.buf, sizeof (host_buffer.buf));
|
yann@1
|
20 |
#+ host_buffer = (querybuf *) malloc (sizeof (*host_buffer));
|
yann@1
|
21 |
#+ if (host_buffer == NULL) {
|
yann@1
|
22 |
#+ *errnop = ENOMEM;
|
yann@1
|
23 |
#+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
24 |
#+ }
|
yann@1
|
25 |
#+
|
yann@1
|
26 |
#+ n = res_search (name, C_IN, type, host_buffer->buf, sizeof (host_buffer->buf));
|
yann@1
|
27 |
# if (n < 0)
|
yann@1
|
28 |
# {
|
yann@1
|
29 |
# *h_errnop = h_errno;
|
yann@1
|
30 |
# *errnop = *h_errnop == TRY_AGAIN ? EAGAIN : ENOENT;
|
yann@1
|
31 |
#+ free (host_buffer);
|
yann@1
|
32 |
# return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
33 |
# }
|
yann@1
|
34 |
#
|
yann@1
|
35 |
#- return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,
|
yann@1
|
36 |
#- errnop, h_errnop);
|
yann@1
|
37 |
#+ status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen,
|
yann@1
|
38 |
#+ errnop, h_errnop);
|
yann@1
|
39 |
#+ free (host_buffer);
|
yann@1
|
40 |
#+ return status;
|
yann@1
|
41 |
# }
|
yann@1
|
42 |
#
|
yann@1
|
43 |
#
|
yann@1
|
44 |
#@@ -205,7 +215,7 @@ _nss_dns_gethostbyaddr_r (const char *ad
|
yann@1
|
45 |
# char *h_addr_ptrs[MAX_NR_ADDRS + 1];
|
yann@1
|
46 |
# char linebuffer[0];
|
yann@1
|
47 |
# } *host_data = (struct host_data *) buffer;
|
yann@1
|
48 |
#- querybuf host_buffer;
|
yann@1
|
49 |
#+ querybuf *host_buffer;
|
yann@1
|
50 |
# char qbuf[MAXDNAME+1], *qp;
|
yann@1
|
51 |
# size_t size;
|
yann@1
|
52 |
# int n, status;
|
yann@1
|
53 |
#@@ -257,17 +267,25 @@ _nss_dns_gethostbyaddr_r (const char *ad
|
yann@1
|
54 |
# /* Cannot happen. */
|
yann@1
|
55 |
# }
|
yann@1
|
56 |
#
|
yann@1
|
57 |
#- n = res_query (qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf,
|
yann@1
|
58 |
#- sizeof host_buffer);
|
yann@1
|
59 |
#+ host_buffer = (querybuf *) malloc (sizeof (*host_buffer));
|
yann@1
|
60 |
#+ if (host_buffer == NULL) {
|
yann@1
|
61 |
#+ *errnop = ENOMEM;
|
yann@1
|
62 |
#+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
63 |
#+ }
|
yann@1
|
64 |
#+
|
yann@1
|
65 |
#+ n = res_query (qbuf, C_IN, T_PTR, host_buffer->buf,
|
yann@1
|
66 |
#+ sizeof (host_buffer->buf));
|
yann@1
|
67 |
# if (n < 0)
|
yann@1
|
68 |
# {
|
yann@1
|
69 |
# *h_errnop = h_errno;
|
yann@1
|
70 |
# *errnop = errno;
|
yann@1
|
71 |
#+ free (host_buffer);
|
yann@1
|
72 |
# return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
73 |
# }
|
yann@1
|
74 |
#
|
yann@1
|
75 |
#- status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
|
yann@1
|
76 |
#+ status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
|
yann@1
|
77 |
# errnop, h_errnop);
|
yann@1
|
78 |
#+ free (host_buffer);
|
yann@1
|
79 |
# if (status != NSS_STATUS_SUCCESS)
|
yann@1
|
80 |
# {
|
yann@1
|
81 |
# *h_errnop = h_errno;
|
yann@1
|
82 |
#--- libc/resolv/nss_dns/dns-network.c.jj Wed Jun 30 12:01:14 1999
|
yann@1
|
83 |
#+++ libc/resolv/nss_dns/dns-network.c Thu Oct 10 13:09:49 2002
|
yann@1
|
84 |
#@@ -113,24 +113,36 @@ _nss_dns_getnetbyname_r (const char *nam
|
yann@1
|
85 |
# char *buffer, size_t buflen, int *errnop)
|
yann@1
|
86 |
# {
|
yann@1
|
87 |
# /* Return entry for network with NAME. */
|
yann@1
|
88 |
#- querybuf net_buffer;
|
yann@1
|
89 |
#+ querybuf *net_buffer;
|
yann@1
|
90 |
# int anslen;
|
yann@1
|
91 |
# char *qbuf;
|
yann@1
|
92 |
#+ enum nss_status status;
|
yann@1
|
93 |
#
|
yann@1
|
94 |
# qbuf = strdupa (name);
|
yann@1
|
95 |
#- anslen = res_search (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
|
yann@1
|
96 |
#- sizeof (querybuf));
|
yann@1
|
97 |
#+
|
yann@1
|
98 |
#+ net_buffer = (querybuf *) malloc (sizeof (*net_buffer));
|
yann@1
|
99 |
#+ if (net_buffer == NULL)
|
yann@1
|
100 |
#+ {
|
yann@1
|
101 |
#+ *errnop = ENOMEM;
|
yann@1
|
102 |
#+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
103 |
#+ }
|
yann@1
|
104 |
#+
|
yann@1
|
105 |
#+ anslen = res_search (qbuf, C_IN, T_PTR, net_buffer->buf,
|
yann@1
|
106 |
#+ sizeof (net_buffer->buf));
|
yann@1
|
107 |
# if (anslen < 0)
|
yann@1
|
108 |
# {
|
yann@1
|
109 |
# /* Nothing found. */
|
yann@1
|
110 |
# *errnop = errno;
|
yann@1
|
111 |
#+ free (net_buffer);
|
yann@1
|
112 |
# return (errno == ECONNREFUSED
|
yann@1
|
113 |
# || errno == EPFNOSUPPORT
|
yann@1
|
114 |
# || errno == EAFNOSUPPORT)
|
yann@1
|
115 |
# ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
116 |
# }
|
yann@1
|
117 |
#
|
yann@1
|
118 |
#- return getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYNAME);
|
yann@1
|
119 |
#+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYNAME);
|
yann@1
|
120 |
#+ free (net_buffer);
|
yann@1
|
121 |
#+ return status;
|
yann@1
|
122 |
# }
|
yann@1
|
123 |
#
|
yann@1
|
124 |
#
|
yann@1
|
125 |
#@@ -140,7 +152,7 @@ _nss_dns_getnetbyaddr_r (long net, int t
|
yann@1
|
126 |
# {
|
yann@1
|
127 |
# /* Return entry for network with NAME. */
|
yann@1
|
128 |
# enum nss_status status;
|
yann@1
|
129 |
#- querybuf net_buffer;
|
yann@1
|
130 |
#+ querybuf *net_buffer;
|
yann@1
|
131 |
# unsigned int net_bytes[4];
|
yann@1
|
132 |
# char qbuf[MAXDNAME];
|
yann@1
|
133 |
# int cnt, anslen;
|
yann@1
|
134 |
#@@ -176,19 +188,28 @@ _nss_dns_getnetbyaddr_r (long net, int t
|
yann@1
|
135 |
# break;
|
yann@1
|
136 |
# }
|
yann@1
|
137 |
#
|
yann@1
|
138 |
#- anslen = res_query (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
|
yann@1
|
139 |
#- sizeof (querybuf));
|
yann@1
|
140 |
#+ net_buffer = (querybuf *) malloc (sizeof (*net_buffer));
|
yann@1
|
141 |
#+ if (net_buffer == NULL)
|
yann@1
|
142 |
#+ {
|
yann@1
|
143 |
#+ *errnop = ENOMEM;
|
yann@1
|
144 |
#+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
145 |
#+ }
|
yann@1
|
146 |
#+
|
yann@1
|
147 |
#+ anslen = res_query (qbuf, C_IN, T_PTR, net_buffer->buf,
|
yann@1
|
148 |
#+ sizeof (net_buffer->buf));
|
yann@1
|
149 |
# if (anslen < 0)
|
yann@1
|
150 |
# {
|
yann@1
|
151 |
# /* Nothing found. */
|
yann@1
|
152 |
# *errnop = errno;
|
yann@1
|
153 |
#+ free (net_buffer);
|
yann@1
|
154 |
# return (errno == ECONNREFUSED
|
yann@1
|
155 |
# || errno == EPFNOSUPPORT
|
yann@1
|
156 |
# || errno == EAFNOSUPPORT)
|
yann@1
|
157 |
# ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
158 |
# }
|
yann@1
|
159 |
#
|
yann@1
|
160 |
#- status = getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYADDR);
|
yann@1
|
161 |
#+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYADDR);
|
yann@1
|
162 |
#+ free (net_buffer);
|
yann@1
|
163 |
# if (status == NSS_STATUS_SUCCESS)
|
yann@1
|
164 |
# {
|
yann@1
|
165 |
# /* Strip trailing zeros. */
|
yann@1
|
166 |
#--- libc/resolv/res_query.c.jj Wed Jun 30 12:01:06 1999
|
yann@1
|
167 |
#+++ libc/resolv/res_query.c Thu Oct 10 13:01:12 2002
|
yann@1
|
168 |
#@@ -106,7 +106,7 @@ res_query(name, class, type, answer, ans
|
yann@1
|
169 |
# u_char *answer; /* buffer to put answer */
|
yann@1
|
170 |
# int anslen; /* size of answer buffer */
|
yann@1
|
171 |
# {
|
yann@1
|
172 |
#- u_char buf[MAXPACKET];
|
yann@1
|
173 |
#+ u_char *buf;
|
yann@1
|
174 |
# register HEADER *hp = (HEADER *) answer;
|
yann@1
|
175 |
# int n;
|
yann@1
|
176 |
#
|
yann@1
|
177 |
#@@ -121,17 +121,25 @@ res_query(name, class, type, answer, ans
|
yann@1
|
178 |
# printf(";; res_query(%s, %d, %d)\n", name, class, type);
|
yann@1
|
179 |
# #endif
|
yann@1
|
180 |
#
|
yann@1
|
181 |
#+ buf = malloc (MAXPACKET);
|
yann@1
|
182 |
#+ if (buf == NULL) {
|
yann@1
|
183 |
#+ __set_h_errno (NETDB_INTERNAL);
|
yann@1
|
184 |
#+ return -1;
|
yann@1
|
185 |
#+ }
|
yann@1
|
186 |
#+
|
yann@1
|
187 |
# n = res_mkquery(QUERY, name, class, type, NULL, 0, NULL,
|
yann@1
|
188 |
#- buf, sizeof(buf));
|
yann@1
|
189 |
#+ buf, MAXPACKET);
|
yann@1
|
190 |
# if (n <= 0) {
|
yann@1
|
191 |
# #ifdef DEBUG
|
yann@1
|
192 |
# if (_res.options & RES_DEBUG)
|
yann@1
|
193 |
# printf(";; res_query: mkquery failed\n");
|
yann@1
|
194 |
# #endif
|
yann@1
|
195 |
# __set_h_errno (NO_RECOVERY);
|
yann@1
|
196 |
#+ free (buf);
|
yann@1
|
197 |
# return (n);
|
yann@1
|
198 |
# }
|
yann@1
|
199 |
# n = res_send(buf, n, answer, anslen);
|
yann@1
|
200 |
#+ free (buf);
|
yann@1
|
201 |
# if (n < 0) {
|
yann@1
|
202 |
# #ifdef DEBUG
|
yann@1
|
203 |
# if (_res.options & RES_DEBUG)
|
yann@1
|
204 |
#--- libc/resolv/gethnamaddr.c.jj Tue Dec 7 11:50:36 1999
|
yann@1
|
205 |
#+++ libc/resolv/gethnamaddr.c Thu Oct 10 15:05:50 2002
|
yann@1
|
206 |
#@@ -512,10 +512,11 @@ gethostbyname2(name, af)
|
yann@1
|
207 |
# const char *name;
|
yann@1
|
208 |
# int af;
|
yann@1
|
209 |
# {
|
yann@1
|
210 |
#- querybuf buf;
|
yann@1
|
211 |
#+ querybuf *buf;
|
yann@1
|
212 |
# register const char *cp;
|
yann@1
|
213 |
# char *bp;
|
yann@1
|
214 |
# int n, size, type, len;
|
yann@1
|
215 |
#+ struct hostent *ret;
|
yann@1
|
216 |
# extern struct hostent *_gethtbyname2();
|
yann@1
|
217 |
#
|
yann@1
|
218 |
# if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
|
yann@1
|
219 |
#@@ -617,13 +618,22 @@ gethostbyname2(name, af)
|
yann@1
|
220 |
# break;
|
yann@1
|
221 |
# }
|
yann@1
|
222 |
#
|
yann@1
|
223 |
#- if ((n = res_search(name, C_IN, type, buf.buf, sizeof(buf.buf))) < 0) {
|
yann@1
|
224 |
#+ buf = (querybuf *) malloc (sizeof (*buf));
|
yann@1
|
225 |
#+ if (buf == NULL) {
|
yann@1
|
226 |
#+ __set_h_errno (NETDB_INTERNAL);
|
yann@1
|
227 |
#+ return NULL;
|
yann@1
|
228 |
#+ }
|
yann@1
|
229 |
#+
|
yann@1
|
230 |
#+ if ((n = res_search(name, C_IN, type, buf->buf, sizeof(buf->buf))) < 0) {
|
yann@1
|
231 |
#+ free (buf);
|
yann@1
|
232 |
# dprintf("res_search failed (%d)\n", n);
|
yann@1
|
233 |
# if (errno == ECONNREFUSED)
|
yann@1
|
234 |
# return (_gethtbyname2(name, af));
|
yann@1
|
235 |
# return (NULL);
|
yann@1
|
236 |
# }
|
yann@1
|
237 |
#- return (getanswer(&buf, n, name, type));
|
yann@1
|
238 |
#+ ret = getanswer(buf, n, name, type);
|
yann@1
|
239 |
#+ free (buf);
|
yann@1
|
240 |
#+ return ret;
|
yann@1
|
241 |
# }
|
yann@1
|
242 |
#
|
yann@1
|
243 |
# struct hostent *
|
yann@1
|
244 |
#@@ -636,7 +646,7 @@ gethostbyaddr(addr, len, af)
|
yann@1
|
245 |
# static const u_char mapped[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0xff,0xff };
|
yann@1
|
246 |
# static const u_char tunnelled[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
|
yann@1
|
247 |
# int n, size;
|
yann@1
|
248 |
#- querybuf buf;
|
yann@1
|
249 |
#+ querybuf *buf;
|
yann@1
|
250 |
# register struct hostent *hp;
|
yann@1
|
251 |
# char qbuf[MAXDNAME+1], *qp;
|
yann@1
|
252 |
# #ifdef SUNSECURITY
|
yann@1
|
253 |
#@@ -697,14 +707,24 @@ gethostbyaddr(addr, len, af)
|
yann@1
|
254 |
# default:
|
yann@1
|
255 |
# abort();
|
yann@1
|
256 |
# }
|
yann@1
|
257 |
#- n = res_query(qbuf, C_IN, T_PTR, (u_char *)buf.buf, sizeof buf.buf);
|
yann@1
|
258 |
#+
|
yann@1
|
259 |
#+ buf = (querybuf *) malloc (sizeof (*buf));
|
yann@1
|
260 |
#+ if (buf == NULL) {
|
yann@1
|
261 |
#+ __set_h_errno (NETDB_INTERNAL);
|
yann@1
|
262 |
#+ return NULL;
|
yann@1
|
263 |
#+ }
|
yann@1
|
264 |
#+
|
yann@1
|
265 |
#+ n = res_query(qbuf, C_IN, T_PTR, buf->buf, sizeof buf->buf);
|
yann@1
|
266 |
# if (n < 0) {
|
yann@1
|
267 |
#+ free (buf);
|
yann@1
|
268 |
# dprintf("res_query failed (%d)\n", n);
|
yann@1
|
269 |
# if (errno == ECONNREFUSED)
|
yann@1
|
270 |
# return (_gethtbyaddr(addr, len, af));
|
yann@1
|
271 |
# return (NULL);
|
yann@1
|
272 |
# }
|
yann@1
|
273 |
#- if (!(hp = getanswer(&buf, n, qbuf, T_PTR)))
|
yann@1
|
274 |
#+ hp = getanswer(buf, n, qbuf, T_PTR);
|
yann@1
|
275 |
#+ free (buf);
|
yann@1
|
276 |
#+ if (!hp)
|
yann@1
|
277 |
# return (NULL); /* h_errno was set by getanswer() */
|
yann@1
|
278 |
# #ifdef SUNSECURITY
|
yann@1
|
279 |
# if (af == AF_INET) {
|
yann@1
|
280 |
#--- libc/resolv/getnetnamadr.c.jj Wed Jun 30 12:00:50 1999
|
yann@1
|
281 |
#+++ libc/resolv/getnetnamadr.c Thu Oct 10 13:14:01 2002
|
yann@1
|
282 |
#@@ -210,7 +210,7 @@ getnetbyaddr(net, net_type)
|
yann@1
|
283 |
# {
|
yann@1
|
284 |
# unsigned int netbr[4];
|
yann@1
|
285 |
# int nn, anslen;
|
yann@1
|
286 |
#- querybuf buf;
|
yann@1
|
287 |
#+ querybuf *buf;
|
yann@1
|
288 |
# char qbuf[MAXDNAME];
|
yann@1
|
289 |
# u_int32_t net2; /* Changed from unsigned long --roland */
|
yann@1
|
290 |
# struct netent *net_entry;
|
yann@1
|
291 |
#@@ -236,8 +236,15 @@ getnetbyaddr(net, net_type)
|
yann@1
|
292 |
# netbr[1], netbr[0]);
|
yann@1
|
293 |
# break;
|
yann@1
|
294 |
# }
|
yann@1
|
295 |
#- anslen = res_query(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
|
yann@1
|
296 |
#+
|
yann@1
|
297 |
#+ buf = (querybuf *) malloc (sizeof (*buf));
|
yann@1
|
298 |
#+ if (buf == NULL) {
|
yann@1
|
299 |
#+ return NULL;
|
yann@1
|
300 |
#+ }
|
yann@1
|
301 |
#+
|
yann@1
|
302 |
#+ anslen = res_query(qbuf, C_IN, T_PTR, buf->buf, sizeof(buf->buf));
|
yann@1
|
303 |
# if (anslen < 0) {
|
yann@1
|
304 |
#+ free (buf);
|
yann@1
|
305 |
# #ifdef DEBUG
|
yann@1
|
306 |
# if (_res.options & RES_DEBUG)
|
yann@1
|
307 |
# printf("res_query failed\n");
|
yann@1
|
308 |
#@@ -246,7 +253,8 @@ getnetbyaddr(net, net_type)
|
yann@1
|
309 |
# return (_getnetbyaddr(net, net_type));
|
yann@1
|
310 |
# return (NULL);
|
yann@1
|
311 |
# }
|
yann@1
|
312 |
#- net_entry = getnetanswer(&buf, anslen, BYADDR);
|
yann@1
|
313 |
#+ net_entry = getnetanswer(buf, anslen, BYADDR);
|
yann@1
|
314 |
#+ free (buf);
|
yann@1
|
315 |
# if (net_entry) {
|
yann@1
|
316 |
# unsigned u_net = net; /* maybe net should be unsigned ? */
|
yann@1
|
317 |
#
|
yann@1
|
318 |
#@@ -264,7 +272,7 @@ getnetbyname(net)
|
yann@1
|
319 |
# register const char *net;
|
yann@1
|
320 |
# {
|
yann@1
|
321 |
# int anslen;
|
yann@1
|
322 |
#- querybuf buf;
|
yann@1
|
323 |
#+ querybuf *buf;
|
yann@1
|
324 |
# char qbuf[MAXDNAME];
|
yann@1
|
325 |
# struct netent *net_entry;
|
yann@1
|
326 |
#
|
yann@1
|
327 |
#@@ -273,8 +281,13 @@ getnetbyname(net)
|
yann@1
|
328 |
# return (NULL);
|
yann@1
|
329 |
# }
|
yann@1
|
330 |
# strcpy(&qbuf[0], net);
|
yann@1
|
331 |
#- anslen = res_search(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
|
yann@1
|
332 |
#+ buf = (querybuf *) malloc (sizeof (*buf));
|
yann@1
|
333 |
#+ if (buf == NULL) {
|
yann@1
|
334 |
#+ return NULL;
|
yann@1
|
335 |
#+ }
|
yann@1
|
336 |
#+ anslen = res_search(qbuf, C_IN, T_PTR, buf->buf, sizeof(buf->buf));
|
yann@1
|
337 |
# if (anslen < 0) {
|
yann@1
|
338 |
#+ free (buf);
|
yann@1
|
339 |
# #ifdef DEBUG
|
yann@1
|
340 |
# if (_res.options & RES_DEBUG)
|
yann@1
|
341 |
# printf("res_query failed\n");
|
yann@1
|
342 |
#@@ -283,7 +296,8 @@ getnetbyname(net)
|
yann@1
|
343 |
# return (_getnetbyname(net));
|
yann@1
|
344 |
# return (_getnetbyname(net));
|
yann@1
|
345 |
# }
|
yann@1
|
346 |
#- net_entry = getnetanswer(&buf, anslen, BYNAME);
|
yann@1
|
347 |
#+ net_entry = getnetanswer(buf, anslen, BYNAME);
|
yann@1
|
348 |
#+ free (buf);
|
yann@1
|
349 |
# if (net_entry)
|
yann@1
|
350 |
# return (net_entry);
|
yann@1
|
351 |
# return (_getnetbyname(net));
|
yann@1
|
352 |
--- libc/glibc-compat/nss_dns/dns-host.c.jj Mon Jan 3 20:07:08 2000
|
yann@1
|
353 |
+++ libc/glibc-compat/nss_dns/dns-host.c Thu Oct 10 12:46:24 2002
|
yann@1
|
354 |
@@ -126,9 +126,10 @@ enum nss_status
|
yann@1
|
355 |
_nss_dns_gethostbyname2_r (const char *name, int af, struct hostent *result,
|
yann@1
|
356 |
char *buffer, size_t buflen, int *h_errnop)
|
yann@1
|
357 |
{
|
yann@1
|
358 |
- querybuf host_buffer;
|
yann@1
|
359 |
+ querybuf *host_buffer;
|
yann@1
|
360 |
int size, type, n;
|
yann@1
|
361 |
const char *cp;
|
yann@1
|
362 |
+ enum nss_status status;
|
yann@1
|
363 |
|
yann@1
|
364 |
switch (af) {
|
yann@1
|
365 |
case AF_INET:
|
yann@1
|
366 |
@@ -156,15 +157,22 @@ _nss_dns_gethostbyname2_r (const char *n
|
yann@1
|
367 |
if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)
|
yann@1
|
368 |
name = cp;
|
yann@1
|
369 |
|
yann@1
|
370 |
- n = res_search (name, C_IN, type, host_buffer.buf, sizeof (host_buffer.buf));
|
yann@1
|
371 |
+ host_buffer = (querybuf *) malloc (sizeof (querybuf));
|
yann@1
|
372 |
+ if (host_buffer == NULL)
|
yann@1
|
373 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
374 |
+
|
yann@1
|
375 |
+ n = res_search (name, C_IN, type, host_buffer->buf, sizeof (host_buffer->buf));
|
yann@1
|
376 |
if (n < 0)
|
yann@1
|
377 |
{
|
yann@1
|
378 |
*h_errnop = h_errno;
|
yann@1
|
379 |
+ free (host_buffer);
|
yann@1
|
380 |
return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
381 |
}
|
yann@1
|
382 |
|
yann@1
|
383 |
- return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,
|
yann@1
|
384 |
- h_errnop);
|
yann@1
|
385 |
+ status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen,
|
yann@1
|
386 |
+ h_errnop);
|
yann@1
|
387 |
+ free (host_buffer);
|
yann@1
|
388 |
+ return status;
|
yann@1
|
389 |
}
|
yann@1
|
390 |
|
yann@1
|
391 |
|
yann@1
|
392 |
@@ -200,7 +208,7 @@ _nss_dns_gethostbyaddr_r (const char *ad
|
yann@1
|
393 |
char *h_addr_ptrs[MAX_NR_ADDRS + 1];
|
yann@1
|
394 |
char linebuffer[0];
|
yann@1
|
395 |
} *host_data = (struct host_data *) buffer;
|
yann@1
|
396 |
- querybuf host_buffer;
|
yann@1
|
397 |
+ querybuf *host_buffer;
|
yann@1
|
398 |
char qbuf[MAXDNAME+1], *qp;
|
yann@1
|
399 |
int size, n, status;
|
yann@1
|
400 |
|
yann@1
|
401 |
@@ -251,16 +259,22 @@ _nss_dns_gethostbyaddr_r (const char *ad
|
yann@1
|
402 |
/* Cannot happen. */
|
yann@1
|
403 |
}
|
yann@1
|
404 |
|
yann@1
|
405 |
- n = res_query (qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf,
|
yann@1
|
406 |
- sizeof host_buffer);
|
yann@1
|
407 |
+ host_buffer = (querybuf *) malloc (sizeof (querybuf));
|
yann@1
|
408 |
+ if (host_buffer == NULL)
|
yann@1
|
409 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
410 |
+
|
yann@1
|
411 |
+ n = res_query (qbuf, C_IN, T_PTR, host_buffer->buf,
|
yann@1
|
412 |
+ sizeof (host_buffer->buf));
|
yann@1
|
413 |
if (n < 0)
|
yann@1
|
414 |
{
|
yann@1
|
415 |
*h_errnop = h_errno;
|
yann@1
|
416 |
+ free (host_buffer);
|
yann@1
|
417 |
return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
418 |
}
|
yann@1
|
419 |
|
yann@1
|
420 |
- status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
|
yann@1
|
421 |
+ status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
|
yann@1
|
422 |
h_errnop);
|
yann@1
|
423 |
+ free (host_buffer);
|
yann@1
|
424 |
if (status != NSS_STATUS_SUCCESS)
|
yann@1
|
425 |
{
|
yann@1
|
426 |
*h_errnop = h_errno;
|
yann@1
|
427 |
--- libc/glibc-compat/nss_dns/dns-network.c.jj Mon Jan 3 20:07:08 2000
|
yann@1
|
428 |
+++ libc/glibc-compat/nss_dns/dns-network.c Thu Oct 10 12:46:24 2002
|
yann@1
|
429 |
@@ -107,21 +107,32 @@ _nss_dns_getnetbyname_r (const char *nam
|
yann@1
|
430 |
char *buffer, size_t buflen)
|
yann@1
|
431 |
{
|
yann@1
|
432 |
/* Return entry for network with NAME. */
|
yann@1
|
433 |
- querybuf net_buffer;
|
yann@1
|
434 |
+ querybuf *net_buffer;
|
yann@1
|
435 |
int anslen;
|
yann@1
|
436 |
char *qbuf;
|
yann@1
|
437 |
+ enum nss_status status;
|
yann@1
|
438 |
|
yann@1
|
439 |
qbuf = strdupa (name);
|
yann@1
|
440 |
- anslen = res_search (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
|
yann@1
|
441 |
- sizeof (querybuf));
|
yann@1
|
442 |
+
|
yann@1
|
443 |
+ net_buffer = (querybuf *) malloc (sizeof (querybuf));
|
yann@1
|
444 |
+ if (net_buffer == NULL)
|
yann@1
|
445 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
446 |
+
|
yann@1
|
447 |
+ anslen = res_search (qbuf, C_IN, T_PTR, net_buffer->buf,
|
yann@1
|
448 |
+ sizeof (net_buffer->buf));
|
yann@1
|
449 |
if (anslen < 0)
|
yann@1
|
450 |
- /* Nothing found. */
|
yann@1
|
451 |
- return (errno == ECONNREFUSED
|
yann@1
|
452 |
- || errno == EPFNOSUPPORT
|
yann@1
|
453 |
- || errno == EAFNOSUPPORT)
|
yann@1
|
454 |
- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
455 |
+ {
|
yann@1
|
456 |
+ free (net_buffer);
|
yann@1
|
457 |
+ /* Nothing found. */
|
yann@1
|
458 |
+ return (errno == ECONNREFUSED
|
yann@1
|
459 |
+ || errno == EPFNOSUPPORT
|
yann@1
|
460 |
+ || errno == EAFNOSUPPORT)
|
yann@1
|
461 |
+ ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
462 |
+ }
|
yann@1
|
463 |
|
yann@1
|
464 |
- return getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYNAME);
|
yann@1
|
465 |
+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYNAME);
|
yann@1
|
466 |
+ free (net_buffer);
|
yann@1
|
467 |
+ return status;
|
yann@1
|
468 |
}
|
yann@1
|
469 |
|
yann@1
|
470 |
|
yann@1
|
471 |
@@ -131,7 +142,7 @@ _nss_dns_getnetbyaddr_r (long net, int t
|
yann@1
|
472 |
{
|
yann@1
|
473 |
/* Return entry for network with NAME. */
|
yann@1
|
474 |
enum nss_status status;
|
yann@1
|
475 |
- querybuf net_buffer;
|
yann@1
|
476 |
+ querybuf *net_buffer;
|
yann@1
|
477 |
unsigned int net_bytes[4];
|
yann@1
|
478 |
char qbuf[MAXDNAME];
|
yann@1
|
479 |
int cnt, anslen;
|
yann@1
|
480 |
@@ -167,16 +178,24 @@ _nss_dns_getnetbyaddr_r (long net, int t
|
yann@1
|
481 |
break;
|
yann@1
|
482 |
}
|
yann@1
|
483 |
|
yann@1
|
484 |
- anslen = res_query (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
|
yann@1
|
485 |
- sizeof (querybuf));
|
yann@1
|
486 |
+ net_buffer = (querybuf *) malloc (sizeof (querybuf));
|
yann@1
|
487 |
+ if (net_buffer == NULL)
|
yann@1
|
488 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
489 |
+
|
yann@1
|
490 |
+ anslen = res_query (qbuf, C_IN, T_PTR, net_buffer->buf,
|
yann@1
|
491 |
+ sizeof (net_buffer->buf));
|
yann@1
|
492 |
if (anslen < 0)
|
yann@1
|
493 |
- /* Nothing found. */
|
yann@1
|
494 |
- return (errno == ECONNREFUSED
|
yann@1
|
495 |
- || errno == EPFNOSUPPORT
|
yann@1
|
496 |
- || errno == EAFNOSUPPORT)
|
yann@1
|
497 |
- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
498 |
+ {
|
yann@1
|
499 |
+ free (net_buffer);
|
yann@1
|
500 |
+ /* Nothing found. */
|
yann@1
|
501 |
+ return (errno == ECONNREFUSED
|
yann@1
|
502 |
+ || errno == EPFNOSUPPORT
|
yann@1
|
503 |
+ || errno == EAFNOSUPPORT)
|
yann@1
|
504 |
+ ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
505 |
+ }
|
yann@1
|
506 |
|
yann@1
|
507 |
- status = getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYADDR);
|
yann@1
|
508 |
+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYADDR);
|
yann@1
|
509 |
+ free (net_buffer);
|
yann@1
|
510 |
if (status == NSS_STATUS_SUCCESS)
|
yann@1
|
511 |
{
|
yann@1
|
512 |
/* Strip trailing zeros. */
|