=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/canohost.c,v retrieving revision 1.34.2.2 retrieving revision 1.35 diff -u -r1.34.2.2 -r1.35 --- src/usr.bin/ssh/canohost.c 2003/09/16 21:20:25 1.34.2.2 +++ src/usr.bin/ssh/canohost.c 2002/11/26 02:38:54 1.35 @@ -12,7 +12,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: canohost.c,v 1.34.2.2 2003/09/16 21:20:25 brad Exp $"); +RCSID("$OpenBSD: canohost.c,v 1.35 2002/11/26 02:38:54 stevesk Exp $"); #include "packet.h" #include "xmalloc.h" @@ -27,7 +27,7 @@ */ static char * -get_remote_hostname(int socket, int use_dns) +get_remote_hostname(int socket, int verify_reverse_mapping) { struct sockaddr_storage from; int i; @@ -47,9 +47,6 @@ NULL, 0, NI_NUMERICHOST) != 0) fatal("get_remote_hostname: getnameinfo NI_NUMERICHOST failed"); - if (!use_dns) - return xstrdup(ntop); - if (from.ss_family == AF_INET) check_ip_options(socket, ntop); @@ -58,31 +55,24 @@ if (getnameinfo((struct sockaddr *)&from, fromlen, name, sizeof(name), NULL, 0, NI_NAMEREQD) != 0) { /* Host name not found. Use ip address. */ +#if 0 + log("Could not reverse map address %.100s.", ntop); +#endif return xstrdup(ntop); } + /* Got host name. */ + name[sizeof(name) - 1] = '\0'; /* - * if reverse lookup result looks like a numeric hostname, - * someone is trying to trick us by PTR record like following: - * 1.1.1.10.in-addr.arpa. IN PTR 2.3.4.5 - */ - memset(&hints, 0, sizeof(hints)); - hints.ai_socktype = SOCK_DGRAM; /*dummy*/ - hints.ai_flags = AI_NUMERICHOST; - if (getaddrinfo(name, "0", &hints, &ai) == 0) { - logit("Nasty PTR record \"%s\" is set up for %s, ignoring", - name, ntop); - freeaddrinfo(ai); - return xstrdup(ntop); - } - - /* * Convert it to all lowercase (which is expected by the rest * of this software). */ for (i = 0; name[i]; i++) if (isupper(name[i])) name[i] = tolower(name[i]); + + if (!verify_reverse_mapping) + return xstrdup(name); /* * Map it back to an IP address and check that the given * address actually is an address of this host. This is @@ -96,7 +86,7 @@ hints.ai_family = from.ss_family; hints.ai_socktype = SOCK_STREAM; if (getaddrinfo(name, NULL, &hints, &aitop) != 0) { - logit("reverse mapping checking getaddrinfo for %.700s " + log("reverse mapping checking getaddrinfo for %.700s " "failed - POSSIBLE BREAKIN ATTEMPT!", name); return xstrdup(ntop); } @@ -111,7 +101,7 @@ /* If we reached the end of the list, the address was not there. */ if (!ai) { /* Address not found for the host name. */ - logit("Address %.100s maps to %.600s, but this does not " + log("Address %.100s maps to %.600s, but this does not " "map back to the address - POSSIBLE BREAKIN ATTEMPT!", ntop, name); return xstrdup(ntop); @@ -151,7 +141,7 @@ for (i = 0; i < option_size; i++) snprintf(text + i*3, sizeof(text) - i*3, " %2.2x", options[i]); - logit("Connection from %.100s with IP options:%.800s", + log("Connection from %.100s with IP options:%.800s", ipaddr, text); packet_disconnect("Connection from %.100s with IP options:%.800s", ipaddr, text); @@ -165,14 +155,14 @@ */ const char * -get_canonical_hostname(int use_dns) +get_canonical_hostname(int verify_reverse_mapping) { static char *canonical_host_name = NULL; - static int use_dns_done = 0; + static int verify_reverse_mapping_done = 0; /* Check if we have previously retrieved name with same option. */ if (canonical_host_name != NULL) { - if (use_dns_done != use_dns) + if (verify_reverse_mapping_done != verify_reverse_mapping) xfree(canonical_host_name); else return canonical_host_name; @@ -181,11 +171,11 @@ /* Get the real hostname if socket; otherwise return UNKNOWN. */ if (packet_connection_is_on_socket()) canonical_host_name = get_remote_hostname( - packet_get_connection_in(), use_dns); + packet_get_connection_in(), verify_reverse_mapping); else canonical_host_name = xstrdup("UNKNOWN"); - use_dns_done = use_dns; + verify_reverse_mapping_done = verify_reverse_mapping; return canonical_host_name; } @@ -274,11 +264,11 @@ } const char * -get_remote_name_or_ip(u_int utmp_len, int use_dns) +get_remote_name_or_ip(u_int utmp_len, int verify_reverse_mapping) { static const char *remote = ""; if (utmp_len > 0) - remote = get_canonical_hostname(use_dns); + remote = get_canonical_hostname(verify_reverse_mapping); if (utmp_len == 0 || strlen(remote) > utmp_len) remote = get_remote_ipaddr(); return remote;