X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsetup.c;h=8ff92d284e5bf4a89955f336795479417d28ade1;hb=7ba7a232de0516d2cce934bdc91627b33b46ef47;hp=2de3eaa023ce1cf177555f77d652e0790ba7006b;hpb=e45372c163ef6a942f7856acf87173c8a79c3d85;p=adns.git diff --git a/src/setup.c b/src/setup.c index 2de3eaa..8ff92d2 100644 --- a/src/setup.c +++ b/src/setup.c @@ -5,7 +5,7 @@ */ /* * This file is part of adns, which is - * Copyright (C) 1997-2000,2003,2006,2014 Ian Jackson + * Copyright (C) 1997-2000,2003,2006,2014-2016 Ian Jackson * Copyright (C) 2014 Mark Wooding * Copyright (C) 1999-2000,2003,2006 Tony Finch * Copyright (C) 1991 Massachusetts Institute of Technology @@ -113,9 +113,11 @@ static void ccf_nameserver(adns_state ads, const char *fn, adns_rr_addr a; char addrbuf[ADNS_ADDR2TEXT_BUFLEN]; int err; + socklen_t salen; - a.len= sizeof(a.addr); - err= adns_text2addr(buf,DNS_PORT, 0, &a.addr.sa,&a.len); + salen= sizeof(a.addr); + err= adns_text2addr(buf,DNS_PORT, 0, &a.addr.sa,&salen); + a.len= salen; switch (err) { case 0: break; @@ -129,7 +131,7 @@ static void ccf_nameserver(adns_state ads, const char *fn, } adns__debug(ads,-1,0,"using nameserver %s", adns__sockaddr_ntoa(&a.addr.sa, addrbuf)); - addserver(ads,&a.addr.sa,a.len); + addserver(ads,&a.addr.sa,salen); } static void ccf_search(adns_state ads, const char *fn, @@ -167,7 +169,7 @@ static void ccf_search(adns_state ads, const char *fn, static int gen_pton(const char *text, int want_af, adns_sockaddr *a) { int err; - int len; + socklen_t len; len= sizeof(*a); err= adns_text2addr(text,0, adns_qf_addrlit_scope_forbid, @@ -267,19 +269,19 @@ static void ccf_options(adns_state ads, const char *fn, if (!buf) return; -#define OPTION__IS(s,op) ((endword-word) op (sizeof(s)-1) && \ +#define WORD__IS(s,op) ((endword-word) op (sizeof(s)-1) && \ !memcmp(word,s,(sizeof(s)-1))) -#define OPTION_IS(s) (OPTION__IS(s,==)) -#define OPTION_STARTS(s) (OPTION__IS(s,>=) ? ((word+=sizeof(s)-1)) : 0) +#define WORD_IS(s) (WORD__IS(s,==)) +#define WORD_STARTS(s) (WORD__IS(s,>=) ? ((word+=sizeof(s)-1)) : 0) while (nextword(&buf,&word,&l)) { opt=word; endopt=endword=word+l; - if (OPTION_IS("debug")) { + if (WORD_IS("debug")) { ads->iflags |= adns_if_debug; continue; } - if (OPTION_STARTS("ndots:")) { + if (WORD_STARTS("ndots:")) { v= strtoul(word,&ep,10); if (ep==word || ep != endword || v > INT_MAX) { configparseerr(ads,fn,lno,"option `%.*s' malformed" @@ -289,14 +291,14 @@ static void ccf_options(adns_state ads, const char *fn, ads->searchndots= v; continue; } - if (OPTION_STARTS("adns_checkc:")) { - if (OPTION_IS("none")) { + if (WORD_STARTS("adns_checkc:")) { + if (WORD_IS("none")) { ads->iflags &= ~adns_if_checkc_freq; ads->iflags |= adns_if_checkc_entex; - } else if (OPTION_IS("entex")) { + } else if (WORD_IS("entex")) { ads->iflags &= ~adns_if_checkc_freq; ads->iflags |= adns_if_checkc_entex; - } else if (OPTION_IS("freq")) { + } else if (WORD_IS("freq")) { ads->iflags |= adns_if_checkc_freq; } else { configparseerr(ads,fn,lno, "option adns_checkc has bad value `%s' " @@ -304,19 +306,21 @@ static void ccf_options(adns_state ads, const char *fn, } continue; } - if (OPTION_STARTS("adns_af:")) { + if (WORD_STARTS("adns_af:")) { ads->iflags &= ~adns_if_afmask; - if (!OPTION_IS("any")) for (;;) { + if (!WORD_IS("any")) for (;;) { const char *comma= memchr(word,',',endopt-word); endword=comma?comma:endopt; - if (OPTION_IS("ipv4")) + if (WORD_IS("ipv4")) ads->iflags |= adns_if_permit_ipv4; - else if (OPTION_IS("ipv6")) + else if (WORD_IS("ipv6")) ads->iflags |= adns_if_permit_ipv6; else { - configparseerr(ads,fn,lno, "option adns_af has bad value `%.*s' " - "(must be `any' or list {`ipv4',`ipv6'},...)", - (int)(endword-word), word); + if (ads->config_report_unknown) + adns__diag(ads,-1,0,"%s:%d: " + "option adns_af has bad value or entry `%.*s' " + "(option must be `any', or list of `ipv4',`ipv6')", + fn,lno, (int)(endword-word),word); break; } if (!comma) break; @@ -324,29 +328,29 @@ static void ccf_options(adns_state ads, const char *fn, } continue; } - if (OPTION_IS("adns_ignoreunkcfg")) { + if (WORD_IS("adns_ignoreunkcfg")) { ads->config_report_unknown=0; continue; } if (/* adns's query strategy is not configurable */ - OPTION_STARTS("timeout:") || - OPTION_STARTS("attempts:") || - OPTION_IS("rotate") || + WORD_STARTS("timeout:") || + WORD_STARTS("attempts:") || + WORD_IS("rotate") || /* adns provides the application with knob for this */ - OPTION_IS("no-check-names") || + WORD_IS("no-check-names") || /* adns normally does IPv6 if the application wants it; control * this with the adns_af: option if you like */ - OPTION_IS("inet6") || + WORD_IS("inet6") || /* adns does not do edns0 and this is not a problem */ - OPTION_IS("edns0")) + WORD_IS("edns0")) continue; if (ads->config_report_unknown) adns__diag(ads,-1,0,"%s:%d: unknown option `%.*s'", fn,lno, l,opt); } -#undef OPTION__IS -#undef OPTION_IS -#undef OPTION_STARTS +#undef WORD__IS +#undef WORD_IS +#undef WORD_STARTS } static void ccf_clearnss(adns_state ads, const char *fn,