X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/2c6eb096dd80e37c12ec5a301b771ff011fc00ce..60b40c591fd6136f91f7119383c34524279b7f1b:/client/adh-query.c diff --git a/client/adh-query.c b/client/adh-query.c index b366697..90598fe 100644 --- a/client/adh-query.c +++ b/client/adh-query.c @@ -4,12 +4,11 @@ * make queries and print answers */ /* - * This file is - * Copyright (C) 1997-2000 Ian Jackson - * - * It is part of adns, which is - * Copyright (C) 1997-2000 Ian Jackson - * Copyright (C) 1999-2000 Tony Finch + * This file is part of adns, which is + * Copyright (C) 1997-2000,2003,2006 Ian Jackson + * Copyright (C) 1999-2000,2003,2006 Tony Finch + * Copyright (C) 1991 Massachusetts Institute of Technology + * (See the file INSTALL for full details.) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -93,24 +92,30 @@ static void prep_query(struct query_node **qun_r, int *quflags_r) { (ov_qc_query ? adns_qf_quoteok_query : 0) | (ov_qc_anshost ? adns_qf_quoteok_anshost : 0) | (ov_qc_cname ? 0 : adns_qf_quoteok_cname) | - ov_cname, + ov_cname; *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, @@ -123,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,