summaryrefslogtreecommitdiff
path: root/src/regress/lib/libc/asr/bin/common.c
diff options
context:
space:
mode:
authoreric <>2018-12-15 15:16:12 +0000
committereric <>2018-12-15 15:16:12 +0000
commit987422333c6bf4871e97fd14e80c6fe6b937af6c (patch)
tree9e8c744de1e51b27c2b37b1b5757fae46e8f7b01 /src/regress/lib/libc/asr/bin/common.c
parentd44c7e0fd6df3e642957216aea5f5fb9814b4056 (diff)
downloadopenbsd-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.c68
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
88struct keyval { 88struct keyval {
89 const char *key; 89 const char *key;
90 uint16_t value; 90 int value;
91}; 91};
92 92
93static struct keyval kv_class[] = { 93static struct keyval kv_class[] = {
@@ -135,6 +135,24 @@ static struct keyval kv_rcode[] = {
135 { NULL, 0 }, 135 { NULL, 0 },
136}; 136};
137 137
138static 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
139const char * 157const char *
140rcodetostr(uint16_t v) 158rcodetostr(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
226int
227strtoresopt(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
238void
239parseresopt(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
208void 266void
209print_hostent(struct hostent *e) 267print_hostent(struct hostent *e)
210{ 268{