Renamed Curl_ascii_equal to Curl_raw_equal and bugfixed the my_toupper function
used in strequal.c so now all test cases run fine for me again.
This commit is contained in:
parent
545cafce9b
commit
9d16b4081e
26
lib/cookie.c
26
lib/cookie.c
@ -243,14 +243,14 @@ Curl_cookie_add(struct SessionHandle *data,
|
|||||||
whatptr++;
|
whatptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Curl_ascii_equal("path", name)) {
|
if(Curl_raw_equal("path", name)) {
|
||||||
co->path=strdup(whatptr);
|
co->path=strdup(whatptr);
|
||||||
if(!co->path) {
|
if(!co->path) {
|
||||||
badcookie = TRUE; /* out of memory bad */
|
badcookie = TRUE; /* out of memory bad */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal("domain", name)) {
|
else if(Curl_raw_equal("domain", name)) {
|
||||||
/* note that this name may or may not have a preceeding dot, but
|
/* note that this name may or may not have a preceeding dot, but
|
||||||
we don't care about that, we treat the names the same anyway */
|
we don't care about that, we treat the names the same anyway */
|
||||||
|
|
||||||
@ -315,14 +315,14 @@ Curl_cookie_add(struct SessionHandle *data,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal("version", name)) {
|
else if(Curl_raw_equal("version", name)) {
|
||||||
co->version=strdup(whatptr);
|
co->version=strdup(whatptr);
|
||||||
if(!co->version) {
|
if(!co->version) {
|
||||||
badcookie = TRUE;
|
badcookie = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal("max-age", name)) {
|
else if(Curl_raw_equal("max-age", name)) {
|
||||||
/* Defined in RFC2109:
|
/* Defined in RFC2109:
|
||||||
|
|
||||||
Optional. The Max-Age attribute defines the lifetime of the
|
Optional. The Max-Age attribute defines the lifetime of the
|
||||||
@ -341,7 +341,7 @@ Curl_cookie_add(struct SessionHandle *data,
|
|||||||
atoi((*co->maxage=='\"')?&co->maxage[1]:&co->maxage[0]) +
|
atoi((*co->maxage=='\"')?&co->maxage[1]:&co->maxage[0]) +
|
||||||
(long)now;
|
(long)now;
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal("expires", name)) {
|
else if(Curl_raw_equal("expires", name)) {
|
||||||
co->expirestr=strdup(whatptr);
|
co->expirestr=strdup(whatptr);
|
||||||
if(!co->expirestr) {
|
if(!co->expirestr) {
|
||||||
badcookie = TRUE;
|
badcookie = TRUE;
|
||||||
@ -371,10 +371,10 @@ Curl_cookie_add(struct SessionHandle *data,
|
|||||||
else {
|
else {
|
||||||
if(sscanf(ptr, "%" MAX_COOKIE_LINE_TXT "[^;\r\n]",
|
if(sscanf(ptr, "%" MAX_COOKIE_LINE_TXT "[^;\r\n]",
|
||||||
what)) {
|
what)) {
|
||||||
if(Curl_ascii_equal("secure", what)) {
|
if(Curl_raw_equal("secure", what)) {
|
||||||
co->secure = TRUE;
|
co->secure = TRUE;
|
||||||
}
|
}
|
||||||
else if (Curl_ascii_equal("httponly", what)) {
|
else if (Curl_raw_equal("httponly", what)) {
|
||||||
co->httponly = TRUE;
|
co->httponly = TRUE;
|
||||||
}
|
}
|
||||||
/* else,
|
/* else,
|
||||||
@ -498,7 +498,7 @@ Curl_cookie_add(struct SessionHandle *data,
|
|||||||
As far as I can see, it is set to true when the cookie says
|
As far as I can see, it is set to true when the cookie says
|
||||||
.domain.com and to false when the domain is complete www.domain.com
|
.domain.com and to false when the domain is complete www.domain.com
|
||||||
*/
|
*/
|
||||||
co->tailmatch=(bool)Curl_ascii_equal(ptr, "TRUE"); /* store information */
|
co->tailmatch=(bool)Curl_raw_equal(ptr, "TRUE"); /* store information */
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
/* It turns out, that sometimes the file format allows the path
|
/* It turns out, that sometimes the file format allows the path
|
||||||
@ -518,7 +518,7 @@ Curl_cookie_add(struct SessionHandle *data,
|
|||||||
fields++; /* add a field and fall down to secure */
|
fields++; /* add a field and fall down to secure */
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
case 3:
|
case 3:
|
||||||
co->secure = (bool)Curl_ascii_equal(ptr, "TRUE");
|
co->secure = (bool)Curl_raw_equal(ptr, "TRUE");
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
co->expires = curlx_strtoofft(ptr, NULL, 10);
|
co->expires = curlx_strtoofft(ptr, NULL, 10);
|
||||||
@ -571,11 +571,11 @@ Curl_cookie_add(struct SessionHandle *data,
|
|||||||
clist = c->cookies;
|
clist = c->cookies;
|
||||||
replace_old = FALSE;
|
replace_old = FALSE;
|
||||||
while(clist) {
|
while(clist) {
|
||||||
if(Curl_ascii_equal(clist->name, co->name)) {
|
if(Curl_raw_equal(clist->name, co->name)) {
|
||||||
/* the names are identical */
|
/* the names are identical */
|
||||||
|
|
||||||
if(clist->domain && co->domain) {
|
if(clist->domain && co->domain) {
|
||||||
if(Curl_ascii_equal(clist->domain, co->domain))
|
if(Curl_raw_equal(clist->domain, co->domain))
|
||||||
/* The domains are identical */
|
/* The domains are identical */
|
||||||
replace_old=TRUE;
|
replace_old=TRUE;
|
||||||
}
|
}
|
||||||
@ -586,7 +586,7 @@ Curl_cookie_add(struct SessionHandle *data,
|
|||||||
/* the domains were identical */
|
/* the domains were identical */
|
||||||
|
|
||||||
if(clist->path && co->path) {
|
if(clist->path && co->path) {
|
||||||
if(Curl_ascii_equal(clist->path, co->path)) {
|
if(Curl_raw_equal(clist->path, co->path)) {
|
||||||
replace_old = TRUE;
|
replace_old = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -778,7 +778,7 @@ struct Cookie *Curl_cookie_getlist(struct CookieInfo *c,
|
|||||||
/* now check if the domain is correct */
|
/* now check if the domain is correct */
|
||||||
if(!co->domain ||
|
if(!co->domain ||
|
||||||
(co->tailmatch && tailmatch(co->domain, host)) ||
|
(co->tailmatch && tailmatch(co->domain, host)) ||
|
||||||
(!co->tailmatch && Curl_ascii_equal(host, co->domain)) ) {
|
(!co->tailmatch && Curl_raw_equal(host, co->domain)) ) {
|
||||||
/* the right part of the host matches the domain stuff in the
|
/* the right part of the host matches the domain stuff in the
|
||||||
cookie data */
|
cookie data */
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@
|
|||||||
#define curlx_getenv curl_getenv
|
#define curlx_getenv curl_getenv
|
||||||
#define curlx_strequal curl_strequal
|
#define curlx_strequal curl_strequal
|
||||||
#define curlx_strnequal curl_strnequal
|
#define curlx_strnequal curl_strnequal
|
||||||
#define curlx_ascii_equal Curl_ascii_equal
|
#define curlx_raw_equal Curl_raw_equal
|
||||||
#define curlx_mvsnprintf curl_mvsnprintf
|
#define curlx_mvsnprintf curl_mvsnprintf
|
||||||
#define curlx_msnprintf curl_msnprintf
|
#define curlx_msnprintf curl_msnprintf
|
||||||
#define curlx_maprintf curl_maprintf
|
#define curlx_maprintf curl_maprintf
|
||||||
|
@ -223,9 +223,9 @@ static gnutls_x509_crt_fmt do_file_type(const char *type)
|
|||||||
{
|
{
|
||||||
if(!type || !type[0])
|
if(!type || !type[0])
|
||||||
return GNUTLS_X509_FMT_PEM;
|
return GNUTLS_X509_FMT_PEM;
|
||||||
if(Curl_ascii_equal(type, "PEM"))
|
if(Curl_raw_equal(type, "PEM"))
|
||||||
return GNUTLS_X509_FMT_PEM;
|
return GNUTLS_X509_FMT_PEM;
|
||||||
if(Curl_ascii_equal(type, "DER"))
|
if(Curl_raw_equal(type, "DER"))
|
||||||
return GNUTLS_X509_FMT_DER;
|
return GNUTLS_X509_FMT_DER;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -613,7 +613,7 @@ http_output_auth(struct connectdata *conn,
|
|||||||
if(!data->state.this_is_a_follow ||
|
if(!data->state.this_is_a_follow ||
|
||||||
conn->bits.netrc ||
|
conn->bits.netrc ||
|
||||||
!data->state.first_host ||
|
!data->state.first_host ||
|
||||||
Curl_ascii_equal(data->state.first_host, conn->host.name) ||
|
Curl_raw_equal(data->state.first_host, conn->host.name) ||
|
||||||
data->set.http_disable_hostname_check_before_authentication) {
|
data->set.http_disable_hostname_check_before_authentication) {
|
||||||
|
|
||||||
/* Send web authentication header if needed */
|
/* Send web authentication header if needed */
|
||||||
@ -2185,7 +2185,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
|||||||
|
|
||||||
ptr = checkheaders(data, "Host:");
|
ptr = checkheaders(data, "Host:");
|
||||||
if(ptr && (!data->state.this_is_a_follow ||
|
if(ptr && (!data->state.this_is_a_follow ||
|
||||||
Curl_ascii_equal(data->state.first_host, conn->host.name))) {
|
Curl_raw_equal(data->state.first_host, conn->host.name))) {
|
||||||
#if !defined(CURL_DISABLE_COOKIES)
|
#if !defined(CURL_DISABLE_COOKIES)
|
||||||
/* If we have a given custom Host: header, we extract the host name in
|
/* If we have a given custom Host: header, we extract the host name in
|
||||||
order to possibly use it for cookie reasons later on. We only allow the
|
order to possibly use it for cookie reasons later on. We only allow the
|
||||||
|
@ -110,28 +110,28 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
|
|||||||
*/
|
*/
|
||||||
content[0]=0;
|
content[0]=0;
|
||||||
}
|
}
|
||||||
if(Curl_ascii_equal(value, "nonce")) {
|
if(Curl_raw_equal(value, "nonce")) {
|
||||||
d->nonce = strdup(content);
|
d->nonce = strdup(content);
|
||||||
if(!d->nonce)
|
if(!d->nonce)
|
||||||
return CURLDIGEST_NOMEM;
|
return CURLDIGEST_NOMEM;
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal(value, "stale")) {
|
else if(Curl_raw_equal(value, "stale")) {
|
||||||
if(Curl_ascii_equal(content, "true")) {
|
if(Curl_raw_equal(content, "true")) {
|
||||||
d->stale = TRUE;
|
d->stale = TRUE;
|
||||||
d->nc = 1; /* we make a new nonce now */
|
d->nc = 1; /* we make a new nonce now */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal(value, "realm")) {
|
else if(Curl_raw_equal(value, "realm")) {
|
||||||
d->realm = strdup(content);
|
d->realm = strdup(content);
|
||||||
if(!d->realm)
|
if(!d->realm)
|
||||||
return CURLDIGEST_NOMEM;
|
return CURLDIGEST_NOMEM;
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal(value, "opaque")) {
|
else if(Curl_raw_equal(value, "opaque")) {
|
||||||
d->opaque = strdup(content);
|
d->opaque = strdup(content);
|
||||||
if(!d->opaque)
|
if(!d->opaque)
|
||||||
return CURLDIGEST_NOMEM;
|
return CURLDIGEST_NOMEM;
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal(value, "qop")) {
|
else if(Curl_raw_equal(value, "qop")) {
|
||||||
char *tok_buf;
|
char *tok_buf;
|
||||||
/* tokenize the list and choose auth if possible, use a temporary
|
/* tokenize the list and choose auth if possible, use a temporary
|
||||||
clone of the buffer since strtok_r() ruins it */
|
clone of the buffer since strtok_r() ruins it */
|
||||||
@ -140,10 +140,10 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
|
|||||||
return CURLDIGEST_NOMEM;
|
return CURLDIGEST_NOMEM;
|
||||||
token = strtok_r(tmp, ",", &tok_buf);
|
token = strtok_r(tmp, ",", &tok_buf);
|
||||||
while(token != NULL) {
|
while(token != NULL) {
|
||||||
if(Curl_ascii_equal(token, "auth")) {
|
if(Curl_raw_equal(token, "auth")) {
|
||||||
foundAuth = TRUE;
|
foundAuth = TRUE;
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal(token, "auth-int")) {
|
else if(Curl_raw_equal(token, "auth-int")) {
|
||||||
foundAuthInt = TRUE;
|
foundAuthInt = TRUE;
|
||||||
}
|
}
|
||||||
token = strtok_r(NULL, ",", &tok_buf);
|
token = strtok_r(NULL, ",", &tok_buf);
|
||||||
@ -161,13 +161,13 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
|
|||||||
return CURLDIGEST_NOMEM;
|
return CURLDIGEST_NOMEM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal(value, "algorithm")) {
|
else if(Curl_raw_equal(value, "algorithm")) {
|
||||||
d->algorithm = strdup(content);
|
d->algorithm = strdup(content);
|
||||||
if(!d->algorithm)
|
if(!d->algorithm)
|
||||||
return CURLDIGEST_NOMEM;
|
return CURLDIGEST_NOMEM;
|
||||||
if(Curl_ascii_equal(content, "MD5-sess"))
|
if(Curl_raw_equal(content, "MD5-sess"))
|
||||||
d->algo = CURLDIGESTALGO_MD5SESS;
|
d->algo = CURLDIGESTALGO_MD5SESS;
|
||||||
else if(Curl_ascii_equal(content, "MD5"))
|
else if(Curl_raw_equal(content, "MD5"))
|
||||||
d->algo = CURLDIGESTALGO_MD5;
|
d->algo = CURLDIGESTALGO_MD5;
|
||||||
else
|
else
|
||||||
return CURLDIGEST_BADALGO;
|
return CURLDIGEST_BADALGO;
|
||||||
@ -362,7 +362,7 @@ CURLcode Curl_output_digest(struct connectdata *conn,
|
|||||||
return CURLE_OUT_OF_MEMORY;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(d->qop && Curl_ascii_equal(d->qop, "auth-int")) {
|
if(d->qop && Curl_raw_equal(d->qop, "auth-int")) {
|
||||||
/* We don't support auth-int at the moment. I can't see a easy way to get
|
/* We don't support auth-int at the moment. I can't see a easy way to get
|
||||||
entity-body here */
|
entity-body here */
|
||||||
/* TODO: Append H(entity-body)*/
|
/* TODO: Append H(entity-body)*/
|
||||||
@ -423,7 +423,7 @@ CURLcode Curl_output_digest(struct connectdata *conn,
|
|||||||
d->qop,
|
d->qop,
|
||||||
request_digest);
|
request_digest);
|
||||||
|
|
||||||
if(Curl_ascii_equal(d->qop, "auth"))
|
if(Curl_raw_equal(d->qop, "auth"))
|
||||||
d->nc++; /* The nc (from RFC) has to be a 8 hex digit number 0 padded
|
d->nc++; /* The nc (from RFC) has to be a 8 hex digit number 0 padded
|
||||||
which tells to the server how many times you are using the
|
which tells to the server how many times you are using the
|
||||||
same nonce in the qop=auth mode. */
|
same nonce in the qop=auth mode. */
|
||||||
|
@ -198,7 +198,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Get the URL scheme ( either ldap or ldaps ) */
|
/* Get the URL scheme ( either ldap or ldaps ) */
|
||||||
if(Curl_ascii_equal(conn->protostr, "LDAPS"))
|
if(Curl_raw_equal(conn->protostr, "LDAPS"))
|
||||||
ldap_ssl = 1;
|
ldap_ssl = 1;
|
||||||
infof(data, "LDAP local: trying to establish %s connection\n",
|
infof(data, "LDAP local: trying to establish %s connection\n",
|
||||||
ldap_ssl ? "encrypted" : "cleartext");
|
ldap_ssl ? "encrypted" : "cleartext");
|
||||||
@ -228,7 +228,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
|
|||||||
/* Novell SDK supports DER or BASE64 files. */
|
/* Novell SDK supports DER or BASE64 files. */
|
||||||
int cert_type = LDAPSSL_CERT_FILETYPE_B64;
|
int cert_type = LDAPSSL_CERT_FILETYPE_B64;
|
||||||
if((data->set.str[STRING_CERT_TYPE]) &&
|
if((data->set.str[STRING_CERT_TYPE]) &&
|
||||||
(Curl_ascii_equal(data->set.str[STRING_CERT_TYPE], "DER")))
|
(Curl_raw_equal(data->set.str[STRING_CERT_TYPE], "DER")))
|
||||||
cert_type = LDAPSSL_CERT_FILETYPE_DER;
|
cert_type = LDAPSSL_CERT_FILETYPE_DER;
|
||||||
if(!ldap_ca) {
|
if(!ldap_ca) {
|
||||||
failf(data, "LDAP local: ERROR %s CA cert not set!",
|
failf(data, "LDAP local: ERROR %s CA cert not set!",
|
||||||
@ -269,7 +269,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
|
|||||||
if(data->set.ssl.verifypeer) {
|
if(data->set.ssl.verifypeer) {
|
||||||
/* OpenLDAP SDK supports BASE64 files. */
|
/* OpenLDAP SDK supports BASE64 files. */
|
||||||
if((data->set.str[STRING_CERT_TYPE]) &&
|
if((data->set.str[STRING_CERT_TYPE]) &&
|
||||||
(!Curl_ascii_equal(data->set.str[STRING_CERT_TYPE], "PEM"))) {
|
(!Curl_raw_equal(data->set.str[STRING_CERT_TYPE], "PEM"))) {
|
||||||
failf(data, "LDAP local: ERROR OpenLDAP does only support PEM cert-type!");
|
failf(data, "LDAP local: ERROR OpenLDAP does only support PEM cert-type!");
|
||||||
status = CURLE_SSL_CERTPROBLEM;
|
status = CURLE_SSL_CERTPROBLEM;
|
||||||
goto quit;
|
goto quit;
|
||||||
|
12
lib/netrc.c
12
lib/netrc.c
@ -155,7 +155,7 @@ int Curl_parsenetrc(const char *host,
|
|||||||
|
|
||||||
switch(state) {
|
switch(state) {
|
||||||
case NOTHING:
|
case NOTHING:
|
||||||
if(Curl_ascii_equal("machine", tok)) {
|
if(Curl_raw_equal("machine", tok)) {
|
||||||
/* the next tok is the machine name, this is in itself the
|
/* the next tok is the machine name, this is in itself the
|
||||||
delimiter that starts the stuff entered for this machine,
|
delimiter that starts the stuff entered for this machine,
|
||||||
after this we need to search for 'login' and
|
after this we need to search for 'login' and
|
||||||
@ -164,7 +164,7 @@ int Curl_parsenetrc(const char *host,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HOSTFOUND:
|
case HOSTFOUND:
|
||||||
if(Curl_ascii_equal(host, tok)) {
|
if(Curl_raw_equal(host, tok)) {
|
||||||
/* and yes, this is our host! */
|
/* and yes, this is our host! */
|
||||||
state=HOSTVALID;
|
state=HOSTVALID;
|
||||||
#ifdef _NETRC_DEBUG
|
#ifdef _NETRC_DEBUG
|
||||||
@ -180,7 +180,7 @@ int Curl_parsenetrc(const char *host,
|
|||||||
/* we are now parsing sub-keywords concerning "our" host */
|
/* we are now parsing sub-keywords concerning "our" host */
|
||||||
if(state_login) {
|
if(state_login) {
|
||||||
if(specific_login) {
|
if(specific_login) {
|
||||||
state_our_login = Curl_ascii_equal(login, tok);
|
state_our_login = Curl_raw_equal(login, tok);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
strncpy(login, tok, LOGINSIZE-1);
|
strncpy(login, tok, LOGINSIZE-1);
|
||||||
@ -199,11 +199,11 @@ int Curl_parsenetrc(const char *host,
|
|||||||
}
|
}
|
||||||
state_password=0;
|
state_password=0;
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal("login", tok))
|
else if(Curl_raw_equal("login", tok))
|
||||||
state_login=1;
|
state_login=1;
|
||||||
else if(Curl_ascii_equal("password", tok))
|
else if(Curl_raw_equal("password", tok))
|
||||||
state_password=1;
|
state_password=1;
|
||||||
else if(Curl_ascii_equal("machine", tok)) {
|
else if(Curl_raw_equal("machine", tok)) {
|
||||||
/* ok, there's machine here go => */
|
/* ok, there's machine here go => */
|
||||||
state = HOSTFOUND;
|
state = HOSTFOUND;
|
||||||
state_our_login = FALSE;
|
state_our_login = FALSE;
|
||||||
|
@ -201,7 +201,7 @@ static SECStatus set_ciphers(struct SessionHandle *data, PRFileDesc * model,
|
|||||||
found = PR_FALSE;
|
found = PR_FALSE;
|
||||||
|
|
||||||
for(i=0; i<NUM_OF_CIPHERS; i++) {
|
for(i=0; i<NUM_OF_CIPHERS; i++) {
|
||||||
if(Curl_ascii_equal(cipher, cipherlist[i].name)) {
|
if(Curl_raw_equal(cipher, cipherlist[i].name)) {
|
||||||
cipher_state[i] = PR_TRUE;
|
cipher_state[i] = PR_TRUE;
|
||||||
found = PR_TRUE;
|
found = PR_TRUE;
|
||||||
break;
|
break;
|
||||||
|
@ -164,7 +164,7 @@ static int checkday(const char *check, size_t len)
|
|||||||
else
|
else
|
||||||
what = &Curl_wkday[0];
|
what = &Curl_wkday[0];
|
||||||
for(i=0; i<7; i++) {
|
for(i=0; i<7; i++) {
|
||||||
if(Curl_ascii_equal(check, what[0])) {
|
if(Curl_raw_equal(check, what[0])) {
|
||||||
found=TRUE;
|
found=TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -181,7 +181,7 @@ static int checkmonth(const char *check)
|
|||||||
|
|
||||||
what = &Curl_month[0];
|
what = &Curl_month[0];
|
||||||
for(i=0; i<12; i++) {
|
for(i=0; i<12; i++) {
|
||||||
if(Curl_ascii_equal(check, what[0])) {
|
if(Curl_raw_equal(check, what[0])) {
|
||||||
found=TRUE;
|
found=TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -201,7 +201,7 @@ static int checktz(const char *check)
|
|||||||
|
|
||||||
what = tz;
|
what = tz;
|
||||||
for(i=0; i< sizeof(tz)/sizeof(tz[0]); i++) {
|
for(i=0; i< sizeof(tz)/sizeof(tz[0]); i++) {
|
||||||
if(Curl_ascii_equal(check, what->name)) {
|
if(Curl_raw_equal(check, what->name)) {
|
||||||
found=TRUE;
|
found=TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
10
lib/ssluse.c
10
lib/ssluse.c
@ -284,13 +284,13 @@ static int do_file_type(const char *type)
|
|||||||
{
|
{
|
||||||
if(!type || !type[0])
|
if(!type || !type[0])
|
||||||
return SSL_FILETYPE_PEM;
|
return SSL_FILETYPE_PEM;
|
||||||
if(Curl_ascii_equal(type, "PEM"))
|
if(Curl_raw_equal(type, "PEM"))
|
||||||
return SSL_FILETYPE_PEM;
|
return SSL_FILETYPE_PEM;
|
||||||
if(Curl_ascii_equal(type, "DER"))
|
if(Curl_raw_equal(type, "DER"))
|
||||||
return SSL_FILETYPE_ASN1;
|
return SSL_FILETYPE_ASN1;
|
||||||
if(Curl_ascii_equal(type, "ENG"))
|
if(Curl_raw_equal(type, "ENG"))
|
||||||
return SSL_FILETYPE_ENGINE;
|
return SSL_FILETYPE_ENGINE;
|
||||||
if(Curl_ascii_equal(type, "P12"))
|
if(Curl_raw_equal(type, "P12"))
|
||||||
return SSL_FILETYPE_PKCS12;
|
return SSL_FILETYPE_PKCS12;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1010,7 +1010,7 @@ cert_hostcheck(const char *match_pattern, const char *hostname)
|
|||||||
!hostname || !*hostname) /* sanity check */
|
!hostname || !*hostname) /* sanity check */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if(Curl_ascii_equal(hostname, match_pattern)) /* trivial case */
|
if(Curl_raw_equal(hostname, match_pattern)) /* trivial case */
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if(hostmatch(hostname,match_pattern) == HOST_MATCH)
|
if(hostmatch(hostname,match_pattern) == HOST_MATCH)
|
||||||
|
@ -78,7 +78,7 @@ int curl_strnequal(const char *first, const char *second, size_t max)
|
|||||||
|
|
||||||
/* Portable toupper (remember EBCDIC). Do not use tupper() because
|
/* Portable toupper (remember EBCDIC). Do not use tupper() because
|
||||||
its behavior is altered by the current locale. */
|
its behavior is altered by the current locale. */
|
||||||
static bool my_toupper(unsigned char in)
|
static unsigned char my_toupper(unsigned char in)
|
||||||
{
|
{
|
||||||
switch (in) {
|
switch (in) {
|
||||||
case 'a':
|
case 'a':
|
||||||
@ -138,17 +138,18 @@ static bool my_toupper(unsigned char in)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Curl_ascii_equal() is for doing "ascii" case insensitive strings. This is
|
* Curl_raw_equal() is for doing "raw" case insensitive strings. This is meant
|
||||||
* meant to be locale independent and only compare strings we know are safe
|
* to be locale independent and only compare strings we know are safe for
|
||||||
* for this.
|
* this. See http://daniel.haxx.se/blog/2008/10/15/strcasecmp-in-turkish/ for
|
||||||
* See http://daniel.haxx.se/blog/2008/10/15/strcasecmp-in-turkish/ for some
|
* some further explanation to why this function is necessary.
|
||||||
* further explanation to why this function is necessary.
|
*
|
||||||
|
* The function is capable of comparing a-z case insensitively even for non-ascii.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int Curl_ascii_equal(const char *first, const char *second)
|
int Curl_raw_equal(const char *first, const char *second)
|
||||||
{
|
{
|
||||||
while(*first && *second) {
|
while(*first && *second) {
|
||||||
if(! (my_toupper(*first) == my_toupper(*second)))
|
if(my_toupper(*first) != my_toupper(*second))
|
||||||
/* get out of the loop as soon as they don't match */
|
/* get out of the loop as soon as they don't match */
|
||||||
break;
|
break;
|
||||||
first++;
|
first++;
|
||||||
|
@ -33,11 +33,13 @@
|
|||||||
#define checkprefix(a,b) strnequal(a,b,strlen(a))
|
#define checkprefix(a,b) strnequal(a,b,strlen(a))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Curl_ascii_equal() is for doing "ascii" case insensitive strings. This is
|
* Curl_raw_equal() is for doing "raw" case insensitive strings. This is meant
|
||||||
* meant to be locale independent and only compare strings we know are safe
|
* to be locale independent and only compare strings we know are safe for
|
||||||
* for this.
|
* this.
|
||||||
|
*
|
||||||
|
* The function is capable of comparing a-z case insensitively even for non-ascii.
|
||||||
*/
|
*/
|
||||||
int Curl_ascii_equal(const char *first, const char *second);
|
int Curl_raw_equal(const char *first, const char *second);
|
||||||
|
|
||||||
#ifndef HAVE_STRLCAT
|
#ifndef HAVE_STRLCAT
|
||||||
#define strlcat(x,y,z) Curl_strlcat(x,y,z)
|
#define strlcat(x,y,z) Curl_strlcat(x,y,z)
|
||||||
|
@ -834,7 +834,7 @@ static CURLcode check_telnet_options(struct connectdata *conn)
|
|||||||
option_keyword, option_arg) == 2) {
|
option_keyword, option_arg) == 2) {
|
||||||
|
|
||||||
/* Terminal type */
|
/* Terminal type */
|
||||||
if(Curl_ascii_equal(option_keyword, "TTYPE")) {
|
if(Curl_raw_equal(option_keyword, "TTYPE")) {
|
||||||
strncpy(tn->subopt_ttype, option_arg, 31);
|
strncpy(tn->subopt_ttype, option_arg, 31);
|
||||||
tn->subopt_ttype[31] = 0; /* String termination */
|
tn->subopt_ttype[31] = 0; /* String termination */
|
||||||
tn->us_preferred[CURL_TELOPT_TTYPE] = CURL_YES;
|
tn->us_preferred[CURL_TELOPT_TTYPE] = CURL_YES;
|
||||||
@ -842,7 +842,7 @@ static CURLcode check_telnet_options(struct connectdata *conn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Display variable */
|
/* Display variable */
|
||||||
if(Curl_ascii_equal(option_keyword, "XDISPLOC")) {
|
if(Curl_raw_equal(option_keyword, "XDISPLOC")) {
|
||||||
strncpy(tn->subopt_xdisploc, option_arg, 127);
|
strncpy(tn->subopt_xdisploc, option_arg, 127);
|
||||||
tn->subopt_xdisploc[127] = 0; /* String termination */
|
tn->subopt_xdisploc[127] = 0; /* String termination */
|
||||||
tn->us_preferred[CURL_TELOPT_XDISPLOC] = CURL_YES;
|
tn->us_preferred[CURL_TELOPT_XDISPLOC] = CURL_YES;
|
||||||
@ -850,7 +850,7 @@ static CURLcode check_telnet_options(struct connectdata *conn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Environment variable */
|
/* Environment variable */
|
||||||
if(Curl_ascii_equal(option_keyword, "NEW_ENV")) {
|
if(Curl_raw_equal(option_keyword, "NEW_ENV")) {
|
||||||
buf = strdup(option_arg);
|
buf = strdup(option_arg);
|
||||||
if(!buf)
|
if(!buf)
|
||||||
return CURLE_OUT_OF_MEMORY;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
|
24
lib/url.c
24
lib/url.c
@ -1216,17 +1216,17 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
|
|||||||
if(argptr == NULL)
|
if(argptr == NULL)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if(Curl_ascii_equal(argptr, "ALL")) {
|
if(Curl_raw_equal(argptr, "ALL")) {
|
||||||
/* clear all cookies */
|
/* clear all cookies */
|
||||||
Curl_cookie_clearall(data->cookies);
|
Curl_cookie_clearall(data->cookies);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal(argptr, "SESS")) {
|
else if(Curl_raw_equal(argptr, "SESS")) {
|
||||||
/* clear session cookies */
|
/* clear session cookies */
|
||||||
Curl_cookie_clearsess(data->cookies);
|
Curl_cookie_clearsess(data->cookies);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if(Curl_ascii_equal(argptr, "FLUSH")) {
|
else if(Curl_raw_equal(argptr, "FLUSH")) {
|
||||||
/* flush cookies to file */
|
/* flush cookies to file */
|
||||||
flush_cookies(data, 0);
|
flush_cookies(data, 0);
|
||||||
break;
|
break;
|
||||||
@ -2496,14 +2496,14 @@ ConnectionExists(struct SessionHandle *data,
|
|||||||
if(!needle->bits.httpproxy || needle->protocol&PROT_SSL ||
|
if(!needle->bits.httpproxy || needle->protocol&PROT_SSL ||
|
||||||
(needle->bits.httpproxy && check->bits.httpproxy &&
|
(needle->bits.httpproxy && check->bits.httpproxy &&
|
||||||
needle->bits.tunnel_proxy && check->bits.tunnel_proxy &&
|
needle->bits.tunnel_proxy && check->bits.tunnel_proxy &&
|
||||||
Curl_ascii_equal(needle->proxy.name, check->proxy.name) &&
|
Curl_raw_equal(needle->proxy.name, check->proxy.name) &&
|
||||||
(needle->port == check->port))) {
|
(needle->port == check->port))) {
|
||||||
/* The requested connection does not use a HTTP proxy or it uses SSL or
|
/* The requested connection does not use a HTTP proxy or it uses SSL or
|
||||||
it is a non-SSL protocol tunneled over the same http proxy name and
|
it is a non-SSL protocol tunneled over the same http proxy name and
|
||||||
port number */
|
port number */
|
||||||
|
|
||||||
if(Curl_ascii_equal(needle->protostr, check->protostr) &&
|
if(Curl_raw_equal(needle->protostr, check->protostr) &&
|
||||||
Curl_ascii_equal(needle->host.name, check->host.name) &&
|
Curl_raw_equal(needle->host.name, check->host.name) &&
|
||||||
(needle->remote_port == check->remote_port) ) {
|
(needle->remote_port == check->remote_port) ) {
|
||||||
if(needle->protocol & PROT_SSL) {
|
if(needle->protocol & PROT_SSL) {
|
||||||
/* This is SSL, verify that we're using the same
|
/* This is SSL, verify that we're using the same
|
||||||
@ -2542,7 +2542,7 @@ ConnectionExists(struct SessionHandle *data,
|
|||||||
is the checked one using the same host, port and type? */
|
is the checked one using the same host, port and type? */
|
||||||
if(check->bits.proxy &&
|
if(check->bits.proxy &&
|
||||||
(needle->proxytype == check->proxytype) &&
|
(needle->proxytype == check->proxytype) &&
|
||||||
Curl_ascii_equal(needle->proxy.name, check->proxy.name) &&
|
Curl_raw_equal(needle->proxy.name, check->proxy.name) &&
|
||||||
needle->port == check->port) {
|
needle->port == check->port) {
|
||||||
/* This is the same proxy connection, use it! */
|
/* This is the same proxy connection, use it! */
|
||||||
match = TRUE;
|
match = TRUE;
|
||||||
@ -3021,7 +3021,7 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
|
|||||||
************************************************************/
|
************************************************************/
|
||||||
if((2 == sscanf(data->change.url, "%15[^:]:%[^\n]",
|
if((2 == sscanf(data->change.url, "%15[^:]:%[^\n]",
|
||||||
conn->protostr,
|
conn->protostr,
|
||||||
path)) && Curl_ascii_equal(conn->protostr, "file")) {
|
path)) && Curl_raw_equal(conn->protostr, "file")) {
|
||||||
if(path[0] == '/' && path[1] == '/') {
|
if(path[0] == '/' && path[1] == '/') {
|
||||||
/* Allow omitted hostname (e.g. file:/<path>). This is not strictly
|
/* Allow omitted hostname (e.g. file:/<path>). This is not strictly
|
||||||
* speaking a valid file: URL by RFC 1738, but treating file:/<path> as
|
* speaking a valid file: URL by RFC 1738, but treating file:/<path> as
|
||||||
@ -3256,7 +3256,7 @@ static CURLcode setup_connection_internals(struct SessionHandle *data,
|
|||||||
/* Scan protocol handler table. */
|
/* Scan protocol handler table. */
|
||||||
|
|
||||||
for (pp = protocols; (p = *pp) != NULL; pp++)
|
for (pp = protocols; (p = *pp) != NULL; pp++)
|
||||||
if(Curl_ascii_equal(p->scheme, conn->protostr)) {
|
if(Curl_raw_equal(p->scheme, conn->protostr)) {
|
||||||
/* Protocol found in table. Perform setup complement if some. */
|
/* Protocol found in table. Perform setup complement if some. */
|
||||||
conn->handler = p;
|
conn->handler = p;
|
||||||
|
|
||||||
@ -3370,7 +3370,7 @@ static char *detect_proxy(struct connectdata *conn)
|
|||||||
* This can cause 'internal' http/ftp requests to be
|
* This can cause 'internal' http/ftp requests to be
|
||||||
* arbitrarily redirected by any external attacker.
|
* arbitrarily redirected by any external attacker.
|
||||||
*/
|
*/
|
||||||
if(!prox && !Curl_ascii_equal("http_proxy", proxy_env)) {
|
if(!prox && !Curl_raw_equal("http_proxy", proxy_env)) {
|
||||||
/* There was no lowercase variable, try the uppercase version: */
|
/* There was no lowercase variable, try the uppercase version: */
|
||||||
for(envp = proxy_env; *envp; envp++)
|
for(envp = proxy_env; *envp; envp++)
|
||||||
*envp = (char)toupper((int)*envp);
|
*envp = (char)toupper((int)*envp);
|
||||||
@ -3691,8 +3691,8 @@ static CURLcode parse_remote_port(struct SessionHandle *data,
|
|||||||
if(conn->bits.httpproxy) {
|
if(conn->bits.httpproxy) {
|
||||||
/* we need to create new URL with the new port number */
|
/* we need to create new URL with the new port number */
|
||||||
char *url;
|
char *url;
|
||||||
bool isftp = (bool)(Curl_ascii_equal("ftp", conn->protostr) ||
|
bool isftp = (bool)(Curl_raw_equal("ftp", conn->protostr) ||
|
||||||
Curl_ascii_equal("ftps", conn->protostr));
|
Curl_raw_equal("ftps", conn->protostr));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This synthesized URL isn't always right--suffixes like ;type=A
|
* This synthesized URL isn't always right--suffixes like ;type=A
|
||||||
|
14
src/main.c
14
src/main.c
@ -1501,11 +1501,11 @@ static ParameterError add2list(struct curl_slist **list,
|
|||||||
|
|
||||||
static int ftpfilemethod(struct Configurable *config, const char *str)
|
static int ftpfilemethod(struct Configurable *config, const char *str)
|
||||||
{
|
{
|
||||||
if(curlx_ascii_equal("singlecwd", str))
|
if(curlx_raw_equal("singlecwd", str))
|
||||||
return CURLFTPMETHOD_SINGLECWD;
|
return CURLFTPMETHOD_SINGLECWD;
|
||||||
if(curlx_ascii_equal("nocwd", str))
|
if(curlx_raw_equal("nocwd", str))
|
||||||
return CURLFTPMETHOD_NOCWD;
|
return CURLFTPMETHOD_NOCWD;
|
||||||
if(curlx_ascii_equal("multicwd", str))
|
if(curlx_raw_equal("multicwd", str))
|
||||||
return CURLFTPMETHOD_MULTICWD;
|
return CURLFTPMETHOD_MULTICWD;
|
||||||
warnf(config, "unrecognized ftp file method '%s', using default\n", str);
|
warnf(config, "unrecognized ftp file method '%s', using default\n", str);
|
||||||
return CURLFTPMETHOD_MULTICWD;
|
return CURLFTPMETHOD_MULTICWD;
|
||||||
@ -1513,9 +1513,9 @@ static int ftpfilemethod(struct Configurable *config, const char *str)
|
|||||||
|
|
||||||
static int ftpcccmethod(struct Configurable *config, const char *str)
|
static int ftpcccmethod(struct Configurable *config, const char *str)
|
||||||
{
|
{
|
||||||
if(curlx_ascii_equal("passive", str))
|
if(curlx_raw_equal("passive", str))
|
||||||
return CURLFTPSSL_CCC_PASSIVE;
|
return CURLFTPSSL_CCC_PASSIVE;
|
||||||
if(curlx_ascii_equal("active", str))
|
if(curlx_raw_equal("active", str))
|
||||||
return CURLFTPSSL_CCC_ACTIVE;
|
return CURLFTPSSL_CCC_ACTIVE;
|
||||||
warnf(config, "unrecognized ftp CCC method '%s', using default\n", str);
|
warnf(config, "unrecognized ftp CCC method '%s', using default\n", str);
|
||||||
return CURLFTPSSL_CCC_PASSIVE;
|
return CURLFTPSSL_CCC_PASSIVE;
|
||||||
@ -1765,7 +1765,7 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
|
|||||||
if(curlx_strnequal(aliases[j].lname, word, fnam)) {
|
if(curlx_strnequal(aliases[j].lname, word, fnam)) {
|
||||||
longopt = TRUE;
|
longopt = TRUE;
|
||||||
numhits++;
|
numhits++;
|
||||||
if(curlx_ascii_equal(aliases[j].lname, word)) {
|
if(curlx_raw_equal(aliases[j].lname, word)) {
|
||||||
parse = aliases[j].letter;
|
parse = aliases[j].letter;
|
||||||
hit = j;
|
hit = j;
|
||||||
numhits = 1; /* a single unique hit */
|
numhits = 1; /* a single unique hit */
|
||||||
@ -2450,7 +2450,7 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
|
|||||||
break;
|
break;
|
||||||
case 'f': /* crypto engine */
|
case 'f': /* crypto engine */
|
||||||
GetStr(&config->engine, nextarg);
|
GetStr(&config->engine, nextarg);
|
||||||
if (config->engine && curlx_ascii_equal(config->engine,"list"))
|
if (config->engine && curlx_raw_equal(config->engine,"list"))
|
||||||
config->list_engines = TRUE;
|
config->list_engines = TRUE;
|
||||||
break;
|
break;
|
||||||
case 'g': /* CA info PEM file */
|
case 'g': /* CA info PEM file */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user