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:
Steve Holme
2014-04-18 15:58:33 +01:00
parent f804378d16
commit ca63d4feba
2 changed files with 20 additions and 4 deletions

View File

@@ -131,8 +131,7 @@ const struct Curl_handler Curl_handler_imap = {
ZERO_NULL, /* readwrite */ ZERO_NULL, /* readwrite */
PORT_IMAP, /* defport */ PORT_IMAP, /* defport */
CURLPROTO_IMAP, /* protocol */ CURLPROTO_IMAP, /* protocol */
PROTOPT_CLOSEACTION | PROTOPT_NEEDSPWD PROTOPT_CLOSEACTION | PROTOPT_NEEDSPWD /* flags */
| PROTOPT_NOURLQUERY /* flags */
}; };
#ifdef USE_SSL #ifdef USE_SSL
@@ -157,8 +156,8 @@ const struct Curl_handler Curl_handler_imaps = {
ZERO_NULL, /* readwrite */ ZERO_NULL, /* readwrite */
PORT_IMAPS, /* defport */ PORT_IMAPS, /* defport */
CURLPROTO_IMAP | CURLPROTO_IMAPS, /* protocol */ CURLPROTO_IMAP | CURLPROTO_IMAPS, /* protocol */
PROTOPT_CLOSEACTION | PROTOPT_SSL | PROTOPT_NEEDSPWD PROTOPT_CLOSEACTION | PROTOPT_SSL |
| PROTOPT_NOURLQUERY /* flags */ PROTOPT_NEEDSPWD /* flags */
}; };
#endif #endif
@@ -1902,6 +1901,7 @@ static CURLcode imap_done(struct connectdata *conn, CURLcode status,
Curl_safefree(imap->uidvalidity); Curl_safefree(imap->uidvalidity);
Curl_safefree(imap->uid); Curl_safefree(imap->uid);
Curl_safefree(imap->section); Curl_safefree(imap->section);
Curl_safefree(imap->query);
Curl_safefree(imap->custom); Curl_safefree(imap->custom);
Curl_safefree(imap->custom_params); Curl_safefree(imap->custom_params);
@@ -2476,6 +2476,21 @@ static CURLcode imap_parse_url_path(struct connectdata *conn)
Curl_safefree(value); 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 */ /* Any extra stuff at the end of the URL is an error */
if(*ptr) if(*ptr)
return CURLE_URL_MALFORMAT; return CURLE_URL_MALFORMAT;

View File

@@ -68,6 +68,7 @@ struct IMAP {
char *uidvalidity; /* UIDVALIDITY to check in select */ char *uidvalidity; /* UIDVALIDITY to check in select */
char *uid; /* Message UID to fetch */ char *uid; /* Message UID to fetch */
char *section; /* Message SECTION to fetch */ char *section; /* Message SECTION to fetch */
char *query; /* Query to search for */
char *custom; /* Custom request */ char *custom; /* Custom request */
char *custom_params; /* Parameters for the custom request */ char *custom_params; /* Parameters for the custom request */
}; };