imap: Added support for parsing URL query strings
Added support for parsing query strings from the URL as defined by RFC-5092.
This commit is contained in:
parent
f804378d16
commit
ca63d4feba
23
lib/imap.c
23
lib/imap.c
@ -131,8 +131,7 @@ const struct Curl_handler Curl_handler_imap = {
|
||||
ZERO_NULL, /* readwrite */
|
||||
PORT_IMAP, /* defport */
|
||||
CURLPROTO_IMAP, /* protocol */
|
||||
PROTOPT_CLOSEACTION | PROTOPT_NEEDSPWD
|
||||
| PROTOPT_NOURLQUERY /* flags */
|
||||
PROTOPT_CLOSEACTION | PROTOPT_NEEDSPWD /* flags */
|
||||
};
|
||||
|
||||
#ifdef USE_SSL
|
||||
@ -157,8 +156,8 @@ const struct Curl_handler Curl_handler_imaps = {
|
||||
ZERO_NULL, /* readwrite */
|
||||
PORT_IMAPS, /* defport */
|
||||
CURLPROTO_IMAP | CURLPROTO_IMAPS, /* protocol */
|
||||
PROTOPT_CLOSEACTION | PROTOPT_SSL | PROTOPT_NEEDSPWD
|
||||
| PROTOPT_NOURLQUERY /* flags */
|
||||
PROTOPT_CLOSEACTION | PROTOPT_SSL |
|
||||
PROTOPT_NEEDSPWD /* flags */
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -1902,6 +1901,7 @@ static CURLcode imap_done(struct connectdata *conn, CURLcode status,
|
||||
Curl_safefree(imap->uidvalidity);
|
||||
Curl_safefree(imap->uid);
|
||||
Curl_safefree(imap->section);
|
||||
Curl_safefree(imap->query);
|
||||
Curl_safefree(imap->custom);
|
||||
Curl_safefree(imap->custom_params);
|
||||
|
||||
@ -2476,6 +2476,21 @@ static CURLcode imap_parse_url_path(struct connectdata *conn)
|
||||
Curl_safefree(value);
|
||||
}
|
||||
|
||||
/* Does the URL contain a query parameter? Only valid when we have a mailbox
|
||||
and no UID as per RFC-5092 */
|
||||
if(imap->mailbox && !imap->uid && *ptr == '?') {
|
||||
/* Find the length of the query parameter */
|
||||
begin = ++ptr;
|
||||
while(imap_is_bchar(*ptr))
|
||||
ptr++;
|
||||
|
||||
/* Decode the query parameter */
|
||||
result = Curl_urldecode(data, begin, ptr - begin, &imap->query, NULL,
|
||||
TRUE);
|
||||
if(result)
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Any extra stuff at the end of the URL is an error */
|
||||
if(*ptr)
|
||||
return CURLE_URL_MALFORMAT;
|
||||
|
@ -68,6 +68,7 @@ struct IMAP {
|
||||
char *uidvalidity; /* UIDVALIDITY to check in select */
|
||||
char *uid; /* Message UID to fetch */
|
||||
char *section; /* Message SECTION to fetch */
|
||||
char *query; /* Query to search for */
|
||||
char *custom; /* Custom request */
|
||||
char *custom_params; /* Parameters for the custom request */
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user