diff options
author | Steve Holme <steve_holme@hotmail.com> | 2014-04-18 15:58:33 +0100 |
---|---|---|
committer | Steve Holme <steve_holme@hotmail.com> | 2014-04-18 16:43:57 +0100 |
commit | ca63d4feba34b5c48bd75e62fd6cd05f5bf61046 (patch) | |
tree | f6bfb211b263343bd33680dc39faa9a67926ddfa | |
parent | f804378d16bba22bc22afebb6ffe1858cfd9edf6 (diff) | |
download | curl-ca63d4feba34b5c48bd75e62fd6cd05f5bf61046.tar.gz |
imap: Added support for parsing URL query strings
Added support for parsing query strings from the URL as defined by
RFC-5092.
-rw-r--r-- | lib/imap.c | 23 | ||||
-rw-r--r-- | lib/imap.h | 1 |
2 files changed, 20 insertions, 4 deletions
diff --git a/lib/imap.c b/lib/imap.c index 5e2e670da..dd98b3fd9 100644 --- a/lib/imap.c +++ b/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; diff --git a/lib/imap.h b/lib/imap.h index 53d202dcc..821da6788 100644 --- a/lib/imap.h +++ b/lib/imap.h @@ -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 */ }; |