components/openssh/patches/011-useprivilegedport_regression.patch
author Huie-Ying Lee <huieying.lee@oracle.com>
Thu, 27 Mar 2014 19:40:44 -0700
changeset 1796 a2310ec32635
permissions -rw-r--r--
PSARC 2014/078 OpenSSH 6.5 18205826 upgrade OpenSSH to 6.5p1 18268681 openssh has non-existent /usr/local/lib in its runpath 18435439 problem in UTILITY/OPENSSH
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1796
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
     1
#
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
     2
# This is to fix a regression in OpenSSH6.5p1 for UsePrivilegedPort=yes. The
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
     3
# bug fix code came from OpenSSH.org.  When we upgrade OpenSSH to version 6.6
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
     4
# or later, we will remove this patch file.
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
     5
#
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
     6
--- orig/sshconnect.c	Mon Feb 10 13:56:07 2014
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
     7
+++ new/sshconnect.c	Mon Feb 10 17:10:54 2014
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
     8
@@ -269,7 +269,7 @@
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
     9
 ssh_create_socket(int privileged, struct addrinfo *ai)
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    10
 {
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    11
 	int sock, r, gaierr;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    12
-	struct addrinfo hints, *res;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    13
+	struct addrinfo hints, *res = NULL;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    14
 
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    15
 	sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    16
 	if (sock < 0) {
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    17
@@ -282,17 +282,19 @@
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    18
 	if (options.bind_address == NULL && !privileged)
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    19
 		return sock;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    20
 
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    21
-	memset(&hints, 0, sizeof(hints));
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    22
-	hints.ai_family = ai->ai_family;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    23
-	hints.ai_socktype = ai->ai_socktype;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    24
-	hints.ai_protocol = ai->ai_protocol;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    25
-	hints.ai_flags = AI_PASSIVE;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    26
-	gaierr = getaddrinfo(options.bind_address, NULL, &hints, &res);
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    27
-	if (gaierr) {
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    28
+	if (options.bind_address) {
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    29
+            memset(&hints, 0, sizeof(hints));
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    30
+	    hints.ai_family = ai->ai_family;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    31
+	    hints.ai_socktype = ai->ai_socktype;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    32
+	    hints.ai_protocol = ai->ai_protocol;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    33
+	    hints.ai_flags = AI_PASSIVE;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    34
+	    gaierr = getaddrinfo(options.bind_address, NULL, &hints, &res);
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    35
+	    if (gaierr) {
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    36
 		error("getaddrinfo: %s: %s", options.bind_address,
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    37
 		    ssh_gai_strerror(gaierr));
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    38
 		close(sock);
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    39
 		return -1;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    40
+	    }
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    41
 	}
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    42
 	/*
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    43
 	 * If we are running as root and want to connect to a privileged
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    44
@@ -300,7 +302,7 @@
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    45
 	 */
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    46
 	if (privileged) {
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    47
 		PRIV_START;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    48
-		r = bindresvport_sa(sock, res->ai_addr);
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    49
+		r = bindresvport_sa(sock, res ? res->ai_addr : NULL);
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    50
 		PRIV_END;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    51
 		if (r < 0) {
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    52
 			error("bindresvport_sa: af=%d %s", ai->ai_family,
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    53
@@ -317,7 +319,8 @@
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    54
 			return -1;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    55
 		}
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    56
 	}
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    57
-	freeaddrinfo(res);
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    58
+        if (res != NULL)
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    59
+	        freeaddrinfo(res);
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    60
 	return sock;
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    61
 }
a2310ec32635 PSARC 2014/078 OpenSSH 6.5
Huie-Ying Lee <huieying.lee@oracle.com>
parents:
diff changeset
    62