imap: change from "FETCH" to "UID FETCH"

... and add "MAILINDEX".

As described in #2789, this is a suggested solution.  Changing UID=xx to
actually get mail with UID xx and add "MAILINDEX" to get a mail with a
special index in the mail box (old behavior).  So MAILINDEX=1 gives the
first non deleted mail in the mail box.

Fixes #2789
Closes #2815
This commit is contained in:
Nicklas Avén 2018-07-31 13:12:18 +02:00 committed by Daniel Stenberg
parent 2825f46d95
commit 6987fcef65
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
40 changed files with 139 additions and 59 deletions

View file

@ -93,7 +93,7 @@ test809 test810 test811 test812 test813 test814 test815 test816 test817 \
test818 test819 test820 test821 test822 test823 test824 test825 test826 \
test827 test828 test829 test830 test831 test832 test833 test834 test835 \
test836 test837 test838 test839 test840 test841 test842 test843 test844 \
test845 test846 \
test845 test846 test847 \
\
test850 test851 test852 test853 test854 test855 test856 test857 test858 \
test859 test860 test861 test862 test863 test864 test865 test866 test867 \

View file

@ -51,7 +51,7 @@ http
IMAP FETCH tunneled through HTTP proxy
</name>
<command>
'imap://imap.1321:%IMAPPORT/1321/;UID=1' -u user:secret -p -x %HOSTIP:%PROXYPORT
'imap://imap.1321:%IMAPPORT/1321/;MAILINDEX=1' -u user:secret -p -x %HOSTIP:%PROXYPORT
</command>
</client>

View file

@ -36,7 +36,7 @@ imap
SSL_CERT_FILE=
</setenv>
<command>
'imap://%HOSTIP:%IMAPPORT/1420/;UID=1' -u user:secret --libcurl log/test1420.c
'imap://%HOSTIP:%IMAPPORT/1420/;MAILINDEX=1' -u user:secret --libcurl log/test1420.c
</command>
</client>
@ -64,7 +64,7 @@ int main(int argc, char *argv[])
hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L);
curl_easy_setopt(hnd, CURLOPT_URL, "imap://%HOSTIP:%IMAPPORT/1420/;UID=1");
curl_easy_setopt(hnd, CURLOPT_URL, "imap://%HOSTIP:%IMAPPORT/1420/;MAILINDEX=1");
curl_easy_setopt(hnd, CURLOPT_USERPWD, "user:secret");
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);

View file

@ -39,7 +39,7 @@ IMAP multi transfer error without curl_multi_remove_handle
lib1552
</tool>
<command>
'imap://%HOSTIP:%IMAPPORT/1552/;UID=1'
'imap://%HOSTIP:%IMAPPORT/1552/;MAILINDEX=1'
</command>
</client>

View file

