=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/canohost.c,v retrieving revision 1.37.2.2 retrieving revision 1.38 diff -u -r1.37.2.2 -r1.38 --- src/usr.bin/ssh/canohost.c 2004/08/19 22:37:30 1.37.2.2 +++ src/usr.bin/ssh/canohost.c 2003/09/23 20:17:11 1.38 @@ -12,7 +12,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: canohost.c,v 1.37.2.2 2004/08/19 22:37:30 brad Exp $"); +RCSID("$OpenBSD: canohost.c,v 1.38 2003/09/23 20:17:11 markus Exp $"); #include "packet.h" #include "xmalloc.h" @@ -27,7 +27,7 @@ */ static char * -get_remote_hostname(int sock, int use_dns) +get_remote_hostname(int socket, int use_dns) { struct sockaddr_storage from; int i; @@ -38,14 +38,11 @@ /* Get IP address of client. */ fromlen = sizeof(from); memset(&from, 0, sizeof(from)); - if (getpeername(sock, (struct sockaddr *)&from, &fromlen) < 0) { + if (getpeername(socket, (struct sockaddr *)&from, &fromlen) < 0) { debug("getpeername failed: %.100s", strerror(errno)); cleanup_exit(255); } - if (from.ss_family == AF_INET) - check_ip_options(sock, ntop); - if (getnameinfo((struct sockaddr *)&from, fromlen, ntop, sizeof(ntop), NULL, 0, NI_NUMERICHOST) != 0) fatal("get_remote_hostname: getnameinfo NI_NUMERICHOST failed"); @@ -53,6 +50,9 @@ if (!use_dns) return xstrdup(ntop); + if (from.ss_family == AF_INET) + check_ip_options(socket, ntop); + debug3("Trying to reverse map address %.100s.", ntop); /* Map the IP address to a host name. */ if (getnameinfo((struct sockaddr *)&from, fromlen, name, sizeof(name), @@ -132,7 +132,7 @@ */ /* IPv4 only */ static void -check_ip_options(int sock, char *ipaddr) +check_ip_options(int socket, char *ipaddr) { u_char options[200]; char text[sizeof(options) * 3 + 1]; @@ -145,7 +145,7 @@ else ipproto = IPPROTO_IP; option_size = sizeof(options); - if (getsockopt(sock, ipproto, IP_OPTIONS, options, + if (getsockopt(socket, ipproto, IP_OPTIONS, options, &option_size) >= 0 && option_size != 0) { text[0] = '\0'; for (i = 0; i < option_size; i++) @@ -194,7 +194,7 @@ * The returned string must be freed. */ static char * -get_socket_address(int sock, int remote, int flags) +get_socket_address(int socket, int remote, int flags) { struct sockaddr_storage addr; socklen_t addrlen; @@ -205,11 +205,11 @@ memset(&addr, 0, sizeof(addr)); if (remote) { - if (getpeername(sock, (struct sockaddr *)&addr, &addrlen) + if (getpeername(socket, (struct sockaddr *)&addr, &addrlen) < 0) return NULL; } else { - if (getsockname(sock, (struct sockaddr *)&addr, &addrlen) + if (getsockname(socket, (struct sockaddr *)&addr, &addrlen) < 0) return NULL; } @@ -223,29 +223,29 @@ } char * -get_peer_ipaddr(int sock) +get_peer_ipaddr(int socket) { char *p; - if ((p = get_socket_address(sock, 1, NI_NUMERICHOST)) != NULL) + if ((p = get_socket_address(socket, 1, NI_NUMERICHOST)) != NULL) return p; return xstrdup("UNKNOWN"); } char * -get_local_ipaddr(int sock) +get_local_ipaddr(int socket) { char *p; - if ((p = get_socket_address(sock, 0, NI_NUMERICHOST)) != NULL) + if ((p = get_socket_address(socket, 0, NI_NUMERICHOST)) != NULL) return p; return xstrdup("UNKNOWN"); } char * -get_local_name(int sock) +get_local_name(int socket) { - return get_socket_address(sock, 0, NI_NAMEREQD); + return get_socket_address(socket, 0, NI_NAMEREQD); } /* @@ -339,13 +339,7 @@ int get_remote_port(void) { - static int port = -1; - - /* Cache to avoid getpeername() on a dead connection */ - if (port == -1) - port = get_port(0); - - return port; + return get_port(0); } int