1#!/bin/sh
2
3# Maintainer's sanity check
4
5OPTIONS=""
6export OPTIONS
7TZ=EST5EDT
8export TZ
9
10echo '****************************' >&2
11echo '* Sanity check in progress *' >&2
12echo '****************************' >&2
13#test ! -d confmdtest || find confmdtest -exec chmod u+rwx {} \;
14#test ! -d confmdtest2 || find confmdtest2 -exec chmod u+rwx {} \;
15test ! -d confmdtest || chmod -R u+rwx confmdtest
16test ! -d confmdtest2 || chmod -R u+rwx confmdtest2
17rm -rf confmdtest
18../maildir/maildirmake confmdtest || exit 1
19
20cat >confmdtest/cur/msg1:2,S <<EOF || exit 1
21From: John <john@example.com>
22To: Steve <steve@example.com>, Tom <tom@example.com>
23Mime-Version: 1.0
24Content-Type: multipart/mixed; boundary="b1"
25Subject: This is the message
26
27foobar
28--b1
29Content-Type: text/plain
30
31This is section 1
32
33--b1
34Content-Type: text/plain
35
36This is section 2
37
38--b1
39Content-Type: message/rfc822
40
41Mime-Version: 1.0
42Content-Type: multipart/mixed; boundary="b2"
43Subject: This is message part 3
44
45foobar
46--b2
47Content-Type: text/plain
48
49This is section 3.1
50
51--b2
52Content-Type: text/plain
53
54This is section 3.2
55
56--b2--
57--b1
58Content-Type: multipart/mixed; boundary="b3"
59
60foobar
61--b3
62Content-Type: text/plain
63
64This is section 4.1
65
66--b3
67Content-Type: message/rfc822
68
69Mime-Version: 1.0
70Content-Type: multipart/mixed; boundary="b4"
71Subject: This is message part 4.2
72
73foobar
74--b4
75Content-Type: text/plain
76
77This is section 4.2.1
78
79--b4
80Content-Type: multipart/alternative; boundary="b5"
81
82foobar
83--b5
84Content-Type: text/plain
85
86This is section 4.2.2.1
87
88--b5
89Content-Type: text/plain
90
91This is section 4.2.2.2
92
93--b5--
94
95--b4--
96
97--b3--
98
99--b1--
100EOF
101
102inituid() {
103
104initdir="$1"
105
106if test "$initdir" = ""
107then
108    initdir="confmdtest"
109fi
110
111initinbox="$2"
112if test "$initinbox" = ""
113then
114    initinbox="inbox"
115else
116    initinbox="inbox.$initinbox"
117fi
118
119env IMAP_BROKENUIDV=1 MAILDIR=$initdir ./imapd >confmdtest.stdout <<EOF
120a001 select $initinbox
121a logout
122EOF
123
124}
125
126inituid
127
128env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
129a001 select inbox
130a002 fetch 1 (bodystructure)
131a003 fetch 1 (body[])
132a004 fetch 1 (body[]<500.100>)
133a005 fetch 1 (body[1])
134a006 fetch 1 (body[1.text])
135a007 fetch 1 (body[2])
136a008 fetch 1 (body[2.text])
137a009 fetch 1 (body[3.header])
138a010 fetch 1 (body[3.mime])
139a011 fetch 1 (body[3.mime]<10,50>)
140a012 fetch 1 (body[3.1])
141a013 fetch 1 (body[3.2])
142a014 fetch 1 (body[4.1])
143a015 fetch 1 (body[4.2.header])
144a016 fetch 1 (body[4.2.1])
145a017 fetch 1 (body[4.2.2.1])
146a018 fetch 1 (body[4.2.2.2])
147a019 fetch 1 (envelope)
148a020 fetch 1 (body)
149a021 fetch 1 (envelope body)
150a022 fetch 1 (bodystructure)
151a023 fetch 1 (rfc822.size)
152a024 fetch 1 (all)
153a025 fetch 1 (fast)
154a026 fetch 1 (full)
155a027 fetch 1 (rfc822.text)
156a028 fetch 1 (body[header.fields(content-type)])
157adone logout
158EOF
159
160rm -f confmdtest/cur/msg1:2,S
161
162cat >confmdtest/new/msg2 <<EOF || exit 1
163From: John <john@example.com>
164To: Steve <steve@example.com>,
165    Tom <tom@example.com>
166Mime-Version: 1.0
167Date: Wed, 22 Sep 1999 15:41:09 -0200
168Content-Type: multipart/mixed; boundary="b1"
169Subject: This is the message
170
171foobar
172--b1
173Content-Type: text/plain
174
175This is section 1
176
177--b1
178Content-Type: message/rfc822
179
180Subject: This is message part 4.2
181From: dave@example.org
182To: tom@example.org
183Cc: steve@example.org
184Mime-Version: 1.0
185content-type: text/plain
186content-transfer-encoding: quoted-printable
187
188
189M=41ry had a little lamb, it's fleece was white as snow.  And everywhere
190Mary went, the lamb was sure to go.
191
192--b1--
193EOF
194
195inituid
196
197cat >confmdtest/new/msg3 <<EOF || exit 1
198From: todd@example.org
199To: kevin@example.org
200Subject: today's meeting
201
202Today's meeting has been cancelled
203EOF
204cat >confmdtest/new/msg4 <<EOF || exit 1
205Subject: New MIME headers test
206Mime-Version: 1.0
207Content-Type: multipart/mixed; boundary="c1"
208Content-Language: en
209
210
211--c1
212Content-Type: text/plain
213Content-ID: <foo@bar>
214Content-Description:  MIME test message
215Content-MD5: aaaabbbb
216
217test
218
219--c1--
220EOF
221touch -t 199901010000 confmdtest/new/msg3
222
223inituid
224
225env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
226b000 status inbox ( MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)
227b001 select inbox
228b001a status inbox ( MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)
229b002 fetch 1:2 (flags uid)
230b003 search header "content-type" "multipart"
231b004 search 2 header "content-type" "multipart"
232b005 search to tom@example
233b006 search subject "message part 4.2"
234b007 search before "1-Feb-1999"
235b008 search on "1-Jan-1999"
236b009 search senton "22-Sep-1999"
237b010 search recent
238b011 fetch 1 (rfc822.header)
239b012 fetch 1:2 (flags)
240b013 search seen
241b014 search body "mary had a little lamb"
242b015 uid search body "mary had a little lamb"
243b016 store 1:2 +flags(\flagged)
244b017 store 1 flags(\seen \deleted)
245b018 expunge
246b019 fetch 1 (flags uid)
247b020 create inbox.bozo
248b021 uid copy 3 inbox.bozo
249b022 select inbox.bozo
250b023 status inbox.bozo (uidnext)
251b024 fetch 1 (flags)
252b025 append inbox.bozo \Seen {11}
253test
254
255test
256
257b026 append inbox.bozo (\Seen \Flagged) {11}
258test
259
260test
261
262b027 noop
263b028 fetch 1 flags
264b029 fetch 1 flags
265b030 select inbox
266b031 fetch 2 (bodystructure)
267adone logout
268EOF
269env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
270foo select inbox.bozo
271foo store 1 +flags \Deleted
272foo expunge
273foo logout
274EOF
275rm -rf confmdtest
276mkdir confmdtest || exit 1
277mkdir confmdtest/tmp || exit 1
278mkdir confmdtest/cur || exit 1
279mkdir confmdtest/new || exit 1
280echo "10000S,2C" >confmdtest/maildirsize
281env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
282c001 select inbox
283c002 append inbox {5}
284test
285
286c003 append inbox {5}
287test
288
289c004 append inbox {5}
290test
291
292c005 noop
293c006 store 1 +flags \Deleted
294c007 append inbox {5}
295test
296
297c008 noop
298c009 append inbox {5}
299test
300
301c010 store 1 -flags \Deleted
302cdone logout
303EOF
304cat confmdtest/maildirsize
305rm -rf confmdtest
306mkdir confmdtest || exit 1
307mkdir confmdtest/tmp || exit 1
308mkdir confmdtest/cur || exit 1
309mkdir confmdtest/new || exit 1
310echo "10000S,5C" >confmdtest/maildirsize
311env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
312d001 select inbox
313d002 append inbox {5}
314test
315
316d003 noop
317d004 copy 1 inbox
318d005 noop
319ddone logout
320EOF
321cat confmdtest/maildirsize
322env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
323e001 select inbox
324e002 copy 1:2 inbox
325e003 noop
326edone logout
327EOF
328cat confmdtest/maildirsize
329../maildir/maildirmake -f Trash confmdtest || exit 1
330
331env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
332f001 select inbox
333f002 copy 1:2 inbox
334f002 copy 1:2 inbox.Trash
335f003 noop
336f004 select inbox.Trash
337f005 copy 1:2 inbox
338f006 copy 1:2 inbox.Trash
339f007 noop
340f008 copy 1 inbox
341f009 select inbox
342fdone logout
343EOF
344cat confmdtest/maildirsize
345echo "Counts:" `ls confmdtest/cur | wc -l` `ls confmdtest/.Trash/cur | wc -l`
346env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
347g001 select inbox
348g002 select Trash
349g003 select INBOX.Trash
350g004 delete INBOX.Trash
351g005 close
352g006 delete INBOX.Trash
353g007 create INBOX.a
354g008 delete INBOX.a/
355g009 delete INBOX.a
356g010 create inbox.a/
357gdone logout
358EOF
359
360rm -rf confmdtest2
361../maildir/maildirmake confmdtest2
362../maildir/maildirmake -f a confmdtest2
363../maildir/maildirmake -f b confmdtest2
364chmod u-rwx confmdtest2/.b/tmp
365chmod u-rwx confmdtest2/.b/new
366chmod u-rwx confmdtest2/.b/cur
367
368echo "test `pwd`/confmdtest2" >confmdtest/shared-maildirs
369
370env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
371h001 list "" "*"
372h002 list "" "%"
373h003 list "" "%.%"
374h004 list "" "%.%.%"
375h005 list "shared" "*"
376h006 list "shared.test" "*"
377h007 list "INBOX" ""
378h008 list "shared" ""
379h009 list "shared.test" ""
380h010 subscribe inbox
381h011 list "" "*"
382h012 lsub "" "*"
383h013 subscribe shared.test.a
384h014 list "" "*"
385h015 lsub "" "*"
386h016 subscribe shared.test.b
387h017 list "" "*"
388h018 lsub "" "*"
389h019 unsubscribe shared.test.a
390h020 list "" "*"
391h021 lsub "" "*"
392h022 subscribe shared.test.a
393h023 list "" "*"
394h024 lsub "" "*"
395hdone logout
396EOF
397
398cat >confmdtest2/.a/new/msg1 <<EOF
399Subject: message 1
400
401message 1
402EOF
403
404inituid confmdtest2 a
405
406cat >confmdtest2/.a/new/msg2 <<EOF
407Subject: message 2
408
409message 2
410EOF
411
412inituid confmdtest2 a
413
414cat >confmdtest/new/msg1 <<EOF
415Subject: message 1
416EOF
417
418cat >confmdtest/.Trash/new/msg2 <<EOF
419Subject: message 2
420EOF
421
422../maildir/maildirmake -f c confmdtest
423../maildir/maildirmake -f Trash confmdtest2
424
425env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
426ii001 list "" "*"
427ii002 list "" "*"
428iidone logout
429EOF
430
431env IMAP_BROKENUIDV=1 IMAP_CHECK_ALL_FOLDERS=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
432ii003 list "" "*"
433ii004 list "" "*"
434iidone logout
435EOF
436
437env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
438i001 select shared.test.b
439i002 select shared.test.a
440i003 close
441i004 select shared.test.a
442i005 append shared.test.a {5}
443test
444
445i006 noop
446i007 fetch 1:* (flags)
447i008 select inbox
448i009 copy 1:2 shared.test.a
449i010 select shared.test.a
450i011 fetch 1:* (flags)
451i012 append shared.test.b {5}
452i013 copy 1 shared.test.b
453i014 store 1:2 +flags (\Deleted)
454i015 expunge
455idone logout
456EOF
457chmod -R u+rwx confmdtest
458chmod -R u+rwx confmdtest2
459
460rm -f confmdtest/new/*
461rm -f confmdtest/cur/*
462
463cat >confmdtest/new/msg1 <<EOF
464From: John <john1@example.com>
465To: John <cca4@example.com>, <ccb1@example.com>
466Cc: John <toa1@example.com>, <tob4@example.com>
467Subject: Re[2]: [foo] message 1
468Date: Wed, 22 Sep 1999 15:41:09 -0200
469
470message 1
471aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
472EOF
473
474inituid
475
476cat >confmdtest/new/msg2 <<EOF
477From: John <john2@example.com>
478To: John <cca3@example.com>, <ccb2@example.com>
479Cc: John <toa2@example.com>, <tob3@example.com>
480Subject: message 2
481Date: Wed, 22 Sep 1999 15:41:00 -0200
482
483message 2
484aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
485aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
486EOF
487
488inituid
489
490cat >confmdtest/new/msg3 <<EOF
491From: John <john3@example.com>
492To: John <cca2@example.com>, <ccb3@example.com>
493Cc: John <toa3@example.com>, <tob2@example.com>
494Subject: message 1
495Date: Wed, 22 Sep 1999 15:41:00 -0200
496
497message 3
498aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
499aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
500aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
501EOF
502
503inituid
504
505cat >confmdtest/new/msg4 <<EOF
506From: John <john4@example.com>
507To: John <cca1@example.com>, <ccb4@example.com>
508Cc: John <toa4@example.com>, <tob1@example.com>
509Subject: [fwd:message 1] (fwd)
510Date: Wed, 15 Sep 1999 15:41:00 -0200
511
512message 3
513aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
514aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
515aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
516aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
517EOF
518
519inituid
520
521env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
522T001 select INBOX
523T002 fetch 1:* (uid body[header.fields(date)])
524T003 THREAD ORDEREDSUBJECT US-ASCII ALL
525T004 THREAD ORDEREDSUBJECT US-ASCII SENTSINCE 19-SEP-1999
526S001 SORT (SUBJECT DATE) US-ASCII ALL
527S002 SORT (SUBJECT REVERSE DATE) US-ASCII ALL
528S003 SORT (REVERSE SUBJECT DATE) US-ASCII ALL
529S004 SORT (FROM) US-ASCII ALL
530S005 SORT (REVERSE FROM) US-ASCII ALL
531S006 SORT (FROM) US-ASCII SENTSINCE 19-SEP-1999
532S007 SORT (REVERSE FROM) US-ASCII SENTSINCE 19-SEP-1999
533S008 SORT (TO) US-ASCII ALL
534S009 SORT (CC) US-ASCII ALL
535S010 SORT (REVERSE SIZE) US-ASCII ALL
536TDONE logout
537EOF
538
539rm -rf confmdtest
540../maildir/maildirmake confmdtest || exit 1
541../maildir/maildirmake -f Trash confmdtest || exit 1
542env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
543J001 list "" "*"
544J002 lsub "" "*"
545J003 SUBSCRIBE INBOX
546J004 SUBSCRIBE INBOX.Trash
547J005 list "" "*"
548J006 lsub "" "*"
549J007 UNSUBSCRIBE INBOX
550J008 LIST "" "*"
551J009 LSUB "" "*"
552JDONE logout
553EOF
554
555rm -rf confmdtest
556../maildir/maildirmake confmdtest || exit 1
557
558cat >confmdtest/new/msg1 <<EOF
559From: postmaster
560Subject: thread 1
561Message-ID: <mid1>
562Date: Sat, 05 Feb 2000 13:34:02 -0800
563
564message 1
565EOF
566
567inituid
568
569cat >confmdtest/new/msg2 <<EOF
570From: postmaster
571Subject: thread 1.1
572Date: Sat, 05 Feb 2000 13:34:02 -0800
573Message-ID: <mid2>
574References: <mid1>
575
576message 2
577EOF
578
579inituid
580
581cat >confmdtest/new/msg3 <<EOF
582From: postmaster
583Date: Sat, 05 Feb 2000 13:34:02 -0800
584Subject: thread 1.2
585In-Reply-To: <mid2>
586
587message 3
588EOF
589
590inituid
591
592cat >confmdtest/new/msg4 <<EOF
593From: postmaster
594Date: Sat, 05 Feb 2000 13:34:02 -0800
595Subject: thread 1.2
596References: <mid1>
597
598message 4
599EOF
600
601inituid
602
603cat >confmdtest/new/msg5 <<EOF
604From: postmaster
605Date: Sat, 05 Feb 2000 13:34:02 -0800
606Subject: thread 1.2
607Message-ID: <mid11>
608References: <mid10>
609
610message 5
611EOF
612
613inituid
614
615cat >confmdtest/new/msg6 <<EOF
616From: postmaster
617Date: Sat, 05 Feb 2000 13:34:01 -0800
618Subject: thread 1.2
619Message-ID: <mid12>
620References: <mid10>
621
622message 6
623EOF
624
625inituid
626
627env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
628K001 select INBOX
629K002 THREAD REFERENCES US-ASCII ALL
630KDONE logout
631EOF
632
633rm -rf confmdtest
634../maildir/maildirmake confmdtest || exit 1
635../maildir/maildirmake -f Trash confmdtest || exit 1
636
637env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
638L001 CREATE INBOX.a
639L002 CREATE INBOX.a.a
640L003 CREATE INBOX.aa
641L004 RENAME INBOX.a INBOX.b
642L005 LIST "" "*"
643L006 RENAME INBOX.b INBOX.a
644L007 LIST "" "*"
645L008 RENAME INBOX.a. INBOX.b.
646L009 LIST "" "*"
647L010 RENAME INBOX.b. INBOX.a.
648L011 LIST "" "*"
649L012 CREATE INBOX.b.a
650L013 DELETE INBOX.a
651L014 CREATE INBOX.a.a
652L015 LIST "" "*"
653L016 RENAME INBOX.a INBOX.b
654L017 RENAME INBOX.a. INBOX.b.
655L018 SELECT INBOX
656L019 APPEND INBOX \Seen {5}
657test
658
659L020 NOOP
660L021 COPY 1 INBOX
661L022 COPY 1 INBOX
662L023 COPY 1 INBOX
663L024 COPY 1 INBOX
664L025 COPY 1 INBOX
665L026 COPY 1 INBOX
666L027 NOOP
667L028 STORE 2:3,5:7 +FLAGS \Deleted
668L029 FETCH 1:* (UID FLAGS)
669L030 UID EXPUNGE 2,3:5
670L031 FETCH 1:* (UID FLAGS)
671LDONE logout
672EOF
673
674rm -rf confmdtest
675
676../maildir/maildirmake confmdtest || exit 1
677../maildir/maildirmake -q 10C confmdtest || exit 1
678
679env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
680M001 CREATE INBOX.a
681M002 APPEND INBOX \Seen {5}
682test
683
684M003 SELECT INBOX
685M004 COPY 1 INBOX
686M005 COPY 1 INBOX
687M006 NOOP
688M007 COPY 1:3 INBOX.a
689M008 RENAME INBOX.a INBOX.b
690MDONE logout
691EOF
692cat confmdtest/maildirsize
693env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
694M009 DELETE INBOX.b
695MDONE logout
696EOF
697cat confmdtest/maildirsize
698
699rm -rf confmdtest
700
701../maildir/maildirmake confmdtest || exit 1
702env IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
703N001 LIST "" "*"
704N002 append inbox \Deleted {11}
705test
706
707test
708
709N003 LIST "" "*"
710N004 SELECT inbox
711N005 EXPUNGE
712N006 LIST "" "*"
713NDONE logout
714EOF
715
716rm -rf confmdtest
717../maildir/maildirmake confmdtest || exit 1
718../maildir/maildirmake -q10C confmdtest
719env IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
720O001 append inbox NIL {11}
721test
722
723test
724
725o002 SELECT inbox
726o003 COPY 1 inbox
727o004 NOOP
728o005 STORE 1 +FLAGS \Deleted
729o006 COPY 1:2 inbox
730o007 NOOP
731o008 logout
732EOF
733cat confmdtest/maildirsize
734rm -f confmdtest/maildirsize
735
736env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
737p001 SELECT INBOX
738p002 CREATE INBOX.a
739p003 COPY 1 INBOX.a
740p004 SELECT INBOX.a
741p005 STORE 1 +FLAGS(-Label1 \Deleted)
742p006 append INBOX.a (-Label2) {11}
743test
744
745test
746
747p007 EXPUNGE
748p008 FETCH 1:* FLAGS
749p009 COPY 1 INBOX.a
750p010 NOOP
751P011 FETCH 1:* FLAGS
752P012 STORE 1 -FLAGS (-Label2)
753P013 STORE 1 +FLAGS (\SEEN)
754P013 FETCH 1:* FLAGS
755P014 SEARCH SEEN
756P015 SEARCH KEYWORD -LABEL2
757P016 SEARCH UNKEYWORD -Label2
758P017 SEARCH KEYWORD -Label1
759P018 COPY 1:* INBOX.a
760P019 COPY 1:* INBOX.a
761P020 NOOP
762P021 COPY 1:* INBOX.a
763P022 COPY 1:* INBOX.a
764P023 NOOP
765P025 STORE 4 +FLAGS -Label1
766P024 FETCH 1:* FLAGS
767P025 SEARCH KEYWORD -Label2
768P026 SEARCH KEYWORD -Label2 KEYWORD -Label1
769pDONE LOGOUT
770EOF
771
772env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
773Q001 select INBOX
774Q002 fetch 1:* FLAGS
775Q003 status INBOX.Trash MESSAGES
776Q004 expunge
777Q005 status INBOX.Trash MESSAGES
778Q006 COPY 1 INBOX.a
779Q007 STORE 1:* +FLAGS \Deleted
780Q008 NOOP
781Q009 EXPUNGE
782Q005 status INBOX.Trash MESSAGES
783qDONE LOGOUT
784EOF
785
786rm -rf confmdtest
787../maildir/maildirmake confmdtest || exit 1
788
789env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
790R001 CREATE INBOX.a
791R002 LIST (ACL MYRIGHTS POSTADDRESS) "" "*"
792R003 ACL STORE INBOX owner -t
793R004 ACL STORE (INBOX *) owner +d
794R005 ACL STORE INBOX.a user=systemuser1 alr
795R006 ACL STORE INBOX.a user=systemuser1 +w
796R007 ACL STORE INBOX.a user=systemuser1 -w
797R008 ACL STORE INBOX.a user=systemuser1 -alr
798R009 ACL STORE INBOX.a user=systemuser1 alr
799R010 ACL STORE INBOX.a user=systemuser1 ""
800R011 ACL STORE INBOX.a user=systemuser1 alr
801R012 ACL SET (INBOX *) "owner" "acdilrsw" administrators "acdilrsw" user=systemuser2 alr
802R013 ACL DELETE INBOX.a user=systemuser1
803R014 ACL DELETE INBOX.a user=systemuser2
804R015 ACL STORE INBOX.a owner -a
805R016 ACL STORE INBOX.a -owner +wt
806R017 ACL STORE INBOX.a -owner -w
807R018 ACL DELETE INBOX.a -owner
808R019 ACL STORE INBOX.a -owner +a
809R020 ACL STORE INBOX.a owner -ci
810R021 CREATE INBOX.a.b
811R022 ACL STORE INBOX.a owner +c
812R023 CREATE INBOX.a.b
813R024 LIST (ACL) "" INBOX.a.b
814R025 CREATE INBOX.c.d
815R026 LIST (ACL) "" "INBOX.c*"
816R027 ACL STORE (INBOX.c*) -owner x
817R028 DELETE INBOX.c.d
818R029 ACL DELETE INBOX.c.d -owner
819R030 DELETE INBOX.c.d
820R031 DELETE INBOX.c.
821R032 LIST (ACL) "" "*"
822R033 DELETE INBOX.a
823R034 LIST (ACL) "" "*"
824R035 RENAME INBOX.a INBOX.f
825R036 LIST (ACL) "" "*"
826R037 CREATE INBOX.f
827R038 LIST (ACL) "" "*"
828R039 ACL STORE INBOX owner -i
829R040 SELECT INBOX
830R041 APPEND INBOX (\Seen \Deleted \Answered Foo) {0}
831R042 ACL STORE INBOX owner +i
832R043 APPEND INBOX (\Seen \Deleted \Answered Foo) {11}
833test
834
835test
836
837R043 NOOP
838R044 FETCH 1 (FLAGS)
839R045 ACL STORE INBOX owner -tw
840R046 APPEND INBOX (\Seen \Deleted \Answered Foo) {11}
841test
842
843test
844
845R047 NOOP
846R048 FETCH 2 (FLAGS)
847R049 ACL STORE INBOX owner +tw
848R050 ACL STORE INBOX owner -s
849R051 APPEND INBOX (\Seen \Deleted \Answered Foo) {11}
850test
851
852test
853
854R052 NOOP
855R053 FETCH 3 (FLAGS)
856R054 STORE 2:3 +FLAGS (\Deleted)
857R055 STORE 1 -FLAGS (\Deleted)
858R056 EXPUNGE
859R057 STORE 1 +FLAGS (\Deleted)
860R058 ACL STORE INBOX owner +s
861R059 CREATE INBOX.x
862R060 COPY 1 INBOX.x
863R061 SELECT INBOX.x
864R062 FETCH 1 (FLAGS)
865R063 SELECT INBOX
866R064 ACL STORE INBOX.x owner -s
867R065 COPY 1 INBOX.x
868R066 SELECT INBOX.x
869R067 FETCH 2 (FLAGS)
870R068 SELECT INBOX
871R069 ACL STORE INBOX.x owner +s
872R070 ACL STORE INBOX.x owner -w
873R071 COPY 1 INBOX.x
874R072 SELECT INBOX.x
875R073 FETCH 3 (FLAGS)
876R074 SELECT INBOX
877R075 ACL STORE INBOX.x owner +w
878R076 ACL STORE INBOX.x owner -t
879R077 COPY 1 INBOX.x
880R078 SELECT INBOX.x
881R079 FETCH 4 (FLAGS)
882R080 SELECT INBOX
883RDONE LOGOUT
884EOF
885
886rm -rf confmdtest
887../maildir/maildirmake confmdtest || exit 1
888../maildir/maildirmake -f a confmdtest || exit 1
889cat >confmdtest/.a/cur/msg1:2,S <<EOF || exit 1
890From: John <john@example.com>
891To: john <john@example.com>
892Subject: test
893
894test
895EOF
896env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
897S001 SELECT INBOX.a
898S002 COPY 1 INBOX.a
899S003 NOOP
900S004 COPY 1:2 INBOX.a
901S005 NOOP
902S006 ACL STORE INBOX.a owner -e
903S007 STORE 1 +FLAGS(\Deleted)
904S008 EXPUNGE
905S009 CLOSE
906S010 SELECT INBOX.a
907S011 ACL STORE INBOX.a owner +e
908S012 EXPUNGE
909S013 STORE 1 +FLAGS(\Deleted)
910S014 CLOSE
911S015 SELECT INBOX.a
912S016 CLOSE
913S017 ACL STORE INBOX.a owner -r
914S018 SELECT INBOX.a
915S019 EXAMINE INBOX.a
916S020 STATUS INBOX.a (UIDVALIDITY)
917S021 ACL STORE INBOX.a owner +r
918S022 SELECT INBOX.a
919S023 APPEND INBOX.a NIL {11}
920test
921
922test
923
924S024 NOOP
925S025 STORE 1:* FLAGS ()
926S027 ACL STORE INBOX.a owner -s
927S028 FETCH 1 (BODY[])
928S029 ACL STORE INBOX.a owner +s
929S030 FETCH 1 (BODY[])
930S031 ACL STORE INBOX.a owner -s
931S032 STORE 1:2 FLAGS(\Seen \Deleted Foo)
932S033 STORE 1:2 -FLAGS(\Seen \Deleted Foo)
933S034 STORE 2 +FLAGS(\Seen \Deleted \Answered Foo)
934S035 FETCH 1:2 (FLAGS)
935S036 ACL STORE INBOX.a owner +s
936S037 ACL STORE INBOX.a owner -w
937S038 STORE 1:2 FLAGS(\Seen \Deleted Bar)
938S039 STORE 1:2 -FLAGS(\Seen \Deleted Bar)
939S040 STORE 1:2 +FLAGS(\Seen \Deleted Bar)
940S041 ACL STORE INBOX.a owner +w
941S042 STORE 2 -FLAGS (\Deleted)
942S043 ACL STORE INBOX.a owner -t
943S044 STORE 1:2 FLAGS (\Deleted \Seen Bar)
944S045 STORE 1:2 -FLAGS (\Deleted \Seen Bar)
945S046 STORE 1:2 +FLAGS (\Deleted \Seen Bar)
946S047 CLOSE
947S048 ACL STORE INBOX user=courierimaptestuser1 alr
948S049 ACL STORE INBOX user=courierimaptestuser2 lr
949S050 LIST (ACL) "" INBOX
950SDONE LOGOUT
951EOF
952
953rm -rf confmdtest*
954../maildir/maildirmake confmdtest || exit 1
955../maildir/maildirmake confmdtest2 || exit 1
956../maildir/maildirmake confmdtest3 || exit 1
957mkdir confmdtest4 || exit 1
958cat >confmdtest4/index <<EOF || exit 1
959user0	1	1	`pwd`	confmdtest
960a	*	indexa
961b	*	indexb
962EOF
963echo "user1	1	1	`pwd`	confmdtest2" >confmdtest4/indexa || exit 1
964echo "aashared	1	1	`pwd`	confmdtest5" >>confmdtest4/indexa || exit 1
965echo "user2	1	1	`pwd`	confmdtest3" >confmdtest4/indexb || exit 1
966
967IMAP_SHAREDINDEXFILE=`pwd`/confmdtest4/index
968export IMAP_SHAREDINDEXFILE
969
970env AUTHENTICATED=user1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
971T001 ACL STORE INBOX user=user0 +l
972T002 CREATE INBOX.a
973T003 ACL STORE INBOX.a anyone +lr
974T004 append INBOX.a \Seen {22}
975Subject: user1
976
977user1
978
979T005 LOGOUT
980EOF
981
982env AUTHENTICATED=user2 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest3 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
983T010 ACL STORE INBOX anyone +l
984T011 CREATE INBOX.a
985T012 append INBOX.a \Seen {22}
986Subject: user2
987
988user2
989
990T013 LOGOUT
991EOF
992
993env AUTHENTICATED=user0 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
994T020 list(acl) "" "#shared.*"
995T021 ACL STORE INBOX anyone acdilrsw
996T022 list(acl) "" "#shared.%"
997T023 LOGOUT
998EOF
999
1000env AUTHENTICATED=user2 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest3 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
1001T030 LIST "" "#shared.*"
1002T031 LIST "" "#shared.%"
1003T032 LIST "" "#shared.a.%"
1004T033 LIST "" "#shared.c.%"
1005T034 SELECT "#shared.a.user1"
1006T035 SELECT "#shared.a.user1.a"
1007T036 FETCH 1:* (ENVELOPE)
1008T037 STATUS #shared.a.user1 (UIDVALIDITY)
1009T038 COPY 1 #shared.user0
1010T039 SELECT #shared.user0
1011T040 CREATE #shared.a.user1.b
1012T041 CREATE #shared.c
1013T042 CREATE #shared.user0.foo
1014T043 RENAME #shared.user0.foo #shared.user0.bar
1015T044 LIST(ACL) "" "#shared.user0*"
1016T045 ACL STORE #shared.a.user1.a anyone lr
1017T046 CREATE #shared.user0.foo
1018T047 ACL STORE #shared.user0.foo anyone alr
1019T048 ACL STORE #shared.user0.bar anyone -x
1020T049 RENAME #shared.user0.bar #shared.user0.foo.bar
1021T050 ACL STORE #shared.user0.bar anyone +x
1022T051 RENAME #shared.user0.bar #shared.user0.foo.bar
1023T052 ACL STORE #shared.user0.foo anyone +c
1024T053 RENAME #shared.user0.bar #shared.user0.foo.bar
1025T054 LIST "" "#shared.user0*"
1026TDONE LOGOUT
1027EOF
1028
1029cat >confmdtest4/indexb <<EOF
1030use&2	1	1	`pwd`	confmdtest3
1031user.2	1	1	`pwd`	confmdtest3
1032usér/3	1	1	`pwd`	confmdtest3
1033EOF
1034
1035env AUTHENTICATED=user1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
1036T055 LIST "" "#shared.b.*"
1037T056 LIST "" "#shared.b.%"
1038T057 LIST "" "#shared.b.user 2.*"
1039T058 LIST "" "#shared.b.use&-2.*"
1040TDONE LOGOUT
1041EOF
1042
1043env IMAP_SHAREDMUNGENAMES=1 AUTHENTICATED=user1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
1044T055 LIST "" "#shared.b.*"
1045T056 LIST "" "#shared.b.%"
1046T057 LIST "" "#shared.b.user\\\\:2.*"
1047T058 LIST "" "#shared.b.use&-2.*"
1048T059 CREATE INBOX.a.b
1049T060 SELECT INBOX.a.b
1050T061 RENAME INBOX.a INBOX.aa
1051T062 CLOSE
1052T063 RENAME INBOX.a INBOX.aa
1053T064 RENAME INBOX INBOX.c
1054T065 RENAME INBOX.aa #shared.user0.aa
1055T066 LIST "" #shared.*
1056T067 LIST "" #shared.%
1057T068 LIST "" #shared.%
1058T069 LIST "" #shared.%.%
1059T070 LIST "" #shared.%.%.%
1060T071 LIST "" #shared.%.%.%.%
1061TDONE LOGOUT
1062EOF
1063
1064echo "usergroup1	1	1	`pwd`	confmdtest" >confmdtest4/indexgroup1 || exit 1
1065
1066env IMAP_SHAREDMUNGENAMES=1 AUTHENTICATED=user1 OPTIONS=sharedgroup=group1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
1067T072 LIST "" #shared.*
1068T073 LIST(ACL) "" INBOX
1069T074 ACL STORE INBOX user=fred lr
1070T075 ACL STORE INBOX -user=john lr
1071T076 ACL STORE INBOX -authuser lr
1072T077 GETACL INBOX
1073T078 SETACL INBOX -authuser lcr
1074T079 SETACL INBOX -john lcr
1075T080 SETACL INBOX fred cr
1076T081 GETACL INBOX
1077T082 LIST(ACL) "" INBOX
1078T083 DELETEACL INBOX -john
1079T084 DELETEACL INBOX fred
1080T085 GETACL INBOX
1081T086 LIST(ACL) "" INBOX
1082TDONE LOGOUT
1083EOF
1084
1085