summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2014-05-08 18:51:16 +0200
committerFelix Fietkau <nbd@openwrt.org>2014-05-08 18:51:51 +0200
commitc8e85b4714709aebaa055bea6cc5a26b8eda4071 (patch)
tree2025c6728b05a5e51f09b3ca69c05a880b37b6aa
parente350ca4e73771c5a23e08ecc25ea4d3a966e51f8 (diff)
downloaduclient-c8e85b4714709aebaa055bea6cc5a26b8eda4071.tar.gz
fetch: add support for --user and --password
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-rw-r--r--uclient-fetch.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/uclient-fetch.c b/uclient-fetch.c
index 1644921..733a5b9 100644
--- a/uclient-fetch.c
+++ b/uclient-fetch.c
@@ -41,6 +41,9 @@ static const char *output_file;
static int output_fd = -1;
static int error_ret;
static int out_bytes;
+static char *username;
+static char *password;
+static char *auth_str;
static int open_output_file(const char *path, bool create)
{
@@ -247,11 +250,15 @@ static int no_ssl(const char *progname)
enum {
L_NO_CHECK_CERTIFICATE,
L_CA_CERTIFICATE,
+ L_USER,
+ L_PASSWORD,
};
static const struct option longopts[] = {
[L_NO_CHECK_CERTIFICATE] = { "no-check-certificate", no_argument },
[L_CA_CERTIFICATE] = { "ca-certificate", required_argument },
+ [L_USER] = { "user", required_argument },
+ [L_PASSWORD] = { "password", required_argument },
{}
};
@@ -275,6 +282,18 @@ int main(int argc, char **argv)
if (ssl_ctx)
ssl_ops->context_add_ca_crt_file(ssl_ctx, optarg);
break;
+ case L_USER:
+ if (!strlen(optarg))
+ break;
+ username = strdup(optarg);
+ memset(optarg, '*', strlen(optarg));
+ break;
+ case L_PASSWORD:
+ if (!strlen(optarg))
+ break;
+ password = strdup(optarg);
+ memset(optarg, '*', strlen(optarg));
+ break;
default:
return usage(progname);
}
@@ -301,7 +320,14 @@ int main(int argc, char **argv)
uloop_init();
- cl = uclient_new(argv[0], NULL, &cb);
+ if (username) {
+ if (password)
+ asprintf(&auth_str, "%s:%s", username, password);
+ else
+ auth_str = username;
+ }
+
+ cl = uclient_new(argv[0], auth_str, &cb);
if (!cl) {
fprintf(stderr, "Failed to allocate uclient context\n");
return 1;