diff options
author | eric <> | 2018-12-15 15:16:12 +0000 |
---|---|---|
committer | eric <> | 2018-12-15 15:16:12 +0000 |
commit | 987422333c6bf4871e97fd14e80c6fe6b937af6c (patch) | |
tree | 9e8c744de1e51b27c2b37b1b5757fae46e8f7b01 /src/regress/lib/libc/asr/bin/common.c | |
parent | d44c7e0fd6df3e642957216aea5f5fb9814b4056 (diff) | |
download | openbsd-987422333c6bf4871e97fd14e80c6fe6b937af6c.tar.gz openbsd-987422333c6bf4871e97fd14e80c6fe6b937af6c.tar.bz2 openbsd-987422333c6bf4871e97fd14e80c6fe6b937af6c.zip |
add a -R option to set/unset resolver flags.libressl-v2.9.0
use strcasecmp for reading args.
Diffstat (limited to 'src/regress/lib/libc/asr/bin/common.c')
-rw-r--r-- | src/regress/lib/libc/asr/bin/common.c | 68 |
1 files changed, 63 insertions, 5 deletions
diff --git a/src/regress/lib/libc/asr/bin/common.c b/src/regress/lib/libc/asr/bin/common.c index c808c86d61..08a7bccbb7 100644 --- a/src/regress/lib/libc/asr/bin/common.c +++ b/src/regress/lib/libc/asr/bin/common.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: common.c,v 1.3 2014/08/10 07:31:58 guenther Exp $ */ | 1 | /* $OpenBSD: common.c,v 1.4 2018/12/15 15:16:12 eric Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2012 Eric Faurot <eric@openbsd.org> | 3 | * Copyright (c) 2012 Eric Faurot <eric@openbsd.org> |
4 | * | 4 | * |
@@ -86,8 +86,8 @@ kv_lookup_name(struct kv *kv, int code, char *buf, size_t sz) | |||
86 | } | 86 | } |
87 | 87 | ||
88 | struct keyval { | 88 | struct keyval { |
89 | const char *key; | 89 | const char *key; |
90 | uint16_t value; | 90 | int value; |
91 | }; | 91 | }; |
92 | 92 | ||
93 | static struct keyval kv_class[] = { | 93 | static struct keyval kv_class[] = { |
@@ -135,6 +135,24 @@ static struct keyval kv_rcode[] = { | |||
135 | { NULL, 0 }, | 135 | { NULL, 0 }, |
136 | }; | 136 | }; |
137 | 137 | ||
138 | static struct keyval kv_resopt[] = { | ||
139 | { "DEBUG", RES_DEBUG }, | ||
140 | { "AAONLY", RES_AAONLY }, | ||
141 | { "USEVC", RES_USEVC }, | ||
142 | { "PRIMARY", RES_PRIMARY }, | ||
143 | { "IGNTC", RES_IGNTC }, | ||
144 | { "RECURSE", RES_RECURSE }, | ||
145 | { "DEFNAMES", RES_DEFNAMES }, | ||
146 | { "STAYOPEN", RES_STAYOPEN }, | ||
147 | { "DNSRCH", RES_DNSRCH }, | ||
148 | { "INSECURE1", RES_INSECURE1 }, | ||
149 | { "INSECURE2", RES_INSECURE2 }, | ||
150 | { "NOALIASES", RES_NOALIASES }, | ||
151 | { "USE_INET6", RES_USE_INET6 }, | ||
152 | { "USE_EDNS0", RES_USE_EDNS0 }, | ||
153 | { "USE_DNSSEC", RES_USE_DNSSEC }, | ||
154 | { NULL, 0 }, | ||
155 | }; | ||
138 | 156 | ||
139 | const char * | 157 | const char * |
140 | rcodetostr(uint16_t v) | 158 | rcodetostr(uint16_t v) |
@@ -187,7 +205,7 @@ strtotype(const char *name) | |||
187 | size_t i; | 205 | size_t i; |
188 | 206 | ||
189 | for(i = 0; kv_type[i].key; i++) | 207 | for(i = 0; kv_type[i].key; i++) |
190 | if (!strcmp(kv_type[i].key, name)) | 208 | if (!strcasecmp(kv_type[i].key, name)) |
191 | return (kv_type[i].value); | 209 | return (kv_type[i].value); |
192 | 210 | ||
193 | return (0); | 211 | return (0); |
@@ -199,12 +217,52 @@ strtoclass(const char *name) | |||
199 | size_t i; | 217 | size_t i; |
200 | 218 | ||
201 | for(i = 0; kv_class[i].key; i++) | 219 | for(i = 0; kv_class[i].key; i++) |
202 | if (!strcmp(kv_class[i].key, name)) | 220 | if (!strcasecmp(kv_class[i].key, name)) |
203 | return (kv_class[i].value); | 221 | return (kv_class[i].value); |
204 | 222 | ||
205 | return (0); | 223 | return (0); |
206 | } | 224 | } |
207 | 225 | ||
226 | int | ||
227 | strtoresopt(const char *name) | ||
228 | { | ||
229 | size_t i; | ||
230 | |||
231 | for(i = 0; kv_resopt[i].key; i++) | ||
232 | if (!strcasecmp(kv_resopt[i].key, name)) | ||
233 | return (kv_resopt[i].value); | ||
234 | |||
235 | return (0); | ||
236 | } | ||
237 | |||
238 | void | ||
239 | parseresopt(const char *name) | ||
240 | { | ||
241 | static int init = 0; | ||
242 | int flag, neg = 0; | ||
243 | |||
244 | if (init == 0) { | ||
245 | res_init(); | ||
246 | init = 1; | ||
247 | } | ||
248 | |||
249 | if (name[0] == '-') { | ||
250 | neg = 1; | ||
251 | name++; | ||
252 | } | ||
253 | else if (name[0] == '+') | ||
254 | name++; | ||
255 | |||
256 | flag = strtoresopt(name); | ||
257 | if (flag == 0) | ||
258 | errx(1, "unknown reslover option %s", name); | ||
259 | |||
260 | if (neg) | ||
261 | _res.options &= ~flag; | ||
262 | else | ||
263 | _res.options |= flag; | ||
264 | } | ||
265 | |||
208 | void | 266 | void |
209 | print_hostent(struct hostent *e) | 267 | print_hostent(struct hostent *e) |
210 | { | 268 | { |