summaryrefslogtreecommitdiffstats
path: root/libavformat
diff options
context:
space:
mode:
authorNicolas Frattaroli <ffmpeg@fratti.ch>2019-10-27 00:37:32 +0200
committerMarton Balint <cus@passwd.hu>2019-11-03 12:24:19 +0100
commita8ec0685ac1cfbeb0e87f47b86d4f0b5cf75d745 (patch)
treec498d98b87c4e7474a8d43aa053483e5eacab050 /libavformat
parent5e3229df4ca86322f334bd098a9335f66ebdd649 (diff)
downloadffmpeg-streaming-a8ec0685ac1cfbeb0e87f47b86d4f0b5cf75d745.zip
ffmpeg-streaming-a8ec0685ac1cfbeb0e87f47b86d4f0b5cf75d745.tar.gz
avformat/ftp: add AVOptions for authentication
This introduces two new AVOption options for the FTP protocol, one named ftp-user to supply the username to be used for auth, one named ftp-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 <ffmpeg@fratti.ch> Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/ftp.c21
-rw-r--r--libavformat/version.h2
2 files changed, 17 insertions, 6 deletions
diff --git a/libavformat/ftp.c b/libavformat/ftp.c
index 3adc04e..97ad80d 100644
--- a/libavformat/ftp.c
+++ b/libavformat/ftp.c
@@ -69,6 +69,8 @@ typedef struct {
size_t dir_buffer_size;
size_t dir_buffer_offset;
int utf8;
+ const char *option_user; /**< User to be used if none given in the URL */
+ const char *option_password; /**< Password to be used if none given in the URL */
} FTPContext;
#define OFFSET(x) offsetof(FTPContext, x)
@@ -78,6 +80,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 },
{"ftp-write-seekable", "control seekability of connection during encoding", OFFSET(write_seekable), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, E },
{"ftp-anonymous-password", "password for anonymous login. E-mail address should be used.", OFFSET(anonymous_password), AV_OPT_TYPE_STRING, { 0 }, 0, 0, D|E },
+ {"ftp-user", "user for FTP login. Overridden by whatever is in the URL.", OFFSET(option_user), AV_OPT_TYPE_STRING, { 0 }, 0, 0, D|E },
+ {"ftp-password", "password for FTP login. Overridden by whatever is in the URL.", OFFSET(option_password), AV_OPT_TYPE_STRING, { 0 }, 0, 0, D|E },
{NULL}
};
@@ -652,7 +656,7 @@ static int ftp_abort(URLContext *h)
static int ftp_connect(URLContext *h, const char *url)
{
- char proto[10], path[MAX_URL_SIZE], credencials[MAX_URL_SIZE], hostname[MAX_URL_SIZE];
+ char proto[10], path[MAX_URL_SIZE], credentials[MAX_URL_SIZE], hostname[MAX_URL_SIZE];
const char *tok_user = NULL, *tok_pass = NULL;
char *end = NULL, *newpath = NULL;
int err;
@@ -665,17 +669,24 @@ static int ftp_connect(URLContext *h, const char *url)
s->features = NULL;
av_url_split(proto, sizeof(proto),
- credencials, sizeof(credencials),
+ credentials, sizeof(credentials),
hostname, sizeof(hostname),
&s->server_control_port,
path, sizeof(path),
url);
- tok_user = av_strtok(credencials, ":", &end);
+ tok_user = av_strtok(credentials, ":", &end);
tok_pass = av_strtok(end, ":", &end);
if (!tok_user) {
- tok_user = "anonymous";
- tok_pass = av_x_if_null(s->anonymous_password, "nopassword");
+ if (!s->option_user) {
+ tok_user = "anonymous";
+ tok_pass = av_x_if_null(s->anonymous_password, "nopassword");
+ } else {
+ tok_user = s->option_user;
+ }
+ }
+ if (!tok_pass) {
+ tok_pass = s->option_password;
}
s->user = av_strdup(tok_user);
s->password = av_strdup(tok_pass);
diff --git a/libavformat/version.h b/libavformat/version.h
index dce5a12..a978b34 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -33,7 +33,7 @@
// Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 58
#define LIBAVFORMAT_VERSION_MINOR 34
-#define LIBAVFORMAT_VERSION_MICRO 100
+#define LIBAVFORMAT_VERSION_MICRO 101
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
OpenPOWER on IntegriCloud