--- embedaddon/mtr/ui/dns.c 2019/10/21 14:25:31 1.1.1.1 +++ embedaddon/mtr/ui/dns.c 2021/03/17 00:07:30 1.1.1.2 @@ -11,9 +11,9 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* @@ -41,6 +41,7 @@ #include "dns.h" #include "net.h" #include "utils.h" +#include "packet/sockaddr.h" struct dns_results { ip_t ip; @@ -105,7 +106,7 @@ static struct dns_results *findip( struct dns_results *t; for (t = results; t; t = t->next) { - if (addrcmp((void *) ip, (void *) &t->ip, ctl->af) == 0) + if (addrcmp(ip, &t->ip, ctl->af) == 0) return t; } @@ -117,22 +118,9 @@ static void set_sockaddr_ip( struct sockaddr_storage *sa, ip_t * ip) { - struct sockaddr_in *sa_in; - struct sockaddr_in6 *sa_in6; - memset(sa, 0, sizeof(struct sockaddr_storage)); - switch (ctl->af) { - case AF_INET: - sa_in = (struct sockaddr_in *) sa; - sa_in->sin_family = ctl->af; - addrcpy((void *) &sa_in->sin_addr, (void *) ip, ctl->af); - break; - case AF_INET6: - sa_in6 = (struct sockaddr_in6 *) sa; - sa_in6->sin6_family = ctl->af; - addrcpy((void *) &sa_in6->sin6_addr, (void *) ip, ctl->af); - break; - } + sa->ss_family = ctl->af; + memcpy(sockaddr_addr_offset(sa), ip, sockaddr_addr_size(sa)); } void dns_open( @@ -162,7 +150,7 @@ void dns_open( error(EXIT_FAILURE, errno, "signal"); } - /* Close all unneccessary FDs. + /* Close all unnecessary FDs. for debugging and error reporting, keep std-in/out/err. */ for (i = 3; i < fromdns[1]; i++) { if (i == todns[0]) @@ -276,8 +264,6 @@ char *dns_lookup2( /* we've got a result. */ if (r->name) return r->name; - else - return strlongip(ctl, ip); } else { r = xmalloc(sizeof(struct dns_results)); memcpy(&r->ip, ip, sizeof(r->ip)); @@ -289,7 +275,7 @@ char *dns_lookup2( if (rv < 0) error(0, errno, "couldn't write to resolver process"); } - return strlongip(ctl, ip); + return NULL; } @@ -302,7 +288,7 @@ char *dns_lookup( if (!ctl->dns || !ctl->use_dns) return NULL; t = dns_lookup2(ctl, ip); - return t; + return t ? t : strlongip(ctl, ip); } /* XXX check if necessary/exported. */