On 7/14/2020 3:06 PM, Nicolas Frattaroli wrote: > This introduces two new AVOption options for the SFTP protocol, > one named sftp_user to supply the username to be used for auth, > one named sftp_password to supply the password to be used for auth. > > These are useful for when an API user does not wish to deal with > URL manipulation and percent encoding. > > Setting them while also having credentials in the URL will use the > credentials from the URL. The rationale for this is that credentials > embedded in the URL are probably more specific to what the user is > trying to do than anything set by some API user. > > Signed-off-by: Nicolas Frattaroli <ffm...@fratti.ch> > --- > doc/protocols.texi | 8 ++++++++ > libavformat/libssh.c | 17 +++++++++++++---- > 2 files changed, 21 insertions(+), 4 deletions(-) > > diff --git a/doc/protocols.texi b/doc/protocols.texi > index 64ad3f05d6..40c8c572e5 100644 > --- a/doc/protocols.texi > +++ b/doc/protocols.texi > @@ -880,6 +880,14 @@ truncating. Default value is 1. > Specify the path of the file containing private key to use during > authorization. > By default libssh searches for keys in the @file{~/.ssh/} directory. > > +@item sftp_user > +Set a user to be used for authenticating to the SSH daemon. This is > overridden by the > +user in the SFTP URL. > + > +@item sftp_password > +Set a password to be used for authenticating to the SSH daemon. This is > overridden by > +the password in the SFTP URL. > + > @end table > > Example: Play a file stored on remote server. > diff --git a/libavformat/libssh.c b/libavformat/libssh.c > index 21474f0f0a..a673e49a3a 100644 > --- a/libavformat/libssh.c > +++ b/libavformat/libssh.c > @@ -39,6 +39,8 @@ typedef struct { > int rw_timeout; > int trunc; > char *priv_key; > + const char *option_user; > + const char *option_password; > } LIBSSHContext; > > static av_cold int libssh_create_ssh_session(LIBSSHContext *libssh, const > char* hostname, unsigned int port) > @@ -192,13 +194,13 @@ static av_cold int libssh_close(URLContext *h) > static av_cold int libssh_connect(URLContext *h, const char *url, char > *path, size_t path_size) > { > LIBSSHContext *libssh = h->priv_data; > - char proto[10], hostname[1024], credencials[1024]; > + char proto[10], hostname[1024], credentials[1024]; > int port = 22, ret; > const char *user = NULL, *pass = NULL; > char *end = NULL; > > av_url_split(proto, sizeof(proto), > - credencials, sizeof(credencials), > + credentials, sizeof(credentials),
Cosmetic changes should be in a separate commit. > hostname, sizeof(hostname), > &port, > path, path_size, > @@ -214,8 +216,13 @@ static av_cold int libssh_connect(URLContext *h, const > char *url, char *path, si > if ((ret = libssh_create_ssh_session(libssh, hostname, port)) < 0) > return ret; > > - user = av_strtok(credencials, ":", &end); > - pass = av_strtok(end, ":", &end); > + if(!*credentials) { > + user = libssh->option_user; > + pass = libssh->option_password; > + } else { > + user = av_strtok(credentials, ":", &end); > + pass = av_strtok(end, ":", &end); > + } > > if ((ret = libssh_authentication(libssh, user, pass)) < 0) > return ret; > @@ -479,6 +486,8 @@ static const AVOption options[] = { > {"timeout", "set timeout of socket I/O operations", OFFSET(rw_timeout), > AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, D|E }, > {"truncate", "Truncate existing files on write", OFFSET(trunc), > AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, E }, > {"private_key", "set path to private key", OFFSET(priv_key), > AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D|E }, > + {"sftp_user", "user for SFTP login. Overridden by whatever is in the > URL.", OFFSET(option_user), AV_OPT_TYPE_STRING, { 0 }, 0, 0, D|E }, > + {"sftp_password", "password for SFTP login. Overridden by whatever is in > the URL.", OFFSET(option_password), AV_OPT_TYPE_STRING, { 0 }, 0, 0, D|E }, Perhaps this should instead be implemented as an AV_OPT_TYPE_DICT option that can accept anything you would otherwise pass as part of the url, so user, pass, port, etc. > {NULL} > }; > > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".