X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=client%2Fadh-query.c;h=90598fe0e024c311c1098e3fe00197c2fe2df077;hb=844e3556cd0198367555015b36e9b5263e7abecb;hp=63b63f410b104a6e714a67cf7d6a4154b2e31985;hpb=eca4e30a85d4b680d2cfd95bd7eff3719b2fbb46;p=adns.git diff --git a/client/adh-query.c b/client/adh-query.c index 63b63f4..90598fe 100644 --- a/client/adh-query.c +++ b/client/adh-query.c @@ -96,20 +96,26 @@ static void prep_query(struct query_node **qun_r, int *quflags_r) { *qun_r= qun; } + +static void sockaddr_aton(const char *text, adns_rr_addr *a) { + int err; + + a->len= sizeof(a->addr); + err= adns_text2addr(text,0,adns_qf_addrlit_scope_forbid, + &a->addr.sa,&a->len); + if (err == EINVAL) usageerr("invalid IP address %s",text); + else if (err) sysfail("adns_text2addr",err); +} void of_ptr(const struct optioninfo *oi, const char *arg, const char *arg2) { struct query_node *qun; int quflags, r; - struct sockaddr_in sa; - - memset(&sa,0,sizeof(sa)); - sa.sin_family= AF_INET; - if (!inet_aton(arg,&sa.sin_addr)) usageerr("invalid IP address %s",arg); + adns_rr_addr a; + sockaddr_aton(arg,&a); prep_query(&qun,&quflags); qun->owner= xstrsave(arg); - r= adns_submit_reverse(ads, - (struct sockaddr*)&sa, + r= adns_submit_reverse(ads, &a.addr.sa, ov_type == adns_r_none ? adns_r_ptr : ov_type, quflags, qun, @@ -122,17 +128,13 @@ 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; - - memset(&sa,0,sizeof(sa)); - sa.sin_family= AF_INET; - if (!inet_aton(arg,&sa.sin_addr)) usageerr("invalid IP address %s",arg); + adns_rr_addr a; + sockaddr_aton(arg,&a); 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, + r= adns_submit_reverse_any(ads, &a.addr.sa,arg2, ov_type == adns_r_none ? adns_r_txt : ov_type, quflags, qun,