From 247a8fa70f9d7f1cf47ff28c10b4569ff9c4c6a9 Mon Sep 17 00:00:00 2001 From: Lukasz Marek Date: Sat, 28 Dec 2013 19:33:21 +0100 Subject: [PATCH 1/2] lavf/libssh: fix file mode Signed-off-by: Lukasz Marek --- libavformat/libssh.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavformat/libssh.c b/libavformat/libssh.c index 4a9b8674cf..e4d42678c1 100644 --- a/libavformat/libssh.c +++ b/libavformat/libssh.c @@ -121,7 +121,8 @@ static int libssh_open(URLContext *h, const char *url, int flags) access = O_RDONLY; } - if (!(s->file = sftp_open(s->sftp, path, access, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH))) { + /* 0666 = -rw-rw-rw- = read+write for everyone, minus umask */ + if (!(s->file = sftp_open(s->sftp, path, access, 0666))) { av_log(h, AV_LOG_ERROR, "Error opening sftp file: %s\n", ssh_get_error(s->session)); ret = AVERROR(EIO); goto fail; From 8ba77dfbc2e04c6d1070a8ea57f3dbbf477b95a7 Mon Sep 17 00:00:00 2001 From: Lukasz Marek Date: Sat, 28 Dec 2013 19:34:29 +0100 Subject: [PATCH 2/2] lavf/libssh: improve authentication - Add authentication using keys - Provide better message on fail Signed-off-by: Lukasz Marek --- libavformat/libssh.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libavformat/libssh.c b/libavformat/libssh.c index e4d42678c1..aa9b060ee3 100644 --- a/libavformat/libssh.c +++ b/libavformat/libssh.c @@ -91,10 +91,13 @@ static int libssh_open(URLContext *h, const char *url, int flags) goto fail; } - if (pass && ssh_userauth_password(s->session, NULL, pass) != SSH_AUTH_SUCCESS) { - av_log(h, AV_LOG_ERROR, "Error authenticating with password: %s\n", ssh_get_error(s->session)); - ret = AVERROR(EACCES); - goto fail; + if (ssh_userauth_autopubkey(s->session, pass) != SSH_AUTH_SUCCESS) { + av_log(s, AV_LOG_DEBUG, "Authentication using public key failed, trying password method.\n"); + if (ssh_userauth_password(s->session, NULL, pass) != SSH_AUTH_SUCCESS) { + av_log(h, AV_LOG_ERROR, "Authentication failed.\n"); + ret = AVERROR(EACCES); + goto fail; + } } if (!(s->sftp = sftp_new(s->session))) {