Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package remmina

Version 1.3.3+dfsg-2 (now in unstable/sid) aims to fix a particular
issue introduced in former 1.3.3+dfsg-1 revision about SSH plugin
failing to work properly if a public key is not provided.

Upstream noticed this and via #924319 requested a new upload to fix the
problem, providing a simple patch to achieve it. The main rationale for
this change is explained in the bug report above.

Attached, you'll find a debdiff for 1.3.3+dfsg-1 -> 1.3.3+dfsg-2.

unblock remmina/1.3.3+dfsg-2

-- System Information:
Debian Release: buster/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'buildd-unstable'), (500, 
'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 4.19.0-3-amd64 (SMP w/4 CPU cores)
Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_US:en (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

diff -Nru remmina-1.3.3+dfsg/debian/changelog remmina-1.3.3+dfsg/debian/changelog
--- remmina-1.3.3+dfsg/debian/changelog	2019-02-28 22:39:06.000000000 +0100
+++ remmina-1.3.3+dfsg/debian/changelog	2019-03-12 20:51:31.000000000 +0100
@@ -1,3 +1,10 @@
+remmina (1.3.3+dfsg-2) unstable; urgency=medium
+
+  * debian/patches/: patchset updated
+    - 01-SSH_fix.patch added (Closes: #924319)
+
+ -- Matteo F. Vescovi <m...@debian.org>  Tue, 12 Mar 2019 20:51:31 +0100
+
 remmina (1.3.3+dfsg-1) unstable; urgency=medium
 
   * New upstream release
diff -Nru remmina-1.3.3+dfsg/debian/patches/01-SSH_fix.patch remmina-1.3.3+dfsg/debian/patches/01-SSH_fix.patch
--- remmina-1.3.3+dfsg/debian/patches/01-SSH_fix.patch	1970-01-01 01:00:00.000000000 +0100
+++ remmina-1.3.3+dfsg/debian/patches/01-SSH_fix.patch	2019-03-12 20:46:20.000000000 +0100
@@ -0,0 +1,165 @@
+Description: SSH plugin not working if pubkey is not supplied
+Author: Antenore Gatta <anten...@remmina.org>
+Bug: https://gitlab.com/Remmina/Remmina/issues/1850
+Bug-Debian: https://bugs.debian.org/924319
+Date: 2019-03-11
+
+diff --git a/src/remmina_sftp_client.c b/src/remmina_sftp_client.c
+index 0f43f2b3..3540e1c1 100644
+--- a/src/remmina_sftp_client.c
++++ b/src/remmina_sftp_client.c
+@@ -507,7 +507,7 @@ remmina_sftp_client_thread_main(gpointer data)
+ 		if (!sftp) {
+ 			sftp = remmina_sftp_new_from_ssh(REMMINA_SSH(client->sftp));
+ 			if (!remmina_ssh_init_session(REMMINA_SSH(sftp)) ||
+-			    remmina_ssh_auth(REMMINA_SSH(sftp), NULL) <= 0 ||
++			    remmina_ssh_auth(REMMINA_SSH(sftp), NULL, NULL, NULL) <= 0 ||
+ 			    !remmina_sftp_open(sftp)) {
+ 				remmina_sftp_client_thread_set_error(client, task, (REMMINA_SSH(sftp))->error);
+ 				remmina_ftp_task_free(task);
+@@ -980,7 +980,7 @@ remmina_sftp_client_new_init(RemminaSFTP *sftp)
+ 	gdk_display_flush(display);
+ 
+ 	if (!remmina_ssh_init_session(REMMINA_SSH(sftp)) ||
+-	    remmina_ssh_auth(REMMINA_SSH(sftp), NULL) <= 0 ||
++	    remmina_ssh_auth(REMMINA_SSH(sftp), NULL, NULL, NULL) <= 0 ||
+ 	    !remmina_sftp_open(sftp)) {
+ 		dialog = gtk_message_dialog_new(GTK_WINDOW(gtk_widget_get_toplevel(client)),
+ 			GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+diff --git a/src/remmina_sftp_plugin.c b/src/remmina_sftp_plugin.c
+index af55c4cf..08994ac1 100644
+--- a/src/remmina_sftp_plugin.c
++++ b/src/remmina_sftp_plugin.c
+@@ -135,7 +135,7 @@ remmina_plugin_sftp_main_thread(gpointer data)
+ 		/* Create SFTP connection based on existing SSH session */
+ 		sftp = remmina_sftp_new_from_ssh(ssh);
+ 		if (remmina_ssh_init_session(REMMINA_SSH(sftp)) &&
+-		    remmina_ssh_auth(REMMINA_SSH(sftp), NULL) > 0 &&
++		    remmina_ssh_auth(REMMINA_SSH(sftp), NULL, gp, remminafile) > 0 &&
+ 		    remmina_sftp_open(sftp)) {
+ 			cont = TRUE;
+ 		}
+diff --git a/src/remmina_ssh.c b/src/remmina_ssh.c
+index 9e6ba2a8..851d4446 100644
+--- a/src/remmina_ssh.c
++++ b/src/remmina_ssh.c
+@@ -229,13 +229,16 @@ remmina_ssh_auth_pubkey(RemminaSSH *ssh)
+ 
+ 	g_snprintf (pubkey, sizeof(pubkey), "%s.pub", ssh->privkeyfile);
+ 
+-	ret = ssh_pki_import_pubkey_file( pubkey, &key);
+-	if (ret != SSH_OK) {
+-		remmina_ssh_set_error(ssh, _("SSH public key cannot be imported: %s"));
+-		return 0;
++	/*G_FILE_TEST_EXISTS*/
++	if (g_file_test(pubkey, G_FILE_TEST_EXISTS)) {
++		ret = ssh_pki_import_pubkey_file(pubkey, &key);
++		if (ret != SSH_OK) {
++			remmina_ssh_set_error(ssh, _("SSH public key cannot be imported: %s"));
++			return 0;
++		}
++		ssh_key_free(key);
+ 	}
+ 
+-	ssh_key_free(key);
+ 
+ 	if ( ssh_pki_import_privkey_file( ssh->privkeyfile, (ssh->passphrase ? ssh->passphrase : ""),
+ 		NULL, NULL, &key ) != SSH_OK ) {
+@@ -258,10 +261,33 @@ remmina_ssh_auth_pubkey(RemminaSSH *ssh)
+ }
+ 
+ static gint
+-remmina_ssh_auth_auto_pubkey(RemminaSSH* ssh)
++remmina_ssh_auth_auto_pubkey(RemminaSSH *ssh, RemminaProtocolWidget *gp, RemminaFile *remminafile)
+ {
+ 	TRACE_CALL(__func__);
+-	gint ret = ssh_userauth_publickey_auto(ssh->session, NULL, ssh->passphrase);
++
++	gboolean disablepasswordstoring;
++	gboolean save_password;
++	gchar *pwd;
++	gchar *pwdtype = "ssh_passphrase";
++	gint ret;
++
++	if (!ssh->passphrase) {
++		disablepasswordstoring = remmina_file_get_int(remminafile, "disablepasswordstoring", FALSE);
++		ret = remmina_protocol_widget_panel_authpwd(gp, REMMINA_AUTHPWD_TYPE_SSH_PRIVKEY, !disablepasswordstoring);
++		save_password = remmina_protocol_widget_get_savepassword(gp);
++
++		if (ret == GTK_RESPONSE_OK) {
++			if (save_password) {
++				pwd = remmina_protocol_widget_get_password(gp);
++				remmina_file_set_string(remminafile, pwdtype, pwd);
++				g_free(pwd);
++			}
++		} else {
++			return -1;
++		}
++		ssh->passphrase = remmina_protocol_widget_get_password(gp);
++	}
++	ret = ssh_userauth_publickey_auto(ssh->session, NULL, ssh->passphrase);
+ 
+ 	if (ret != SSH_AUTH_SUCCESS) {
+ 		remmina_ssh_set_error(ssh, _("SSH automatic public key authentication failed: %s"));
+@@ -308,7 +334,7 @@ remmina_ssh_auth_gssapi(RemminaSSH *ssh)
+ }
+ 
+ gint
+-remmina_ssh_auth(RemminaSSH *ssh, const gchar *password)
++remmina_ssh_auth(RemminaSSH *ssh, const gchar *password, RemminaProtocolWidget *gp, RemminaFile *remminafile)
+ {
+ 	TRACE_CALL(__func__);
+ 	gint method;
+@@ -359,7 +385,7 @@ remmina_ssh_auth(RemminaSSH *ssh, const gchar *password)
+ 
+ 	case SSH_AUTH_AUTO_PUBLICKEY:
+ 		/* ssh_agent or none */
+-		return remmina_ssh_auth_auto_pubkey(ssh);
++		return remmina_ssh_auth_auto_pubkey(ssh, gp, remminafile);
+ 
+ #if 0
+ 	/* Not yet supported by libssh */
+@@ -472,7 +498,7 @@ remmina_ssh_auth_gui(RemminaSSH *ssh, RemminaProtocolWidget *gp, RemminaFile *re
+ 		return FALSE;
+ 	}
+ 	/* Try empty password or existing password/passphrase first */
+-	ret = remmina_ssh_auth(ssh, remmina_file_get_string(remminafile, pwdtype));
++	ret = remmina_ssh_auth(ssh, remmina_file_get_string(remminafile, pwdtype), gp, remminafile);
+ 	if (ret > 0) return 1;
+ 
+ 	/* Requested for a non-empty password */
+@@ -499,7 +525,7 @@ remmina_ssh_auth_gui(RemminaSSH *ssh, RemminaProtocolWidget *gp, RemminaFile *re
+ 			return -1;
+ 		}
+ 		pwd = remmina_protocol_widget_get_password(gp);
+-		ret = remmina_ssh_auth(ssh, pwd);
++		ret = remmina_ssh_auth(ssh, pwd, gp, remminafile);
+ 		g_free(pwd);
+ 	}
+ 
+diff --git a/src/remmina_ssh.h b/src/remmina_ssh.h
+index ec97bd43..29d7e930 100644
+--- a/src/remmina_ssh.h
++++ b/src/remmina_ssh.h
+@@ -96,7 +96,7 @@ gboolean remmina_ssh_init_session(RemminaSSH *ssh);
+ 
+ /* Authenticate SSH session */
+ /* -1: Require password; 0: Failed; 1: Succeeded */
+-gint remmina_ssh_auth(RemminaSSH *ssh, const gchar *password);
++gint remmina_ssh_auth(RemminaSSH *ssh, const gchar *password, RemminaProtocolWidget *gp, RemminaFile *remminafile);
+ 
+ /* -1: Cancelled; 0: Failed; 1: Succeeded */
+ gint remmina_ssh_auth_gui(RemminaSSH *ssh, RemminaProtocolWidget *gp, RemminaFile *remminafile);
+diff --git a/src/remmina_ssh_plugin.c b/src/remmina_ssh_plugin.c
+index 3bdfef22..8f9bc4ba 100644
+--- a/src/remmina_ssh_plugin.c
++++ b/src/remmina_ssh_plugin.c
+@@ -289,7 +289,7 @@ remmina_plugin_ssh_main_thread(gpointer data)
+ 		/* Create SSH Shell connection based on existing SSH session */
+ 		shell = remmina_ssh_shell_new_from_ssh(ssh);
+ 		if (remmina_ssh_init_session(REMMINA_SSH(shell)) &&
+-		    remmina_ssh_auth(REMMINA_SSH(shell), NULL) > 0 &&
++		    remmina_ssh_auth(REMMINA_SSH(shell), NULL, gp, remminafile) > 0 &&
+ 		    remmina_ssh_shell_open(shell, (RemminaSSHExitFunc)
+ 			    remmina_plugin_service->protocol_plugin_close_connection, gp)) {
+ 			cont = TRUE;
diff -Nru remmina-1.3.3+dfsg/debian/patches/series remmina-1.3.3+dfsg/debian/patches/series
--- remmina-1.3.3+dfsg/debian/patches/series	1970-01-01 01:00:00.000000000 +0100
+++ remmina-1.3.3+dfsg/debian/patches/series	2019-03-11 20:31:12.000000000 +0100
@@ -0,0 +1 @@
+01-SSH_fix.patch
-- 
Matteo F. Vescovi

Attachment: signature.asc
Description: PGP signature

Reply via email to