diff --git a/mc-rpmlintrc b/mc-rpmlintrc deleted file mode 100644 index b391e31..0000000 --- a/mc-rpmlintrc +++ /dev/null @@ -1,3 +0,0 @@ -addFilter("mc\..* W: script-without-shebang /usr/lib/mc/fish/.+") -addFilter("mc\..* W: script-without-shebang /usr/share/mc/mc.*\.c?sh") -addFilter("mc\..* W: files-duplicate /etc/mc/mc.keymap") diff --git a/mc.changes b/mc.changes index e98987c..f85d7ef 100644 --- a/mc.changes +++ b/mc.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue Jun 26 10:33:31 UTC 2018 - adam.majer@suse.de + +- sftp_interactive_password.patch: Fixes logins to remote SSH + sessions where only Keyboard-Interactive password is available + and tunneled password is disabled (bsc#1098235) +- mc-rpmlintrc: removed + ------------------------------------------------------------------- Tue Jun 5 17:27:40 UTC 2018 - ecsos@opensuse.org diff --git a/mc.spec b/mc.spec index 1a3e453..c14607b 100644 --- a/mc.spec +++ b/mc.spec @@ -28,7 +28,6 @@ Source1: x11_browser Source2: %{name}.desktop Source3: %{name}.png Source4: cmake.syntax -Source5: mc-rpmlintrc Source6: http://ftp.midnight-commander.org/%{name}-%{version}.sha256 Patch0: mc-fix_lib_search_path.patch Patch61: mc-extd-misc.patch @@ -62,6 +61,7 @@ Patch52: mc-pie.patch Patch60: mc-startup-timeout.patch Patch100: xls2csv_update.patch +Patch101: sftp_interactive_password.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: audiofile-devel @@ -117,6 +117,7 @@ echo "`grep %{name}-%{version}.tar.xz %{SOURCE6} | head -n1 | cut -c1-64` %{SOU %patch52 -p1 %patch60 -p1 %patch100 -p1 +%patch101 -p1 %build autoreconf --force --install diff --git a/sftp_interactive_password.patch b/sftp_interactive_password.patch new file mode 100644 index 0000000..2272d49 --- /dev/null +++ b/sftp_interactive_password.patch @@ -0,0 +1,106 @@ +Upstream: https://midnight-commander.org/ticket/3921 +Bugzilla: 1098235 + +commit 83e7624292232562639d13f76d84126e6779e54b +Author: Adam Majer +Date: Mon Jun 25 15:06:38 2018 +0200 + + Ticket #3921: Enable keyboard interactive authentication + + If SSH server does not support cleartext tunneled password + authentication and only 'keyboard interactive' authentication + instead, then we need to use different authentication + function along with a interactive callback. + + Signed-off-by: Adam Majer + +diff --git a/src/vfs/sftpfs/connection.c b/src/vfs/sftpfs/connection.c +index 537159129..19a49874f 100644 +--- a/src/vfs/sftpfs/connection.c ++++ b/src/vfs/sftpfs/connection.c +@@ -292,6 +292,50 @@ sftpfs_open_connection_ssh_key (struct vfs_s_super *super, GError ** mcerror) + return ret_value; + } + ++ ++/** ++ * Keyboard-interactive password helper for opening connection to host by ++ * sftpfs_open_connection_ssh_password ++ * ++ * Uses global kbi_super (data with existing connection) and kbi_passwd (password) ++ * ++ * @param name username ++ * @param name_len length of @name ++ * @param instruction unused ++ * @param instruction_len unused ++ * @param num_prompts number of possible problems to process ++ * @param prompts array of prompts to process ++ * @param responses array of responses, one per prompt ++ * @param abstract unused ++ */ ++ ++static const char *kbi_passwd; ++static const struct vfs_s_super *kbi_super; ++static LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC(keyboard_interactive_helper) ++{ ++ int i; ++ int len; ++ ++ (void) instruction; ++ (void) instruction_len; ++ (void) abstract; ++ ++ if (!kbi_super || !kbi_passwd) ++ return; ++ ++ if (strncmp(name, kbi_super->path_element->user, name_len) != 0) ++ return; ++ ++ // assume these are password prompts ++ len = strlen(kbi_passwd); ++ for (i=0; ipath_element->password; ++ while ((rc = libssh2_userauth_keyboard_interactive (super_data->session, super->path_element->user, ++ keyboard_interactive_helper)) == ++ LIBSSH2_ERROR_EAGAIN); ++ kbi_super = NULL; ++ kbi_passwd = NULL; ++ if (rc == 0) ++ return TRUE; + } + + p = g_strdup_printf (_("sftp: Enter password for %s "), super->path_element->user); +@@ -337,6 +391,17 @@ sftpfs_open_connection_ssh_password (struct vfs_s_super *super, GError ** mcerro + passwd)) == LIBSSH2_ERROR_EAGAIN) + ; + ++ if (rc != 0) ++ { ++ kbi_super = super; ++ kbi_passwd = passwd; ++ while ((rc = libssh2_userauth_keyboard_interactive (super_data->session, super->path_element->user, ++ keyboard_interactive_helper)) ++ == LIBSSH2_ERROR_EAGAIN); ++ kbi_super = NULL; ++ kbi_passwd = NULL; ++ } ++ + if (rc == 0) + { + ret_value = TRUE;