aboutsummaryrefslogtreecommitdiff
path: root/lib/url.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/url.c')
-rw-r--r--lib/url.c28
1 files changed, 23 insertions, 5 deletions
diff --git a/lib/url.c b/lib/url.c
index 590348029..d1613ebd6 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -306,6 +306,9 @@ CURLcode curl_open(CURL **curl, char *url)
/* use fread as default function to read input */
data->fread = (size_t (*)(char *, size_t, size_t, FILE *))fread;
+ /* set the default passwd function */
+ data->fpasswd = my_getpass;
+
data->infilesize = -1; /* we don't know any size */
data->current_speed = -1; /* init to negative == impossible */
@@ -479,6 +482,12 @@ CURLcode curl_setopt(CURL *curl, CURLoption option, ...)
case CURLOPT_PROGRESSDATA:
data->progress_client = va_arg(param, void *);
break;
+ case CURLOPT_PASSWDFUNCTION:
+ data->fpasswd = va_arg(param, curl_passwd_callback);
+ break;
+ case CURLOPT_PASSWDDATA:
+ data->passwd_client = va_arg(param, void *);
+ break;
case CURLOPT_PROXYUSERPWD:
data->proxyuserpwd = va_arg(param, char *);
data->bits.proxy_user_passwd = data->proxyuserpwd?1:0;
@@ -809,7 +818,10 @@ CURLcode curl_connect(CURL *curl, CURLconnect **in_connect)
/* check for password, if no ask for one */
if( !data->passwd[0] ) {
- my_getpass("password:", data->passwd, sizeof(data->passwd));
+ if(!data->fpasswd ||
+ data->fpasswd(data->passwd_client,
+ "password:", data->passwd, sizeof(data->passwd)))
+ return CURLE_BAD_PASSWORD_ENTERED;
}
}
@@ -828,9 +840,12 @@ CURLcode curl_connect(CURL *curl, CURLconnect **in_connect)
/* check for password, if no ask for one */
if( !data->proxypasswd[0] ) {
- my_getpass("proxy password:",
- data->proxypasswd,
- sizeof(data->proxypasswd));
+ if(!data->fpasswd ||
+ data->fpasswd( data->passwd_client,
+ "proxy password:",
+ data->proxypasswd,
+ sizeof(data->proxypasswd)))
+ return CURLE_BAD_PASSWORD_ENTERED;
}
}
@@ -1149,7 +1164,10 @@ CURLcode curl_connect(CURL *curl, CURLconnect **in_connect)
/* check for password, if no ask for one */
if( !data->passwd[0] ) {
- my_getpass("password:",data->passwd,sizeof(data->passwd));
+ if(!data->fpasswd ||
+ data->fpasswd(data->passwd_client,
+ "password:",data->passwd,sizeof(data->passwd)))
+ return CURLE_BAD_PASSWORD_ENTERED;
}
else {
/* we have a password found in the URL, decode it! */