X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fftp.c;h=97ad80de0bac5fbf10822f9c8bad75ebdcb3ad87;hb=610473b9679bfd3aff56c6889927447da860beb1;hp=3adc04ee1fbbf245f5ec4940b2726a3ed6ed6d7b;hpb=5c363d3e595a9e5b7c42897b7aab91b91b154ac1;p=ffmpeg diff --git a/libavformat/ftp.c b/libavformat/ftp.c index 3adc04ee1fb..97ad80de0ba 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);