summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpyr <>2009-06-04 21:38:29 +0000
committerpyr <>2009-06-04 21:38:29 +0000
commit437d0850ff5e9cf554cfb2790235e5c0b30f94b3 (patch)
tree72c058050e164ab3bf7c48dbe2db1da89c0b3a83
parent62cd5609d5e30c91109b27b6b996fc9ef5ed01f8 (diff)
downloadopenbsd-437d0850ff5e9cf554cfb2790235e5c0b30f94b3.tar.gz
openbsd-437d0850ff5e9cf554cfb2790235e5c0b30f94b3.tar.bz2
openbsd-437d0850ff5e9cf554cfb2790235e5c0b30f94b3.zip
simplify the 'family' option parser and make it more evident what we're
now doing. ok deraadt@
-rw-r--r--src/lib/libc/net/getaddrinfo.c30
-rw-r--r--src/lib/libc/net/res_init.c13
2 files changed, 18 insertions, 25 deletions
diff --git a/src/lib/libc/net/getaddrinfo.c b/src/lib/libc/net/getaddrinfo.c
index 87125c89cc..2b96ea2380 100644
--- a/src/lib/libc/net/getaddrinfo.c
+++ b/src/lib/libc/net/getaddrinfo.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: getaddrinfo.c,v 1.68 2009/06/04 18:06:35 pyr Exp $ */ 1/* $OpenBSD: getaddrinfo.c,v 1.69 2009/06/04 21:38:29 pyr Exp $ */
2/* $KAME: getaddrinfo.c,v 1.31 2000/08/31 17:36:43 itojun Exp $ */ 2/* $KAME: getaddrinfo.c,v 1.31 2000/08/31 17:36:43 itojun Exp $ */
3 3
4/* 4/*
@@ -1170,39 +1170,21 @@ _dns_getaddrinfo(const char *name, const struct addrinfo *pai,
1170 1170
1171 switch (pai->ai_family) { 1171 switch (pai->ai_family) {
1172 case AF_UNSPEC: 1172 case AF_UNSPEC:
1173 if (_resp->family[0] == -1) {
1174 /* prefer IPv4 by default*/
1175 q.qclass = C_IN;
1176 q.qtype = T_A;
1177 q.answer = buf->buf;
1178 q.anslen = sizeof(buf->buf);
1179 q.next = &q2;
1180 q2.qclass = C_IN;
1181 q2.qtype = T_AAAA;
1182 q2.answer = buf2->buf;
1183 q2.anslen = sizeof(buf2->buf);
1184 break;
1185 }
1186
1187 /* respect user supplied order */ 1173 /* respect user supplied order */
1188 q.qclass = C_IN; 1174 q.qclass = C_IN;
1189 if (_resp->family[0] == AF_INET6) 1175 q.qtype = (_resp->family[0] == AF_INET6) ? T_AAAA : T_A;
1190 q.qtype = T_AAAA;
1191 else
1192 q.qtype = T_A;
1193 q.answer = buf->buf; 1176 q.answer = buf->buf;
1194 q.anslen = sizeof(buf->buf); 1177 q.anslen = sizeof(buf->buf);
1178 q.next = &q2;
1179
1195 if (_resp->family[1] == -1) { 1180 if (_resp->family[1] == -1) {
1181 /* stop here if only one family was given */
1196 q.next = NULL; 1182 q.next = NULL;
1197 break; 1183 break;
1198 } 1184 }
1199 q.next = &q2;
1200 1185
1201 q2.qclass = C_IN; 1186 q2.qclass = C_IN;
1202 if (_resp->family[1] == AF_INET6) 1187 q2.qtype = (_resp->family[1] == AF_INET6) ? T_AAAA : T_A;
1203 q2.qtype = T_AAAA;
1204 else
1205 q2.qtype = T_A;
1206 q2.answer = buf2->buf; 1188 q2.answer = buf2->buf;
1207 q2.anslen = sizeof(buf2->buf); 1189 q2.anslen = sizeof(buf2->buf);
1208 break; 1190 break;
diff --git a/src/lib/libc/net/res_init.c b/src/lib/libc/net/res_init.c
index 5cb597dad8..aafa9bbc87 100644
--- a/src/lib/libc/net/res_init.c
+++ b/src/lib/libc/net/res_init.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: res_init.c,v 1.38 2009/06/04 18:06:35 pyr Exp $ */ 1/* $OpenBSD: res_init.c,v 1.39 2009/06/04 21:38:29 pyr Exp $ */
2 2
3/* 3/*
4 * ++Copyright++ 1985, 1989, 1993 4 * ++Copyright++ 1985, 1989, 1993
@@ -281,6 +281,9 @@ _res_init(int usercall)
281 (line[sizeof(name) - 1] == ' ' || \ 281 (line[sizeof(name) - 1] == ' ' || \
282 line[sizeof(name) - 1] == '\t')) 282 line[sizeof(name) - 1] == '\t'))
283 283
284 /* initialize family lookup preference: inet4 first */
285 _resp->family[0] = AF_INET;
286 _resp->family[1] = AF_INET6;
284 if ((fp = fopen(_PATH_RESCONF, "r")) != NULL) { 287 if ((fp = fopen(_PATH_RESCONF, "r")) != NULL) {
285 strlcpy(_resp->lookups, "bf", sizeof _resp->lookups); 288 strlcpy(_resp->lookups, "bf", sizeof _resp->lookups);
286 289
@@ -312,6 +315,9 @@ _res_init(int usercall)
312 strlen("inet4"))) { 315 strlen("inet4"))) {
313 _resp->family[findex] = AF_INET; 316 _resp->family[findex] = AF_INET;
314 cp += strlen("inet4"); 317 cp += strlen("inet4");
318 } else {
319 _resp->family[0] = -1;
320 break;
315 } 321 }
316 if (*cp != ' ' && *cp != '\t' && *cp != '\0') { 322 if (*cp != ' ' && *cp != '\t' && *cp != '\0') {
317 _resp->family[findex] = -1; 323 _resp->family[findex] = -1;
@@ -321,6 +327,11 @@ _res_init(int usercall)
321 cp += strspn(cp, " \t"); 327 cp += strspn(cp, " \t");
322 } 328 }
323 329
330 if (_resp->family[0] == -1) {
331 /* line contains errors, reset to defaults */
332 _resp->family[0] = AF_INET;
333 _resp->family[1] = AF_INET6;
334 }
324 if (_resp->family[0] == _resp->family[1]) 335 if (_resp->family[0] == _resp->family[1])
325 _resp->family[1] = -1; 336 _resp->family[1] = -1;
326 } 337 }