[Dovecot] [PATCH] Pop3 order in courier migration script

Christoph Bußenius busseniu at in.tum.de
Mon Feb 27 09:23:14 EET 2012


Hi,

I found a problem in the courier conversion script 
(courier-dovecot-migrate.pl).  In some cases, it does not correctly 
preserve the order of POP3 UIDLs.

Consider the following case, when courierpop3dsizelist contains:

/2 9000 1327481629
AAA1:2,S 10000 21:1327481629
AAA2:2,S 10000 22:1327481629
AAA3:2,S 10000 23:1327481629
AAA4:2,S 10000 24:1327481629
AAA5:2,S 10000 25:1327481629
BBB11:2,S 10000 11:1327481629
BBB12:2,S 10000 12:1327481629
BBB13:2,S 10000 13:1327481629
BBB14:2,S 10000 14:1327481629
BBB15:2,S 10000 15:1327481629

and courierimapuiddb contains:

1 1327480919 9000
11 BBB11
12 BBB12
13 BBB13
14 BBB14
15 BBB15
16 CCC16
17 CCC17
18 CCC18
19 CCC19
20 CCC20
21 AAA1
22 AAA2
23 AAA3
24 AAA4
25 AAA5

then call
courier-dovecot-migrate.pl --to-dovecot --convert
and it will create dovecot-uidlist:

3 V1327480919 N9010
21 PUID21-1327481629 W10000 :AAA1:2,S
22 PUID22-1327481629 W10000 :AAA2:2,S
23 PUID23-1327481629 W10000 :AAA3:2,S
24 PUID24-1327481629 W10000 :AAA4:2,S
25 PUID25-1327481629 W10000 :AAA5:2,S
9000 :CCC17
9001 PUID12-1327481629 W10000 :BBB12:2,S
9002 :CCC16
9003 PUID15-1327481629 W10000 :BBB15:2,S
9004 :CCC20
9005 PUID14-1327481629 W10000 :BBB14:2,S
9006 PUID13-1327481629 W10000 :BBB13:2,S
9007 :CCC18
9008 PUID11-1327481629 W10000 :BBB11:2,S
9009 :CCC19

The problem here is that the BBB files are not in the same order as in 
courierpop3dsizelist, and will therefore have a different order in the 
UIDL response in POP3.  Also, the CCC files are interleaved while they 
should appear at the end.

The reason is how the script assigns new UIDs:  It does not do this in 
the order of courierpop3dsizelist.  In fact the order is random because 
it depends on how perl traverses hashes.

The attached patch fixes this by sorting the messages: First the POP3 
messages get their new UIDs in order of their appearance in 
courierpop3dsizelist (so that the UIDL order will really be the same as 
in Courier), after that, the IMAP-only messages will be checked for UID 
clashes.  The patch also changes how the $prev_uid variable is handled 
because that was also needed to always get the order right.

The algorithm could probably be optimized to reduce the number of UID 
re-assignments to a minimum, however this would complicate the code and 
would only be noticed in a few cases.

The patched courier-dovecot-migrate.pl will create dovecot-uidlist like 
this:

3 V1327480919 N9010
21 PUID21-1327481629 W10000 :AAA1:2,S
22 PUID22-1327481629 W10000 :AAA2:2,S
23 PUID23-1327481629 W10000 :AAA3:2,S
24 PUID24-1327481629 W10000 :AAA4:2,S
25 PUID25-1327481629 W10000 :AAA5:2,S
9000 PUID11-1327481629 W10000 :BBB11:2,S
9001 PUID12-1327481629 W10000 :BBB12:2,S
9002 PUID13-1327481629 W10000 :BBB13:2,S
9003 PUID14-1327481629 W10000 :BBB14:2,S
9004 PUID15-1327481629 W10000 :BBB15:2,S
9005 :CCC16
9006 :CCC17
9007 :CCC18
9008 :CCC19
9009 :CCC20

Cheers,
Christoph

-- 
Christoph Bußenius
Rechnerbetriebsgruppe der Fakultäten Informatik und Mathematik
Technische Universität München
+49 89-289-18519 <> Raum 00.05.055 <> Boltzmannstr. 3 <> Garching

-------------- next part --------------
A non-text attachment was scrubbed...
Name: courier-dovecot-migrate.patch
Type: text/x-patch
Size: 1386 bytes
Desc: not available
URL: <http://dovecot.org/pipermail/dovecot/attachments/20120227/3d6d2756/attachment.bin>


More information about the dovecot mailing list