rebase to openssh-7.4p1-1
* Drop unaccepted (unapplying) coverity patches * Drop server support for SSH1 (server) * Workaround #2641 for systemd * UseLogin is gone * Drop upstream commit 28652bca * Tighten seccomp filter (cache credentials before entering sandbox) (#1395288)
This commit is contained in:
		
							parent
							
								
									4189cebf7a
								
							
						
					
					
						commit
						6cf9b8e61b
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -23,3 +23,4 @@ pam_ssh_agent_auth-0.9.2.tar.bz2 | |||||||
| /openssh-7.2p1.tar.gz | /openssh-7.2p1.tar.gz | ||||||
| /openssh-7.2p2.tar.gz | /openssh-7.2p2.tar.gz | ||||||
| /openssh-7.3p1.tar.gz | /openssh-7.3p1.tar.gz | ||||||
|  | /openssh-7.4p1.tar.gz | ||||||
|  | |||||||
| @ -1,7 +1,8 @@ | |||||||
| --- openssh-4.3p2/contrib/gnome-ssh-askpass2.c.grab-info	2006-07-17 15:10:11.000000000 +0200
 | diff -up openssh-7.4p1/contrib/gnome-ssh-askpass2.c.grab-info openssh-7.4p1/contrib/gnome-ssh-askpass2.c
 | ||||||
| +++ openssh-4.3p2/contrib/gnome-ssh-askpass2.c	2006-07-17 15:25:04.000000000 +0200
 | --- openssh-7.4p1/contrib/gnome-ssh-askpass2.c.grab-info	2016-12-23 13:31:22.645213115 +0100
 | ||||||
| @@ -65,9 +65,12 @@
 | +++ openssh-7.4p1/contrib/gnome-ssh-askpass2.c	2016-12-23 13:31:40.997216691 +0100
 | ||||||
|  	err = gtk_message_dialog_new(NULL, 0, | @@ -65,9 +65,12 @@ report_failed_grab (GtkWidget *parent_wi
 | ||||||
|  |  	err = gtk_message_dialog_new(GTK_WINDOW(parent_window), 0, | ||||||
|  				     GTK_MESSAGE_ERROR, |  				     GTK_MESSAGE_ERROR, | ||||||
|  				     GTK_BUTTONS_CLOSE, |  				     GTK_BUTTONS_CLOSE, | ||||||
| -				     "Could not grab %s. "
 | -				     "Could not grab %s. "
 | ||||||
| @ -14,5 +15,5 @@ | |||||||
| +				     "Either close the application which grabs the %s or "
 | +				     "Either close the application which grabs the %s or "
 | ||||||
| +				     "log out and log in again to prevent this from happening.", what, what);
 | +				     "log out and log in again to prevent this from happening.", what, what);
 | ||||||
|  	gtk_window_set_position(GTK_WINDOW(err), GTK_WIN_POS_CENTER); |  	gtk_window_set_position(GTK_WINDOW(err), GTK_WIN_POS_CENTER); | ||||||
|  	gtk_label_set_line_wrap(GTK_LABEL((GTK_MESSAGE_DIALOG(err))->label), |   | ||||||
|  				TRUE); |  	gtk_dialog_run(GTK_DIALOG(err)); | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| diff -up openssh-5.1p1/contrib/gnome-ssh-askpass2.c.progress openssh-5.1p1/contrib/gnome-ssh-askpass2.c
 | diff -up openssh-7.4p1/contrib/gnome-ssh-askpass2.c.progress openssh-7.4p1/contrib/gnome-ssh-askpass2.c
 | ||||||
| --- openssh-5.1p1/contrib/gnome-ssh-askpass2.c.progress	2008-07-23 19:05:26.000000000 +0200
 | --- openssh-7.4p1/contrib/gnome-ssh-askpass2.c.progress	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-5.1p1/contrib/gnome-ssh-askpass2.c	2008-07-23 19:05:26.000000000 +0200
 | +++ openssh-7.4p1/contrib/gnome-ssh-askpass2.c	2016-12-23 13:31:16.545211926 +0100
 | ||||||
| @@ -53,6 +53,7 @@
 | @@ -53,6 +53,7 @@
 | ||||||
|  #include <string.h> |  #include <string.h> | ||||||
|  #include <unistd.h> |  #include <unistd.h> | ||||||
| @ -9,7 +9,7 @@ diff -up openssh-5.1p1/contrib/gnome-ssh-askpass2.c.progress openssh-5.1p1/contr | |||||||
|  #include <gtk/gtk.h> |  #include <gtk/gtk.h> | ||||||
|  #include <gdk/gdkx.h> |  #include <gdk/gdkx.h> | ||||||
|   |   | ||||||
| @@ -83,13 +84,24 @@ ok_dialog(GtkWidget *entry, gpointer dia
 | @@ -81,13 +82,24 @@ ok_dialog(GtkWidget *entry, gpointer dia
 | ||||||
|  	gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); |  	gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -30,12 +30,12 @@ diff -up openssh-5.1p1/contrib/gnome-ssh-askpass2.c.progress openssh-5.1p1/contr | |||||||
|  	const char *failed; |  	const char *failed; | ||||||
|  	char *passphrase, *local; |  	char *passphrase, *local; | ||||||
|  	int result, grab_tries, grab_server, grab_pointer; |  	int result, grab_tries, grab_server, grab_pointer; | ||||||
| -	GtkWidget *dialog, *entry;
 | -	GtkWidget *parent_window, *dialog, *entry;
 | ||||||
| +	GtkWidget *dialog, *entry, *progress, *hbox;
 | +	GtkWidget *parent_window, *dialog, *entry, *progress, *hbox;
 | ||||||
|  	GdkGrabStatus status; |  	GdkGrabStatus status; | ||||||
|   |   | ||||||
|  	grab_server = (getenv("GNOME_SSH_ASKPASS_GRAB_SERVER") != NULL); |  	grab_server = (getenv("GNOME_SSH_ASKPASS_GRAB_SERVER") != NULL); | ||||||
| @@ -102,13 +114,31 @@ passphrase_dialog(char *message)
 | @@ -104,14 +116,32 @@ passphrase_dialog(char *message)
 | ||||||
|  					"%s", |  					"%s", | ||||||
|  					message); |  					message); | ||||||
|   |   | ||||||
| @ -45,9 +45,11 @@ diff -up openssh-5.1p1/contrib/gnome-ssh-askpass2.c.progress openssh-5.1p1/contr | |||||||
| +	gtk_widget_show(hbox);
 | +	gtk_widget_show(hbox);
 | ||||||
| +
 | +
 | ||||||
|  	entry = gtk_entry_new(); |  	entry = gtk_entry_new(); | ||||||
| -	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), entry, FALSE,
 |  	gtk_box_pack_start( | ||||||
| +	gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE,
 | -	    GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), entry,
 | ||||||
|  	    FALSE, 0); | -	    FALSE, FALSE, 0);
 | ||||||
|  | +	    GTK_BOX(hbox), entry,
 | ||||||
|  | +	    TRUE, FALSE, 0);
 | ||||||
| +	gtk_entry_set_width_chars(GTK_ENTRY(entry), 2);
 | +	gtk_entry_set_width_chars(GTK_ENTRY(entry), 2);
 | ||||||
|  	gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); |  	gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); | ||||||
|  	gtk_widget_grab_focus(entry); |  	gtk_widget_grab_focus(entry); | ||||||
| @ -68,7 +70,7 @@ diff -up openssh-5.1p1/contrib/gnome-ssh-askpass2.c.progress openssh-5.1p1/contr | |||||||
|  	gtk_window_set_title(GTK_WINDOW(dialog), "OpenSSH"); |  	gtk_window_set_title(GTK_WINDOW(dialog), "OpenSSH"); | ||||||
|  	gtk_window_set_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); |  	gtk_window_set_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); | ||||||
|  	gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE); |  	gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE); | ||||||
| @@ -119,6 +149,8 @@ passphrase_dialog(char *message)
 | @@ -120,6 +150,8 @@ passphrase_dialog(char *message)
 | ||||||
|  	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); |  	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); | ||||||
|  	g_signal_connect(G_OBJECT(entry), "activate", |  	g_signal_connect(G_OBJECT(entry), "activate", | ||||||
|  			 G_CALLBACK(ok_dialog), dialog); |  			 G_CALLBACK(ok_dialog), dialog); | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| diff -up openssh-7.0p1/configure.ac.vendor openssh-7.0p1/configure.ac
 | diff -up openssh-7.4p1/configure.ac.vendor openssh-7.4p1/configure.ac
 | ||||||
| --- openssh-7.0p1/configure.ac.vendor	2015-08-12 11:14:54.102628399 +0200
 | --- openssh-7.4p1/configure.ac.vendor	2016-12-23 13:34:51.681253844 +0100
 | ||||||
| +++ openssh-7.0p1/configure.ac	2015-08-12 11:14:54.129628356 +0200
 | +++ openssh-7.4p1/configure.ac	2016-12-23 13:34:51.694253847 +0100
 | ||||||
| @@ -4776,6 +4776,12 @@ AC_ARG_WITH([lastlog],
 | @@ -4930,6 +4930,12 @@ AC_ARG_WITH([lastlog],
 | ||||||
|  		fi |  		fi | ||||||
|  	] |  	] | ||||||
|  ) |  ) | ||||||
| @ -14,7 +14,7 @@ diff -up openssh-7.0p1/configure.ac.vendor openssh-7.0p1/configure.ac | |||||||
|   |   | ||||||
|  dnl lastlog, [uw]tmpx? detection |  dnl lastlog, [uw]tmpx? detection | ||||||
|  dnl  NOTE: set the paths in the platform section to avoid the |  dnl  NOTE: set the paths in the platform section to avoid the | ||||||
| @@ -5038,6 +5044,7 @@ echo "           Translate v4 in v6 hack
 | @@ -5194,6 +5200,7 @@ echo "           Translate v4 in v6 hack
 | ||||||
|  echo "                  BSD Auth support: $BSD_AUTH_MSG" |  echo "                  BSD Auth support: $BSD_AUTH_MSG" | ||||||
|  echo "              Random number source: $RAND_MSG" |  echo "              Random number source: $RAND_MSG" | ||||||
|  echo "             Privsep sandbox style: $SANDBOX_STYLE" |  echo "             Privsep sandbox style: $SANDBOX_STYLE" | ||||||
| @ -22,10 +22,10 @@ diff -up openssh-7.0p1/configure.ac.vendor openssh-7.0p1/configure.ac | |||||||
|   |   | ||||||
|  echo "" |  echo "" | ||||||
|   |   | ||||||
| diff -up openssh-7.0p1/servconf.c.vendor openssh-7.0p1/servconf.c
 | diff -up openssh-7.4p1/servconf.c.vendor openssh-7.4p1/servconf.c
 | ||||||
| --- openssh-7.0p1/servconf.c.vendor	2015-08-11 10:57:29.000000000 +0200
 | --- openssh-7.4p1/servconf.c.vendor	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.0p1/servconf.c	2015-08-12 11:15:33.201565712 +0200
 | +++ openssh-7.4p1/servconf.c	2016-12-23 13:36:07.555268628 +0100
 | ||||||
| @@ -149,6 +149,7 @@ initialize_server_options(ServerOptions
 | @@ -143,6 +143,7 @@ initialize_server_options(ServerOptions
 | ||||||
|  	options->max_authtries = -1; |  	options->max_authtries = -1; | ||||||
|  	options->max_sessions = -1; |  	options->max_sessions = -1; | ||||||
|  	options->banner = NULL; |  	options->banner = NULL; | ||||||
| @ -33,7 +33,7 @@ diff -up openssh-7.0p1/servconf.c.vendor openssh-7.0p1/servconf.c | |||||||
|  	options->use_dns = -1; |  	options->use_dns = -1; | ||||||
|  	options->client_alive_interval = -1; |  	options->client_alive_interval = -1; | ||||||
|  	options->client_alive_count_max = -1; |  	options->client_alive_count_max = -1; | ||||||
| @@ -335,6 +336,8 @@ fill_default_server_options(ServerOption
 | @@ -325,6 +326,8 @@ fill_default_server_options(ServerOption
 | ||||||
|  		options->ip_qos_bulk = IPTOS_THROUGHPUT; |  		options->ip_qos_bulk = IPTOS_THROUGHPUT; | ||||||
|  	if (options->version_addendum == NULL) |  	if (options->version_addendum == NULL) | ||||||
|  		options->version_addendum = xstrdup(""); |  		options->version_addendum = xstrdup(""); | ||||||
| @ -42,8 +42,8 @@ diff -up openssh-7.0p1/servconf.c.vendor openssh-7.0p1/servconf.c | |||||||
|  	if (options->fwd_opts.streamlocal_bind_mask == (mode_t)-1) |  	if (options->fwd_opts.streamlocal_bind_mask == (mode_t)-1) | ||||||
|  		options->fwd_opts.streamlocal_bind_mask = 0177; |  		options->fwd_opts.streamlocal_bind_mask = 0177; | ||||||
|  	if (options->fwd_opts.streamlocal_bind_unlink == -1) |  	if (options->fwd_opts.streamlocal_bind_unlink == -1) | ||||||
| @@ -407,7 +410,7 @@ typedef enum {
 | @@ -402,7 +405,7 @@ typedef enum {
 | ||||||
|  	sIgnoreUserKnownHosts, sCiphers, sMacs, sProtocol, sPidFile, |  	sIgnoreUserKnownHosts, sCiphers, sMacs, sPidFile, | ||||||
|  	sGatewayPorts, sPubkeyAuthentication, sPubkeyAcceptedKeyTypes, |  	sGatewayPorts, sPubkeyAuthentication, sPubkeyAcceptedKeyTypes, | ||||||
|  	sXAuthLocation, sSubsystem, sMaxStartups, sMaxAuthTries, sMaxSessions, |  	sXAuthLocation, sSubsystem, sMaxStartups, sMaxAuthTries, sMaxSessions, | ||||||
| -	sBanner, sUseDNS, sHostbasedAuthentication,
 | -	sBanner, sUseDNS, sHostbasedAuthentication,
 | ||||||
| @ -51,7 +51,7 @@ diff -up openssh-7.0p1/servconf.c.vendor openssh-7.0p1/servconf.c | |||||||
|  	sHostbasedUsesNameFromPacketOnly, sHostbasedAcceptedKeyTypes, |  	sHostbasedUsesNameFromPacketOnly, sHostbasedAcceptedKeyTypes, | ||||||
|  	sHostKeyAlgorithms, |  	sHostKeyAlgorithms, | ||||||
|  	sClientAliveInterval, sClientAliveCountMax, sAuthorizedKeysFile, |  	sClientAliveInterval, sClientAliveCountMax, sAuthorizedKeysFile, | ||||||
| @@ -529,6 +532,7 @@ static struct {
 | @@ -528,6 +531,7 @@ static struct {
 | ||||||
|  	{ "maxauthtries", sMaxAuthTries, SSHCFG_ALL }, |  	{ "maxauthtries", sMaxAuthTries, SSHCFG_ALL }, | ||||||
|  	{ "maxsessions", sMaxSessions, SSHCFG_ALL }, |  	{ "maxsessions", sMaxSessions, SSHCFG_ALL }, | ||||||
|  	{ "banner", sBanner, SSHCFG_ALL }, |  	{ "banner", sBanner, SSHCFG_ALL }, | ||||||
| @ -59,7 +59,7 @@ diff -up openssh-7.0p1/servconf.c.vendor openssh-7.0p1/servconf.c | |||||||
|  	{ "usedns", sUseDNS, SSHCFG_GLOBAL }, |  	{ "usedns", sUseDNS, SSHCFG_GLOBAL }, | ||||||
|  	{ "verifyreversemapping", sDeprecated, SSHCFG_GLOBAL }, |  	{ "verifyreversemapping", sDeprecated, SSHCFG_GLOBAL }, | ||||||
|  	{ "reversemappingcheck", sDeprecated, SSHCFG_GLOBAL }, |  	{ "reversemappingcheck", sDeprecated, SSHCFG_GLOBAL }, | ||||||
| @@ -1389,6 +1393,10 @@ process_server_config_line(ServerOptions
 | @@ -1369,6 +1373,10 @@ process_server_config_line(ServerOptions
 | ||||||
|  		multistate_ptr = multistate_privsep; |  		multistate_ptr = multistate_privsep; | ||||||
|  		goto parse_multistate; |  		goto parse_multistate; | ||||||
|   |   | ||||||
| @ -70,18 +70,18 @@ diff -up openssh-7.0p1/servconf.c.vendor openssh-7.0p1/servconf.c | |||||||
|  	case sAllowUsers: |  	case sAllowUsers: | ||||||
|  		while ((arg = strdelim(&cp)) && *arg != '\0') { |  		while ((arg = strdelim(&cp)) && *arg != '\0') { | ||||||
|  			if (options->num_allow_users >= MAX_ALLOW_USERS) |  			if (options->num_allow_users >= MAX_ALLOW_USERS) | ||||||
| @@ -2266,6 +2274,7 @@ dump_config(ServerOptions *o)
 | @@ -2269,6 +2277,7 @@ dump_config(ServerOptions *o)
 | ||||||
|  	dump_cfg_fmtint(sUseLogin, o->use_login); |  	dump_cfg_fmtint(sPermitUserEnvironment, o->permit_user_env); | ||||||
|  	dump_cfg_fmtint(sCompression, o->compression); |  	dump_cfg_fmtint(sCompression, o->compression); | ||||||
|  	dump_cfg_fmtint(sGatewayPorts, o->fwd_opts.gateway_ports); |  	dump_cfg_fmtint(sGatewayPorts, o->fwd_opts.gateway_ports); | ||||||
| +	dump_cfg_fmtint(sShowPatchLevel, o->show_patchlevel);
 | +	dump_cfg_fmtint(sShowPatchLevel, o->show_patchlevel);
 | ||||||
|  	dump_cfg_fmtint(sUseDNS, o->use_dns); |  	dump_cfg_fmtint(sUseDNS, o->use_dns); | ||||||
|  	dump_cfg_fmtint(sAllowTcpForwarding, o->allow_tcp_forwarding); |  	dump_cfg_fmtint(sAllowTcpForwarding, o->allow_tcp_forwarding); | ||||||
|  	dump_cfg_fmtint(sAllowAgentForwarding, o->allow_agent_forwarding); |  	dump_cfg_fmtint(sAllowAgentForwarding, o->allow_agent_forwarding); | ||||||
| diff -up openssh-7.0p1/servconf.h.vendor openssh-7.0p1/servconf.h
 | diff -up openssh-7.4p1/servconf.h.vendor openssh-7.4p1/servconf.h
 | ||||||
| --- openssh-7.0p1/servconf.h.vendor	2015-08-11 10:57:29.000000000 +0200
 | --- openssh-7.4p1/servconf.h.vendor	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.0p1/servconf.h	2015-08-12 11:14:54.130628355 +0200
 | +++ openssh-7.4p1/servconf.h	2016-12-23 13:34:51.694253847 +0100
 | ||||||
| @@ -155,6 +155,7 @@ typedef struct {
 | @@ -149,6 +149,7 @@ typedef struct {
 | ||||||
|  	int	max_authtries; |  	int	max_authtries; | ||||||
|  	int	max_sessions; |  	int	max_sessions; | ||||||
|  	char   *banner;			/* SSH-2 banner message */ |  	char   *banner;			/* SSH-2 banner message */ | ||||||
| @ -89,12 +89,12 @@ diff -up openssh-7.0p1/servconf.h.vendor openssh-7.0p1/servconf.h | |||||||
|  	int	use_dns; |  	int	use_dns; | ||||||
|  	int	client_alive_interval;	/* |  	int	client_alive_interval;	/* | ||||||
|  					 * poke the client this often to |  					 * poke the client this often to | ||||||
| diff -up openssh-7.0p1/sshd_config.0.vendor openssh-7.0p1/sshd_config.0
 | diff -up openssh-7.4p1/sshd_config.0.vendor openssh-7.4p1/sshd_config.0
 | ||||||
| --- openssh-7.0p1/sshd_config.0.vendor	2015-08-12 11:14:54.125628363 +0200
 | --- openssh-7.4p1/sshd_config.0.vendor	2016-12-23 13:34:51.695253847 +0100
 | ||||||
| +++ openssh-7.0p1/sshd_config.0	2015-08-12 11:14:54.130628355 +0200
 | +++ openssh-7.4p1/sshd_config.0	2016-12-23 13:36:53.146277511 +0100
 | ||||||
| @@ -841,6 +841,11 @@ DESCRIPTION
 | @@ -792,6 +792,11 @@ DESCRIPTION
 | ||||||
|               Defines the number of bits in the ephemeral protocol version 1 |               ssh-keygen(1).  For more information on KRLs, see the KEY | ||||||
|               server key.  The default and minimum value is 1024. |               REVOCATION LISTS section in ssh-keygen(1). | ||||||
|   |   | ||||||
| +     ShowPatchLevel
 | +     ShowPatchLevel
 | ||||||
| +	     Specifies whether sshd will display the specific patch level of
 | +	     Specifies whether sshd will display the specific patch level of
 | ||||||
| @ -104,13 +104,13 @@ diff -up openssh-7.0p1/sshd_config.0.vendor openssh-7.0p1/sshd_config.0 | |||||||
|       StreamLocalBindMask |       StreamLocalBindMask | ||||||
|               Sets the octal file creation mode mask (umask) used when creating |               Sets the octal file creation mode mask (umask) used when creating | ||||||
|               a Unix-domain socket file for local or remote port forwarding. |               a Unix-domain socket file for local or remote port forwarding. | ||||||
| diff -up openssh-7.0p1/sshd_config.5.vendor openssh-7.0p1/sshd_config.5
 | diff -up openssh-7.4p1/sshd_config.5.vendor openssh-7.4p1/sshd_config.5
 | ||||||
| --- openssh-7.0p1/sshd_config.5.vendor	2015-08-12 11:14:54.125628363 +0200
 | --- openssh-7.4p1/sshd_config.5.vendor	2016-12-23 13:34:51.695253847 +0100
 | ||||||
| +++ openssh-7.0p1/sshd_config.5	2015-08-12 11:14:54.131628353 +0200
 | +++ openssh-7.4p1/sshd_config.5	2016-12-23 13:37:17.482282253 +0100
 | ||||||
| @@ -1411,6 +1411,13 @@ This option applies to protocol version
 | @@ -1334,6 +1334,13 @@ an OpenSSH Key Revocation List (KRL) as
 | ||||||
|  .It Cm ServerKeyBits |  .Xr ssh-keygen 1 . | ||||||
|  Defines the number of bits in the ephemeral protocol version 1 server key. |  For more information on KRLs, see the KEY REVOCATION LISTS section in | ||||||
|  The default and minimum value is 1024. |  .Xr ssh-keygen 1 . | ||||||
| +.It Cm ShowPatchLevel 
 | +.It Cm ShowPatchLevel 
 | ||||||
| +Specifies whether 
 | +Specifies whether 
 | ||||||
| +.Nm sshd 
 | +.Nm sshd 
 | ||||||
| @ -121,10 +121,10 @@ diff -up openssh-7.0p1/sshd_config.5.vendor openssh-7.0p1/sshd_config.5 | |||||||
|  .It Cm StreamLocalBindMask |  .It Cm StreamLocalBindMask | ||||||
|  Sets the octal file creation mode mask |  Sets the octal file creation mode mask | ||||||
|  .Pq umask |  .Pq umask | ||||||
| diff -up openssh-7.0p1/sshd_config.vendor openssh-7.0p1/sshd_config
 | diff -up openssh-7.4p1/sshd_config.vendor openssh-7.4p1/sshd_config
 | ||||||
| --- openssh-7.0p1/sshd_config.vendor	2015-08-12 11:14:54.125628363 +0200
 | --- openssh-7.4p1/sshd_config.vendor	2016-12-23 13:34:51.690253846 +0100
 | ||||||
| +++ openssh-7.0p1/sshd_config	2015-08-12 11:14:54.131628353 +0200
 | +++ openssh-7.4p1/sshd_config	2016-12-23 13:34:51.695253847 +0100
 | ||||||
| @@ -119,6 +119,7 @@ UsePrivilegeSeparation sandbox		# Defaul
 | @@ -105,6 +105,7 @@ X11Forwarding yes
 | ||||||
|  #Compression delayed |  #Compression delayed | ||||||
|  #ClientAliveInterval 0 |  #ClientAliveInterval 0 | ||||||
|  #ClientAliveCountMax 3 |  #ClientAliveCountMax 3 | ||||||
| @ -132,19 +132,20 @@ diff -up openssh-7.0p1/sshd_config.vendor openssh-7.0p1/sshd_config | |||||||
|  #UseDNS no |  #UseDNS no | ||||||
|  #PidFile /var/run/sshd.pid |  #PidFile /var/run/sshd.pid | ||||||
|  #MaxStartups 10:30:100 |  #MaxStartups 10:30:100 | ||||||
| diff -up openssh-7.0p1/sshd.c.vendor openssh-7.0p1/sshd.c
 | diff -up openssh-7.4p1/sshd.c.vendor openssh-7.4p1/sshd.c
 | ||||||
| --- openssh-7.0p1/sshd.c.vendor	2015-08-12 11:14:54.100628403 +0200
 | --- openssh-7.4p1/sshd.c.vendor	2016-12-23 13:34:51.682253844 +0100
 | ||||||
| +++ openssh-7.0p1/sshd.c	2015-08-12 11:14:54.131628353 +0200
 | +++ openssh-7.4p1/sshd.c	2016-12-23 13:38:32.434296856 +0100
 | ||||||
| @@ -432,7 +432,7 @@ sshd_exchange_identification(int sock_in
 | @@ -367,7 +367,8 @@ sshd_exchange_identification(struct ssh
 | ||||||
|  	} |  	char remote_version[256];	/* Must be at least as big as buf. */ | ||||||
|   |   | ||||||
|  	xasprintf(&server_version_string, "SSH-%d.%d-%.100s%s%s%s", |  	xasprintf(&server_version_string, "SSH-%d.%d-%.100s%s%s%s", | ||||||
| -	    major, minor, SSH_VERSION,
 | -	    PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2, SSH_VERSION,
 | ||||||
| +	    major, minor, (options.show_patchlevel == 1) ? SSH_VENDOR_PATCHLEVEL : SSH_VERSION,
 | +	    PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2,
 | ||||||
|  | +	    (options.show_patchlevel == 1) ? SSH_VENDOR_PATCHLEVEL : SSH_VERSION,
 | ||||||
|  	    *options.version_addendum == '\0' ? "" : " ", |  	    *options.version_addendum == '\0' ? "" : " ", | ||||||
|  	    options.version_addendum, newline); |  	    options.version_addendum, newline); | ||||||
|   |   | ||||||
| @@ -1749,7 +1749,8 @@ main(int ac, char **av)
 | @@ -1650,7 +1651,8 @@ main(int ac, char **av)
 | ||||||
|  		exit(1); |  		exit(1); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| diff -up openssh-6.8p1/log.c.log-in-chroot openssh-6.8p1/log.c
 | diff -up openssh-7.4p1/log.c.log-in-chroot openssh-7.4p1/log.c
 | ||||||
| --- openssh-6.8p1/log.c.log-in-chroot	2015-03-17 06:49:20.000000000 +0100
 | --- openssh-7.4p1/log.c.log-in-chroot	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-6.8p1/log.c	2015-03-18 12:59:29.694022313 +0100
 | +++ openssh-7.4p1/log.c	2016-12-23 15:14:33.330168088 +0100
 | ||||||
| @@ -241,6 +241,11 @@ debug3(const char *fmt,...)
 | @@ -250,6 +250,11 @@ debug3(const char *fmt,...)
 | ||||||
|  void |  void | ||||||
|  log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr) |  log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr) | ||||||
|  { |  { | ||||||
| @ -13,7 +13,7 @@ diff -up openssh-6.8p1/log.c.log-in-chroot openssh-6.8p1/log.c | |||||||
|  #if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) |  #if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) | ||||||
|  	struct syslog_data sdata = SYSLOG_DATA_INIT; |  	struct syslog_data sdata = SYSLOG_DATA_INIT; | ||||||
|  #endif |  #endif | ||||||
| @@ -264,8 +269,10 @@ log_init(char *av0, LogLevel level, Sysl
 | @@ -273,8 +278,10 @@ log_init(char *av0, LogLevel level, Sysl
 | ||||||
|  		exit(1); |  		exit(1); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @ -26,9 +26,9 @@ diff -up openssh-6.8p1/log.c.log-in-chroot openssh-6.8p1/log.c | |||||||
|   |   | ||||||
|  	log_on_stderr = on_stderr; |  	log_on_stderr = on_stderr; | ||||||
|  	if (on_stderr) |  	if (on_stderr) | ||||||
| diff -up openssh-6.8p1/log.h.log-in-chroot openssh-6.8p1/log.h
 | diff -up openssh-7.4p1/log.h.log-in-chroot openssh-7.4p1/log.h
 | ||||||
| --- openssh-6.8p1/log.h.log-in-chroot	2015-03-17 06:49:20.000000000 +0100
 | --- openssh-7.4p1/log.h.log-in-chroot	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-6.8p1/log.h	2015-03-18 12:59:29.694022313 +0100
 | +++ openssh-7.4p1/log.h	2016-12-23 15:14:33.330168088 +0100
 | ||||||
| @@ -49,6 +49,7 @@ typedef enum {
 | @@ -49,6 +49,7 @@ typedef enum {
 | ||||||
|  typedef void (log_handler_fn)(LogLevel, const char *, void *); |  typedef void (log_handler_fn)(LogLevel, const char *, void *); | ||||||
|   |   | ||||||
| @ -37,10 +37,10 @@ diff -up openssh-6.8p1/log.h.log-in-chroot openssh-6.8p1/log.h | |||||||
|  void     log_change_level(LogLevel); |  void     log_change_level(LogLevel); | ||||||
|  int      log_is_on_stderr(void); |  int      log_is_on_stderr(void); | ||||||
|  void     log_redirect_stderr_to(const char *); |  void     log_redirect_stderr_to(const char *); | ||||||
| diff -up openssh-6.8p1/monitor.c.log-in-chroot openssh-6.8p1/monitor.c
 | diff -up openssh-7.4p1/monitor.c.log-in-chroot openssh-7.4p1/monitor.c
 | ||||||
| --- openssh-6.8p1/monitor.c.log-in-chroot	2015-03-18 12:59:29.669022374 +0100
 | --- openssh-7.4p1/monitor.c.log-in-chroot	2016-12-23 15:14:33.311168085 +0100
 | ||||||
| +++ openssh-6.8p1/monitor.c	2015-03-18 13:01:52.894671198 +0100
 | +++ openssh-7.4p1/monitor.c	2016-12-23 15:16:42.154193100 +0100
 | ||||||
| @@ -357,6 +357,8 @@ monitor_child_preauth(Authctxt *_authctx
 | @@ -307,6 +307,8 @@ monitor_child_preauth(Authctxt *_authctx
 | ||||||
|  	close(pmonitor->m_log_sendfd); |  	close(pmonitor->m_log_sendfd); | ||||||
|  	pmonitor->m_log_sendfd = pmonitor->m_recvfd = -1; |  	pmonitor->m_log_sendfd = pmonitor->m_recvfd = -1; | ||||||
|   |   | ||||||
| @ -49,7 +49,7 @@ diff -up openssh-6.8p1/monitor.c.log-in-chroot openssh-6.8p1/monitor.c | |||||||
|  	authctxt = _authctxt; |  	authctxt = _authctxt; | ||||||
|  	memset(authctxt, 0, sizeof(*authctxt)); |  	memset(authctxt, 0, sizeof(*authctxt)); | ||||||
|   |   | ||||||
| @@ -465,6 +467,8 @@ monitor_child_postauth(struct monitor *p
 | @@ -405,6 +407,8 @@ monitor_child_postauth(struct monitor *p
 | ||||||
|  	close(pmonitor->m_recvfd); |  	close(pmonitor->m_recvfd); | ||||||
|  	pmonitor->m_recvfd = -1; |  	pmonitor->m_recvfd = -1; | ||||||
|   |   | ||||||
| @ -58,7 +58,7 @@ diff -up openssh-6.8p1/monitor.c.log-in-chroot openssh-6.8p1/monitor.c | |||||||
|  	monitor_set_child_handler(pmonitor->m_pid); |  	monitor_set_child_handler(pmonitor->m_pid); | ||||||
|  	signal(SIGHUP, &monitor_child_handler); |  	signal(SIGHUP, &monitor_child_handler); | ||||||
|  	signal(SIGTERM, &monitor_child_handler); |  	signal(SIGTERM, &monitor_child_handler); | ||||||
| @@ -566,7 +570,7 @@ monitor_read_log(struct monitor *pmonito
 | @@ -472,7 +476,7 @@ monitor_read_log(struct monitor *pmonito
 | ||||||
|  	if (log_level_name(level) == NULL) |  	if (log_level_name(level) == NULL) | ||||||
|  		fatal("%s: invalid log level %u (corrupted message?)", |  		fatal("%s: invalid log level %u (corrupted message?)", | ||||||
|  		    __func__, level); |  		    __func__, level); | ||||||
| @ -67,9 +67,9 @@ diff -up openssh-6.8p1/monitor.c.log-in-chroot openssh-6.8p1/monitor.c | |||||||
|   |   | ||||||
|  	buffer_free(&logmsg); |  	buffer_free(&logmsg); | ||||||
|  	free(msg); |  	free(msg); | ||||||
| @@ -1998,13 +2002,28 @@ monitor_init(void)
 | @@ -1719,13 +1723,28 @@ monitor_init(void)
 | ||||||
|  		    (ssh_packet_comp_free_func *)mm_zfree); |  	mon = xcalloc(1, sizeof(*mon)); | ||||||
|  	} |  	monitor_openfds(mon, 1); | ||||||
|   |   | ||||||
| +	mon->m_state = "";
 | +	mon->m_state = "";
 | ||||||
| +
 | +
 | ||||||
| @ -98,11 +98,11 @@ diff -up openssh-6.8p1/monitor.c.log-in-chroot openssh-6.8p1/monitor.c | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  #ifdef GSSAPI |  #ifdef GSSAPI | ||||||
| diff -up openssh-6.8p1/monitor.h.log-in-chroot openssh-6.8p1/monitor.h
 | diff -up openssh-7.4p1/monitor.h.log-in-chroot openssh-7.4p1/monitor.h
 | ||||||
| --- openssh-6.8p1/monitor.h.log-in-chroot	2015-03-18 12:59:29.695022310 +0100
 | --- openssh-7.4p1/monitor.h.log-in-chroot	2016-12-23 15:14:33.330168088 +0100
 | ||||||
| +++ openssh-6.8p1/monitor.h	2015-03-18 13:02:56.926514197 +0100
 | +++ openssh-7.4p1/monitor.h	2016-12-23 15:16:28.372190424 +0100
 | ||||||
| @@ -83,10 +83,11 @@ struct monitor {
 | @@ -83,10 +83,11 @@ struct monitor {
 | ||||||
|  	struct mm_master	*m_zlib; |  	int			 m_log_sendfd; | ||||||
|  	struct kex		**m_pkex; |  	struct kex		**m_pkex; | ||||||
|  	pid_t			 m_pid; |  	pid_t			 m_pid; | ||||||
| +	char		*m_state;
 | +	char		*m_state;
 | ||||||
| @ -111,13 +111,13 @@ diff -up openssh-6.8p1/monitor.h.log-in-chroot openssh-6.8p1/monitor.h | |||||||
|  struct monitor *monitor_init(void); |  struct monitor *monitor_init(void); | ||||||
| -void monitor_reinit(struct monitor *);
 | -void monitor_reinit(struct monitor *);
 | ||||||
| +void monitor_reinit(struct monitor *, const char *);
 | +void monitor_reinit(struct monitor *, const char *);
 | ||||||
|  void monitor_sync(struct monitor *); |  | ||||||
|   |   | ||||||
|  struct Authctxt; |  struct Authctxt; | ||||||
| diff -up openssh-6.8p1/session.c.log-in-chroot openssh-6.8p1/session.c
 |  void monitor_child_preauth(struct Authctxt *, struct monitor *); | ||||||
| --- openssh-6.8p1/session.c.log-in-chroot	2015-03-18 12:59:29.675022359 +0100
 | diff -up openssh-7.4p1/session.c.log-in-chroot openssh-7.4p1/session.c
 | ||||||
| +++ openssh-6.8p1/session.c	2015-03-18 12:59:29.696022308 +0100
 | --- openssh-7.4p1/session.c.log-in-chroot	2016-12-23 15:14:33.319168086 +0100
 | ||||||
| @@ -161,6 +161,7 @@ login_cap_t *lc;
 | +++ openssh-7.4p1/session.c	2016-12-23 15:18:18.742211853 +0100
 | ||||||
|  | @@ -160,6 +160,7 @@ login_cap_t *lc;
 | ||||||
|   |   | ||||||
|  static int is_child = 0; |  static int is_child = 0; | ||||||
|  static int in_chroot = 0; |  static int in_chroot = 0; | ||||||
| @ -125,7 +125,7 @@ diff -up openssh-6.8p1/session.c.log-in-chroot openssh-6.8p1/session.c | |||||||
|   |   | ||||||
|  /* Name and directory of socket for authentication agent forwarding. */ |  /* Name and directory of socket for authentication agent forwarding. */ | ||||||
|  static char *auth_sock_name = NULL; |  static char *auth_sock_name = NULL; | ||||||
| @@ -506,8 +508,8 @@ do_exec_no_pty(Session *s, const char *c
 | @@ -365,8 +366,8 @@ do_exec_no_pty(Session *s, const char *c
 | ||||||
|  		is_child = 1; |  		is_child = 1; | ||||||
|   |   | ||||||
|  		/* Child.  Reinitialize the log since the pid has changed. */ |  		/* Child.  Reinitialize the log since the pid has changed. */ | ||||||
| @ -136,7 +136,7 @@ diff -up openssh-6.8p1/session.c.log-in-chroot openssh-6.8p1/session.c | |||||||
|   |   | ||||||
|  		/* |  		/* | ||||||
|  		 * Create a new session and process group since the 4.4BSD |  		 * Create a new session and process group since the 4.4BSD | ||||||
| @@ -675,8 +677,8 @@ do_exec_pty(Session *s, const char *comm
 | @@ -523,8 +524,8 @@ do_exec_pty(Session *s, const char *comm
 | ||||||
|  		close(ptymaster); |  		close(ptymaster); | ||||||
|   |   | ||||||
|  		/* Child.  Reinitialize the log because the pid has changed. */ |  		/* Child.  Reinitialize the log because the pid has changed. */ | ||||||
| @ -147,7 +147,7 @@ diff -up openssh-6.8p1/session.c.log-in-chroot openssh-6.8p1/session.c | |||||||
|  		/* Close the master side of the pseudo tty. */ |  		/* Close the master side of the pseudo tty. */ | ||||||
|  		close(ptyfd); |  		close(ptyfd); | ||||||
|   |   | ||||||
| @@ -780,6 +782,7 @@ do_exec(Session *s, const char *command)
 | @@ -619,6 +620,7 @@ do_exec(Session *s, const char *command)
 | ||||||
|  	int ret; |  	int ret; | ||||||
|  	const char *forced = NULL, *tty = NULL; |  	const char *forced = NULL, *tty = NULL; | ||||||
|  	char session_type[1024]; |  	char session_type[1024]; | ||||||
| @ -155,7 +155,7 @@ diff -up openssh-6.8p1/session.c.log-in-chroot openssh-6.8p1/session.c | |||||||
|   |   | ||||||
|  	if (options.adm_forced_command) { |  	if (options.adm_forced_command) { | ||||||
|  		original_command = command; |  		original_command = command; | ||||||
| @@ -837,6 +840,10 @@ do_exec(Session *s, const char *command)
 | @@ -676,6 +678,10 @@ do_exec(Session *s, const char *command)
 | ||||||
|  			tty += 5; |  			tty += 5; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @ -166,7 +166,7 @@ diff -up openssh-6.8p1/session.c.log-in-chroot openssh-6.8p1/session.c | |||||||
|  	verbose("Starting session: %s%s%s for %s from %.200s port %d id %d", |  	verbose("Starting session: %s%s%s for %s from %.200s port %d id %d", | ||||||
|  	    session_type, |  	    session_type, | ||||||
|  	    tty == NULL ? "" : " on ", |  	    tty == NULL ? "" : " on ", | ||||||
| @@ -1678,14 +1685,6 @@ child_close_fds(void)
 | @@ -1486,14 +1492,6 @@ child_close_fds(void)
 | ||||||
|  	 * descriptors left by system functions.  They will be closed later. |  	 * descriptors left by system functions.  They will be closed later. | ||||||
|  	 */ |  	 */ | ||||||
|  	endpwent(); |  	endpwent(); | ||||||
| @ -181,16 +181,16 @@ diff -up openssh-6.8p1/session.c.log-in-chroot openssh-6.8p1/session.c | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  /* |  /* | ||||||
| @@ -1831,8 +1830,6 @@ do_child(Session *s, const char *command
 | @@ -1629,8 +1627,6 @@ do_child(Session *s, const char *command
 | ||||||
|  			exit(1); |  			exit(1); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| -	closefrom(STDERR_FILENO + 1);
 | -	closefrom(STDERR_FILENO + 1);
 | ||||||
| -
 | -
 | ||||||
|  	if (!options.use_login) |  | ||||||
|  	do_rc_files(s, shell); |  	do_rc_files(s, shell); | ||||||
|   |   | ||||||
| @@ -1856,9 +1853,17 @@ do_child(Session *s, const char *command
 |  	/* restore SIGPIPE for child */ | ||||||
|  | @@ -1653,9 +1649,17 @@ do_child(Session *s, const char *command
 | ||||||
|  		argv[i] = NULL; |  		argv[i] = NULL; | ||||||
|  		optind = optreset = 1; |  		optind = optreset = 1; | ||||||
|  		__progname = argv[0]; |  		__progname = argv[0]; | ||||||
| @ -208,21 +208,21 @@ diff -up openssh-6.8p1/session.c.log-in-chroot openssh-6.8p1/session.c | |||||||
| +
 | +
 | ||||||
|  	fflush(NULL); |  	fflush(NULL); | ||||||
|   |   | ||||||
|  	if (options.use_login) { |  	/* Get the last component of the shell name. */ | ||||||
| diff -up openssh-6.8p1/sftp-server-main.c.log-in-chroot openssh-6.8p1/sftp-server-main.c
 | diff -up openssh-7.4p1/sftp.h.log-in-chroot openssh-7.4p1/sftp.h
 | ||||||
| --- openssh-6.8p1/sftp-server-main.c.log-in-chroot	2015-03-17 06:49:20.000000000 +0100
 | --- openssh-7.4p1/sftp.h.log-in-chroot	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-6.8p1/sftp-server-main.c	2015-03-18 12:59:29.696022308 +0100
 | +++ openssh-7.4p1/sftp.h	2016-12-23 15:14:33.331168088 +0100
 | ||||||
| @@ -47,5 +47,5 @@ main(int argc, char **argv)
 | @@ -97,5 +97,5 @@
 | ||||||
|  		return 1; |  | ||||||
|  	} |  | ||||||
|   |   | ||||||
| -	return (sftp_server_main(argc, argv, user_pw));
 |  struct passwd; | ||||||
| +	return (sftp_server_main(argc, argv, user_pw, 0));
 |   | ||||||
|  } | -int	sftp_server_main(int, char **, struct passwd *);
 | ||||||
| diff -up openssh-6.8p1/sftp-server.c.log-in-chroot openssh-6.8p1/sftp-server.c
 | +int	sftp_server_main(int, char **, struct passwd *, int);
 | ||||||
| --- openssh-6.8p1/sftp-server.c.log-in-chroot	2015-03-17 06:49:20.000000000 +0100
 |  void	sftp_server_cleanup_exit(int) __attribute__((noreturn)); | ||||||
| +++ openssh-6.8p1/sftp-server.c	2015-03-18 13:03:52.510377911 +0100
 | diff -up openssh-7.4p1/sftp-server.c.log-in-chroot openssh-7.4p1/sftp-server.c
 | ||||||
| @@ -1502,7 +1502,7 @@ sftp_server_usage(void)
 | --- openssh-7.4p1/sftp-server.c.log-in-chroot	2016-12-19 05:59:41.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/sftp-server.c	2016-12-23 15:14:33.331168088 +0100
 | ||||||
|  | @@ -1497,7 +1497,7 @@ sftp_server_usage(void)
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  int |  int | ||||||
| @ -231,7 +231,7 @@ diff -up openssh-6.8p1/sftp-server.c.log-in-chroot openssh-6.8p1/sftp-server.c | |||||||
|  { |  { | ||||||
|  	fd_set *rset, *wset; |  	fd_set *rset, *wset; | ||||||
|  	int i, r, in, out, max, ch, skipargs = 0, log_stderr = 0; |  	int i, r, in, out, max, ch, skipargs = 0, log_stderr = 0; | ||||||
| @@ -1515,7 +1515,7 @@ sftp_server_main(int argc, char **argv,
 | @@ -1511,7 +1511,7 @@ sftp_server_main(int argc, char **argv,
 | ||||||
|   |   | ||||||
|  	ssh_malloc_init();	/* must be called before any mallocs */ |  	ssh_malloc_init();	/* must be called before any mallocs */ | ||||||
|  	__progname = ssh_get_progname(argv[0]); |  	__progname = ssh_get_progname(argv[0]); | ||||||
| @ -240,7 +240,7 @@ diff -up openssh-6.8p1/sftp-server.c.log-in-chroot openssh-6.8p1/sftp-server.c | |||||||
|   |   | ||||||
|  	pw = pwcopy(user_pw); |  	pw = pwcopy(user_pw); | ||||||
|   |   | ||||||
| @@ -1586,7 +1586,7 @@ sftp_server_main(int argc, char **argv,
 | @@ -1582,7 +1582,7 @@ sftp_server_main(int argc, char **argv,
 | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @ -249,20 +249,20 @@ diff -up openssh-6.8p1/sftp-server.c.log-in-chroot openssh-6.8p1/sftp-server.c | |||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
|  	 * On platforms where we can, avoid making /proc/self/{mem,maps} |  	 * On platforms where we can, avoid making /proc/self/{mem,maps} | ||||||
| diff -up openssh-6.8p1/sftp.h.log-in-chroot openssh-6.8p1/sftp.h
 | diff -up openssh-7.4p1/sftp-server-main.c.log-in-chroot openssh-7.4p1/sftp-server-main.c
 | ||||||
| --- openssh-6.8p1/sftp.h.log-in-chroot	2015-03-17 06:49:20.000000000 +0100
 | --- openssh-7.4p1/sftp-server-main.c.log-in-chroot	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-6.8p1/sftp.h	2015-03-18 12:59:29.696022308 +0100
 | +++ openssh-7.4p1/sftp-server-main.c	2016-12-23 15:14:33.331168088 +0100
 | ||||||
| @@ -97,5 +97,5 @@
 | @@ -49,5 +49,5 @@ main(int argc, char **argv)
 | ||||||
|  |  		return 1; | ||||||
|  |  	} | ||||||
|   |   | ||||||
|  struct passwd; | -	return (sftp_server_main(argc, argv, user_pw));
 | ||||||
|   | +	return (sftp_server_main(argc, argv, user_pw, 0));
 | ||||||
| -int	sftp_server_main(int, char **, struct passwd *);
 |  } | ||||||
| +int	sftp_server_main(int, char **, struct passwd *, int);
 | diff -up openssh-7.4p1/sshd.c.log-in-chroot openssh-7.4p1/sshd.c
 | ||||||
|  void	sftp_server_cleanup_exit(int) __attribute__((noreturn)); | --- openssh-7.4p1/sshd.c.log-in-chroot	2016-12-23 15:14:33.328168088 +0100
 | ||||||
| diff -up openssh-6.8p1/sshd.c.log-in-chroot openssh-6.8p1/sshd.c
 | +++ openssh-7.4p1/sshd.c	2016-12-23 15:14:33.332168088 +0100
 | ||||||
| --- openssh-6.8p1/sshd.c.log-in-chroot	2015-03-18 12:59:29.691022320 +0100
 | @@ -650,7 +650,7 @@ privsep_postauth(Authctxt *authctxt)
 | ||||||
| +++ openssh-6.8p1/sshd.c	2015-03-18 12:59:29.697022305 +0100
 |  | ||||||
| @@ -744,7 +744,7 @@ privsep_postauth(Authctxt *authctxt)
 |  | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	/* New socket pair */ |  	/* New socket pair */ | ||||||
| @ -271,7 +271,7 @@ diff -up openssh-6.8p1/sshd.c.log-in-chroot openssh-6.8p1/sshd.c | |||||||
|   |   | ||||||
|  	pmonitor->m_pid = fork(); |  	pmonitor->m_pid = fork(); | ||||||
|  	if (pmonitor->m_pid == -1) |  	if (pmonitor->m_pid == -1) | ||||||
| @@ -762,6 +762,11 @@ privsep_postauth(Authctxt *authctxt)
 | @@ -668,6 +668,11 @@ privsep_postauth(Authctxt *authctxt)
 | ||||||
|   |   | ||||||
|  	close(pmonitor->m_sendfd); |  	close(pmonitor->m_sendfd); | ||||||
|  	pmonitor->m_sendfd = -1; |  	pmonitor->m_sendfd = -1; | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| diff -up openssh-7.0p1/gss-serv-krb5.c.GSSAPIEnablek5users openssh-7.0p1/gss-serv-krb5.c
 | diff -up openssh-7.4p1/gss-serv-krb5.c.GSSAPIEnablek5users openssh-7.4p1/gss-serv-krb5.c
 | ||||||
| --- openssh-7.0p1/gss-serv-krb5.c.GSSAPIEnablek5users	2015-08-12 11:27:44.022407951 +0200
 | --- openssh-7.4p1/gss-serv-krb5.c.GSSAPIEnablek5users	2016-12-23 15:18:40.615216100 +0100
 | ||||||
| +++ openssh-7.0p1/gss-serv-krb5.c	2015-08-12 11:27:44.047407912 +0200
 | +++ openssh-7.4p1/gss-serv-krb5.c	2016-12-23 15:18:40.628216102 +0100
 | ||||||
| @@ -260,7 +260,6 @@ ssh_gssapi_krb5_cmdok(krb5_principal pri
 | @@ -279,7 +279,6 @@ ssh_gssapi_krb5_cmdok(krb5_principal pri
 | ||||||
|  	FILE *fp; |  	FILE *fp; | ||||||
|  	char file[MAXPATHLEN]; |  	char file[MAXPATHLEN]; | ||||||
|  	char line[BUFSIZ] = ""; |  	char line[BUFSIZ] = ""; | ||||||
| @ -9,7 +9,7 @@ diff -up openssh-7.0p1/gss-serv-krb5.c.GSSAPIEnablek5users openssh-7.0p1/gss-ser | |||||||
|  	struct stat st; |  	struct stat st; | ||||||
|  	struct passwd *pw = the_authctxt->pw; |  	struct passwd *pw = the_authctxt->pw; | ||||||
|  	int found_principal = 0; |  	int found_principal = 0; | ||||||
| @@ -269,7 +268,7 @@ ssh_gssapi_krb5_cmdok(krb5_principal pri
 | @@ -288,7 +287,7 @@ ssh_gssapi_krb5_cmdok(krb5_principal pri
 | ||||||
|   |   | ||||||
|  	snprintf(file, sizeof(file), "%s/.k5users", pw->pw_dir); |  	snprintf(file, sizeof(file), "%s/.k5users", pw->pw_dir); | ||||||
|  	/* If both .k5login and .k5users DNE, self-login is ok. */ |  	/* If both .k5login and .k5users DNE, self-login is ok. */ | ||||||
| @ -18,27 +18,27 @@ diff -up openssh-7.0p1/gss-serv-krb5.c.GSSAPIEnablek5users openssh-7.0p1/gss-ser | |||||||
|                  return ssh_krb5_kuserok(krb_context, principal, luser, |                  return ssh_krb5_kuserok(krb_context, principal, luser, | ||||||
|                                          k5login_exists); |                                          k5login_exists); | ||||||
|  	} |  	} | ||||||
| diff -up openssh-7.0p1/servconf.c.GSSAPIEnablek5users openssh-7.0p1/servconf.c
 | diff -up openssh-7.4p1/servconf.c.GSSAPIEnablek5users openssh-7.4p1/servconf.c
 | ||||||
| --- openssh-7.0p1/servconf.c.GSSAPIEnablek5users	2015-08-12 11:27:44.036407930 +0200
 | --- openssh-7.4p1/servconf.c.GSSAPIEnablek5users	2016-12-23 15:18:40.615216100 +0100
 | ||||||
| +++ openssh-7.0p1/servconf.c	2015-08-12 11:28:49.087306430 +0200
 | +++ openssh-7.4p1/servconf.c	2016-12-23 15:35:36.354401156 +0100
 | ||||||
| @@ -173,6 +173,7 @@ initialize_server_options(ServerOptions
 | @@ -168,6 +168,7 @@ initialize_server_options(ServerOptions
 | ||||||
|  	options->version_addendum = NULL; |  | ||||||
|  	options->fingerprint_hash = -1; |  	options->fingerprint_hash = -1; | ||||||
|  |  	options->disable_forwarding = -1; | ||||||
|  	options->use_kuserok = -1; |  	options->use_kuserok = -1; | ||||||
| +	options->enable_k5users = -1;
 | +	options->enable_k5users = -1;
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  /* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */ |  /* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */ | ||||||
| @@ -351,6 +352,8 @@ fill_default_server_options(ServerOption
 | @@ -345,6 +346,8 @@ fill_default_server_options(ServerOption
 | ||||||
|  		options->fwd_opts.streamlocal_bind_unlink = 0; |  		options->disable_forwarding = 0; | ||||||
|  	if (options->fingerprint_hash == -1) |  | ||||||
|  		options->fingerprint_hash = SSH_FP_HASH_DEFAULT; |  | ||||||
| +	if (options->enable_k5users == -1)
 |  | ||||||
| +		options->enable_k5users = 0;
 |  | ||||||
|  	if (options->use_kuserok == -1) |  	if (options->use_kuserok == -1) | ||||||
|  		options->use_kuserok = 1; |  		options->use_kuserok = 1; | ||||||
|  | +	if (options->enable_k5users == -1)
 | ||||||
|  | +		options->enable_k5users = 0;
 | ||||||
|   |   | ||||||
| @@ -423,7 +426,7 @@ typedef enum {
 |  	assemble_algorithms(options); | ||||||
|  |   | ||||||
|  | @@ -418,7 +421,7 @@ typedef enum {
 | ||||||
|  	sHostbasedUsesNameFromPacketOnly, sHostbasedAcceptedKeyTypes, |  	sHostbasedUsesNameFromPacketOnly, sHostbasedAcceptedKeyTypes, | ||||||
|  	sHostKeyAlgorithms, |  	sHostKeyAlgorithms, | ||||||
|  	sClientAliveInterval, sClientAliveCountMax, sAuthorizedKeysFile, |  	sClientAliveInterval, sClientAliveCountMax, sAuthorizedKeysFile, | ||||||
| @ -47,7 +47,7 @@ diff -up openssh-7.0p1/servconf.c.GSSAPIEnablek5users openssh-7.0p1/servconf.c | |||||||
|  	sGssKeyEx, sGssStoreRekey, sAcceptEnv, sPermitTunnel, |  	sGssKeyEx, sGssStoreRekey, sAcceptEnv, sPermitTunnel, | ||||||
|  	sMatch, sPermitOpen, sForceCommand, sChrootDirectory, |  	sMatch, sPermitOpen, sForceCommand, sChrootDirectory, | ||||||
|  	sUsePrivilegeSeparation, sAllowAgentForwarding, |  	sUsePrivilegeSeparation, sAllowAgentForwarding, | ||||||
| @@ -502,12 +505,14 @@ static struct {
 | @@ -497,12 +500,14 @@ static struct {
 | ||||||
|  	{ "gssapistrictacceptorcheck", sGssStrictAcceptor, SSHCFG_GLOBAL }, |  	{ "gssapistrictacceptorcheck", sGssStrictAcceptor, SSHCFG_GLOBAL }, | ||||||
|  	{ "gssapikeyexchange", sGssKeyEx, SSHCFG_GLOBAL }, |  	{ "gssapikeyexchange", sGssKeyEx, SSHCFG_GLOBAL }, | ||||||
|  	{ "gssapistorecredentialsonrekey", sGssStoreRekey, SSHCFG_GLOBAL }, |  	{ "gssapistorecredentialsonrekey", sGssStoreRekey, SSHCFG_GLOBAL }, | ||||||
| @ -62,7 +62,7 @@ diff -up openssh-7.0p1/servconf.c.GSSAPIEnablek5users openssh-7.0p1/servconf.c | |||||||
|  #endif |  #endif | ||||||
|  	{ "gssusesessionccache", sUnsupported, SSHCFG_GLOBAL }, |  	{ "gssusesessionccache", sUnsupported, SSHCFG_GLOBAL }, | ||||||
|  	{ "gssapiusesessioncredcache", sUnsupported, SSHCFG_GLOBAL }, |  	{ "gssapiusesessioncredcache", sUnsupported, SSHCFG_GLOBAL }, | ||||||
| @@ -1680,6 +1685,10 @@ process_server_config_line(ServerOptions
 | @@ -1653,6 +1658,10 @@ process_server_config_line(ServerOptions
 | ||||||
|  		intptr = &options->use_kuserok; |  		intptr = &options->use_kuserok; | ||||||
|  		goto parse_flag; |  		goto parse_flag; | ||||||
|   |   | ||||||
| @ -73,7 +73,7 @@ diff -up openssh-7.0p1/servconf.c.GSSAPIEnablek5users openssh-7.0p1/servconf.c | |||||||
|  	case sPermitOpen: |  	case sPermitOpen: | ||||||
|  		arg = strdelim(&cp); |  		arg = strdelim(&cp); | ||||||
|  		if (!arg || *arg == '\0') |  		if (!arg || *arg == '\0') | ||||||
| @@ -2035,6 +2044,7 @@ copy_set_server_options(ServerOptions *d
 | @@ -2026,6 +2035,7 @@ copy_set_server_options(ServerOptions *d
 | ||||||
|  	M_CP_INTOPT(ip_qos_interactive); |  	M_CP_INTOPT(ip_qos_interactive); | ||||||
|  	M_CP_INTOPT(ip_qos_bulk); |  	M_CP_INTOPT(ip_qos_bulk); | ||||||
|  	M_CP_INTOPT(use_kuserok); |  	M_CP_INTOPT(use_kuserok); | ||||||
| @ -81,7 +81,7 @@ diff -up openssh-7.0p1/servconf.c.GSSAPIEnablek5users openssh-7.0p1/servconf.c | |||||||
|  	M_CP_INTOPT(rekey_limit); |  	M_CP_INTOPT(rekey_limit); | ||||||
|  	M_CP_INTOPT(rekey_interval); |  	M_CP_INTOPT(rekey_interval); | ||||||
|   |   | ||||||
| @@ -2317,6 +2327,7 @@ dump_config(ServerOptions *o)
 | @@ -2320,6 +2330,7 @@ dump_config(ServerOptions *o)
 | ||||||
|  	dump_cfg_fmtint(sUsePrivilegeSeparation, use_privsep); |  	dump_cfg_fmtint(sUsePrivilegeSeparation, use_privsep); | ||||||
|  	dump_cfg_fmtint(sFingerprintHash, o->fingerprint_hash); |  	dump_cfg_fmtint(sFingerprintHash, o->fingerprint_hash); | ||||||
|  	dump_cfg_fmtint(sKerberosUseKuserok, o->use_kuserok); |  	dump_cfg_fmtint(sKerberosUseKuserok, o->use_kuserok); | ||||||
| @ -89,10 +89,10 @@ diff -up openssh-7.0p1/servconf.c.GSSAPIEnablek5users openssh-7.0p1/servconf.c | |||||||
|   |   | ||||||
|  	/* string arguments */ |  	/* string arguments */ | ||||||
|  	dump_cfg_string(sPidFile, o->pid_file); |  	dump_cfg_string(sPidFile, o->pid_file); | ||||||
| diff -up openssh-7.0p1/servconf.h.GSSAPIEnablek5users openssh-7.0p1/servconf.h
 | diff -up openssh-7.4p1/servconf.h.GSSAPIEnablek5users openssh-7.4p1/servconf.h
 | ||||||
| --- openssh-7.0p1/servconf.h.GSSAPIEnablek5users	2015-08-12 11:27:44.022407951 +0200
 | --- openssh-7.4p1/servconf.h.GSSAPIEnablek5users	2016-12-23 15:18:40.616216100 +0100
 | ||||||
| +++ openssh-7.0p1/servconf.h	2015-08-12 11:27:44.048407911 +0200
 | +++ openssh-7.4p1/servconf.h	2016-12-23 15:18:40.629216102 +0100
 | ||||||
| @@ -180,7 +180,8 @@ typedef struct {
 | @@ -174,7 +174,8 @@ typedef struct {
 | ||||||
|   |   | ||||||
|  	int	num_permitted_opens; |  	int	num_permitted_opens; | ||||||
|   |   | ||||||
| @ -102,26 +102,26 @@ diff -up openssh-7.0p1/servconf.h.GSSAPIEnablek5users openssh-7.0p1/servconf.h | |||||||
|  	char   *chroot_directory; |  	char   *chroot_directory; | ||||||
|  	char   *revoked_keys_file; |  	char   *revoked_keys_file; | ||||||
|  	char   *trusted_user_ca_keys; |  	char   *trusted_user_ca_keys; | ||||||
| diff -up openssh-7.0p1/sshd_config.5.GSSAPIEnablek5users openssh-7.0p1/sshd_config.5
 | diff -up openssh-7.4p1/sshd_config.5.GSSAPIEnablek5users openssh-7.4p1/sshd_config.5
 | ||||||
| --- openssh-7.0p1/sshd_config.5.GSSAPIEnablek5users	2015-08-12 11:27:44.023407950 +0200
 | --- openssh-7.4p1/sshd_config.5.GSSAPIEnablek5users	2016-12-23 15:18:40.630216103 +0100
 | ||||||
| +++ openssh-7.0p1/sshd_config.5	2015-08-12 11:27:44.048407911 +0200
 | +++ openssh-7.4p1/sshd_config.5	2016-12-23 15:36:21.607408435 +0100
 | ||||||
| @@ -633,6 +633,12 @@ on logout.
 | @@ -628,6 +628,12 @@ Specifies whether to automatically destr
 | ||||||
|  on logout. |  on logout. | ||||||
|  The default is |  The default is | ||||||
|  .Dq yes . |  .Cm yes . | ||||||
| +.It Cm GSSAPIEnablek5users
 | +.It Cm GSSAPIEnablek5users
 | ||||||
| +Specifies whether to look at .k5users file for GSSAPI authentication
 | +Specifies whether to look at .k5users file for GSSAPI authentication
 | ||||||
| +access control. Further details are described in
 | +access control. Further details are described in
 | ||||||
| +.Xr ksu 1 .
 | +.Xr ksu 1 .
 | ||||||
| +The default is
 | +The default is
 | ||||||
| +.Dq no .
 | +.Cm no .
 | ||||||
|  .It Cm GSSAPIStrictAcceptorCheck |  .It Cm GSSAPIKeyExchange | ||||||
|  Determines whether to be strict about the identity of the GSSAPI acceptor |  Specifies whether key exchange based on GSSAPI is allowed. GSSAPI key exchange | ||||||
|  a client authenticates against. |  doesn't rely on ssh keys to verify host identity. | ||||||
| diff -up openssh-7.0p1/sshd_config.GSSAPIEnablek5users openssh-7.0p1/sshd_config
 | diff -up openssh-7.4p1/sshd_config.GSSAPIEnablek5users openssh-7.4p1/sshd_config
 | ||||||
| --- openssh-7.0p1/sshd_config.GSSAPIEnablek5users	2015-08-12 11:27:44.023407950 +0200
 | --- openssh-7.4p1/sshd_config.GSSAPIEnablek5users	2016-12-23 15:18:40.616216100 +0100
 | ||||||
| +++ openssh-7.0p1/sshd_config	2015-08-12 11:27:44.048407911 +0200
 | +++ openssh-7.4p1/sshd_config	2016-12-23 15:18:40.631216103 +0100
 | ||||||
| @@ -94,6 +94,7 @@ GSSAPIAuthentication yes
 | @@ -80,6 +80,7 @@ GSSAPIAuthentication yes
 | ||||||
|  GSSAPICleanupCredentials no |  GSSAPICleanupCredentials no | ||||||
|  #GSSAPIStrictAcceptorCheck yes |  #GSSAPIStrictAcceptorCheck yes | ||||||
|  #GSSAPIKeyExchange no |  #GSSAPIKeyExchange no | ||||||
|  | |||||||
| @ -142,7 +142,7 @@ diff -up openssh-6.8p1/ctr-cavstest.c.ctr-cavs openssh-6.8p1/ctr-cavstest.c | |||||||
| +{
 | +{
 | ||||||
| +
 | +
 | ||||||
| +        const struct sshcipher *c;
 | +        const struct sshcipher *c;
 | ||||||
| +        struct sshcipher_ctx cc;
 | +        struct sshcipher_ctx *cc;
 | ||||||
| +        char *algo = "aes128-ctr";
 | +        char *algo = "aes128-ctr";
 | ||||||
| +        char *hexkey = NULL;
 | +        char *hexkey = NULL;
 | ||||||
| +        char *hexiv = "00000000000000000000000000000000";
 | +        char *hexiv = "00000000000000000000000000000000";
 | ||||||
| @ -232,11 +232,11 @@ diff -up openssh-6.8p1/ctr-cavstest.c.ctr-cavs openssh-6.8p1/ctr-cavstest.c | |||||||
| +		return 2;
 | +		return 2;
 | ||||||
| +	}
 | +	}
 | ||||||
| +
 | +
 | ||||||
| +	cipher_crypt(&cc, 0, outdata, data, datalen, 0, 0);
 | +	cipher_crypt(cc, 0, outdata, data, datalen, 0, 0);
 | ||||||
| +
 | +
 | ||||||
| +        free(data);
 | +        free(data);
 | ||||||
| +
 | +
 | ||||||
| +	cipher_cleanup(&cc);
 | +	cipher_free(cc);
 | ||||||
| +
 | +
 | ||||||
| +        for (p = outdata; datalen > 0; ++p, --datalen) {
 | +        for (p = outdata; datalen > 0; ++p, --datalen) {
 | ||||||
| +		printf("%02X", (unsigned char)*p);
 | +		printf("%02X", (unsigned char)*p);
 | ||||||
|  | |||||||
| @ -1,8 +1,7 @@ | |||||||
| diff --git a/entropy.c b/entropy.c
 | diff -up openssh-7.4p1/entropy.c.entropy openssh-7.4p1/entropy.c
 | ||||||
| index 1e9d52a..d24e724 100644
 | --- openssh-7.4p1/entropy.c.entropy	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| --- a/entropy.c
 | +++ openssh-7.4p1/entropy.c	2016-12-23 18:34:27.769753570 +0100
 | ||||||
| +++ b/entropy.c
 | @@ -229,6 +229,9 @@ seed_rng(void)
 | ||||||
| @@ -227,6 +227,9 @@ seed_rng(void)
 |  | ||||||
|  	memset(buf, '\0', sizeof(buf)); |  	memset(buf, '\0', sizeof(buf)); | ||||||
|   |   | ||||||
|  #endif /* OPENSSL_PRNG_ONLY */ |  #endif /* OPENSSL_PRNG_ONLY */ | ||||||
| @ -12,24 +11,31 @@ index 1e9d52a..d24e724 100644 | |||||||
|  	if (RAND_status() != 1) |  	if (RAND_status() != 1) | ||||||
|  		fatal("PRNG is not seeded"); |  		fatal("PRNG is not seeded"); | ||||||
|  } |  } | ||||||
| diff --git a/openbsd-compat/Makefile.in b/openbsd-compat/Makefile.in
 | diff -up openssh-7.4p1/openbsd-compat/Makefile.in.entropy openssh-7.4p1/openbsd-compat/Makefile.in
 | ||||||
| index 843225d..041bbab 100644
 | --- openssh-7.4p1/openbsd-compat/Makefile.in.entropy	2016-12-23 18:34:53.715762155 +0100
 | ||||||
| --- a/openbsd-compat/Makefile.in
 | +++ openssh-7.4p1/openbsd-compat/Makefile.in	2016-12-23 18:35:15.890769493 +0100
 | ||||||
| +++ b/openbsd-compat/Makefile.in
 | @@ -20,7 +20,7 @@ OPENBSD=base64.o basename.o bcrypt_pbkdf
 | ||||||
| @@ -20,7 +20,7 @@ OPENBSD=base64.o basename.o bcrypt_pbkdf.o bindresvport.o blowfish.o daemon.o di
 |  | ||||||
|   |   | ||||||
|  COMPAT=arc4random.o bsd-asprintf.o bsd-closefrom.o bsd-cray.o bsd-cygwin_util.o bsd-getpeereid.o getrrsetbyname-ldns.o bsd-err.o bsd-misc.o bsd-nextstep.o bsd-openpty.o bsd-poll.o bsd-setres_id.o bsd-snprintf.o bsd-statvfs.o bsd-waitpid.o fake-rfc2553.o openssl-compat.o xmmap.o xcrypt.o kludge-fd_set.o |  COMPAT=arc4random.o bsd-asprintf.o bsd-closefrom.o bsd-cray.o bsd-cygwin_util.o bsd-getpeereid.o getrrsetbyname-ldns.o bsd-err.o bsd-misc.o bsd-nextstep.o bsd-openpty.o bsd-poll.o bsd-setres_id.o bsd-snprintf.o bsd-statvfs.o bsd-waitpid.o fake-rfc2553.o openssl-compat.o xcrypt.o kludge-fd_set.o | ||||||
|   |   | ||||||
| -PORTS=port-aix.o port-irix.o port-linux.o port-linux-sshd.o port-solaris.o port-tun.o port-uw.o
 | -PORTS=port-aix.o port-irix.o port-linux.o port-linux-sshd.o port-solaris.o port-tun.o port-uw.o
 | ||||||
| +PORTS=port-aix.o port-irix.o port-linux.o port-linux-sshd.o port-linux-prng.o port-solaris.o port-tun.o port-uw.o
 | +PORTS=port-aix.o port-irix.o port-linux.o port-linux-sshd.o port-linux-prng.o port-solaris.o port-tun.o port-uw.o
 | ||||||
|   |   | ||||||
|  .c.o: |  .c.o: | ||||||
|  	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< |  	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< | ||||||
| diff --git a/openbsd-compat/port-linux-prng.c b/openbsd-compat/port-linux-prng.c
 | diff -up openssh-7.4p1/openbsd-compat/port-linux.h.entropy openssh-7.4p1/openbsd-compat/port-linux.h
 | ||||||
| new file mode 100644 | --- openssh-7.4p1/openbsd-compat/port-linux.h.entropy	2016-12-23 18:34:27.747753563 +0100
 | ||||||
| index 0000000..da84bf2
 | +++ openssh-7.4p1/openbsd-compat/port-linux.h	2016-12-23 18:34:27.769753570 +0100
 | ||||||
| --- /dev/null
 | @@ -34,4 +34,6 @@ void oom_adjust_restore(void);
 | ||||||
| +++ b/openbsd-compat/port-linux-prng.c
 |  void oom_adjust_setup(void); | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | +void linux_seed(void);
 | ||||||
|  | +
 | ||||||
|  |  #endif /* ! _PORT_LINUX_H */ | ||||||
|  | diff -up openssh-7.4p1/openbsd-compat/port-linux-prng.c.entropy openssh-7.4p1/openbsd-compat/port-linux-prng.c
 | ||||||
|  | --- openssh-7.4p1/openbsd-compat/port-linux-prng.c.entropy	2016-12-23 18:34:27.769753570 +0100
 | ||||||
|  | +++ openssh-7.4p1/openbsd-compat/port-linux-prng.c	2016-12-23 18:34:27.769753570 +0100
 | ||||||
| @@ -0,0 +1,59 @@
 | @@ -0,0 +1,59 @@
 | ||||||
| +/* $Id: port-linux.c,v 1.11.4.2 2011/02/04 00:43:08 djm Exp $ */
 | +/* $Id: port-linux.c,v 1.11.4.2 2011/02/04 00:43:08 djm Exp $ */
 | ||||||
| +
 | +
 | ||||||
| @ -90,11 +96,37 @@ index 0000000..da84bf2 | |||||||
| +			fatal ("EOF reading %s", random);
 | +			fatal ("EOF reading %s", random);
 | ||||||
| +	}
 | +	}
 | ||||||
| +}
 | +}
 | ||||||
| diff --git a/ssh-add.0 b/ssh-add.0
 | diff -up openssh-7.4p1/ssh.1.entropy openssh-7.4p1/ssh.1
 | ||||||
| index f16165a..17d22cf 100644
 | --- openssh-7.4p1/ssh.1.entropy	2016-12-23 18:34:27.754753565 +0100
 | ||||||
| --- a/ssh-add.0
 | +++ openssh-7.4p1/ssh.1	2016-12-23 18:34:27.770753571 +0100
 | ||||||
| +++ b/ssh-add.0
 | @@ -1441,6 +1441,23 @@ For more information, see the
 | ||||||
| @@ -82,6 +82,16 @@ ENVIRONMENT
 |  .Cm PermitUserEnvironment | ||||||
|  |  option in | ||||||
|  |  .Xr sshd_config 5 . | ||||||
|  | +.Sh ENVIRONMENT
 | ||||||
|  | +.Bl -tag -width Ds -compact
 | ||||||
|  | +.It Ev SSH_USE_STRONG_RNG
 | ||||||
|  | +The reseeding of the OpenSSL random generator is usually done from
 | ||||||
|  | +.Cm /dev/urandom .
 | ||||||
|  | +If the 
 | ||||||
|  | +.Cm SSH_USE_STRONG_RNG
 | ||||||
|  | +environment variable is set to value other than
 | ||||||
|  | +.Cm 0
 | ||||||
|  | +the OpenSSL random generator is reseeded from
 | ||||||
|  | +.Cm /dev/random .
 | ||||||
|  | +The number of bytes read is defined by the SSH_USE_STRONG_RNG value. 
 | ||||||
|  | +Minimum is 14 bytes.
 | ||||||
|  | +This setting is not recommended on the computers without the hardware
 | ||||||
|  | +random generator because insufficient entropy causes the connection to 
 | ||||||
|  | +be blocked until enough entropy is available.
 | ||||||
|  | +.El
 | ||||||
|  |  .Sh FILES | ||||||
|  |  .Bl -tag -width Ds -compact | ||||||
|  |  .It Pa ~/.rhosts | ||||||
|  | diff -up openssh-7.4p1/ssh-add.0.entropy openssh-7.4p1/ssh-add.0
 | ||||||
|  | --- openssh-7.4p1/ssh-add.0.entropy	2016-12-19 06:21:21.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/ssh-add.0	2016-12-23 18:34:27.770753571 +0100
 | ||||||
|  | @@ -88,6 +88,16 @@ ENVIRONMENT
 | ||||||
|               Identifies the path of a UNIX-domain socket used to communicate |               Identifies the path of a UNIX-domain socket used to communicate | ||||||
|               with the agent. |               with the agent. | ||||||
|   |   | ||||||
| @ -111,11 +143,10 @@ index f16165a..17d22cf 100644 | |||||||
|  FILES |  FILES | ||||||
|       ~/.ssh/identity |       ~/.ssh/identity | ||||||
|               Contains the protocol version 1 RSA authentication identity of |               Contains the protocol version 1 RSA authentication identity of | ||||||
| diff --git a/ssh-add.1 b/ssh-add.1
 | diff -up openssh-7.4p1/ssh-add.1.entropy openssh-7.4p1/ssh-add.1
 | ||||||
| index 04d1840..db883a4 100644
 | --- openssh-7.4p1/ssh-add.1.entropy	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| --- a/ssh-add.1
 | +++ openssh-7.4p1/ssh-add.1	2016-12-23 18:34:27.770753571 +0100
 | ||||||
| +++ b/ssh-add.1
 | @@ -171,6 +171,20 @@ to make this work.)
 | ||||||
| @@ -170,6 +170,20 @@ to make this work.)
 |  | ||||||
|  Identifies the path of a |  Identifies the path of a | ||||||
|  .Ux Ns -domain |  .Ux Ns -domain | ||||||
|  socket used to communicate with the agent. |  socket used to communicate with the agent. | ||||||
| @ -136,11 +167,10 @@ index 04d1840..db883a4 100644 | |||||||
|  .El |  .El | ||||||
|  .Sh FILES |  .Sh FILES | ||||||
|  .Bl -tag -width Ds |  .Bl -tag -width Ds | ||||||
| diff --git a/ssh-agent.1 b/ssh-agent.1
 | diff -up openssh-7.4p1/ssh-agent.1.entropy openssh-7.4p1/ssh-agent.1
 | ||||||
| index d7e791b..7332f0d 100644
 | --- openssh-7.4p1/ssh-agent.1.entropy	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| --- a/ssh-agent.1
 | +++ openssh-7.4p1/ssh-agent.1	2016-12-23 18:34:27.770753571 +0100
 | ||||||
| +++ b/ssh-agent.1
 | @@ -214,6 +214,24 @@ sockets used to contain the connection t
 | ||||||
| @@ -189,6 +189,24 @@ sockets used to contain the connection to the authentication agent.
 |  | ||||||
|  These sockets should only be readable by the owner. |  These sockets should only be readable by the owner. | ||||||
|  The sockets should get automatically removed when the agent exits. |  The sockets should get automatically removed when the agent exits. | ||||||
|  .El |  .El | ||||||
| @ -165,97 +195,10 @@ index d7e791b..7332f0d 100644 | |||||||
|  .Sh SEE ALSO |  .Sh SEE ALSO | ||||||
|  .Xr ssh 1 , |  .Xr ssh 1 , | ||||||
|  .Xr ssh-add 1 , |  .Xr ssh-add 1 , | ||||||
| diff --git a/ssh-keygen.1 b/ssh-keygen.1
 | diff -up openssh-7.4p1/sshd.8.entropy openssh-7.4p1/sshd.8
 | ||||||
| index 276dacc..a09d9b1 100644
 | --- openssh-7.4p1/sshd.8.entropy	2016-12-23 18:34:27.755753566 +0100
 | ||||||
| --- a/ssh-keygen.1
 | +++ openssh-7.4p1/sshd.8	2016-12-23 18:34:27.770753571 +0100
 | ||||||
| +++ b/ssh-keygen.1
 | @@ -920,6 +920,24 @@ concurrently for different ports, this c
 | ||||||
| @@ -841,6 +841,24 @@ Contains Diffie-Hellman groups used for DH-GEX.
 |  | ||||||
|  The file format is described in |  | ||||||
|  .Xr moduli 5 . |  | ||||||
|  .El |  | ||||||
| +.Sh ENVIRONMENT
 |  | ||||||
| +.Bl -tag -width Ds -compact
 |  | ||||||
| +.Pp
 |  | ||||||
| +.It Pa SSH_USE_STRONG_RNG
 |  | ||||||
| +The reseeding of the OpenSSL random generator is usually done from
 |  | ||||||
| +.Cm /dev/urandom .
 |  | ||||||
| +If the 
 |  | ||||||
| +.Cm SSH_USE_STRONG_RNG
 |  | ||||||
| +environment variable is set to value other than
 |  | ||||||
| +.Cm 0
 |  | ||||||
| +the OpenSSL random generator is reseeded from
 |  | ||||||
| +.Cm /dev/random .
 |  | ||||||
| +The number of bytes read is defined by the SSH_USE_STRONG_RNG value. 
 |  | ||||||
| +Minimum is 14 bytes.
 |  | ||||||
| +This setting is not recommended on the computers without the hardware
 |  | ||||||
| +random generator because insufficient entropy causes the connection to 
 |  | ||||||
| +be blocked until enough entropy is available.
 |  | ||||||
| +.El
 |  | ||||||
|  .Sh SEE ALSO |  | ||||||
|  .Xr ssh 1 , |  | ||||||
|  .Xr ssh-add 1 , |  | ||||||
| diff --git a/ssh-keysign.8 b/ssh-keysign.8
 |  | ||||||
| index 69d0829..02d79f8 100644
 |  | ||||||
| --- a/ssh-keysign.8
 |  | ||||||
| +++ b/ssh-keysign.8
 |  | ||||||
| @@ -80,6 +80,24 @@ must be set-uid root if host-based authentication is used.
 |  | ||||||
|  If these files exist they are assumed to contain public certificate |  | ||||||
|  information corresponding with the private keys above. |  | ||||||
|  .El |  | ||||||
| +.Sh ENVIRONMENT
 |  | ||||||
| +.Bl -tag -width Ds -compact
 |  | ||||||
| +.Pp
 |  | ||||||
| +.It Pa SSH_USE_STRONG_RNG
 |  | ||||||
| +The reseeding of the OpenSSL random generator is usually done from
 |  | ||||||
| +.Cm /dev/urandom .
 |  | ||||||
| +If the 
 |  | ||||||
| +.Cm SSH_USE_STRONG_RNG
 |  | ||||||
| +environment variable is set to value other than
 |  | ||||||
| +.Cm 0
 |  | ||||||
| +the OpenSSL random generator is reseeded from
 |  | ||||||
| +.Cm /dev/random .
 |  | ||||||
| +The number of bytes read is defined by the SSH_USE_STRONG_RNG value. 
 |  | ||||||
| +Minimum is 14 bytes.
 |  | ||||||
| +This setting is not recommended on the computers without the hardware
 |  | ||||||
| +random generator because insufficient entropy causes the connection to 
 |  | ||||||
| +be blocked until enough entropy is available.
 |  | ||||||
| +.El
 |  | ||||||
|  .Sh SEE ALSO |  | ||||||
|  .Xr ssh 1 , |  | ||||||
|  .Xr ssh-keygen 1 , |  | ||||||
| diff --git a/ssh.1 b/ssh.1
 |  | ||||||
| index 4a476c2..410a04a 100644
 |  | ||||||
| --- a/ssh.1
 |  | ||||||
| +++ b/ssh.1
 |  | ||||||
| @@ -1299,6 +1299,23 @@ For more information, see the
 |  | ||||||
|  .Cm PermitUserEnvironment |  | ||||||
|  option in |  | ||||||
|  .Xr sshd_config 5 . |  | ||||||
| +.Sh ENVIRONMENT
 |  | ||||||
| +.Bl -tag -width Ds -compact
 |  | ||||||
| +.It Ev SSH_USE_STRONG_RNG
 |  | ||||||
| +The reseeding of the OpenSSL random generator is usually done from
 |  | ||||||
| +.Cm /dev/urandom .
 |  | ||||||
| +If the 
 |  | ||||||
| +.Cm SSH_USE_STRONG_RNG
 |  | ||||||
| +environment variable is set to value other than
 |  | ||||||
| +.Cm 0
 |  | ||||||
| +the OpenSSL random generator is reseeded from
 |  | ||||||
| +.Cm /dev/random .
 |  | ||||||
| +The number of bytes read is defined by the SSH_USE_STRONG_RNG value. 
 |  | ||||||
| +Minimum is 14 bytes.
 |  | ||||||
| +This setting is not recommended on the computers without the hardware
 |  | ||||||
| +random generator because insufficient entropy causes the connection to 
 |  | ||||||
| +be blocked until enough entropy is available.
 |  | ||||||
| +.El
 |  | ||||||
|  .Sh FILES |  | ||||||
|  .Bl -tag -width Ds -compact |  | ||||||
|  .It Pa ~/.rhosts |  | ||||||
| diff --git a/sshd.8 b/sshd.8
 |  | ||||||
| index cb866b5..adcaaf9 100644
 |  | ||||||
| --- a/sshd.8
 |  | ||||||
| +++ b/sshd.8
 |  | ||||||
| @@ -945,6 +945,24 @@ concurrently for different ports, this contains the process ID of the one
 |  | ||||||
|  started last). |  started last). | ||||||
|  The content of this file is not sensitive; it can be world-readable. |  The content of this file is not sensitive; it can be world-readable. | ||||||
|  .El |  .El | ||||||
| @ -280,13 +223,59 @@ index cb866b5..adcaaf9 100644 | |||||||
|  .Sh IPV6 |  .Sh IPV6 | ||||||
|  IPv6 address can be used everywhere where IPv4 address. In all entries must be the IPv6 address enclosed in square brackets. Note: The square brackets are metacharacters for the shell and must be escaped in shell. |  IPv6 address can be used everywhere where IPv4 address. In all entries must be the IPv6 address enclosed in square brackets. Note: The square brackets are metacharacters for the shell and must be escaped in shell. | ||||||
|  .Sh SEE ALSO |  .Sh SEE ALSO | ||||||
| diff -up openssh-6.8p1/openbsd-compat/port-linux.h.coverity openssh-6.8p1/openbsd-compat/port-linux.h
 | diff -up openssh-7.4p1/ssh-keygen.1.entropy openssh-7.4p1/ssh-keygen.1
 | ||||||
| --- openssh-6.8p1/openbsd-compat/port-linux.h.coverity	2015-03-18 17:21:51.861264906 +0100
 | --- openssh-7.4p1/ssh-keygen.1.entropy	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-6.8p1/openbsd-compat/port-linux.h	2015-03-18 17:21:51.897264831 +0100
 | +++ openssh-7.4p1/ssh-keygen.1	2016-12-23 18:34:27.770753571 +0100
 | ||||||
| @@ -37,4 +37,6 @@ void oom_adjust_restore(void);
 | @@ -848,6 +848,24 @@ Contains Diffie-Hellman groups used for
 | ||||||
|  void oom_adjust_setup(void); |  The file format is described in | ||||||
|  #endif |  .Xr moduli 5 . | ||||||
|   |  .El | ||||||
| +void linux_seed(void);
 | +.Sh ENVIRONMENT
 | ||||||
| +
 | +.Bl -tag -width Ds -compact
 | ||||||
|  #endif /* ! _PORT_LINUX_H */ | +.Pp
 | ||||||
|  | +.It Pa SSH_USE_STRONG_RNG
 | ||||||
|  | +The reseeding of the OpenSSL random generator is usually done from
 | ||||||
|  | +.Cm /dev/urandom .
 | ||||||
|  | +If the 
 | ||||||
|  | +.Cm SSH_USE_STRONG_RNG
 | ||||||
|  | +environment variable is set to value other than
 | ||||||
|  | +.Cm 0
 | ||||||
|  | +the OpenSSL random generator is reseeded from
 | ||||||
|  | +.Cm /dev/random .
 | ||||||
|  | +The number of bytes read is defined by the SSH_USE_STRONG_RNG value. 
 | ||||||
|  | +Minimum is 14 bytes.
 | ||||||
|  | +This setting is not recommended on the computers without the hardware
 | ||||||
|  | +random generator because insufficient entropy causes the connection to 
 | ||||||
|  | +be blocked until enough entropy is available.
 | ||||||
|  | +.El
 | ||||||
|  |  .Sh SEE ALSO | ||||||
|  |  .Xr ssh 1 , | ||||||
|  |  .Xr ssh-add 1 , | ||||||
|  | diff -up openssh-7.4p1/ssh-keysign.8.entropy openssh-7.4p1/ssh-keysign.8
 | ||||||
|  | --- openssh-7.4p1/ssh-keysign.8.entropy	2016-12-19 05:59:41.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/ssh-keysign.8	2016-12-23 18:34:27.770753571 +0100
 | ||||||
|  | @@ -80,6 +80,24 @@ must be set-uid root if host-based authe
 | ||||||
|  |  If these files exist they are assumed to contain public certificate | ||||||
|  |  information corresponding with the private keys above. | ||||||
|  |  .El | ||||||
|  | +.Sh ENVIRONMENT
 | ||||||
|  | +.Bl -tag -width Ds -compact
 | ||||||
|  | +.Pp
 | ||||||
|  | +.It Pa SSH_USE_STRONG_RNG
 | ||||||
|  | +The reseeding of the OpenSSL random generator is usually done from
 | ||||||
|  | +.Cm /dev/urandom .
 | ||||||
|  | +If the 
 | ||||||
|  | +.Cm SSH_USE_STRONG_RNG
 | ||||||
|  | +environment variable is set to value other than
 | ||||||
|  | +.Cm 0
 | ||||||
|  | +the OpenSSL random generator is reseeded from
 | ||||||
|  | +.Cm /dev/random .
 | ||||||
|  | +The number of bytes read is defined by the SSH_USE_STRONG_RNG value. 
 | ||||||
|  | +Minimum is 14 bytes.
 | ||||||
|  | +This setting is not recommended on the computers without the hardware
 | ||||||
|  | +random generator because insufficient entropy causes the connection to 
 | ||||||
|  | +be blocked until enough entropy is available.
 | ||||||
|  | +.El
 | ||||||
|  |  .Sh SEE ALSO | ||||||
|  |  .Xr ssh 1 , | ||||||
|  |  .Xr ssh-keygen 1 , | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| diff -up openssh-7.0p1/auth-krb5.c.kuserok openssh-7.0p1/auth-krb5.c
 | diff -up openssh-7.4p1/auth-krb5.c.kuserok openssh-7.4p1/auth-krb5.c
 | ||||||
| --- openssh-7.0p1/auth-krb5.c.kuserok	2015-08-11 10:57:29.000000000 +0200
 | --- openssh-7.4p1/auth-krb5.c.kuserok	2016-12-23 14:36:07.640465939 +0100
 | ||||||
| +++ openssh-7.0p1/auth-krb5.c	2015-08-12 11:26:21.874536127 +0200
 | +++ openssh-7.4p1/auth-krb5.c	2016-12-23 14:36:07.644465936 +0100
 | ||||||
| @@ -55,6 +55,21 @@
 | @@ -56,6 +56,21 @@
 | ||||||
|   |   | ||||||
|  extern ServerOptions	 options; |  extern ServerOptions	 options; | ||||||
|   |   | ||||||
| @ -23,7 +23,7 @@ diff -up openssh-7.0p1/auth-krb5.c.kuserok openssh-7.0p1/auth-krb5.c | |||||||
|  static int |  static int | ||||||
|  krb5_init(void *context) |  krb5_init(void *context) | ||||||
|  { |  { | ||||||
| @@ -158,8 +173,9 @@ auth_krb5_password(Authctxt *authctxt, c
 | @@ -160,8 +175,9 @@ auth_krb5_password(Authctxt *authctxt, c
 | ||||||
|  	if (problem) |  	if (problem) | ||||||
|  		goto out; |  		goto out; | ||||||
|   |   | ||||||
| @ -35,9 +35,9 @@ diff -up openssh-7.0p1/auth-krb5.c.kuserok openssh-7.0p1/auth-krb5.c | |||||||
|  		problem = -1; |  		problem = -1; | ||||||
|  		goto out; |  		goto out; | ||||||
|  	} |  	} | ||||||
| diff -up openssh-7.0p1/gss-serv-krb5.c.kuserok openssh-7.0p1/gss-serv-krb5.c
 | diff -up openssh-7.4p1/gss-serv-krb5.c.kuserok openssh-7.4p1/gss-serv-krb5.c
 | ||||||
| --- openssh-7.0p1/gss-serv-krb5.c.kuserok	2015-08-12 11:26:21.868536137 +0200
 | --- openssh-7.4p1/gss-serv-krb5.c.kuserok	2016-12-23 14:36:07.640465939 +0100
 | ||||||
| +++ openssh-7.0p1/gss-serv-krb5.c	2015-08-12 11:26:21.875536126 +0200
 | +++ openssh-7.4p1/gss-serv-krb5.c	2016-12-23 14:36:07.644465936 +0100
 | ||||||
| @@ -67,6 +67,7 @@ static int ssh_gssapi_krb5_cmdok(krb5_pr
 | @@ -67,6 +67,7 @@ static int ssh_gssapi_krb5_cmdok(krb5_pr
 | ||||||
|      int); |      int); | ||||||
|   |   | ||||||
| @ -160,7 +160,7 @@ diff -up openssh-7.0p1/gss-serv-krb5.c.kuserok openssh-7.0p1/gss-serv-krb5.c | |||||||
|  		retval = 1; |  		retval = 1; | ||||||
|  		logit("Authorized to %s, krb5 principal %s (krb5_kuserok)", |  		logit("Authorized to %s, krb5 principal %s (krb5_kuserok)", | ||||||
|  		    name, (char *)client->displayname.value); |  		    name, (char *)client->displayname.value); | ||||||
| @@ -171,9 +270,8 @@ ssh_gssapi_krb5_cmdok(krb5_principal pri
 | @@ -190,9 +289,8 @@ ssh_gssapi_krb5_cmdok(krb5_principal pri
 | ||||||
|  	snprintf(file, sizeof(file), "%s/.k5users", pw->pw_dir); |  	snprintf(file, sizeof(file), "%s/.k5users", pw->pw_dir); | ||||||
|  	/* If both .k5login and .k5users DNE, self-login is ok. */ |  	/* If both .k5login and .k5users DNE, self-login is ok. */ | ||||||
|  	if (!k5login_exists && (access(file, F_OK) == -1)) { |  	if (!k5login_exists && (access(file, F_OK) == -1)) { | ||||||
| @ -172,28 +172,28 @@ diff -up openssh-7.0p1/gss-serv-krb5.c.kuserok openssh-7.0p1/gss-serv-krb5.c | |||||||
|  	} |  	} | ||||||
|  	if ((fp = fopen(file, "r")) == NULL) { |  	if ((fp = fopen(file, "r")) == NULL) { | ||||||
|  		int saved_errno = errno; |  		int saved_errno = errno; | ||||||
| diff -up openssh-7.0p1/servconf.c.kuserok openssh-7.0p1/servconf.c
 | diff -up openssh-7.4p1/servconf.c.kuserok openssh-7.4p1/servconf.c
 | ||||||
| --- openssh-7.0p1/servconf.c.kuserok	2015-08-12 11:26:21.865536141 +0200
 | --- openssh-7.4p1/servconf.c.kuserok	2016-12-23 14:36:07.630465944 +0100
 | ||||||
| +++ openssh-7.0p1/servconf.c	2015-08-12 11:27:14.126454598 +0200
 | +++ openssh-7.4p1/servconf.c	2016-12-23 15:11:52.278133344 +0100
 | ||||||
| @@ -172,6 +172,7 @@ initialize_server_options(ServerOptions
 | @@ -167,6 +167,7 @@ initialize_server_options(ServerOptions
 | ||||||
|  	options->ip_qos_bulk = -1; |  | ||||||
|  	options->version_addendum = NULL; |  	options->version_addendum = NULL; | ||||||
|  	options->fingerprint_hash = -1; |  	options->fingerprint_hash = -1; | ||||||
|  |  	options->disable_forwarding = -1; | ||||||
| +	options->use_kuserok = -1;
 | +	options->use_kuserok = -1;
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  /* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */ |  /* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */ | ||||||
| @@ -350,6 +351,8 @@ fill_default_server_options(ServerOption
 | @@ -342,6 +343,8 @@ fill_default_server_options(ServerOption
 | ||||||
|  		options->fwd_opts.streamlocal_bind_unlink = 0; |  | ||||||
|  	if (options->fingerprint_hash == -1) |  | ||||||
|  		options->fingerprint_hash = SSH_FP_HASH_DEFAULT; |  		options->fingerprint_hash = SSH_FP_HASH_DEFAULT; | ||||||
|  |  	if (options->disable_forwarding == -1) | ||||||
|  |  		options->disable_forwarding = 0; | ||||||
| +	if (options->use_kuserok == -1)
 | +	if (options->use_kuserok == -1)
 | ||||||
| +		options->use_kuserok = 1;
 | +		options->use_kuserok = 1;
 | ||||||
|   |   | ||||||
|  	assemble_algorithms(options); |  	assemble_algorithms(options); | ||||||
|   |   | ||||||
| @@ -404,7 +407,7 @@ typedef enum {
 | @@ -399,7 +402,7 @@ typedef enum {
 | ||||||
|  	sKeyRegenerationTime, sPermitRootLogin, sLogFacility, sLogLevel, |  	sPermitRootLogin, sLogFacility, sLogLevel, | ||||||
|  	sRhostsRSAAuthentication, sRSAAuthentication, |  	sRhostsRSAAuthentication, sRSAAuthentication, | ||||||
|  	sKerberosAuthentication, sKerberosOrLocalPasswd, sKerberosTicketCleanup, |  	sKerberosAuthentication, sKerberosOrLocalPasswd, sKerberosTicketCleanup, | ||||||
| -	sKerberosGetAFSToken,
 | -	sKerberosGetAFSToken,
 | ||||||
| @ -201,7 +201,7 @@ diff -up openssh-7.0p1/servconf.c.kuserok openssh-7.0p1/servconf.c | |||||||
|  	sKerberosTgtPassing, sChallengeResponseAuthentication, |  	sKerberosTgtPassing, sChallengeResponseAuthentication, | ||||||
|  	sPasswordAuthentication, sKbdInteractiveAuthentication, |  	sPasswordAuthentication, sKbdInteractiveAuthentication, | ||||||
|  	sListenAddress, sAddressFamily, |  	sListenAddress, sAddressFamily, | ||||||
| @@ -483,11 +486,13 @@ static struct {
 | @@ -478,11 +481,13 @@ static struct {
 | ||||||
|  #else |  #else | ||||||
|  	{ "kerberosgetafstoken", sUnsupported, SSHCFG_GLOBAL }, |  	{ "kerberosgetafstoken", sUnsupported, SSHCFG_GLOBAL }, | ||||||
|  #endif |  #endif | ||||||
| @ -215,7 +215,7 @@ diff -up openssh-7.0p1/servconf.c.kuserok openssh-7.0p1/servconf.c | |||||||
|  #endif |  #endif | ||||||
|  	{ "kerberostgtpassing", sUnsupported, SSHCFG_GLOBAL }, |  	{ "kerberostgtpassing", sUnsupported, SSHCFG_GLOBAL }, | ||||||
|  	{ "afstokenpassing", sUnsupported, SSHCFG_GLOBAL }, |  	{ "afstokenpassing", sUnsupported, SSHCFG_GLOBAL }, | ||||||
| @@ -1671,6 +1676,10 @@ process_server_config_line(ServerOptions
 | @@ -1644,6 +1649,10 @@ process_server_config_line(ServerOptions
 | ||||||
|  		*activep = value; |  		*activep = value; | ||||||
|  		break; |  		break; | ||||||
|   |   | ||||||
| @ -226,15 +226,15 @@ diff -up openssh-7.0p1/servconf.c.kuserok openssh-7.0p1/servconf.c | |||||||
|  	case sPermitOpen: |  	case sPermitOpen: | ||||||
|  		arg = strdelim(&cp); |  		arg = strdelim(&cp); | ||||||
|  		if (!arg || *arg == '\0') |  		if (!arg || *arg == '\0') | ||||||
| @@ -2023,6 +2032,7 @@ copy_set_server_options(ServerOptions *d
 | @@ -2016,6 +2025,7 @@ copy_set_server_options(ServerOptions *d
 | ||||||
|  	M_CP_INTOPT(max_authtries); |  	M_CP_INTOPT(client_alive_interval); | ||||||
|  	M_CP_INTOPT(ip_qos_interactive); |  	M_CP_INTOPT(ip_qos_interactive); | ||||||
|  	M_CP_INTOPT(ip_qos_bulk); |  	M_CP_INTOPT(ip_qos_bulk); | ||||||
| +	M_CP_INTOPT(use_kuserok);
 | +	M_CP_INTOPT(use_kuserok);
 | ||||||
|  	M_CP_INTOPT(rekey_limit); |  	M_CP_INTOPT(rekey_limit); | ||||||
|  	M_CP_INTOPT(rekey_interval); |  	M_CP_INTOPT(rekey_interval); | ||||||
|   |   | ||||||
| @@ -2304,6 +2314,7 @@ dump_config(ServerOptions *o)
 | @@ -2309,6 +2319,7 @@ dump_config(ServerOptions *o)
 | ||||||
|  	dump_cfg_fmtint(sStreamLocalBindUnlink, o->fwd_opts.streamlocal_bind_unlink); |  	dump_cfg_fmtint(sStreamLocalBindUnlink, o->fwd_opts.streamlocal_bind_unlink); | ||||||
|  	dump_cfg_fmtint(sUsePrivilegeSeparation, use_privsep); |  	dump_cfg_fmtint(sUsePrivilegeSeparation, use_privsep); | ||||||
|  	dump_cfg_fmtint(sFingerprintHash, o->fingerprint_hash); |  	dump_cfg_fmtint(sFingerprintHash, o->fingerprint_hash); | ||||||
| @ -242,10 +242,10 @@ diff -up openssh-7.0p1/servconf.c.kuserok openssh-7.0p1/servconf.c | |||||||
|   |   | ||||||
|  	/* string arguments */ |  	/* string arguments */ | ||||||
|  	dump_cfg_string(sPidFile, o->pid_file); |  	dump_cfg_string(sPidFile, o->pid_file); | ||||||
| diff -up openssh-7.0p1/servconf.h.kuserok openssh-7.0p1/servconf.h
 | diff -up openssh-7.4p1/servconf.h.kuserok openssh-7.4p1/servconf.h
 | ||||||
| --- openssh-7.0p1/servconf.h.kuserok	2015-08-12 11:26:21.865536141 +0200
 | --- openssh-7.4p1/servconf.h.kuserok	2016-12-23 14:36:07.630465944 +0100
 | ||||||
| +++ openssh-7.0p1/servconf.h	2015-08-12 11:26:21.876536124 +0200
 | +++ openssh-7.4p1/servconf.h	2016-12-23 14:36:07.645465936 +0100
 | ||||||
| @@ -180,6 +180,7 @@ typedef struct {
 | @@ -174,6 +174,7 @@ typedef struct {
 | ||||||
|   |   | ||||||
|  	int	num_permitted_opens; |  	int	num_permitted_opens; | ||||||
|   |   | ||||||
| @ -253,21 +253,21 @@ diff -up openssh-7.0p1/servconf.h.kuserok openssh-7.0p1/servconf.h | |||||||
|  	char   *chroot_directory; |  	char   *chroot_directory; | ||||||
|  	char   *revoked_keys_file; |  	char   *revoked_keys_file; | ||||||
|  	char   *trusted_user_ca_keys; |  	char   *trusted_user_ca_keys; | ||||||
| diff -up openssh-7.0p1/sshd_config.5.kuserok openssh-7.0p1/sshd_config.5
 | diff -up openssh-7.4p1/sshd_config.5.kuserok openssh-7.4p1/sshd_config.5
 | ||||||
| --- openssh-7.0p1/sshd_config.5.kuserok	2015-08-12 11:26:21.867536138 +0200
 | --- openssh-7.4p1/sshd_config.5.kuserok	2016-12-23 14:36:07.637465940 +0100
 | ||||||
| +++ openssh-7.0p1/sshd_config.5	2015-08-12 11:26:21.877536123 +0200
 | +++ openssh-7.4p1/sshd_config.5	2016-12-23 15:14:03.117162222 +0100
 | ||||||
| @@ -872,6 +872,10 @@ Specifies whether to automatically destr
 | @@ -850,6 +850,10 @@ Specifies whether to automatically destr
 | ||||||
|  file on logout. |  file on logout. | ||||||
|  The default is |  The default is | ||||||
|  .Dq yes . |  .Cm yes . | ||||||
| +.It Cm KerberosUseKuserok
 | +.It Cm KerberosUseKuserok
 | ||||||
| +Specifies whether to look at .k5login file for user's aliases.
 | +Specifies whether to look at .k5login file for user's aliases.
 | ||||||
| +The default is
 | +The default is
 | ||||||
| +.Dq yes .
 | +.Cm yes .
 | ||||||
|  .It Cm KexAlgorithms |  .It Cm KexAlgorithms | ||||||
|  Specifies the available KEX (Key Exchange) algorithms. |  Specifies the available KEX (Key Exchange) algorithms. | ||||||
|  Multiple algorithms must be comma-separated. |  Multiple algorithms must be comma-separated. | ||||||
| @@ -1116,6 +1120,7 @@ Available keywords are
 | @@ -1078,6 +1082,7 @@ Available keywords are
 | ||||||
|  .Cm IPQoS , |  .Cm IPQoS , | ||||||
|  .Cm KbdInteractiveAuthentication , |  .Cm KbdInteractiveAuthentication , | ||||||
|  .Cm KerberosAuthentication , |  .Cm KerberosAuthentication , | ||||||
| @ -275,10 +275,10 @@ diff -up openssh-7.0p1/sshd_config.5.kuserok openssh-7.0p1/sshd_config.5 | |||||||
|  .Cm MaxAuthTries , |  .Cm MaxAuthTries , | ||||||
|  .Cm MaxSessions , |  .Cm MaxSessions , | ||||||
|  .Cm PasswordAuthentication , |  .Cm PasswordAuthentication , | ||||||
| diff -up openssh-7.0p1/sshd_config.kuserok openssh-7.0p1/sshd_config
 | diff -up openssh-7.4p1/sshd_config.kuserok openssh-7.4p1/sshd_config
 | ||||||
| --- openssh-7.0p1/sshd_config.kuserok	2015-08-12 11:26:21.867536138 +0200
 | --- openssh-7.4p1/sshd_config.kuserok	2016-12-23 14:36:07.631465943 +0100
 | ||||||
| +++ openssh-7.0p1/sshd_config	2015-08-12 11:26:21.876536124 +0200
 | +++ openssh-7.4p1/sshd_config	2016-12-23 14:36:07.646465935 +0100
 | ||||||
| @@ -87,6 +87,7 @@ ChallengeResponseAuthentication no
 | @@ -73,6 +73,7 @@ ChallengeResponseAuthentication no
 | ||||||
|  #KerberosOrLocalPasswd yes |  #KerberosOrLocalPasswd yes | ||||||
|  #KerberosTicketCleanup yes |  #KerberosTicketCleanup yes | ||||||
|  #KerberosGetAFSToken no |  #KerberosGetAFSToken no | ||||||
|  | |||||||
| @ -1,8 +1,18 @@ | |||||||
| diff --git a/openbsd-compat/port-linux-sshd.c b/openbsd-compat/port-linux-sshd.c
 | diff -up openssh-7.4p1/openbsd-compat/port-linux.h.privsep-selinux openssh-7.4p1/openbsd-compat/port-linux.h
 | ||||||
| index c18524e..d04f4ed 100644
 | --- openssh-7.4p1/openbsd-compat/port-linux.h.privsep-selinux	2016-12-23 18:58:52.972122201 +0100
 | ||||||
| --- a/openbsd-compat/port-linux-sshd.c
 | +++ openssh-7.4p1/openbsd-compat/port-linux.h	2016-12-23 18:58:52.974122201 +0100
 | ||||||
| +++ b/openbsd-compat/port-linux-sshd.c
 | @@ -23,6 +23,7 @@ void ssh_selinux_setup_pty(char *, const
 | ||||||
| @@ -409,6 +409,28 @@ sshd_selinux_setup_exec_context(char *pwname)
 |  void ssh_selinux_change_context(const char *); | ||||||
|  |  void ssh_selinux_setfscreatecon(const char *); | ||||||
|  |   | ||||||
|  | +void sshd_selinux_copy_context(void);
 | ||||||
|  |  void sshd_selinux_setup_exec_context(char *); | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | diff -up openssh-7.4p1/openbsd-compat/port-linux-sshd.c.privsep-selinux openssh-7.4p1/openbsd-compat/port-linux-sshd.c
 | ||||||
|  | --- openssh-7.4p1/openbsd-compat/port-linux-sshd.c.privsep-selinux	2016-12-23 18:58:52.973122201 +0100
 | ||||||
|  | +++ openssh-7.4p1/openbsd-compat/port-linux-sshd.c	2016-12-23 18:58:52.974122201 +0100
 | ||||||
|  | @@ -419,6 +419,28 @@ sshd_selinux_setup_exec_context(char *pw
 | ||||||
|  	debug3("%s: done", __func__); |  	debug3("%s: done", __func__); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -31,23 +41,19 @@ index c18524e..d04f4ed 100644 | |||||||
|  #endif |  #endif | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
| diff --git a/openbsd-compat/port-linux.h b/openbsd-compat/port-linux.h
 | diff -up openssh-7.4p1/session.c.privsep-selinux openssh-7.4p1/session.c
 | ||||||
| index 8ef6cc4..b18893c 100644
 | --- openssh-7.4p1/session.c.privsep-selinux	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| --- a/openbsd-compat/port-linux.h
 | +++ openssh-7.4p1/session.c	2016-12-23 18:58:52.974122201 +0100
 | ||||||
| +++ b/openbsd-compat/port-linux.h
 | @@ -1331,7 +1331,7 @@ do_setusercontext(struct passwd *pw)
 | ||||||
| @@ -25,6 +25,7 @@ void ssh_selinux_setup_pty(char *, const char *);
 |  | ||||||
|  void ssh_selinux_change_context(const char *); |  | ||||||
|  void ssh_selinux_setfscreatecon(const char *); |  | ||||||
|   |   | ||||||
| +void sshd_selinux_copy_context(void);
 |  	platform_setusercontext(pw); | ||||||
|  void sshd_selinux_setup_exec_context(char *); |  | ||||||
|  #endif |  | ||||||
|   |   | ||||||
| diff --git a/session.c b/session.c
 | -	if (platform_privileged_uidswap()) {
 | ||||||
| index 2bcf818..b5dc144 100644
 | +	if (platform_privileged_uidswap() && (!is_child || !use_privsep)) {
 | ||||||
| --- a/session.c
 |  #ifdef HAVE_LOGIN_CAP | ||||||
| +++ b/session.c
 |  		if (setusercontext(lc, pw, pw->pw_uid, | ||||||
| @@ -1538,6 +1538,9 @@ do_setusercontext(struct passwd *pw)
 |  		    (LOGIN_SETALL & ~(LOGIN_SETPATH|LOGIN_SETUSER))) < 0) { | ||||||
|  | @@ -1361,6 +1361,9 @@ do_setusercontext(struct passwd *pw)
 | ||||||
|  			    pw->pw_uid); |  			    pw->pw_uid); | ||||||
|  			chroot_path = percent_expand(tmp, "h", pw->pw_dir, |  			chroot_path = percent_expand(tmp, "h", pw->pw_dir, | ||||||
|  			    "u", pw->pw_name, (char *)NULL); |  			    "u", pw->pw_name, (char *)NULL); | ||||||
| @ -57,7 +63,7 @@ index 2bcf818..b5dc144 100644 | |||||||
|  			safely_chroot(chroot_path, pw->pw_uid); |  			safely_chroot(chroot_path, pw->pw_uid); | ||||||
|  			free(tmp); |  			free(tmp); | ||||||
|  			free(chroot_path); |  			free(chroot_path); | ||||||
| @@ -1565,6 +1568,11 @@ do_setusercontext(struct passwd *pw)
 | @@ -1396,6 +1399,11 @@ do_setusercontext(struct passwd *pw)
 | ||||||
|  		/* Permanently switch to the desired uid. */ |  		/* Permanently switch to the desired uid. */ | ||||||
|  		permanently_set_uid(pw); |  		permanently_set_uid(pw); | ||||||
|  #endif |  #endif | ||||||
| @ -69,7 +75,7 @@ index 2bcf818..b5dc144 100644 | |||||||
|  	} else if (options.chroot_directory != NULL && |  	} else if (options.chroot_directory != NULL && | ||||||
|  	    strcasecmp(options.chroot_directory, "none") != 0) { |  	    strcasecmp(options.chroot_directory, "none") != 0) { | ||||||
|  		fatal("server lacks privileges to chroot to ChrootDirectory"); |  		fatal("server lacks privileges to chroot to ChrootDirectory"); | ||||||
| @@ -1588,9 +1588,6 @@ do_pwchange(Session *s)
 | @@ -1413,9 +1421,6 @@ do_pwchange(Session *s)
 | ||||||
|  	if (s->ttyfd != -1) { |  	if (s->ttyfd != -1) { | ||||||
|  		fprintf(stderr, |  		fprintf(stderr, | ||||||
|  		    "You must change your password now and login again!\n"); |  		    "You must change your password now and login again!\n"); | ||||||
| @ -79,7 +85,7 @@ index 2bcf818..b5dc144 100644 | |||||||
|  #ifdef PASSWD_NEEDS_USERNAME |  #ifdef PASSWD_NEEDS_USERNAME | ||||||
|  		execl(_PATH_PASSWD_PROG, "passwd", s->pw->pw_name, |  		execl(_PATH_PASSWD_PROG, "passwd", s->pw->pw_name, | ||||||
|  		    (char *)NULL); |  		    (char *)NULL); | ||||||
| @@ -1826,9 +1835,6 @@ do_child(Session *s, const char *command)
 | @@ -1625,9 +1630,6 @@ do_child(Session *s, const char *command
 | ||||||
|  		argv[i] = NULL; |  		argv[i] = NULL; | ||||||
|  		optind = optreset = 1; |  		optind = optreset = 1; | ||||||
|  		__progname = argv[0]; |  		__progname = argv[0]; | ||||||
| @ -89,11 +95,10 @@ index 2bcf818..b5dc144 100644 | |||||||
|  		exit(sftp_server_main(i, argv, s->pw)); |  		exit(sftp_server_main(i, argv, s->pw)); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| diff --git a/sshd.c b/sshd.c
 | diff -up openssh-7.4p1/sshd.c.privsep-selinux openssh-7.4p1/sshd.c
 | ||||||
| index 07f9926..a97f8b7 100644
 | --- openssh-7.4p1/sshd.c.privsep-selinux	2016-12-23 18:58:52.973122201 +0100
 | ||||||
| --- a/sshd.c
 | +++ openssh-7.4p1/sshd.c	2016-12-23 18:59:13.808124269 +0100
 | ||||||
| +++ b/sshd.c
 | @@ -540,6 +540,10 @@ privsep_preauth_child(void)
 | ||||||
| @@ -632,6 +632,10 @@ privsep_preauth_child(void)
 |  | ||||||
|  	/* Demote the private keys to public keys. */ |  	/* Demote the private keys to public keys. */ | ||||||
|  	demote_sensitive_data(); |  	demote_sensitive_data(); | ||||||
|   |   | ||||||
| @ -104,26 +109,13 @@ index 07f9926..a97f8b7 100644 | |||||||
|  	/* Demote the child */ |  	/* Demote the child */ | ||||||
|  	if (getuid() == 0 || geteuid() == 0) { |  	if (getuid() == 0 || geteuid() == 0) { | ||||||
|  		/* Change our root directory */ |  		/* Change our root directory */ | ||||||
| @@ -755,6 +755,9 @@ privsep_postauth(Authctxt *authctxt)
 | @@ -633,6 +637,9 @@ privsep_postauth(Authctxt *authctxt)
 | ||||||
|   |  { | ||||||
|  #ifdef DISABLE_FD_PASSING |  #ifdef DISABLE_FD_PASSING | ||||||
|  	if (1) { |  	if (1) { | ||||||
| +#elif defined(WITH_SELINUX)
 | +#elif defined(WITH_SELINUX)
 | ||||||
| +	if (options.use_login) {
 | +	if (0) {
 | ||||||
| +		/* even root user can be confined by SELinux */
 | +		/* even root user can be confined by SELinux */
 | ||||||
|  #else |  #else | ||||||
|  	if (authctxt->pw->pw_uid == 0 || options.use_login) { |  	if (authctxt->pw->pw_uid == 0) { | ||||||
|  #endif |  #endif | ||||||
| diff --git a/session.c b/session.c
 |  | ||||||
| index 684f867..09048bc 100644
 |  | ||||||
| --- a/session.c
 |  | ||||||
| +++ b/session.c
 |  | ||||||
| @@ -1538,7 +1538,7 @@ do_setusercontext(struct passwd *pw)
 |  | ||||||
|   |  | ||||||
|  	platform_setusercontext(pw); |  | ||||||
|   |  | ||||||
| -	if (platform_privileged_uidswap()) {
 |  | ||||||
| +	if (platform_privileged_uidswap() && (!is_child || !use_privsep)) {
 |  | ||||||
|  #ifdef HAVE_LOGIN_CAP |  | ||||||
|  		if (setusercontext(lc, pw, pw->pw_uid, |  | ||||||
|  		    (LOGIN_SETALL & ~(LOGIN_SETPATH|LOGIN_SETUSER))) < 0) { |  | ||||||
|  | |||||||
| @ -1,8 +1,7 @@ | |||||||
| diff --git a/ssh_config b/ssh_config
 | diff -up openssh-7.4p1/ssh_config.redhat openssh-7.4p1/ssh_config
 | ||||||
| index 49a4f6c..3f83c40 100644
 | --- openssh-7.4p1/ssh_config.redhat	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| --- a/ssh_config
 | +++ openssh-7.4p1/ssh_config	2016-12-23 13:32:00.045220402 +0100
 | ||||||
| +++ b/ssh_config
 | @@ -48,3 +48,7 @@
 | ||||||
| @@ -46,3 +46,7 @@
 |  | ||||||
|  #   VisualHostKey no |  #   VisualHostKey no | ||||||
|  #   ProxyCommand ssh -q -W %h:%p gateway.example.com |  #   ProxyCommand ssh -q -W %h:%p gateway.example.com | ||||||
|  #   RekeyLimit 1G 1h |  #   RekeyLimit 1G 1h | ||||||
| @ -10,9 +9,9 @@ index 49a4f6c..3f83c40 100644 | |||||||
| +# To modify the system-wide ssh configuration, create a  *.conf  file under
 | +# To modify the system-wide ssh configuration, create a  *.conf  file under
 | ||||||
| +#  /etc/ssh/ssh_config.d/  which will be automatically included below
 | +#  /etc/ssh/ssh_config.d/  which will be automatically included below
 | ||||||
| +Include /etc/ssh/ssh_config.d/*.conf
 | +Include /etc/ssh/ssh_config.d/*.conf
 | ||||||
| diff --git a/ssh_config_redhat b/ssh_config_redhat
 | diff -up openssh-7.4p1/ssh_config_redhat.redhat openssh-7.4p1/ssh_config_redhat
 | ||||||
| --- /dev/null
 | --- openssh-7.4p1/ssh_config_redhat.redhat	2016-12-23 13:32:00.045220402 +0100
 | ||||||
| +++ b/ssh_config_redhat
 | +++ openssh-7.4p1/ssh_config_redhat	2016-12-23 13:32:00.045220402 +0100
 | ||||||
| @@ -0,0 +1,20 @@
 | @@ -0,0 +1,20 @@
 | ||||||
| +# Follow system-wide Crypto Poliicy, if defined:
 | +# Follow system-wide Crypto Poliicy, if defined:
 | ||||||
| +Include /etc/crypto-policies/back-ends/openssh.txt
 | +Include /etc/crypto-policies/back-ends/openssh.txt
 | ||||||
| @ -34,11 +33,38 @@ diff --git a/ssh_config_redhat b/ssh_config_redhat | |||||||
| +	SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
 | +	SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
 | ||||||
| +	SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
 | +	SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
 | ||||||
| +	SendEnv XMODIFIERS
 | +	SendEnv XMODIFIERS
 | ||||||
| diff --git a/sshd_config b/sshd_config
 | diff -up openssh-7.4p1/sshd_config.0.redhat openssh-7.4p1/sshd_config.0
 | ||||||
| index c735429..e68ddee 100644
 | --- openssh-7.4p1/sshd_config.0.redhat	2016-12-19 06:21:22.000000000 +0100
 | ||||||
| --- a/sshd_config
 | +++ openssh-7.4p1/sshd_config.0	2016-12-23 13:32:00.045220402 +0100
 | ||||||
| +++ b/sshd_config
 | @@ -837,9 +837,9 @@ DESCRIPTION
 | ||||||
| @@ -10,6 +10,10 @@
 |   | ||||||
|  |       SyslogFacility | ||||||
|  |               Gives the facility code that is used when logging messages from | ||||||
|  | -             sshd(8).  The possible values are: DAEMON, USER, AUTH, LOCAL0,
 | ||||||
|  | -             LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.  The
 | ||||||
|  | -             default is AUTH.
 | ||||||
|  | +             sshd(8).  The possible values are: DAEMON, USER, AUTH, AUTHPRIV,
 | ||||||
|  | +             LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.
 | ||||||
|  | +             The default is AUTH.
 | ||||||
|  |   | ||||||
|  |       TCPKeepAlive | ||||||
|  |               Specifies whether the system should send TCP keepalive messages | ||||||
|  | diff -up openssh-7.4p1/sshd_config.5.redhat openssh-7.4p1/sshd_config.5
 | ||||||
|  | --- openssh-7.4p1/sshd_config.5.redhat	2016-12-19 05:59:41.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/sshd_config.5	2016-12-23 13:32:00.046220403 +0100
 | ||||||
|  | @@ -1393,7 +1393,7 @@ By default no subsystems are defined.
 | ||||||
|  |  .It Cm SyslogFacility | ||||||
|  |  Gives the facility code that is used when logging messages from | ||||||
|  |  .Xr sshd 8 . | ||||||
|  | -The possible values are: DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2,
 | ||||||
|  | +The possible values are: DAEMON, USER, AUTH, AUTHPRIV, LOCAL0, LOCAL1, LOCAL2,
 | ||||||
|  |  LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. | ||||||
|  |  The default is AUTH. | ||||||
|  |  .It Cm TCPKeepAlive | ||||||
|  | diff -up openssh-7.4p1/sshd_config.redhat openssh-7.4p1/sshd_config
 | ||||||
|  | --- openssh-7.4p1/sshd_config.redhat	2016-12-19 05:59:41.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/sshd_config	2016-12-23 13:33:05.386233133 +0100
 | ||||||
|  | @@ -10,21 +10,26 @@
 | ||||||
|  # possible, but leave them commented.  Uncommented options override the |  # possible, but leave them commented.  Uncommented options override the | ||||||
|  # default value. |  # default value. | ||||||
|   |   | ||||||
| @ -49,10 +75,8 @@ index c735429..e68ddee 100644 | |||||||
|  #Port 22 |  #Port 22 | ||||||
|  #AddressFamily any |  #AddressFamily any | ||||||
|  #ListenAddress 0.0.0.0 |  #ListenAddress 0.0.0.0 | ||||||
| @@ -21,10 +25,10 @@
 |  #ListenAddress :: | ||||||
|  # HostKey for protocol version 1 |   | ||||||
|  #HostKey /etc/ssh/ssh_host_key |  | ||||||
|  # HostKeys for protocol version 2 |  | ||||||
| -#HostKey /etc/ssh/ssh_host_rsa_key
 | -#HostKey /etc/ssh/ssh_host_rsa_key
 | ||||||
| +HostKey /etc/ssh/ssh_host_rsa_key
 | +HostKey /etc/ssh/ssh_host_rsa_key
 | ||||||
|  #HostKey /etc/ssh/ssh_host_dsa_key |  #HostKey /etc/ssh/ssh_host_dsa_key | ||||||
| @ -61,9 +85,8 @@ index c735429..e68ddee 100644 | |||||||
| +HostKey /etc/ssh/ssh_host_ecdsa_key
 | +HostKey /etc/ssh/ssh_host_ecdsa_key
 | ||||||
| +HostKey /etc/ssh/ssh_host_ed25519_key
 | +HostKey /etc/ssh/ssh_host_ed25519_key
 | ||||||
|   |   | ||||||
|  # Lifetime and size of ephemeral version 1 server key |  # Ciphers and keying | ||||||
|  #KeyRegenerationInterval 1h |  #RekeyLimit default none | ||||||
| @@ -36,6 +40,7 @@
 |  | ||||||
|   |   | ||||||
|  # Logging |  # Logging | ||||||
|  #SyslogFacility AUTH |  #SyslogFacility AUTH | ||||||
| @ -71,7 +94,7 @@ index c735429..e68ddee 100644 | |||||||
|  #LogLevel INFO |  #LogLevel INFO | ||||||
|   |   | ||||||
|  # Authentication: |  # Authentication: | ||||||
| @@ -71,9 +76,11 @@ AuthorizedKeysFile	.ssh/authorized_keys
 | @@ -57,9 +62,11 @@ AuthorizedKeysFile	.ssh/authorized_keys
 | ||||||
|  # To disable tunneled clear text passwords, change to no here! |  # To disable tunneled clear text passwords, change to no here! | ||||||
|  #PasswordAuthentication yes |  #PasswordAuthentication yes | ||||||
|  #PermitEmptyPasswords no |  #PermitEmptyPasswords no | ||||||
| @ -83,7 +106,7 @@ index c735429..e68ddee 100644 | |||||||
|   |   | ||||||
|  # Kerberos options |  # Kerberos options | ||||||
|  #KerberosAuthentication no |  #KerberosAuthentication no | ||||||
| @@ -82,8 +89,8 @@ AuthorizedKeysFile	.ssh/authorized_keys
 | @@ -68,8 +75,8 @@ AuthorizedKeysFile	.ssh/authorized_keys
 | ||||||
|  #KerberosGetAFSToken no |  #KerberosGetAFSToken no | ||||||
|   |   | ||||||
|  # GSSAPI options |  # GSSAPI options | ||||||
| @ -94,7 +117,7 @@ index c735429..e68ddee 100644 | |||||||
|   |   | ||||||
|  # Set this to 'yes' to enable PAM authentication, account processing, |  # Set this to 'yes' to enable PAM authentication, account processing, | ||||||
|  # and session processing. If this is enabled, PAM authentication will |  # and session processing. If this is enabled, PAM authentication will | ||||||
| @@ -94,12 +101,12 @@ AuthorizedKeysFile	.ssh/authorized_keys
 | @@ -80,12 +87,12 @@ AuthorizedKeysFile	.ssh/authorized_keys
 | ||||||
|  # If you just want the PAM account and session checks to run without |  # If you just want the PAM account and session checks to run without | ||||||
|  # PAM authentication, then enable this but set PasswordAuthentication |  # PAM authentication, then enable this but set PasswordAuthentication | ||||||
|  # and ChallengeResponseAuthentication to 'no'. |  # and ChallengeResponseAuthentication to 'no'. | ||||||
| @ -109,7 +132,7 @@ index c735429..e68ddee 100644 | |||||||
|  #X11DisplayOffset 10 |  #X11DisplayOffset 10 | ||||||
|  #X11UseLocalhost yes |  #X11UseLocalhost yes | ||||||
|  #PermitTTY yes |  #PermitTTY yes | ||||||
| @@ -122,6 +129,12 @@ UsePrivilegeSeparation sandbox		# Default for new installations.
 | @@ -108,6 +115,12 @@ AuthorizedKeysFile	.ssh/authorized_keys
 | ||||||
|  # no default banner path |  # no default banner path | ||||||
|  #Banner none |  #Banner none | ||||||
|   |   | ||||||
| @ -122,33 +145,3 @@ index c735429..e68ddee 100644 | |||||||
|  # override default of no subsystems |  # override default of no subsystems | ||||||
|  Subsystem	sftp	/usr/libexec/sftp-server |  Subsystem	sftp	/usr/libexec/sftp-server | ||||||
|   |   | ||||||
| diff --git a/sshd_config.0 b/sshd_config.0
 |  | ||||||
| index 413c260..87e7ee7 100644
 |  | ||||||
| --- a/sshd_config.0
 |  | ||||||
| +++ b/sshd_config.0
 |  | ||||||
| @@ -675,9 +675,9 @@ DESCRIPTION
 |  | ||||||
|   |  | ||||||
|       SyslogFacility |  | ||||||
|               Gives the facility code that is used when logging messages from |  | ||||||
| -             sshd(8).  The possible values are: DAEMON, USER, AUTH, LOCAL0,
 |  | ||||||
| -             LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.  The
 |  | ||||||
| -             default is AUTH.
 |  | ||||||
| +             sshd(8).  The possible values are: DAEMON, USER, AUTH, AUTHPRIV,
 |  | ||||||
| +             LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.
 |  | ||||||
| +             The default is AUTH.
 |  | ||||||
|   |  | ||||||
|       TCPKeepAlive |  | ||||||
|               Specifies whether the system should send TCP keepalive messages |  | ||||||
| diff --git a/sshd_config.5 b/sshd_config.5
 |  | ||||||
| index ce71efe..12465c2 100644
 |  | ||||||
| --- a/sshd_config.5
 |  | ||||||
| +++ b/sshd_config.5
 |  | ||||||
| @@ -1131,7 +1131,7 @@ Note that this option applies to protocol version 2 only.
 |  | ||||||
|  .It Cm SyslogFacility |  | ||||||
|  Gives the facility code that is used when logging messages from |  | ||||||
|  .Xr sshd 8 . |  | ||||||
| -The possible values are: DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2,
 |  | ||||||
| +The possible values are: DAEMON, USER, AUTH, AUTHPRIV, LOCAL0, LOCAL1, LOCAL2,
 |  | ||||||
|  LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. |  | ||||||
|  The default is AUTH. |  | ||||||
|  .It Cm TCPKeepAlive |  | ||||||
|  | |||||||
| @ -1,157 +1,6 @@ | |||||||
| diff -up openssh/auth-pam.c.role-mls openssh/auth-pam.c
 | diff -up openssh-7.4p1/auth2.c.role-mls openssh-7.4p1/auth2.c
 | ||||||
| --- openssh/auth-pam.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 | --- openssh-7.4p1/auth2.c.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/auth-pam.c	2016-07-26 12:37:48.793593333 +0200
 | +++ openssh-7.4p1/auth2.c	2016-12-23 12:19:58.587459379 +0100
 | ||||||
| @@ -1095,7 +1095,7 @@ is_pam_session_open(void)
 |  | ||||||
|   * during the ssh authentication process. |  | ||||||
|   */ |  | ||||||
|  int |  | ||||||
| -do_pam_putenv(char *name, char *value)
 |  | ||||||
| +do_pam_putenv(char *name, const char *value)
 |  | ||||||
|  { |  | ||||||
|  	int ret = 1; |  | ||||||
|  #ifdef HAVE_PAM_PUTENV |  | ||||||
| diff -up openssh/auth-pam.h.role-mls openssh/auth-pam.h
 |  | ||||||
| --- openssh/auth-pam.h.role-mls	2016-07-24 13:50:13.000000000 +0200
 |  | ||||||
| +++ openssh/auth-pam.h	2016-07-26 12:37:48.793593333 +0200
 |  | ||||||
| @@ -38,7 +38,7 @@ void do_pam_session(void);
 |  | ||||||
|  void do_pam_set_tty(const char *); |  | ||||||
|  void do_pam_setcred(int ); |  | ||||||
|  void do_pam_chauthtok(void); |  | ||||||
| -int do_pam_putenv(char *, char *);
 |  | ||||||
| +int do_pam_putenv(char *, const char *);
 |  | ||||||
|  char ** fetch_pam_environment(void); |  | ||||||
|  char ** fetch_pam_child_environment(void); |  | ||||||
|  void free_pam_environment(char **); |  | ||||||
| diff -up openssh/auth.h.role-mls openssh/auth.h
 |  | ||||||
| --- openssh/auth.h.role-mls	2016-07-24 13:50:13.000000000 +0200
 |  | ||||||
| +++ openssh/auth.h	2016-07-26 12:37:48.793593333 +0200
 |  | ||||||
| @@ -62,6 +62,9 @@ struct Authctxt {
 |  | ||||||
|  	char		*service; |  | ||||||
|  	struct passwd	*pw;		/* set if 'valid' */ |  | ||||||
|  	char		*style; |  | ||||||
| +#ifdef WITH_SELINUX
 |  | ||||||
| +	char		*role;
 |  | ||||||
| +#endif
 |  | ||||||
|  	void		*kbdintctxt; |  | ||||||
|  	char		*info;		/* Extra info for next auth_log */ |  | ||||||
|  #ifdef BSD_AUTH |  | ||||||
| diff -up openssh/auth1.c.role-mls openssh/auth1.c
 |  | ||||||
| --- openssh/auth1.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 |  | ||||||
| +++ openssh/auth1.c	2016-07-26 12:37:48.793593333 +0200
 |  | ||||||
| @@ -384,6 +384,9 @@ do_authentication(Authctxt *authctxt)
 |  | ||||||
|  { |  | ||||||
|  	u_int ulen; |  | ||||||
|  	char *user, *style = NULL; |  | ||||||
| +#ifdef WITH_SELINUX
 |  | ||||||
| +	char *role=NULL;
 |  | ||||||
| +#endif
 |  | ||||||
|   |  | ||||||
|  	/* Get the name of the user that we wish to log in as. */ |  | ||||||
|  	packet_read_expect(SSH_CMSG_USER); |  | ||||||
| @@ -392,11 +395,24 @@ do_authentication(Authctxt *authctxt)
 |  | ||||||
|  	user = packet_get_cstring(&ulen); |  | ||||||
|  	packet_check_eom(); |  | ||||||
|   |  | ||||||
| +#ifdef WITH_SELINUX
 |  | ||||||
| +	if ((role = strchr(user, '/')) != NULL)
 |  | ||||||
| +		*role++ = '\0';
 |  | ||||||
| +#endif
 |  | ||||||
| +
 |  | ||||||
|  	if ((style = strchr(user, ':')) != NULL) |  | ||||||
|  		*style++ = '\0'; |  | ||||||
| +#ifdef WITH_SELINUX
 |  | ||||||
| +	else
 |  | ||||||
| +		if (role && (style = strchr(role, ':')) != NULL)
 |  | ||||||
| +			*style++ = '\0';
 |  | ||||||
| +#endif
 |  | ||||||
|   |  | ||||||
|  	authctxt->user = user; |  | ||||||
|  	authctxt->style = style; |  | ||||||
| +#ifdef WITH_SELINUX
 |  | ||||||
| +	authctxt->role = role;
 |  | ||||||
| +#endif
 |  | ||||||
|   |  | ||||||
|  	/* Verify that the user is a valid user. */ |  | ||||||
|  	if ((authctxt->pw = PRIVSEP(getpwnamallow(user))) != NULL) |  | ||||||
| diff -up openssh/auth2-gss.c.role-mls openssh/auth2-gss.c
 |  | ||||||
| --- openssh/auth2-gss.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 |  | ||||||
| +++ openssh/auth2-gss.c	2016-07-26 12:37:48.794593332 +0200
 |  | ||||||
| @@ -255,6 +255,7 @@ input_gssapi_mic(int type, u_int32_t ple
 |  | ||||||
|  	Authctxt *authctxt = ctxt; |  | ||||||
|  	Gssctxt *gssctxt; |  | ||||||
|  	int authenticated = 0; |  | ||||||
| +	char *micuser;
 |  | ||||||
|  	Buffer b; |  | ||||||
|  	gss_buffer_desc mic, gssbuf; |  | ||||||
|  	u_int len; |  | ||||||
| @@ -267,7 +268,13 @@ input_gssapi_mic(int type, u_int32_t ple
 |  | ||||||
|  	mic.value = packet_get_string(&len); |  | ||||||
|  	mic.length = len; |  | ||||||
|   |  | ||||||
| -	ssh_gssapi_buildmic(&b, authctxt->user, authctxt->service,
 |  | ||||||
| +#ifdef WITH_SELINUX
 |  | ||||||
| +	if (authctxt->role && (strlen(authctxt->role) > 0))
 |  | ||||||
| +		xasprintf(&micuser, "%s/%s", authctxt->user, authctxt->role);
 |  | ||||||
| +	else
 |  | ||||||
| +#endif
 |  | ||||||
| +		micuser = authctxt->user;
 |  | ||||||
| +	ssh_gssapi_buildmic(&b, micuser, authctxt->service,
 |  | ||||||
|  	    "gssapi-with-mic"); |  | ||||||
|   |  | ||||||
|  	gssbuf.value = buffer_ptr(&b); |  | ||||||
| @@ -279,6 +286,8 @@ input_gssapi_mic(int type, u_int32_t ple
 |  | ||||||
|  		logit("GSSAPI MIC check failed"); |  | ||||||
|   |  | ||||||
|  	buffer_free(&b); |  | ||||||
| +	if (micuser != authctxt->user)
 |  | ||||||
| +		free(micuser);
 |  | ||||||
|  	free(mic.value); |  | ||||||
|   |  | ||||||
|  	authctxt->postponed = 0; |  | ||||||
| diff -up openssh/auth2-hostbased.c.role-mls openssh/auth2-hostbased.c
 |  | ||||||
| --- openssh/auth2-hostbased.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 |  | ||||||
| +++ openssh/auth2-hostbased.c	2016-07-26 12:37:48.794593332 +0200
 |  | ||||||
| @@ -121,7 +121,15 @@ userauth_hostbased(Authctxt *authctxt)
 |  | ||||||
|  	buffer_put_string(&b, session_id2, session_id2_len); |  | ||||||
|  	/* reconstruct packet */ |  | ||||||
|  	buffer_put_char(&b, SSH2_MSG_USERAUTH_REQUEST); |  | ||||||
| -	buffer_put_cstring(&b, authctxt->user);
 |  | ||||||
| +#ifdef WITH_SELINUX
 |  | ||||||
| +	if (authctxt->role) {
 |  | ||||||
| +		buffer_put_int(&b, strlen(authctxt->user)+strlen(authctxt->role)+1);
 |  | ||||||
| +		buffer_append(&b, authctxt->user, strlen(authctxt->user));
 |  | ||||||
| +		buffer_put_char(&b, '/');
 |  | ||||||
| +		buffer_append(&b, authctxt->role, strlen(authctxt->role));
 |  | ||||||
| +	} else 
 |  | ||||||
| +#endif
 |  | ||||||
| +		buffer_put_cstring(&b, authctxt->user);
 |  | ||||||
|  	buffer_put_cstring(&b, service); |  | ||||||
|  	buffer_put_cstring(&b, "hostbased"); |  | ||||||
|  	buffer_put_string(&b, pkalg, alen); |  | ||||||
| diff -up openssh/auth2-pubkey.c.role-mls openssh/auth2-pubkey.c
 |  | ||||||
| --- openssh/auth2-pubkey.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 |  | ||||||
| +++ openssh/auth2-pubkey.c	2016-07-26 12:37:48.794593332 +0200
 |  | ||||||
| @@ -151,9 +151,15 @@ userauth_pubkey(Authctxt *authctxt)
 |  | ||||||
|  		} |  | ||||||
|  		/* reconstruct packet */ |  | ||||||
|  		buffer_put_char(&b, SSH2_MSG_USERAUTH_REQUEST); |  | ||||||
| -		xasprintf(&userstyle, "%s%s%s", authctxt->user,
 |  | ||||||
| +		xasprintf(&userstyle, "%s%s%s%s%s", authctxt->user,
 |  | ||||||
|  		    authctxt->style ? ":" : "", |  | ||||||
| -		    authctxt->style ? authctxt->style : "");
 |  | ||||||
| +		    authctxt->style ? authctxt->style : "",
 |  | ||||||
| +#ifdef WITH_SELINUX
 |  | ||||||
| +		    authctxt->role ? "/" : "",
 |  | ||||||
| +		    authctxt->role ? authctxt->role : "");
 |  | ||||||
| +#else
 |  | ||||||
| +		    "", "");
 |  | ||||||
| +#endif
 |  | ||||||
|  		buffer_put_cstring(&b, userstyle); |  | ||||||
|  		free(userstyle); |  | ||||||
|  		buffer_put_cstring(&b, |  | ||||||
| diff -up openssh/auth2.c.role-mls openssh/auth2.c
 |  | ||||||
| --- openssh/auth2.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 |  | ||||||
| +++ openssh/auth2.c	2016-07-26 12:37:48.794593332 +0200
 |  | ||||||
| @@ -215,6 +215,9 @@ input_userauth_request(int type, u_int32
 | @@ -215,6 +215,9 @@ input_userauth_request(int type, u_int32
 | ||||||
|  	Authctxt *authctxt = ctxt; |  	Authctxt *authctxt = ctxt; | ||||||
|  	Authmethod *m = NULL; |  	Authmethod *m = NULL; | ||||||
| @ -191,9 +40,122 @@ diff -up openssh/auth2.c.role-mls openssh/auth2.c | |||||||
|  		userauth_banner(); |  		userauth_banner(); | ||||||
|  		if (auth2_setup_methods_lists(authctxt) != 0) |  		if (auth2_setup_methods_lists(authctxt) != 0) | ||||||
|  			packet_disconnect("no authentication methods enabled"); |  			packet_disconnect("no authentication methods enabled"); | ||||||
| diff -up openssh/misc.c.role-mls openssh/misc.c
 | diff -up openssh-7.4p1/auth2-gss.c.role-mls openssh-7.4p1/auth2-gss.c
 | ||||||
| --- openssh/misc.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 | --- openssh-7.4p1/auth2-gss.c.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/misc.c	2016-07-26 12:37:48.794593332 +0200
 | +++ openssh-7.4p1/auth2-gss.c	2016-12-23 12:19:58.586459382 +0100
 | ||||||
|  | @@ -255,6 +255,7 @@ input_gssapi_mic(int type, u_int32_t ple
 | ||||||
|  |  	Authctxt *authctxt = ctxt; | ||||||
|  |  	Gssctxt *gssctxt; | ||||||
|  |  	int authenticated = 0; | ||||||
|  | +	char *micuser;
 | ||||||
|  |  	Buffer b; | ||||||
|  |  	gss_buffer_desc mic, gssbuf; | ||||||
|  |  	u_int len; | ||||||
|  | @@ -267,7 +268,13 @@ input_gssapi_mic(int type, u_int32_t ple
 | ||||||
|  |  	mic.value = packet_get_string(&len); | ||||||
|  |  	mic.length = len; | ||||||
|  |   | ||||||
|  | -	ssh_gssapi_buildmic(&b, authctxt->user, authctxt->service,
 | ||||||
|  | +#ifdef WITH_SELINUX
 | ||||||
|  | +	if (authctxt->role && (strlen(authctxt->role) > 0))
 | ||||||
|  | +		xasprintf(&micuser, "%s/%s", authctxt->user, authctxt->role);
 | ||||||
|  | +	else
 | ||||||
|  | +#endif
 | ||||||
|  | +		micuser = authctxt->user;
 | ||||||
|  | +	ssh_gssapi_buildmic(&b, micuser, authctxt->service,
 | ||||||
|  |  	    "gssapi-with-mic"); | ||||||
|  |   | ||||||
|  |  	gssbuf.value = buffer_ptr(&b); | ||||||
|  | @@ -279,6 +286,8 @@ input_gssapi_mic(int type, u_int32_t ple
 | ||||||
|  |  		logit("GSSAPI MIC check failed"); | ||||||
|  |   | ||||||
|  |  	buffer_free(&b); | ||||||
|  | +	if (micuser != authctxt->user)
 | ||||||
|  | +		free(micuser);
 | ||||||
|  |  	free(mic.value); | ||||||
|  |   | ||||||
|  |  	authctxt->postponed = 0; | ||||||
|  | diff -up openssh-7.4p1/auth2-hostbased.c.role-mls openssh-7.4p1/auth2-hostbased.c
 | ||||||
|  | --- openssh-7.4p1/auth2-hostbased.c.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/auth2-hostbased.c	2016-12-23 12:19:58.586459382 +0100
 | ||||||
|  | @@ -121,7 +121,15 @@ userauth_hostbased(Authctxt *authctxt)
 | ||||||
|  |  	buffer_put_string(&b, session_id2, session_id2_len); | ||||||
|  |  	/* reconstruct packet */ | ||||||
|  |  	buffer_put_char(&b, SSH2_MSG_USERAUTH_REQUEST); | ||||||
|  | -	buffer_put_cstring(&b, authctxt->user);
 | ||||||
|  | +#ifdef WITH_SELINUX
 | ||||||
|  | +	if (authctxt->role) {
 | ||||||
|  | +		buffer_put_int(&b, strlen(authctxt->user)+strlen(authctxt->role)+1);
 | ||||||
|  | +		buffer_append(&b, authctxt->user, strlen(authctxt->user));
 | ||||||
|  | +		buffer_put_char(&b, '/');
 | ||||||
|  | +		buffer_append(&b, authctxt->role, strlen(authctxt->role));
 | ||||||
|  | +	} else 
 | ||||||
|  | +#endif
 | ||||||
|  | +		buffer_put_cstring(&b, authctxt->user);
 | ||||||
|  |  	buffer_put_cstring(&b, service); | ||||||
|  |  	buffer_put_cstring(&b, "hostbased"); | ||||||
|  |  	buffer_put_string(&b, pkalg, alen); | ||||||
|  | diff -up openssh-7.4p1/auth2-pubkey.c.role-mls openssh-7.4p1/auth2-pubkey.c
 | ||||||
|  | --- openssh-7.4p1/auth2-pubkey.c.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/auth2-pubkey.c	2016-12-23 12:19:58.587459379 +0100
 | ||||||
|  | @@ -151,9 +151,15 @@ userauth_pubkey(Authctxt *authctxt)
 | ||||||
|  |  		} | ||||||
|  |  		/* reconstruct packet */ | ||||||
|  |  		buffer_put_char(&b, SSH2_MSG_USERAUTH_REQUEST); | ||||||
|  | -		xasprintf(&userstyle, "%s%s%s", authctxt->user,
 | ||||||
|  | +		xasprintf(&userstyle, "%s%s%s%s%s", authctxt->user,
 | ||||||
|  |  		    authctxt->style ? ":" : "", | ||||||
|  | -		    authctxt->style ? authctxt->style : "");
 | ||||||
|  | +		    authctxt->style ? authctxt->style : "",
 | ||||||
|  | +#ifdef WITH_SELINUX
 | ||||||
|  | +		    authctxt->role ? "/" : "",
 | ||||||
|  | +		    authctxt->role ? authctxt->role : "");
 | ||||||
|  | +#else
 | ||||||
|  | +		    "", "");
 | ||||||
|  | +#endif
 | ||||||
|  |  		buffer_put_cstring(&b, userstyle); | ||||||
|  |  		free(userstyle); | ||||||
|  |  		buffer_put_cstring(&b, | ||||||
|  | diff -up openssh-7.4p1/auth.h.role-mls openssh-7.4p1/auth.h
 | ||||||
|  | --- openssh-7.4p1/auth.h.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/auth.h	2016-12-23 12:19:43.478510375 +0100
 | ||||||
|  | @@ -62,6 +62,9 @@ struct Authctxt {
 | ||||||
|  |  	char		*service; | ||||||
|  |  	struct passwd	*pw;		/* set if 'valid' */ | ||||||
|  |  	char		*style; | ||||||
|  | +#ifdef WITH_SELINUX
 | ||||||
|  | +	char		*role;
 | ||||||
|  | +#endif
 | ||||||
|  |  	void		*kbdintctxt; | ||||||
|  |  	char		*info;		/* Extra info for next auth_log */ | ||||||
|  |  #ifdef BSD_AUTH | ||||||
|  | diff -up openssh-7.4p1/auth-pam.c.role-mls openssh-7.4p1/auth-pam.c
 | ||||||
|  | --- openssh-7.4p1/auth-pam.c.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/auth-pam.c	2016-12-23 12:19:43.477510378 +0100
 | ||||||
|  | @@ -1087,7 +1087,7 @@ is_pam_session_open(void)
 | ||||||
|  |   * during the ssh authentication process. | ||||||
|  |   */ | ||||||
|  |  int | ||||||
|  | -do_pam_putenv(char *name, char *value)
 | ||||||
|  | +do_pam_putenv(char *name, const char *value)
 | ||||||
|  |  { | ||||||
|  |  	int ret = 1; | ||||||
|  |  #ifdef HAVE_PAM_PUTENV | ||||||
|  | diff -up openssh-7.4p1/auth-pam.h.role-mls openssh-7.4p1/auth-pam.h
 | ||||||
|  | --- openssh-7.4p1/auth-pam.h.role-mls	2016-12-23 12:19:43.478510375 +0100
 | ||||||
|  | +++ openssh-7.4p1/auth-pam.h	2016-12-23 12:21:44.698101234 +0100
 | ||||||
|  | @@ -31,7 +31,7 @@ u_int do_pam_account(void);
 | ||||||
|  |  void do_pam_session(void); | ||||||
|  |  void do_pam_setcred(int ); | ||||||
|  |  void do_pam_chauthtok(void); | ||||||
|  | -int do_pam_putenv(char *, char *);
 | ||||||
|  | +int do_pam_putenv(char *, const char *);
 | ||||||
|  |  char ** fetch_pam_environment(void); | ||||||
|  |  char ** fetch_pam_child_environment(void); | ||||||
|  |  void free_pam_environment(char **); | ||||||
|  | diff -up openssh-7.4p1/misc.c.role-mls openssh-7.4p1/misc.c
 | ||||||
|  | --- openssh-7.4p1/misc.c.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/misc.c	2016-12-23 12:19:58.587459379 +0100
 | ||||||
| @@ -432,6 +432,7 @@ char *
 | @@ -432,6 +432,7 @@ char *
 | ||||||
|  colon(char *cp) |  colon(char *cp) | ||||||
|  { |  { | ||||||
| @ -216,10 +178,10 @@ diff -up openssh/misc.c.role-mls openssh/misc.c | |||||||
|  	} |  	} | ||||||
|  	return NULL; |  	return NULL; | ||||||
|  } |  } | ||||||
| diff -up openssh/monitor.c.role-mls openssh/monitor.c
 | diff -up openssh-7.4p1/monitor.c.role-mls openssh-7.4p1/monitor.c
 | ||||||
| --- openssh/monitor.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 | --- openssh-7.4p1/monitor.c.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/monitor.c	2016-07-26 12:44:19.363379490 +0200
 | +++ openssh-7.4p1/monitor.c	2016-12-23 12:23:03.503835248 +0100
 | ||||||
| @@ -128,6 +128,9 @@ int mm_answer_sign(int, Buffer *);
 | @@ -127,6 +127,9 @@ int mm_answer_sign(int, Buffer *);
 | ||||||
|  int mm_answer_pwnamallow(int, Buffer *); |  int mm_answer_pwnamallow(int, Buffer *); | ||||||
|  int mm_answer_auth2_read_banner(int, Buffer *); |  int mm_answer_auth2_read_banner(int, Buffer *); | ||||||
|  int mm_answer_authserv(int, Buffer *); |  int mm_answer_authserv(int, Buffer *); | ||||||
| @ -229,7 +191,7 @@ diff -up openssh/monitor.c.role-mls openssh/monitor.c | |||||||
|  int mm_answer_authpassword(int, Buffer *); |  int mm_answer_authpassword(int, Buffer *); | ||||||
|  int mm_answer_bsdauthquery(int, Buffer *); |  int mm_answer_bsdauthquery(int, Buffer *); | ||||||
|  int mm_answer_bsdauthrespond(int, Buffer *); |  int mm_answer_bsdauthrespond(int, Buffer *); | ||||||
| @@ -207,6 +210,9 @@ struct mon_table mon_dispatch_proto20[]
 | @@ -202,6 +205,9 @@ struct mon_table mon_dispatch_proto20[]
 | ||||||
|      {MONITOR_REQ_SIGN, MON_ONCE, mm_answer_sign}, |      {MONITOR_REQ_SIGN, MON_ONCE, mm_answer_sign}, | ||||||
|      {MONITOR_REQ_PWNAM, MON_ONCE, mm_answer_pwnamallow}, |      {MONITOR_REQ_PWNAM, MON_ONCE, mm_answer_pwnamallow}, | ||||||
|      {MONITOR_REQ_AUTHSERV, MON_ONCE, mm_answer_authserv}, |      {MONITOR_REQ_AUTHSERV, MON_ONCE, mm_answer_authserv}, | ||||||
| @ -239,17 +201,17 @@ diff -up openssh/monitor.c.role-mls openssh/monitor.c | |||||||
|      {MONITOR_REQ_AUTH2_READ_BANNER, MON_ONCE, mm_answer_auth2_read_banner}, |      {MONITOR_REQ_AUTH2_READ_BANNER, MON_ONCE, mm_answer_auth2_read_banner}, | ||||||
|      {MONITOR_REQ_AUTHPASSWORD, MON_AUTH, mm_answer_authpassword}, |      {MONITOR_REQ_AUTHPASSWORD, MON_AUTH, mm_answer_authpassword}, | ||||||
|  #ifdef USE_PAM |  #ifdef USE_PAM | ||||||
| @@ -863,6 +869,9 @@ mm_answer_pwnamallow(int sock, Buffer *m
 | @@ -769,6 +775,9 @@ mm_answer_pwnamallow(int sock, Buffer *m
 | ||||||
|  	else { |   | ||||||
|  	/* Allow service/style information on the auth context */ |  	/* Allow service/style information on the auth context */ | ||||||
|  	monitor_permit(mon_dispatch, MONITOR_REQ_AUTHSERV, 1); |  	monitor_permit(mon_dispatch, MONITOR_REQ_AUTHSERV, 1); | ||||||
| +#ifdef WITH_SELINUX
 | +#ifdef WITH_SELINUX
 | ||||||
| +	monitor_permit(mon_dispatch, MONITOR_REQ_AUTHROLE, 1);
 | +	monitor_permit(mon_dispatch, MONITOR_REQ_AUTHROLE, 1);
 | ||||||
| +#endif
 | +#endif
 | ||||||
|  	monitor_permit(mon_dispatch, MONITOR_REQ_AUTH2_READ_BANNER, 1); |  	monitor_permit(mon_dispatch, MONITOR_REQ_AUTH2_READ_BANNER, 1); | ||||||
|  	} |   | ||||||
|  #ifdef USE_PAM |  #ifdef USE_PAM | ||||||
| @@ -904,6 +913,25 @@ mm_answer_authserv(int sock, Buffer *m)
 | @@ -810,6 +819,25 @@ mm_answer_authserv(int sock, Buffer *m)
 | ||||||
|  	return (0); |  	return (0); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -275,7 +237,7 @@ diff -up openssh/monitor.c.role-mls openssh/monitor.c | |||||||
|  int |  int | ||||||
|  mm_answer_authpassword(int sock, Buffer *m) |  mm_answer_authpassword(int sock, Buffer *m) | ||||||
|  { |  { | ||||||
| @@ -1300,7 +1328,7 @@ monitor_valid_userblob(u_char *data, u_i
 | @@ -1208,7 +1236,7 @@ monitor_valid_userblob(u_char *data, u_i
 | ||||||
|  { |  { | ||||||
|  	Buffer b; |  	Buffer b; | ||||||
|  	u_char *p; |  	u_char *p; | ||||||
| @ -284,7 +246,7 @@ diff -up openssh/monitor.c.role-mls openssh/monitor.c | |||||||
|  	u_int len; |  	u_int len; | ||||||
|  	int fail = 0; |  	int fail = 0; | ||||||
|   |   | ||||||
| @@ -1326,6 +1354,8 @@ monitor_valid_userblob(u_char *data, u_i
 | @@ -1234,6 +1262,8 @@ monitor_valid_userblob(u_char *data, u_i
 | ||||||
|  	if (buffer_get_char(&b) != SSH2_MSG_USERAUTH_REQUEST) |  	if (buffer_get_char(&b) != SSH2_MSG_USERAUTH_REQUEST) | ||||||
|  		fail++; |  		fail++; | ||||||
|  	cp = buffer_get_cstring(&b, NULL); |  	cp = buffer_get_cstring(&b, NULL); | ||||||
| @ -293,7 +255,7 @@ diff -up openssh/monitor.c.role-mls openssh/monitor.c | |||||||
|  	xasprintf(&userstyle, "%s%s%s", authctxt->user, |  	xasprintf(&userstyle, "%s%s%s", authctxt->user, | ||||||
|  	    authctxt->style ? ":" : "", |  	    authctxt->style ? ":" : "", | ||||||
|  	    authctxt->style ? authctxt->style : ""); |  	    authctxt->style ? authctxt->style : ""); | ||||||
| @@ -1361,7 +1391,7 @@ monitor_valid_hostbasedblob(u_char *data
 | @@ -1269,7 +1299,7 @@ monitor_valid_hostbasedblob(u_char *data
 | ||||||
|      char *chost) |      char *chost) | ||||||
|  { |  { | ||||||
|  	Buffer b; |  	Buffer b; | ||||||
| @ -302,7 +264,7 @@ diff -up openssh/monitor.c.role-mls openssh/monitor.c | |||||||
|  	u_int len; |  	u_int len; | ||||||
|  	int fail = 0; |  	int fail = 0; | ||||||
|   |   | ||||||
| @@ -1378,6 +1408,8 @@ monitor_valid_hostbasedblob(u_char *data
 | @@ -1286,6 +1316,8 @@ monitor_valid_hostbasedblob(u_char *data
 | ||||||
|  	if (buffer_get_char(&b) != SSH2_MSG_USERAUTH_REQUEST) |  	if (buffer_get_char(&b) != SSH2_MSG_USERAUTH_REQUEST) | ||||||
|  		fail++; |  		fail++; | ||||||
|  	p = buffer_get_cstring(&b, NULL); |  	p = buffer_get_cstring(&b, NULL); | ||||||
| @ -311,9 +273,9 @@ diff -up openssh/monitor.c.role-mls openssh/monitor.c | |||||||
|  	xasprintf(&userstyle, "%s%s%s", authctxt->user, |  	xasprintf(&userstyle, "%s%s%s", authctxt->user, | ||||||
|  	    authctxt->style ? ":" : "", |  	    authctxt->style ? ":" : "", | ||||||
|  	    authctxt->style ? authctxt->style : ""); |  	    authctxt->style ? authctxt->style : ""); | ||||||
| diff -up openssh/monitor.h.role-mls openssh/monitor.h
 | diff -up openssh-7.4p1/monitor.h.role-mls openssh-7.4p1/monitor.h
 | ||||||
| --- openssh/monitor.h.role-mls	2016-07-24 13:50:13.000000000 +0200
 | --- openssh-7.4p1/monitor.h.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/monitor.h	2016-07-26 12:37:48.795593331 +0200
 | +++ openssh-7.4p1/monitor.h	2016-12-23 12:19:58.588459376 +0100
 | ||||||
| @@ -57,6 +57,10 @@ enum monitor_reqtype {
 | @@ -57,6 +57,10 @@ enum monitor_reqtype {
 | ||||||
|  	MONITOR_REQ_GSSCHECKMIC = 48, MONITOR_ANS_GSSCHECKMIC = 49, |  	MONITOR_REQ_GSSCHECKMIC = 48, MONITOR_ANS_GSSCHECKMIC = 49, | ||||||
|  	MONITOR_REQ_TERM = 50, |  	MONITOR_REQ_TERM = 50, | ||||||
| @ -325,10 +287,10 @@ diff -up openssh/monitor.h.role-mls openssh/monitor.h | |||||||
|  	MONITOR_REQ_PAM_START = 100, |  	MONITOR_REQ_PAM_START = 100, | ||||||
|  	MONITOR_REQ_PAM_ACCOUNT = 102, MONITOR_ANS_PAM_ACCOUNT = 103, |  	MONITOR_REQ_PAM_ACCOUNT = 102, MONITOR_ANS_PAM_ACCOUNT = 103, | ||||||
|  	MONITOR_REQ_PAM_INIT_CTX = 104, MONITOR_ANS_PAM_INIT_CTX = 105, |  	MONITOR_REQ_PAM_INIT_CTX = 104, MONITOR_ANS_PAM_INIT_CTX = 105, | ||||||
| diff -up openssh/monitor_wrap.c.role-mls openssh/monitor_wrap.c
 | diff -up openssh-7.4p1/monitor_wrap.c.role-mls openssh-7.4p1/monitor_wrap.c
 | ||||||
| --- openssh/monitor_wrap.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 | --- openssh-7.4p1/monitor_wrap.c.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/monitor_wrap.c	2016-07-26 12:37:48.795593331 +0200
 | +++ openssh-7.4p1/monitor_wrap.c	2016-12-23 12:19:58.588459376 +0100
 | ||||||
| @@ -346,6 +346,25 @@ mm_inform_authserv(char *service, char *
 | @@ -345,6 +345,25 @@ mm_inform_authserv(char *service, char *
 | ||||||
|  	buffer_free(&m); |  	buffer_free(&m); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -354,9 +316,9 @@ diff -up openssh/monitor_wrap.c.role-mls openssh/monitor_wrap.c | |||||||
|  /* Do the password authentication */ |  /* Do the password authentication */ | ||||||
|  int |  int | ||||||
|  mm_auth_password(Authctxt *authctxt, char *password) |  mm_auth_password(Authctxt *authctxt, char *password) | ||||||
| diff -up openssh/monitor_wrap.h.role-mls openssh/monitor_wrap.h
 | diff -up openssh-7.4p1/monitor_wrap.h.role-mls openssh-7.4p1/monitor_wrap.h
 | ||||||
| --- openssh/monitor_wrap.h.role-mls	2016-07-24 13:50:13.000000000 +0200
 | --- openssh-7.4p1/monitor_wrap.h.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/monitor_wrap.h	2016-07-26 12:37:48.795593331 +0200
 | +++ openssh-7.4p1/monitor_wrap.h	2016-12-23 12:19:58.588459376 +0100
 | ||||||
| @@ -42,6 +42,9 @@ int mm_is_monitor(void);
 | @@ -42,6 +42,9 @@ int mm_is_monitor(void);
 | ||||||
|  DH *mm_choose_dh(int, int, int); |  DH *mm_choose_dh(int, int, int); | ||||||
|  int mm_key_sign(Key *, u_char **, u_int *, const u_char *, u_int, const char *); |  int mm_key_sign(Key *, u_char **, u_int *, const u_char *, u_int, const char *); | ||||||
| @ -367,21 +329,90 @@ diff -up openssh/monitor_wrap.h.role-mls openssh/monitor_wrap.h | |||||||
|  struct passwd *mm_getpwnamallow(const char *); |  struct passwd *mm_getpwnamallow(const char *); | ||||||
|  char *mm_auth2_read_banner(void); |  char *mm_auth2_read_banner(void); | ||||||
|  int mm_auth_password(struct Authctxt *, char *); |  int mm_auth_password(struct Authctxt *, char *); | ||||||
| diff -up openssh/openbsd-compat/Makefile.in.role-mls openssh/openbsd-compat/Makefile.in
 | diff -up openssh-7.4p1/openbsd-compat/Makefile.in.role-mls openssh-7.4p1/openbsd-compat/Makefile.in
 | ||||||
| --- openssh/openbsd-compat/Makefile.in.role-mls	2016-07-24 13:50:13.000000000 +0200
 | --- openssh-7.4p1/openbsd-compat/Makefile.in.role-mls	2016-12-23 12:19:58.588459376 +0100
 | ||||||
| +++ openssh/openbsd-compat/Makefile.in	2016-07-26 12:37:48.795593331 +0200
 | +++ openssh-7.4p1/openbsd-compat/Makefile.in	2016-12-23 12:24:06.042643938 +0100
 | ||||||
| @@ -20,7 +20,7 @@ OPENBSD=base64.o basename.o bcrypt_pbkdf
 | @@ -20,7 +20,7 @@ OPENBSD=base64.o basename.o bcrypt_pbkdf
 | ||||||
|   |   | ||||||
|  COMPAT=arc4random.o bsd-asprintf.o bsd-closefrom.o bsd-cray.o bsd-cygwin_util.o bsd-getpeereid.o getrrsetbyname-ldns.o bsd-err.o bsd-misc.o bsd-nextstep.o bsd-openpty.o bsd-poll.o bsd-setres_id.o bsd-snprintf.o bsd-statvfs.o bsd-waitpid.o fake-rfc2553.o openssl-compat.o xmmap.o xcrypt.o kludge-fd_set.o |  COMPAT=arc4random.o bsd-asprintf.o bsd-closefrom.o bsd-cray.o bsd-cygwin_util.o bsd-getpeereid.o getrrsetbyname-ldns.o bsd-err.o bsd-misc.o bsd-nextstep.o bsd-openpty.o bsd-poll.o bsd-setres_id.o bsd-snprintf.o bsd-statvfs.o bsd-waitpid.o fake-rfc2553.o openssl-compat.o xcrypt.o kludge-fd_set.o | ||||||
|   |   | ||||||
| -PORTS=port-aix.o port-irix.o port-linux.o port-solaris.o port-tun.o port-uw.o
 | -PORTS=port-aix.o port-irix.o port-linux.o port-solaris.o port-tun.o port-uw.o
 | ||||||
| +PORTS=port-aix.o port-irix.o port-linux.o port-linux-sshd.o port-solaris.o port-tun.o port-uw.o
 | +PORTS=port-aix.o port-irix.o port-linux.o port-linux-sshd.o port-solaris.o port-tun.o port-uw.o
 | ||||||
|   |   | ||||||
|  .c.o: |  .c.o: | ||||||
|  	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< |  	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< | ||||||
| diff -up openssh/openbsd-compat/port-linux-sshd.c.role-mls openssh/openbsd-compat/port-linux-sshd.c
 | diff -up openssh-7.4p1/openbsd-compat/port-linux.c.role-mls openssh-7.4p1/openbsd-compat/port-linux.c
 | ||||||
| --- openssh/openbsd-compat/port-linux-sshd.c.role-mls	2016-07-26 12:37:48.796593331 +0200
 | --- openssh-7.4p1/openbsd-compat/port-linux.c.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/openbsd-compat/port-linux-sshd.c	2016-07-26 12:37:48.796593331 +0200
 | +++ openssh-7.4p1/openbsd-compat/port-linux.c	2016-12-23 12:19:58.590459369 +0100
 | ||||||
|  | @@ -101,37 +101,6 @@ ssh_selinux_getctxbyname(char *pwname)
 | ||||||
|  |  	return sc; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -/* Set the execution context to the default for the specified user */
 | ||||||
|  | -void
 | ||||||
|  | -ssh_selinux_setup_exec_context(char *pwname)
 | ||||||
|  | -{
 | ||||||
|  | -	security_context_t user_ctx = NULL;
 | ||||||
|  | -
 | ||||||
|  | -	if (!ssh_selinux_enabled())
 | ||||||
|  | -		return;
 | ||||||
|  | -
 | ||||||
|  | -	debug3("%s: setting execution context", __func__);
 | ||||||
|  | -
 | ||||||
|  | -	user_ctx = ssh_selinux_getctxbyname(pwname);
 | ||||||
|  | -	if (setexeccon(user_ctx) != 0) {
 | ||||||
|  | -		switch (security_getenforce()) {
 | ||||||
|  | -		case -1:
 | ||||||
|  | -			fatal("%s: security_getenforce() failed", __func__);
 | ||||||
|  | -		case 0:
 | ||||||
|  | -			error("%s: Failed to set SELinux execution "
 | ||||||
|  | -			    "context for %s", __func__, pwname);
 | ||||||
|  | -			break;
 | ||||||
|  | -		default:
 | ||||||
|  | -			fatal("%s: Failed to set SELinux execution context "
 | ||||||
|  | -			    "for %s (in enforcing mode)", __func__, pwname);
 | ||||||
|  | -		}
 | ||||||
|  | -	}
 | ||||||
|  | -	if (user_ctx != NULL)
 | ||||||
|  | -		freecon(user_ctx);
 | ||||||
|  | -
 | ||||||
|  | -	debug3("%s: done", __func__);
 | ||||||
|  | -}
 | ||||||
|  | -
 | ||||||
|  |  /* Set the TTY context for the specified user */ | ||||||
|  |  void | ||||||
|  |  ssh_selinux_setup_pty(char *pwname, const char *tty) | ||||||
|  | @@ -145,7 +114,11 @@ ssh_selinux_setup_pty(char *pwname, cons
 | ||||||
|  |   | ||||||
|  |  	debug3("%s: setting TTY context on %s", __func__, tty); | ||||||
|  |   | ||||||
|  | -	user_ctx = ssh_selinux_getctxbyname(pwname);
 | ||||||
|  | +	if (getexeccon(&user_ctx) != 0) {
 | ||||||
|  | +		error("%s: getexeccon: %s", __func__, strerror(errno));
 | ||||||
|  | +		goto out;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  |   | ||||||
|  |  	/* XXX: should these calls fatal() upon failure in enforcing mode? */ | ||||||
|  |   | ||||||
|  | diff -up openssh-7.4p1/openbsd-compat/port-linux.h.role-mls openssh-7.4p1/openbsd-compat/port-linux.h
 | ||||||
|  | --- openssh-7.4p1/openbsd-compat/port-linux.h.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/openbsd-compat/port-linux.h	2016-12-23 12:19:58.591459365 +0100
 | ||||||
|  | @@ -20,9 +20,10 @@
 | ||||||
|  |  #ifdef WITH_SELINUX | ||||||
|  |  int ssh_selinux_enabled(void); | ||||||
|  |  void ssh_selinux_setup_pty(char *, const char *); | ||||||
|  | -void ssh_selinux_setup_exec_context(char *);
 | ||||||
|  |  void ssh_selinux_change_context(const char *); | ||||||
|  |  void ssh_selinux_setfscreatecon(const char *); | ||||||
|  | +
 | ||||||
|  | +void sshd_selinux_setup_exec_context(char *);
 | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  |  #ifdef LINUX_OOM_ADJUST | ||||||
|  | diff -up openssh-7.4p1/openbsd-compat/port-linux-sshd.c.role-mls openssh-7.4p1/openbsd-compat/port-linux-sshd.c
 | ||||||
|  | --- openssh-7.4p1/openbsd-compat/port-linux-sshd.c.role-mls	2016-12-23 12:19:58.590459369 +0100
 | ||||||
|  | +++ openssh-7.4p1/openbsd-compat/port-linux-sshd.c	2016-12-23 12:19:58.590459369 +0100
 | ||||||
| @@ -0,0 +1,424 @@
 | @@ -0,0 +1,424 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * Copyright (c) 2005 Daniel Walsh <dwalsh@redhat.com>
 | + * Copyright (c) 2005 Daniel Walsh <dwalsh@redhat.com>
 | ||||||
| @ -807,79 +838,10 @@ diff -up openssh/openbsd-compat/port-linux-sshd.c.role-mls openssh/openbsd-compa | |||||||
| +#endif
 | +#endif
 | ||||||
| +#endif
 | +#endif
 | ||||||
| +
 | +
 | ||||||
| diff -up openssh/openbsd-compat/port-linux.c.role-mls openssh/openbsd-compat/port-linux.c
 | diff -up openssh-7.4p1/platform.c.role-mls openssh-7.4p1/platform.c
 | ||||||
| --- openssh/openbsd-compat/port-linux.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 | --- openssh-7.4p1/platform.c.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/openbsd-compat/port-linux.c	2016-07-26 12:37:48.796593331 +0200
 | +++ openssh-7.4p1/platform.c	2016-12-23 12:19:58.591459365 +0100
 | ||||||
| @@ -103,37 +103,6 @@ ssh_selinux_getctxbyname(char *pwname)
 | @@ -184,7 +184,7 @@ platform_setusercontext_post_groups(stru
 | ||||||
|  	return sc; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| -/* Set the execution context to the default for the specified user */
 |  | ||||||
| -void
 |  | ||||||
| -ssh_selinux_setup_exec_context(char *pwname)
 |  | ||||||
| -{
 |  | ||||||
| -	security_context_t user_ctx = NULL;
 |  | ||||||
| -
 |  | ||||||
| -	if (!ssh_selinux_enabled())
 |  | ||||||
| -		return;
 |  | ||||||
| -
 |  | ||||||
| -	debug3("%s: setting execution context", __func__);
 |  | ||||||
| -
 |  | ||||||
| -	user_ctx = ssh_selinux_getctxbyname(pwname);
 |  | ||||||
| -	if (setexeccon(user_ctx) != 0) {
 |  | ||||||
| -		switch (security_getenforce()) {
 |  | ||||||
| -		case -1:
 |  | ||||||
| -			fatal("%s: security_getenforce() failed", __func__);
 |  | ||||||
| -		case 0:
 |  | ||||||
| -			error("%s: Failed to set SELinux execution "
 |  | ||||||
| -			    "context for %s", __func__, pwname);
 |  | ||||||
| -			break;
 |  | ||||||
| -		default:
 |  | ||||||
| -			fatal("%s: Failed to set SELinux execution context "
 |  | ||||||
| -			    "for %s (in enforcing mode)", __func__, pwname);
 |  | ||||||
| -		}
 |  | ||||||
| -	}
 |  | ||||||
| -	if (user_ctx != NULL)
 |  | ||||||
| -		freecon(user_ctx);
 |  | ||||||
| -
 |  | ||||||
| -	debug3("%s: done", __func__);
 |  | ||||||
| -}
 |  | ||||||
| -
 |  | ||||||
|  /* Set the TTY context for the specified user */ |  | ||||||
|  void |  | ||||||
|  ssh_selinux_setup_pty(char *pwname, const char *tty) |  | ||||||
| @@ -147,7 +116,11 @@ ssh_selinux_setup_pty(char *pwname, cons
 |  | ||||||
|   |  | ||||||
|  	debug3("%s: setting TTY context on %s", __func__, tty); |  | ||||||
|   |  | ||||||
| -	user_ctx = ssh_selinux_getctxbyname(pwname);
 |  | ||||||
| +	if (getexeccon(&user_ctx) != 0) {
 |  | ||||||
| +		error("%s: getexeccon: %s", __func__, strerror(errno));
 |  | ||||||
| +		goto out;
 |  | ||||||
| +	}
 |  | ||||||
| +
 |  | ||||||
|   |  | ||||||
|  	/* XXX: should these calls fatal() upon failure in enforcing mode? */ |  | ||||||
|   |  | ||||||
| diff -up openssh/openbsd-compat/port-linux.h.role-mls openssh/openbsd-compat/port-linux.h
 |  | ||||||
| --- openssh/openbsd-compat/port-linux.h.role-mls	2016-07-24 13:50:13.000000000 +0200
 |  | ||||||
| +++ openssh/openbsd-compat/port-linux.h	2016-07-26 12:37:48.796593331 +0200
 |  | ||||||
| @@ -22,9 +22,10 @@
 |  | ||||||
|  #ifdef WITH_SELINUX |  | ||||||
|  int ssh_selinux_enabled(void); |  | ||||||
|  void ssh_selinux_setup_pty(char *, const char *); |  | ||||||
| -void ssh_selinux_setup_exec_context(char *);
 |  | ||||||
|  void ssh_selinux_change_context(const char *); |  | ||||||
|  void ssh_selinux_setfscreatecon(const char *); |  | ||||||
| +
 |  | ||||||
| +void sshd_selinux_setup_exec_context(char *);
 |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
|  #ifdef LINUX_OOM_ADJUST |  | ||||||
| diff -up openssh/platform.c.role-mls openssh/platform.c
 |  | ||||||
| --- openssh/platform.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 |  | ||||||
| +++ openssh/platform.c	2016-07-26 12:37:48.796593331 +0200
 |  | ||||||
| @@ -186,7 +186,7 @@ platform_setusercontext_post_groups(stru
 |  | ||||||
|  	} |  	} | ||||||
|  #endif /* HAVE_SETPCRED */ |  #endif /* HAVE_SETPCRED */ | ||||||
|  #ifdef WITH_SELINUX |  #ifdef WITH_SELINUX | ||||||
| @ -888,10 +850,10 @@ diff -up openssh/platform.c.role-mls openssh/platform.c | |||||||
|  #endif |  #endif | ||||||
|  } |  } | ||||||
|   |   | ||||||
| diff -up openssh/sshd.c.role-mls openssh/sshd.c
 | diff -up openssh-7.4p1/sshd.c.role-mls openssh-7.4p1/sshd.c
 | ||||||
| --- openssh/sshd.c.role-mls	2016-07-24 13:50:13.000000000 +0200
 | --- openssh-7.4p1/sshd.c.role-mls	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/sshd.c	2016-07-26 12:37:48.796593331 +0200
 | +++ openssh-7.4p1/sshd.c	2016-12-23 12:19:58.591459365 +0100
 | ||||||
| @@ -2295,6 +2295,9 @@ main(int ac, char **av)
 | @@ -2053,6 +2053,9 @@ main(int ac, char **av)
 | ||||||
|  		restore_uid(); |  		restore_uid(); | ||||||
|  	} |  	} | ||||||
|  #endif |  #endif | ||||||
|  | |||||||
| @ -1,22 +1,7 @@ | |||||||
| diff -up openssh-6.8p1/channels.c.coverity openssh-6.8p1/channels.c
 | diff -up openssh-7.4p1/channels.c.coverity openssh-7.4p1/channels.c
 | ||||||
| --- openssh-6.8p1/channels.c.coverity	2015-03-18 17:21:51.815265002 +0100
 | --- openssh-7.4p1/channels.c.coverity	2016-12-23 16:40:26.881788686 +0100
 | ||||||
| +++ openssh-6.8p1/channels.c	2015-03-18 17:21:51.896264833 +0100
 | +++ openssh-7.4p1/channels.c	2016-12-23 16:42:36.244818763 +0100
 | ||||||
| @@ -243,11 +243,11 @@ channel_register_fds(Channel *c, int rfd
 | @@ -288,11 +288,11 @@ channel_register_fds(Channel *c, int rfd
 | ||||||
|  	channel_max_fd = MAX(channel_max_fd, wfd); |  | ||||||
|  	channel_max_fd = MAX(channel_max_fd, efd); |  | ||||||
|   |  | ||||||
| -	if (rfd != -1)
 |  | ||||||
| +	if (rfd >= 0)
 |  | ||||||
|  		fcntl(rfd, F_SETFD, FD_CLOEXEC); |  | ||||||
| -	if (wfd != -1 && wfd != rfd)
 |  | ||||||
| +	if (wfd >= 0 && wfd != rfd)
 |  | ||||||
|  		fcntl(wfd, F_SETFD, FD_CLOEXEC); |  | ||||||
| -	if (efd != -1 && efd != rfd && efd != wfd)
 |  | ||||||
| +	if (efd >= 0 && efd != rfd && efd != wfd)
 |  | ||||||
|  		fcntl(efd, F_SETFD, FD_CLOEXEC); |  | ||||||
|   |  | ||||||
|  	c->rfd = rfd; |  | ||||||
| @@ -265,11 +265,11 @@ channel_register_fds(Channel *c, int rfd
 |  | ||||||
|   |   | ||||||
|  	/* enable nonblocking mode */ |  	/* enable nonblocking mode */ | ||||||
|  	if (nonblock) { |  	if (nonblock) { | ||||||
| @ -31,10 +16,10 @@ diff -up openssh-6.8p1/channels.c.coverity openssh-6.8p1/channels.c | |||||||
|  			set_nonblock(efd); |  			set_nonblock(efd); | ||||||
|  	} |  	} | ||||||
|  } |  } | ||||||
| diff -up openssh-6.8p1/monitor.c.coverity openssh-6.8p1/monitor.c
 | diff -up openssh-7.4p1/monitor.c.coverity openssh-7.4p1/monitor.c
 | ||||||
| --- openssh-6.8p1/monitor.c.coverity	2015-03-18 17:21:51.887264852 +0100
 | --- openssh-7.4p1/monitor.c.coverity	2016-12-23 16:40:26.888788688 +0100
 | ||||||
| +++ openssh-6.8p1/monitor.c	2015-03-18 17:21:51.897264831 +0100
 | +++ openssh-7.4p1/monitor.c	2016-12-23 16:40:26.900788691 +0100
 | ||||||
| @@ -444,7 +444,7 @@ monitor_child_preauth(Authctxt *_authctx
 | @@ -411,7 +411,7 @@ monitor_child_preauth(Authctxt *_authctx
 | ||||||
|  	mm_get_keystate(pmonitor); |  	mm_get_keystate(pmonitor); | ||||||
|   |   | ||||||
|  	/* Drain any buffered messages from the child */ |  	/* Drain any buffered messages from the child */ | ||||||
| @ -43,10 +28,10 @@ diff -up openssh-6.8p1/monitor.c.coverity openssh-6.8p1/monitor.c | |||||||
|  		; |  		; | ||||||
|   |   | ||||||
|  	close(pmonitor->m_sendfd); |  	close(pmonitor->m_sendfd); | ||||||
| diff -up openssh-6.8p1/monitor_wrap.c.coverity openssh-6.8p1/monitor_wrap.c
 | diff -up openssh-7.4p1/monitor_wrap.c.coverity openssh-7.4p1/monitor_wrap.c
 | ||||||
| --- openssh-6.8p1/monitor_wrap.c.coverity	2015-03-18 17:21:51.888264849 +0100
 | --- openssh-7.4p1/monitor_wrap.c.coverity	2016-12-23 16:40:26.892788689 +0100
 | ||||||
| +++ openssh-6.8p1/monitor_wrap.c	2015-03-18 17:21:51.897264831 +0100
 | +++ openssh-7.4p1/monitor_wrap.c	2016-12-23 16:40:26.900788691 +0100
 | ||||||
| @@ -533,10 +533,10 @@ mm_pty_allocate(int *ptyfd, int *ttyfd,
 | @@ -525,10 +525,10 @@ mm_pty_allocate(int *ptyfd, int *ttyfd,
 | ||||||
|  	if ((tmp1 = dup(pmonitor->m_recvfd)) == -1 || |  	if ((tmp1 = dup(pmonitor->m_recvfd)) == -1 || | ||||||
|  	    (tmp2 = dup(pmonitor->m_recvfd)) == -1) { |  	    (tmp2 = dup(pmonitor->m_recvfd)) == -1) { | ||||||
|  		error("%s: cannot allocate fds for pty", __func__); |  		error("%s: cannot allocate fds for pty", __func__); | ||||||
| @ -60,9 +45,9 @@ diff -up openssh-6.8p1/monitor_wrap.c.coverity openssh-6.8p1/monitor_wrap.c | |||||||
|  		return 0; |  		return 0; | ||||||
|  	} |  	} | ||||||
|  	close(tmp1); |  	close(tmp1); | ||||||
| diff -up openssh-6.8p1/openbsd-compat/bindresvport.c.coverity openssh-6.8p1/openbsd-compat/bindresvport.c
 | diff -up openssh-7.4p1/openbsd-compat/bindresvport.c.coverity openssh-7.4p1/openbsd-compat/bindresvport.c
 | ||||||
| --- openssh-6.8p1/openbsd-compat/bindresvport.c.coverity	2015-03-17 06:49:20.000000000 +0100
 | --- openssh-7.4p1/openbsd-compat/bindresvport.c.coverity	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-6.8p1/openbsd-compat/bindresvport.c	2015-03-18 17:21:51.897264831 +0100
 | +++ openssh-7.4p1/openbsd-compat/bindresvport.c	2016-12-23 16:40:26.901788691 +0100
 | ||||||
| @@ -58,7 +58,7 @@ bindresvport_sa(int sd, struct sockaddr
 | @@ -58,7 +58,7 @@ bindresvport_sa(int sd, struct sockaddr
 | ||||||
|  	struct sockaddr_in6 *in6; |  	struct sockaddr_in6 *in6; | ||||||
|  	u_int16_t *portp; |  	u_int16_t *portp; | ||||||
| @ -72,10 +57,10 @@ diff -up openssh-6.8p1/openbsd-compat/bindresvport.c.coverity openssh-6.8p1/open | |||||||
|  	int i; |  	int i; | ||||||
|   |   | ||||||
|  	if (sa == NULL) { |  	if (sa == NULL) { | ||||||
| diff -up openssh-6.8p1/scp.c.coverity openssh-6.8p1/scp.c
 | diff -up openssh-7.4p1/scp.c.coverity openssh-7.4p1/scp.c
 | ||||||
| --- openssh-6.8p1/scp.c.coverity	2015-03-18 17:21:51.868264891 +0100
 | --- openssh-7.4p1/scp.c.coverity	2016-12-23 16:40:26.856788681 +0100
 | ||||||
| +++ openssh-6.8p1/scp.c	2015-03-18 17:21:58.281251460 +0100
 | +++ openssh-7.4p1/scp.c	2016-12-23 16:40:26.901788691 +0100
 | ||||||
| @@ -156,7 +156,7 @@ killchild(int signo)
 | @@ -157,7 +157,7 @@ killchild(int signo)
 | ||||||
|  { |  { | ||||||
|  	if (do_cmd_pid > 1) { |  	if (do_cmd_pid > 1) { | ||||||
|  		kill(do_cmd_pid, signo ? signo : SIGTERM); |  		kill(do_cmd_pid, signo ? signo : SIGTERM); | ||||||
| @ -84,10 +69,10 @@ diff -up openssh-6.8p1/scp.c.coverity openssh-6.8p1/scp.c | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	if (signo) |  	if (signo) | ||||||
| diff -up openssh-6.8p1/servconf.c.coverity openssh-6.8p1/servconf.c
 | diff -up openssh-7.4p1/servconf.c.coverity openssh-7.4p1/servconf.c
 | ||||||
| --- openssh-6.8p1/servconf.c.coverity	2015-03-18 17:21:51.893264839 +0100
 | --- openssh-7.4p1/servconf.c.coverity	2016-12-23 16:40:26.896788690 +0100
 | ||||||
| +++ openssh-6.8p1/servconf.c	2015-03-18 17:21:58.281251460 +0100
 | +++ openssh-7.4p1/servconf.c	2016-12-23 16:40:26.901788691 +0100
 | ||||||
| @@ -1475,7 +1475,7 @@ process_server_config_line(ServerOptions
 | @@ -1547,7 +1547,7 @@ process_server_config_line(ServerOptions
 | ||||||
|  			fatal("%s line %d: Missing subsystem name.", |  			fatal("%s line %d: Missing subsystem name.", | ||||||
|  			    filename, linenum); |  			    filename, linenum); | ||||||
|  		if (!*activep) { |  		if (!*activep) { | ||||||
| @ -96,7 +81,7 @@ diff -up openssh-6.8p1/servconf.c.coverity openssh-6.8p1/servconf.c | |||||||
|  			break; |  			break; | ||||||
|  		} |  		} | ||||||
|  		for (i = 0; i < options->num_subsystems; i++) |  		for (i = 0; i < options->num_subsystems; i++) | ||||||
| @@ -1566,8 +1566,9 @@ process_server_config_line(ServerOptions
 | @@ -1638,8 +1638,9 @@ process_server_config_line(ServerOptions
 | ||||||
|  		if (*activep && *charptr == NULL) { |  		if (*activep && *charptr == NULL) { | ||||||
|  			*charptr = tilde_expand_filename(arg, getuid()); |  			*charptr = tilde_expand_filename(arg, getuid()); | ||||||
|  			/* increase optional counter */ |  			/* increase optional counter */ | ||||||
| @ -108,10 +93,10 @@ diff -up openssh-6.8p1/servconf.c.coverity openssh-6.8p1/servconf.c | |||||||
|  		} |  		} | ||||||
|  		break; |  		break; | ||||||
|   |   | ||||||
| diff -up openssh-6.8p1/serverloop.c.coverity openssh-6.8p1/serverloop.c
 | diff -up openssh-7.4p1/serverloop.c.coverity openssh-7.4p1/serverloop.c
 | ||||||
| --- openssh-6.8p1/serverloop.c.coverity	2015-03-17 06:49:20.000000000 +0100
 | --- openssh-7.4p1/serverloop.c.coverity	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-6.8p1/serverloop.c	2015-03-18 17:28:45.616436080 +0100
 | +++ openssh-7.4p1/serverloop.c	2016-12-23 16:40:26.902788691 +0100
 | ||||||
| @@ -147,13 +147,13 @@ notify_setup(void)
 | @@ -125,13 +125,13 @@ notify_setup(void)
 | ||||||
|  static void |  static void | ||||||
|  notify_parent(void) |  notify_parent(void) | ||||||
|  { |  { | ||||||
| @ -127,7 +112,7 @@ diff -up openssh-6.8p1/serverloop.c.coverity openssh-6.8p1/serverloop.c | |||||||
|  		FD_SET(notify_pipe[0], readset); |  		FD_SET(notify_pipe[0], readset); | ||||||
|  } |  } | ||||||
|  static void |  static void | ||||||
| @@ -161,8 +161,8 @@ notify_done(fd_set *readset)
 | @@ -139,8 +139,8 @@ notify_done(fd_set *readset)
 | ||||||
|  { |  { | ||||||
|  	char c; |  	char c; | ||||||
|   |   | ||||||
| @ -138,80 +123,7 @@ diff -up openssh-6.8p1/serverloop.c.coverity openssh-6.8p1/serverloop.c | |||||||
|  			debug2("notify_done: reading"); |  			debug2("notify_done: reading"); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -337,7 +337,7 @@ wait_until_can_do_something(fd_set **rea
 | @@ -518,7 +518,7 @@ server_request_tun(void)
 | ||||||
|  		 * If we have buffered data, try to write some of that data |  | ||||||
|  		 * to the program. |  | ||||||
|  		 */ |  | ||||||
| -		if (fdin != -1 && buffer_len(&stdin_buffer) > 0)
 |  | ||||||
| +		if (fdin >= 0 && buffer_len(&stdin_buffer) > 0)
 |  | ||||||
|  			FD_SET(fdin, *writesetp); |  | ||||||
|  	} |  | ||||||
|  	notify_prepare(*readsetp); |  | ||||||
| @@ -477,7 +477,7 @@ process_output(fd_set *writeset)
 |  | ||||||
|  	int len; |  | ||||||
|   |  | ||||||
|  	/* Write buffered data to program stdin. */ |  | ||||||
| -	if (!compat20 && fdin != -1 && FD_ISSET(fdin, writeset)) {
 |  | ||||||
| +	if (!compat20 && fdin >= 0 && FD_ISSET(fdin, writeset)) {
 |  | ||||||
|  		data = buffer_ptr(&stdin_buffer); |  | ||||||
|  		dlen = buffer_len(&stdin_buffer); |  | ||||||
|  		len = write(fdin, data, dlen); |  | ||||||
| @@ -590,7 +590,7 @@ server_loop(pid_t pid, int fdin_arg, int
 |  | ||||||
|  	set_nonblock(fdin); |  | ||||||
|  	set_nonblock(fdout); |  | ||||||
|  	/* we don't have stderr for interactive terminal sessions, see below */ |  | ||||||
| -	if (fderr != -1)
 |  | ||||||
| +	if (fderr >= 0)
 |  | ||||||
|  		set_nonblock(fderr); |  | ||||||
|   |  | ||||||
|  	if (!(datafellows & SSH_BUG_IGNOREMSG) && isatty(fdin)) |  | ||||||
| @@ -614,7 +614,7 @@ server_loop(pid_t pid, int fdin_arg, int
 |  | ||||||
|  	max_fd = MAX(connection_in, connection_out); |  | ||||||
|  	max_fd = MAX(max_fd, fdin); |  | ||||||
|  	max_fd = MAX(max_fd, fdout); |  | ||||||
| -	if (fderr != -1)
 |  | ||||||
| +	if (fderr >= 0)
 |  | ||||||
|  		max_fd = MAX(max_fd, fderr); |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| @@ -644,7 +644,7 @@ server_loop(pid_t pid, int fdin_arg, int
 |  | ||||||
|  		 * If we have received eof, and there is no more pending |  | ||||||
|  		 * input data, cause a real eof by closing fdin. |  | ||||||
|  		 */ |  | ||||||
| -		if (stdin_eof && fdin != -1 && buffer_len(&stdin_buffer) == 0) {
 |  | ||||||
| +		if (stdin_eof && fdin >= 0 && buffer_len(&stdin_buffer) == 0) {
 |  | ||||||
|  			if (fdin != fdout) |  | ||||||
|  				close(fdin); |  | ||||||
|  			else |  | ||||||
| @@ -740,15 +740,15 @@ server_loop(pid_t pid, int fdin_arg, int
 |  | ||||||
|  	buffer_free(&stderr_buffer); |  | ||||||
|   |  | ||||||
|  	/* Close the file descriptors. */ |  | ||||||
| -	if (fdout != -1)
 |  | ||||||
| +	if (fdout >= 0)
 |  | ||||||
|  		close(fdout); |  | ||||||
|  	fdout = -1; |  | ||||||
|  	fdout_eof = 1; |  | ||||||
| -	if (fderr != -1)
 |  | ||||||
| +	if (fderr >= 0)
 |  | ||||||
|  		close(fderr); |  | ||||||
|  	fderr = -1; |  | ||||||
|  	fderr_eof = 1; |  | ||||||
| -	if (fdin != -1)
 |  | ||||||
| +	if (fdin >= 0)
 |  | ||||||
|  		close(fdin); |  | ||||||
|  	fdin = -1; |  | ||||||
|   |  | ||||||
| @@ -950,7 +950,7 @@ server_input_window_size(int type, u_int
 |  | ||||||
|   |  | ||||||
|  	debug("Window change received."); |  | ||||||
|  	packet_check_eom(); |  | ||||||
| -	if (fdin != -1)
 |  | ||||||
| +	if (fdin >= 0)
 |  | ||||||
|  		pty_change_window_size(fdin, row, col, xpixel, ypixel); |  | ||||||
|  	return 0; |  | ||||||
|  } |  | ||||||
| @@ -1043,7 +1043,7 @@ server_request_tun(void)
 |  | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	tun = packet_get_int(); |  	tun = packet_get_int(); | ||||||
| @ -220,10 +132,10 @@ diff -up openssh-6.8p1/serverloop.c.coverity openssh-6.8p1/serverloop.c | |||||||
|  		if (tun != SSH_TUNID_ANY && forced_tun_device != tun) |  		if (tun != SSH_TUNID_ANY && forced_tun_device != tun) | ||||||
|  			goto done; |  			goto done; | ||||||
|  		tun = forced_tun_device; |  		tun = forced_tun_device; | ||||||
| diff -up openssh-6.8p1/sftp.c.coverity openssh-6.8p1/sftp.c
 | diff -up openssh-7.4p1/sftp.c.coverity openssh-7.4p1/sftp.c
 | ||||||
| --- openssh-6.8p1/sftp.c.coverity	2015-03-17 06:49:20.000000000 +0100
 | --- openssh-7.4p1/sftp.c.coverity	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-6.8p1/sftp.c	2015-03-18 17:21:58.283251456 +0100
 | +++ openssh-7.4p1/sftp.c	2016-12-23 16:40:26.903788691 +0100
 | ||||||
| @@ -223,7 +223,7 @@ killchild(int signo)
 | @@ -224,7 +224,7 @@ killchild(int signo)
 | ||||||
|  { |  { | ||||||
|  	if (sshpid > 1) { |  	if (sshpid > 1) { | ||||||
|  		kill(sshpid, SIGTERM); |  		kill(sshpid, SIGTERM); | ||||||
| @ -232,10 +144,10 @@ diff -up openssh-6.8p1/sftp.c.coverity openssh-6.8p1/sftp.c | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	_exit(1); |  	_exit(1); | ||||||
| diff -up openssh-6.8p1/ssh-agent.c.coverity openssh-6.8p1/ssh-agent.c
 | diff -up openssh-7.4p1/ssh-agent.c.coverity openssh-7.4p1/ssh-agent.c
 | ||||||
| --- openssh-6.8p1/ssh-agent.c.coverity	2015-03-17 06:49:20.000000000 +0100
 | --- openssh-7.4p1/ssh-agent.c.coverity	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-6.8p1/ssh-agent.c	2015-03-18 17:21:58.284251454 +0100
 | +++ openssh-7.4p1/ssh-agent.c	2016-12-23 16:40:26.903788691 +0100
 | ||||||
| @@ -1166,8 +1166,8 @@ main(int ac, char **av)
 | @@ -1220,8 +1220,8 @@ main(int ac, char **av)
 | ||||||
|  	sanitise_stdfd(); |  	sanitise_stdfd(); | ||||||
|   |   | ||||||
|  	/* drop */ |  	/* drop */ | ||||||
| @ -246,10 +158,10 @@ diff -up openssh-6.8p1/ssh-agent.c.coverity openssh-6.8p1/ssh-agent.c | |||||||
|   |   | ||||||
|  	platform_disable_tracing(0);	/* strict=no */ |  	platform_disable_tracing(0);	/* strict=no */ | ||||||
|   |   | ||||||
| diff -up openssh-6.8p1/sshd.c.coverity openssh-6.8p1/sshd.c
 | diff -up openssh-7.4p1/sshd.c.coverity openssh-7.4p1/sshd.c
 | ||||||
| --- openssh-6.8p1/sshd.c.coverity	2015-03-18 17:21:51.893264839 +0100
 | --- openssh-7.4p1/sshd.c.coverity	2016-12-23 16:40:26.897788690 +0100
 | ||||||
| +++ openssh-6.8p1/sshd.c	2015-03-18 17:21:58.284251454 +0100
 | +++ openssh-7.4p1/sshd.c	2016-12-23 16:40:26.904788692 +0100
 | ||||||
| @@ -778,8 +778,10 @@ privsep_preauth(Authctxt *authctxt)
 | @@ -691,8 +691,10 @@ privsep_preauth(Authctxt *authctxt)
 | ||||||
|   |   | ||||||
|  		privsep_preauth_child(); |  		privsep_preauth_child(); | ||||||
|  		setproctitle("%s", "[net]"); |  		setproctitle("%s", "[net]"); | ||||||
| @ -261,7 +173,7 @@ diff -up openssh-6.8p1/sshd.c.coverity openssh-6.8p1/sshd.c | |||||||
|   |   | ||||||
|  		return 0; |  		return 0; | ||||||
|  	} |  	} | ||||||
| @@ -1518,6 +1520,9 @@ server_accept_loop(int *sock_in, int *so
 | @@ -1386,6 +1388,9 @@ server_accept_loop(int *sock_in, int *so
 | ||||||
|  		if (num_listen_socks < 0) |  		if (num_listen_socks < 0) | ||||||
|  			break; |  			break; | ||||||
|  	} |  	} | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| diff -up openssh/configure.ac.tcp_wrappers openssh/configure.ac
 | diff -up openssh-7.4p1/configure.ac.tcp_wrappers openssh-7.4p1/configure.ac
 | ||||||
| --- openssh/configure.ac.tcp_wrappers	2015-06-24 11:41:04.519293694 +0200
 | --- openssh-7.4p1/configure.ac.tcp_wrappers	2016-12-23 15:36:38.745411192 +0100
 | ||||||
| +++ openssh/configure.ac	2015-06-24 11:41:04.556293600 +0200
 | +++ openssh-7.4p1/configure.ac	2016-12-23 15:36:38.777411197 +0100
 | ||||||
| @@ -1448,6 +1448,62 @@ AC_ARG_WITH([skey],
 | @@ -1491,6 +1491,62 @@ AC_ARG_WITH([skey],
 | ||||||
|  	] |  	] | ||||||
|  ) |  ) | ||||||
|   |   | ||||||
| @ -64,7 +64,7 @@ diff -up openssh/configure.ac.tcp_wrappers openssh/configure.ac | |||||||
|  # Check whether user wants to use ldns |  # Check whether user wants to use ldns | ||||||
|  LDNS_MSG="no" |  LDNS_MSG="no" | ||||||
|  AC_ARG_WITH(ldns, |  AC_ARG_WITH(ldns, | ||||||
| @@ -5034,6 +5090,7 @@ echo "                 KerberosV support
 | @@ -5214,6 +5270,7 @@ echo "                 KerberosV support
 | ||||||
|  echo "                   SELinux support: $SELINUX_MSG" |  echo "                   SELinux support: $SELINUX_MSG" | ||||||
|  echo "                 Smartcard support: $SCARD_MSG" |  echo "                 Smartcard support: $SCARD_MSG" | ||||||
|  echo "                     S/KEY support: $SKEY_MSG" |  echo "                     S/KEY support: $SKEY_MSG" | ||||||
| @ -72,10 +72,10 @@ diff -up openssh/configure.ac.tcp_wrappers openssh/configure.ac | |||||||
|  echo "              MD5 password support: $MD5_MSG" |  echo "              MD5 password support: $MD5_MSG" | ||||||
|  echo "                   libedit support: $LIBEDIT_MSG" |  echo "                   libedit support: $LIBEDIT_MSG" | ||||||
|  echo "  Solaris process contract support: $SPC_MSG" |  echo "  Solaris process contract support: $SPC_MSG" | ||||||
| diff -up openssh/sshd.8.tcp_wrappers openssh/sshd.8
 | diff -up openssh-7.4p1/sshd.8.tcp_wrappers openssh-7.4p1/sshd.8
 | ||||||
| --- openssh/sshd.8.tcp_wrappers	2015-06-24 11:41:04.527293674 +0200
 | --- openssh-7.4p1/sshd.8.tcp_wrappers	2016-12-23 15:36:38.759411194 +0100
 | ||||||
| +++ openssh/sshd.8	2015-06-24 11:41:04.556293600 +0200
 | +++ openssh-7.4p1/sshd.8	2016-12-23 15:36:38.778411197 +0100
 | ||||||
| @@ -860,6 +860,12 @@ the user's home directory becomes access
 | @@ -836,6 +836,12 @@ the user's home directory becomes access
 | ||||||
|  This file should be writable only by the user, and need not be |  This file should be writable only by the user, and need not be | ||||||
|  readable by anyone else. |  readable by anyone else. | ||||||
|  .Pp |  .Pp | ||||||
| @ -88,7 +88,7 @@ diff -up openssh/sshd.8.tcp_wrappers openssh/sshd.8 | |||||||
|  .It Pa /etc/hosts.equiv |  .It Pa /etc/hosts.equiv | ||||||
|  This file is for host-based authentication (see |  This file is for host-based authentication (see | ||||||
|  .Xr ssh 1 ) . |  .Xr ssh 1 ) . | ||||||
| @@ -983,6 +989,7 @@ IPv6 address can be used everywhere wher
 | @@ -960,6 +966,7 @@ IPv6 address can be used everywhere wher
 | ||||||
|  .Xr ssh-keygen 1 , |  .Xr ssh-keygen 1 , | ||||||
|  .Xr ssh-keyscan 1 , |  .Xr ssh-keyscan 1 , | ||||||
|  .Xr chroot 2 , |  .Xr chroot 2 , | ||||||
| @ -96,10 +96,10 @@ diff -up openssh/sshd.8.tcp_wrappers openssh/sshd.8 | |||||||
|  .Xr login.conf 5 , |  .Xr login.conf 5 , | ||||||
|  .Xr moduli 5 , |  .Xr moduli 5 , | ||||||
|  .Xr sshd_config 5 , |  .Xr sshd_config 5 , | ||||||
| diff -up openssh/sshd.c.tcp_wrappers openssh/sshd.c
 | diff -up openssh-7.4p1/sshd.c.tcp_wrappers openssh-7.4p1/sshd.c
 | ||||||
| --- openssh/sshd.c.tcp_wrappers	2015-06-24 11:41:04.549293618 +0200
 | --- openssh-7.4p1/sshd.c.tcp_wrappers	2016-12-23 15:36:38.772411196 +0100
 | ||||||
| +++ openssh/sshd.c	2015-06-24 11:41:53.331169536 +0200
 | +++ openssh-7.4p1/sshd.c	2016-12-23 15:37:15.032417028 +0100
 | ||||||
| @@ -125,6 +125,13 @@
 | @@ -123,6 +123,13 @@
 | ||||||
|  #include "version.h" |  #include "version.h" | ||||||
|  #include "ssherr.h" |  #include "ssherr.h" | ||||||
|   |   | ||||||
| @ -110,10 +110,10 @@ diff -up openssh/sshd.c.tcp_wrappers openssh/sshd.c | |||||||
| +int deny_severity;
 | +int deny_severity;
 | ||||||
| +#endif /* LIBWRAP */
 | +#endif /* LIBWRAP */
 | ||||||
| +
 | +
 | ||||||
|  #ifndef O_NOCTTY |  /* Re-exec fds */ | ||||||
|  #define O_NOCTTY	0 |  #define REEXEC_DEVCRYPTO_RESERVED_FD	(STDERR_FILENO + 1) | ||||||
|  #endif |  #define REEXEC_STARTUP_PIPE_FD		(STDERR_FILENO + 2) | ||||||
| @@ -2158,6 +2165,24 @@ main(int ac, char **av)
 | @@ -2012,6 +2019,24 @@ main(int ac, char **av)
 | ||||||
|  #ifdef SSH_AUDIT_EVENTS |  #ifdef SSH_AUDIT_EVENTS | ||||||
|  	audit_connection_from(remote_ip, remote_port); |  	audit_connection_from(remote_ip, remote_port); | ||||||
|  #endif |  #endif | ||||||
|  | |||||||
| @ -1,8 +1,7 @@ | |||||||
| diff --git a/servconf.c b/servconf.c
 | diff -up openssh-7.4p1/servconf.c.memory openssh-7.4p1/servconf.c
 | ||||||
| index ad5869b..0255ed3 100644
 | --- openssh-7.4p1/servconf.c.memory	2016-12-23 15:37:48.181422360 +0100
 | ||||||
| --- a/servconf.c
 | +++ openssh-7.4p1/servconf.c	2016-12-23 15:38:30.189429116 +0100
 | ||||||
| +++ b/servconf.c
 | @@ -2006,6 +2006,8 @@ copy_set_server_options(ServerOptions *d
 | ||||||
| @@ -1910,6 +1910,8 @@ copy_set_server_options(ServerOptions *dst, ServerOptions *src, int preauth)
 |  | ||||||
|  		dst->n = src->n; \ |  		dst->n = src->n; \ | ||||||
|  } while (0) |  } while (0) | ||||||
|   |   | ||||||
| @ -10,8 +9,8 @@ index ad5869b..0255ed3 100644 | |||||||
| +
 | +
 | ||||||
|  	M_CP_INTOPT(password_authentication); |  	M_CP_INTOPT(password_authentication); | ||||||
|  	M_CP_INTOPT(gss_authentication); |  	M_CP_INTOPT(gss_authentication); | ||||||
|  	M_CP_INTOPT(rsa_authentication); |  	M_CP_INTOPT(pubkey_authentication); | ||||||
| @@ -1947,8 +1949,10 @@ copy_set_server_options(ServerOptions *dst, ServerOptions *src, int preauth)
 | @@ -2058,8 +2060,10 @@ copy_set_server_options(ServerOptions *d
 | ||||||
|  } while(0) |  } while(0) | ||||||
|  #define M_CP_STRARRAYOPT(n, num_n) do {\ |  #define M_CP_STRARRAYOPT(n, num_n) do {\ | ||||||
|  	if (src->num_n != 0) { \ |  	if (src->num_n != 0) { \ | ||||||
|  | |||||||
| @ -1,23 +1,7 @@ | |||||||
| From e1d58c44bd911e5ee4dddb6205e16eb9a03cc736 Mon Sep 17 00:00:00 2001 | diff -up openssh-7.4p1/clientloop.c.fingerprint openssh-7.4p1/clientloop.c
 | ||||||
| From: Jakub Jelen <jjelen@redhat.com> | --- openssh-7.4p1/clientloop.c.fingerprint	2016-12-23 15:38:50.520432387 +0100
 | ||||||
| Date: Fri, 7 Aug 2015 10:18:54 +0200 | +++ openssh-7.4p1/clientloop.c	2016-12-23 15:38:50.564432394 +0100
 | ||||||
| Subject: [PATCH] Possibility tu specify more fingerprint algorithms on client | @@ -2279,7 +2279,7 @@ update_known_hosts(struct hostkeys_updat
 | ||||||
|  side for smother transition |  | ||||||
| 
 |  | ||||||
| ---
 |  | ||||||
|  clientloop.c  |  8 ++++---- |  | ||||||
|  readconf.c    | 43 +++++++++++++++++++++++++++++-------------- |  | ||||||
|  readconf.h    |  4 +++- |  | ||||||
|  ssh_config.5  |  4 ++-- |  | ||||||
|  sshconnect.c  | 48 +++++++++++++++++++++++++++--------------------- |  | ||||||
|  sshconnect2.c |  6 +++--- |  | ||||||
|  6 files changed, 68 insertions(+), 45 deletions(-) |  | ||||||
| 
 |  | ||||||
| diff --git a/clientloop.c b/clientloop.c
 |  | ||||||
| index 87ceb3d..4553114 100644
 |  | ||||||
| --- a/clientloop.c
 |  | ||||||
| +++ b/clientloop.c
 |  | ||||||
| @@ -2194,7 +2194,7 @@ update_known_hosts(struct hostkeys_update_ctx *ctx)
 |  | ||||||
|  		if (ctx->keys_seen[i] != 2) |  		if (ctx->keys_seen[i] != 2) | ||||||
|  			continue; |  			continue; | ||||||
|  		if ((fp = sshkey_fingerprint(ctx->keys[i], |  		if ((fp = sshkey_fingerprint(ctx->keys[i], | ||||||
| @ -26,7 +10,7 @@ index 87ceb3d..4553114 100644 | |||||||
|  			fatal("%s: sshkey_fingerprint failed", __func__); |  			fatal("%s: sshkey_fingerprint failed", __func__); | ||||||
|  		do_log2(loglevel, "Learned new hostkey: %s %s", |  		do_log2(loglevel, "Learned new hostkey: %s %s", | ||||||
|  		    sshkey_type(ctx->keys[i]), fp); |  		    sshkey_type(ctx->keys[i]), fp); | ||||||
| @@ -2202,7 +2202,7 @@ update_known_hosts(struct hostkeys_update_ctx *ctx)
 | @@ -2287,7 +2287,7 @@ update_known_hosts(struct hostkeys_updat
 | ||||||
|  	} |  	} | ||||||
|  	for (i = 0; i < ctx->nold; i++) { |  	for (i = 0; i < ctx->nold; i++) { | ||||||
|  		if ((fp = sshkey_fingerprint(ctx->old_keys[i], |  		if ((fp = sshkey_fingerprint(ctx->old_keys[i], | ||||||
| @ -35,7 +19,7 @@ index 87ceb3d..4553114 100644 | |||||||
|  			fatal("%s: sshkey_fingerprint failed", __func__); |  			fatal("%s: sshkey_fingerprint failed", __func__); | ||||||
|  		do_log2(loglevel, "Deprecating obsolete hostkey: %s %s", |  		do_log2(loglevel, "Deprecating obsolete hostkey: %s %s", | ||||||
|  		    sshkey_type(ctx->old_keys[i]), fp); |  		    sshkey_type(ctx->old_keys[i]), fp); | ||||||
| @@ -2245,7 +2245,7 @@ update_known_hosts(struct hostkeys_update_ctx *ctx)
 | @@ -2330,7 +2330,7 @@ update_known_hosts(struct hostkeys_updat
 | ||||||
|  	    (r = hostfile_replace_entries(options.user_hostfiles[0], |  	    (r = hostfile_replace_entries(options.user_hostfiles[0], | ||||||
|  	    ctx->host_str, ctx->ip_str, ctx->keys, ctx->nkeys, |  	    ctx->host_str, ctx->ip_str, ctx->keys, ctx->nkeys, | ||||||
|  	    options.hash_known_hosts, 0, |  	    options.hash_known_hosts, 0, | ||||||
| @ -44,7 +28,7 @@ index 87ceb3d..4553114 100644 | |||||||
|  		error("%s: hostfile_replace_entries failed: %s", |  		error("%s: hostfile_replace_entries failed: %s", | ||||||
|  		    __func__, ssh_err(r)); |  		    __func__, ssh_err(r)); | ||||||
|  } |  } | ||||||
| @@ -2358,7 +2358,7 @@ client_input_hostkeys(void)
 | @@ -2443,7 +2443,7 @@ client_input_hostkeys(void)
 | ||||||
|  			error("%s: parse key: %s", __func__, ssh_err(r)); |  			error("%s: parse key: %s", __func__, ssh_err(r)); | ||||||
|  			goto out; |  			goto out; | ||||||
|  		} |  		} | ||||||
| @ -53,11 +37,10 @@ index 87ceb3d..4553114 100644 | |||||||
|  		    SSH_FP_DEFAULT); |  		    SSH_FP_DEFAULT); | ||||||
|  		debug3("%s: received %s key %s", __func__, |  		debug3("%s: received %s key %s", __func__, | ||||||
|  		    sshkey_type(key), fp); |  		    sshkey_type(key), fp); | ||||||
| diff --git a/readconf.c b/readconf.c
 | diff -up openssh-7.4p1/readconf.c.fingerprint openssh-7.4p1/readconf.c
 | ||||||
| index 1d03bdf..6af4c62 100644
 | --- openssh-7.4p1/readconf.c.fingerprint	2016-12-23 15:38:50.559432393 +0100
 | ||||||
| --- a/readconf.c
 | +++ openssh-7.4p1/readconf.c	2016-12-23 15:38:50.565432394 +0100
 | ||||||
| +++ b/readconf.c
 | @@ -1668,16 +1668,18 @@ parse_keytypes:
 | ||||||
| @@ -1471,16 +1471,18 @@ parse_keytypes:
 |  | ||||||
|  		goto parse_string; |  		goto parse_string; | ||||||
|   |   | ||||||
|  	case oFingerprintHash: |  	case oFingerprintHash: | ||||||
| @ -86,7 +69,7 @@ index 1d03bdf..6af4c62 100644 | |||||||
|  		break; |  		break; | ||||||
|   |   | ||||||
|  	case oUpdateHostkeys: |  	case oUpdateHostkeys: | ||||||
| @@ -1673,7 +1675,7 @@ initialize_options(Options * options)
 | @@ -1905,7 +1907,7 @@ initialize_options(Options * options)
 | ||||||
|  	options->canonicalize_fallback_local = -1; |  	options->canonicalize_fallback_local = -1; | ||||||
|  	options->canonicalize_hostname = -1; |  	options->canonicalize_hostname = -1; | ||||||
|  	options->revoked_host_keys = NULL; |  	options->revoked_host_keys = NULL; | ||||||
| @ -95,7 +78,7 @@ index 1d03bdf..6af4c62 100644 | |||||||
|  	options->update_hostkeys = -1; |  	options->update_hostkeys = -1; | ||||||
|  	options->hostbased_key_types = NULL; |  	options->hostbased_key_types = NULL; | ||||||
|  	options->pubkey_key_types = NULL; |  	options->pubkey_key_types = NULL; | ||||||
| @@ -1851,8 +1853,10 @@ fill_default_options(Options * options)
 | @@ -2102,8 +2104,10 @@ fill_default_options(Options * options)
 | ||||||
|  		options->canonicalize_fallback_local = 1; |  		options->canonicalize_fallback_local = 1; | ||||||
|  	if (options->canonicalize_hostname == -1) |  	if (options->canonicalize_hostname == -1) | ||||||
|  		options->canonicalize_hostname = SSH_CANONICALISE_NO; |  		options->canonicalize_hostname = SSH_CANONICALISE_NO; | ||||||
| @ -108,7 +91,7 @@ index 1d03bdf..6af4c62 100644 | |||||||
|  	if (options->update_hostkeys == -1) |  	if (options->update_hostkeys == -1) | ||||||
|  		options->update_hostkeys = 0; |  		options->update_hostkeys = 0; | ||||||
|  	if (kex_assemble_names(KEX_CLIENT_ENCRYPT, &options->ciphers) != 0 || |  	if (kex_assemble_names(KEX_CLIENT_ENCRYPT, &options->ciphers) != 0 || | ||||||
| @@ -2189,6 +2193,17 @@ dump_cfg_strarray(OpCodes code, u_int count, char **vals)
 | @@ -2489,6 +2493,17 @@ dump_cfg_strarray(OpCodes code, u_int co
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  static void |  static void | ||||||
| @ -126,7 +109,7 @@ index 1d03bdf..6af4c62 100644 | |||||||
|  dump_cfg_strarray_oneline(OpCodes code, u_int count, char **vals) |  dump_cfg_strarray_oneline(OpCodes code, u_int count, char **vals) | ||||||
|  { |  { | ||||||
|  	u_int i; |  	u_int i; | ||||||
| @@ -2259,7 +2274,6 @@ dump_client_config(Options *o, const char *host)
 | @@ -2564,7 +2579,6 @@ dump_client_config(Options *o, const cha
 | ||||||
|  	dump_cfg_fmtint(oEnableSSHKeysign, o->enable_ssh_keysign); |  	dump_cfg_fmtint(oEnableSSHKeysign, o->enable_ssh_keysign); | ||||||
|  	dump_cfg_fmtint(oClearAllForwardings, o->clear_forwardings); |  	dump_cfg_fmtint(oClearAllForwardings, o->clear_forwardings); | ||||||
|  	dump_cfg_fmtint(oExitOnForwardFailure, o->exit_on_forward_failure); |  	dump_cfg_fmtint(oExitOnForwardFailure, o->exit_on_forward_failure); | ||||||
| @ -134,7 +117,7 @@ index 1d03bdf..6af4c62 100644 | |||||||
|  	dump_cfg_fmtint(oForwardAgent, o->forward_agent); |  	dump_cfg_fmtint(oForwardAgent, o->forward_agent); | ||||||
|  	dump_cfg_fmtint(oForwardX11, o->forward_x11); |  	dump_cfg_fmtint(oForwardX11, o->forward_x11); | ||||||
|  	dump_cfg_fmtint(oForwardX11Trusted, o->forward_x11_trusted); |  	dump_cfg_fmtint(oForwardX11Trusted, o->forward_x11_trusted); | ||||||
| @@ -2328,6 +2342,7 @@ dump_client_config(Options *o, const char *host)
 | @@ -2634,6 +2648,7 @@ dump_client_config(Options *o, const cha
 | ||||||
|  	dump_cfg_strarray_oneline(oGlobalKnownHostsFile, o->num_system_hostfiles, o->system_hostfiles); |  	dump_cfg_strarray_oneline(oGlobalKnownHostsFile, o->num_system_hostfiles, o->system_hostfiles); | ||||||
|  	dump_cfg_strarray_oneline(oUserKnownHostsFile, o->num_user_hostfiles, o->user_hostfiles); |  	dump_cfg_strarray_oneline(oUserKnownHostsFile, o->num_user_hostfiles, o->user_hostfiles); | ||||||
|  	dump_cfg_strarray(oSendEnv, o->num_send_env, o->send_env); |  	dump_cfg_strarray(oSendEnv, o->num_send_env, o->send_env); | ||||||
| @ -142,10 +125,9 @@ index 1d03bdf..6af4c62 100644 | |||||||
|   |   | ||||||
|  	/* Special cases */ |  	/* Special cases */ | ||||||
|   |   | ||||||
| diff --git a/readconf.h b/readconf.h
 | diff -up openssh-7.4p1/readconf.h.fingerprint openssh-7.4p1/readconf.h
 | ||||||
| index bb2d552..d817f92 100644
 | --- openssh-7.4p1/readconf.h.fingerprint	2016-12-23 15:38:50.559432393 +0100
 | ||||||
| --- a/readconf.h
 | +++ openssh-7.4p1/readconf.h	2016-12-23 15:38:50.565432394 +0100
 | ||||||
| +++ b/readconf.h
 |  | ||||||
| @@ -21,6 +21,7 @@
 | @@ -21,6 +21,7 @@
 | ||||||
|  #define MAX_SEND_ENV		256 |  #define MAX_SEND_ENV		256 | ||||||
|  #define SSH_MAX_HOSTS_FILES	32 |  #define SSH_MAX_HOSTS_FILES	32 | ||||||
| @ -154,7 +136,7 @@ index bb2d552..d817f92 100644 | |||||||
|  #define PATH_MAX_SUN		(sizeof((struct sockaddr_un *)0)->sun_path) |  #define PATH_MAX_SUN		(sizeof((struct sockaddr_un *)0)->sun_path) | ||||||
|   |   | ||||||
|  struct allowed_cname { |  struct allowed_cname { | ||||||
| @@ -146,7 +147,8 @@ typedef struct {
 | @@ -162,7 +163,8 @@ typedef struct {
 | ||||||
|   |   | ||||||
|  	char	*revoked_host_keys; |  	char	*revoked_host_keys; | ||||||
|   |   | ||||||
| @ -164,31 +146,60 @@ index bb2d552..d817f92 100644 | |||||||
|   |   | ||||||
|  	int	 update_hostkeys; /* one of SSH_UPDATE_HOSTKEYS_* */ |  	int	 update_hostkeys; /* one of SSH_UPDATE_HOSTKEYS_* */ | ||||||
|   |   | ||||||
| diff --git a/ssh_config.5 b/ssh_config.5
 | diff -up openssh-7.4p1/ssh_config.5.fingerprint openssh-7.4p1/ssh_config.5
 | ||||||
| index 5b0975f..e8e6458 100644
 | --- openssh-7.4p1/ssh_config.5.fingerprint	2016-12-23 15:38:50.565432394 +0100
 | ||||||
| --- a/ssh_config.5
 | +++ openssh-7.4p1/ssh_config.5	2016-12-23 15:40:03.754444166 +0100
 | ||||||
| +++ b/ssh_config.5
 | @@ -652,12 +652,13 @@ or
 | ||||||
| @@ -647,13 +647,13 @@ or
 |  .Cm no | ||||||
|  The default is |  (the default). | ||||||
|  .Dq no . |  | ||||||
|  .It Cm FingerprintHash |  .It Cm FingerprintHash | ||||||
| -Specifies the hash algorithm used when displaying key fingerprints.
 | -Specifies the hash algorithm used when displaying key fingerprints.
 | ||||||
| +Specifies the hash algorithms used when displaying key fingerprints.
 | +Specifies the hash algorithms used when displaying key fingerprints.
 | ||||||
|  Valid options are: |  Valid options are: | ||||||
|  .Dq md5 |  .Cm md5 | ||||||
|  and |  and | ||||||
|  .Dq sha256 . | -.Cm sha256
 | ||||||
|  The default is | -(the default).
 | ||||||
| -.Dq sha256 .
 | +.Cm sha256 .
 | ||||||
| +.Dq "sha256 md5".
 | +The default is
 | ||||||
|  | +.Cm "sha256 md5".
 | ||||||
|  .It Cm ForwardAgent |  .It Cm ForwardAgent | ||||||
|  Specifies whether the connection to the authentication agent (if any) |  Specifies whether the connection to the authentication agent (if any) | ||||||
|  will be forwarded to the remote machine. |  will be forwarded to the remote machine. | ||||||
| diff --git a/sshconnect.c b/sshconnect.c
 | diff -up openssh-7.4p1/sshconnect2.c.fingerprint openssh-7.4p1/sshconnect2.c
 | ||||||
| index f41960c..e12932f 100644
 | --- openssh-7.4p1/sshconnect2.c.fingerprint	2016-12-23 15:38:50.561432394 +0100
 | ||||||
| --- a/sshconnect.c
 | +++ openssh-7.4p1/sshconnect2.c	2016-12-23 15:38:50.566432394 +0100
 | ||||||
| +++ b/sshconnect.c
 | @@ -677,7 +677,7 @@ input_userauth_pk_ok(int type, u_int32_t
 | ||||||
| @@ -920,9 +920,9 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
 |  		    key->type, pktype); | ||||||
|  |  		goto done; | ||||||
|  |  	} | ||||||
|  | -	if ((fp = sshkey_fingerprint(key, options.fingerprint_hash,
 | ||||||
|  | +	if ((fp = sshkey_fingerprint(key, options.fingerprint_hash[0],
 | ||||||
|  |  	    SSH_FP_DEFAULT)) == NULL) | ||||||
|  |  		goto done; | ||||||
|  |  	debug2("input_userauth_pk_ok: fp %s", fp); | ||||||
|  | @@ -1172,7 +1172,7 @@ sign_and_send_pubkey(Authctxt *authctxt,
 | ||||||
|  |  	int matched, ret = -1, have_sig = 1; | ||||||
|  |  	char *fp; | ||||||
|  |   | ||||||
|  | -	if ((fp = sshkey_fingerprint(id->key, options.fingerprint_hash,
 | ||||||
|  | +	if ((fp = sshkey_fingerprint(id->key, options.fingerprint_hash[0],
 | ||||||
|  |  	    SSH_FP_DEFAULT)) == NULL) | ||||||
|  |  		return 0; | ||||||
|  |  	debug3("%s: %s %s", __func__, key_type(id->key), fp); | ||||||
|  | @@ -1864,7 +1864,7 @@ userauth_hostbased(Authctxt *authctxt)
 | ||||||
|  |  		goto out; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	if ((fp = sshkey_fingerprint(private, options.fingerprint_hash,
 | ||||||
|  | +	if ((fp = sshkey_fingerprint(private, options.fingerprint_hash[0],
 | ||||||
|  |  	    SSH_FP_DEFAULT)) == NULL) { | ||||||
|  |  		error("%s: sshkey_fingerprint failed", __func__); | ||||||
|  |  		goto out; | ||||||
|  | diff -up openssh-7.4p1/sshconnect.c.fingerprint openssh-7.4p1/sshconnect.c
 | ||||||
|  | --- openssh-7.4p1/sshconnect.c.fingerprint	2016-12-19 05:59:41.000000000 +0100
 | ||||||
|  | +++ openssh-7.4p1/sshconnect.c	2016-12-23 15:38:50.566432394 +0100
 | ||||||
|  | @@ -922,9 +922,9 @@ check_host_key(char *hostname, struct so
 | ||||||
|  				    "of known hosts.", type, ip); |  				    "of known hosts.", type, ip); | ||||||
|  		} else if (options.visual_host_key) { |  		} else if (options.visual_host_key) { | ||||||
|  			fp = sshkey_fingerprint(host_key, |  			fp = sshkey_fingerprint(host_key, | ||||||
| @ -200,7 +211,7 @@ index f41960c..e12932f 100644 | |||||||
|  			if (fp == NULL || ra == NULL) |  			if (fp == NULL || ra == NULL) | ||||||
|  				fatal("%s: sshkey_fingerprint fail", __func__); |  				fatal("%s: sshkey_fingerprint fail", __func__); | ||||||
|  			logit("Host key fingerprint is %s\n%s", fp, ra); |  			logit("Host key fingerprint is %s\n%s", fp, ra); | ||||||
| @@ -964,12 +964,6 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
 | @@ -966,12 +966,6 @@ check_host_key(char *hostname, struct so
 | ||||||
|  			else |  			else | ||||||
|  				snprintf(msg1, sizeof(msg1), "."); |  				snprintf(msg1, sizeof(msg1), "."); | ||||||
|  			/* The default */ |  			/* The default */ | ||||||
| @ -213,14 +224,14 @@ index f41960c..e12932f 100644 | |||||||
|  			msg2[0] = '\0'; |  			msg2[0] = '\0'; | ||||||
|  			if (options.verify_host_key_dns) { |  			if (options.verify_host_key_dns) { | ||||||
|  				if (matching_host_key_dns) |  				if (matching_host_key_dns) | ||||||
| @@ -983,16 +977,28 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
 | @@ -985,16 +979,28 @@ check_host_key(char *hostname, struct so
 | ||||||
|  			} |  			} | ||||||
|  			snprintf(msg, sizeof(msg), |  			snprintf(msg, sizeof(msg), | ||||||
|  			    "The authenticity of host '%.200s (%s)' can't be " |  			    "The authenticity of host '%.200s (%s)' can't be " | ||||||
| -			    "established%s\n"
 | -			    "established%s\n"
 | ||||||
| -			    "%s key fingerprint is %s.%s%s\n%s"
 | -			    "%s key fingerprint is %s.%s%s\n%s"
 | ||||||
| +			    "established%s\n", host, ip, msg1);
 | +			    "established%s\n", host, ip, msg1);
 | ||||||
| +			for (i = 0; i < options.num_fingerprint_hash; i++) {
 | +			for (i = 0; i < (u_int) options.num_fingerprint_hash; i++) {
 | ||||||
| +				fp = sshkey_fingerprint(host_key,
 | +				fp = sshkey_fingerprint(host_key,
 | ||||||
| +				    options.fingerprint_hash[i], SSH_FP_DEFAULT);
 | +				    options.fingerprint_hash[i], SSH_FP_DEFAULT);
 | ||||||
| +				ra = sshkey_fingerprint(host_key,
 | +				ra = sshkey_fingerprint(host_key,
 | ||||||
| @ -251,7 +262,7 @@ index f41960c..e12932f 100644 | |||||||
|  			if (!confirm(msg)) |  			if (!confirm(msg)) | ||||||
|  				goto fail; |  				goto fail; | ||||||
|  			hostkey_trusted = 1; /* user explicitly confirmed */ |  			hostkey_trusted = 1; /* user explicitly confirmed */ | ||||||
| @@ -1241,7 +1247,7 @@ verify_host_key(char *host, struct sockaddr *hostaddr, Key *host_key)
 | @@ -1244,7 +1250,7 @@ verify_host_key(char *host, struct socka
 | ||||||
|  	struct sshkey *plain = NULL; |  	struct sshkey *plain = NULL; | ||||||
|   |   | ||||||
|  	if ((fp = sshkey_fingerprint(host_key, |  	if ((fp = sshkey_fingerprint(host_key, | ||||||
| @ -260,7 +271,16 @@ index f41960c..e12932f 100644 | |||||||
|  		error("%s: fingerprint host key: %s", __func__, ssh_err(r)); |  		error("%s: fingerprint host key: %s", __func__, ssh_err(r)); | ||||||
|  		r = -1; |  		r = -1; | ||||||
|  		goto out; |  		goto out; | ||||||
| @@ -1405,9 +1411,9 @@ show_other_keys(struct hostkeys *hostkeys, Key *key)
 | @@ -1252,7 +1258,7 @@ verify_host_key(char *host, struct socka
 | ||||||
|  |   | ||||||
|  |  	if (sshkey_is_cert(host_key)) { | ||||||
|  |  		if ((cafp = sshkey_fingerprint(host_key->cert->signature_key, | ||||||
|  | -		    options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) {
 | ||||||
|  | +		    options.fingerprint_hash[0], SSH_FP_DEFAULT)) == NULL) {
 | ||||||
|  |  			error("%s: fingerprint CA key: %s", | ||||||
|  |  			    __func__, ssh_err(r)); | ||||||
|  |  			r = -1; | ||||||
|  | @@ -1432,9 +1438,9 @@ show_other_keys(struct hostkeys *hostkey
 | ||||||
|  		if (!lookup_key_in_hostkeys_by_type(hostkeys, type[i], &found)) |  		if (!lookup_key_in_hostkeys_by_type(hostkeys, type[i], &found)) | ||||||
|  			continue; |  			continue; | ||||||
|  		fp = sshkey_fingerprint(found->key, |  		fp = sshkey_fingerprint(found->key, | ||||||
| @ -272,7 +292,7 @@ index f41960c..e12932f 100644 | |||||||
|  		if (fp == NULL || ra == NULL) |  		if (fp == NULL || ra == NULL) | ||||||
|  			fatal("%s: sshkey_fingerprint fail", __func__); |  			fatal("%s: sshkey_fingerprint fail", __func__); | ||||||
|  		logit("WARNING: %s key found for host %s\n" |  		logit("WARNING: %s key found for host %s\n" | ||||||
| @@ -1430,7 +1436,7 @@ warn_changed_key(Key *host_key)
 | @@ -1457,7 +1463,7 @@ warn_changed_key(Key *host_key)
 | ||||||
|  { |  { | ||||||
|  	char *fp; |  	char *fp; | ||||||
|   |   | ||||||
| @ -281,42 +301,10 @@ index f41960c..e12932f 100644 | |||||||
|  	    SSH_FP_DEFAULT); |  	    SSH_FP_DEFAULT); | ||||||
|  	if (fp == NULL) |  	if (fp == NULL) | ||||||
|  		fatal("%s: sshkey_fingerprint fail", __func__); |  		fatal("%s: sshkey_fingerprint fail", __func__); | ||||||
| diff --git a/sshconnect2.c b/sshconnect2.c
 | diff -up openssh-7.4p1/ssh-keysign.c.fingerprint openssh-7.4p1/ssh-keysign.c
 | ||||||
| index 7751031..82ed92e 100644
 | --- openssh-7.4p1/ssh-keysign.c.fingerprint	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| --- a/sshconnect2.c
 | +++ openssh-7.4p1/ssh-keysign.c	2016-12-23 15:38:50.566432394 +0100
 | ||||||
| +++ b/sshconnect2.c
 | @@ -285,7 +285,7 @@ main(int argc, char **argv)
 | ||||||
| @@ -589,7 +589,7 @@ input_userauth_pk_ok(int type, u_int32_t seq, void *ctxt)
 |  | ||||||
|  		    key->type, pktype); |  | ||||||
|  		goto done; |  | ||||||
|  	} |  | ||||||
| -	if ((fp = sshkey_fingerprint(key, options.fingerprint_hash,
 |  | ||||||
| +	if ((fp = sshkey_fingerprint(key, options.fingerprint_hash[0],
 |  | ||||||
|  	    SSH_FP_DEFAULT)) == NULL) |  | ||||||
|  		goto done; |  | ||||||
|  	debug2("input_userauth_pk_ok: fp %s", fp); |  | ||||||
| @@ -1009,7 +1009,7 @@ sign_and_send_pubkey(Authctxt *authctxt, Identity *id)
 |  | ||||||
|  	int matched, ret = -1, have_sig = 1; |  | ||||||
|  	char *fp; |  | ||||||
|   |  | ||||||
| -	if ((fp = sshkey_fingerprint(id->key, options.fingerprint_hash,
 |  | ||||||
| +	if ((fp = sshkey_fingerprint(id->key, options.fingerprint_hash[0],
 |  | ||||||
|  	    SSH_FP_DEFAULT)) == NULL) |  | ||||||
|  		return 0; |  | ||||||
|  	debug3("%s: %s %s", __func__, key_type(id->key), fp); |  | ||||||
| @@ -1635,7 +1635,7 @@ userauth_hostbased(Authctxt *authctxt)
 |  | ||||||
|  		goto out; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	if ((fp = sshkey_fingerprint(private, options.fingerprint_hash,
 |  | ||||||
| +	if ((fp = sshkey_fingerprint(private, options.fingerprint_hash[0],
 |  | ||||||
|  	    SSH_FP_DEFAULT)) == NULL) { |  | ||||||
|  		error("%s: sshkey_fingerprint failed", __func__); |  | ||||||
|  		goto out; |  | ||||||
| diff --git a/ssh-keysign.c b/ssh-keysign.c
 |  | ||||||
| index 1dca3e2..23bff7d 100644
 |  | ||||||
| --- a/ssh-keysign.c
 |  | ||||||
| +++ b/ssh-keysign.c
 |  | ||||||
| @@ -275,7 +275,7 @@ main(int argc, char **argv)
 |  | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|  	if (!found) { |  	if (!found) { | ||||||
| @ -325,21 +313,3 @@ index 1dca3e2..23bff7d 100644 | |||||||
|  		    SSH_FP_DEFAULT)) == NULL) |  		    SSH_FP_DEFAULT)) == NULL) | ||||||
|  			fatal("%s: sshkey_fingerprint failed", __progname); |  			fatal("%s: sshkey_fingerprint failed", __progname); | ||||||
|  		fatal("no matching hostkey found for key %s %s", |  		fatal("no matching hostkey found for key %s %s", | ||||||
| 
 |  | ||||||
| -- 
 |  | ||||||
| 2.1.0 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff --git a/sshconnect.c b/sshconnect.c
 |  | ||||||
| index de7ace6..f16e606 100644
 |  | ||||||
| --- a/sshconnect.c
 |  | ||||||
| +++ b/sshconnect.c
 |  | ||||||
| @@ -1262,7 +1262,7 @@ verify_host_key(char *host, struct sockaddr *hostaddr, Key *host_key)
 |  | ||||||
|   |  | ||||||
|  	if (sshkey_is_cert(host_key)) { |  | ||||||
|  		if ((cafp = sshkey_fingerprint(host_key->cert->signature_key, |  | ||||||
| -		    options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) {
 |  | ||||||
| +		    options.fingerprint_hash[0], SSH_FP_DEFAULT)) == NULL) {
 |  | ||||||
|  			error("%s: fingerprint CA key: %s", |  | ||||||
|  			    __func__, ssh_err(r)); |  | ||||||
|  			r = -1; |  | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| diff -up openssh-7.1p1/ssh_config.5.gss-docs openssh-7.1p1/ssh_config.5
 | diff -up openssh-7.4p1/ssh_config.5.gss-docs openssh-7.4p1/ssh_config.5
 | ||||||
| --- openssh-7.1p1/ssh_config.5.gss-docs	2015-12-10 15:28:47.451966457 +0100
 | --- openssh-7.4p1/ssh_config.5.gss-docs	2016-12-23 14:28:34.051714486 +0100
 | ||||||
| +++ openssh-7.1p1/ssh_config.5	2015-12-10 15:30:28.070738047 +0100
 | +++ openssh-7.4p1/ssh_config.5	2016-12-23 14:34:24.568522417 +0100
 | ||||||
| @@ -773,15 +773,26 @@ Note that this option applies to protoco
 | @@ -765,10 +765,19 @@ The default is
 | ||||||
|  If set to  |  If set to  | ||||||
|  .Dq yes |  .Dq yes | ||||||
|  then renewal of the client's GSSAPI credentials will force the rekeying of the |  then renewal of the client's GSSAPI credentials will force the rekeying of the | ||||||
| @ -19,6 +19,11 @@ diff -up openssh-7.1p1/ssh_config.5.gss-docs openssh-7.1p1/ssh_config.5 | |||||||
| +For this to work
 | +For this to work
 | ||||||
| +.Cm GSSAPIKeyExchange
 | +.Cm GSSAPIKeyExchange
 | ||||||
| +needs to be enabled in the server and also used by the client.
 | +needs to be enabled in the server and also used by the client.
 | ||||||
|  |  .It Cm GSSAPIServerIdentity | ||||||
|  |  If set, specifies the GSSAPI server identity that ssh should expect when  | ||||||
|  |  connecting to the server. The default is unset, which means that the | ||||||
|  | @@ -776,9 +785,11 @@ expected GSSAPI server identity will be
 | ||||||
|  |  hostname. | ||||||
|  .It Cm GSSAPITrustDns |  .It Cm GSSAPITrustDns | ||||||
|  Set to  |  Set to  | ||||||
| -.Dq yes to indicate that the DNS is trusted to securely canonicalize
 | -.Dq yes to indicate that the DNS is trusted to securely canonicalize
 | ||||||
| @ -31,10 +36,10 @@ diff -up openssh-7.1p1/ssh_config.5.gss-docs openssh-7.1p1/ssh_config.5 | |||||||
|  command line will be passed untouched to the GSSAPI library. |  command line will be passed untouched to the GSSAPI library. | ||||||
|  The default is |  The default is | ||||||
|  .Dq no . |  .Dq no . | ||||||
| diff -up openssh-7.1p1/sshd_config.5.gss-docs openssh-7.1p1/sshd_config.5
 | diff -up openssh-7.4p1/sshd_config.5.gss-docs openssh-7.4p1/sshd_config.5
 | ||||||
| --- openssh-7.1p1/sshd_config.5.gss-docs	2015-12-10 15:28:47.453966452 +0100
 | --- openssh-7.4p1/sshd_config.5.gss-docs	2016-12-23 14:28:34.043714490 +0100
 | ||||||
| +++ openssh-7.1p1/sshd_config.5	2015-12-10 15:28:47.461966434 +0100
 | +++ openssh-7.4p1/sshd_config.5	2016-12-23 14:28:34.051714486 +0100
 | ||||||
| @@ -653,6 +653,10 @@ Controls whether the user's GSSAPI crede
 | @@ -652,6 +652,10 @@ Controls whether the user's GSSAPI crede
 | ||||||
|  successful connection rekeying. This option can be used to accepted renewed  |  successful connection rekeying. This option can be used to accepted renewed  | ||||||
|  or updated credentials from a compatible client. The default is |  or updated credentials from a compatible client. The default is | ||||||
|  .Dq no . |  .Dq no . | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| diff -up openssh-7.3p1/monitor_wrap.c.audit-race openssh-7.3p1/monitor_wrap.c
 | diff -up openssh-7.4p1/monitor_wrap.c.audit-race openssh-7.4p1/monitor_wrap.c
 | ||||||
| --- openssh-7.3p1/monitor_wrap.c.audit-race	2016-12-15 14:27:22.376603747 +0100
 | --- openssh-7.4p1/monitor_wrap.c.audit-race	2016-12-23 16:35:52.694685771 +0100
 | ||||||
| +++ openssh-7.3p1/monitor_wrap.c	2016-12-15 14:27:22.381603742 +0100
 | +++ openssh-7.4p1/monitor_wrap.c	2016-12-23 16:35:52.697685772 +0100
 | ||||||
| @@ -1256,4 +1256,48 @@ mm_audit_destroy_sensitive_data(const ch
 | @@ -1107,4 +1107,48 @@ mm_audit_destroy_sensitive_data(const ch
 | ||||||
|  	mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_AUDIT_SERVER_KEY_FREE, &m); |  	mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_AUDIT_SERVER_KEY_FREE, &m); | ||||||
|  	buffer_free(&m); |  	buffer_free(&m); | ||||||
|  } |  } | ||||||
| @ -50,10 +50,10 @@ diff -up openssh-7.3p1/monitor_wrap.c.audit-race openssh-7.3p1/monitor_wrap.c | |||||||
| +	pmonitor->m_recvfd = fd;
 | +	pmonitor->m_recvfd = fd;
 | ||||||
| +}
 | +}
 | ||||||
|  #endif /* SSH_AUDIT_EVENTS */ |  #endif /* SSH_AUDIT_EVENTS */ | ||||||
| diff -up openssh-7.3p1/monitor_wrap.h.audit-race openssh-7.3p1/monitor_wrap.h
 | diff -up openssh-7.4p1/monitor_wrap.h.audit-race openssh-7.4p1/monitor_wrap.h
 | ||||||
| --- openssh-7.3p1/monitor_wrap.h.audit-race	2016-12-15 14:27:22.376603747 +0100
 | --- openssh-7.4p1/monitor_wrap.h.audit-race	2016-12-23 16:35:52.694685771 +0100
 | ||||||
| +++ openssh-7.3p1/monitor_wrap.h	2016-12-15 14:27:22.381603742 +0100
 | +++ openssh-7.4p1/monitor_wrap.h	2016-12-23 16:35:52.698685772 +0100
 | ||||||
| @@ -88,6 +88,8 @@ void mm_audit_unsupported_body(int);
 | @@ -83,6 +83,8 @@ void mm_audit_unsupported_body(int);
 | ||||||
|  void mm_audit_kex_body(int, char *, char *, char *, char *, pid_t, uid_t); |  void mm_audit_kex_body(int, char *, char *, char *, char *, pid_t, uid_t); | ||||||
|  void mm_audit_session_key_free_body(int, pid_t, uid_t); |  void mm_audit_session_key_free_body(int, pid_t, uid_t); | ||||||
|  void mm_audit_destroy_sensitive_data(const char *, pid_t, uid_t); |  void mm_audit_destroy_sensitive_data(const char *, pid_t, uid_t); | ||||||
| @ -62,10 +62,10 @@ diff -up openssh-7.3p1/monitor_wrap.h.audit-race openssh-7.3p1/monitor_wrap.h | |||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
|  struct Session; |  struct Session; | ||||||
| diff -up openssh-7.3p1/session.c.audit-race openssh-7.3p1/session.c
 | diff -up openssh-7.4p1/session.c.audit-race openssh-7.4p1/session.c
 | ||||||
| --- openssh-7.3p1/session.c.audit-race	2016-12-15 14:27:22.378603745 +0100
 | --- openssh-7.4p1/session.c.audit-race	2016-12-23 16:35:52.695685771 +0100
 | ||||||
| +++ openssh-7.3p1/session.c	2016-12-15 14:27:22.382603741 +0100
 | +++ openssh-7.4p1/session.c	2016-12-23 16:37:26.339730596 +0100
 | ||||||
| @@ -164,6 +164,10 @@ static Session *sessions = NULL;
 | @@ -162,6 +162,10 @@ static Session *sessions = NULL;
 | ||||||
|  login_cap_t *lc; |  login_cap_t *lc; | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
| @ -76,8 +76,8 @@ diff -up openssh-7.3p1/session.c.audit-race openssh-7.3p1/session.c | |||||||
|  static int is_child = 0; |  static int is_child = 0; | ||||||
|  static int in_chroot = 0; |  static int in_chroot = 0; | ||||||
|  static int have_dev_log = 1; |  static int have_dev_log = 1; | ||||||
| @@ -457,6 +457,8 @@ do_authenticated1(Authctxt *authctxt)
 | @@ -289,6 +293,8 @@ xauth_valid_string(const char *s)
 | ||||||
|  	} |  	return 1; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| +void child_destory_sensitive_data();
 | +void child_destory_sensitive_data();
 | ||||||
| @ -85,7 +85,7 @@ diff -up openssh-7.3p1/session.c.audit-race openssh-7.3p1/session.c | |||||||
|  #define USE_PIPES 1 |  #define USE_PIPES 1 | ||||||
|  /* |  /* | ||||||
|   * This is called to fork and execute a command when we have no tty.  This |   * This is called to fork and execute a command when we have no tty.  This | ||||||
| @@ -588,6 +592,8 @@ do_exec_no_pty(Session *s, const char *c
 | @@ -424,6 +430,8 @@ do_exec_no_pty(Session *s, const char *c
 | ||||||
|  		cray_init_job(s->pw); /* set up cray jid and tmpdir */ |  		cray_init_job(s->pw); /* set up cray jid and tmpdir */ | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
| @ -94,7 +94,7 @@ diff -up openssh-7.3p1/session.c.audit-race openssh-7.3p1/session.c | |||||||
|  		/* Do processing for the child (exec command etc). */ |  		/* Do processing for the child (exec command etc). */ | ||||||
|  		do_child(s, command); |  		do_child(s, command); | ||||||
|  		/* NOTREACHED */ |  		/* NOTREACHED */ | ||||||
| @@ -722,6 +728,9 @@ do_exec_pty(Session *s, const char *comm
 | @@ -547,6 +555,9 @@ do_exec_pty(Session *s, const char *comm
 | ||||||
|  		/* Close the extra descriptor for the pseudo tty. */ |  		/* Close the extra descriptor for the pseudo tty. */ | ||||||
|  		close(ttyfd); |  		close(ttyfd); | ||||||
|   |   | ||||||
| @ -102,9 +102,9 @@ diff -up openssh-7.3p1/session.c.audit-race openssh-7.3p1/session.c | |||||||
| +		child_destory_sensitive_data();
 | +		child_destory_sensitive_data();
 | ||||||
| +
 | +
 | ||||||
|  		/* record login, etc. similar to login(1) */ |  		/* record login, etc. similar to login(1) */ | ||||||
|  #ifndef HAVE_OSF_SIA |  #ifdef _UNICOS | ||||||
|  		if (!(options.use_login && command == NULL)) { |  		cray_init_job(s->pw); /* set up cray jid and tmpdir */ | ||||||
| @@ -903,6 +912,8 @@ do_exec(Session *s, const char *command)
 | @@ -717,6 +728,8 @@ do_exec(Session *s, const char *command)
 | ||||||
|  	} |  	} | ||||||
|  	if (s->command != NULL && s->ptyfd == -1) |  	if (s->command != NULL && s->ptyfd == -1) | ||||||
|  		s->command_handle = PRIVSEP(audit_run_command(s->command)); |  		s->command_handle = PRIVSEP(audit_run_command(s->command)); | ||||||
| @ -113,7 +113,7 @@ diff -up openssh-7.3p1/session.c.audit-race openssh-7.3p1/session.c | |||||||
|  #endif |  #endif | ||||||
|  	if (s->ttyfd != -1) |  	if (s->ttyfd != -1) | ||||||
|  		ret = do_exec_pty(s, command); |  		ret = do_exec_pty(s, command); | ||||||
| @@ -918,6 +929,20 @@ do_exec(Session *s, const char *command)
 | @@ -732,6 +745,20 @@ do_exec(Session *s, const char *command)
 | ||||||
|  	 */ |  	 */ | ||||||
|  	buffer_clear(&loginmsg); |  	buffer_clear(&loginmsg); | ||||||
|   |   | ||||||
| @ -134,7 +134,7 @@ diff -up openssh-7.3p1/session.c.audit-race openssh-7.3p1/session.c | |||||||
|  	return ret; |  	return ret; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -1751,6 +1776,33 @@ child_close_fds(void)
 | @@ -1538,6 +1565,33 @@ child_close_fds(void)
 | ||||||
|  	endpwent(); |  	endpwent(); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -168,7 +168,7 @@ diff -up openssh-7.3p1/session.c.audit-race openssh-7.3p1/session.c | |||||||
|  /* |  /* | ||||||
|   * Performs common processing for the child, such as setting up the |   * Performs common processing for the child, such as setting up the | ||||||
|   * environment, closing extra file descriptors, setting the user and group |   * environment, closing extra file descriptors, setting the user and group | ||||||
| @@ -1768,12 +1820,6 @@ do_child(Session *s, const char *command
 | @@ -1554,12 +1608,6 @@ do_child(Session *s, const char *command
 | ||||||
|  	struct passwd *pw = s->pw; |  	struct passwd *pw = s->pw; | ||||||
|  	int r = 0; |  	int r = 0; | ||||||
|   |   | ||||||
|  | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,6 +1,6 @@ | |||||||
| diff -up openssh-7.2p1/cipher.c.fips openssh-7.2p1/cipher.c
 | diff -up openssh-7.4p1/cipher.c.fips openssh-7.4p1/cipher.c
 | ||||||
| --- openssh-7.2p1/cipher.c.fips	2016-02-12 18:53:56.083665235 +0100
 | --- openssh-7.4p1/cipher.c.fips	2016-12-23 16:37:49.290741582 +0100
 | ||||||
| +++ openssh-7.2p1/cipher.c	2016-02-12 18:53:56.090665235 +0100
 | +++ openssh-7.4p1/cipher.c	2016-12-23 16:37:49.300741586 +0100
 | ||||||
| @@ -39,6 +39,8 @@
 | @@ -39,6 +39,8 @@
 | ||||||
|   |   | ||||||
|  #include <sys/types.h> |  #include <sys/types.h> | ||||||
| @ -10,7 +10,7 @@ diff -up openssh-7.2p1/cipher.c.fips openssh-7.2p1/cipher.c | |||||||
|  #include <string.h> |  #include <string.h> | ||||||
|  #include <stdarg.h> |  #include <stdarg.h> | ||||||
|  #include <stdio.h> |  #include <stdio.h> | ||||||
| @@ -99,6 +101,26 @@ static const struct sshcipher ciphers[]
 | @@ -116,6 +118,20 @@ static const struct sshcipher ciphers[]
 | ||||||
|  	{ NULL,		SSH_CIPHER_INVALID, 0, 0, 0, 0, 0, 0, NULL } |  	{ NULL,		SSH_CIPHER_INVALID, 0, 0, 0, 0, 0, 0, NULL } | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @ -25,19 +25,13 @@ diff -up openssh-7.2p1/cipher.c.fips openssh-7.2p1/cipher.c | |||||||
| +	{ "aes128-ctr",	SSH_CIPHER_SSH2, 16, 16, 0, 0, 0, 0, EVP_aes_128_ctr },
 | +	{ "aes128-ctr",	SSH_CIPHER_SSH2, 16, 16, 0, 0, 0, 0, EVP_aes_128_ctr },
 | ||||||
| +	{ "aes192-ctr",	SSH_CIPHER_SSH2, 16, 24, 0, 0, 0, 0, EVP_aes_192_ctr },
 | +	{ "aes192-ctr",	SSH_CIPHER_SSH2, 16, 24, 0, 0, 0, 0, EVP_aes_192_ctr },
 | ||||||
| +	{ "aes256-ctr",	SSH_CIPHER_SSH2, 16, 32, 0, 0, 0, 0, EVP_aes_256_ctr },
 | +	{ "aes256-ctr",	SSH_CIPHER_SSH2, 16, 32, 0, 0, 0, 0, EVP_aes_256_ctr },
 | ||||||
| +#ifdef OPENSSL_HAVE_EVPGCM
 |  | ||||||
| +	{ "aes128-gcm@openssh.com",
 |  | ||||||
| +			SSH_CIPHER_SSH2, 16, 16, 12, 16, 0, 0, EVP_aes_128_gcm },
 |  | ||||||
| +	{ "aes256-gcm@openssh.com",
 |  | ||||||
| +			SSH_CIPHER_SSH2, 16, 32, 12, 16, 0, 0, EVP_aes_256_gcm },
 |  | ||||||
| +#endif
 |  | ||||||
| +	{ NULL,		SSH_CIPHER_INVALID, 0, 0, 0, 0, 0, 0, NULL }
 | +	{ NULL,		SSH_CIPHER_INVALID, 0, 0, 0, 0, 0, 0, NULL }
 | ||||||
| +};
 | +};
 | ||||||
| +
 | +
 | ||||||
|  /*--*/ |  /*--*/ | ||||||
|   |   | ||||||
|  /* Returns a comma-separated list of supported ciphers. */ |  /* Returns a comma-separated list of supported ciphers. */ | ||||||
| @@ -109,7 +131,7 @@ cipher_alg_list(char sep, int auth_only)
 | @@ -126,7 +142,7 @@ cipher_alg_list(char sep, int auth_only)
 | ||||||
|  	size_t nlen, rlen = 0; |  	size_t nlen, rlen = 0; | ||||||
|  	const struct sshcipher *c; |  	const struct sshcipher *c; | ||||||
|   |   | ||||||
| @ -46,7 +40,7 @@ diff -up openssh-7.2p1/cipher.c.fips openssh-7.2p1/cipher.c | |||||||
|  		if (c->number != SSH_CIPHER_SSH2) |  		if (c->number != SSH_CIPHER_SSH2) | ||||||
|  			continue; |  			continue; | ||||||
|  		if (auth_only && c->auth_len == 0) |  		if (auth_only && c->auth_len == 0) | ||||||
| @@ -193,7 +215,7 @@ const struct sshcipher *
 | @@ -222,7 +238,7 @@ const struct sshcipher *
 | ||||||
|  cipher_by_name(const char *name) |  cipher_by_name(const char *name) | ||||||
|  { |  { | ||||||
|  	const struct sshcipher *c; |  	const struct sshcipher *c; | ||||||
| @ -55,7 +49,7 @@ diff -up openssh-7.2p1/cipher.c.fips openssh-7.2p1/cipher.c | |||||||
|  		if (strcmp(c->name, name) == 0) |  		if (strcmp(c->name, name) == 0) | ||||||
|  			return c; |  			return c; | ||||||
|  	return NULL; |  	return NULL; | ||||||
| @@ -203,7 +225,7 @@ const struct sshcipher *
 | @@ -232,7 +248,7 @@ const struct sshcipher *
 | ||||||
|  cipher_by_number(int id) |  cipher_by_number(int id) | ||||||
|  { |  { | ||||||
|  	const struct sshcipher *c; |  	const struct sshcipher *c; | ||||||
| @ -64,7 +58,7 @@ diff -up openssh-7.2p1/cipher.c.fips openssh-7.2p1/cipher.c | |||||||
|  		if (c->number == id) |  		if (c->number == id) | ||||||
|  			return c; |  			return c; | ||||||
|  	return NULL; |  	return NULL; | ||||||
| @@ -244,7 +266,7 @@ cipher_number(const char *name)
 | @@ -273,7 +289,7 @@ cipher_number(const char *name)
 | ||||||
|  	const struct sshcipher *c; |  	const struct sshcipher *c; | ||||||
|  	if (name == NULL) |  	if (name == NULL) | ||||||
|  		return -1; |  		return -1; | ||||||
| @ -73,9 +67,9 @@ diff -up openssh-7.2p1/cipher.c.fips openssh-7.2p1/cipher.c | |||||||
|  		if (strcasecmp(c->name, name) == 0) |  		if (strcasecmp(c->name, name) == 0) | ||||||
|  			return c->number; |  			return c->number; | ||||||
|  	return -1; |  	return -1; | ||||||
| diff -up openssh-7.2p1/cipher-ctr.c.fips openssh-7.2p1/cipher-ctr.c
 | diff -up openssh-7.4p1/cipher-ctr.c.fips openssh-7.4p1/cipher-ctr.c
 | ||||||
| --- openssh-7.2p1/cipher-ctr.c.fips	2016-02-12 18:53:56.013665228 +0100
 | --- openssh-7.4p1/cipher-ctr.c.fips	2016-12-23 16:37:49.225741551 +0100
 | ||||||
| +++ openssh-7.2p1/cipher-ctr.c	2016-02-12 18:53:56.090665235 +0100
 | +++ openssh-7.4p1/cipher-ctr.c	2016-12-23 16:37:49.297741585 +0100
 | ||||||
| @@ -179,7 +179,8 @@ evp_aes_128_ctr(void)
 | @@ -179,7 +179,8 @@ evp_aes_128_ctr(void)
 | ||||||
|  	aes_ctr.do_cipher = ssh_aes_ctr; |  	aes_ctr.do_cipher = ssh_aes_ctr; | ||||||
|  #ifndef SSH_OLD_EVP |  #ifndef SSH_OLD_EVP | ||||||
| @ -86,10 +80,10 @@ diff -up openssh-7.2p1/cipher-ctr.c.fips openssh-7.2p1/cipher-ctr.c | |||||||
|  #endif |  #endif | ||||||
|  	return (&aes_ctr); |  	return (&aes_ctr); | ||||||
|  } |  } | ||||||
| diff -up openssh-7.2p1/dh.h.fips openssh-7.2p1/dh.h
 | diff -up openssh-7.4p1/dh.h.fips openssh-7.4p1/dh.h
 | ||||||
| --- openssh-7.2p1/dh.h.fips	2016-02-12 18:53:56.090665235 +0100
 | --- openssh-7.4p1/dh.h.fips	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/dh.h	2016-02-12 18:54:48.425670204 +0100
 | +++ openssh-7.4p1/dh.h	2016-12-23 16:37:49.297741585 +0100
 | ||||||
| @@ -49,6 +49,7 @@ u_int	 dh_estimate(int);
 | @@ -51,6 +51,7 @@ u_int	 dh_estimate(int);
 | ||||||
|   * Miniumum increased in light of DH precomputation attacks. |   * Miniumum increased in light of DH precomputation attacks. | ||||||
|   */ |   */ | ||||||
|  #define DH_GRP_MIN	2048 |  #define DH_GRP_MIN	2048 | ||||||
| @ -97,9 +91,9 @@ diff -up openssh-7.2p1/dh.h.fips openssh-7.2p1/dh.h | |||||||
|  #define DH_GRP_MAX	8192 |  #define DH_GRP_MAX	8192 | ||||||
|   |   | ||||||
|  /* |  /* | ||||||
| diff -up openssh-7.2p1/entropy.c.fips openssh-7.2p1/entropy.c
 | diff -up openssh-7.4p1/entropy.c.fips openssh-7.4p1/entropy.c
 | ||||||
| --- openssh-7.2p1/entropy.c.fips	2016-02-12 18:53:56.005665227 +0100
 | --- openssh-7.4p1/entropy.c.fips	2016-12-23 16:37:49.219741548 +0100
 | ||||||
| +++ openssh-7.2p1/entropy.c	2016-02-12 18:53:56.091665235 +0100
 | +++ openssh-7.4p1/entropy.c	2016-12-23 16:37:49.297741585 +0100
 | ||||||
| @@ -217,6 +217,9 @@ seed_rng(void)
 | @@ -217,6 +217,9 @@ seed_rng(void)
 | ||||||
|  		fatal("OpenSSL version mismatch. Built against %lx, you " |  		fatal("OpenSSL version mismatch. Built against %lx, you " | ||||||
|  		    "have %lx", (u_long)OPENSSL_VERSION_NUMBER, SSLeay()); |  		    "have %lx", (u_long)OPENSSL_VERSION_NUMBER, SSLeay()); | ||||||
| @ -110,9 +104,9 @@ diff -up openssh-7.2p1/entropy.c.fips openssh-7.2p1/entropy.c | |||||||
|  #ifndef OPENSSL_PRNG_ONLY |  #ifndef OPENSSL_PRNG_ONLY | ||||||
|  	if (RAND_status() == 1) { |  	if (RAND_status() == 1) { | ||||||
|  		debug3("RNG is ready, skipping seeding"); |  		debug3("RNG is ready, skipping seeding"); | ||||||
| diff -up openssh-7.2p1/kex.c.fips openssh-7.2p1/kex.c
 | diff -up openssh-7.4p1/kex.c.fips openssh-7.4p1/kex.c
 | ||||||
| --- openssh-7.2p1/kex.c.fips	2016-02-12 18:53:56.084665234 +0100
 | --- openssh-7.4p1/kex.c.fips	2016-12-23 16:37:49.290741582 +0100
 | ||||||
| +++ openssh-7.2p1/kex.c	2016-02-12 18:53:56.091665235 +0100
 | +++ openssh-7.4p1/kex.c	2016-12-23 16:37:49.300741586 +0100
 | ||||||
| @@ -35,6 +35,7 @@
 | @@ -35,6 +35,7 @@
 | ||||||
|  #ifdef WITH_OPENSSL |  #ifdef WITH_OPENSSL | ||||||
|  #include <openssl/crypto.h> |  #include <openssl/crypto.h> | ||||||
| @ -121,13 +115,11 @@ diff -up openssh-7.2p1/kex.c.fips openssh-7.2p1/kex.c | |||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
|  #include "ssh2.h" |  #include "ssh2.h" | ||||||
| @@ -121,6 +122,25 @@ static const struct kexalg kexalgs[] = {
 | @@ -125,6 +126,23 @@ static const struct kexalg kexalgs[] = {
 | ||||||
|  	{ NULL, -1, -1, -1}, |  	{ NULL, -1, -1, -1}, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| +static const struct kexalg kexalgs_fips[] = {
 | +static const struct kexalg kexalgs_fips[] = {
 | ||||||
| +	{ KEX_DH14, KEX_DH_GRP14_SHA1, 0, SSH_DIGEST_SHA1 },
 |  | ||||||
| +	{ KEX_DHGEX_SHA1, KEX_DH_GEX_SHA1, 0, SSH_DIGEST_SHA1 },
 |  | ||||||
| +#ifdef HAVE_EVP_SHA256
 | +#ifdef HAVE_EVP_SHA256
 | ||||||
| +	{ KEX_DHGEX_SHA256, KEX_DH_GEX_SHA256, 0, SSH_DIGEST_SHA256 },
 | +	{ KEX_DHGEX_SHA256, KEX_DH_GEX_SHA256, 0, SSH_DIGEST_SHA256 },
 | ||||||
| +#endif
 | +#endif
 | ||||||
| @ -147,7 +139,7 @@ diff -up openssh-7.2p1/kex.c.fips openssh-7.2p1/kex.c | |||||||
|  char * |  char * | ||||||
|  kex_alg_list(char sep) |  kex_alg_list(char sep) | ||||||
|  { |  { | ||||||
| @@ -148,7 +168,7 @@ kex_alg_by_name(const char *name)
 | @@ -152,7 +170,7 @@ kex_alg_by_name(const char *name)
 | ||||||
|  { |  { | ||||||
|  	const struct kexalg *k; |  	const struct kexalg *k; | ||||||
|   |   | ||||||
| @ -156,7 +148,7 @@ diff -up openssh-7.2p1/kex.c.fips openssh-7.2p1/kex.c | |||||||
|  		if (strcmp(k->name, name) == 0) |  		if (strcmp(k->name, name) == 0) | ||||||
|  			return k; |  			return k; | ||||||
|  #ifdef GSSAPI |  #ifdef GSSAPI | ||||||
| @@ -174,7 +194,10 @@ kex_names_valid(const char *names)
 | @@ -178,7 +196,10 @@ kex_names_valid(const char *names)
 | ||||||
|  	for ((p = strsep(&cp, ",")); p && *p != '\0'; |  	for ((p = strsep(&cp, ",")); p && *p != '\0'; | ||||||
|  	    (p = strsep(&cp, ","))) { |  	    (p = strsep(&cp, ","))) { | ||||||
|  		if (kex_alg_by_name(p) == NULL) { |  		if (kex_alg_by_name(p) == NULL) { | ||||||
| @ -168,17 +160,17 @@ diff -up openssh-7.2p1/kex.c.fips openssh-7.2p1/kex.c | |||||||
|  			free(s); |  			free(s); | ||||||
|  			return 0; |  			return 0; | ||||||
|  		} |  		} | ||||||
| diff -up openssh-7.2p1/kexgexc.c.fips openssh-7.2p1/kexgexc.c
 | diff -up openssh-7.4p1/kexgexc.c.fips openssh-7.4p1/kexgexc.c
 | ||||||
| --- openssh-7.2p1/kexgexc.c.fips	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/kexgexc.c.fips	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/kexgexc.c	2016-02-12 18:53:56.091665235 +0100
 | +++ openssh-7.4p1/kexgexc.c	2016-12-23 16:38:38.727763540 +0100
 | ||||||
| @@ -28,6 +28,7 @@
 | @@ -28,6 +28,7 @@
 | ||||||
|   |   | ||||||
|  #ifdef WITH_OPENSSL |  #ifdef WITH_OPENSSL | ||||||
|   |   | ||||||
| +#include <openssl/fips.h>
 | +#include <openssl/fips.h>
 | ||||||
|  #include <sys/param.h> |  | ||||||
|  #include <sys/types.h> |  #include <sys/types.h> | ||||||
|   |   | ||||||
|  |  #include <openssl/dh.h> | ||||||
| @@ -63,7 +64,7 @@ kexgex_client(struct ssh *ssh)
 | @@ -63,7 +64,7 @@ kexgex_client(struct ssh *ssh)
 | ||||||
|   |   | ||||||
|  	nbits = dh_estimate(kex->dh_need * 8); |  	nbits = dh_estimate(kex->dh_need * 8); | ||||||
| @ -188,24 +180,24 @@ diff -up openssh-7.2p1/kexgexc.c.fips openssh-7.2p1/kexgexc.c | |||||||
|  	kex->max = DH_GRP_MAX; |  	kex->max = DH_GRP_MAX; | ||||||
|  	kex->nbits = nbits; |  	kex->nbits = nbits; | ||||||
|  	if (datafellows & SSH_BUG_DHGEX_LARGE) |  	if (datafellows & SSH_BUG_DHGEX_LARGE) | ||||||
| diff -up openssh-7.2p1/kexgexs.c.fips openssh-7.2p1/kexgexs.c
 | diff -up openssh-7.4p1/kexgexs.c.fips openssh-7.4p1/kexgexs.c
 | ||||||
| --- openssh-7.2p1/kexgexs.c.fips	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/kexgexs.c.fips	2016-12-23 16:37:49.297741585 +0100
 | ||||||
| +++ openssh-7.2p1/kexgexs.c	2016-02-12 18:53:56.091665235 +0100
 | +++ openssh-7.4p1/kexgexs.c	2016-12-23 16:39:35.009776626 +0100
 | ||||||
| @@ -83,9 +83,9 @@ input_kex_dh_gex_request(int type, u_int
 | @@ -83,9 +83,9 @@ input_kex_dh_gex_request(int type, u_int
 | ||||||
|  	kex->nbits = nbits; |  	kex->nbits = nbits; | ||||||
|  	kex->min = min; |  	kex->min = min; | ||||||
|  	kex->max = max; |  	kex->max = max; | ||||||
| -	min = MAX(DH_GRP_MIN, min);
 | -	min = MAXIMUM(DH_GRP_MIN, min);
 | ||||||
| +	min = MAX(FIPS_mode() ? DH_GRP_MIN_FIPS : DH_GRP_MIN, min);
 | +	min = MAXIMUM(FIPS_mode() ? DH_GRP_MIN_FIPS : DH_GRP_MIN, min);
 | ||||||
|  	max = MIN(DH_GRP_MAX, max); |  	max = MINIMUM(DH_GRP_MAX, max); | ||||||
| -	nbits = MAX(DH_GRP_MIN, nbits);
 | -	nbits = MAXIMUM(DH_GRP_MIN, nbits);
 | ||||||
| +	nbits = MAX(FIPS_mode() ? DH_GRP_MIN_FIPS : DH_GRP_MIN, nbits);
 | +	nbits = MAXIMUM(FIPS_mode() ? DH_GRP_MIN_FIPS : DH_GRP_MIN, nbits);
 | ||||||
|  	nbits = MIN(DH_GRP_MAX, nbits); |  	nbits = MINIMUM(DH_GRP_MAX, nbits); | ||||||
|   |   | ||||||
|  	if (kex->max < kex->min || kex->nbits < kex->min || |  	if (kex->max < kex->min || kex->nbits < kex->min || | ||||||
| diff -up openssh-7.2p1/mac.c.fips openssh-7.2p1/mac.c
 | diff -up openssh-7.4p1/mac.c.fips openssh-7.4p1/mac.c
 | ||||||
| --- openssh-7.2p1/mac.c.fips	2016-02-12 18:53:56.084665234 +0100
 | --- openssh-7.4p1/mac.c.fips	2016-12-23 16:37:49.291741582 +0100
 | ||||||
| +++ openssh-7.2p1/mac.c	2016-02-12 18:53:56.091665235 +0100
 | +++ openssh-7.4p1/mac.c	2016-12-23 16:37:49.298741585 +0100
 | ||||||
| @@ -27,6 +27,8 @@
 | @@ -27,6 +27,8 @@
 | ||||||
|   |   | ||||||
|  #include <sys/types.h> |  #include <sys/types.h> | ||||||
| @ -224,7 +216,7 @@ diff -up openssh-7.2p1/mac.c.fips openssh-7.2p1/mac.c | |||||||
|  	/* Encrypt-and-MAC (encrypt-and-authenticate) variants */ |  	/* Encrypt-and-MAC (encrypt-and-authenticate) variants */ | ||||||
|  	{ "hmac-sha1",				SSH_DIGEST, SSH_DIGEST_SHA1, 0, 0, 0, 0 }, |  	{ "hmac-sha1",				SSH_DIGEST, SSH_DIGEST_SHA1, 0, 0, 0, 0 }, | ||||||
|  	{ "hmac-sha1-96",			SSH_DIGEST, SSH_DIGEST_SHA1, 96, 0, 0, 0 }, |  	{ "hmac-sha1-96",			SSH_DIGEST, SSH_DIGEST_SHA1, 96, 0, 0, 0 }, | ||||||
| @@ -85,6 +87,24 @@ static const struct macalg macs[] = {
 | @@ -89,6 +91,24 @@ static const struct macalg macs[] = {
 | ||||||
|  	{ NULL,					0, 0, 0, 0, 0, 0 } |  	{ NULL,					0, 0, 0, 0, 0, 0 } | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @ -249,7 +241,7 @@ diff -up openssh-7.2p1/mac.c.fips openssh-7.2p1/mac.c | |||||||
|  /* Returns a list of supported MACs separated by the specified char. */ |  /* Returns a list of supported MACs separated by the specified char. */ | ||||||
|  char * |  char * | ||||||
|  mac_alg_list(char sep) |  mac_alg_list(char sep) | ||||||
| @@ -93,7 +113,7 @@ mac_alg_list(char sep)
 | @@ -97,7 +117,7 @@ mac_alg_list(char sep)
 | ||||||
|  	size_t nlen, rlen = 0; |  	size_t nlen, rlen = 0; | ||||||
|  	const struct macalg *m; |  	const struct macalg *m; | ||||||
|   |   | ||||||
| @ -258,7 +250,7 @@ diff -up openssh-7.2p1/mac.c.fips openssh-7.2p1/mac.c | |||||||
|  		if (ret != NULL) |  		if (ret != NULL) | ||||||
|  			ret[rlen++] = sep; |  			ret[rlen++] = sep; | ||||||
|  		nlen = strlen(m->name); |  		nlen = strlen(m->name); | ||||||
| @@ -132,7 +152,7 @@ mac_setup(struct sshmac *mac, char *name
 | @@ -136,7 +156,7 @@ mac_setup(struct sshmac *mac, char *name
 | ||||||
|  { |  { | ||||||
|  	const struct macalg *m; |  	const struct macalg *m; | ||||||
|   |   | ||||||
| @ -267,10 +259,10 @@ diff -up openssh-7.2p1/mac.c.fips openssh-7.2p1/mac.c | |||||||
|  		if (strcmp(name, m->name) != 0) |  		if (strcmp(name, m->name) != 0) | ||||||
|  			continue; |  			continue; | ||||||
|  		if (mac != NULL) |  		if (mac != NULL) | ||||||
| diff -up openssh-7.2p1/Makefile.in.fips openssh-7.2p1/Makefile.in
 | diff -up openssh-7.4p1/Makefile.in.fips openssh-7.4p1/Makefile.in
 | ||||||
| --- openssh-7.2p1/Makefile.in.fips	2016-02-12 18:53:56.085665235 +0100
 | --- openssh-7.4p1/Makefile.in.fips	2016-12-23 16:37:49.291741582 +0100
 | ||||||
| +++ openssh-7.2p1/Makefile.in	2016-02-12 18:53:56.092665235 +0100
 | +++ openssh-7.4p1/Makefile.in	2016-12-23 16:37:49.298741585 +0100
 | ||||||
| @@ -168,25 +168,25 @@ libssh.a: $(LIBSSH_OBJS)
 | @@ -169,25 +169,25 @@ libssh.a: $(LIBSSH_OBJS)
 | ||||||
|  	$(RANLIB) $@ |  	$(RANLIB) $@ | ||||||
|   |   | ||||||
|  ssh$(EXEEXT): $(LIBCOMPAT) libssh.a $(SSHOBJS) |  ssh$(EXEEXT): $(LIBCOMPAT) libssh.a $(SSHOBJS) | ||||||
| @ -302,7 +294,7 @@ diff -up openssh-7.2p1/Makefile.in.fips openssh-7.2p1/Makefile.in | |||||||
|   |   | ||||||
|  ssh-pkcs11-helper$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-pkcs11-helper.o ssh-pkcs11.o |  ssh-pkcs11-helper$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-pkcs11-helper.o ssh-pkcs11.o | ||||||
|  	$(LD) -o $@ ssh-pkcs11-helper.o ssh-pkcs11.o $(LDFLAGS) -lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS) |  	$(LD) -o $@ ssh-pkcs11-helper.o ssh-pkcs11.o $(LDFLAGS) -lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS) | ||||||
| @@ -204,7 +204,7 @@ ssh-cavs$(EXEEXT): $(LIBCOMPAT) libssh.a
 | @@ -205,7 +205,7 @@ ssh-cavs$(EXEEXT): $(LIBCOMPAT) libssh.a
 | ||||||
|  	$(LD) -o $@ ssh-cavs.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS) |  	$(LD) -o $@ ssh-cavs.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS) | ||||||
|   |   | ||||||
|  ssh-keyscan$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keyscan.o |  ssh-keyscan$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keyscan.o | ||||||
| @ -311,18 +303,16 @@ diff -up openssh-7.2p1/Makefile.in.fips openssh-7.2p1/Makefile.in | |||||||
|   |   | ||||||
|  sftp-server$(EXEEXT): $(LIBCOMPAT) libssh.a sftp.o sftp-common.o sftp-server.o sftp-server-main.o |  sftp-server$(EXEEXT): $(LIBCOMPAT) libssh.a sftp.o sftp-common.o sftp-server.o sftp-server-main.o | ||||||
|  	$(LD) -o $@ sftp-server.o sftp-common.o sftp-server-main.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS) |  	$(LD) -o $@ sftp-server.o sftp-common.o sftp-server-main.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS) | ||||||
| diff -up openssh-7.2p1/myproposal.h.fips openssh-7.2p1/myproposal.h
 | diff -up openssh-7.4p1/myproposal.h.fips openssh-7.4p1/myproposal.h
 | ||||||
| --- openssh-7.2p1/myproposal.h.fips	2016-02-12 18:53:56.092665235 +0100
 | --- openssh-7.4p1/myproposal.h.fips	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/myproposal.h	2016-02-12 18:55:42.137675304 +0100
 | +++ openssh-7.4p1/myproposal.h	2016-12-23 16:37:49.300741586 +0100
 | ||||||
| @@ -129,6 +129,28 @@
 | @@ -138,6 +138,26 @@
 | ||||||
|   |   | ||||||
|  #define KEX_CLIENT_MAC KEX_SERVER_MAC |  #define KEX_CLIENT_MAC KEX_SERVER_MAC | ||||||
|   |   | ||||||
| +#define KEX_DEFAULT_KEX_FIPS		\
 | +#define KEX_DEFAULT_KEX_FIPS		\
 | ||||||
| +	KEX_ECDH_METHODS \
 | +	KEX_ECDH_METHODS \
 | ||||||
| +	KEX_SHA2_METHODS \
 | +	KEX_SHA2_METHODS
 | ||||||
| +	"diffie-hellman-group-exchange-sha1," \
 |  | ||||||
| +	"diffie-hellman-group14-sha1"
 |  | ||||||
| +#define	KEX_FIPS_ENCRYPT \
 | +#define	KEX_FIPS_ENCRYPT \
 | ||||||
| +	"aes128-ctr,aes192-ctr,aes256-ctr," \
 | +	"aes128-ctr,aes192-ctr,aes256-ctr," \
 | ||||||
| +	"aes128-cbc,3des-cbc," \
 | +	"aes128-cbc,3des-cbc," \
 | ||||||
| @ -343,10 +333,31 @@ diff -up openssh-7.2p1/myproposal.h.fips openssh-7.2p1/myproposal.h | |||||||
|  #else /* WITH_OPENSSL */ |  #else /* WITH_OPENSSL */ | ||||||
|   |   | ||||||
|  #define KEX_SERVER_KEX		\ |  #define KEX_SERVER_KEX		\ | ||||||
| diff -up openssh-7.2p1/readconf.c.fips openssh-7.2p1/readconf.c
 | diff -up openssh-7.4p1/pam_ssh_agent_auth-0.10.2/pam_user_key_allowed2.c.fips openssh-7.4p1/pam_ssh_agent_auth-0.10.2/pam_user_key_allowed2.c
 | ||||||
| --- openssh-7.2p1/readconf.c.fips	2016-02-12 18:53:56.073665234 +0100
 | --- openssh-7.4p1/pam_ssh_agent_auth-0.10.2/pam_user_key_allowed2.c.fips	2016-12-23 16:37:49.185741531 +0100
 | ||||||
| +++ openssh-7.2p1/readconf.c	2016-02-12 18:53:56.092665235 +0100
 | +++ openssh-7.4p1/pam_ssh_agent_auth-0.10.2/pam_user_key_allowed2.c	2016-12-23 16:37:49.300741586 +0100
 | ||||||
| @@ -1969,9 +1969,12 @@ fill_default_options(Options * options)
 | @@ -55,6 +55,7 @@
 | ||||||
|  |  #include "secure_filename.h" | ||||||
|  |  #include "uidswap.h" | ||||||
|  |  #include <unistd.h> | ||||||
|  | +#include <openssl/crypto.h>
 | ||||||
|  |   | ||||||
|  |  #include "identity.h" | ||||||
|  |   | ||||||
|  | @@ -104,7 +105,8 @@ pamsshagentauth_check_authkeys_file(FILE
 | ||||||
|  |              found_key = 1; | ||||||
|  |              logit("matching key found: file/command %s, line %lu", file, | ||||||
|  |                                    linenum); | ||||||
|  | -            fp = sshkey_fingerprint(found, SSH_DIGEST_MD5, SSH_FP_HEX);
 | ||||||
|  | +            fp = sshkey_fingerprint(found, FIPS_mode() ? SSH_DIGEST_SHA1 : SSH_DIGEST_MD5,
 | ||||||
|  | +				SSH_FP_HEX);
 | ||||||
|  |              logit("Found matching %s key: %s", | ||||||
|  |                                    key_type(found), fp); | ||||||
|  |              free(fp); | ||||||
|  | diff -up openssh-7.4p1/readconf.c.fips openssh-7.4p1/readconf.c
 | ||||||
|  | --- openssh-7.4p1/readconf.c.fips	2016-12-23 16:37:49.274741574 +0100
 | ||||||
|  | +++ openssh-7.4p1/readconf.c	2016-12-23 16:37:49.298741585 +0100
 | ||||||
|  | @@ -2110,9 +2110,12 @@ fill_default_options(Options * options)
 | ||||||
|  	} |  	} | ||||||
|  	if (options->update_hostkeys == -1) |  	if (options->update_hostkeys == -1) | ||||||
|  		options->update_hostkeys = 0; |  		options->update_hostkeys = 0; | ||||||
| @ -362,10 +373,23 @@ diff -up openssh-7.2p1/readconf.c.fips openssh-7.2p1/readconf.c | |||||||
|  	    kex_assemble_names(KEX_DEFAULT_PK_ALG, |  	    kex_assemble_names(KEX_DEFAULT_PK_ALG, | ||||||
|  	    &options->hostbased_key_types) != 0 || |  	    &options->hostbased_key_types) != 0 || | ||||||
|  	    kex_assemble_names(KEX_DEFAULT_PK_ALG, |  	    kex_assemble_names(KEX_DEFAULT_PK_ALG, | ||||||
| diff -up openssh-7.2p1/servconf.c.fips openssh-7.2p1/servconf.c
 | diff -up openssh-7.4p1/sandbox-seccomp-filter.c.fips openssh-7.4p1/sandbox-seccomp-filter.c
 | ||||||
| --- openssh-7.2p1/servconf.c.fips	2016-02-12 18:53:56.068665233 +0100
 | --- openssh-7.4p1/sandbox-seccomp-filter.c.fips	2016-12-23 16:37:49.292741583 +0100
 | ||||||
| +++ openssh-7.2p1/servconf.c	2016-02-12 18:56:52.185681954 +0100
 | +++ openssh-7.4p1/sandbox-seccomp-filter.c	2016-12-23 16:37:49.300741586 +0100
 | ||||||
| @@ -188,9 +188,12 @@ option_clear_or_none(const char *o)
 | @@ -118,6 +118,9 @@ static const struct sock_filter preauth_
 | ||||||
|  |  #ifdef __NR_open | ||||||
|  |  	SC_DENY(open, EACCES), | ||||||
|  |  #endif | ||||||
|  | +#ifdef __NR_socket
 | ||||||
|  | +	SC_DENY(socket, EACCES),
 | ||||||
|  | +#endif
 | ||||||
|  |  #ifdef __NR_openat | ||||||
|  |  	SC_DENY(openat, EACCES), | ||||||
|  |  #endif | ||||||
|  | diff -up openssh-7.4p1/servconf.c.fips openssh-7.4p1/servconf.c
 | ||||||
|  | --- openssh-7.4p1/servconf.c.fips	2016-12-23 16:37:49.285741579 +0100
 | ||||||
|  | +++ openssh-7.4p1/servconf.c	2016-12-23 16:37:49.299741586 +0100
 | ||||||
|  | @@ -185,9 +185,12 @@ option_clear_or_none(const char *o)
 | ||||||
|  static void |  static void | ||||||
|  assemble_algorithms(ServerOptions *o) |  assemble_algorithms(ServerOptions *o) | ||||||
|  { |  { | ||||||
| @ -381,7 +405,7 @@ diff -up openssh-7.2p1/servconf.c.fips openssh-7.2p1/servconf.c | |||||||
|  	    kex_assemble_names(KEX_DEFAULT_PK_ALG, |  	    kex_assemble_names(KEX_DEFAULT_PK_ALG, | ||||||
|  	    &o->hostkeyalgorithms) != 0 || |  	    &o->hostkeyalgorithms) != 0 || | ||||||
|  	    kex_assemble_names(KEX_DEFAULT_PK_ALG, |  	    kex_assemble_names(KEX_DEFAULT_PK_ALG, | ||||||
| @@ -2376,8 +2379,10 @@ dump_config(ServerOptions *o)
 | @@ -2390,8 +2393,10 @@ dump_config(ServerOptions *o)
 | ||||||
|  	/* string arguments */ |  	/* string arguments */ | ||||||
|  	dump_cfg_string(sPidFile, o->pid_file); |  	dump_cfg_string(sPidFile, o->pid_file); | ||||||
|  	dump_cfg_string(sXAuthLocation, o->xauth_location); |  	dump_cfg_string(sXAuthLocation, o->xauth_location); | ||||||
| @ -394,7 +418,7 @@ diff -up openssh-7.2p1/servconf.c.fips openssh-7.2p1/servconf.c | |||||||
|  	dump_cfg_string(sBanner, o->banner != NULL ? o->banner : "none"); |  	dump_cfg_string(sBanner, o->banner != NULL ? o->banner : "none"); | ||||||
|  	dump_cfg_string(sForceCommand, o->adm_forced_command); |  	dump_cfg_string(sForceCommand, o->adm_forced_command); | ||||||
|  	dump_cfg_string(sChrootDirectory, o->chroot_directory); |  	dump_cfg_string(sChrootDirectory, o->chroot_directory); | ||||||
| @@ -2392,8 +2397,8 @@ dump_config(ServerOptions *o)
 | @@ -2406,8 +2411,8 @@ dump_config(ServerOptions *o)
 | ||||||
|  	dump_cfg_string(sAuthorizedPrincipalsCommand, o->authorized_principals_command); |  	dump_cfg_string(sAuthorizedPrincipalsCommand, o->authorized_principals_command); | ||||||
|  	dump_cfg_string(sAuthorizedPrincipalsCommandUser, o->authorized_principals_command_user); |  	dump_cfg_string(sAuthorizedPrincipalsCommandUser, o->authorized_principals_command_user); | ||||||
|  	dump_cfg_string(sHostKeyAgent, o->host_key_agent); |  	dump_cfg_string(sHostKeyAgent, o->host_key_agent); | ||||||
| @ -405,10 +429,10 @@ diff -up openssh-7.2p1/servconf.c.fips openssh-7.2p1/servconf.c | |||||||
|  	dump_cfg_string(sHostbasedAcceptedKeyTypes, o->hostbased_key_types ? |  	dump_cfg_string(sHostbasedAcceptedKeyTypes, o->hostbased_key_types ? | ||||||
|  	    o->hostbased_key_types : KEX_DEFAULT_PK_ALG); |  	    o->hostbased_key_types : KEX_DEFAULT_PK_ALG); | ||||||
|  	dump_cfg_string(sHostKeyAlgorithms, o->hostkeyalgorithms ? |  	dump_cfg_string(sHostKeyAlgorithms, o->hostkeyalgorithms ? | ||||||
| diff -up openssh-7.2p1/ssh.c.fips openssh-7.2p1/ssh.c
 | diff -up openssh-7.4p1/ssh.c.fips openssh-7.4p1/ssh.c
 | ||||||
| --- openssh-7.2p1/ssh.c.fips	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/ssh.c.fips	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/ssh.c	2016-02-12 18:53:56.093665236 +0100
 | +++ openssh-7.4p1/ssh.c	2016-12-23 16:37:49.299741586 +0100
 | ||||||
| @@ -75,6 +75,8 @@
 | @@ -76,6 +76,8 @@
 | ||||||
|  #include <openssl/evp.h> |  #include <openssl/evp.h> | ||||||
|  #include <openssl/err.h> |  #include <openssl/err.h> | ||||||
|  #endif |  #endif | ||||||
| @ -417,7 +441,7 @@ diff -up openssh-7.2p1/ssh.c.fips openssh-7.2p1/ssh.c | |||||||
|  #include "openbsd-compat/openssl-compat.h" |  #include "openbsd-compat/openssl-compat.h" | ||||||
|  #include "openbsd-compat/sys-queue.h" |  #include "openbsd-compat/sys-queue.h" | ||||||
|   |   | ||||||
| @@ -531,6 +533,14 @@ main(int ac, char **av)
 | @@ -530,6 +532,14 @@ main(int ac, char **av)
 | ||||||
|  	sanitise_stdfd(); |  	sanitise_stdfd(); | ||||||
|   |   | ||||||
|  	__progname = ssh_get_progname(av[0]); |  	__progname = ssh_get_progname(av[0]); | ||||||
| @ -432,7 +456,7 @@ diff -up openssh-7.2p1/ssh.c.fips openssh-7.2p1/ssh.c | |||||||
|   |   | ||||||
|  #ifndef HAVE_SETPROCTITLE |  #ifndef HAVE_SETPROCTITLE | ||||||
|  	/* Prepare for later setproctitle emulation */ |  	/* Prepare for later setproctitle emulation */ | ||||||
| @@ -608,6 +618,9 @@ main(int ac, char **av)
 | @@ -609,6 +619,9 @@ main(int ac, char **av)
 | ||||||
|  	    "ACD:E:F:GI:J:KL:MNO:PQ:R:S:TVw:W:XYy")) != -1) { |  	    "ACD:E:F:GI:J:KL:MNO:PQ:R:S:TVw:W:XYy")) != -1) { | ||||||
|  		switch (opt) { |  		switch (opt) { | ||||||
|  		case '1': |  		case '1': | ||||||
| @ -442,7 +466,7 @@ diff -up openssh-7.2p1/ssh.c.fips openssh-7.2p1/ssh.c | |||||||
|  			options.protocol = SSH_PROTO_1; |  			options.protocol = SSH_PROTO_1; | ||||||
|  			break; |  			break; | ||||||
|  		case '2': |  		case '2': | ||||||
| @@ -952,7 +965,6 @@ main(int ac, char **av)
 | @@ -964,7 +977,6 @@ main(int ac, char **av)
 | ||||||
|  	host_arg = xstrdup(host); |  	host_arg = xstrdup(host); | ||||||
|   |   | ||||||
|  #ifdef WITH_OPENSSL |  #ifdef WITH_OPENSSL | ||||||
| @ -450,7 +474,7 @@ diff -up openssh-7.2p1/ssh.c.fips openssh-7.2p1/ssh.c | |||||||
|  	ERR_load_crypto_strings(); |  	ERR_load_crypto_strings(); | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
| @@ -1126,6 +1138,10 @@ main(int ac, char **av)
 | @@ -1175,6 +1187,10 @@ main(int ac, char **av)
 | ||||||
|   |   | ||||||
|  	seed_rng(); |  	seed_rng(); | ||||||
|   |   | ||||||
| @ -461,7 +485,7 @@ diff -up openssh-7.2p1/ssh.c.fips openssh-7.2p1/ssh.c | |||||||
|  	if (options.user == NULL) |  	if (options.user == NULL) | ||||||
|  		options.user = xstrdup(pw->pw_name); |  		options.user = xstrdup(pw->pw_name); | ||||||
|   |   | ||||||
| @@ -1206,6 +1222,12 @@ main(int ac, char **av)
 | @@ -1263,6 +1279,12 @@ main(int ac, char **av)
 | ||||||
|   |   | ||||||
|  	timeout_ms = options.connection_timeout * 1000; |  	timeout_ms = options.connection_timeout * 1000; | ||||||
|   |   | ||||||
| @ -474,9 +498,9 @@ diff -up openssh-7.2p1/ssh.c.fips openssh-7.2p1/ssh.c | |||||||
|  	/* Open a connection to the remote host. */ |  	/* Open a connection to the remote host. */ | ||||||
|  	if (ssh_connect(host, addrs, &hostaddr, options.port, |  	if (ssh_connect(host, addrs, &hostaddr, options.port, | ||||||
|  	    options.address_family, options.connection_attempts, |  	    options.address_family, options.connection_attempts, | ||||||
| diff -up openssh-7.2p1/sshconnect2.c.fips openssh-7.2p1/sshconnect2.c
 | diff -up openssh-7.4p1/sshconnect2.c.fips openssh-7.4p1/sshconnect2.c
 | ||||||
| --- openssh-7.2p1/sshconnect2.c.fips	2016-02-12 18:53:56.074665234 +0100
 | --- openssh-7.4p1/sshconnect2.c.fips	2016-12-23 16:37:49.275741574 +0100
 | ||||||
| +++ openssh-7.2p1/sshconnect2.c	2016-02-12 18:53:56.094665236 +0100
 | +++ openssh-7.4p1/sshconnect2.c	2016-12-23 16:37:49.299741586 +0100
 | ||||||
| @@ -44,6 +44,8 @@
 | @@ -44,6 +44,8 @@
 | ||||||
|  #include <vis.h> |  #include <vis.h> | ||||||
|  #endif |  #endif | ||||||
| @ -486,7 +510,7 @@ diff -up openssh-7.2p1/sshconnect2.c.fips openssh-7.2p1/sshconnect2.c | |||||||
|  #include "openbsd-compat/sys-queue.h" |  #include "openbsd-compat/sys-queue.h" | ||||||
|   |   | ||||||
|  #include "xmalloc.h" |  #include "xmalloc.h" | ||||||
| @@ -171,21 +173,26 @@ ssh_kex2(char *host, struct sockaddr *ho
 | @@ -172,21 +174,26 @@ ssh_kex2(char *host, struct sockaddr *ho
 | ||||||
|   |   | ||||||
|  #ifdef GSSAPI |  #ifdef GSSAPI | ||||||
|  	if (options.gss_keyex) { |  	if (options.gss_keyex) { | ||||||
| @ -528,9 +552,9 @@ diff -up openssh-7.2p1/sshconnect2.c.fips openssh-7.2p1/sshconnect2.c | |||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
|  #endif |  #endif | ||||||
| diff -up openssh-7.2p1/sshd.c.fips openssh-7.2p1/sshd.c
 | diff -up openssh-7.4p1/sshd.c.fips openssh-7.4p1/sshd.c
 | ||||||
| --- openssh-7.2p1/sshd.c.fips	2016-02-12 18:53:56.088665235 +0100
 | --- openssh-7.4p1/sshd.c.fips	2016-12-23 16:37:49.293741583 +0100
 | ||||||
| +++ openssh-7.2p1/sshd.c	2016-02-12 18:53:56.094665236 +0100
 | +++ openssh-7.4p1/sshd.c	2016-12-23 16:37:49.299741586 +0100
 | ||||||
| @@ -66,6 +66,7 @@
 | @@ -66,6 +66,7 @@
 | ||||||
|  #include <grp.h> |  #include <grp.h> | ||||||
|  #include <pwd.h> |  #include <pwd.h> | ||||||
| @ -548,7 +572,7 @@ diff -up openssh-7.2p1/sshd.c.fips openssh-7.2p1/sshd.c | |||||||
|  #include "openbsd-compat/openssl-compat.h" |  #include "openbsd-compat/openssl-compat.h" | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
| @@ -1555,6 +1558,18 @@ main(int ac, char **av)
 | @@ -1475,6 +1478,18 @@ main(int ac, char **av)
 | ||||||
|  #endif |  #endif | ||||||
|  	__progname = ssh_get_progname(av[0]); |  	__progname = ssh_get_progname(av[0]); | ||||||
|   |   | ||||||
| @ -567,7 +591,7 @@ diff -up openssh-7.2p1/sshd.c.fips openssh-7.2p1/sshd.c | |||||||
|  	/* Save argv. Duplicate so setproctitle emulation doesn't clobber it */ |  	/* Save argv. Duplicate so setproctitle emulation doesn't clobber it */ | ||||||
|  	saved_argc = ac; |  	saved_argc = ac; | ||||||
|  	rexec_argc = ac; |  	rexec_argc = ac; | ||||||
| @@ -1707,7 +1722,7 @@ main(int ac, char **av)
 | @@ -1623,7 +1638,7 @@ main(int ac, char **av)
 | ||||||
|  	else |  	else | ||||||
|  		closefrom(REEXEC_DEVCRYPTO_RESERVED_FD); |  		closefrom(REEXEC_DEVCRYPTO_RESERVED_FD); | ||||||
|   |   | ||||||
| @ -576,18 +600,7 @@ diff -up openssh-7.2p1/sshd.c.fips openssh-7.2p1/sshd.c | |||||||
|  	OpenSSL_add_all_algorithms(); |  	OpenSSL_add_all_algorithms(); | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
| @@ -1906,6 +1921,10 @@ main(int ac, char **av)
 | @@ -1937,6 +1952,10 @@ main(int ac, char **av)
 | ||||||
|  		    sshkey_type(pubkey) : sshkey_ssh_name(pubkey), fp); |  | ||||||
|  		free(fp); |  | ||||||
|  	} |  | ||||||
| +	if ((options.protocol & SSH_PROTO_1) && FIPS_mode()) {
 |  | ||||||
| +		logit("Disabling protocol version 1. Not allowed in the FIPS mode.");
 |  | ||||||
| +		options.protocol &= ~SSH_PROTO_1;
 |  | ||||||
| +	}
 |  | ||||||
|  	if ((options.protocol & SSH_PROTO_1) && !sensitive_data.have_ssh1_key) { |  | ||||||
|  		logit("Disabling protocol version 1. Could not load host key"); |  | ||||||
|  		options.protocol &= ~SSH_PROTO_1; |  | ||||||
| @@ -2074,6 +2093,10 @@ main(int ac, char **av)
 |  | ||||||
|  	/* Reinitialize the log (because of the fork above). */ |  	/* Reinitialize the log (because of the fork above). */ | ||||||
|  	log_init(__progname, options.log_level, options.log_facility, log_stderr); |  	log_init(__progname, options.log_level, options.log_facility, log_stderr); | ||||||
|   |   | ||||||
| @ -598,7 +611,7 @@ diff -up openssh-7.2p1/sshd.c.fips openssh-7.2p1/sshd.c | |||||||
|  	/* Chdir to the root directory so that the current disk can be |  	/* Chdir to the root directory so that the current disk can be | ||||||
|  	   unmounted if desired. */ |  	   unmounted if desired. */ | ||||||
|  	if (chdir("/") == -1) |  	if (chdir("/") == -1) | ||||||
| @@ -2695,10 +2718,14 @@ do_ssh2_kex(void)
 | @@ -2309,10 +2328,14 @@ do_ssh2_kex(void)
 | ||||||
|  	if (strlen(myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS]) == 0) |  	if (strlen(myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS]) == 0) | ||||||
|  		orig = NULL; |  		orig = NULL; | ||||||
|   |   | ||||||
| @ -617,10 +630,10 @@ diff -up openssh-7.2p1/sshd.c.fips openssh-7.2p1/sshd.c | |||||||
|   |   | ||||||
|  	if (gss && orig) |  	if (gss && orig) | ||||||
|  		xasprintf(&newstr, "%s,%s", gss, orig); |  		xasprintf(&newstr, "%s,%s", gss, orig); | ||||||
| diff -up openssh-7.2p1/sshkey.c.fips openssh-7.2p1/sshkey.c
 | diff -up openssh-7.4p1/sshkey.c.fips openssh-7.4p1/sshkey.c
 | ||||||
| --- openssh-7.2p1/sshkey.c.fips	2016-02-12 18:53:56.089665235 +0100
 | --- openssh-7.4p1/sshkey.c.fips	2016-12-23 16:37:49.293741583 +0100
 | ||||||
| +++ openssh-7.2p1/sshkey.c	2016-02-12 18:53:56.095665236 +0100
 | +++ openssh-7.4p1/sshkey.c	2016-12-23 16:37:49.300741586 +0100
 | ||||||
| @@ -35,6 +35,7 @@
 | @@ -34,6 +34,7 @@
 | ||||||
|  #include <openssl/evp.h> |  #include <openssl/evp.h> | ||||||
|  #include <openssl/err.h> |  #include <openssl/err.h> | ||||||
|  #include <openssl/pem.h> |  #include <openssl/pem.h> | ||||||
| @ -628,7 +641,7 @@ diff -up openssh-7.2p1/sshkey.c.fips openssh-7.2p1/sshkey.c | |||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
|  #include "crypto_api.h" |  #include "crypto_api.h" | ||||||
| @@ -58,6 +58,7 @@
 | @@ -56,6 +57,7 @@
 | ||||||
|  #include "digest.h" |  #include "digest.h" | ||||||
|  #define SSHKEY_INTERNAL |  #define SSHKEY_INTERNAL | ||||||
|  #include "sshkey.h" |  #include "sshkey.h" | ||||||
| @ -636,7 +649,7 @@ diff -up openssh-7.2p1/sshkey.c.fips openssh-7.2p1/sshkey.c | |||||||
|  #include "match.h" |  #include "match.h" | ||||||
|  #include "xmalloc.h" |  #include "xmalloc.h" | ||||||
|   |   | ||||||
| @@ -1554,6 +1555,8 @@ rsa_generate_private_key(u_int bits, RSA
 | @@ -1580,6 +1582,8 @@ rsa_generate_private_key(u_int bits, RSA
 | ||||||
|  	} |  	} | ||||||
|  	if (!BN_set_word(f4, RSA_F4) || |  	if (!BN_set_word(f4, RSA_F4) || | ||||||
|  	    !RSA_generate_key_ex(private, bits, f4, NULL)) { |  	    !RSA_generate_key_ex(private, bits, f4, NULL)) { | ||||||
| @ -645,85 +658,3 @@ diff -up openssh-7.2p1/sshkey.c.fips openssh-7.2p1/sshkey.c | |||||||
|  		ret = SSH_ERR_LIBCRYPTO_ERROR; |  		ret = SSH_ERR_LIBCRYPTO_ERROR; | ||||||
|  		goto out; |  		goto out; | ||||||
|  	} |  	} | ||||||
| diff --git a/pam_ssh_agent_auth-0.10.2/pam_user_key_allowed2.c b/pam_ssh_agent_auth-0.10.2/pam_user_key_allowed2.c
 |  | ||||||
| index 688b1b1..a3c1541 100644
 |  | ||||||
| --- a/pam_ssh_agent_auth-0.10.2/pam_user_key_allowed2.c
 |  | ||||||
| +++ b/pam_ssh_agent_auth-0.10.2/pam_user_key_allowed2.c
 |  | ||||||
| @@ -55,6 +55,7 @@
 |  | ||||||
|  #include "secure_filename.h" |  | ||||||
|  #include "uidswap.h" |  | ||||||
|  #include <unistd.h> |  | ||||||
| +#include <openssl/crypto.h>
 |  | ||||||
|   |  | ||||||
|  #include "identity.h" |  | ||||||
|   |  | ||||||
| @@ -104,7 +105,8 @@ pamsshagentauth_check_authkeys_file(FILE * f, char *file, Key * key)
 |  | ||||||
|              found_key = 1; |  | ||||||
|              logit("matching key found: file/command %s, line %lu", file, |  | ||||||
|                                    linenum); |  | ||||||
| -            fp = sshkey_fingerprint(found, SSH_DIGEST_MD5, SSH_FP_HEX);
 |  | ||||||
| +            fp = sshkey_fingerprint(found, FIPS_mode() ? SSH_DIGEST_SHA1 : SSH_DIGEST_MD5,
 |  | ||||||
| +				SSH_FP_HEX);
 |  | ||||||
|              logit("Found matching %s key: %s", |  | ||||||
|                                    key_type(found), fp); |  | ||||||
|              free(fp); |  | ||||||
| diff --git a/cipher.c b/cipher.c
 |  | ||||||
| index f282907..51bbffb 100644
 |  | ||||||
| --- a/cipher.c
 |  | ||||||
| +++ b/cipher.c
 |  | ||||||
| @@ -112,12 +112,6 @@ static const struct sshcipher fips_ciphers[] = {
 |  | ||||||
|  	{ "aes128-ctr",	SSH_CIPHER_SSH2, 16, 16, 0, 0, 0, 0, EVP_aes_128_ctr }, |  | ||||||
|  	{ "aes192-ctr",	SSH_CIPHER_SSH2, 16, 24, 0, 0, 0, 0, EVP_aes_192_ctr }, |  | ||||||
|  	{ "aes256-ctr",	SSH_CIPHER_SSH2, 16, 32, 0, 0, 0, 0, EVP_aes_256_ctr }, |  | ||||||
| -#ifdef OPENSSL_HAVE_EVPGCM
 |  | ||||||
| -	{ "aes128-gcm@openssh.com",
 |  | ||||||
| -			SSH_CIPHER_SSH2, 16, 16, 12, 16, 0, 0, EVP_aes_128_gcm },
 |  | ||||||
| -	{ "aes256-gcm@openssh.com",
 |  | ||||||
| -			SSH_CIPHER_SSH2, 16, 32, 12, 16, 0, 0, EVP_aes_256_gcm },
 |  | ||||||
| -#endif
 |  | ||||||
|  	{ NULL,		SSH_CIPHER_INVALID, 0, 0, 0, 0, 0, 0, NULL } |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| diff --git a/kex.c b/kex.c
 |  | ||||||
| index f07a636..4ce5843 100644
 |  | ||||||
| --- a/kex.c
 |  | ||||||
| +++ b/kex.c
 |  | ||||||
| @@ -123,8 +123,6 @@ static const struct kexalg kexalgs[] = {
 |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
|  static const struct kexalg kexalgs_fips[] = { |  | ||||||
| -	{ KEX_DH14, KEX_DH_GRP14_SHA1, 0, SSH_DIGEST_SHA1 },
 |  | ||||||
| -	{ KEX_DHGEX_SHA1, KEX_DH_GEX_SHA1, 0, SSH_DIGEST_SHA1 },
 |  | ||||||
|  #ifdef HAVE_EVP_SHA256 |  | ||||||
|  	{ KEX_DHGEX_SHA256, KEX_DH_GEX_SHA256, 0, SSH_DIGEST_SHA256 }, |  | ||||||
|  #endif |  | ||||||
| diff --git a/myproposal.h b/myproposal.h
 |  | ||||||
| index 7efe312..bcf2ae1 100644
 |  | ||||||
| --- a/myproposal.h
 |  | ||||||
| +++ b/myproposal.h
 |  | ||||||
| @@ -131,9 +131,7 @@
 |  | ||||||
|   |  | ||||||
|  #define KEX_DEFAULT_KEX_FIPS		\ |  | ||||||
|  	KEX_ECDH_METHODS \ |  | ||||||
| -	KEX_SHA2_METHODS \
 |  | ||||||
| -	"diffie-hellman-group-exchange-sha1," \
 |  | ||||||
| -	"diffie-hellman-group14-sha1"
 |  | ||||||
| +	KEX_SHA2_METHODS
 |  | ||||||
|  #define	KEX_FIPS_ENCRYPT \ |  | ||||||
|  	"aes128-ctr,aes192-ctr,aes256-ctr," \ |  | ||||||
|  	"aes128-cbc,3des-cbc," \ |  | ||||||
| diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c
 |  | ||||||
| index a3975eb..5224084 100644
 |  | ||||||
| --- a/sandbox-seccomp-filter.c
 |  | ||||||
| +++ b/sandbox-seccomp-filter.c
 |  | ||||||
| @@ -112,6 +112,9 @@ static const struct sock_filter preauth_insns[] = {
 |  | ||||||
|  #ifdef __NR_open |  | ||||||
|  	SC_DENY(open, EACCES), |  | ||||||
|  #endif |  | ||||||
| +#ifdef __NR_socket
 |  | ||||||
| +	SC_DENY(socket, EACCES),
 |  | ||||||
| +#endif
 |  | ||||||
|  #ifdef __NR_openat |  | ||||||
|  	SC_DENY(openat, EACCES), |  | ||||||
|  #endif |  | ||||||
| 
 |  | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| diff -up openssh-7.2p1/auth2.c.gsskex openssh-7.2p1/auth2.c
 | diff -up openssh-7.4p1/auth2.c.gsskex openssh-7.4p1/auth2.c
 | ||||||
| --- openssh-7.2p1/auth2.c.gsskex	2016-02-19 10:01:04.829969345 +0100
 | --- openssh-7.4p1/auth2.c.gsskex	2016-12-23 13:38:53.685300997 +0100
 | ||||||
| +++ openssh-7.2p1/auth2.c	2016-02-19 10:01:04.865969325 +0100
 | +++ openssh-7.4p1/auth2.c	2016-12-23 13:38:53.725301005 +0100
 | ||||||
| @@ -70,6 +70,7 @@ extern Authmethod method_passwd;
 | @@ -70,6 +70,7 @@ extern Authmethod method_passwd;
 | ||||||
|  extern Authmethod method_kbdint; |  extern Authmethod method_kbdint; | ||||||
|  extern Authmethod method_hostbased; |  extern Authmethod method_hostbased; | ||||||
| @ -17,9 +17,9 @@ diff -up openssh-7.2p1/auth2.c.gsskex openssh-7.2p1/auth2.c | |||||||
|  	&method_gssapi, |  	&method_gssapi, | ||||||
|  #endif |  #endif | ||||||
|  	&method_passwd, |  	&method_passwd, | ||||||
| diff -up openssh-7.2p1/auth2-gss.c.gsskex openssh-7.2p1/auth2-gss.c
 | diff -up openssh-7.4p1/auth2-gss.c.gsskex openssh-7.4p1/auth2-gss.c
 | ||||||
| --- openssh-7.2p1/auth2-gss.c.gsskex	2016-02-19 10:01:04.829969345 +0100
 | --- openssh-7.4p1/auth2-gss.c.gsskex	2016-12-23 13:38:53.685300997 +0100
 | ||||||
| +++ openssh-7.2p1/auth2-gss.c	2016-02-19 10:01:04.865969325 +0100
 | +++ openssh-7.4p1/auth2-gss.c	2016-12-23 13:38:53.725301005 +0100
 | ||||||
| @@ -31,6 +31,7 @@
 | @@ -31,6 +31,7 @@
 | ||||||
|  #include <sys/types.h> |  #include <sys/types.h> | ||||||
|   |   | ||||||
| @ -102,21 +102,10 @@ diff -up openssh-7.2p1/auth2-gss.c.gsskex openssh-7.2p1/auth2-gss.c | |||||||
|  Authmethod method_gssapi = { |  Authmethod method_gssapi = { | ||||||
|  	"gssapi-with-mic", |  	"gssapi-with-mic", | ||||||
|  	userauth_gssapi, |  	userauth_gssapi, | ||||||
| diff -up openssh-7.2p1/auth.c.gsskex openssh-7.2p1/auth.c
 | diff -up openssh-7.4p1/clientloop.c.gsskex openssh-7.4p1/clientloop.c
 | ||||||
| --- openssh-7.2p1/auth.c.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/clientloop.c.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/auth.c	2016-02-19 10:01:04.866969324 +0100
 | +++ openssh-7.4p1/clientloop.c	2016-12-23 13:38:53.725301005 +0100
 | ||||||
| @@ -354,6 +354,7 @@ auth_root_allowed(const char *method)
 | @@ -113,6 +113,10 @@
 | ||||||
|  	case PERMIT_NO_PASSWD: |  | ||||||
|  		if (strcmp(method, "publickey") == 0 || |  | ||||||
|  		    strcmp(method, "hostbased") == 0 || |  | ||||||
| +		    strcmp(method, "gssapi-keyex") == 0 ||
 |  | ||||||
|  		    strcmp(method, "gssapi-with-mic") == 0) |  | ||||||
|  			return 1; |  | ||||||
|  		break; |  | ||||||
| diff -up openssh-7.2p1/clientloop.c.gsskex openssh-7.2p1/clientloop.c
 |  | ||||||
| --- openssh-7.2p1/clientloop.c.gsskex	2016-02-12 11:47:25.000000000 +0100
 |  | ||||||
| +++ openssh-7.2p1/clientloop.c	2016-02-19 10:01:04.866969324 +0100
 |  | ||||||
| @@ -114,6 +114,10 @@
 |  | ||||||
|  #include "ssherr.h" |  #include "ssherr.h" | ||||||
|  #include "hostfile.h" |  #include "hostfile.h" | ||||||
|   |   | ||||||
| @ -127,7 +116,7 @@ diff -up openssh-7.2p1/clientloop.c.gsskex openssh-7.2p1/clientloop.c | |||||||
|  /* import options */ |  /* import options */ | ||||||
|  extern Options options; |  extern Options options; | ||||||
|   |   | ||||||
| @@ -1662,9 +1666,18 @@ client_loop(int have_pty, int escape_cha
 | @@ -1664,9 +1668,18 @@ client_loop(int have_pty, int escape_cha
 | ||||||
|  			break; |  			break; | ||||||
|   |   | ||||||
|  		/* Do channel operations unless rekeying in progress. */ |  		/* Do channel operations unless rekeying in progress. */ | ||||||
| @ -137,7 +126,7 @@ diff -up openssh-7.2p1/clientloop.c.gsskex openssh-7.2p1/clientloop.c | |||||||
|   |   | ||||||
| +#ifdef GSSAPI
 | +#ifdef GSSAPI
 | ||||||
| +			if (options.gss_renewal_rekey &&
 | +			if (options.gss_renewal_rekey &&
 | ||||||
| +			    ssh_gssapi_credentials_updated(GSS_C_NO_CONTEXT)) {
 | +			    ssh_gssapi_credentials_updated(NULL)) {
 | ||||||
| +				debug("credentials updated - forcing rekey");
 | +				debug("credentials updated - forcing rekey");
 | ||||||
| +				need_rekeying = 1;
 | +				need_rekeying = 1;
 | ||||||
| +			}
 | +			}
 | ||||||
| @ -147,10 +136,10 @@ diff -up openssh-7.2p1/clientloop.c.gsskex openssh-7.2p1/clientloop.c | |||||||
|  		/* Buffer input from the connection.  */ |  		/* Buffer input from the connection.  */ | ||||||
|  		client_process_net_input(readset); |  		client_process_net_input(readset); | ||||||
|   |   | ||||||
| diff -up openssh-7.2p1/configure.ac.gsskex openssh-7.2p1/configure.ac
 | diff -up openssh-7.4p1/configure.ac.gsskex openssh-7.4p1/configure.ac
 | ||||||
| --- openssh-7.2p1/configure.ac.gsskex	2016-02-19 10:01:04.857969329 +0100
 | --- openssh-7.4p1/configure.ac.gsskex	2016-12-23 13:38:53.716301003 +0100
 | ||||||
| +++ openssh-7.2p1/configure.ac	2016-02-19 10:01:04.867969323 +0100
 | +++ openssh-7.4p1/configure.ac	2016-12-23 13:38:53.726301005 +0100
 | ||||||
| @@ -632,6 +632,30 @@ main() { if (NSVersionOfRunTimeLibrary("
 | @@ -623,6 +623,30 @@ main() { if (NSVersionOfRunTimeLibrary("
 | ||||||
|  	    [Use tunnel device compatibility to OpenBSD]) |  	    [Use tunnel device compatibility to OpenBSD]) | ||||||
|  	AC_DEFINE([SSH_TUN_PREPEND_AF], [1], |  	AC_DEFINE([SSH_TUN_PREPEND_AF], [1], | ||||||
|  	    [Prepend the address family to IP tunnel traffic]) |  	    [Prepend the address family to IP tunnel traffic]) | ||||||
| @ -181,10 +170,10 @@ diff -up openssh-7.2p1/configure.ac.gsskex openssh-7.2p1/configure.ac | |||||||
|  	m4_pattern_allow([AU_IPv]) |  	m4_pattern_allow([AU_IPv]) | ||||||
|  	AC_CHECK_DECL([AU_IPv4], [], |  	AC_CHECK_DECL([AU_IPv4], [], | ||||||
|  	    AC_DEFINE([AU_IPv4], [0], [System only supports IPv4 audit records]) |  	    AC_DEFINE([AU_IPv4], [0], [System only supports IPv4 audit records]) | ||||||
| diff -up openssh-7.2p1/gss-genr.c.gsskex openssh-7.2p1/gss-genr.c
 | diff -up openssh-7.4p1/gss-genr.c.gsskex openssh-7.4p1/gss-genr.c
 | ||||||
| --- openssh-7.2p1/gss-genr.c.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/gss-genr.c.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/gss-genr.c	2016-02-19 10:01:04.867969323 +0100
 | +++ openssh-7.4p1/gss-genr.c	2016-12-23 13:38:53.726301005 +0100
 | ||||||
| @@ -41,12 +41,167 @@
 | @@ -40,12 +40,167 @@
 | ||||||
|  #include "buffer.h" |  #include "buffer.h" | ||||||
|  #include "log.h" |  #include "log.h" | ||||||
|  #include "ssh2.h" |  #include "ssh2.h" | ||||||
| @ -352,7 +341,7 @@ diff -up openssh-7.2p1/gss-genr.c.gsskex openssh-7.2p1/gss-genr.c | |||||||
|  /* Check that the OID in a data stream matches that in the context */ |  /* Check that the OID in a data stream matches that in the context */ | ||||||
|  int |  int | ||||||
|  ssh_gssapi_check_oid(Gssctxt *ctx, void *data, size_t len) |  ssh_gssapi_check_oid(Gssctxt *ctx, void *data, size_t len) | ||||||
| @@ -199,7 +354,7 @@ ssh_gssapi_init_ctx(Gssctxt *ctx, int de
 | @@ -198,7 +353,7 @@ ssh_gssapi_init_ctx(Gssctxt *ctx, int de
 | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	ctx->major = gss_init_sec_context(&ctx->minor, |  	ctx->major = gss_init_sec_context(&ctx->minor, | ||||||
| @ -361,7 +350,7 @@ diff -up openssh-7.2p1/gss-genr.c.gsskex openssh-7.2p1/gss-genr.c | |||||||
|  	    GSS_C_MUTUAL_FLAG | GSS_C_INTEG_FLAG | deleg_flag, |  	    GSS_C_MUTUAL_FLAG | GSS_C_INTEG_FLAG | deleg_flag, | ||||||
|  	    0, NULL, recv_tok, NULL, send_tok, flags, NULL); |  	    0, NULL, recv_tok, NULL, send_tok, flags, NULL); | ||||||
|   |   | ||||||
| @@ -229,8 +384,42 @@ ssh_gssapi_import_name(Gssctxt *ctx, con
 | @@ -228,8 +383,42 @@ ssh_gssapi_import_name(Gssctxt *ctx, con
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  OM_uint32 |  OM_uint32 | ||||||
| @ -404,7 +393,7 @@ diff -up openssh-7.2p1/gss-genr.c.gsskex openssh-7.2p1/gss-genr.c | |||||||
|  	if ((ctx->major = gss_get_mic(&ctx->minor, ctx->context, |  	if ((ctx->major = gss_get_mic(&ctx->minor, ctx->context, | ||||||
|  	    GSS_C_QOP_DEFAULT, buffer, hash))) |  	    GSS_C_QOP_DEFAULT, buffer, hash))) | ||||||
|  		ssh_gssapi_error(ctx); |  		ssh_gssapi_error(ctx); | ||||||
| @@ -238,6 +427,19 @@ ssh_gssapi_sign(Gssctxt *ctx, gss_buffer
 | @@ -237,6 +426,19 @@ ssh_gssapi_sign(Gssctxt *ctx, gss_buffer
 | ||||||
|  	return (ctx->major); |  	return (ctx->major); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -424,7 +413,7 @@ diff -up openssh-7.2p1/gss-genr.c.gsskex openssh-7.2p1/gss-genr.c | |||||||
|  void |  void | ||||||
|  ssh_gssapi_buildmic(Buffer *b, const char *user, const char *service, |  ssh_gssapi_buildmic(Buffer *b, const char *user, const char *service, | ||||||
|      const char *context) |      const char *context) | ||||||
| @@ -251,11 +453,16 @@ ssh_gssapi_buildmic(Buffer *b, const cha
 | @@ -250,11 +452,16 @@ ssh_gssapi_buildmic(Buffer *b, const cha
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  int |  int | ||||||
| @ -442,7 +431,7 @@ diff -up openssh-7.2p1/gss-genr.c.gsskex openssh-7.2p1/gss-genr.c | |||||||
|   |   | ||||||
|  	/* RFC 4462 says we MUST NOT do SPNEGO */ |  	/* RFC 4462 says we MUST NOT do SPNEGO */ | ||||||
|  	if (oid->length == spnego_oid.length &&  |  	if (oid->length == spnego_oid.length &&  | ||||||
| @@ -265,6 +472,10 @@ ssh_gssapi_check_mechanism(Gssctxt **ctx
 | @@ -264,6 +471,10 @@ ssh_gssapi_check_mechanism(Gssctxt **ctx
 | ||||||
|  	ssh_gssapi_build_ctx(ctx); |  	ssh_gssapi_build_ctx(ctx); | ||||||
|  	ssh_gssapi_set_oid(*ctx, oid); |  	ssh_gssapi_set_oid(*ctx, oid); | ||||||
|  	major = ssh_gssapi_import_name(*ctx, host); |  	major = ssh_gssapi_import_name(*ctx, host); | ||||||
| @ -453,7 +442,7 @@ diff -up openssh-7.2p1/gss-genr.c.gsskex openssh-7.2p1/gss-genr.c | |||||||
|  	if (!GSS_ERROR(major)) { |  	if (!GSS_ERROR(major)) { | ||||||
|  		major = ssh_gssapi_init_ctx(*ctx, 0, GSS_C_NO_BUFFER, &token,  |  		major = ssh_gssapi_init_ctx(*ctx, 0, GSS_C_NO_BUFFER, &token,  | ||||||
|  		    NULL); |  		    NULL); | ||||||
| @@ -274,10 +485,66 @@ ssh_gssapi_check_mechanism(Gssctxt **ctx
 | @@ -273,10 +484,66 @@ ssh_gssapi_check_mechanism(Gssctxt **ctx
 | ||||||
|  			    GSS_C_NO_BUFFER); |  			    GSS_C_NO_BUFFER); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @ -521,9 +510,9 @@ diff -up openssh-7.2p1/gss-genr.c.gsskex openssh-7.2p1/gss-genr.c | |||||||
| +}
 | +}
 | ||||||
| +
 | +
 | ||||||
|  #endif /* GSSAPI */ |  #endif /* GSSAPI */ | ||||||
| diff -up openssh-7.2p1/gss-serv.c.gsskex openssh-7.2p1/gss-serv.c
 | diff -up openssh-7.4p1/gss-serv.c.gsskex openssh-7.4p1/gss-serv.c
 | ||||||
| --- openssh-7.2p1/gss-serv.c.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/gss-serv.c.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/gss-serv.c	2016-02-19 10:01:04.867969323 +0100
 | +++ openssh-7.4p1/gss-serv.c	2016-12-23 13:38:53.727301005 +0100
 | ||||||
| @@ -45,17 +45,19 @@
 | @@ -45,17 +45,19 @@
 | ||||||
|  #include "session.h" |  #include "session.h" | ||||||
|  #include "misc.h" |  #include "misc.h" | ||||||
| @ -536,9 +525,10 @@ diff -up openssh-7.2p1/gss-serv.c.gsskex openssh-7.2p1/gss-serv.c | |||||||
|  extern ServerOptions options; |  extern ServerOptions options; | ||||||
|   |   | ||||||
|  static ssh_gssapi_client gssapi_client = |  static ssh_gssapi_client gssapi_client = | ||||||
|      { GSS_C_EMPTY_BUFFER, GSS_C_EMPTY_BUFFER, | -    { GSS_C_EMPTY_BUFFER, GSS_C_EMPTY_BUFFER,
 | ||||||
| -    GSS_C_NO_CREDENTIAL, NULL, {NULL, NULL, NULL, NULL}};
 | -    GSS_C_NO_CREDENTIAL, NULL, {NULL, NULL, NULL, NULL}};
 | ||||||
| +    GSS_C_NO_CREDENTIAL, GSS_C_NO_NAME, {NULL, NULL, NULL}, 0, 0};
 | +    { GSS_C_EMPTY_BUFFER, GSS_C_EMPTY_BUFFER, GSS_C_NO_CREDENTIAL,
 | ||||||
|  | +    GSS_C_NO_NAME, NULL, {NULL, NULL, NULL, NULL, NULL}, 0, 0};
 | ||||||
|   |   | ||||||
|  ssh_gssapi_mech gssapi_null_mech = |  ssh_gssapi_mech gssapi_null_mech = | ||||||
| -    { NULL, NULL, {0, NULL}, NULL, NULL, NULL, NULL};
 | -    { NULL, NULL, {0, NULL}, NULL, NULL, NULL, NULL};
 | ||||||
| @ -805,9 +795,9 @@ diff -up openssh-7.2p1/gss-serv.c.gsskex openssh-7.2p1/gss-serv.c | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  #endif |  #endif | ||||||
| diff -up openssh-7.2p1/gss-serv-krb5.c.gsskex openssh-7.2p1/gss-serv-krb5.c
 | diff -up openssh-7.4p1/gss-serv-krb5.c.gsskex openssh-7.4p1/gss-serv-krb5.c
 | ||||||
| --- openssh-7.2p1/gss-serv-krb5.c.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/gss-serv-krb5.c.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/gss-serv-krb5.c	2016-02-19 10:01:04.867969323 +0100
 | +++ openssh-7.4p1/gss-serv-krb5.c	2016-12-23 13:38:53.727301005 +0100
 | ||||||
| @@ -121,7 +121,7 @@ ssh_gssapi_krb5_storecreds(ssh_gssapi_cl
 | @@ -121,7 +121,7 @@ ssh_gssapi_krb5_storecreds(ssh_gssapi_cl
 | ||||||
|  	krb5_error_code problem; |  	krb5_error_code problem; | ||||||
|  	krb5_principal princ; |  	krb5_principal princ; | ||||||
| @ -935,9 +925,9 @@ diff -up openssh-7.2p1/gss-serv-krb5.c.gsskex openssh-7.2p1/gss-serv-krb5.c | |||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  #endif /* KRB5 */ |  #endif /* KRB5 */ | ||||||
| diff -up openssh-7.2p1/kex.c.gsskex openssh-7.2p1/kex.c
 | diff -up openssh-7.4p1/kex.c.gsskex openssh-7.4p1/kex.c
 | ||||||
| --- openssh-7.2p1/kex.c.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/kex.c.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/kex.c	2016-02-19 10:01:04.868969323 +0100
 | +++ openssh-7.4p1/kex.c	2016-12-23 13:39:56.064313151 +0100
 | ||||||
| @@ -54,6 +54,10 @@
 | @@ -54,6 +54,10 @@
 | ||||||
|  #include "sshbuf.h" |  #include "sshbuf.h" | ||||||
|  #include "digest.h" |  #include "digest.h" | ||||||
| @ -949,9 +939,9 @@ diff -up openssh-7.2p1/kex.c.gsskex openssh-7.2p1/kex.c | |||||||
|  #if OPENSSL_VERSION_NUMBER >= 0x00907000L |  #if OPENSSL_VERSION_NUMBER >= 0x00907000L | ||||||
|  # if defined(HAVE_EVP_SHA256) |  # if defined(HAVE_EVP_SHA256) | ||||||
|  # define evp_ssh_sha256 EVP_sha256 |  # define evp_ssh_sha256 EVP_sha256 | ||||||
| @@ -107,6 +111,11 @@ static const struct kexalg kexalgs[] = {
 | @@ -111,6 +115,11 @@ static const struct kexalg kexalgs[] = {
 | ||||||
|  #if defined(HAVE_EVP_SHA256) || !defined(WITH_OPENSSL) |  | ||||||
|  	{ KEX_CURVE25519_SHA256, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256 }, |  	{ KEX_CURVE25519_SHA256, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256 }, | ||||||
|  |  	{ KEX_CURVE25519_SHA256_OLD, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256 }, | ||||||
|  #endif /* HAVE_EVP_SHA256 || !WITH_OPENSSL */ |  #endif /* HAVE_EVP_SHA256 || !WITH_OPENSSL */ | ||||||
| +#ifdef GSSAPI
 | +#ifdef GSSAPI
 | ||||||
| +	{ KEX_GSS_GEX_SHA1_ID, KEX_GSS_GEX_SHA1, 0, SSH_DIGEST_SHA1 },
 | +	{ KEX_GSS_GEX_SHA1_ID, KEX_GSS_GEX_SHA1, 0, SSH_DIGEST_SHA1 },
 | ||||||
| @ -961,7 +951,7 @@ diff -up openssh-7.2p1/kex.c.gsskex openssh-7.2p1/kex.c | |||||||
|  	{ NULL, -1, -1, -1}, |  	{ NULL, -1, -1, -1}, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -140,6 +149,12 @@ kex_alg_by_name(const char *name)
 | @@ -144,6 +153,12 @@ kex_alg_by_name(const char *name)
 | ||||||
|  	for (k = kexalgs; k->name != NULL; k++) { |  	for (k = kexalgs; k->name != NULL; k++) { | ||||||
|  		if (strcmp(k->name, name) == 0) |  		if (strcmp(k->name, name) == 0) | ||||||
|  			return k; |  			return k; | ||||||
| @ -974,9 +964,9 @@ diff -up openssh-7.2p1/kex.c.gsskex openssh-7.2p1/kex.c | |||||||
|  	} |  	} | ||||||
|  	return NULL; |  	return NULL; | ||||||
|  } |  } | ||||||
| diff -up openssh-7.2p1/kexgssc.c.gsskex openssh-7.2p1/kexgssc.c
 | diff -up openssh-7.4p1/kexgssc.c.gsskex openssh-7.4p1/kexgssc.c
 | ||||||
| --- openssh-7.2p1/kexgssc.c.gsskex	2016-02-19 10:01:04.868969323 +0100
 | --- openssh-7.4p1/kexgssc.c.gsskex	2016-12-23 13:38:53.727301005 +0100
 | ||||||
| +++ openssh-7.2p1/kexgssc.c	2016-02-19 10:01:04.868969323 +0100
 | +++ openssh-7.4p1/kexgssc.c	2016-12-23 13:38:53.727301005 +0100
 | ||||||
| @@ -0,0 +1,338 @@
 | @@ -0,0 +1,338 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * Copyright (c) 2001-2009 Simon Wilkinson. All rights reserved.
 | + * Copyright (c) 2001-2009 Simon Wilkinson. All rights reserved.
 | ||||||
| @ -1316,9 +1306,9 @@ diff -up openssh-7.2p1/kexgssc.c.gsskex openssh-7.2p1/kexgssc.c | |||||||
| +}
 | +}
 | ||||||
| +
 | +
 | ||||||
| +#endif /* GSSAPI */
 | +#endif /* GSSAPI */
 | ||||||
| diff -up openssh-7.2p1/kexgsss.c.gsskex openssh-7.2p1/kexgsss.c
 | diff -up openssh-7.4p1/kexgsss.c.gsskex openssh-7.4p1/kexgsss.c
 | ||||||
| --- openssh-7.2p1/kexgsss.c.gsskex	2016-02-19 10:01:04.868969323 +0100
 | --- openssh-7.4p1/kexgsss.c.gsskex	2016-12-23 13:38:53.728301005 +0100
 | ||||||
| +++ openssh-7.2p1/kexgsss.c	2016-02-19 10:01:04.868969323 +0100
 | +++ openssh-7.4p1/kexgsss.c	2016-12-23 13:38:53.728301005 +0100
 | ||||||
| @@ -0,0 +1,297 @@
 | @@ -0,0 +1,297 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * Copyright (c) 2001-2009 Simon Wilkinson. All rights reserved.
 | + * Copyright (c) 2001-2009 Simon Wilkinson. All rights reserved.
 | ||||||
| @ -1617,10 +1607,10 @@ diff -up openssh-7.2p1/kexgsss.c.gsskex openssh-7.2p1/kexgsss.c | |||||||
| +	return 0;
 | +	return 0;
 | ||||||
| +}
 | +}
 | ||||||
| +#endif /* GSSAPI */
 | +#endif /* GSSAPI */
 | ||||||
| diff -up openssh-7.2p1/kex.h.gsskex openssh-7.2p1/kex.h
 | diff -up openssh-7.4p1/kex.h.gsskex openssh-7.4p1/kex.h
 | ||||||
| --- openssh-7.2p1/kex.h.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/kex.h.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/kex.h	2016-02-19 10:01:04.868969323 +0100
 | +++ openssh-7.4p1/kex.h	2016-12-23 13:38:53.728301005 +0100
 | ||||||
| @@ -92,6 +92,11 @@ enum kex_exchange {
 | @@ -99,6 +99,11 @@ enum kex_exchange {
 | ||||||
|  	KEX_DH_GEX_SHA256, |  	KEX_DH_GEX_SHA256, | ||||||
|  	KEX_ECDH_SHA2, |  	KEX_ECDH_SHA2, | ||||||
|  	KEX_C25519_SHA256, |  	KEX_C25519_SHA256, | ||||||
| @ -1632,7 +1622,7 @@ diff -up openssh-7.2p1/kex.h.gsskex openssh-7.2p1/kex.h | |||||||
|  	KEX_MAX |  	KEX_MAX | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -140,6 +145,12 @@ struct kex {
 | @@ -147,6 +152,12 @@ struct kex {
 | ||||||
|  	u_int	flags; |  	u_int	flags; | ||||||
|  	int	hash_alg; |  	int	hash_alg; | ||||||
|  	int	ec_nid; |  	int	ec_nid; | ||||||
| @ -1645,7 +1635,7 @@ diff -up openssh-7.2p1/kex.h.gsskex openssh-7.2p1/kex.h | |||||||
|  	char	*client_version_string; |  	char	*client_version_string; | ||||||
|  	char	*server_version_string; |  	char	*server_version_string; | ||||||
|  	char	*failed_choice; |  	char	*failed_choice; | ||||||
| @@ -189,6 +200,10 @@ int	 kexecdh_client(struct ssh *);
 | @@ -196,6 +207,10 @@ int	 kexecdh_client(struct ssh *);
 | ||||||
|  int	 kexecdh_server(struct ssh *); |  int	 kexecdh_server(struct ssh *); | ||||||
|  int	 kexc25519_client(struct ssh *); |  int	 kexc25519_client(struct ssh *); | ||||||
|  int	 kexc25519_server(struct ssh *); |  int	 kexc25519_server(struct ssh *); | ||||||
| @ -1656,10 +1646,10 @@ diff -up openssh-7.2p1/kex.h.gsskex openssh-7.2p1/kex.h | |||||||
|   |   | ||||||
|  int	 kex_dh_hash(int, const char *, const char *, |  int	 kex_dh_hash(int, const char *, const char *, | ||||||
|      const u_char *, size_t, const u_char *, size_t, const u_char *, size_t, |      const u_char *, size_t, const u_char *, size_t, const u_char *, size_t, | ||||||
| diff -up openssh/Makefile.in.gsskex openssh/Makefile.in
 | diff -up openssh-7.4p1/Makefile.in.gsskex openssh-7.4p1/Makefile.in
 | ||||||
| --- openssh/Makefile.in.gsskex	2016-07-25 14:11:42.978324182 +0200
 | --- openssh-7.4p1/Makefile.in.gsskex	2016-12-23 13:38:53.723301004 +0100
 | ||||||
| +++ openssh/Makefile.in	2016-07-25 14:14:15.560289050 +0200
 | +++ openssh-7.4p1/Makefile.in	2016-12-23 13:40:32.226320197 +0100
 | ||||||
| @@ -90,6 +90,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \
 | @@ -91,6 +91,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \
 | ||||||
|  	readpass.o rsa.o ttymodes.o xmalloc.o addrmatch.o \ |  	readpass.o rsa.o ttymodes.o xmalloc.o addrmatch.o \ | ||||||
|  	atomicio.o key.o dispatch.o mac.o uidswap.o uuencode.o misc.o utf8.o \ |  	atomicio.o key.o dispatch.o mac.o uidswap.o uuencode.o misc.o utf8.o \ | ||||||
|  	monitor_fdpass.o rijndael.o ssh-dss.o ssh-ecdsa.o ssh-rsa.o dh.o \ |  	monitor_fdpass.o rijndael.o ssh-dss.o ssh-ecdsa.o ssh-rsa.o dh.o \ | ||||||
| @ -1667,19 +1657,19 @@ diff -up openssh/Makefile.in.gsskex openssh/Makefile.in | |||||||
|  	msg.o progressmeter.o dns.o entropy.o gss-genr.o umac.o umac128.o \ |  	msg.o progressmeter.o dns.o entropy.o gss-genr.o umac.o umac128.o \ | ||||||
|  	ssh-pkcs11.o smult_curve25519_ref.o \ |  	ssh-pkcs11.o smult_curve25519_ref.o \ | ||||||
|  	poly1305.o chacha.o cipher-chachapoly.o \ |  	poly1305.o chacha.o cipher-chachapoly.o \ | ||||||
| @@ -111,7 +112,7 @@ SSHDOBJS=sshd.o auth-rhosts.o auth-passw
 | @@ -112,7 +113,7 @@ SSHDOBJS=sshd.o auth-rhosts.o auth-passw
 | ||||||
|  	auth-skey.o auth-bsdauth.o auth2-hostbased.o auth2-kbdint.o \ |  	auth-skey.o auth-bsdauth.o auth2-hostbased.o auth2-kbdint.o \ | ||||||
|  	auth2-none.o auth2-passwd.o auth2-pubkey.o \ |  	auth2-none.o auth2-passwd.o auth2-pubkey.o \ | ||||||
|  	monitor_mm.o monitor.o monitor_wrap.o auth-krb5.o \ |  	monitor.o monitor_wrap.o auth-krb5.o \ | ||||||
| -	auth2-gss.o gss-serv.o gss-serv-krb5.o \
 | -	auth2-gss.o gss-serv.o gss-serv-krb5.o \
 | ||||||
| +	auth2-gss.o gss-serv.o gss-serv-krb5.o kexgsss.o \
 | +	auth2-gss.o gss-serv.o gss-serv-krb5.o kexgsss.o \
 | ||||||
|  	loginrec.o auth-pam.o auth-shadow.o auth-sia.o md5crypt.o \ |  	loginrec.o auth-pam.o auth-shadow.o auth-sia.o md5crypt.o \ | ||||||
|  	sftp-server.o sftp-common.o \ |  	sftp-server.o sftp-common.o \ | ||||||
|  	sandbox-null.o sandbox-rlimit.o sandbox-systrace.o sandbox-darwin.o \ |  	sandbox-null.o sandbox-rlimit.o sandbox-systrace.o sandbox-darwin.o \ | ||||||
| diff -up openssh-7.2p1/monitor.c.gsskex openssh-7.2p1/monitor.c
 | diff -up openssh-7.4p1/monitor.c.gsskex openssh-7.4p1/monitor.c
 | ||||||
| --- openssh-7.2p1/monitor.c.gsskex	2016-02-19 10:01:04.830969345 +0100
 | --- openssh-7.4p1/monitor.c.gsskex	2016-12-23 13:38:53.687300997 +0100
 | ||||||
| +++ openssh-7.2p1/monitor.c	2016-02-19 10:01:04.869969322 +0100
 | +++ openssh-7.4p1/monitor.c	2016-12-23 13:45:49.347381091 +0100
 | ||||||
| @@ -159,6 +159,8 @@ int mm_answer_gss_setup_ctx(int, Buffer
 | @@ -160,6 +160,8 @@ int mm_answer_gss_setup_ctx(int, Buffer
 | ||||||
|  int mm_answer_gss_accept_ctx(int, Buffer *); |  int mm_answer_gss_accept_ctx(int, Buffer *); | ||||||
|  int mm_answer_gss_userok(int, Buffer *); |  int mm_answer_gss_userok(int, Buffer *); | ||||||
|  int mm_answer_gss_checkmic(int, Buffer *); |  int mm_answer_gss_checkmic(int, Buffer *); | ||||||
| @ -1688,10 +1678,10 @@ diff -up openssh-7.2p1/monitor.c.gsskex openssh-7.2p1/monitor.c | |||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
|  #ifdef SSH_AUDIT_EVENTS |  #ifdef SSH_AUDIT_EVENTS | ||||||
| @@ -239,11 +241,18 @@ struct mon_table mon_dispatch_proto20[]
 | @@ -236,11 +238,18 @@ struct mon_table mon_dispatch_proto20[]
 | ||||||
|      {MONITOR_REQ_GSSSTEP, MON_ISAUTH, mm_answer_gss_accept_ctx}, |      {MONITOR_REQ_GSSSTEP, 0, mm_answer_gss_accept_ctx}, | ||||||
|      {MONITOR_REQ_GSSUSEROK, MON_AUTH, mm_answer_gss_userok}, |      {MONITOR_REQ_GSSUSEROK, MON_ONCE|MON_AUTHDECIDE, mm_answer_gss_userok}, | ||||||
|      {MONITOR_REQ_GSSCHECKMIC, MON_ISAUTH, mm_answer_gss_checkmic}, |      {MONITOR_REQ_GSSCHECKMIC, MON_ONCE, mm_answer_gss_checkmic}, | ||||||
| +    {MONITOR_REQ_GSSSIGN, MON_ONCE, mm_answer_gss_sign},
 | +    {MONITOR_REQ_GSSSIGN, MON_ONCE, mm_answer_gss_sign},
 | ||||||
|  #endif |  #endif | ||||||
|      {0, 0, NULL} |      {0, 0, NULL} | ||||||
| @ -1707,7 +1697,7 @@ diff -up openssh-7.2p1/monitor.c.gsskex openssh-7.2p1/monitor.c | |||||||
|  #ifdef WITH_OPENSSL |  #ifdef WITH_OPENSSL | ||||||
|      {MONITOR_REQ_MODULI, 0, mm_answer_moduli}, |      {MONITOR_REQ_MODULI, 0, mm_answer_moduli}, | ||||||
|  #endif |  #endif | ||||||
| @@ -358,6 +367,10 @@ monitor_child_preauth(Authctxt *_authctx
 | @@ -307,6 +316,10 @@ monitor_child_preauth(Authctxt *_authctx
 | ||||||
|  	/* Permit requests for moduli and signatures */ |  	/* Permit requests for moduli and signatures */ | ||||||
|  	monitor_permit(mon_dispatch, MONITOR_REQ_MODULI, 1); |  	monitor_permit(mon_dispatch, MONITOR_REQ_MODULI, 1); | ||||||
|  	monitor_permit(mon_dispatch, MONITOR_REQ_SIGN, 1); |  	monitor_permit(mon_dispatch, MONITOR_REQ_SIGN, 1); | ||||||
| @ -1715,10 +1705,10 @@ diff -up openssh-7.2p1/monitor.c.gsskex openssh-7.2p1/monitor.c | |||||||
| +	/* and for the GSSAPI key exchange */
 | +	/* and for the GSSAPI key exchange */
 | ||||||
| +	monitor_permit(mon_dispatch, MONITOR_REQ_GSSSETUP, 1);
 | +	monitor_permit(mon_dispatch, MONITOR_REQ_GSSSETUP, 1);
 | ||||||
| +#endif
 | +#endif
 | ||||||
|  	} else { |  | ||||||
|  		mon_dispatch = mon_dispatch_proto15; |  | ||||||
|   |   | ||||||
| @@ -466,6 +479,10 @@ monitor_child_postauth(struct monitor *p
 |  	/* The first few requests do not require asynchronous access */ | ||||||
|  |  	while (!authenticated) { | ||||||
|  | @@ -406,6 +419,10 @@ monitor_child_postauth(struct monitor *p
 | ||||||
|  	monitor_permit(mon_dispatch, MONITOR_REQ_MODULI, 1); |  	monitor_permit(mon_dispatch, MONITOR_REQ_MODULI, 1); | ||||||
|  	monitor_permit(mon_dispatch, MONITOR_REQ_SIGN, 1); |  	monitor_permit(mon_dispatch, MONITOR_REQ_SIGN, 1); | ||||||
|  	monitor_permit(mon_dispatch, MONITOR_REQ_TERM, 1); |  	monitor_permit(mon_dispatch, MONITOR_REQ_TERM, 1); | ||||||
| @ -1726,10 +1716,10 @@ diff -up openssh-7.2p1/monitor.c.gsskex openssh-7.2p1/monitor.c | |||||||
| +	/* and for the GSSAPI key exchange */
 | +	/* and for the GSSAPI key exchange */
 | ||||||
| +	monitor_permit(mon_dispatch, MONITOR_REQ_GSSSETUP, 1);
 | +	monitor_permit(mon_dispatch, MONITOR_REQ_GSSSETUP, 1);
 | ||||||
| +#endif		
 | +#endif		
 | ||||||
|  	} else { |   | ||||||
|  		mon_dispatch = mon_dispatch_postauth15; |  	if (!no_pty_flag) { | ||||||
|  		monitor_permit(mon_dispatch, MONITOR_REQ_TERM, 1); |  		monitor_permit(mon_dispatch, MONITOR_REQ_PTY, 1); | ||||||
| @@ -1893,6 +1910,13 @@ monitor_apply_keystate(struct monitor *p
 | @@ -1633,6 +1650,13 @@ monitor_apply_keystate(struct monitor *p
 | ||||||
|  # endif |  # endif | ||||||
|  #endif /* WITH_OPENSSL */ |  #endif /* WITH_OPENSSL */ | ||||||
|  		kex->kex[KEX_C25519_SHA256] = kexc25519_server; |  		kex->kex[KEX_C25519_SHA256] = kexc25519_server; | ||||||
| @ -1743,27 +1733,25 @@ diff -up openssh-7.2p1/monitor.c.gsskex openssh-7.2p1/monitor.c | |||||||
|  		kex->load_host_public_key=&get_hostkey_public_by_type; |  		kex->load_host_public_key=&get_hostkey_public_by_type; | ||||||
|  		kex->load_host_private_key=&get_hostkey_private_by_type; |  		kex->load_host_private_key=&get_hostkey_private_by_type; | ||||||
|  		kex->host_key_index=&get_hostkey_index; |  		kex->host_key_index=&get_hostkey_index; | ||||||
| @@ -1992,6 +2016,9 @@ mm_answer_gss_setup_ctx(int sock, Buffer
 | @@ -1712,7 +1736,7 @@ mm_answer_gss_setup_ctx(int sock, Buffer
 | ||||||
|  	OM_uint32 major; |  	OM_uint32 major; | ||||||
|  	u_int len; |  	u_int len; | ||||||
|   |   | ||||||
|  | -	if (!options.gss_authentication)
 | ||||||
| +	if (!options.gss_authentication && !options.gss_keyex)
 | +	if (!options.gss_authentication && !options.gss_keyex)
 | ||||||
| +		fatal("In GSSAPI monitor when GSSAPI is disabled");
 |  		fatal("%s: GSSAPI authentication not enabled", __func__); | ||||||
| +
 |  | ||||||
|  	goid.elements = buffer_get_string(m, &len); |  | ||||||
|  	goid.length = len; |  | ||||||
|   |   | ||||||
| @@ -2019,6 +2046,9 @@ mm_answer_gss_accept_ctx(int sock, Buffe
 |  	goid.elements = buffer_get_string(m, &len); | ||||||
|  | @@ -1742,7 +1766,7 @@ mm_answer_gss_accept_ctx(int sock, Buffe
 | ||||||
|  	OM_uint32 flags = 0; /* GSI needs this */ |  	OM_uint32 flags = 0; /* GSI needs this */ | ||||||
|  	u_int len; |  	u_int len; | ||||||
|   |   | ||||||
|  | -	if (!options.gss_authentication)
 | ||||||
| +	if (!options.gss_authentication && !options.gss_keyex)
 | +	if (!options.gss_authentication && !options.gss_keyex)
 | ||||||
| +		fatal("In GSSAPI monitor when GSSAPI is disabled");
 |  		fatal("%s: GSSAPI authentication not enabled", __func__); | ||||||
| +
 |   | ||||||
|  	in.value = buffer_get_string(m, &len); |  	in.value = buffer_get_string(m, &len); | ||||||
|  	in.length = len; | @@ -1762,6 +1786,7 @@ mm_answer_gss_accept_ctx(int sock, Buffe
 | ||||||
|  	major = ssh_gssapi_accept_ctx(gsscontext, &in, &out, &flags); |  | ||||||
| @@ -2036,6 +2066,7 @@ mm_answer_gss_accept_ctx(int sock, Buffe
 |  | ||||||
|  		monitor_permit(mon_dispatch, MONITOR_REQ_GSSSTEP, 0); |  		monitor_permit(mon_dispatch, MONITOR_REQ_GSSSTEP, 0); | ||||||
|  		monitor_permit(mon_dispatch, MONITOR_REQ_GSSUSEROK, 1); |  		monitor_permit(mon_dispatch, MONITOR_REQ_GSSUSEROK, 1); | ||||||
|  		monitor_permit(mon_dispatch, MONITOR_REQ_GSSCHECKMIC, 1); |  		monitor_permit(mon_dispatch, MONITOR_REQ_GSSCHECKMIC, 1); | ||||||
| @ -1771,30 +1759,30 @@ diff -up openssh-7.2p1/monitor.c.gsskex openssh-7.2p1/monitor.c | |||||||
|  	} |  	} | ||||||
|  	return (0); |  	return (0); | ||||||
|  } |  } | ||||||
| @@ -2047,6 +2078,9 @@ mm_answer_gss_checkmic(int sock, Buffer
 | @@ -1773,7 +1798,7 @@ mm_answer_gss_checkmic(int sock, Buffer
 | ||||||
|  	OM_uint32 ret; |  	OM_uint32 ret; | ||||||
|  	u_int len; |  	u_int len; | ||||||
|   |   | ||||||
|  | -	if (!options.gss_authentication)
 | ||||||
| +	if (!options.gss_authentication && !options.gss_keyex)
 | +	if (!options.gss_authentication && !options.gss_keyex)
 | ||||||
| +		fatal("In GSSAPI monitor when GSSAPI is disabled");
 |  		fatal("%s: GSSAPI authentication not enabled", __func__); | ||||||
| +
 |   | ||||||
|  	gssbuf.value = buffer_get_string(m, &len); |  	gssbuf.value = buffer_get_string(m, &len); | ||||||
|  	gssbuf.length = len; | @@ -1802,10 +1827,11 @@ mm_answer_gss_userok(int sock, Buffer *m
 | ||||||
|  	mic.value = buffer_get_string(m, &len); |  | ||||||
| @@ -2073,7 +2107,11 @@ mm_answer_gss_userok(int sock, Buffer *m
 |  | ||||||
|  { |  { | ||||||
|  	int authenticated; |  	int authenticated; | ||||||
|   |   | ||||||
| -	authenticated = authctxt->valid && ssh_gssapi_userok(authctxt->user);
 | -	if (!options.gss_authentication)
 | ||||||
| +	if (!options.gss_authentication && !options.gss_keyex)
 | +	if (!options.gss_authentication && !options.gss_keyex)
 | ||||||
| +		fatal("In GSSAPI monitor when GSSAPI is disabled");
 |  		fatal("%s: GSSAPI authentication not enabled", __func__); | ||||||
| +
 |   | ||||||
|  | -	authenticated = authctxt->valid && ssh_gssapi_userok(authctxt->user);
 | ||||||
| +	authenticated = authctxt->valid &&
 | +	authenticated = authctxt->valid &&
 | ||||||
| +	    ssh_gssapi_userok(authctxt->user, authctxt->pw);
 | +	    ssh_gssapi_userok(authctxt->user, authctxt->pw);
 | ||||||
|   |   | ||||||
|  	buffer_clear(m); |  	buffer_clear(m); | ||||||
|  	buffer_put_int(m, authenticated); |  	buffer_put_int(m, authenticated); | ||||||
| @@ -2086,5 +2124,73 @@ mm_answer_gss_userok(int sock, Buffer *m
 | @@ -1818,5 +1844,73 @@ mm_answer_gss_userok(int sock, Buffer *m
 | ||||||
|  	/* Monitor loop will terminate if authenticated */ |  	/* Monitor loop will terminate if authenticated */ | ||||||
|  	return (authenticated); |  	return (authenticated); | ||||||
|  } |  } | ||||||
| @ -1868,9 +1856,9 @@ diff -up openssh-7.2p1/monitor.c.gsskex openssh-7.2p1/monitor.c | |||||||
| +
 | +
 | ||||||
|  #endif /* GSSAPI */ |  #endif /* GSSAPI */ | ||||||
|   |   | ||||||
| diff -up openssh-7.2p1/monitor.h.gsskex openssh-7.2p1/monitor.h
 | diff -up openssh-7.4p1/monitor.h.gsskex openssh-7.4p1/monitor.h
 | ||||||
| --- openssh-7.2p1/monitor.h.gsskex	2016-02-19 10:01:04.830969345 +0100
 | --- openssh-7.4p1/monitor.h.gsskex	2016-12-23 13:38:53.687300997 +0100
 | ||||||
| +++ openssh-7.2p1/monitor.h	2016-02-19 10:01:04.869969322 +0100
 | +++ openssh-7.4p1/monitor.h	2016-12-23 13:38:53.729301005 +0100
 | ||||||
| @@ -60,6 +60,8 @@ enum monitor_reqtype {
 | @@ -60,6 +60,8 @@ enum monitor_reqtype {
 | ||||||
|  #ifdef WITH_SELINUX |  #ifdef WITH_SELINUX | ||||||
|  	MONITOR_REQ_AUTHROLE = 80, |  	MONITOR_REQ_AUTHROLE = 80, | ||||||
| @ -1880,10 +1868,10 @@ diff -up openssh-7.2p1/monitor.h.gsskex openssh-7.2p1/monitor.h | |||||||
|   |   | ||||||
|  	MONITOR_REQ_PAM_START = 100, |  	MONITOR_REQ_PAM_START = 100, | ||||||
|  	MONITOR_REQ_PAM_ACCOUNT = 102, MONITOR_ANS_PAM_ACCOUNT = 103, |  	MONITOR_REQ_PAM_ACCOUNT = 102, MONITOR_ANS_PAM_ACCOUNT = 103, | ||||||
| diff -up openssh-7.2p1/monitor_wrap.c.gsskex openssh-7.2p1/monitor_wrap.c
 | diff -up openssh-7.4p1/monitor_wrap.c.gsskex openssh-7.4p1/monitor_wrap.c
 | ||||||
| --- openssh-7.2p1/monitor_wrap.c.gsskex	2016-02-19 10:01:04.830969345 +0100
 | --- openssh-7.4p1/monitor_wrap.c.gsskex	2016-12-23 13:38:53.687300997 +0100
 | ||||||
| +++ openssh-7.2p1/monitor_wrap.c	2016-02-19 10:01:04.869969322 +0100
 | +++ openssh-7.4p1/monitor_wrap.c	2016-12-23 13:38:53.729301005 +0100
 | ||||||
| @@ -1087,7 +1087,7 @@ mm_ssh_gssapi_checkmic(Gssctxt *ctx, gss
 | @@ -943,7 +943,7 @@ mm_ssh_gssapi_checkmic(Gssctxt *ctx, gss
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  int |  int | ||||||
| @ -1892,7 +1880,7 @@ diff -up openssh-7.2p1/monitor_wrap.c.gsskex openssh-7.2p1/monitor_wrap.c | |||||||
|  { |  { | ||||||
|  	Buffer m; |  	Buffer m; | ||||||
|  	int authenticated = 0; |  	int authenticated = 0; | ||||||
| @@ -1104,5 +1104,50 @@ mm_ssh_gssapi_userok(char *user)
 | @@ -960,5 +960,50 @@ mm_ssh_gssapi_userok(char *user)
 | ||||||
|  	debug3("%s: user %sauthenticated",__func__, authenticated ? "" : "not "); |  	debug3("%s: user %sauthenticated",__func__, authenticated ? "" : "not "); | ||||||
|  	return (authenticated); |  	return (authenticated); | ||||||
|  } |  } | ||||||
| @ -1943,10 +1931,10 @@ diff -up openssh-7.2p1/monitor_wrap.c.gsskex openssh-7.2p1/monitor_wrap.c | |||||||
| +
 | +
 | ||||||
|  #endif /* GSSAPI */ |  #endif /* GSSAPI */ | ||||||
|   |   | ||||||
| diff -up openssh-7.2p1/monitor_wrap.h.gsskex openssh-7.2p1/monitor_wrap.h
 | diff -up openssh-7.4p1/monitor_wrap.h.gsskex openssh-7.4p1/monitor_wrap.h
 | ||||||
| --- openssh-7.2p1/monitor_wrap.h.gsskex	2016-02-19 10:01:04.830969345 +0100
 | --- openssh-7.4p1/monitor_wrap.h.gsskex	2016-12-23 13:38:53.687300997 +0100
 | ||||||
| +++ openssh-7.2p1/monitor_wrap.h	2016-02-19 10:01:04.869969322 +0100
 | +++ openssh-7.4p1/monitor_wrap.h	2016-12-23 13:38:53.729301005 +0100
 | ||||||
| @@ -61,8 +61,10 @@ BIGNUM *mm_auth_rsa_generate_challenge(K
 | @@ -58,8 +58,10 @@ int mm_key_verify(Key *, u_char *, u_int
 | ||||||
|  OM_uint32 mm_ssh_gssapi_server_ctx(Gssctxt **, gss_OID); |  OM_uint32 mm_ssh_gssapi_server_ctx(Gssctxt **, gss_OID); | ||||||
|  OM_uint32 mm_ssh_gssapi_accept_ctx(Gssctxt *, |  OM_uint32 mm_ssh_gssapi_accept_ctx(Gssctxt *, | ||||||
|     gss_buffer_desc *, gss_buffer_desc *, OM_uint32 *); |     gss_buffer_desc *, gss_buffer_desc *, OM_uint32 *); | ||||||
| @ -1958,10 +1946,10 @@ diff -up openssh-7.2p1/monitor_wrap.h.gsskex openssh-7.2p1/monitor_wrap.h | |||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
|  #ifdef USE_PAM |  #ifdef USE_PAM | ||||||
| diff -up openssh-7.2p1/readconf.c.gsskex openssh-7.2p1/readconf.c
 | diff -up openssh-7.4p1/readconf.c.gsskex openssh-7.4p1/readconf.c
 | ||||||
| --- openssh-7.2p1/readconf.c.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/readconf.c.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/readconf.c	2016-02-19 10:01:04.870969322 +0100
 | +++ openssh-7.4p1/readconf.c	2016-12-23 13:38:53.730301005 +0100
 | ||||||
| @@ -148,6 +148,8 @@ typedef enum {
 | @@ -160,6 +160,8 @@ typedef enum {
 | ||||||
|  	oClearAllForwardings, oNoHostAuthenticationForLocalhost, |  	oClearAllForwardings, oNoHostAuthenticationForLocalhost, | ||||||
|  	oEnableSSHKeysign, oRekeyLimit, oVerifyHostKeyDNS, oConnectTimeout, |  	oEnableSSHKeysign, oRekeyLimit, oVerifyHostKeyDNS, oConnectTimeout, | ||||||
|  	oAddressFamily, oGssAuthentication, oGssDelegateCreds, |  	oAddressFamily, oGssAuthentication, oGssDelegateCreds, | ||||||
| @ -1970,7 +1958,7 @@ diff -up openssh-7.2p1/readconf.c.gsskex openssh-7.2p1/readconf.c | |||||||
|  	oServerAliveInterval, oServerAliveCountMax, oIdentitiesOnly, |  	oServerAliveInterval, oServerAliveCountMax, oIdentitiesOnly, | ||||||
|  	oSendEnv, oControlPath, oControlMaster, oControlPersist, |  	oSendEnv, oControlPath, oControlMaster, oControlPersist, | ||||||
|  	oHashKnownHosts, |  	oHashKnownHosts, | ||||||
| @@ -193,10 +195,19 @@ static struct {
 | @@ -205,10 +207,19 @@ static struct {
 | ||||||
|  	{ "afstokenpassing", oUnsupported }, |  	{ "afstokenpassing", oUnsupported }, | ||||||
|  #if defined(GSSAPI) |  #if defined(GSSAPI) | ||||||
|  	{ "gssapiauthentication", oGssAuthentication }, |  	{ "gssapiauthentication", oGssAuthentication }, | ||||||
| @ -1990,7 +1978,7 @@ diff -up openssh-7.2p1/readconf.c.gsskex openssh-7.2p1/readconf.c | |||||||
|  #endif |  #endif | ||||||
|  	{ "fallbacktorsh", oDeprecated }, |  	{ "fallbacktorsh", oDeprecated }, | ||||||
|  	{ "usersh", oDeprecated }, |  	{ "usersh", oDeprecated }, | ||||||
| @@ -926,10 +937,30 @@ parse_time:
 | @@ -961,10 +972,30 @@ parse_time:
 | ||||||
|  		intptr = &options->gss_authentication; |  		intptr = &options->gss_authentication; | ||||||
|  		goto parse_flag; |  		goto parse_flag; | ||||||
|   |   | ||||||
| @ -2021,7 +2009,7 @@ diff -up openssh-7.2p1/readconf.c.gsskex openssh-7.2p1/readconf.c | |||||||
|  	case oBatchMode: |  	case oBatchMode: | ||||||
|  		intptr = &options->batch_mode; |  		intptr = &options->batch_mode; | ||||||
|  		goto parse_flag; |  		goto parse_flag; | ||||||
| @@ -1648,7 +1679,12 @@ initialize_options(Options * options)
 | @@ -1776,7 +1807,12 @@ initialize_options(Options * options)
 | ||||||
|  	options->pubkey_authentication = -1; |  	options->pubkey_authentication = -1; | ||||||
|  	options->challenge_response_authentication = -1; |  	options->challenge_response_authentication = -1; | ||||||
|  	options->gss_authentication = -1; |  	options->gss_authentication = -1; | ||||||
| @ -2034,7 +2022,7 @@ diff -up openssh-7.2p1/readconf.c.gsskex openssh-7.2p1/readconf.c | |||||||
|  	options->password_authentication = -1; |  	options->password_authentication = -1; | ||||||
|  	options->kbd_interactive_authentication = -1; |  	options->kbd_interactive_authentication = -1; | ||||||
|  	options->kbd_interactive_devices = NULL; |  	options->kbd_interactive_devices = NULL; | ||||||
| @@ -1777,8 +1813,14 @@ fill_default_options(Options * options)
 | @@ -1920,8 +1956,14 @@ fill_default_options(Options * options)
 | ||||||
|  		options->challenge_response_authentication = 1; |  		options->challenge_response_authentication = 1; | ||||||
|  	if (options->gss_authentication == -1) |  	if (options->gss_authentication == -1) | ||||||
|  		options->gss_authentication = 0; |  		options->gss_authentication = 0; | ||||||
| @ -2049,9 +2037,9 @@ diff -up openssh-7.2p1/readconf.c.gsskex openssh-7.2p1/readconf.c | |||||||
|  	if (options->password_authentication == -1) |  	if (options->password_authentication == -1) | ||||||
|  		options->password_authentication = 1; |  		options->password_authentication = 1; | ||||||
|  	if (options->kbd_interactive_authentication == -1) |  	if (options->kbd_interactive_authentication == -1) | ||||||
| diff -up openssh-7.2p1/readconf.h.gsskex openssh-7.2p1/readconf.h
 | diff -up openssh-7.4p1/readconf.h.gsskex openssh-7.4p1/readconf.h
 | ||||||
| --- openssh-7.2p1/readconf.h.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/readconf.h.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/readconf.h	2016-02-19 10:01:04.870969322 +0100
 | +++ openssh-7.4p1/readconf.h	2016-12-23 13:38:53.730301005 +0100
 | ||||||
| @@ -45,7 +45,12 @@ typedef struct {
 | @@ -45,7 +45,12 @@ typedef struct {
 | ||||||
|  	int     challenge_response_authentication; |  	int     challenge_response_authentication; | ||||||
|  					/* Try S/Key or TIS, authentication. */ |  					/* Try S/Key or TIS, authentication. */ | ||||||
| @ -2065,9 +2053,9 @@ diff -up openssh-7.2p1/readconf.h.gsskex openssh-7.2p1/readconf.h | |||||||
|  	int     password_authentication;	/* Try password |  	int     password_authentication;	/* Try password | ||||||
|  						 * authentication. */ |  						 * authentication. */ | ||||||
|  	int     kbd_interactive_authentication; /* Try keyboard-interactive auth. */ |  	int     kbd_interactive_authentication; /* Try keyboard-interactive auth. */ | ||||||
| diff -up openssh/regress/cert-hostkey.sh.gsskex openssh/regress/cert-hostkey.sh
 | diff -up openssh-7.4p1/regress/cert-hostkey.sh.gsskex openssh-7.4p1/regress/cert-hostkey.sh
 | ||||||
| --- openssh/regress/cert-hostkey.sh.gsskex	2016-07-25 14:11:42.986324181 +0200
 | --- openssh-7.4p1/regress/cert-hostkey.sh.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/regress/cert-hostkey.sh	2016-07-25 14:15:17.784274722 +0200
 | +++ openssh-7.4p1/regress/cert-hostkey.sh	2016-12-23 13:38:53.731301006 +0100
 | ||||||
| @@ -59,7 +59,7 @@ touch $OBJ/host_revoked_plain
 | @@ -59,7 +59,7 @@ touch $OBJ/host_revoked_plain
 | ||||||
|  touch $OBJ/host_revoked_cert |  touch $OBJ/host_revoked_cert | ||||||
|  cat $OBJ/host_ca_key.pub $OBJ/host_ca_key2.pub > $OBJ/host_revoked_ca |  cat $OBJ/host_ca_key.pub $OBJ/host_ca_key2.pub > $OBJ/host_revoked_ca | ||||||
| @ -2077,9 +2065,9 @@ diff -up openssh/regress/cert-hostkey.sh.gsskex openssh/regress/cert-hostkey.sh | |||||||
|   |   | ||||||
|  if echo "$PLAIN_TYPES" | grep '^rsa$' >/dev/null 2>&1 ; then |  if echo "$PLAIN_TYPES" | grep '^rsa$' >/dev/null 2>&1 ; then | ||||||
|  	PLAIN_TYPES="$PLAIN_TYPES rsa-sha2-256 rsa-sha2-512" |  	PLAIN_TYPES="$PLAIN_TYPES rsa-sha2-256 rsa-sha2-512" | ||||||
| diff -up openssh/regress/cert-userkey.sh.gsskex openssh/regress/cert-userkey.sh
 | diff -up openssh-7.4p1/regress/cert-userkey.sh.gsskex openssh-7.4p1/regress/cert-userkey.sh
 | ||||||
| --- openssh/regress/cert-userkey.sh.gsskex	2016-07-25 14:11:42.986324181 +0200
 | --- openssh-7.4p1/regress/cert-userkey.sh.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/regress/cert-userkey.sh	2016-07-25 14:15:36.769270354 +0200
 | +++ openssh-7.4p1/regress/cert-userkey.sh	2016-12-23 13:38:53.731301006 +0100
 | ||||||
| @@ -7,7 +7,7 @@ rm -f $OBJ/authorized_keys_$USER $OBJ/us
 | @@ -7,7 +7,7 @@ rm -f $OBJ/authorized_keys_$USER $OBJ/us
 | ||||||
|  cp $OBJ/sshd_proxy $OBJ/sshd_proxy_bak |  cp $OBJ/sshd_proxy $OBJ/sshd_proxy_bak | ||||||
|  cp $OBJ/ssh_proxy $OBJ/ssh_proxy_bak |  cp $OBJ/ssh_proxy $OBJ/ssh_proxy_bak | ||||||
| @ -2089,9 +2077,9 @@ diff -up openssh/regress/cert-userkey.sh.gsskex openssh/regress/cert-userkey.sh | |||||||
|   |   | ||||||
|  if echo "$PLAIN_TYPES" | grep '^rsa$' >/dev/null 2>&1 ; then |  if echo "$PLAIN_TYPES" | grep '^rsa$' >/dev/null 2>&1 ; then | ||||||
|  	PLAIN_TYPES="$PLAIN_TYPES rsa-sha2-256 rsa-sha2-512" |  	PLAIN_TYPES="$PLAIN_TYPES rsa-sha2-256 rsa-sha2-512" | ||||||
| diff -up openssh/regress/kextype.sh.gsskex openssh/regress/kextype.sh
 | diff -up openssh-7.4p1/regress/kextype.sh.gsskex openssh-7.4p1/regress/kextype.sh
 | ||||||
| --- openssh/regress/kextype.sh.gsskex	2016-07-24 13:50:13.000000000 +0200
 | --- openssh-7.4p1/regress/kextype.sh.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh/regress/kextype.sh	2016-07-25 14:11:42.987324180 +0200
 | +++ openssh-7.4p1/regress/kextype.sh	2016-12-23 13:38:53.731301006 +0100
 | ||||||
| @@ -14,6 +14,9 @@ echo "KexAlgorithms=$KEXOPT" >> $OBJ/ssh
 | @@ -14,6 +14,9 @@ echo "KexAlgorithms=$KEXOPT" >> $OBJ/ssh
 | ||||||
|   |   | ||||||
|  tries="1 2 3 4" |  tries="1 2 3 4" | ||||||
| @ -2102,9 +2090,9 @@ diff -up openssh/regress/kextype.sh.gsskex openssh/regress/kextype.sh | |||||||
|  	verbose "kex $k" |  	verbose "kex $k" | ||||||
|  	for i in $tries; do |  	for i in $tries; do | ||||||
|  		${SSH} -F $OBJ/ssh_proxy -o KexAlgorithms=$k x true |  		${SSH} -F $OBJ/ssh_proxy -o KexAlgorithms=$k x true | ||||||
| diff -up openssh-7.2p1/regress/rekey.sh.gsskex openssh-7.2p1/regress/rekey.sh
 | diff -up openssh-7.4p1/regress/rekey.sh.gsskex openssh-7.4p1/regress/rekey.sh
 | ||||||
| --- openssh-7.2p1/regress/rekey.sh.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/regress/rekey.sh.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/regress/rekey.sh	2016-02-19 10:01:04.870969322 +0100
 | +++ openssh-7.4p1/regress/rekey.sh	2016-12-23 13:38:53.731301006 +0100
 | ||||||
| @@ -38,6 +38,9 @@ increase_datafile_size 300
 | @@ -38,6 +38,9 @@ increase_datafile_size 300
 | ||||||
|   |   | ||||||
|  opts="" |  opts="" | ||||||
| @ -2125,10 +2113,10 @@ diff -up openssh-7.2p1/regress/rekey.sh.gsskex openssh-7.2p1/regress/rekey.sh | |||||||
|  	verbose "client rekey $c $kex" |  	verbose "client rekey $c $kex" | ||||||
|  	ssh_data_rekeying "KexAlgorithms=$kex" -oRekeyLimit=256k -oCiphers=$c |  	ssh_data_rekeying "KexAlgorithms=$kex" -oRekeyLimit=256k -oCiphers=$c | ||||||
|      done |      done | ||||||
| diff -up openssh-7.2p1/servconf.c.gsskex openssh-7.2p1/servconf.c
 | diff -up openssh-7.4p1/servconf.c.gsskex openssh-7.4p1/servconf.c
 | ||||||
| --- openssh-7.2p1/servconf.c.gsskex	2016-02-19 10:01:04.857969329 +0100
 | --- openssh-7.4p1/servconf.c.gsskex	2016-12-23 13:38:53.717301003 +0100
 | ||||||
| +++ openssh-7.2p1/servconf.c	2016-02-19 10:01:04.870969322 +0100
 | +++ openssh-7.4p1/servconf.c	2016-12-23 13:38:53.732301006 +0100
 | ||||||
| @@ -117,8 +117,10 @@ initialize_server_options(ServerOptions
 | @@ -113,8 +113,10 @@ initialize_server_options(ServerOptions
 | ||||||
|  	options->kerberos_ticket_cleanup = -1; |  	options->kerberos_ticket_cleanup = -1; | ||||||
|  	options->kerberos_get_afs_token = -1; |  	options->kerberos_get_afs_token = -1; | ||||||
|  	options->gss_authentication=-1; |  	options->gss_authentication=-1; | ||||||
| @ -2139,7 +2127,7 @@ diff -up openssh-7.2p1/servconf.c.gsskex openssh-7.2p1/servconf.c | |||||||
|  	options->password_authentication = -1; |  	options->password_authentication = -1; | ||||||
|  	options->kbd_interactive_authentication = -1; |  	options->kbd_interactive_authentication = -1; | ||||||
|  	options->challenge_response_authentication = -1; |  	options->challenge_response_authentication = -1; | ||||||
| @@ -288,10 +290,14 @@ fill_default_server_options(ServerOption
 | @@ -268,10 +270,14 @@ fill_default_server_options(ServerOption
 | ||||||
|  		options->kerberos_get_afs_token = 0; |  		options->kerberos_get_afs_token = 0; | ||||||
|  	if (options->gss_authentication == -1) |  	if (options->gss_authentication == -1) | ||||||
|  		options->gss_authentication = 0; |  		options->gss_authentication = 0; | ||||||
| @ -2154,7 +2142,7 @@ diff -up openssh-7.2p1/servconf.c.gsskex openssh-7.2p1/servconf.c | |||||||
|  	if (options->password_authentication == -1) |  	if (options->password_authentication == -1) | ||||||
|  		options->password_authentication = 1; |  		options->password_authentication = 1; | ||||||
|  	if (options->kbd_interactive_authentication == -1) |  	if (options->kbd_interactive_authentication == -1) | ||||||
| @@ -422,7 +428,7 @@ typedef enum {
 | @@ -410,7 +416,7 @@ typedef enum {
 | ||||||
|  	sHostKeyAlgorithms, |  	sHostKeyAlgorithms, | ||||||
|  	sClientAliveInterval, sClientAliveCountMax, sAuthorizedKeysFile, |  	sClientAliveInterval, sClientAliveCountMax, sAuthorizedKeysFile, | ||||||
|  	sGssAuthentication, sGssCleanupCreds, sGssStrictAcceptor, |  	sGssAuthentication, sGssCleanupCreds, sGssStrictAcceptor, | ||||||
| @ -2163,7 +2151,7 @@ diff -up openssh-7.2p1/servconf.c.gsskex openssh-7.2p1/servconf.c | |||||||
|  	sMatch, sPermitOpen, sForceCommand, sChrootDirectory, |  	sMatch, sPermitOpen, sForceCommand, sChrootDirectory, | ||||||
|  	sUsePrivilegeSeparation, sAllowAgentForwarding, |  	sUsePrivilegeSeparation, sAllowAgentForwarding, | ||||||
|  	sHostCertificate, |  	sHostCertificate, | ||||||
| @@ -496,11 +502,17 @@ static struct {
 | @@ -484,11 +490,17 @@ static struct {
 | ||||||
|  	{ "gssapiauthentication", sGssAuthentication, SSHCFG_ALL }, |  	{ "gssapiauthentication", sGssAuthentication, SSHCFG_ALL }, | ||||||
|  	{ "gssapicleanupcredentials", sGssCleanupCreds, SSHCFG_GLOBAL }, |  	{ "gssapicleanupcredentials", sGssCleanupCreds, SSHCFG_GLOBAL }, | ||||||
|  	{ "gssapistrictacceptorcheck", sGssStrictAcceptor, SSHCFG_GLOBAL }, |  	{ "gssapistrictacceptorcheck", sGssStrictAcceptor, SSHCFG_GLOBAL }, | ||||||
| @ -2181,7 +2169,7 @@ diff -up openssh-7.2p1/servconf.c.gsskex openssh-7.2p1/servconf.c | |||||||
|  	{ "passwordauthentication", sPasswordAuthentication, SSHCFG_ALL }, |  	{ "passwordauthentication", sPasswordAuthentication, SSHCFG_ALL }, | ||||||
|  	{ "kbdinteractiveauthentication", sKbdInteractiveAuthentication, SSHCFG_ALL }, |  	{ "kbdinteractiveauthentication", sKbdInteractiveAuthentication, SSHCFG_ALL }, | ||||||
|  	{ "challengeresponseauthentication", sChallengeResponseAuthentication, SSHCFG_GLOBAL }, |  	{ "challengeresponseauthentication", sChallengeResponseAuthentication, SSHCFG_GLOBAL }, | ||||||
| @@ -1246,6 +1258,10 @@ process_server_config_line(ServerOptions
 | @@ -1211,6 +1223,10 @@ process_server_config_line(ServerOptions
 | ||||||
|  		intptr = &options->gss_authentication; |  		intptr = &options->gss_authentication; | ||||||
|  		goto parse_flag; |  		goto parse_flag; | ||||||
|   |   | ||||||
| @ -2192,7 +2180,7 @@ diff -up openssh-7.2p1/servconf.c.gsskex openssh-7.2p1/servconf.c | |||||||
|  	case sGssCleanupCreds: |  	case sGssCleanupCreds: | ||||||
|  		intptr = &options->gss_cleanup_creds; |  		intptr = &options->gss_cleanup_creds; | ||||||
|  		goto parse_flag; |  		goto parse_flag; | ||||||
| @@ -1254,6 +1270,10 @@ process_server_config_line(ServerOptions
 | @@ -1219,6 +1235,10 @@ process_server_config_line(ServerOptions
 | ||||||
|  		intptr = &options->gss_strict_acceptor; |  		intptr = &options->gss_strict_acceptor; | ||||||
|  		goto parse_flag; |  		goto parse_flag; | ||||||
|   |   | ||||||
| @ -2203,7 +2191,7 @@ diff -up openssh-7.2p1/servconf.c.gsskex openssh-7.2p1/servconf.c | |||||||
|  	case sPasswordAuthentication: |  	case sPasswordAuthentication: | ||||||
|  		intptr = &options->password_authentication; |  		intptr = &options->password_authentication; | ||||||
|  		goto parse_flag; |  		goto parse_flag; | ||||||
| @@ -2274,6 +2294,9 @@ dump_config(ServerOptions *o)
 | @@ -2257,6 +2277,9 @@ dump_config(ServerOptions *o)
 | ||||||
|  #ifdef GSSAPI |  #ifdef GSSAPI | ||||||
|  	dump_cfg_fmtint(sGssAuthentication, o->gss_authentication); |  	dump_cfg_fmtint(sGssAuthentication, o->gss_authentication); | ||||||
|  	dump_cfg_fmtint(sGssCleanupCreds, o->gss_cleanup_creds); |  	dump_cfg_fmtint(sGssCleanupCreds, o->gss_cleanup_creds); | ||||||
| @ -2213,10 +2201,10 @@ diff -up openssh-7.2p1/servconf.c.gsskex openssh-7.2p1/servconf.c | |||||||
|  #endif |  #endif | ||||||
|  	dump_cfg_fmtint(sPasswordAuthentication, o->password_authentication); |  	dump_cfg_fmtint(sPasswordAuthentication, o->password_authentication); | ||||||
|  	dump_cfg_fmtint(sKbdInteractiveAuthentication, |  	dump_cfg_fmtint(sKbdInteractiveAuthentication, | ||||||
| diff -up openssh-7.2p1/servconf.h.gsskex openssh-7.2p1/servconf.h
 | diff -up openssh-7.4p1/servconf.h.gsskex openssh-7.4p1/servconf.h
 | ||||||
| --- openssh-7.2p1/servconf.h.gsskex	2016-02-19 10:01:04.857969329 +0100
 | --- openssh-7.4p1/servconf.h.gsskex	2016-12-23 13:38:53.717301003 +0100
 | ||||||
| +++ openssh-7.2p1/servconf.h	2016-02-19 10:01:04.871969321 +0100
 | +++ openssh-7.4p1/servconf.h	2016-12-23 13:38:53.732301006 +0100
 | ||||||
| @@ -118,8 +118,10 @@ typedef struct {
 | @@ -112,8 +112,10 @@ typedef struct {
 | ||||||
|  	int     kerberos_get_afs_token;		/* If true, try to get AFS token if |  	int     kerberos_get_afs_token;		/* If true, try to get AFS token if | ||||||
|  						 * authenticated with Kerberos. */ |  						 * authenticated with Kerberos. */ | ||||||
|  	int     gss_authentication;	/* If true, permit GSSAPI authentication */ |  	int     gss_authentication;	/* If true, permit GSSAPI authentication */ | ||||||
| @ -2227,31 +2215,26 @@ diff -up openssh-7.2p1/servconf.h.gsskex openssh-7.2p1/servconf.h | |||||||
|  	int     password_authentication;	/* If true, permit password |  	int     password_authentication;	/* If true, permit password | ||||||
|  						 * authentication. */ |  						 * authentication. */ | ||||||
|  	int     kbd_interactive_authentication;	/* If true, permit */ |  	int     kbd_interactive_authentication;	/* If true, permit */ | ||||||
| diff -up openssh-7.2p1/ssh_config.5.gsskex openssh-7.2p1/ssh_config.5
 | diff -up openssh-7.4p1/ssh_config.5.gsskex openssh-7.4p1/ssh_config.5
 | ||||||
| --- openssh-7.2p1/ssh_config.5.gsskex	2016-02-19 10:01:04.871969321 +0100
 | --- openssh-7.4p1/ssh_config.5.gsskex	2016-12-23 13:38:53.732301006 +0100
 | ||||||
| +++ openssh-7.2p1/ssh_config.5	2016-02-19 10:05:58.630146245 +0100
 | +++ openssh-7.4p1/ssh_config.5	2016-12-23 13:48:00.502331870 +0100
 | ||||||
| @@ -824,10 +824,40 @@ The default is
 | @@ -748,10 +748,40 @@ The default is
 | ||||||
|  Specifies whether user authentication based on GSSAPI is allowed. |  Specifies whether user authentication based on GSSAPI is allowed. | ||||||
|  The default is |  The default is | ||||||
|  .Dq no . |  .Cm no . | ||||||
|  | +.It Cm GSSAPIClientIdentity
 | ||||||
|  | +If set, specifies the GSSAPI client identity that ssh should use when 
 | ||||||
|  | +connecting to the server. The default is unset, which means that the default 
 | ||||||
|  | +identity will be used.
 | ||||||
|  |  .It Cm GSSAPIDelegateCredentials | ||||||
|  |  Forward (delegate) credentials to the server. | ||||||
|  |  The default is | ||||||
|  |  .Cm no . | ||||||
| +.It Cm GSSAPIKeyExchange
 | +.It Cm GSSAPIKeyExchange
 | ||||||
| +Specifies whether key exchange based on GSSAPI may be used. When using
 | +Specifies whether key exchange based on GSSAPI may be used. When using
 | ||||||
| +GSSAPI key exchange the server need not have a host key.
 | +GSSAPI key exchange the server need not have a host key.
 | ||||||
| +The default is
 | +The default is
 | ||||||
| +.Dq no .
 | +.Dq no .
 | ||||||
| +.It Cm GSSAPIClientIdentity
 |  | ||||||
| +If set, specifies the GSSAPI client identity that ssh should use when 
 |  | ||||||
| +connecting to the server. The default is unset, which means that the default 
 |  | ||||||
| +identity will be used.
 |  | ||||||
| +.It Cm GSSAPIServerIdentity
 |  | ||||||
| +If set, specifies the GSSAPI server identity that ssh should expect when 
 |  | ||||||
| +connecting to the server. The default is unset, which means that the
 |  | ||||||
| +expected GSSAPI server identity will be determined from the target
 |  | ||||||
| +hostname.
 |  | ||||||
|  .It Cm GSSAPIDelegateCredentials |  | ||||||
|  Forward (delegate) credentials to the server. |  | ||||||
|  The default is |  | ||||||
|  .Dq no . |  | ||||||
| +.It Cm GSSAPIRenewalForcesRekey
 | +.It Cm GSSAPIRenewalForcesRekey
 | ||||||
| +If set to 
 | +If set to 
 | ||||||
| +.Dq yes
 | +.Dq yes
 | ||||||
| @ -2260,6 +2243,11 @@ diff -up openssh-7.2p1/ssh_config.5.gsskex openssh-7.2p1/ssh_config.5 | |||||||
| +credentials to a session on the server.
 | +credentials to a session on the server.
 | ||||||
| +The default is
 | +The default is
 | ||||||
| +.Dq no .
 | +.Dq no .
 | ||||||
|  | +.It Cm GSSAPIServerIdentity
 | ||||||
|  | +If set, specifies the GSSAPI server identity that ssh should expect when 
 | ||||||
|  | +connecting to the server. The default is unset, which means that the
 | ||||||
|  | +expected GSSAPI server identity will be determined from the target
 | ||||||
|  | +hostname.
 | ||||||
| +.It Cm GSSAPITrustDns
 | +.It Cm GSSAPITrustDns
 | ||||||
| +Set to 
 | +Set to 
 | ||||||
| +.Dq yes to indicate that the DNS is trusted to securely canonicalize
 | +.Dq yes to indicate that the DNS is trusted to securely canonicalize
 | ||||||
| @ -2271,9 +2259,9 @@ diff -up openssh-7.2p1/ssh_config.5.gsskex openssh-7.2p1/ssh_config.5 | |||||||
|  .It Cm HashKnownHosts |  .It Cm HashKnownHosts | ||||||
|  Indicates that |  Indicates that | ||||||
|  .Xr ssh 1 |  .Xr ssh 1 | ||||||
| diff -up openssh-7.2p1/ssh_config.gsskex openssh-7.2p1/ssh_config
 | diff -up openssh-7.4p1/ssh_config.gsskex openssh-7.4p1/ssh_config
 | ||||||
| --- openssh-7.2p1/ssh_config.gsskex	2016-02-19 10:01:04.852969332 +0100
 | --- openssh-7.4p1/ssh_config.gsskex	2016-12-23 13:38:53.708301001 +0100
 | ||||||
| +++ openssh-7.2p1/ssh_config	2016-02-19 10:01:04.871969321 +0100
 | +++ openssh-7.4p1/ssh_config	2016-12-23 13:38:53.733301006 +0100
 | ||||||
| @@ -26,6 +26,8 @@
 | @@ -26,6 +26,8 @@
 | ||||||
|  #   HostbasedAuthentication no |  #   HostbasedAuthentication no | ||||||
|  #   GSSAPIAuthentication no |  #   GSSAPIAuthentication no | ||||||
| @ -2283,10 +2271,10 @@ diff -up openssh-7.2p1/ssh_config.gsskex openssh-7.2p1/ssh_config | |||||||
|  #   BatchMode no |  #   BatchMode no | ||||||
|  #   CheckHostIP yes |  #   CheckHostIP yes | ||||||
|  #   AddressFamily any |  #   AddressFamily any | ||||||
| diff -up openssh-7.2p1/sshconnect2.c.gsskex openssh-7.2p1/sshconnect2.c
 | diff -up openssh-7.4p1/sshconnect2.c.gsskex openssh-7.4p1/sshconnect2.c
 | ||||||
| --- openssh-7.2p1/sshconnect2.c.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/sshconnect2.c.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/sshconnect2.c	2016-02-19 10:01:04.872969321 +0100
 | +++ openssh-7.4p1/sshconnect2.c	2016-12-23 13:38:53.733301006 +0100
 | ||||||
| @@ -161,9 +161,34 @@ ssh_kex2(char *host, struct sockaddr *ho
 | @@ -162,9 +162,34 @@ ssh_kex2(char *host, struct sockaddr *ho
 | ||||||
|  	struct kex *kex; |  	struct kex *kex; | ||||||
|  	int r; |  	int r; | ||||||
|   |   | ||||||
| @ -2321,7 +2309,7 @@ diff -up openssh-7.2p1/sshconnect2.c.gsskex openssh-7.2p1/sshconnect2.c | |||||||
|  	if ((s = kex_names_cat(options.kex_algorithms, "ext-info-c")) == NULL) |  	if ((s = kex_names_cat(options.kex_algorithms, "ext-info-c")) == NULL) | ||||||
|  		fatal("%s: kex_names_cat", __func__); |  		fatal("%s: kex_names_cat", __func__); | ||||||
|  	myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal(s); |  	myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal(s); | ||||||
| @@ -195,6 +220,17 @@ ssh_kex2(char *host, struct sockaddr *ho
 | @@ -192,6 +217,17 @@ ssh_kex2(char *host, struct sockaddr *ho
 | ||||||
|  		    order_hostkeyalgs(host, hostaddr, port)); |  		    order_hostkeyalgs(host, hostaddr, port)); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @ -2379,7 +2367,7 @@ diff -up openssh-7.2p1/sshconnect2.c.gsskex openssh-7.2p1/sshconnect2.c | |||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
|  void	userauth(Authctxt *, char *); |  void	userauth(Authctxt *, char *); | ||||||
| @@ -326,6 +383,11 @@ static char *authmethods_get(void);
 | @@ -327,6 +384,11 @@ static char *authmethods_get(void);
 | ||||||
|   |   | ||||||
|  Authmethod authmethods[] = { |  Authmethod authmethods[] = { | ||||||
|  #ifdef GSSAPI |  #ifdef GSSAPI | ||||||
| @ -2391,7 +2379,7 @@ diff -up openssh-7.2p1/sshconnect2.c.gsskex openssh-7.2p1/sshconnect2.c | |||||||
|  	{"gssapi-with-mic", |  	{"gssapi-with-mic", | ||||||
|  		userauth_gssapi, |  		userauth_gssapi, | ||||||
|  		NULL, |  		NULL, | ||||||
| @@ -656,19 +718,31 @@ userauth_gssapi(Authctxt *authctxt)
 | @@ -652,19 +714,31 @@ userauth_gssapi(Authctxt *authctxt)
 | ||||||
|  	static u_int mech = 0; |  	static u_int mech = 0; | ||||||
|  	OM_uint32 min; |  	OM_uint32 min; | ||||||
|  	int ok = 0; |  	int ok = 0; | ||||||
| @ -2425,7 +2413,7 @@ diff -up openssh-7.2p1/sshconnect2.c.gsskex openssh-7.2p1/sshconnect2.c | |||||||
|  			ok = 1; /* Mechanism works */ |  			ok = 1; /* Mechanism works */ | ||||||
|  		} else { |  		} else { | ||||||
|  			mech++; |  			mech++; | ||||||
| @@ -765,8 +839,8 @@ input_gssapi_response(int type, u_int32_
 | @@ -761,8 +835,8 @@ input_gssapi_response(int type, u_int32_
 | ||||||
|  { |  { | ||||||
|  	Authctxt *authctxt = ctxt; |  	Authctxt *authctxt = ctxt; | ||||||
|  	Gssctxt *gssctxt; |  	Gssctxt *gssctxt; | ||||||
| @ -2436,7 +2424,7 @@ diff -up openssh-7.2p1/sshconnect2.c.gsskex openssh-7.2p1/sshconnect2.c | |||||||
|   |   | ||||||
|  	if (authctxt == NULL) |  	if (authctxt == NULL) | ||||||
|  		fatal("input_gssapi_response: no authentication context"); |  		fatal("input_gssapi_response: no authentication context"); | ||||||
| @@ -879,6 +953,48 @@ input_gssapi_error(int type, u_int32_t p
 | @@ -875,6 +949,48 @@ input_gssapi_error(int type, u_int32_t p
 | ||||||
|  	free(lang); |  	free(lang); | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
| @ -2509,21 +2497,17 @@ diff -up openssh-7.2p1/sshd.c.gsskex openssh-7.2p1/sshd.c | |||||||
|  	sshbuf_free(buf); |  	sshbuf_free(buf); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -1845,10 +1846,13 @@ main(int ac, char **av)
 | @@ -1739,7 +1740,8 @@ main(int ac, char **av)
 | ||||||
|  		logit("Disabling protocol version 1. Could not load host key"); |  		    key ? "private" : "agent", i, sshkey_ssh_name(pubkey), fp); | ||||||
|  		options.protocol &= ~SSH_PROTO_1; |  		free(fp); | ||||||
|  	} |  	} | ||||||
| +#ifndef GSSAPI
 | -	if (!sensitive_data.have_ssh2_key) {
 | ||||||
| +	/* The GSSAPI key exchange can run without a host key */
 | +	/* The GSSAPI key exchange can run without a host key */
 | ||||||
|  	if ((options.protocol & SSH_PROTO_2) && !sensitive_data.have_ssh2_key) { | +	if (!sensitive_data.have_ssh2_key && !options.gss_keyex) {
 | ||||||
|  		logit("Disabling protocol version 2. Could not load host key"); |  | ||||||
|  		options.protocol &= ~SSH_PROTO_2; |  | ||||||
|  	} |  | ||||||
| +#endif
 |  | ||||||
|  	if (!(options.protocol & (SSH_PROTO_1|SSH_PROTO_2))) { |  | ||||||
|  		logit("sshd: no hostkeys available -- exiting."); |  		logit("sshd: no hostkeys available -- exiting."); | ||||||
|  		exit(1); |  		exit(1); | ||||||
| @@ -2586,6 +2590,48 @@ do_ssh2_kex(void)
 |  	} | ||||||
|  | @@ -2196,6 +2198,48 @@ do_ssh2_kex(void)
 | ||||||
|  	myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = compat_pkalg_proposal( |  	myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = compat_pkalg_proposal( | ||||||
|  	    list_hostkey_types()); |  	    list_hostkey_types()); | ||||||
|   |   | ||||||
| @ -2572,7 +2556,7 @@ diff -up openssh-7.2p1/sshd.c.gsskex openssh-7.2p1/sshd.c | |||||||
|  	/* start key exchange */ |  	/* start key exchange */ | ||||||
|  	if ((r = kex_setup(active_state, myproposal)) != 0) |  	if ((r = kex_setup(active_state, myproposal)) != 0) | ||||||
|  		fatal("kex_setup: %s", ssh_err(r)); |  		fatal("kex_setup: %s", ssh_err(r)); | ||||||
| @@ -2600,6 +2646,13 @@ do_ssh2_kex(void)
 | @@ -2213,6 +2257,13 @@ do_ssh2_kex(void)
 | ||||||
|  # endif |  # endif | ||||||
|  #endif |  #endif | ||||||
|  	kex->kex[KEX_C25519_SHA256] = kexc25519_server; |  	kex->kex[KEX_C25519_SHA256] = kexc25519_server; | ||||||
| @ -2586,25 +2570,25 @@ diff -up openssh-7.2p1/sshd.c.gsskex openssh-7.2p1/sshd.c | |||||||
|  	kex->server = 1; |  	kex->server = 1; | ||||||
|  	kex->client_version_string=client_version_string; |  	kex->client_version_string=client_version_string; | ||||||
|  	kex->server_version_string=server_version_string; |  	kex->server_version_string=server_version_string; | ||||||
| diff -up openssh-7.2p1/sshd_config.5.gsskex openssh-7.2p1/sshd_config.5
 | diff -up openssh-7.4p1/sshd_config.5.gsskex openssh-7.4p1/sshd_config.5
 | ||||||
| --- openssh-7.2p1/sshd_config.5.gsskex	2016-02-19 10:01:04.858969329 +0100
 | --- openssh-7.4p1/sshd_config.5.gsskex	2016-12-23 13:38:53.734301006 +0100
 | ||||||
| +++ openssh-7.2p1/sshd_config.5	2016-02-19 10:06:26.651172355 +0100
 | +++ openssh-7.4p1/sshd_config.5	2016-12-23 13:48:57.825310358 +0100
 | ||||||
| @@ -623,6 +623,11 @@ The default is
 | @@ -628,6 +628,11 @@ Specifies whether to automatically destr
 | ||||||
|  Specifies whether user authentication based on GSSAPI is allowed. |  on logout. | ||||||
|  The default is |  The default is | ||||||
|  .Dq no . |  .Cm yes . | ||||||
| +.It Cm GSSAPIKeyExchange
 | +.It Cm GSSAPIKeyExchange
 | ||||||
| +Specifies whether key exchange based on GSSAPI is allowed. GSSAPI key exchange
 | +Specifies whether key exchange based on GSSAPI is allowed. GSSAPI key exchange
 | ||||||
| +doesn't rely on ssh keys to verify host identity.
 | +doesn't rely on ssh keys to verify host identity.
 | ||||||
| +The default is
 | +The default is
 | ||||||
| +.Dq no .
 | +.Dq no .
 | ||||||
|  .It Cm GSSAPICleanupCredentials |  .It Cm GSSAPIStrictAcceptorCheck | ||||||
|  Specifies whether to automatically destroy the user's credentials cache |  Determines whether to be strict about the identity of the GSSAPI acceptor | ||||||
|  on logout. |  a client authenticates against. | ||||||
| @@ -643,6 +648,11 @@ machine's default store.
 | @@ -642,6 +647,11 @@ machine's default store.
 | ||||||
|  This facility is provided to assist with operation on multi homed machines. |  This facility is provided to assist with operation on multi homed machines. | ||||||
|  The default is |  The default is | ||||||
|  .Dq yes . |  .Cm yes . | ||||||
| +.It Cm GSSAPIStoreCredentialsOnRekey
 | +.It Cm GSSAPIStoreCredentialsOnRekey
 | ||||||
| +Controls whether the user's GSSAPI credentials should be updated following a 
 | +Controls whether the user's GSSAPI credentials should be updated following a 
 | ||||||
| +successful connection rekeying. This option can be used to accepted renewed 
 | +successful connection rekeying. This option can be used to accepted renewed 
 | ||||||
| @ -2613,10 +2597,10 @@ diff -up openssh-7.2p1/sshd_config.5.gsskex openssh-7.2p1/sshd_config.5 | |||||||
|  .It Cm HostbasedAcceptedKeyTypes |  .It Cm HostbasedAcceptedKeyTypes | ||||||
|  Specifies the key types that will be accepted for hostbased authentication |  Specifies the key types that will be accepted for hostbased authentication | ||||||
|  as a comma-separated pattern list. |  as a comma-separated pattern list. | ||||||
| diff -up openssh-7.2p1/sshd_config.gsskex openssh-7.2p1/sshd_config
 | diff -up openssh-7.4p1/sshd_config.gsskex openssh-7.4p1/sshd_config
 | ||||||
| --- openssh-7.2p1/sshd_config.gsskex	2016-02-19 10:01:04.860969328 +0100
 | --- openssh-7.4p1/sshd_config.gsskex	2016-12-23 13:38:53.719301003 +0100
 | ||||||
| +++ openssh-7.2p1/sshd_config	2016-02-19 10:01:04.873969320 +0100
 | +++ openssh-7.4p1/sshd_config	2016-12-23 13:38:53.734301006 +0100
 | ||||||
| @@ -91,6 +91,8 @@ ChallengeResponseAuthentication no
 | @@ -77,6 +77,8 @@ ChallengeResponseAuthentication no
 | ||||||
|  # GSSAPI options |  # GSSAPI options | ||||||
|  GSSAPIAuthentication yes |  GSSAPIAuthentication yes | ||||||
|  GSSAPICleanupCredentials no |  GSSAPICleanupCredentials no | ||||||
| @ -2625,9 +2609,9 @@ diff -up openssh-7.2p1/sshd_config.gsskex openssh-7.2p1/sshd_config | |||||||
|   |   | ||||||
|  # Set this to 'yes' to enable PAM authentication, account processing, |  # Set this to 'yes' to enable PAM authentication, account processing, | ||||||
|  # and session processing. If this is enabled, PAM authentication will |  # and session processing. If this is enabled, PAM authentication will | ||||||
| diff -up openssh-7.2p1/ssh-gss.h.gsskex openssh-7.2p1/ssh-gss.h
 | diff -up openssh-7.4p1/ssh-gss.h.gsskex openssh-7.4p1/ssh-gss.h
 | ||||||
| --- openssh-7.2p1/ssh-gss.h.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/ssh-gss.h.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/ssh-gss.h	2016-02-19 10:01:04.873969320 +0100
 | +++ openssh-7.4p1/ssh-gss.h	2016-12-23 13:38:53.734301006 +0100
 | ||||||
| @@ -1,6 +1,6 @@
 | @@ -1,6 +1,6 @@
 | ||||||
|  /* $OpenBSD: ssh-gss.h,v 1.11 2014/02/26 20:28:44 djm Exp $ */ |  /* $OpenBSD: ssh-gss.h,v 1.11 2014/02/26 20:28:44 djm Exp $ */ | ||||||
|  /* |  /* | ||||||
| @ -2727,10 +2711,10 @@ diff -up openssh-7.2p1/ssh-gss.h.gsskex openssh-7.2p1/ssh-gss.h | |||||||
|  #endif /* GSSAPI */ |  #endif /* GSSAPI */ | ||||||
|   |   | ||||||
|  #endif /* _SSH_GSS_H */ |  #endif /* _SSH_GSS_H */ | ||||||
| diff -up openssh-7.2p1/sshkey.c.gsskex openssh-7.2p1/sshkey.c
 | diff -up openssh-7.4p1/sshkey.c.gsskex openssh-7.4p1/sshkey.c
 | ||||||
| --- openssh-7.2p1/sshkey.c.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/sshkey.c.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/sshkey.c	2016-02-19 10:01:04.874969320 +0100
 | +++ openssh-7.4p1/sshkey.c	2016-12-23 13:38:53.735301006 +0100
 | ||||||
| @@ -115,6 +115,7 @@ static const struct keytype keytypes[] =
 | @@ -114,6 +114,7 @@ static const struct keytype keytypes[] =
 | ||||||
|  #  endif /* OPENSSL_HAS_NISTP521 */ |  #  endif /* OPENSSL_HAS_NISTP521 */ | ||||||
|  # endif /* OPENSSL_HAS_ECC */ |  # endif /* OPENSSL_HAS_ECC */ | ||||||
|  #endif /* WITH_OPENSSL */ |  #endif /* WITH_OPENSSL */ | ||||||
| @ -2738,9 +2722,9 @@ diff -up openssh-7.2p1/sshkey.c.gsskex openssh-7.2p1/sshkey.c | |||||||
|  	{ NULL, NULL, -1, -1, 0, 0 } |  	{ NULL, NULL, -1, -1, 0, 0 } | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| diff -up openssh-7.2p1/sshkey.h.gsskex openssh-7.2p1/sshkey.h
 | diff -up openssh-7.4p1/sshkey.h.gsskex openssh-7.4p1/sshkey.h
 | ||||||
| --- openssh-7.2p1/sshkey.h.gsskex	2016-02-12 11:47:25.000000000 +0100
 | --- openssh-7.4p1/sshkey.h.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-7.2p1/sshkey.h	2016-02-19 10:01:04.874969320 +0100
 | +++ openssh-7.4p1/sshkey.h	2016-12-23 13:38:53.735301006 +0100
 | ||||||
| @@ -62,6 +62,7 @@ enum sshkey_types {
 | @@ -62,6 +62,7 @@ enum sshkey_types {
 | ||||||
|  	KEY_DSA_CERT, |  	KEY_DSA_CERT, | ||||||
|  	KEY_ECDSA_CERT, |  	KEY_ECDSA_CERT, | ||||||
| @ -2749,11 +2733,18 @@ diff -up openssh-7.2p1/sshkey.h.gsskex openssh-7.2p1/sshkey.h | |||||||
|  	KEY_UNSPEC |  	KEY_UNSPEC | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| diff --git a/auth.c b/auth.c
 | diff -up openssh-7.4p1/auth.c.gsskex openssh-7.4p1/auth.c
 | ||||||
| index e0f7639..a5a346e 100644
 | --- openssh-7.4p1/auth.c.gsskex	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| --- a/auth.c
 | +++ openssh-7.4p1/auth.c	2016-12-23 13:38:53.735301006 +0100
 | ||||||
| +++ b/auth.c
 | @@ -372,6 +372,7 @@ auth_root_allowed(const char *method)
 | ||||||
| @@ -784,99 +784,6 @@ fakepw(void)
 |  	case PERMIT_NO_PASSWD: | ||||||
|  |  		if (strcmp(method, "publickey") == 0 || | ||||||
|  |  		    strcmp(method, "hostbased") == 0 || | ||||||
|  | +		    strcmp(method, "gssapi-keyex") == 0 ||
 | ||||||
|  |  		    strcmp(method, "gssapi-with-mic") == 0) | ||||||
|  |  			return 1; | ||||||
|  |  		break; | ||||||
|  | @@ -795,99 +796,6 @@ fakepw(void)
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  /* |  /* | ||||||
| @ -2853,11 +2844,10 @@ index e0f7639..a5a346e 100644 | |||||||
|   * Return the canonical name of the host in the other side of the current |   * 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 |   * connection.  The host name is cached, so it is efficient to call this | ||||||
|   * several times. |   * several times. | ||||||
| diff --git a/openbsd-compat/port-linux.c b/openbsd-compat/port-linux.c
 | diff -up openssh-7.4p1/openbsd-compat/port-linux.c.gsskex openssh-7.4p1/openbsd-compat/port-linux.c
 | ||||||
| index 80729b3..93a1b04 100644
 | --- openssh-7.4p1/openbsd-compat/port-linux.c.gsskex	2016-12-23 13:38:53.688300997 +0100
 | ||||||
| --- a/openbsd-compat/port-linux.c
 | +++ openssh-7.4p1/openbsd-compat/port-linux.c	2016-12-23 13:38:53.735301006 +0100
 | ||||||
| +++ b/openbsd-compat/port-linux.c
 | @@ -30,6 +30,8 @@
 | ||||||
| @@ -32,6 +32,8 @@
 |  | ||||||
|  #include "log.h" |  #include "log.h" | ||||||
|  #include "xmalloc.h" |  #include "xmalloc.h" | ||||||
|  #include "port-linux.h" |  #include "port-linux.h" | ||||||
| @ -2866,7 +2856,7 @@ index 80729b3..93a1b04 100644 | |||||||
|   |   | ||||||
|  #ifdef WITH_SELINUX |  #ifdef WITH_SELINUX | ||||||
|  #include <selinux/selinux.h> |  #include <selinux/selinux.h> | ||||||
| @@ -286,4 +288,121 @@ oom_adjust_restore(void)
 | @@ -279,4 +281,121 @@ oom_adjust_restore(void)
 | ||||||
|  	return; |  	return; | ||||||
|  } |  } | ||||||
|  #endif /* LINUX_OOM_ADJUST */ |  #endif /* LINUX_OOM_ADJUST */ | ||||||
| @ -2988,11 +2978,10 @@ index 80729b3..93a1b04 100644 | |||||||
| +	}
 | +	}
 | ||||||
| +}
 | +}
 | ||||||
|  #endif /* WITH_SELINUX || LINUX_OOM_ADJUST */ |  #endif /* WITH_SELINUX || LINUX_OOM_ADJUST */ | ||||||
| diff --git a/openbsd-compat/port-linux.h b/openbsd-compat/port-linux.h
 | diff -up openssh-7.4p1/openbsd-compat/port-linux.h.gsskex openssh-7.4p1/openbsd-compat/port-linux.h
 | ||||||
| index e2ca8a1..6c5ac3f 100644
 | --- openssh-7.4p1/openbsd-compat/port-linux.h.gsskex	2016-12-23 13:38:53.712301002 +0100
 | ||||||
| --- a/openbsd-compat/port-linux.h
 | +++ openssh-7.4p1/openbsd-compat/port-linux.h	2016-12-23 13:38:53.735301006 +0100
 | ||||||
| +++ b/openbsd-compat/port-linux.h
 | @@ -16,6 +16,7 @@
 | ||||||
| @@ -18,6 +18,7 @@
 |  | ||||||
|   |   | ||||||
|  #ifndef _PORT_LINUX_H |  #ifndef _PORT_LINUX_H | ||||||
|  #define _PORT_LINUX_H |  #define _PORT_LINUX_H | ||||||
| @ -3000,7 +2989,7 @@ index e2ca8a1..6c5ac3f 100644 | |||||||
|   |   | ||||||
|  #ifdef WITH_SELINUX |  #ifdef WITH_SELINUX | ||||||
|  int ssh_selinux_enabled(void); |  int ssh_selinux_enabled(void); | ||||||
| @@ -39,4 +40,8 @@ void oom_adjust_setup(void);
 | @@ -36,4 +37,8 @@ void oom_adjust_setup(void);
 | ||||||
|   |   | ||||||
|  void linux_seed(void); |  void linux_seed(void); | ||||||
|   |   | ||||||
| @ -3009,18 +2998,3 @@ index e2ca8a1..6c5ac3f 100644 | |||||||
| +
 | +
 | ||||||
| +
 | +
 | ||||||
|  #endif /* ! _PORT_LINUX_H */ |  #endif /* ! _PORT_LINUX_H */ | ||||||
| 
 |  | ||||||
| diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c
 |  | ||||||
| index 3e6f982..4c2653f 100644
 |  | ||||||
| --- a/sandbox-seccomp-filter.c
 |  | ||||||
| +++ b/sandbox-seccomp-filter.c
 |  | ||||||
| @@ -213,6 +213,9 @@ static const struct sock_filter preauth_insns[] = {
 |  | ||||||
|  #ifdef __NR_write |  | ||||||
|  	SC_ALLOW(write), |  | ||||||
|  #endif |  | ||||||
| +#ifdef __NR_futex
 |  | ||||||
| +	SC_ALLOW(futex), /* for GSSAPI Kex */
 |  | ||||||
| +#endif
 |  | ||||||
|  #ifdef __NR_socketcall |  | ||||||
|  	SC_ALLOW_ARG(socketcall, 0, SYS_SHUTDOWN), |  | ||||||
|  #endif |  | ||||||
|  | |||||||
| @ -1,14 +1,10 @@ | |||||||
| diff --git a/sshd.c b/sshd.c
 | diff --git a/sshd.c b/sshd.c
 | ||||||
| --- a/sshd.c
 | --- a/sshd.c
 | ||||||
| +++ b/sshd.c
 | +++ b/sshd.c
 | ||||||
| @@ -1701,6 +1701,14 @@ main(int ac, char **av)
 | @@ -1701,6 +1701,10 @@ main(int ac, char **av)
 | ||||||
|  	parse_server_config(&options, rexeced_flag ? "rexec" : config_file_name, |  	parse_server_config(&options, rexeced_flag ? "rexec" : config_file_name, | ||||||
|  	    &cfg, NULL); |  	    &cfg, NULL); | ||||||
|   |   | ||||||
| +	/* 'UseLogin yes' is not supported in Fedora */
 |  | ||||||
| +	if (options.use_login == 1)
 |  | ||||||
| +		logit("WARNING: 'UseLogin yes' is not supported in Fedora and may cause several problems.");
 |  | ||||||
| +
 |  | ||||||
| +	/* 'UsePAM no' is not supported in Fedora */
 | +	/* 'UsePAM no' is not supported in Fedora */
 | ||||||
| +	if (! options.use_pam)
 | +	if (! options.use_pam)
 | ||||||
| +		logit("WARNING: 'UsePAM no' is not supported in Fedora and may cause several problems.");
 | +		logit("WARNING: 'UsePAM no' is not supported in Fedora and may cause several problems.");
 | ||||||
| @ -28,12 +24,3 @@ diff --git a/sshd_config b/sshd_config | |||||||
|  UsePAM yes |  UsePAM yes | ||||||
|   |   | ||||||
|  #AllowAgentForwarding yes |  #AllowAgentForwarding yes | ||||||
| @@ -113,6 +115,8 @@ X11Forwarding yes
 |  | ||||||
|  #PrintMotd yes |  | ||||||
|  #PrintLastLog yes |  | ||||||
|  #TCPKeepAlive yes |  | ||||||
| +# WARNING: 'UseLogin yes' is not supported in Fedora and may cause several
 |  | ||||||
| +# problems.
 |  | ||||||
|  #UseLogin no |  | ||||||
|  #UsePrivilegeSeparation sandbox |  | ||||||
|  #PermitUserEnvironment no |  | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| diff -up openssh-7.2p2/auth2.c.expose-pam openssh-7.2p2/auth2.c
 | diff -up openssh-7.4p1/auth2.c.expose-pam openssh-7.4p1/auth2.c
 | ||||||
| --- openssh-7.2p2/auth2.c.expose-pam	2016-07-18 12:30:12.064783302 +0200
 | --- openssh-7.4p1/auth2.c.expose-pam	2016-12-23 15:40:26.768447868 +0100
 | ||||||
| +++ openssh-7.2p2/auth2.c	2016-07-18 12:30:12.124783255 +0200
 | +++ openssh-7.4p1/auth2.c	2016-12-23 15:40:26.818447876 +0100
 | ||||||
| @@ -310,6 +310,7 @@ userauth_finish(Authctxt *authctxt, int
 | @@ -310,6 +310,7 @@ userauth_finish(Authctxt *authctxt, int
 | ||||||
|      const char *submethod) |      const char *submethod) | ||||||
|  { |  { | ||||||
| @ -28,9 +28,9 @@ diff -up openssh-7.2p2/auth2.c.expose-pam openssh-7.2p2/auth2.c | |||||||
|  #ifdef USE_PAM |  #ifdef USE_PAM | ||||||
|  	if (options.use_pam && authenticated) { |  	if (options.use_pam && authenticated) { | ||||||
|  		if (!PRIVSEP(do_pam_account())) { |  		if (!PRIVSEP(do_pam_account())) { | ||||||
| diff -up openssh-7.2p2/auth2-gss.c.expose-pam openssh-7.2p2/auth2-gss.c
 | diff -up openssh-7.4p1/auth2-gss.c.expose-pam openssh-7.4p1/auth2-gss.c
 | ||||||
| --- openssh-7.2p2/auth2-gss.c.expose-pam	2016-07-18 12:30:12.123783256 +0200
 | --- openssh-7.4p1/auth2-gss.c.expose-pam	2016-12-23 15:40:26.769447868 +0100
 | ||||||
| +++ openssh-7.2p2/auth2-gss.c	2016-07-18 12:32:08.034692086 +0200
 | +++ openssh-7.4p1/auth2-gss.c	2016-12-23 15:40:26.818447876 +0100
 | ||||||
| @@ -276,6 +276,9 @@ input_gssapi_exchange_complete(int type,
 | @@ -276,6 +276,9 @@ input_gssapi_exchange_complete(int type,
 | ||||||
|  	authenticated = PRIVSEP(ssh_gssapi_userok(authctxt->user, |  	authenticated = PRIVSEP(ssh_gssapi_userok(authctxt->user, | ||||||
|  	    authctxt->pw)); |  	    authctxt->pw)); | ||||||
| @ -51,9 +51,9 @@ diff -up openssh-7.2p2/auth2-gss.c.expose-pam openssh-7.2p2/auth2-gss.c | |||||||
|  	buffer_free(&b); |  	buffer_free(&b); | ||||||
|  	if (micuser != authctxt->user) |  	if (micuser != authctxt->user) | ||||||
|  		free(micuser); |  		free(micuser); | ||||||
| diff -up openssh-7.2p2/auth2-hostbased.c.expose-pam openssh-7.2p2/auth2-hostbased.c
 | diff -up openssh-7.4p1/auth2-hostbased.c.expose-pam openssh-7.4p1/auth2-hostbased.c
 | ||||||
| --- openssh-7.2p2/auth2-hostbased.c.expose-pam	2016-07-18 12:30:12.027783331 +0200
 | --- openssh-7.4p1/auth2-hostbased.c.expose-pam	2016-12-23 15:40:26.731447862 +0100
 | ||||||
| +++ openssh-7.2p2/auth2-hostbased.c	2016-07-18 12:30:12.124783255 +0200
 | +++ openssh-7.4p1/auth2-hostbased.c	2016-12-23 15:40:26.818447876 +0100
 | ||||||
| @@ -60,7 +60,7 @@ userauth_hostbased(Authctxt *authctxt)
 | @@ -60,7 +60,7 @@ userauth_hostbased(Authctxt *authctxt)
 | ||||||
|  { |  { | ||||||
|  	Buffer b; |  	Buffer b; | ||||||
| @ -88,9 +88,9 @@ diff -up openssh-7.2p2/auth2-hostbased.c.expose-pam openssh-7.2p2/auth2-hostbase | |||||||
|   |   | ||||||
|  	buffer_free(&b); |  	buffer_free(&b); | ||||||
|  done: |  done: | ||||||
| diff -up openssh-7.2p2/auth2-pubkey.c.expose-pam openssh-7.2p2/auth2-pubkey.c
 | diff -up openssh-7.4p1/auth2-pubkey.c.expose-pam openssh-7.4p1/auth2-pubkey.c
 | ||||||
| --- openssh-7.2p2/auth2-pubkey.c.expose-pam	2016-07-18 12:30:12.039783322 +0200
 | --- openssh-7.4p1/auth2-pubkey.c.expose-pam	2016-12-23 15:40:26.746447864 +0100
 | ||||||
| +++ openssh-7.2p2/auth2-pubkey.c	2016-07-18 12:30:12.124783255 +0200
 | +++ openssh-7.4p1/auth2-pubkey.c	2016-12-23 15:40:26.819447876 +0100
 | ||||||
| @@ -79,7 +79,7 @@ userauth_pubkey(Authctxt *authctxt)
 | @@ -79,7 +79,7 @@ userauth_pubkey(Authctxt *authctxt)
 | ||||||
|  { |  { | ||||||
|  	Buffer b; |  	Buffer b; | ||||||
| @ -100,7 +100,7 @@ diff -up openssh-7.2p2/auth2-pubkey.c.expose-pam openssh-7.2p2/auth2-pubkey.c | |||||||
|  	u_char *pkblob, *sig; |  	u_char *pkblob, *sig; | ||||||
|  	u_int alen, blen, slen; |  	u_int alen, blen, slen; | ||||||
|  	int have_sig, pktype; |  	int have_sig, pktype; | ||||||
| @@ -173,7 +173,8 @@ userauth_pubkey(Authctxt *authctxt)
 | @@ -177,7 +177,8 @@ userauth_pubkey(Authctxt *authctxt)
 | ||||||
|  #ifdef DEBUG_PK |  #ifdef DEBUG_PK | ||||||
|  		buffer_dump(&b); |  		buffer_dump(&b); | ||||||
|  #endif |  #endif | ||||||
| @ -110,7 +110,7 @@ diff -up openssh-7.2p2/auth2-pubkey.c.expose-pam openssh-7.2p2/auth2-pubkey.c | |||||||
|   |   | ||||||
|  		/* test for correct signature */ |  		/* test for correct signature */ | ||||||
|  		authenticated = 0; |  		authenticated = 0; | ||||||
| @@ -181,9 +182,12 @@ userauth_pubkey(Authctxt *authctxt)
 | @@ -185,9 +186,12 @@ userauth_pubkey(Authctxt *authctxt)
 | ||||||
|  		    PRIVSEP(key_verify(key, sig, slen, buffer_ptr(&b), |  		    PRIVSEP(key_verify(key, sig, slen, buffer_ptr(&b), | ||||||
|  		    buffer_len(&b))) == 1) { |  		    buffer_len(&b))) == 1) { | ||||||
|  			authenticated = 1; |  			authenticated = 1; | ||||||
| @ -123,7 +123,7 @@ diff -up openssh-7.2p2/auth2-pubkey.c.expose-pam openssh-7.2p2/auth2-pubkey.c | |||||||
|  		} |  		} | ||||||
|  		buffer_free(&b); |  		buffer_free(&b); | ||||||
|  		free(sig); |  		free(sig); | ||||||
| @@ -224,7 +228,7 @@ done:
 | @@ -228,7 +232,7 @@ done:
 | ||||||
|  void |  void | ||||||
|  pubkey_auth_info(Authctxt *authctxt, const Key *key, const char *fmt, ...) |  pubkey_auth_info(Authctxt *authctxt, const Key *key, const char *fmt, ...) | ||||||
|  { |  { | ||||||
| @ -132,7 +132,7 @@ diff -up openssh-7.2p2/auth2-pubkey.c.expose-pam openssh-7.2p2/auth2-pubkey.c | |||||||
|  	va_list ap; |  	va_list ap; | ||||||
|  	int i; |  	int i; | ||||||
|   |   | ||||||
| @@ -234,27 +238,13 @@ pubkey_auth_info(Authctxt *authctxt, con
 | @@ -238,27 +242,13 @@ pubkey_auth_info(Authctxt *authctxt, con
 | ||||||
|  		i = vasprintf(&extra, fmt, ap); |  		i = vasprintf(&extra, fmt, ap); | ||||||
|  		va_end(ap); |  		va_end(ap); | ||||||
|  		if (i < 0 || extra == NULL) |  		if (i < 0 || extra == NULL) | ||||||
| @ -165,9 +165,9 @@ diff -up openssh-7.2p2/auth2-pubkey.c.expose-pam openssh-7.2p2/auth2-pubkey.c | |||||||
|  	free(extra); |  	free(extra); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| diff -up openssh-7.2p2/auth.h.expose-pam openssh-7.2p2/auth.h
 | diff -up openssh-7.4p1/auth.h.expose-pam openssh-7.4p1/auth.h
 | ||||||
| --- openssh-7.2p2/auth.h.expose-pam	2016-07-18 12:30:12.077783292 +0200
 | --- openssh-7.4p1/auth.h.expose-pam	2016-12-23 15:40:26.782447870 +0100
 | ||||||
| +++ openssh-7.2p2/auth.h	2016-07-18 12:30:12.123783256 +0200
 | +++ openssh-7.4p1/auth.h	2016-12-23 15:40:26.819447876 +0100
 | ||||||
| @@ -84,6 +84,9 @@ struct Authctxt {
 | @@ -84,6 +84,9 @@ struct Authctxt {
 | ||||||
|   |   | ||||||
|  	struct sshkey	**prev_userkeys; |  	struct sshkey	**prev_userkeys; | ||||||
| @ -178,10 +178,10 @@ diff -up openssh-7.2p2/auth.h.expose-pam openssh-7.2p2/auth.h | |||||||
|  }; |  }; | ||||||
|  /* |  /* | ||||||
|   * Every authentication method has to handle authentication requests for |   * Every authentication method has to handle authentication requests for | ||||||
| diff -up openssh-7.2p2/auth-pam.c.expose-pam openssh-7.2p2/auth-pam.c
 | diff -up openssh-7.4p1/auth-pam.c.expose-pam openssh-7.4p1/auth-pam.c
 | ||||||
| --- openssh-7.2p2/auth-pam.c.expose-pam	2016-07-18 12:30:12.026783332 +0200
 | --- openssh-7.4p1/auth-pam.c.expose-pam	2016-12-23 15:40:26.731447862 +0100
 | ||||||
| +++ openssh-7.2p2/auth-pam.c	2016-07-18 12:30:12.123783256 +0200
 | +++ openssh-7.4p1/auth-pam.c	2016-12-23 15:40:26.819447876 +0100
 | ||||||
| @@ -689,6 +689,11 @@ sshpam_init_ctx(Authctxt *authctxt)
 | @@ -688,6 +688,11 @@ sshpam_init_ctx(Authctxt *authctxt)
 | ||||||
|  		return (NULL); |  		return (NULL); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @ -193,9 +193,9 @@ diff -up openssh-7.2p2/auth-pam.c.expose-pam openssh-7.2p2/auth-pam.c | |||||||
|  	ctxt = xcalloc(1, sizeof *ctxt); |  	ctxt = xcalloc(1, sizeof *ctxt); | ||||||
|   |   | ||||||
|  	/* Start the authentication thread */ |  	/* Start the authentication thread */ | ||||||
| diff -up openssh-7.2p2/gss-serv.c.expose-pam openssh-7.2p2/gss-serv.c
 | diff -up openssh-7.4p1/gss-serv.c.expose-pam openssh-7.4p1/gss-serv.c
 | ||||||
| --- openssh-7.2p2/gss-serv.c.expose-pam	2016-07-18 12:30:12.124783255 +0200
 | --- openssh-7.4p1/gss-serv.c.expose-pam	2016-12-23 15:40:26.808447874 +0100
 | ||||||
| +++ openssh-7.2p2/gss-serv.c	2016-07-18 12:33:08.835644264 +0200
 | +++ openssh-7.4p1/gss-serv.c	2016-12-23 15:40:26.819447876 +0100
 | ||||||
| @@ -441,6 +441,16 @@ ssh_gssapi_do_child(char ***envp, u_int
 | @@ -441,6 +441,16 @@ ssh_gssapi_do_child(char ***envp, u_int
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -213,10 +213,10 @@ diff -up openssh-7.2p2/gss-serv.c.expose-pam openssh-7.2p2/gss-serv.c | |||||||
|  int |  int | ||||||
|  ssh_gssapi_userok(char *user, struct passwd *pw) |  ssh_gssapi_userok(char *user, struct passwd *pw) | ||||||
|  { |  { | ||||||
| diff -up openssh-7.2p2/monitor.c.expose-pam openssh-7.2p2/monitor.c
 | diff -up openssh-7.4p1/monitor.c.expose-pam openssh-7.4p1/monitor.c
 | ||||||
| --- openssh-7.2p2/monitor.c.expose-pam	2016-07-18 12:30:12.093783279 +0200
 | --- openssh-7.4p1/monitor.c.expose-pam	2016-12-23 15:40:26.794447872 +0100
 | ||||||
| +++ openssh-7.2p2/monitor.c	2016-07-18 12:30:12.124783255 +0200
 | +++ openssh-7.4p1/monitor.c	2016-12-23 15:41:16.473455863 +0100
 | ||||||
| @@ -349,6 +349,7 @@ monitor_child_preauth(Authctxt *_authctx
 | @@ -300,6 +300,7 @@ monitor_child_preauth(Authctxt *_authctx
 | ||||||
|  { |  { | ||||||
|  	struct mon_table *ent; |  	struct mon_table *ent; | ||||||
|  	int authenticated = 0, partial = 0; |  	int authenticated = 0, partial = 0; | ||||||
| @ -224,7 +224,7 @@ diff -up openssh-7.2p2/monitor.c.expose-pam openssh-7.2p2/monitor.c | |||||||
|   |   | ||||||
|  	debug3("preauth child monitor started"); |  	debug3("preauth child monitor started"); | ||||||
|   |   | ||||||
| @@ -386,6 +387,18 @@ monitor_child_preauth(Authctxt *_authctx
 | @@ -330,6 +331,18 @@ monitor_child_preauth(Authctxt *_authctx
 | ||||||
|  		auth_submethod = NULL; |  		auth_submethod = NULL; | ||||||
|  		authenticated = (monitor_read(pmonitor, mon_dispatch, &ent) == 1); |  		authenticated = (monitor_read(pmonitor, mon_dispatch, &ent) == 1); | ||||||
|   |   | ||||||
| @ -242,8 +242,8 @@ diff -up openssh-7.2p2/monitor.c.expose-pam openssh-7.2p2/monitor.c | |||||||
| +
 | +
 | ||||||
|  		/* Special handling for multiple required authentications */ |  		/* Special handling for multiple required authentications */ | ||||||
|  		if (options.num_auth_methods != 0) { |  		if (options.num_auth_methods != 0) { | ||||||
|  			if (!compat20) |  			if (authenticated && | ||||||
| @@ -1498,6 +1511,10 @@ mm_answer_keyverify(int sock, Buffer *m)
 | @@ -1417,6 +1430,10 @@ mm_answer_keyverify(int sock, Buffer *m)
 | ||||||
|  	debug3("%s: key %p signature %s", |  	debug3("%s: key %p signature %s", | ||||||
|  	    __func__, key, (verified == 1) ? "verified" : "unverified"); |  	    __func__, key, (verified == 1) ? "verified" : "unverified"); | ||||||
|   |   | ||||||
| @ -254,7 +254,7 @@ diff -up openssh-7.2p2/monitor.c.expose-pam openssh-7.2p2/monitor.c | |||||||
|  	/* If auth was successful then record key to ensure it isn't reused */ |  	/* If auth was successful then record key to ensure it isn't reused */ | ||||||
|  	if (verified == 1 && key_blobtype == MM_USERKEY) |  	if (verified == 1 && key_blobtype == MM_USERKEY) | ||||||
|  		auth2_record_userkey(authctxt, key); |  		auth2_record_userkey(authctxt, key); | ||||||
| @@ -2140,6 +2157,9 @@ mm_answer_gss_userok(int sock, Buffer *m
 | @@ -1860,6 +1877,9 @@ mm_answer_gss_userok(int sock, Buffer *m
 | ||||||
|   |   | ||||||
|  	auth_method = "gssapi-with-mic"; |  	auth_method = "gssapi-with-mic"; | ||||||
|   |   | ||||||
| @ -264,43 +264,43 @@ diff -up openssh-7.2p2/monitor.c.expose-pam openssh-7.2p2/monitor.c | |||||||
|  	/* Monitor loop will terminate if authenticated */ |  	/* Monitor loop will terminate if authenticated */ | ||||||
|  	return (authenticated); |  	return (authenticated); | ||||||
|  } |  } | ||||||
| diff -up openssh-7.2p2/servconf.c.expose-pam openssh-7.2p2/servconf.c
 | diff -up openssh-7.4p1/servconf.c.expose-pam openssh-7.4p1/servconf.c
 | ||||||
| --- openssh-7.2p2/servconf.c.expose-pam	2016-07-18 12:30:12.112783264 +0200
 | --- openssh-7.4p1/servconf.c.expose-pam	2016-12-23 15:40:26.810447875 +0100
 | ||||||
| +++ openssh-7.2p2/servconf.c	2016-07-18 12:34:38.170574004 +0200
 | +++ openssh-7.4p1/servconf.c	2016-12-23 15:44:04.691482920 +0100
 | ||||||
| @@ -176,6 +176,7 @@ initialize_server_options(ServerOptions
 | @@ -171,6 +171,7 @@ initialize_server_options(ServerOptions
 | ||||||
|  	options->fingerprint_hash = -1; |  	options->disable_forwarding = -1; | ||||||
|  	options->use_kuserok = -1; |  	options->use_kuserok = -1; | ||||||
|  	options->enable_k5users = -1; |  	options->enable_k5users = -1; | ||||||
| +	options->expose_auth_methods = -1;
 | +	options->expose_auth_methods = -1;
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  /* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */ |  /* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */ | ||||||
| @@ -374,6 +375,8 @@ fill_default_server_options(ServerOption
 | @@ -354,6 +355,8 @@ fill_default_server_options(ServerOption
 | ||||||
|  		options->enable_k5users = 0; |  | ||||||
|  	if (options->use_kuserok == -1) |  | ||||||
|  		options->use_kuserok = 1; |  		options->use_kuserok = 1; | ||||||
|  |  	if (options->enable_k5users == -1) | ||||||
|  |  		options->enable_k5users = 0; | ||||||
| +	if (options->expose_auth_methods == -1)
 | +	if (options->expose_auth_methods == -1)
 | ||||||
| +		options->expose_auth_methods = EXPOSE_AUTHMETH_NEVER;
 | +		options->expose_auth_methods = EXPOSE_AUTHMETH_NEVER;
 | ||||||
|   |   | ||||||
|  	assemble_algorithms(options); |  	assemble_algorithms(options); | ||||||
|   |   | ||||||
| @@ -451,6 +454,7 @@ typedef enum {
 | @@ -439,6 +442,7 @@ typedef enum {
 | ||||||
|  	sAuthenticationMethods, sHostKeyAgent, sPermitUserRC, |  	sAuthenticationMethods, sHostKeyAgent, sPermitUserRC, | ||||||
|  	sStreamLocalBindMask, sStreamLocalBindUnlink, |  	sStreamLocalBindMask, sStreamLocalBindUnlink, | ||||||
|  	sAllowStreamLocalForwarding, sFingerprintHash, |  	sAllowStreamLocalForwarding, sFingerprintHash, sDisableForwarding, | ||||||
| +	sExposeAuthenticationMethods,
 | +	sExposeAuthenticationMethods,
 | ||||||
|  	sDeprecated, sUnsupported |  	sDeprecated, sIgnore, sUnsupported | ||||||
|  } ServerOpCodes; |  } ServerOpCodes; | ||||||
|   |   | ||||||
| @@ -606,6 +610,7 @@ static struct {
 | @@ -595,6 +599,7 @@ static struct {
 | ||||||
|  	{ "streamlocalbindunlink", sStreamLocalBindUnlink, SSHCFG_ALL }, |  | ||||||
|  	{ "allowstreamlocalforwarding", sAllowStreamLocalForwarding, SSHCFG_ALL }, |  	{ "allowstreamlocalforwarding", sAllowStreamLocalForwarding, SSHCFG_ALL }, | ||||||
|  	{ "fingerprinthash", sFingerprintHash, SSHCFG_GLOBAL }, |  	{ "fingerprinthash", sFingerprintHash, SSHCFG_GLOBAL }, | ||||||
|  |  	{ "disableforwarding", sDisableForwarding, SSHCFG_ALL }, | ||||||
| +	{ "exposeauthenticationmethods", sExposeAuthenticationMethods, SSHCFG_ALL },
 | +	{ "exposeauthenticationmethods", sExposeAuthenticationMethods, SSHCFG_ALL },
 | ||||||
|  	{ NULL, sBadOption, 0 } |  	{ NULL, sBadOption, 0 } | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -994,6 +999,12 @@ static const struct multistate multistat
 | @@ -984,6 +989,12 @@ static const struct multistate multistat
 | ||||||
|  	{ "local",			FORWARD_LOCAL }, |  	{ "local",			FORWARD_LOCAL }, | ||||||
|  	{ NULL, -1 } |  	{ NULL, -1 } | ||||||
|  }; |  }; | ||||||
| @ -313,7 +313,7 @@ diff -up openssh-7.2p2/servconf.c.expose-pam openssh-7.2p2/servconf.c | |||||||
|   |   | ||||||
|  int |  int | ||||||
|  process_server_config_line(ServerOptions *options, char *line, |  process_server_config_line(ServerOptions *options, char *line, | ||||||
| @@ -1918,6 +1929,11 @@ process_server_config_line(ServerOptions
 | @@ -1902,6 +1913,11 @@ process_server_config_line(ServerOptions
 | ||||||
|  			options->fingerprint_hash = value; |  			options->fingerprint_hash = value; | ||||||
|  		break; |  		break; | ||||||
|   |   | ||||||
| @ -323,9 +323,9 @@ diff -up openssh-7.2p2/servconf.c.expose-pam openssh-7.2p2/servconf.c | |||||||
| +		goto parse_multistate;
 | +		goto parse_multistate;
 | ||||||
| +
 | +
 | ||||||
|  	case sDeprecated: |  	case sDeprecated: | ||||||
|  		logit("%s line %d: Deprecated option %s", |  	case sIgnore: | ||||||
|  		    filename, linenum, arg); |  	case sUnsupported: | ||||||
| @@ -2076,6 +2092,7 @@ copy_set_server_options(ServerOptions *d
 | @@ -2060,6 +2076,7 @@ copy_set_server_options(ServerOptions *d
 | ||||||
|  	M_CP_INTOPT(enable_k5users); |  	M_CP_INTOPT(enable_k5users); | ||||||
|  	M_CP_INTOPT(rekey_limit); |  	M_CP_INTOPT(rekey_limit); | ||||||
|  	M_CP_INTOPT(rekey_interval); |  	M_CP_INTOPT(rekey_interval); | ||||||
| @ -333,16 +333,16 @@ diff -up openssh-7.2p2/servconf.c.expose-pam openssh-7.2p2/servconf.c | |||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
|  	 * The bind_mask is a mode_t that may be unsigned, so we can't use |  	 * The bind_mask is a mode_t that may be unsigned, so we can't use | ||||||
| @@ -2181,6 +2198,8 @@ fmt_intarg(ServerOpCodes code, int val)
 | @@ -2176,6 +2193,8 @@ fmt_intarg(ServerOpCodes code, int val)
 | ||||||
|  		return fmt_multistate_int(val, multistate_tcpfwd); |  		return fmt_multistate_int(val, multistate_tcpfwd); | ||||||
|  	case sFingerprintHash: |  	case sFingerprintHash: | ||||||
|  		return ssh_digest_alg_name(val); |  		return ssh_digest_alg_name(val); | ||||||
| +	case sExposeAuthenticationMethods:
 | +	case sExposeAuthenticationMethods:
 | ||||||
| +		return fmt_multistate_int(val, multistate_exposeauthmeth);
 | +		return fmt_multistate_int(val, multistate_exposeauthmeth);
 | ||||||
|  	case sProtocol: |  	default: | ||||||
|  		switch (val) { |  		switch (val) { | ||||||
|  		case SSH_PROTO_1: |  		case 0: | ||||||
| @@ -2374,6 +2393,7 @@ dump_config(ServerOptions *o)
 | @@ -2356,6 +2375,7 @@ dump_config(ServerOptions *o)
 | ||||||
|  	dump_cfg_fmtint(sFingerprintHash, o->fingerprint_hash); |  	dump_cfg_fmtint(sFingerprintHash, o->fingerprint_hash); | ||||||
|  	dump_cfg_fmtint(sKerberosUseKuserok, o->use_kuserok); |  	dump_cfg_fmtint(sKerberosUseKuserok, o->use_kuserok); | ||||||
|  	dump_cfg_fmtint(sGssEnablek5users, o->enable_k5users); |  	dump_cfg_fmtint(sGssEnablek5users, o->enable_k5users); | ||||||
| @ -350,9 +350,9 @@ diff -up openssh-7.2p2/servconf.c.expose-pam openssh-7.2p2/servconf.c | |||||||
|   |   | ||||||
|  	/* string arguments */ |  	/* string arguments */ | ||||||
|  	dump_cfg_string(sPidFile, o->pid_file); |  	dump_cfg_string(sPidFile, o->pid_file); | ||||||
| diff -up openssh-7.2p2/servconf.h.expose-pam openssh-7.2p2/servconf.h
 | diff -up openssh-7.4p1/servconf.h.expose-pam openssh-7.4p1/servconf.h
 | ||||||
| --- openssh-7.2p2/servconf.h.expose-pam	2016-07-18 12:30:12.112783264 +0200
 | --- openssh-7.4p1/servconf.h.expose-pam	2016-12-23 15:40:26.810447875 +0100
 | ||||||
| +++ openssh-7.2p2/servconf.h	2016-07-18 12:30:12.125783254 +0200
 | +++ openssh-7.4p1/servconf.h	2016-12-23 15:40:26.821447876 +0100
 | ||||||
| @@ -48,6 +48,11 @@
 | @@ -48,6 +48,11 @@
 | ||||||
|  #define FORWARD_LOCAL		(1<<1) |  #define FORWARD_LOCAL		(1<<1) | ||||||
|  #define FORWARD_ALLOW		(FORWARD_REMOTE|FORWARD_LOCAL) |  #define FORWARD_ALLOW		(FORWARD_REMOTE|FORWARD_LOCAL) | ||||||
| @ -365,7 +365,7 @@ diff -up openssh-7.2p2/servconf.h.expose-pam openssh-7.2p2/servconf.h | |||||||
|  #define DEFAULT_AUTH_FAIL_MAX	6	/* Default for MaxAuthTries */ |  #define DEFAULT_AUTH_FAIL_MAX	6	/* Default for MaxAuthTries */ | ||||||
|  #define DEFAULT_SESSIONS_MAX	10	/* Default for MaxSessions */ |  #define DEFAULT_SESSIONS_MAX	10	/* Default for MaxSessions */ | ||||||
|   |   | ||||||
| @@ -201,6 +206,8 @@ typedef struct {
 | @@ -195,6 +200,8 @@ typedef struct {
 | ||||||
|  	char   *auth_methods[MAX_AUTH_METHODS]; |  	char   *auth_methods[MAX_AUTH_METHODS]; | ||||||
|   |   | ||||||
|  	int	fingerprint_hash; |  	int	fingerprint_hash; | ||||||
| @ -374,10 +374,10 @@ diff -up openssh-7.2p2/servconf.h.expose-pam openssh-7.2p2/servconf.h | |||||||
|  }       ServerOptions; |  }       ServerOptions; | ||||||
|   |   | ||||||
|  /* Information about the incoming connection as used by Match */ |  /* Information about the incoming connection as used by Match */ | ||||||
| diff -up openssh-7.2p2/session.c.expose-pam openssh-7.2p2/session.c
 | diff -up openssh-7.4p1/session.c.expose-pam openssh-7.4p1/session.c
 | ||||||
| --- openssh-7.2p2/session.c.expose-pam	2016-07-18 12:30:12.120783258 +0200
 | --- openssh-7.4p1/session.c.expose-pam	2016-12-23 15:40:26.794447872 +0100
 | ||||||
| +++ openssh-7.2p2/session.c	2016-07-18 12:30:12.125783254 +0200
 | +++ openssh-7.4p1/session.c	2016-12-23 15:40:26.821447876 +0100
 | ||||||
| @@ -1180,6 +1180,12 @@ copy_environment(char **source, char ***
 | @@ -997,6 +997,12 @@ copy_environment(char **source, char ***
 | ||||||
|  		} |  		} | ||||||
|  		*var_val++ = '\0'; |  		*var_val++ = '\0'; | ||||||
|   |   | ||||||
| @ -390,7 +390,7 @@ diff -up openssh-7.2p2/session.c.expose-pam openssh-7.2p2/session.c | |||||||
|  		debug3("Copy environment: %s=%s", var_name, var_val); |  		debug3("Copy environment: %s=%s", var_name, var_val); | ||||||
|  		child_set_env(env, envsize, var_name, var_val); |  		child_set_env(env, envsize, var_name, var_val); | ||||||
|   |   | ||||||
| @@ -1359,6 +1365,11 @@ do_setup_env(Session *s, const char *she
 | @@ -1173,6 +1179,11 @@ do_setup_env(Session *s, const char *she
 | ||||||
|  	} |  	} | ||||||
|  #endif /* USE_PAM */ |  #endif /* USE_PAM */ | ||||||
|   |   | ||||||
| @ -402,7 +402,7 @@ diff -up openssh-7.2p2/session.c.expose-pam openssh-7.2p2/session.c | |||||||
|  	if (auth_sock_name != NULL) |  	if (auth_sock_name != NULL) | ||||||
|  		child_set_env(&env, &envsize, SSH_AUTHSOCKET_ENV_NAME, |  		child_set_env(&env, &envsize, SSH_AUTHSOCKET_ENV_NAME, | ||||||
|  		    auth_sock_name); |  		    auth_sock_name); | ||||||
| @@ -2798,6 +2809,9 @@ do_cleanup(Authctxt *authctxt)
 | @@ -2561,6 +2572,9 @@ do_cleanup(Authctxt *authctxt)
 | ||||||
|  	if (authctxt == NULL) |  	if (authctxt == NULL) | ||||||
|  		return; |  		return; | ||||||
|   |   | ||||||
| @ -412,10 +412,10 @@ diff -up openssh-7.2p2/session.c.expose-pam openssh-7.2p2/session.c | |||||||
|  #ifdef USE_PAM |  #ifdef USE_PAM | ||||||
|  	if (options.use_pam) { |  	if (options.use_pam) { | ||||||
|  		sshpam_cleanup(); |  		sshpam_cleanup(); | ||||||
| diff -up openssh-7.2p2/ssh.1.expose-pam openssh-7.2p2/ssh.1
 | diff -up openssh-7.4p1/ssh.1.expose-pam openssh-7.4p1/ssh.1
 | ||||||
| --- openssh-7.2p2/ssh.1.expose-pam	2016-07-18 12:30:12.112783264 +0200
 | --- openssh-7.4p1/ssh.1.expose-pam	2016-12-23 15:40:26.810447875 +0100
 | ||||||
| +++ openssh-7.2p2/ssh.1	2016-07-18 12:30:12.126783253 +0200
 | +++ openssh-7.4p1/ssh.1	2016-12-23 15:40:26.822447877 +0100
 | ||||||
| @@ -1396,6 +1396,10 @@ server IP address, and server port numbe
 | @@ -1421,6 +1421,10 @@ server IP address, and server port numbe
 | ||||||
|  This variable contains the original command line if a forced command |  This variable contains the original command line if a forced command | ||||||
|  is executed. |  is executed. | ||||||
|  It can be used to extract the original arguments. |  It can be used to extract the original arguments. | ||||||
| @ -426,13 +426,13 @@ diff -up openssh-7.2p2/ssh.1.expose-pam openssh-7.2p2/ssh.1 | |||||||
|  .It Ev SSH_TTY |  .It Ev SSH_TTY | ||||||
|  This is set to the name of the tty (path to the device) associated |  This is set to the name of the tty (path to the device) associated | ||||||
|  with the current shell or command. |  with the current shell or command. | ||||||
| diff -up openssh-7.2p2/sshd_config.5.expose-pam openssh-7.2p2/sshd_config.5
 | diff -up openssh-7.4p1/sshd_config.5.expose-pam openssh-7.4p1/sshd_config.5
 | ||||||
| --- openssh-7.2p2/sshd_config.5.expose-pam	2016-07-18 12:30:12.113783263 +0200
 | --- openssh-7.4p1/sshd_config.5.expose-pam	2016-12-23 15:40:26.822447877 +0100
 | ||||||
| +++ openssh-7.2p2/sshd_config.5	2016-07-18 12:30:12.126783253 +0200
 | +++ openssh-7.4p1/sshd_config.5	2016-12-23 15:45:22.411495421 +0100
 | ||||||
| @@ -570,6 +570,21 @@ and finally
 | @@ -570,6 +570,21 @@ Disables all forwarding features, includ
 | ||||||
|  See PATTERNS in |  TCP and StreamLocal. | ||||||
|  .Xr ssh_config 5 |  This option overrides all other forwarding-related options and may | ||||||
|  for more information on patterns. |  simplify restricted configurations. | ||||||
| +.It Cm ExposeAuthenticationMethods
 | +.It Cm ExposeAuthenticationMethods
 | ||||||
| +When using SSH2, this option controls the exposure of the list of
 | +When using SSH2, this option controls the exposure of the list of
 | ||||||
| +successful authentication methods to PAM during the authentication
 | +successful authentication methods to PAM during the authentication
 | ||||||
| @ -440,20 +440,20 @@ diff -up openssh-7.2p2/sshd_config.5.expose-pam openssh-7.2p2/sshd_config.5 | |||||||
| +.Cm SSH_USER_AUTH
 | +.Cm SSH_USER_AUTH
 | ||||||
| +variable. See the description of this variable for more details.
 | +variable. See the description of this variable for more details.
 | ||||||
| +Valid options are:
 | +Valid options are:
 | ||||||
| +.Dq never
 | +.Cm never
 | ||||||
| +(Do not expose successful authentication methods),
 | +(Do not expose successful authentication methods),
 | ||||||
| +.Dq pam-only
 | +.Cm pam-only
 | ||||||
| +(Only expose them to PAM during authentication, not afterwards),
 | +(Only expose them to PAM during authentication, not afterwards),
 | ||||||
| +.Dq pam-and-env
 | +.Cm pam-and-env
 | ||||||
| +(Expose them to PAM and keep them in the shell environment).
 | +(Expose them to PAM and keep them in the shell environment).
 | ||||||
| +The default is
 | +The default is
 | ||||||
| +.Dq never .
 | +.Cm never .
 | ||||||
|  .It Cm FingerprintHash |  .It Cm FingerprintHash | ||||||
|  Specifies the hash algorithm used when logging key fingerprints. |  Specifies the hash algorithm used when logging key fingerprints. | ||||||
|  Valid options are: |  Valid options are: | ||||||
| diff -up openssh-7.2p2/ssh-gss.h.expose-pam openssh-7.2p2/ssh-gss.h
 | diff -up openssh-7.4p1/ssh-gss.h.expose-pam openssh-7.4p1/ssh-gss.h
 | ||||||
| --- openssh-7.2p2/ssh-gss.h.expose-pam	2016-07-18 12:30:12.125783254 +0200
 | --- openssh-7.4p1/ssh-gss.h.expose-pam	2016-12-23 15:40:26.811447875 +0100
 | ||||||
| +++ openssh-7.2p2/ssh-gss.h	2016-07-18 12:35:01.906555328 +0200
 | +++ openssh-7.4p1/ssh-gss.h	2016-12-23 15:40:26.823447877 +0100
 | ||||||
| @@ -159,6 +159,7 @@ int ssh_gssapi_server_check_mech(Gssctxt
 | @@ -159,6 +159,7 @@ int ssh_gssapi_server_check_mech(Gssctxt
 | ||||||
|      const char *); |      const char *); | ||||||
|  OM_uint32 ssh_gssapi_server_ctx(Gssctxt **, gss_OID); |  OM_uint32 ssh_gssapi_server_ctx(Gssctxt **, gss_OID); | ||||||
| @ -462,10 +462,10 @@ diff -up openssh-7.2p2/ssh-gss.h.expose-pam openssh-7.2p2/ssh-gss.h | |||||||
|  OM_uint32 ssh_gssapi_checkmic(Gssctxt *, gss_buffer_t, gss_buffer_t); |  OM_uint32 ssh_gssapi_checkmic(Gssctxt *, gss_buffer_t, gss_buffer_t); | ||||||
|  void ssh_gssapi_do_child(char ***, u_int *); |  void ssh_gssapi_do_child(char ***, u_int *); | ||||||
|  void ssh_gssapi_cleanup_creds(void); |  void ssh_gssapi_cleanup_creds(void); | ||||||
| diff -up openssh-7.2p2/sshkey.c.expose-pam openssh-7.2p2/sshkey.c
 | diff -up openssh-7.4p1/sshkey.c.expose-pam openssh-7.4p1/sshkey.c
 | ||||||
| --- openssh-7.2p2/sshkey.c.expose-pam	2016-07-18 12:30:12.071783296 +0200
 | --- openssh-7.4p1/sshkey.c.expose-pam	2016-12-23 15:40:26.777447869 +0100
 | ||||||
| +++ openssh-7.2p2/sshkey.c	2016-07-18 12:30:12.126783253 +0200
 | +++ openssh-7.4p1/sshkey.c	2016-12-23 15:40:26.823447877 +0100
 | ||||||
| @@ -58,6 +58,7 @@
 | @@ -57,6 +57,7 @@
 | ||||||
|  #define SSHKEY_INTERNAL |  #define SSHKEY_INTERNAL | ||||||
|  #include "sshkey.h" |  #include "sshkey.h" | ||||||
|  #include "match.h" |  #include "match.h" | ||||||
| @ -473,7 +473,7 @@ diff -up openssh-7.2p2/sshkey.c.expose-pam openssh-7.2p2/sshkey.c | |||||||
|   |   | ||||||
|  /* openssh private key file format */ |  /* openssh private key file format */ | ||||||
|  #define MARK_BEGIN		"-----BEGIN OPENSSH PRIVATE KEY-----\n" |  #define MARK_BEGIN		"-----BEGIN OPENSSH PRIVATE KEY-----\n" | ||||||
| @@ -1190,6 +1191,30 @@ sshkey_fingerprint(const struct sshkey *
 | @@ -1191,6 +1192,30 @@ sshkey_fingerprint(const struct sshkey *
 | ||||||
|  	return retval; |  	return retval; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -504,9 +504,9 @@ diff -up openssh-7.2p2/sshkey.c.expose-pam openssh-7.2p2/sshkey.c | |||||||
|  #ifdef WITH_SSH1 |  #ifdef WITH_SSH1 | ||||||
|  /* |  /* | ||||||
|   * Reads a multiple-precision integer in decimal from the buffer, and advances |   * Reads a multiple-precision integer in decimal from the buffer, and advances | ||||||
| diff -up openssh-7.2p2/sshkey.h.expose-pam openssh-7.2p2/sshkey.h
 | diff -up openssh-7.4p1/sshkey.h.expose-pam openssh-7.4p1/sshkey.h
 | ||||||
| --- openssh-7.2p2/sshkey.h.expose-pam	2016-07-18 12:30:12.071783296 +0200
 | --- openssh-7.4p1/sshkey.h.expose-pam	2016-12-23 15:40:26.777447869 +0100
 | ||||||
| +++ openssh-7.2p2/sshkey.h	2016-07-18 12:30:12.127783252 +0200
 | +++ openssh-7.4p1/sshkey.h	2016-12-23 15:40:26.823447877 +0100
 | ||||||
| @@ -124,6 +124,7 @@ char		*sshkey_fingerprint(const struct s
 | @@ -124,6 +124,7 @@ char		*sshkey_fingerprint(const struct s
 | ||||||
|      int, enum sshkey_fp_rep); |      int, enum sshkey_fp_rep); | ||||||
|  int		 sshkey_fingerprint_raw(const struct sshkey *k, |  int		 sshkey_fingerprint_raw(const struct sshkey *k, | ||||||
|  | |||||||
| @ -1,48 +0,0 @@ | |||||||
| From 28652bca29046f62c7045e933e6b931de1d16737 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: "markus@openbsd.org" <markus@openbsd.org> |  | ||||||
| Date: Mon, 19 Sep 2016 19:02:19 +0000 |  | ||||||
| Subject: upstream commit |  | ||||||
| 
 |  | ||||||
| move inbound NEWKEYS handling to kex layer; otherwise |  | ||||||
| early NEWKEYS causes NULL deref; found by Robert Swiecki/honggfuzz; fixed |  | ||||||
| with & ok djm@ |  | ||||||
| 
 |  | ||||||
| Upstream-ID: 9a68b882892e9f51dc7bfa9f5a423858af358b2f |  | ||||||
| ---
 |  | ||||||
|  kex.c    | 4 +++- |  | ||||||
|  packet.c | 6 ++---- |  | ||||||
|  2 files changed, 5 insertions(+), 5 deletions(-) |  | ||||||
| 
 |  | ||||||
| diff --git a/kex.c b/kex.c
 |  | ||||||
| index f4c130f..8800d40 100644
 |  | ||||||
| --- a/kex.c
 |  | ||||||
| +++ b/kex.c
 |  | ||||||
| @@ -425,6 +425,8 @@ kex_input_newkeys(int type, u_int32_t seq, void *ctxt)
 |  | ||||||
|  	ssh_dispatch_set(ssh, SSH2_MSG_NEWKEYS, &kex_protocol_error); |  | ||||||
|  	if ((r = sshpkt_get_end(ssh)) != 0) |  | ||||||
|  		return r; |  | ||||||
| +	if ((r = ssh_set_newkeys(ssh, MODE_IN)) != 0)
 |  | ||||||
| +		return r;
 |  | ||||||
|  	kex->done = 1; |  | ||||||
|  	sshbuf_reset(kex->peer); |  | ||||||
|  	/* sshbuf_reset(kex->my); */ |  | ||||||
| diff --git a/packet.c b/packet.c
 |  | ||||||
| index 711091d..fb316ac 100644
 |  | ||||||
| --- a/packet.c
 |  | ||||||
| +++ b/packet.c
 |  | ||||||
| @@ -1907,9 +1907,7 @@ ssh_packet_read_poll2(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p)
 |  | ||||||
|  			return r; |  | ||||||
|  		return SSH_ERR_PROTOCOL_ERROR; |  | ||||||
|  	} |  | ||||||
| -	if (*typep == SSH2_MSG_NEWKEYS)
 |  | ||||||
| -		r = ssh_set_newkeys(ssh, MODE_IN);
 |  | ||||||
| -	else if (*typep == SSH2_MSG_USERAUTH_SUCCESS && !state->server_side)
 |  | ||||||
| +	if (*typep == SSH2_MSG_USERAUTH_SUCCESS && !state->server_side)
 |  | ||||||
|  		r = ssh_packet_enable_delayed_compress(ssh); |  | ||||||
|  	else |  | ||||||
|  		r = 0; |  | ||||||
| -- 
 |  | ||||||
| cgit v0.12 |  | ||||||
| 
 |  | ||||||
| 0 |  | ||||||
| 
 |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,7 +1,7 @@ | |||||||
| diff -up openssh-6.6p1/channels.c.x11max openssh-6.6p1/channels.c
 | diff -up openssh-7.4p1/channels.c.x11max openssh-7.4p1/channels.c
 | ||||||
| --- openssh-6.6p1/channels.c.x11max	2016-06-27 16:28:49.803631684 +0200
 | --- openssh-7.4p1/channels.c.x11max	2016-12-23 15:46:32.071506625 +0100
 | ||||||
| +++ openssh-6.6p1/channels.c	2016-06-27 16:28:49.814631678 +0200
 | +++ openssh-7.4p1/channels.c	2016-12-23 15:46:32.139506636 +0100
 | ||||||
| @@ -138,8 +138,8 @@ static int all_opens_permitted = 0;
 | @@ -152,8 +152,8 @@ static int all_opens_permitted = 0;
 | ||||||
|   |   | ||||||
|  /* -- X11 forwarding */ |  /* -- X11 forwarding */ | ||||||
|   |   | ||||||
| @ -12,7 +12,7 @@ diff -up openssh-6.6p1/channels.c.x11max openssh-6.6p1/channels.c | |||||||
|   |   | ||||||
|  /* Saved X11 local (client) display. */ |  /* Saved X11 local (client) display. */ | ||||||
|  static char *x11_saved_display = NULL; |  static char *x11_saved_display = NULL; | ||||||
| @@ -3445,7 +3445,8 @@ channel_send_window_changes(void)
 | @@ -4228,7 +4228,8 @@ channel_send_window_changes(void)
 | ||||||
|   */ |   */ | ||||||
|  int |  int | ||||||
|  x11_create_display_inet(int x11_display_offset, int x11_use_localhost, |  x11_create_display_inet(int x11_display_offset, int x11_use_localhost, | ||||||
| @ -22,7 +22,7 @@ diff -up openssh-6.6p1/channels.c.x11max openssh-6.6p1/channels.c | |||||||
|  { |  { | ||||||
|  	Channel *nc = NULL; |  	Channel *nc = NULL; | ||||||
|  	int display_number, sock; |  	int display_number, sock; | ||||||
| @@ -3457,10 +3458,15 @@ x11_create_display_inet(int x11_display_
 | @@ -4240,10 +4241,15 @@ x11_create_display_inet(int x11_display_
 | ||||||
|  	if (chanids == NULL) |  	if (chanids == NULL) | ||||||
|  		return -1; |  		return -1; | ||||||
|   |   | ||||||
| @ -40,7 +40,7 @@ diff -up openssh-6.6p1/channels.c.x11max openssh-6.6p1/channels.c | |||||||
|  		memset(&hints, 0, sizeof(hints)); |  		memset(&hints, 0, sizeof(hints)); | ||||||
|  		hints.ai_family = IPv4or6; |  		hints.ai_family = IPv4or6; | ||||||
|  		hints.ai_flags = x11_use_localhost ? 0: AI_PASSIVE; |  		hints.ai_flags = x11_use_localhost ? 0: AI_PASSIVE; | ||||||
| @@ -3512,7 +3518,7 @@ x11_create_display_inet(int x11_display_
 | @@ -4295,7 +4301,7 @@ x11_create_display_inet(int x11_display_
 | ||||||
|  		if (num_socks > 0) |  		if (num_socks > 0) | ||||||
|  			break; |  			break; | ||||||
|  	} |  	} | ||||||
| @ -49,7 +49,7 @@ diff -up openssh-6.6p1/channels.c.x11max openssh-6.6p1/channels.c | |||||||
|  		error("Failed to allocate internet-domain X11 display socket."); |  		error("Failed to allocate internet-domain X11 display socket."); | ||||||
|  		return -1; |  		return -1; | ||||||
|  	} |  	} | ||||||
| @@ -3658,7 +3664,7 @@ x11_connect_display(void)
 | @@ -4441,7 +4447,7 @@ x11_connect_display(void)
 | ||||||
|  	memset(&hints, 0, sizeof(hints)); |  	memset(&hints, 0, sizeof(hints)); | ||||||
|  	hints.ai_family = IPv4or6; |  	hints.ai_family = IPv4or6; | ||||||
|  	hints.ai_socktype = SOCK_STREAM; |  	hints.ai_socktype = SOCK_STREAM; | ||||||
| @ -58,7 +58,7 @@ diff -up openssh-6.6p1/channels.c.x11max openssh-6.6p1/channels.c | |||||||
|  	if ((gaierr = getaddrinfo(buf, strport, &hints, &aitop)) != 0) { |  	if ((gaierr = getaddrinfo(buf, strport, &hints, &aitop)) != 0) { | ||||||
|  		error("%.100s: unknown host. (%s)", buf, |  		error("%.100s: unknown host. (%s)", buf, | ||||||
|  		ssh_gai_strerror(gaierr)); |  		ssh_gai_strerror(gaierr)); | ||||||
| @@ -3674,7 +3680,7 @@ x11_connect_display(void)
 | @@ -4457,7 +4463,7 @@ x11_connect_display(void)
 | ||||||
|  		/* Connect it to the display. */ |  		/* Connect it to the display. */ | ||||||
|  		if (connect(sock, ai->ai_addr, ai->ai_addrlen) < 0) { |  		if (connect(sock, ai->ai_addr, ai->ai_addrlen) < 0) { | ||||||
|  			debug2("connect %.100s port %u: %.100s", buf, |  			debug2("connect %.100s port %u: %.100s", buf, | ||||||
| @ -67,7 +67,7 @@ diff -up openssh-6.6p1/channels.c.x11max openssh-6.6p1/channels.c | |||||||
|  			close(sock); |  			close(sock); | ||||||
|  			continue; |  			continue; | ||||||
|  		} |  		} | ||||||
| @@ -3683,8 +3689,8 @@ x11_connect_display(void)
 | @@ -4466,8 +4472,8 @@ x11_connect_display(void)
 | ||||||
|  	} |  	} | ||||||
|  	freeaddrinfo(aitop); |  	freeaddrinfo(aitop); | ||||||
|  	if (!ai) { |  	if (!ai) { | ||||||
| @ -78,10 +78,10 @@ diff -up openssh-6.6p1/channels.c.x11max openssh-6.6p1/channels.c | |||||||
|  		return -1; |  		return -1; | ||||||
|  	} |  	} | ||||||
|  	set_nodelay(sock); |  	set_nodelay(sock); | ||||||
| diff -up openssh-6.6p1/channels.h.x11max openssh-6.6p1/channels.h
 | diff -up openssh-7.4p1/channels.h.x11max openssh-7.4p1/channels.h
 | ||||||
| --- openssh-6.6p1/channels.h.x11max	2016-06-27 16:28:49.814631678 +0200
 | --- openssh-7.4p1/channels.h.x11max	2016-12-19 05:59:41.000000000 +0100
 | ||||||
| +++ openssh-6.6p1/channels.h	2016-06-27 16:31:18.925557840 +0200
 | +++ openssh-7.4p1/channels.h	2016-12-23 15:46:32.139506636 +0100
 | ||||||
| @@ -281,7 +281,7 @@ int	 permitopen_port(const char *);
 | @@ -293,7 +293,7 @@ int	 permitopen_port(const char *);
 | ||||||
|   |   | ||||||
|  void	 channel_set_x11_refuse_time(u_int); |  void	 channel_set_x11_refuse_time(u_int); | ||||||
|  int	 x11_connect_display(void); |  int	 x11_connect_display(void); | ||||||
| @ -90,10 +90,10 @@ diff -up openssh-6.6p1/channels.h.x11max openssh-6.6p1/channels.h | |||||||
|  int      x11_input_open(int, u_int32_t, void *); |  int      x11_input_open(int, u_int32_t, void *); | ||||||
|  void	 x11_request_forwarding_with_spoofing(int, const char *, const char *, |  void	 x11_request_forwarding_with_spoofing(int, const char *, const char *, | ||||||
|  	     const char *, int); |  	     const char *, int); | ||||||
| diff -up openssh-6.6p1/servconf.c.x11max openssh-6.6p1/servconf.c
 | diff -up openssh-7.4p1/servconf.c.x11max openssh-7.4p1/servconf.c
 | ||||||
| --- openssh-6.6p1/servconf.c.x11max	2016-06-27 16:28:49.808631681 +0200
 | --- openssh-7.4p1/servconf.c.x11max	2016-12-23 15:46:32.133506635 +0100
 | ||||||
| +++ openssh-6.6p1/servconf.c	2016-06-27 16:30:46.941573678 +0200
 | +++ openssh-7.4p1/servconf.c	2016-12-23 15:47:27.320519121 +0100
 | ||||||
| @@ -92,6 +92,7 @@ initialize_server_options(ServerOptions
 | @@ -95,6 +95,7 @@ initialize_server_options(ServerOptions
 | ||||||
|  	options->print_lastlog = -1; |  	options->print_lastlog = -1; | ||||||
|  	options->x11_forwarding = -1; |  	options->x11_forwarding = -1; | ||||||
|  	options->x11_display_offset = -1; |  	options->x11_display_offset = -1; | ||||||
| @ -101,7 +101,7 @@ diff -up openssh-6.6p1/servconf.c.x11max openssh-6.6p1/servconf.c | |||||||
|  	options->x11_use_localhost = -1; |  	options->x11_use_localhost = -1; | ||||||
|  	options->permit_tty = -1; |  	options->permit_tty = -1; | ||||||
|  	options->permit_user_rc = -1; |  	options->permit_user_rc = -1; | ||||||
| @@ -219,6 +220,8 @@ fill_default_server_options(ServerOption
 | @@ -243,6 +244,8 @@ fill_default_server_options(ServerOption
 | ||||||
|  		options->x11_forwarding = 0; |  		options->x11_forwarding = 0; | ||||||
|  	if (options->x11_display_offset == -1) |  	if (options->x11_display_offset == -1) | ||||||
|  		options->x11_display_offset = 10; |  		options->x11_display_offset = 10; | ||||||
| @ -110,16 +110,16 @@ diff -up openssh-6.6p1/servconf.c.x11max openssh-6.6p1/servconf.c | |||||||
|  	if (options->x11_use_localhost == -1) |  	if (options->x11_use_localhost == -1) | ||||||
|  		options->x11_use_localhost = 1; |  		options->x11_use_localhost = 1; | ||||||
|  	if (options->xauth_location == NULL) |  	if (options->xauth_location == NULL) | ||||||
| @@ -364,7 +367,7 @@ typedef enum {
 | @@ -419,7 +422,7 @@ typedef enum {
 | ||||||
|  	sPasswordAuthentication, sKbdInteractiveAuthentication, |  	sPasswordAuthentication, sKbdInteractiveAuthentication, | ||||||
|  	sListenAddress, sAddressFamily, |  	sListenAddress, sAddressFamily, | ||||||
|  	sPrintMotd, sPrintLastLog, sIgnoreRhosts, |  	sPrintMotd, sPrintLastLog, sIgnoreRhosts, | ||||||
| -	sX11Forwarding, sX11DisplayOffset, sX11UseLocalhost,
 | -	sX11Forwarding, sX11DisplayOffset, sX11UseLocalhost,
 | ||||||
| +	sX11Forwarding, sX11DisplayOffset, sX11MaxDisplays, sX11UseLocalhost,
 | +	sX11Forwarding, sX11DisplayOffset, sX11MaxDisplays, sX11UseLocalhost,
 | ||||||
|  	sPermitTTY, sStrictModes, sEmptyPasswd, sTCPKeepAlive, |  	sPermitTTY, sStrictModes, sEmptyPasswd, sTCPKeepAlive, | ||||||
|  	sPermitUserEnvironment, sUseLogin, sAllowTcpForwarding, sCompression, |  	sPermitUserEnvironment, sAllowTcpForwarding, sCompression, | ||||||
|  	sRekeyLimit, sAllowUsers, sDenyUsers, sAllowGroups, sDenyGroups, |  	sRekeyLimit, sAllowUsers, sDenyUsers, sAllowGroups, sDenyGroups, | ||||||
| @@ -476,6 +479,7 @@ static struct {
 | @@ -540,6 +543,7 @@ static struct {
 | ||||||
|  	{ "ignoreuserknownhosts", sIgnoreUserKnownHosts, SSHCFG_GLOBAL }, |  	{ "ignoreuserknownhosts", sIgnoreUserKnownHosts, SSHCFG_GLOBAL }, | ||||||
|  	{ "x11forwarding", sX11Forwarding, SSHCFG_ALL }, |  	{ "x11forwarding", sX11Forwarding, SSHCFG_ALL }, | ||||||
|  	{ "x11displayoffset", sX11DisplayOffset, SSHCFG_ALL }, |  	{ "x11displayoffset", sX11DisplayOffset, SSHCFG_ALL }, | ||||||
| @ -127,9 +127,9 @@ diff -up openssh-6.6p1/servconf.c.x11max openssh-6.6p1/servconf.c | |||||||
|  	{ "x11uselocalhost", sX11UseLocalhost, SSHCFG_ALL }, |  	{ "x11uselocalhost", sX11UseLocalhost, SSHCFG_ALL }, | ||||||
|  	{ "xauthlocation", sXAuthLocation, SSHCFG_GLOBAL }, |  	{ "xauthlocation", sXAuthLocation, SSHCFG_GLOBAL }, | ||||||
|  	{ "strictmodes", sStrictModes, SSHCFG_GLOBAL }, |  	{ "strictmodes", sStrictModes, SSHCFG_GLOBAL }, | ||||||
| @@ -1202,6 +1206,10 @@ process_server_config_line(ServerOptions
 | @@ -1316,6 +1320,10 @@ process_server_config_line(ServerOptions
 | ||||||
|  		intptr = &options->x11_display_offset; |  			*intptr = value; | ||||||
|  		goto parse_int; |  		break; | ||||||
|   |   | ||||||
| +	case sX11MaxDisplays:
 | +	case sX11MaxDisplays:
 | ||||||
| +		intptr = &options->x11_max_displays;
 | +		intptr = &options->x11_max_displays;
 | ||||||
| @ -138,7 +138,7 @@ diff -up openssh-6.6p1/servconf.c.x11max openssh-6.6p1/servconf.c | |||||||
|  	case sX11UseLocalhost: |  	case sX11UseLocalhost: | ||||||
|  		intptr = &options->x11_use_localhost; |  		intptr = &options->x11_use_localhost; | ||||||
|  		goto parse_flag; |  		goto parse_flag; | ||||||
| @@ -1889,6 +1897,7 @@ copy_set_server_options(ServerOptions *d
 | @@ -2063,6 +2071,7 @@ copy_set_server_options(ServerOptions *d
 | ||||||
|  	M_CP_INTOPT(fwd_opts.streamlocal_bind_unlink); |  	M_CP_INTOPT(fwd_opts.streamlocal_bind_unlink); | ||||||
|  	M_CP_INTOPT(x11_display_offset); |  	M_CP_INTOPT(x11_display_offset); | ||||||
|  	M_CP_INTOPT(x11_forwarding); |  	M_CP_INTOPT(x11_forwarding); | ||||||
| @ -146,17 +146,17 @@ diff -up openssh-6.6p1/servconf.c.x11max openssh-6.6p1/servconf.c | |||||||
|  	M_CP_INTOPT(x11_use_localhost); |  	M_CP_INTOPT(x11_use_localhost); | ||||||
|  	M_CP_INTOPT(permit_tty); |  	M_CP_INTOPT(permit_tty); | ||||||
|  	M_CP_INTOPT(permit_user_rc); |  	M_CP_INTOPT(permit_user_rc); | ||||||
| @@ -2106,6 +2115,7 @@ dump_config(ServerOptions *o)
 | @@ -2315,6 +2324,7 @@ dump_config(ServerOptions *o)
 | ||||||
|  |  #endif | ||||||
|  	dump_cfg_int(sLoginGraceTime, o->login_grace_time); |  	dump_cfg_int(sLoginGraceTime, o->login_grace_time); | ||||||
|  	dump_cfg_int(sKeyRegenerationTime, o->key_regeneration_time); |  | ||||||
|  	dump_cfg_int(sX11DisplayOffset, o->x11_display_offset); |  	dump_cfg_int(sX11DisplayOffset, o->x11_display_offset); | ||||||
| +	dump_cfg_int(sX11MaxDisplays, o->x11_max_displays);
 | +	dump_cfg_int(sX11MaxDisplays, o->x11_max_displays);
 | ||||||
|  	dump_cfg_int(sMaxAuthTries, o->max_authtries); |  	dump_cfg_int(sMaxAuthTries, o->max_authtries); | ||||||
|  	dump_cfg_int(sMaxSessions, o->max_sessions); |  	dump_cfg_int(sMaxSessions, o->max_sessions); | ||||||
|  	dump_cfg_int(sClientAliveInterval, o->client_alive_interval); |  	dump_cfg_int(sClientAliveInterval, o->client_alive_interval); | ||||||
| diff -up openssh-6.6p1/servconf.h.x11max openssh-6.6p1/servconf.h
 | diff -up openssh-7.4p1/servconf.h.x11max openssh-7.4p1/servconf.h
 | ||||||
| --- openssh-6.6p1/servconf.h.x11max	2016-06-27 16:28:49.809631681 +0200
 | --- openssh-7.4p1/servconf.h.x11max	2016-12-23 15:46:32.133506635 +0100
 | ||||||
| +++ openssh-6.6p1/servconf.h	2016-06-27 16:28:49.815631678 +0200
 | +++ openssh-7.4p1/servconf.h	2016-12-23 15:46:32.140506636 +0100
 | ||||||
| @@ -55,6 +55,7 @@
 | @@ -55,6 +55,7 @@
 | ||||||
|   |   | ||||||
|  #define DEFAULT_AUTH_FAIL_MAX	6	/* Default for MaxAuthTries */ |  #define DEFAULT_AUTH_FAIL_MAX	6	/* Default for MaxAuthTries */ | ||||||
| @ -173,10 +173,10 @@ diff -up openssh-6.6p1/servconf.h.x11max openssh-6.6p1/servconf.h | |||||||
|  	int     x11_use_localhost;	/* If true, use localhost for fake X11 server. */ |  	int     x11_use_localhost;	/* If true, use localhost for fake X11 server. */ | ||||||
|  	char   *xauth_location;	/* Location of xauth program */ |  	char   *xauth_location;	/* Location of xauth program */ | ||||||
|  	int	permit_tty;	/* If false, deny pty allocation */ |  	int	permit_tty;	/* If false, deny pty allocation */ | ||||||
| diff -up openssh-6.6p1/session.c.x11max openssh-6.6p1/session.c
 | diff -up openssh-7.4p1/session.c.x11max openssh-7.4p1/session.c
 | ||||||
| --- openssh-6.6p1/session.c.x11max	2016-06-27 16:28:49.809631681 +0200
 | --- openssh-7.4p1/session.c.x11max	2016-12-23 15:46:32.136506636 +0100
 | ||||||
| +++ openssh-6.6p1/session.c	2016-06-27 16:28:49.815631678 +0200
 | +++ openssh-7.4p1/session.c	2016-12-23 15:46:32.141506636 +0100
 | ||||||
| @@ -2741,8 +2741,9 @@ session_setup_x11fwd(Session *s)
 | @@ -2518,8 +2518,9 @@ session_setup_x11fwd(Session *s)
 | ||||||
|  		return 0; |  		return 0; | ||||||
|  	} |  	} | ||||||
|  	if (x11_create_display_inet(options.x11_display_offset, |  	if (x11_create_display_inet(options.x11_display_offset, | ||||||
| @ -188,10 +188,10 @@ diff -up openssh-6.6p1/session.c.x11max openssh-6.6p1/session.c | |||||||
|  		debug("x11_create_display_inet failed."); |  		debug("x11_create_display_inet failed."); | ||||||
|  		return 0; |  		return 0; | ||||||
|  	} |  	} | ||||||
| diff -up openssh-6.6p1/sshd_config.5.x11max openssh-6.6p1/sshd_config.5
 | diff -up openssh-7.4p1/sshd_config.5.x11max openssh-7.4p1/sshd_config.5
 | ||||||
| --- openssh-6.6p1/sshd_config.5.x11max	2016-06-27 16:28:49.809631681 +0200
 | --- openssh-7.4p1/sshd_config.5.x11max	2016-12-23 15:46:32.134506635 +0100
 | ||||||
| +++ openssh-6.6p1/sshd_config.5	2016-06-27 16:32:01.253536879 +0200
 | +++ openssh-7.4p1/sshd_config.5	2016-12-23 15:46:32.141506636 +0100
 | ||||||
| @@ -930,6 +930,7 @@ Available keywords are
 | @@ -1133,6 +1133,7 @@ Available keywords are
 | ||||||
|  .Cm StreamLocalBindUnlink , |  .Cm StreamLocalBindUnlink , | ||||||
|  .Cm TrustedUserCAKeys , |  .Cm TrustedUserCAKeys , | ||||||
|  .Cm X11DisplayOffset , |  .Cm X11DisplayOffset , | ||||||
| @ -199,7 +199,7 @@ diff -up openssh-6.6p1/sshd_config.5.x11max openssh-6.6p1/sshd_config.5 | |||||||
|  .Cm X11Forwarding |  .Cm X11Forwarding | ||||||
|  and |  and | ||||||
|  .Cm X11UseLocalHost . |  .Cm X11UseLocalHost . | ||||||
| @@ -1339,6 +1340,12 @@ Specifies the first display number avail
 | @@ -1566,6 +1567,12 @@ Specifies the first display number avail
 | ||||||
|  X11 forwarding. |  X11 forwarding. | ||||||
|  This prevents sshd from interfering with real X11 servers. |  This prevents sshd from interfering with real X11 servers. | ||||||
|  The default is 10. |  The default is 10. | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								openssh-7.4p1-daemon.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								openssh-7.4p1-daemon.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | diff -up openssh-7.4p1/sshd.c.daemon openssh-7.4p1/sshd.c
 | ||||||
|  | --- openssh-7.4p1/sshd.c.daemon	2017-01-02 15:32:56.618447579 +0100
 | ||||||
|  | +++ openssh-7.4p1/sshd.c	2017-01-02 15:33:07.606442751 +0100
 | ||||||
|  | @@ -1943,7 +1943,7 @@ main(int ac, char **av)
 | ||||||
|  |  	 * terminal, and fork.  The original process exits. | ||||||
|  |  	 */ | ||||||
|  |  	already_daemon = daemonized(); | ||||||
|  | -	if (!(debug_flag || inetd_flag || no_daemon_flag || already_daemon)) {
 | ||||||
|  | +	if (!(debug_flag || inetd_flag || no_daemon_flag /*|| already_daemon*/)) {
 | ||||||
|  |   | ||||||
|  |  		if (daemon(0, 0) < 0) | ||||||
|  |  			fatal("daemon() failed: %.200s", strerror(errno)); | ||||||
							
								
								
									
										12
									
								
								openssh.spec
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								openssh.spec
									
									
									
									
									
								
							| @ -65,10 +65,10 @@ | |||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
| # Do not forget to bump pam_ssh_agent_auth release if you rewind the main package release to 1 | # Do not forget to bump pam_ssh_agent_auth release if you rewind the main package release to 1 | ||||||
| %global openssh_ver 7.3p1 | %global openssh_ver 7.4p1 | ||||||
| %global openssh_rel 7 | %global openssh_rel 1 | ||||||
| %global pam_ssh_agent_ver 0.10.2 | %global pam_ssh_agent_ver 0.10.2 | ||||||
| %global pam_ssh_agent_rel 4 | %global pam_ssh_agent_rel 5 | ||||||
| 
 | 
 | ||||||
| Summary: An open source implementation of SSH protocol versions 1 and 2 | Summary: An open source implementation of SSH protocol versions 1 and 2 | ||||||
| Name: openssh | Name: openssh | ||||||
| @ -223,10 +223,10 @@ Patch939: openssh-7.2p2-s390-closefrom.patch | |||||||
| Patch940: openssh-7.2p2-expose-pam.patch | Patch940: openssh-7.2p2-expose-pam.patch | ||||||
| # Rework SELinux context handling with chroot (#1357860) | # Rework SELinux context handling with chroot (#1357860) | ||||||
| Patch942: openssh-7.2p2-chroot-capabilities.patch | Patch942: openssh-7.2p2-chroot-capabilities.patch | ||||||
| # Null dereference in newkeys code (#1380297) |  | ||||||
| Patch943: openssh-7.3p1-null-deref.patch |  | ||||||
| # Move MAX_DISPLAYS to a configuration option (#1341302) | # Move MAX_DISPLAYS to a configuration option (#1341302) | ||||||
| Patch944: openssh-7.3p1-x11-max-displays.patch | Patch944: openssh-7.3p1-x11-max-displays.patch | ||||||
|  | # Temporary workaround for upstream (#2641) | ||||||
|  | Patch945: openssh-7.4p1-daemon.patch | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| License: BSD | License: BSD | ||||||
| @ -459,8 +459,8 @@ popd | |||||||
| %patch939 -p1 -b .s390-dev | %patch939 -p1 -b .s390-dev | ||||||
| %patch940 -p1 -b .expose-pam | %patch940 -p1 -b .expose-pam | ||||||
| %patch942 -p1 -b .chroot-cap | %patch942 -p1 -b .chroot-cap | ||||||
| %patch943 -p1 -b .deref |  | ||||||
| %patch944 -p1 -b .x11max | %patch944 -p1 -b .x11max | ||||||
|  | %patch945 -p1 -b .daemon | ||||||
| 
 | 
 | ||||||
| %patch200 -p1 -b .audit | %patch200 -p1 -b .audit | ||||||
| %patch201 -p1 -b .audit-race | %patch201 -p1 -b .audit-race | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								sources
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								sources
									
									
									
									
									
								
							| @ -1,2 +1,2 @@ | |||||||
| a212baca7ce11d596bd8dcb222859ace  pam_ssh_agent_auth-0.10.2.tar.bz2 | SHA512 (openssh-7.4p1.tar.gz) = 4f3256f461f01366c5d5e0e45285eec65016e2643b3284b407f48f53d81087bf2c1caf7d5f7530d307a15c91c64de91446e1cba948e8fc68f82098290fe3b292 | ||||||
| dfadd9f035d38ce5d58a3bf130b86d08  openssh-7.3p1.tar.gz | SHA512 (pam_ssh_agent_auth-0.10.2.tar.bz2) = b4b9bc4486d873f236f7c54874c996e24f344f889dfda3beadb12b97cbb89078028a103a4a7175cd919fb0a12fd5bcefef50420510ae5eff9252e494e0124b38 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user