memset(&ours,0,sizeof(ours));
socklen= sizeof(ours);
- int our_r= adns_text2addr(input,PORT,&ours.sa,&socklen);
+ int our_r= adns_text2addr(input,PORT,0,&ours.sa,&socklen);
memset(&aip,0,sizeof(aip));
aip.ai_flags= AI_NUMERICHOST|AI_NUMERICSERV;
int ourbuflen= sizeof(ourbuf);
int ourport;
- our_r= adns_addr2text(&ours.sa, ourbuf,&ourbuflen, &ourport);
+ our_r= adns_addr2text(&ours.sa,0, ourbuf,&ourbuflen, &ourport);
printf(" us %s",strerror(our_r));
if (!our_r)
sa->sa_family= af;
*portp = htons(port);
- int r= inet_pton(af,parse,dst);
- if (!r) INVAL("inet_pton rejected");
- if (r<0) {
- af_debug("inet_pton failed on `%s'", parse);
- return errno;
+ if (af == AF_INET && !(flags & adns_qf_addrlit_ipv4_quadonly)) {
+ /* we have to use inet_aton to deal with non-dotted-quad literals */
+ int r= inet_aton(parse,&SIN(sa)->sin_addr);
+ if (!r) INVAL("inet_aton rejected");
+ } else {
+ int r= inet_pton(af,parse,dst);
+ if (!r) INVAL("inet_pton rejected");
+ assert(r>0);
}
if (scopestr) {
adns__qf_afmask= 0x00001c00,/* all the above flag bits */
adns_qf_addrlit_scope_forbid=0x00002000,/* forbid %<scope> in IPv6 literals */
adns_qf_addrlit_scope_numeric=0x00004000,/* %<scope> may only be numeric */
+ adns_qf_addrlit_ipv4_quadonly=0x00008000,/* reject non-dotted-quad ipv4 */
adns__qf_internalmask= 0x0ff00000
} adns_queryflags;