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);
}
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);
}