@ -31,7 +31,7 @@ imap
IMAP FETCH message
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/800/;UID=1' -u '"user:sec"ret{'
'imap://%HOSTIP:%IMAPPORT/800/;MAILINDEX=1' -u '"user:sec"ret{'
</command>
</client>

View file

@ -25,10 +25,10 @@ body
imap
</server>
<name>
IMAP FETCH message by UID and SECTION
IMAP FETCH message by MAILINDEX and SECTION
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/801/;UID=123/;SECTION=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/801/;MAILINDEX=123/;SECTION=1' -u user:secret
</command>
</client>

View file

@ -29,7 +29,7 @@ imap
IMAP SELECT UIDVALIDITY Success
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/802;UIDVALIDITY=3857529045/;UID=123/;SECTION=TEXT' -u user:secret
'imap://%HOSTIP:%IMAPPORT/802;UIDVALIDITY=3857529045/;MAILINDEX=123/;SECTION=TEXT' -u user:secret
</command>
</client>

View file

@ -24,7 +24,7 @@ imap
IMAP SELECT UIDVALIDITY Failure
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/803;UIDVALIDITY=12345/;UID=123' -u user:secret
'imap://%HOSTIP:%IMAPPORT/803;UIDVALIDITY=12345/;MAILINDEX=123' -u user:secret
</command>
</client>

View file

@ -28,7 +28,7 @@ imap
IMAP doesn't perform SELECT if re-using the same mailbox
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/804/;UID=123/;SECTION=1' 'imap://%HOSTIP:%IMAPPORT/804/;UID=456/;SECTION=2.3' -u user:secret
'imap://%HOSTIP:%IMAPPORT/804/;MAILINDEX=123/;SECTION=1' 'imap://%HOSTIP:%IMAPPORT/804/;MAILINDEX=456/;SECTION=2.3' -u user:secret
</command>
</client>

View file

@ -37,7 +37,7 @@ imap
IMAP plain authentication
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/819/;UID=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/819/;MAILINDEX=1' -u user:secret
</command>
</client>

View file

@ -37,7 +37,7 @@ imap
IMAP login authentication
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/820/;UID=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/820/;MAILINDEX=1' -u user:secret
</command>
</client>

View file

@ -40,7 +40,7 @@ crypto
IMAP CRAM-MD5 authentication
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/821/;UID=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/821/;MAILINDEX=1' -u user:secret
</command>
</client>

View file

@ -48,7 +48,7 @@ CURL_GETHOSTNAME=curlhost
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
<command>
'imap://%HOSTIP:%IMAPPORT/822/;UID=1' -u testuser:testpass
'imap://%HOSTIP:%IMAPPORT/822/;MAILINDEX=1' -u testuser:testpass
</command>
<precheck>
chkhostname curlhost

View file

@ -43,7 +43,7 @@ crypto
IMAP DIGEST-MD5 authentication
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/823/;UID=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/823/;MAILINDEX=1' -u user:secret
</command>
</client>

View file

@ -37,7 +37,7 @@ imap
IMAP OAuth 2.0 (XOAUTH2) authentication
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/824/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
'imap://%HOSTIP:%IMAPPORT/824/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
</client>

View file

@ -38,7 +38,7 @@ imap
IMAP plain authentication with initial response
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/825/;UID=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/825/;MAILINDEX=1' -u user:secret
</command>
</client>

View file

@ -38,7 +38,7 @@ imap
IMAP login authentication with initial response
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/826/;UID=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/826/;MAILINDEX=1' -u user:secret
</command>
</client>

View file

@ -49,7 +49,7 @@ CURL_GETHOSTNAME=curlhost
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
<command>
'imap://%HOSTIP:%IMAPPORT/827/;UID=1' -u testuser:testpass
'imap://%HOSTIP:%IMAPPORT/827/;MAILINDEX=1' -u testuser:testpass
</command>
<precheck>
chkhostname curlhost

View file

@ -38,7 +38,7 @@ imap
IMAP OAuth 2.0 (XOAUTH2) authentication with initial response
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/828/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
'imap://%HOSTIP:%IMAPPORT/828/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
</client>

View file

@ -33,7 +33,7 @@ crypto
IMAP CRAM-MD5 graceful cancellation
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/830/;UID=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/830/;MAILINDEX=1' -u user:secret
</command>
</client>

View file

@ -40,7 +40,7 @@ CURL_GETHOSTNAME=curlhost
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
<command>
'imap://%HOSTIP:%IMAPPORT/831/;UID=1' -u testuser:testpass
'imap://%HOSTIP:%IMAPPORT/831/;MAILINDEX=1' -u testuser:testpass
</command>
<precheck>
chkhostname curlhost

View file

@ -35,7 +35,7 @@ crypto
IMAP DIGEST-MD5 graceful cancellation
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/832/;UID=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/832/;MAILINDEX=1' -u user:secret
</command>
</client>

View file

@ -44,7 +44,7 @@ crypto
IMAP CRAM-MD5 authentication with SASL downgrade
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/833/;UID=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/833/;MAILINDEX=1' -u user:secret
</command>
</client>

View file

@ -51,7 +51,7 @@ CURL_GETHOSTNAME=curlhost
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
<command>
'imap://%HOSTIP:%IMAPPORT/834/;UID=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/834/;MAILINDEX=1' -u user:secret
</command>
<precheck>
chkhostname curlhost

View file

@ -46,7 +46,7 @@ crypto
IMAP DIGEST-MD5 authentication with SASL downgrade
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/835/;UID=1' -u user:secret
'imap://%HOSTIP:%IMAPPORT/835/;MAILINDEX=1' -u user:secret
</command>
</client>

View file

@ -36,7 +36,7 @@ imap
IMAP multiple connection authentication
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/836/;UID=1' -u user.one:secret -: 'imap://%HOSTIP:%IMAPPORT/836/;UID=2' -u user.two:secret
'imap://%HOSTIP:%IMAPPORT/836/;MAILINDEX=1' -u user.one:secret -: 'imap://%HOSTIP:%IMAPPORT/836/;UID=2' -u user.two:secret
</command>
</client>

View file

@ -37,7 +37,7 @@ imap
IMAP external authentication
</name>
<command>
'imap://user;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/837/;UID=1'
'imap://user;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/837/;MAILINDEX=1'
</command>
</client>

View file

@ -37,7 +37,7 @@ imap
IMAP external authentication without credentials
</name>
<command>
'imap://;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/838/;UID=1'
'imap://;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/838/;MAILINDEX=1'
</command>
</client>

View file

@ -38,7 +38,7 @@ imap
IMAP external authentication with initial response
</name>
<command>
'imap://user;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/839/;UID=1'
'imap://user;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/839/;MAILINDEX=1'
</command>
</client>

View file

@ -38,7 +38,7 @@ imap
IMAP external authentication with initial response without credentials
</name>
<command>
'imap://;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/840/;UID=1'
'imap://;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/840/;MAILINDEX=1'
</command>
</client>

View file

@ -38,7 +38,7 @@ imap
IMAP OAuth 2.0 (OAUTHBEARER) authentication
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/842/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
'imap://%HOSTIP:%IMAPPORT/842/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
# The protocol section doesn't support ways of specifying the raw data in the
# base64 encoded message so we must assert this

View file

@ -39,7 +39,7 @@ imap
IMAP OAuth 2.0 (OAUTHBEARER) authentication with initial response
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/843/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
'imap://%HOSTIP:%IMAPPORT/843/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
# The protocol section doesn't support ways of specifying the raw data in the
# base64 encoded message so we must assert this

View file

@ -30,7 +30,7 @@ imap
IMAP OAuth 2.0 (OAUTHBEARER) failure as continuation
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/844/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
'imap://%HOSTIP:%IMAPPORT/844/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
# The protocol section doesn't support ways of specifying the raw data in the
# base64 encoded message so we must assert this

View file

@ -31,7 +31,7 @@ imap
IMAP OAuth 2.0 (OAUTHBEARER) failure as continuation with initial response
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/845/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
'imap://%HOSTIP:%IMAPPORT/845/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
# The protocol section doesn't support ways of specifying the raw data in the
# base64 encoded message so we must assert this

View file

@ -33,7 +33,7 @@ imap
IMAP PREAUTH response
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/846/;UID=1' -u notused:still-provided
'imap://%HOSTIP:%IMAPPORT/846/;MAILINDEX=1' -u notused:still-provided
</command>
</client>

49
tests/data/test847 Normal file
View file

@ -0,0 +1,49 @@
<testcase>
<info>
<keywords>
IMAP
Clear Text
FETCH
</keywords>
</info>
#
# Server-side
<reply>
<data>
From: me@somewhere
To: fake@nowhere
body
--
yours sincerely
</data>
</reply>
#
# Client-side
<client>
<server>
imap
</server>
<name>
IMAP FETCH message
</name>
<command>
'imap://%HOSTIP:%IMAPPORT/847/;UID=1' -u '"user:sec"ret{'
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 LOGIN "\"user" "sec\"ret{"
A003 SELECT 847
A004 UID FETCH 1 BODY[]
A005 LOGOUT
</protocol>
</verify>
</testcase>