Loading lib/imap.c +33 −21 Original line number Diff line number Diff line Loading @@ -2312,52 +2312,64 @@ static CURLcode imap_parse_url_options(struct connectdata *conn) struct imap_conn *imapc = &conn->proto.imapc; const char *options = conn->options; const char *ptr = options; bool reset = TRUE; if(options) { while(*ptr) { const char *key = ptr; while(*ptr && *ptr != '=') ptr++; if(strnequal(key, "AUTH", 4)) { const char *value = ptr + 1; size_t len = 0; const char *value = ++ptr; if(reset) { reset = FALSE; imapc->preftype = IMAP_TYPE_NONE; imapc->prefmech = SASL_AUTH_NONE; } while(*ptr && *ptr != ';') { ptr++; len++; } if(strequal(value, "*")) { if(strnequal(value, "*", len)) { imapc->preftype = IMAP_TYPE_ANY; imapc->prefmech = SASL_AUTH_ANY; } else if(strequal(value, SASL_MECH_STRING_LOGIN)) { else if(strnequal(value, SASL_MECH_STRING_LOGIN, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_LOGIN; imapc->prefmech |= SASL_MECH_LOGIN; } else if(strequal(value, SASL_MECH_STRING_PLAIN)) { else if(strnequal(value, SASL_MECH_STRING_PLAIN, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_PLAIN; imapc->prefmech |= SASL_MECH_PLAIN; } else if(strequal(value, SASL_MECH_STRING_CRAM_MD5)) { else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_CRAM_MD5; imapc->prefmech |= SASL_MECH_CRAM_MD5; } else if(strequal(value, SASL_MECH_STRING_DIGEST_MD5)) { else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_DIGEST_MD5; imapc->prefmech |= SASL_MECH_DIGEST_MD5; } else if(strequal(value, SASL_MECH_STRING_GSSAPI)) { else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_GSSAPI; imapc->prefmech |= SASL_MECH_GSSAPI; } else if(strequal(value, SASL_MECH_STRING_NTLM)) { else if(strnequal(value, SASL_MECH_STRING_NTLM, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_NTLM; imapc->prefmech |= SASL_MECH_NTLM; } else if(strequal(value, SASL_MECH_STRING_XOAUTH2)) { else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_XOAUTH2; } else { imapc->preftype = IMAP_TYPE_NONE; imapc->prefmech = SASL_AUTH_NONE; imapc->prefmech |= SASL_MECH_XOAUTH2; } if(*ptr == ';') ptr++; } else result = CURLE_URL_MALFORMAT; Loading lib/pop3.c +34 −22 Original line number Diff line number Diff line Loading @@ -1832,56 +1832,68 @@ static CURLcode pop3_parse_url_options(struct connectdata *conn) struct pop3_conn *pop3c = &conn->proto.pop3c; const char *options = conn->options; const char *ptr = options; bool reset = TRUE; if(options) { while(*ptr) { const char *key = ptr; while(*ptr && *ptr != '=') ptr++; if(strnequal(key, "AUTH", 4)) { const char *value = ptr + 1; size_t len = 0; const char *value = ++ptr; if(reset) { reset = FALSE; pop3c->preftype = POP3_TYPE_NONE; pop3c->prefmech = SASL_AUTH_NONE; } while(*ptr && *ptr != ';') { ptr++; len++; } if(strequal(value, "*")) { if(strnequal(value, "*", len)) { pop3c->preftype = POP3_TYPE_ANY; pop3c->prefmech = SASL_AUTH_ANY; } else if(strequal(value, "+APOP")) { else if(strnequal(value, "+APOP", len)) { pop3c->preftype = POP3_TYPE_APOP; pop3c->prefmech = SASL_AUTH_NONE; } else if(strequal(value, SASL_MECH_STRING_LOGIN)) { else if(strnequal(value, SASL_MECH_STRING_LOGIN, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_LOGIN; pop3c->prefmech |= SASL_MECH_LOGIN; } else if(strequal(value, SASL_MECH_STRING_PLAIN)) { else if(strnequal(value, SASL_MECH_STRING_PLAIN, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_PLAIN; pop3c->prefmech |= SASL_MECH_PLAIN; } else if(strequal(value, SASL_MECH_STRING_CRAM_MD5)) { else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_CRAM_MD5; pop3c->prefmech |= SASL_MECH_CRAM_MD5; } else if(strequal(value, SASL_MECH_STRING_DIGEST_MD5)) { else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_DIGEST_MD5; pop3c->prefmech |= SASL_MECH_DIGEST_MD5; } else if(strequal(value, SASL_MECH_STRING_GSSAPI)) { else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_GSSAPI; pop3c->prefmech |= SASL_MECH_GSSAPI; } else if(strequal(value, SASL_MECH_STRING_NTLM)) { else if(strnequal(value, SASL_MECH_STRING_NTLM, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_NTLM; pop3c->prefmech |= SASL_MECH_NTLM; } else if(strequal(value, SASL_MECH_STRING_XOAUTH2)) { else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_XOAUTH2; } else { pop3c->preftype = POP3_TYPE_NONE; pop3c->prefmech = SASL_AUTH_NONE; pop3c->prefmech |= SASL_MECH_XOAUTH2; } if(*ptr == ';') ptr++; } else result = CURLE_URL_MALFORMAT; Loading lib/smtp.c +32 −19 Original line number Diff line number Diff line Loading @@ -1927,35 +1927,48 @@ static CURLcode smtp_parse_url_options(struct connectdata *conn) struct smtp_conn *smtpc = &conn->proto.smtpc; const char *options = conn->options; const char *ptr = options; bool reset = TRUE; if(options) { while(*ptr) { const char *key = ptr; while(*ptr && *ptr != '=') ptr++; if(strnequal(key, "AUTH", 4)) { const char *value = ptr + 1; size_t len = 0; const char *value = ++ptr; if(strequal(value, "*")) smtpc->prefmech = SASL_AUTH_ANY; else if(strequal(value, SASL_MECH_STRING_LOGIN)) smtpc->prefmech = SASL_MECH_LOGIN; else if(strequal(value, SASL_MECH_STRING_PLAIN)) smtpc->prefmech = SASL_MECH_PLAIN; else if(strequal(value, SASL_MECH_STRING_CRAM_MD5)) smtpc->prefmech = SASL_MECH_CRAM_MD5; else if(strequal(value, SASL_MECH_STRING_DIGEST_MD5)) smtpc->prefmech = SASL_MECH_DIGEST_MD5; else if(strequal(value, SASL_MECH_STRING_GSSAPI)) smtpc->prefmech = SASL_MECH_GSSAPI; else if(strequal(value, SASL_MECH_STRING_NTLM)) smtpc->prefmech = SASL_MECH_NTLM; else if(strequal(value, SASL_MECH_STRING_XOAUTH2)) smtpc->prefmech = SASL_MECH_XOAUTH2; else if(reset) { reset = FALSE; smtpc->prefmech = SASL_AUTH_NONE; } while(*ptr && *ptr != ';') { ptr++; len++; } if(strnequal(value, "*", len)) smtpc->prefmech = SASL_AUTH_ANY; else if(strnequal(value, SASL_MECH_STRING_LOGIN, len)) smtpc->prefmech |= SASL_MECH_LOGIN; else if(strnequal(value, SASL_MECH_STRING_PLAIN, len)) smtpc->prefmech |= SASL_MECH_PLAIN; else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len)) smtpc->prefmech |= SASL_MECH_CRAM_MD5; else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len)) smtpc->prefmech |= SASL_MECH_DIGEST_MD5; else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len)) smtpc->prefmech |= SASL_MECH_GSSAPI; else if(strnequal(value, SASL_MECH_STRING_NTLM, len)) smtpc->prefmech |= SASL_MECH_NTLM; else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len)) smtpc->prefmech |= SASL_MECH_XOAUTH2; if(*ptr == ';') ptr++; } else result = CURLE_URL_MALFORMAT; } Loading Loading
lib/imap.c +33 −21 Original line number Diff line number Diff line Loading @@ -2312,52 +2312,64 @@ static CURLcode imap_parse_url_options(struct connectdata *conn) struct imap_conn *imapc = &conn->proto.imapc; const char *options = conn->options; const char *ptr = options; bool reset = TRUE; if(options) { while(*ptr) { const char *key = ptr; while(*ptr && *ptr != '=') ptr++; if(strnequal(key, "AUTH", 4)) { const char *value = ptr + 1; size_t len = 0; const char *value = ++ptr; if(reset) { reset = FALSE; imapc->preftype = IMAP_TYPE_NONE; imapc->prefmech = SASL_AUTH_NONE; } while(*ptr && *ptr != ';') { ptr++; len++; } if(strequal(value, "*")) { if(strnequal(value, "*", len)) { imapc->preftype = IMAP_TYPE_ANY; imapc->prefmech = SASL_AUTH_ANY; } else if(strequal(value, SASL_MECH_STRING_LOGIN)) { else if(strnequal(value, SASL_MECH_STRING_LOGIN, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_LOGIN; imapc->prefmech |= SASL_MECH_LOGIN; } else if(strequal(value, SASL_MECH_STRING_PLAIN)) { else if(strnequal(value, SASL_MECH_STRING_PLAIN, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_PLAIN; imapc->prefmech |= SASL_MECH_PLAIN; } else if(strequal(value, SASL_MECH_STRING_CRAM_MD5)) { else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_CRAM_MD5; imapc->prefmech |= SASL_MECH_CRAM_MD5; } else if(strequal(value, SASL_MECH_STRING_DIGEST_MD5)) { else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_DIGEST_MD5; imapc->prefmech |= SASL_MECH_DIGEST_MD5; } else if(strequal(value, SASL_MECH_STRING_GSSAPI)) { else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_GSSAPI; imapc->prefmech |= SASL_MECH_GSSAPI; } else if(strequal(value, SASL_MECH_STRING_NTLM)) { else if(strnequal(value, SASL_MECH_STRING_NTLM, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_NTLM; imapc->prefmech |= SASL_MECH_NTLM; } else if(strequal(value, SASL_MECH_STRING_XOAUTH2)) { else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len)) { imapc->preftype = IMAP_TYPE_SASL; imapc->prefmech = SASL_MECH_XOAUTH2; } else { imapc->preftype = IMAP_TYPE_NONE; imapc->prefmech = SASL_AUTH_NONE; imapc->prefmech |= SASL_MECH_XOAUTH2; } if(*ptr == ';') ptr++; } else result = CURLE_URL_MALFORMAT; Loading
lib/pop3.c +34 −22 Original line number Diff line number Diff line Loading @@ -1832,56 +1832,68 @@ static CURLcode pop3_parse_url_options(struct connectdata *conn) struct pop3_conn *pop3c = &conn->proto.pop3c; const char *options = conn->options; const char *ptr = options; bool reset = TRUE; if(options) { while(*ptr) { const char *key = ptr; while(*ptr && *ptr != '=') ptr++; if(strnequal(key, "AUTH", 4)) { const char *value = ptr + 1; size_t len = 0; const char *value = ++ptr; if(reset) { reset = FALSE; pop3c->preftype = POP3_TYPE_NONE; pop3c->prefmech = SASL_AUTH_NONE; } while(*ptr && *ptr != ';') { ptr++; len++; } if(strequal(value, "*")) { if(strnequal(value, "*", len)) { pop3c->preftype = POP3_TYPE_ANY; pop3c->prefmech = SASL_AUTH_ANY; } else if(strequal(value, "+APOP")) { else if(strnequal(value, "+APOP", len)) { pop3c->preftype = POP3_TYPE_APOP; pop3c->prefmech = SASL_AUTH_NONE; } else if(strequal(value, SASL_MECH_STRING_LOGIN)) { else if(strnequal(value, SASL_MECH_STRING_LOGIN, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_LOGIN; pop3c->prefmech |= SASL_MECH_LOGIN; } else if(strequal(value, SASL_MECH_STRING_PLAIN)) { else if(strnequal(value, SASL_MECH_STRING_PLAIN, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_PLAIN; pop3c->prefmech |= SASL_MECH_PLAIN; } else if(strequal(value, SASL_MECH_STRING_CRAM_MD5)) { else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_CRAM_MD5; pop3c->prefmech |= SASL_MECH_CRAM_MD5; } else if(strequal(value, SASL_MECH_STRING_DIGEST_MD5)) { else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_DIGEST_MD5; pop3c->prefmech |= SASL_MECH_DIGEST_MD5; } else if(strequal(value, SASL_MECH_STRING_GSSAPI)) { else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_GSSAPI; pop3c->prefmech |= SASL_MECH_GSSAPI; } else if(strequal(value, SASL_MECH_STRING_NTLM)) { else if(strnequal(value, SASL_MECH_STRING_NTLM, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_NTLM; pop3c->prefmech |= SASL_MECH_NTLM; } else if(strequal(value, SASL_MECH_STRING_XOAUTH2)) { else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len)) { pop3c->preftype = POP3_TYPE_SASL; pop3c->prefmech = SASL_MECH_XOAUTH2; } else { pop3c->preftype = POP3_TYPE_NONE; pop3c->prefmech = SASL_AUTH_NONE; pop3c->prefmech |= SASL_MECH_XOAUTH2; } if(*ptr == ';') ptr++; } else result = CURLE_URL_MALFORMAT; Loading
lib/smtp.c +32 −19 Original line number Diff line number Diff line Loading @@ -1927,35 +1927,48 @@ static CURLcode smtp_parse_url_options(struct connectdata *conn) struct smtp_conn *smtpc = &conn->proto.smtpc; const char *options = conn->options; const char *ptr = options; bool reset = TRUE; if(options) { while(*ptr) { const char *key = ptr; while(*ptr && *ptr != '=') ptr++; if(strnequal(key, "AUTH", 4)) { const char *value = ptr + 1; size_t len = 0; const char *value = ++ptr; if(strequal(value, "*")) smtpc->prefmech = SASL_AUTH_ANY; else if(strequal(value, SASL_MECH_STRING_LOGIN)) smtpc->prefmech = SASL_MECH_LOGIN; else if(strequal(value, SASL_MECH_STRING_PLAIN)) smtpc->prefmech = SASL_MECH_PLAIN; else if(strequal(value, SASL_MECH_STRING_CRAM_MD5)) smtpc->prefmech = SASL_MECH_CRAM_MD5; else if(strequal(value, SASL_MECH_STRING_DIGEST_MD5)) smtpc->prefmech = SASL_MECH_DIGEST_MD5; else if(strequal(value, SASL_MECH_STRING_GSSAPI)) smtpc->prefmech = SASL_MECH_GSSAPI; else if(strequal(value, SASL_MECH_STRING_NTLM)) smtpc->prefmech = SASL_MECH_NTLM; else if(strequal(value, SASL_MECH_STRING_XOAUTH2)) smtpc->prefmech = SASL_MECH_XOAUTH2; else if(reset) { reset = FALSE; smtpc->prefmech = SASL_AUTH_NONE; } while(*ptr && *ptr != ';') { ptr++; len++; } if(strnequal(value, "*", len)) smtpc->prefmech = SASL_AUTH_ANY; else if(strnequal(value, SASL_MECH_STRING_LOGIN, len)) smtpc->prefmech |= SASL_MECH_LOGIN; else if(strnequal(value, SASL_MECH_STRING_PLAIN, len)) smtpc->prefmech |= SASL_MECH_PLAIN; else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len)) smtpc->prefmech |= SASL_MECH_CRAM_MD5; else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len)) smtpc->prefmech |= SASL_MECH_DIGEST_MD5; else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len)) smtpc->prefmech |= SASL_MECH_GSSAPI; else if(strnequal(value, SASL_MECH_STRING_NTLM, len)) smtpc->prefmech |= SASL_MECH_NTLM; else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len)) smtpc->prefmech |= SASL_MECH_XOAUTH2; if(*ptr == ';') ptr++; } else result = CURLE_URL_MALFORMAT; } Loading