URL parse: user name with ipv6 numerical address
Using a URL with embedded user name and password didn't work if the host was given as a numerical IPv6 string, like ftp://user:password@[::1]/ Reported by: Brandon Wang Bug: http://curl.haxx.se/mail/archive-2012-01/0047.html
This commit is contained in:
parent
d7af7de5b2
commit
7883cd5af3
28
lib/url.c
28
lib/url.c
@ -137,7 +137,9 @@ static long ConnectionKillOne(struct SessionHandle *data);
|
|||||||
static void conn_free(struct connectdata *conn);
|
static void conn_free(struct connectdata *conn);
|
||||||
static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke);
|
static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke);
|
||||||
static CURLcode do_init(struct connectdata *conn);
|
static CURLcode do_init(struct connectdata *conn);
|
||||||
|
static CURLcode parse_url_userpass(struct SessionHandle *data,
|
||||||
|
struct connectdata *conn,
|
||||||
|
char *user, char *passwd);
|
||||||
/*
|
/*
|
||||||
* Protocol table.
|
* Protocol table.
|
||||||
*/
|
*/
|
||||||
@ -3666,7 +3668,9 @@ static CURLcode findprotocol(struct SessionHandle *data,
|
|||||||
*/
|
*/
|
||||||
static CURLcode parseurlandfillconn(struct SessionHandle *data,
|
static CURLcode parseurlandfillconn(struct SessionHandle *data,
|
||||||
struct connectdata *conn,
|
struct connectdata *conn,
|
||||||
bool *prot_missing)
|
bool *prot_missing,
|
||||||
|
char *user,
|
||||||
|
char *passwd)
|
||||||
{
|
{
|
||||||
char *at;
|
char *at;
|
||||||
char *fragment;
|
char *fragment;
|
||||||
@ -3675,6 +3679,7 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data,
|
|||||||
int rc;
|
int rc;
|
||||||
char protobuf[16];
|
char protobuf[16];
|
||||||
const char *protop;
|
const char *protop;
|
||||||
|
CURLcode result;
|
||||||
|
|
||||||
*prot_missing = FALSE;
|
*prot_missing = FALSE;
|
||||||
|
|
||||||
@ -3841,6 +3846,14 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data,
|
|||||||
path[0] = '/';
|
path[0] = '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************************
|
||||||
|
* Parse a user name and password in the URL and strip it out
|
||||||
|
* of the host name
|
||||||
|
*************************************************************/
|
||||||
|
result = parse_url_userpass(data, conn, user, passwd);
|
||||||
|
if(result != CURLE_OK)
|
||||||
|
return result;
|
||||||
|
|
||||||
if(conn->host.name[0] == '[') {
|
if(conn->host.name[0] == '[') {
|
||||||
/* This looks like an IPv6 address literal. See if there is an address
|
/* This looks like an IPv6 address literal. See if there is an address
|
||||||
scope. */
|
scope. */
|
||||||
@ -4783,7 +4796,7 @@ static CURLcode create_conn(struct SessionHandle *data,
|
|||||||
conn->host.name = conn->host.rawalloc;
|
conn->host.name = conn->host.rawalloc;
|
||||||
conn->host.name[0] = 0;
|
conn->host.name[0] = 0;
|
||||||
|
|
||||||
result = parseurlandfillconn(data, conn, &prot_missing);
|
result = parseurlandfillconn(data, conn, &prot_missing, user, passwd);
|
||||||
if(result != CURLE_OK)
|
if(result != CURLE_OK)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
@ -4812,15 +4825,6 @@ static CURLcode create_conn(struct SessionHandle *data,
|
|||||||
data->change.url_alloc = TRUE; /* free this later */
|
data->change.url_alloc = TRUE; /* free this later */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************
|
|
||||||
* Parse a user name and password in the URL and strip it out
|
|
||||||
* of the host name
|
|
||||||
*************************************************************/
|
|
||||||
result = parse_url_userpass(data, conn, user, passwd);
|
|
||||||
if(result != CURLE_OK)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************
|
/*************************************************************
|
||||||
* If the protocol can't handle url query strings, then cut
|
* If the protocol can't handle url query strings, then cut
|
||||||
* of the unhandable part
|
* of the unhandable part
|
||||||
|
Loading…
x
Reference in New Issue
Block a user