[FFmpeg-devel] [PATCH] sftp: support reading config from ~/.ssh/config
Lukasz Marek
lukasz.m.luki2 at gmail.com
Wed Mar 11 00:41:14 CET 2015
On 11.03.2015 00:22, Florian Jacob wrote:
> 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 at florianjacob.de>
> ---
> libavformat/libssh.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/libavformat/libssh.c b/libavformat/libssh.c
> index 3ec60cb..1ed1d72 100644
> --- a/libavformat/libssh.c
> +++ b/libavformat/libssh.c
> @@ -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);
> }
>
> + if (ssh_options_parse_config(libssh->session, NULL) < 0) {
> + av_log(libssh, AV_LOG_ERROR, "Could not parse the config file.\n");
This should be a warning (not an error), or return with error code from
here. A warning is probably better.
> + }
> +
> if (ssh_connect(libssh->session) != SSH_OK) {
> av_log(libssh, AV_LOG_ERROR, "Connection failed: %s\n", ssh_get_error(libssh->session));
> 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;
> char proto[10], path[MAX_URL_SIZE], hostname[1024], credencials[1024];
> - int port = 22, ret;
> + int port, ret;
> const char *user = NULL, *pass = NULL;
> char *end = NULL;
>
> @@ -198,8 +202,9 @@ static av_cold int libssh_open(URLContext *h, const char *url, int flags)
> path, sizeof(path),
> 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;
Is this really required? Port will be overwritten if present in config
either way?
> if ((ret = libssh_create_ssh_session(libssh, hostname, port)) < 0)
> goto fail;
I will test later, thanks.
More information about the ffmpeg-devel
mailing list