Browse Source

lavf/libssh: support reading config from ~/.ssh/config

libssh provides a function for parsing ~/.ssh/config for ssh connection parameters like user, hostname, identity file
and port. This patch makes ffmpeg use this function to take parameters from the config file for everything that's not
explicitely set in the url. It also supports host aliases, i.e. using a shorthand in the url and replacing it with the
hostname / IP address specified for the shorthand in the config file.

Signed-off-by: Florian Jacob <projects+ffmpeg@florianjacob.de>
Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
tags/n2.7
Florian Jacob Lukasz Marek 10 years ago
parent
commit
c5c4ca6bc8
1 changed files with 8 additions and 3 deletions
  1. +8
    -3
      libavformat/libssh.c

+ 8
- 3
libavformat/libssh.c View File

@@ -55,6 +55,10 @@ static av_cold int libssh_create_ssh_session(LIBSSHContext *libssh, const char*
ssh_options_set(libssh->session, SSH_OPTIONS_TIMEOUT_USEC, &timeout); ssh_options_set(libssh->session, SSH_OPTIONS_TIMEOUT_USEC, &timeout);
} }


if (ssh_options_parse_config(libssh->session, NULL) < 0) {
av_log(libssh, AV_LOG_WARNING, "Could not parse the config file.\n");
}

if (ssh_connect(libssh->session) != SSH_OK) { if (ssh_connect(libssh->session) != SSH_OK) {
av_log(libssh, AV_LOG_ERROR, "Connection failed: %s\n", ssh_get_error(libssh->session)); av_log(libssh, AV_LOG_ERROR, "Connection failed: %s\n", ssh_get_error(libssh->session));
return AVERROR(EIO); return AVERROR(EIO);
@@ -187,7 +191,7 @@ static av_cold int libssh_open(URLContext *h, const char *url, int flags)
{ {
LIBSSHContext *libssh = h->priv_data; LIBSSHContext *libssh = h->priv_data;
char proto[10], path[MAX_URL_SIZE], hostname[1024], credencials[1024]; char proto[10], path[MAX_URL_SIZE], hostname[1024], credencials[1024];
int port = 22, ret;
int port, ret;
const char *user = NULL, *pass = NULL; const char *user = NULL, *pass = NULL;
char *end = NULL; char *end = NULL;


@@ -198,8 +202,9 @@ static av_cold int libssh_open(URLContext *h, const char *url, int flags)
path, sizeof(path), path, sizeof(path),
url); url);


if (port <= 0 || port > 65535)
port = 22;
// a port of 0 will use a port from ~/.ssh/config or the default value 22
if (port < 0 || port > 65535)
port = 0;


if ((ret = libssh_create_ssh_session(libssh, hostname, port)) < 0) if ((ret = libssh_create_ssh_session(libssh, hostname, port)) < 0)
goto fail; goto fail;


Loading…
Cancel
Save