diff options
| author | pyr <> | 2009-06-04 21:38:29 +0000 |
|---|---|---|
| committer | pyr <> | 2009-06-04 21:38:29 +0000 |
| commit | 67bdfcf045d3053a07637a70c9e1e9555375bc09 (patch) | |
| tree | 72c058050e164ab3bf7c48dbe2db1da89c0b3a83 /src/lib/libc | |
| parent | b77bc4fc41b396fdfad2c3601e64aa26f6c0ed7f (diff) | |
| download | openbsd-67bdfcf045d3053a07637a70c9e1e9555375bc09.tar.gz openbsd-67bdfcf045d3053a07637a70c9e1e9555375bc09.tar.bz2 openbsd-67bdfcf045d3053a07637a70c9e1e9555375bc09.zip | |
simplify the 'family' option parser and make it more evident what we're
now doing.
ok deraadt@
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libc/net/getaddrinfo.c | 30 | ||||
| -rw-r--r-- | src/lib/libc/net/res_init.c | 13 |
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 | } |
