summaryrefslogtreecommitdiff
path: root/daemon/gvfsbackendsftp.c
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2008-02-25 20:08:28 +0000
committerCarlos Garcia Campos <carlosgc@src.gnome.org>2008-02-25 20:08:28 +0000
commite4af3df72bf4aa44e539db78d95ff311990eb512 (patch)
tree85f2f3a76412246d4883a894e2918d47a2342861 /daemon/gvfsbackendsftp.c
parentd966b3ade7d0d864f827417b015251454d96e9e2 (diff)
downloadgvfs-e4af3df72bf4aa44e539db78d95ff311990eb512.tar.gz
Update to gvfskeyring api changes
2008-02-25 Carlos Garcia Campos <carlosgc@gnome.org> * daemon/gvfsbackendsftp.c: * daemon/gvfsbackendsmb.c: Update to gvfskeyring api changes * daemon/gvfskeyring.c: * daemon/gvfskeyring.h: Add object, authtype and port parameters for both save and lookup. svn path=/trunk/; revision=1374
Diffstat (limited to 'daemon/gvfsbackendsftp.c')
-rw-r--r--daemon/gvfsbackendsftp.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/daemon/gvfsbackendsftp.c b/daemon/gvfsbackendsftp.c
index cd39379d..4c33e818 100644
--- a/daemon/gvfsbackendsftp.c
+++ b/daemon/gvfsbackendsftp.c
@@ -24,6 +24,7 @@
#include <config.h>
+#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
@@ -658,6 +659,38 @@ get_hostname_and_fingerprint_from_line (const gchar *buffer,
return TRUE;
}
+static const gchar *
+get_authtype_from_password_line (const char *password_line)
+{
+ return g_str_has_prefix (password_line, "Enter passphrase for key") ?
+ "publickey" : "password";
+}
+
+static char *
+get_object_from_password_line (const char *password_line)
+{
+ char *chr, *ptr, *object = NULL;
+
+ if (g_str_has_prefix (password_line, "Enter passphrase for key"))
+ {
+ ptr = strchr (password_line, '\'');
+ if (ptr != NULL)
+ {
+ ptr += 1;
+ chr = strchr (ptr, '\'');
+ if (chr != NULL)
+ {
+ object = g_strndup (ptr, chr - ptr);
+ }
+ else
+ {
+ object = g_strdup (ptr);
+ }
+ }
+ }
+ return object;
+}
+
static gboolean
handle_login (GVfsBackend *backend,
GMountSource *mount_source,
@@ -680,6 +713,8 @@ handle_login (GVfsBackend *backend,
GPasswordSave password_save = G_PASSWORD_SAVE_NEVER;
gsize bytes_written;
gboolean password_in_keyring = FALSE;
+ const gchar *authtype = NULL;
+ gchar *object = NULL;
if (op_backend->client_vendor == SFTP_VENDOR_SSH)
prompt_fd = stderr_fd;
@@ -751,12 +786,21 @@ handle_login (GVfsBackend *backend,
g_str_has_suffix (buffer, "Password:") ||
g_str_has_prefix (buffer, "Enter passphrase for key"))
{
+ authtype = get_authtype_from_password_line (buffer);
+ object = get_object_from_password_line (buffer);
+
/* If password is in keyring at this point is because it failed */
if (!op_backend->tmp_password && (password_in_keyring ||
!g_vfs_keyring_lookup_password (op_backend->user,
op_backend->host,
NULL,
"sftp",
+ object,
+ authtype,
+ op_backend->port != -1 ?
+ op_backend->port
+ :
+ 0,
NULL,
NULL,
&new_password)))
@@ -906,10 +950,17 @@ handle_login (GVfsBackend *backend,
op_backend->host,
NULL,
"sftp",
+ object,
+ authtype,
+ op_backend->port != -1 ?
+ op_backend->port
+ :
+ 0,
new_password,
password_save);
}
+ g_free (object);
g_free (new_password);
g_object_unref (prompt_stream);
g_object_unref (reply_stream);