X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/adns/blobdiff_plain/4e8966f30fe4b53960581503c29677ec41f589ed..8a53cf7f63a4decacd4b293b32167a23cdeea412:/client/adh-query.c diff --git a/client/adh-query.c b/client/adh-query.c index 125bb33..35e43b9 100644 --- a/client/adh-query.c +++ b/client/adh-query.c @@ -100,21 +100,26 @@ static void prep_query(struct query_node **qun_r, int *quflags_r) { void of_ptr(const struct optioninfo *oi, const char *arg, const char *arg2) { struct query_node *qun; int quflags, r; - struct sockaddr_in sa; + struct addrinfo *ai, ai_hint = { 0 }; + int err; - memset(&sa,0,sizeof(sa)); - sa.sin_family= AF_INET; - if (!inet_aton(arg,&sa.sin_addr)) usageerr("invalid IP address %s",arg); + ai_hint.ai_family = AF_UNSPEC; + ai_hint.ai_socktype = SOCK_DGRAM; + ai_hint.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV; + + err = getaddrinfo(arg, 0, &ai_hint, &ai); + if (err) usageerr("invalid IP address %s",arg); prep_query(&qun,&quflags); qun->owner= xstrsave(arg); r= adns_submit_reverse(ads, - (struct sockaddr*)&sa, + ai->ai_addr, ov_type == adns_r_none ? adns_r_ptr : ov_type, quflags, qun, &qun->qu); if (r) sysfail("adns_submit_reverse",r); + freeaddrinfo(ai); LIST_LINK_TAIL(outstanding,qun); } @@ -122,22 +127,27 @@ void of_ptr(const struct optioninfo *oi, const char *arg, const char *arg2) { void of_reverse(const struct optioninfo *oi, const char *arg, const char *arg2) { struct query_node *qun; int quflags, r; - struct sockaddr_in sa; + struct addrinfo *ai, ai_hint = { 0 }; + int err; + + ai_hint.ai_family = AF_UNSPEC; + ai_hint.ai_socktype = SOCK_DGRAM; + ai_hint.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV; - memset(&sa,0,sizeof(sa)); - sa.sin_family= AF_INET; - if (!inet_aton(arg,&sa.sin_addr)) usageerr("invalid IP address %s",arg); + err = getaddrinfo(arg, 0, &ai_hint, &ai); + if (err) usageerr("invalid IP address %s",arg); prep_query(&qun,&quflags); qun->owner= xmalloc(strlen(arg) + strlen(arg2) + 2); sprintf(qun->owner, "%s %s", arg,arg2); r= adns_submit_reverse_any(ads, - (struct sockaddr*)&sa, arg2, + ai->ai_addr, arg2, ov_type == adns_r_none ? adns_r_txt : ov_type, quflags, qun, &qun->qu); if (r) sysfail("adns_submit_reverse",r); + freeaddrinfo(ai); LIST_LINK_TAIL(outstanding,qun); }