]> andersk Git - openssh.git/blobdiff - canohost.c
- Prevent typedefs from being compiled more than once. Report from
[openssh.git] / canohost.c
index 48a7bfdccba251ce7e7f514358d9726ffe43fa16..76b5ed2fe5b79ebcecaf395fa369703e2ea339da 100644 (file)
@@ -143,6 +143,29 @@ check_ip_options:
 static char *canonical_host_name = NULL;
 static char *canonical_host_ip = NULL;
 
+/* Returns 1 if remote host is connected via socket, 0 if not. */
+
+int
+peer_connection_is_on_socket()
+{
+       struct sockaddr_in from;
+       int fromlen;
+       int in = packet_get_connection_in();
+       int out = packet_get_connection_out();
+
+       /* filedescriptors in and out are the same, so it's a socket */
+       if (in == out)
+               return 1;
+       fromlen = sizeof(from);
+       memset(&from, 0, sizeof(from));
+       if (getpeername(in, (struct sockaddr *) & from, &fromlen) < 0)
+               return 0;
+       if (from.sin_family != AF_INET)
+               return 0;
+
+       return 1;
+}
+
 /*
  * Return the canonical name of the host in the other side of the current
  * connection.  The host name is cached, so it is efficient to call this
@@ -157,7 +180,7 @@ get_canonical_hostname()
                return canonical_host_name;
 
        /* Get the real hostname if socket; otherwise return UNKNOWN. */
-       if (packet_get_connection_in() == packet_get_connection_out())
+       if (peer_connection_is_on_socket())
                canonical_host_name = get_remote_hostname(packet_get_connection_in());
        else
                canonical_host_name = xstrdup("UNKNOWN");
@@ -181,7 +204,7 @@ get_remote_ipaddr()
                return canonical_host_ip;
 
        /* If not a socket, return UNKNOWN. */
-       if (packet_get_connection_in() != packet_get_connection_out()) {
+       if (!peer_connection_is_on_socket()) {
                canonical_host_ip = xstrdup("UNKNOWN");
                return canonical_host_ip;
        }
@@ -232,7 +255,7 @@ get_remote_port()
         * If the connection is not a socket, return 65535.  This is
         * intentionally chosen to be an unprivileged port number.
         */
-       if (packet_get_connection_in() != packet_get_connection_out())
+       if (!peer_connection_is_on_socket())
                return 65535;
 
        /* Get client socket. */
This page took 0.043971 seconds and 4 git commands to generate.