annotate src/plugins/pop3-migration/pop3-migration-plugin.c @ 16500:c903fbcbf5d2

pop3-migration: struct mailbox must be freed before mail_storage is destroyed. Fixes a memory leak where the user wasn't destroyed at all because the mailbox still caused the user to be referenced.
author Timo Sirainen <tss@iki.fi>
date Wed, 12 Jun 2013 22:45:43 +0300
parents 36ef72481934
children 18d0ce83bf7a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15715
36ef72481934 Oops :) Update copyrights to 2013 without breaking all .c files.
Timo Sirainen <tss@iki.fi>
parents: 15714
diff changeset
1 /* Copyright (c) 2007-2013 Dovecot authors, see the included COPYING file */
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "array.h"
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "istream.h"
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "istream-header-filter.h"
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "sha1.h"
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
8 #include "message-size.h"
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include "mail-namespace.h"
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #include "mail-search-build.h"
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 #include "mail-storage-private.h"
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 #include "pop3-migration-plugin.h"
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 #define POP3_MIGRATION_CONTEXT(obj) \
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 MODULE_CONTEXT(obj, pop3_migration_storage_module)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 #define POP3_MIGRATION_MAIL_CONTEXT(obj) \
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 MODULE_CONTEXT(obj, pop3_migration_mail_module)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 struct pop3_uidl_map {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 uint32_t pop3_seq;
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
21 uint32_t imap_uid;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 /* UIDL */
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 const char *pop3_uidl;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 /* LIST size */
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 uoff_t size;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 /* sha1(TOP 0) - set only when needed */
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 unsigned char hdr_sha1[SHA1_RESULTLEN];
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 unsigned int hdr_sha1_set:1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 };
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 struct imap_msg_map {
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
33 uint32_t uid, pop3_seq;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 uoff_t psize;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 const char *pop3_uidl;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 /* sha1(header) - set only when needed */
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 unsigned char hdr_sha1[SHA1_RESULTLEN];
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 unsigned int hdr_sha1_set:1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 };
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 struct pop3_migration_mail_storage {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 union mail_storage_module_context module_ctx;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 const char *pop3_box_vname;
14920
a097ef0a9d6d Array API changed: ARRAY_DEFINE(name, type) -> ARRAY(type) name
Timo Sirainen <tss@iki.fi>
parents: 14835
diff changeset
46 ARRAY(struct pop3_uidl_map) pop3_uidl_map;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 unsigned int all_mailboxes:1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 unsigned int pop3_all_hdr_sha1_set:1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 };
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 struct pop3_migration_mailbox {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 union mailbox_module_context module_ctx;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54
14920
a097ef0a9d6d Array API changed: ARRAY_DEFINE(name, type) -> ARRAY(type) name
Timo Sirainen <tss@iki.fi>
parents: 14835
diff changeset
55 ARRAY(struct imap_msg_map) imap_msg_map;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 unsigned int first_unfound_idx;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 unsigned int uidl_synced:1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 unsigned int uidl_sync_failed:1;
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
60 unsigned int uidl_ordered:1;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 };
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 static const char *hdr_hash_skip_headers[] = {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 "Content-Length",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 "Status",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 "X-IMAP",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 "X-IMAPbase",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 "X-Keywords",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 "X-Message-Flag",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 "X-Status",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 "X-UID",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 "X-UIDL"
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 };
15199
73916b7be94e Plugin ABI version checking improvements.
Timo Sirainen <tss@iki.fi>
parents: 14921
diff changeset
74 const char *pop3_migration_plugin_version = DOVECOT_ABI_VERSION;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 static MODULE_CONTEXT_DEFINE_INIT(pop3_migration_storage_module,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 &mail_storage_module_register);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 static MODULE_CONTEXT_DEFINE_INIT(pop3_migration_mail_module,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 &mail_module_register);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 static int imap_msg_map_uid_cmp(const struct imap_msg_map *map1,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 const struct imap_msg_map *map2)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 if (map1->uid < map2->uid)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 return -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 if (map1->uid > map2->uid)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 return 1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 return 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 static int pop3_uidl_map_pop3_seq_cmp(const struct pop3_uidl_map *map1,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92 const struct pop3_uidl_map *map2)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 if (map1->pop3_seq < map2->pop3_seq)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 return -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 if (map1->pop3_seq > map2->pop3_seq)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 return 1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 return 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101 static int pop3_uidl_map_hdr_cmp(const struct pop3_uidl_map *map1,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 const struct pop3_uidl_map *map2)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 return memcmp(map1->hdr_sha1, map2->hdr_sha1, sizeof(map1->hdr_sha1));
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 static int imap_msg_map_hdr_cmp(const struct imap_msg_map *map1,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 const struct imap_msg_map *map2)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110 return memcmp(map1->hdr_sha1, map2->hdr_sha1, sizeof(map1->hdr_sha1));
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 static int get_hdr_sha1(struct mail *mail, unsigned char sha1[SHA1_RESULTLEN])
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 {
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
115 struct message_size hdr_size;
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
116 struct istream *input, *input2;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 const unsigned char *data;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118 size_t size;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 struct sha1_ctxt sha1_ctx;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
121 if (mail_get_hdr_stream(mail, &hdr_size, &input) < 0) {
14423
52ad5a66ee58 pop3-migration: Error message improvement.
Timo Sirainen <tss@iki.fi>
parents: 14402
diff changeset
122 i_error("pop3_migration: Failed to get header for msg %u: %s",
52ad5a66ee58 pop3-migration: Error message improvement.
Timo Sirainen <tss@iki.fi>
parents: 14402
diff changeset
123 mail->seq, mailbox_get_last_error(mail->box, NULL));
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 return -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125 }
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
126 input2 = i_stream_create_limit(input, hdr_size.physical_size);
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 /* hide headers that might change or be different in IMAP vs. POP3 */
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
128 input = i_stream_create_header_filter(input2,
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
129 HEADER_FILTER_EXCLUDE | HEADER_FILTER_NO_CR,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
130 hdr_hash_skip_headers,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131 N_ELEMENTS(hdr_hash_skip_headers),
14921
d3db2ba15d00 Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents: 14920
diff changeset
132 *null_header_filter_callback, (void *)NULL);
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
133 i_stream_unref(&input2);
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135 sha1_init(&sha1_ctx);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 while (i_stream_read_data(input, &data, &size, 0) > 0) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 sha1_loop(&sha1_ctx, data, size);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
138 i_stream_skip(input, size);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
140 if (input->stream_errno != 0) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
141 i_error("pop3_migration: Failed to read header for msg %u: %m",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
142 mail->seq);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
143 i_stream_unref(&input);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144 return -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
146 sha1_result(&sha1_ctx, sha1);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
147 i_stream_unref(&input);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
148 return 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
149 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
150
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
151 static struct mailbox *pop3_mailbox_alloc(struct mail_storage *storage)
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
152 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
153 struct pop3_migration_mail_storage *mstorage =
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154 POP3_MIGRATION_CONTEXT(storage);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
155 struct mail_namespace *ns;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
156
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
157 ns = mail_namespace_find(storage->user->namespaces,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 mstorage->pop3_box_vname);
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
159 i_assert(ns != NULL);
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
160 return mailbox_alloc(ns->list, mstorage->pop3_box_vname,
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
161 MAILBOX_FLAG_READONLY | MAILBOX_FLAG_POP3_SESSION);
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
162 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
163
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
164 static int pop3_map_read(struct mail_storage *storage, struct mailbox *pop3_box)
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
166 struct pop3_migration_mail_storage *mstorage =
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
167 POP3_MIGRATION_CONTEXT(storage);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168 struct mailbox_transaction_context *t;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
169 struct mail_search_args *search_args;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
170 struct mail_search_context *ctx;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
171 struct mail *mail;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
172 struct pop3_uidl_map *map;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
173 const char *uidl;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
174 uoff_t size;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
175 int ret = 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
176
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
177 if (array_is_created(&mstorage->pop3_uidl_map)) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
178 /* already read these, just reset the imap_uids */
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
179 array_foreach_modifiable(&mstorage->pop3_uidl_map, map)
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
180 map->imap_uid = 0;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
181 return 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
182 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
183 i_array_init(&mstorage->pop3_uidl_map, 128);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
184
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
185 if (mailbox_sync(pop3_box, 0) < 0) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
186 i_error("pop3_migration: Couldn't sync mailbox %s: %s",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
187 pop3_box->vname, mailbox_get_last_error(pop3_box, NULL));
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
188 return -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
189 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
190
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
191 t = mailbox_transaction_begin(pop3_box, 0);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
192 search_args = mail_search_build_init();
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
193 mail_search_build_add_all(search_args);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
194 ctx = mailbox_search_init(t, search_args, NULL,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
195 MAIL_FETCH_VIRTUAL_SIZE, NULL);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
196 mail_search_args_unref(&search_args);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
197
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
198 while (mailbox_search_next(ctx, &mail)) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
199 if (mail_get_virtual_size(mail, &size) < 0) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
200 i_error("pop3_migration: Failed to get size for msg %u: %s",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
201 mail->seq,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
202 mailbox_get_last_error(pop3_box, NULL));
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
203 ret = -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
204 break;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
205 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
206 if (mail_get_special(mail, MAIL_FETCH_UIDL_BACKEND, &uidl) < 0) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
207 i_error("pop3_migration: Failed to get UIDL for msg %u: %s",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
208 mail->seq,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
209 mailbox_get_last_error(pop3_box, NULL));
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
210 ret = -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
211 break;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
212 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
213 if (*uidl == '\0') {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
214 i_warning("pop3_migration: UIDL for msg %u is empty",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
215 mail->seq);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
216 continue;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
217 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
218
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
219 map = array_append_space(&mstorage->pop3_uidl_map);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
220 map->pop3_seq = mail->seq;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
221 map->pop3_uidl = p_strdup(storage->pool, uidl);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
222 map->size = size;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
223 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
224
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
225 if (mailbox_search_deinit(&ctx) < 0)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
226 ret = -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
227 (void)mailbox_transaction_commit(&t);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
228 return ret;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
229 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
230
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
231 static int
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
232 pop3_map_read_hdr_hashes(struct mail_storage *storage, struct mailbox *pop3_box,
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
233 unsigned first_seq)
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
234 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
235 struct pop3_migration_mail_storage *mstorage =
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
236 POP3_MIGRATION_CONTEXT(storage);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
237 struct mailbox_transaction_context *t;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
238 struct mail_search_args *search_args;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
239 struct mail_search_context *ctx;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
240 struct mail *mail;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
241 struct pop3_uidl_map *map;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
242 int ret = 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
243
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
244 if (mstorage->pop3_all_hdr_sha1_set)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
245 return 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
246 if (mstorage->all_mailboxes) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
247 /* we may be matching against multiple mailboxes.
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
248 read all the hashes only once. */
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
249 first_seq = 1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
250 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
251
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
252 t = mailbox_transaction_begin(pop3_box, 0);
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
253 search_args = mail_search_build_init();
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
254 mail_search_build_add_seqset(search_args, first_seq,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
255 array_count(&mstorage->pop3_uidl_map)+1);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
256 ctx = mailbox_search_init(t, search_args, NULL,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
257 MAIL_FETCH_STREAM_HEADER, NULL);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
258 mail_search_args_unref(&search_args);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
259
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
260 while (mailbox_search_next(ctx, &mail)) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
261 map = array_idx_modifiable(&mstorage->pop3_uidl_map,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
262 mail->seq-1);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
263
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
264 if (get_hdr_sha1(mail, map->hdr_sha1) < 0)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
265 ret = -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
266 else
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
267 map->hdr_sha1_set = TRUE;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
268 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
269
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
270 if (mailbox_search_deinit(&ctx) < 0)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
271 ret = -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
272 (void)mailbox_transaction_commit(&t);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
273 if (ret == 0 && first_seq == 1)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
274 mstorage->pop3_all_hdr_sha1_set = TRUE;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
275 return ret;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
276 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
277
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
278 static int imap_map_read(struct mailbox *box)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
279 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
280 struct pop3_migration_mailbox *mbox = POP3_MIGRATION_CONTEXT(box);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
281 struct mailbox_status status;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
282 struct mailbox_transaction_context *t;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
283 struct mail_search_args *search_args;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
284 struct mail_search_context *ctx;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
285 struct mail *mail;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
286 struct imap_msg_map *map;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
287 uoff_t psize;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
288 int ret = 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
289
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
290 mailbox_get_open_status(box, STATUS_MESSAGES, &status);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
291
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
292 i_assert(!array_is_created(&mbox->imap_msg_map));
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
293 p_array_init(&mbox->imap_msg_map, box->pool, status.messages);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
294
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
295 t = mailbox_transaction_begin(box, 0);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
296 search_args = mail_search_build_init();
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
297 mail_search_build_add_all(search_args);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
298 ctx = mailbox_search_init(t, search_args, NULL,
14402
87cd04f35f82 pop3-replication: Don't request virtual size from IMAP mailbox, we don't need it.
Timo Sirainen <tss@iki.fi>
parents: 14401
diff changeset
299 MAIL_FETCH_PHYSICAL_SIZE, NULL);
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
300 mail_search_args_unref(&search_args);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
301
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
302 while (mailbox_search_next(ctx, &mail)) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
303 if (mail_get_physical_size(mail, &psize) < 0) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
304 i_error("pop3_migration: Failed to get psize for imap uid %u: %s",
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
305 mail->uid,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
306 mailbox_get_last_error(box, NULL));
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
307 ret = -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
308 break;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
309 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
310
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
311 map = array_append_space(&mbox->imap_msg_map);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
312 map->uid = mail->uid;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
313 map->psize = psize;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
314 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
315
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
316 if (mailbox_search_deinit(&ctx) < 0)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
317 ret = -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
318 (void)mailbox_transaction_commit(&t);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
319 return ret;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
320 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
321
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
322 static int imap_map_read_hdr_hashes(struct mailbox *box)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
323 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
324 struct pop3_migration_mailbox *mbox = POP3_MIGRATION_CONTEXT(box);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
325 struct mailbox_transaction_context *t;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
326 struct mail_search_args *search_args;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
327 struct mail_search_context *ctx;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
328 struct mail *mail;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
329 struct imap_msg_map *map;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
330 int ret = 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
331
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
332 t = mailbox_transaction_begin(box, 0);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
333 search_args = mail_search_build_init();
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
334 mail_search_build_add_seqset(search_args, mbox->first_unfound_idx+1,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
335 array_count(&mbox->imap_msg_map)+1);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
336 ctx = mailbox_search_init(t, search_args, NULL,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
337 MAIL_FETCH_STREAM_HEADER, NULL);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
338 mail_search_args_unref(&search_args);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
339
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
340 while (mailbox_search_next(ctx, &mail)) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
341 map = array_idx_modifiable(&mbox->imap_msg_map, mail->seq-1);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
342
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
343 if (get_hdr_sha1(mail, map->hdr_sha1) < 0)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
344 ret = -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
345 else
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
346 map->hdr_sha1_set = TRUE;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
347 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
348
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
349 if (mailbox_search_deinit(&ctx) < 0)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
350 ret = -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
351 (void)mailbox_transaction_commit(&t);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
352 return ret;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
353 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
354
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
355 static bool pop3_uidl_assign_by_size(struct mailbox *box)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
356 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
357 struct pop3_migration_mailbox *mbox = POP3_MIGRATION_CONTEXT(box);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
358 struct pop3_migration_mail_storage *mstorage =
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
359 POP3_MIGRATION_CONTEXT(box->storage);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
360 struct pop3_uidl_map *pop3_map;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
361 struct imap_msg_map *imap_map;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
362 unsigned int i, pop3_count, imap_count, count;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
363
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
364 pop3_map = array_get_modifiable(&mstorage->pop3_uidl_map, &pop3_count);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
365 imap_map = array_get_modifiable(&mbox->imap_msg_map, &imap_count);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
366 count = I_MIN(pop3_count, imap_count);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
367
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
368 /* see if we can match the messages using sizes */
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
369 for (i = 0; i < count; i++) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
370 if (pop3_map[i].size != imap_map[i].psize)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
371 break;
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
372 if (i+1 < count && pop3_map[i].size == pop3_map[i+1].size) {
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
373 /* two messages with same size, don't trust them */
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
374 break;
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
375 }
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
376
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
377 pop3_map[i].imap_uid = imap_map[i].uid;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
378 imap_map[i].pop3_uidl = pop3_map[i].pop3_uidl;
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
379 imap_map[i].pop3_seq = pop3_map[i].pop3_seq;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
380 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
381 mbox->first_unfound_idx = i;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
382 return i == count;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
383 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
384
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
385 static int
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
386 pop3_uidl_assign_by_hdr_hash(struct mailbox *box, struct mailbox *pop3_box)
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
387 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
388 struct pop3_migration_mail_storage *mstorage =
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
389 POP3_MIGRATION_CONTEXT(box->storage);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
390 struct pop3_migration_mailbox *mbox = POP3_MIGRATION_CONTEXT(box);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
391 struct pop3_uidl_map *pop3_map;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
392 struct imap_msg_map *imap_map;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
393 unsigned int pop3_idx, imap_idx, pop3_count, imap_count;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
394 unsigned int first_seq, missing_uids_count;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
395 int ret;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
396
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
397 first_seq = mbox->first_unfound_idx+1;
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
398 if (pop3_map_read_hdr_hashes(box->storage, pop3_box, first_seq) < 0 ||
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
399 imap_map_read_hdr_hashes(box) < 0)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
400 return -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
401
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
402 array_sort(&mstorage->pop3_uidl_map, pop3_uidl_map_hdr_cmp);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
403 array_sort(&mbox->imap_msg_map, imap_msg_map_hdr_cmp);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
404
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
405 pop3_map = array_get_modifiable(&mstorage->pop3_uidl_map, &pop3_count);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
406 imap_map = array_get_modifiable(&mbox->imap_msg_map, &imap_count);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
407
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
408 pop3_idx = imap_idx = 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
409 while (pop3_idx < pop3_count && imap_idx < imap_count) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
410 if (!pop3_map[pop3_idx].hdr_sha1_set ||
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
411 pop3_map[pop3_idx].imap_uid != 0) {
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
412 pop3_idx++;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
413 continue;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
414 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
415 if (!imap_map[imap_idx].hdr_sha1_set ||
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
416 imap_map[imap_idx].pop3_uidl != NULL) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
417 imap_idx++;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
418 continue;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
419 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
420 ret = memcmp(pop3_map[pop3_idx].hdr_sha1,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
421 imap_map[imap_idx].hdr_sha1,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
422 sizeof(pop3_map[pop3_idx].hdr_sha1));
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
423 if (ret < 0)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
424 pop3_idx++;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
425 else if (ret > 0)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
426 imap_idx++;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
427 else {
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
428 pop3_map[pop3_idx].imap_uid = imap_map[imap_idx].uid;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
429 imap_map[imap_idx].pop3_uidl =
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
430 pop3_map[pop3_idx].pop3_uidl;
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
431 imap_map[imap_idx].pop3_seq =
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
432 pop3_map[pop3_idx].pop3_seq;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
433 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
434 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
435 missing_uids_count = 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
436 for (pop3_idx = 0; pop3_idx < pop3_count; pop3_idx++) {
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
437 if (pop3_map[pop3_idx].imap_uid == 0)
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
438 missing_uids_count++;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
439 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
440 if (missing_uids_count > 0 && !mstorage->all_mailboxes) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
441 i_warning("pop3_migration: %u POP3 messages have no "
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
442 "matching IMAP messages", missing_uids_count);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
443 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
444 array_sort(&mstorage->pop3_uidl_map, pop3_uidl_map_pop3_seq_cmp);
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
445 array_sort(&mbox->imap_msg_map, imap_msg_map_uid_cmp);
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
446 return 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
447 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
448
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
449 static int pop3_migration_uidl_sync(struct mailbox *box)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
450 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
451 struct pop3_migration_mailbox *mbox = POP3_MIGRATION_CONTEXT(box);
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
452 struct pop3_migration_mail_storage *mstorage =
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
453 POP3_MIGRATION_CONTEXT(box->storage);
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
454 struct mailbox *pop3_box;
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
455 const struct pop3_uidl_map *pop3_map;
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
456 unsigned int i, count;
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
457 uint32_t prev_uid;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
458
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
459 if (mbox->uidl_synced)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
460 return 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
461
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
462 pop3_box = pop3_mailbox_alloc(box->storage);
14835
ab6a4455b27d pop3-migration: Avoid disconnection from POP3 server due to idling.
Timo Sirainen <tss@iki.fi>
parents: 14423
diff changeset
463 /* the POP3 server isn't connected to yet. handle all IMAP traffic
ab6a4455b27d pop3-migration: Avoid disconnection from POP3 server due to idling.
Timo Sirainen <tss@iki.fi>
parents: 14423
diff changeset
464 first before connecting, so POP3 server won't disconnect us due to
ab6a4455b27d pop3-migration: Avoid disconnection from POP3 server due to idling.
Timo Sirainen <tss@iki.fi>
parents: 14423
diff changeset
465 idling. */
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
466 if (imap_map_read(box) < 0 ||
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
467 pop3_map_read(box->storage, pop3_box) < 0) {
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
468 mailbox_free(&pop3_box);
14835
ab6a4455b27d pop3-migration: Avoid disconnection from POP3 server due to idling.
Timo Sirainen <tss@iki.fi>
parents: 14423
diff changeset
469 return -1;
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
470 }
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
471
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
472 if (!pop3_uidl_assign_by_size(box)) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
473 /* everything wasn't assigned, figure out the rest with
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
474 header hashes */
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
475 if (pop3_uidl_assign_by_hdr_hash(box, pop3_box) < 0) {
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
476 mailbox_free(&pop3_box);
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
477 return -1;
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
478 }
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
479 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
480
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
481 /* see if the POP3 UIDL order is the same as IMAP UID order */
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
482 mbox->uidl_ordered = TRUE;
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
483 pop3_map = array_get(&mstorage->pop3_uidl_map, &count);
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
484 prev_uid = 0;
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
485 for (i = 0; i < count; i++) {
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
486 if (pop3_map[i].imap_uid == 0)
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
487 continue;
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
488
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
489 if (prev_uid > pop3_map[i].imap_uid) {
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
490 mbox->uidl_ordered = FALSE;
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
491 break;
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
492 }
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
493 prev_uid = pop3_map[i].imap_uid;
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
494 }
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
495
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
496 mbox->uidl_synced = TRUE;
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
497 mailbox_free(&pop3_box);
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
498 return 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
499 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
500
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
501 static int
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
502 pop3_migration_get_special(struct mail *_mail, enum mail_fetch_field field,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
503 const char **value_r)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
504 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
505 struct mail_private *mail = (struct mail_private *)_mail;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
506 union mail_module_context *mmail = POP3_MIGRATION_MAIL_CONTEXT(mail);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
507 struct pop3_migration_mailbox *mbox = POP3_MIGRATION_CONTEXT(_mail->box);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
508 struct imap_msg_map map_key, *map;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
509
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
510 if (field == MAIL_FETCH_UIDL_BACKEND ||
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
511 field == MAIL_FETCH_POP3_ORDER) {
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
512 if (mbox->uidl_sync_failed ||
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
513 pop3_migration_uidl_sync(_mail->box) < 0) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
514 mbox->uidl_sync_failed = TRUE;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
515 mail_storage_set_error(_mail->box->storage,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
516 MAIL_ERROR_TEMP,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
517 "POP3 UIDLs couldn't be synced");
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
518 return -1;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
519 }
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
520
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
521 memset(&map_key, 0, sizeof(map_key));
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
522 map_key.uid = _mail->uid;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
523 map = array_bsearch(&mbox->imap_msg_map, &map_key,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
524 imap_msg_map_uid_cmp);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
525 if (map != NULL && map->pop3_uidl != NULL) {
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
526 if (field == MAIL_FETCH_UIDL_BACKEND)
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
527 *value_r = map->pop3_uidl;
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
528 else
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
529 *value_r = t_strdup_printf("%u", map->pop3_seq);
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
530 return 0;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
531 }
14401
6df2235fd6af pop3-migration: Migrate also POP3 ordering.
Timo Sirainen <tss@iki.fi>
parents: 14398
diff changeset
532 /* not found from POP3 server, fallback to default */
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
533 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
534 return mmail->super.get_special(_mail, field, value_r);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
535 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
536
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
537 static void pop3_migration_mail_allocated(struct mail *_mail)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
538 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
539 struct pop3_migration_mail_storage *mstorage =
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
540 POP3_MIGRATION_CONTEXT(_mail->box->storage);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
541 struct mail_private *mail = (struct mail_private *)_mail;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
542 struct mail_vfuncs *v = mail->vlast;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
543 union mail_module_context *mmail;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
544 struct mail_namespace *ns;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
545
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
546 if (mstorage == NULL ||
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
547 (!mstorage->all_mailboxes && !_mail->box->inbox_user)) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
548 /* assigns UIDLs only for INBOX */
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
549 return;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
550 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
551
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
552 ns = mail_namespace_find(_mail->box->storage->user->namespaces,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
553 mstorage->pop3_box_vname);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
554 if (ns == mailbox_get_namespace(_mail->box)) {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
555 /* we're accessing the pop3-migration namespace itself */
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
556 return;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
557 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
558
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
559 mmail = p_new(mail->pool, union mail_module_context, 1);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
560 mmail->super = *v;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
561 mail->vlast = &mmail->super;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
562
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
563 v->get_special = pop3_migration_get_special;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
564 MODULE_CONTEXT_SET_SELF(mail, pop3_migration_mail_module, mmail);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
565 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
566
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
567 static void pop3_migration_mailbox_allocated(struct mailbox *box)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
568 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
569 struct mailbox_vfuncs *v = box->vlast;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
570 struct pop3_migration_mailbox *mbox;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
571
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
572 mbox = p_new(box->pool, struct pop3_migration_mailbox, 1);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
573 mbox->module_ctx.super = *v;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
574 box->vlast = &mbox->module_ctx.super;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
575
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
576 MODULE_CONTEXT_SET(box, pop3_migration_storage_module, mbox);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
577 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
578
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
579 static void pop3_migration_mail_storage_destroy(struct mail_storage *storage)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
580 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
581 struct pop3_migration_mail_storage *mstorage =
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
582 POP3_MIGRATION_CONTEXT(storage);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
583
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
584 if (array_is_created(&mstorage->pop3_uidl_map))
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
585 array_free(&mstorage->pop3_uidl_map);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
586
15272
ca10d2e8d8e3 lib-storage: Moved mail attribute dict to struct mail_storage.
Timo Sirainen <tss@iki.fi>
parents: 15199
diff changeset
587 mstorage->module_ctx.super.destroy(storage);
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
588 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
589
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
590 static void pop3_migration_mail_storage_created(struct mail_storage *storage)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
591 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
592 struct pop3_migration_mail_storage *mstorage;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
593 struct mail_storage_vfuncs *v = storage->vlast;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
594 const char *pop3_box_vname;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
595
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
596 pop3_box_vname = mail_user_plugin_getenv(storage->user,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
597 "pop3_migration_mailbox");
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
598 if (pop3_box_vname == NULL)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
599 return;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
600
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
601 mstorage = p_new(storage->pool, struct pop3_migration_mail_storage, 1);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
602 mstorage->module_ctx.super = *v;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
603 storage->vlast = &mstorage->module_ctx.super;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
604 v->destroy = pop3_migration_mail_storage_destroy;
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
605
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
606 mstorage->pop3_box_vname = p_strdup(storage->pool, pop3_box_vname);
16500
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
607 mstorage->all_mailboxes =
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
608 mail_user_plugin_getenv(storage->user,
c903fbcbf5d2 pop3-migration: struct mailbox must be freed before mail_storage is destroyed.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
609 "pop3_migration_all_mailboxes") != NULL;
14398
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
610
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
611 MODULE_CONTEXT_SET(storage, pop3_migration_storage_module, mstorage);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
612 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
613
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
614 static struct mail_storage_hooks pop3_migration_mail_storage_hooks = {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
615 .mail_allocated = pop3_migration_mail_allocated,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
616 .mailbox_allocated = pop3_migration_mailbox_allocated,
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
617 .mail_storage_created = pop3_migration_mail_storage_created
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
618 };
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
619
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
620 void pop3_migration_plugin_init(struct module *module)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
621 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
622 mail_storage_hooks_add(module, &pop3_migration_mail_storage_hooks);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
623 }
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
624
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
625 void pop3_migration_plugin_deinit(void)
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
626 {
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
627 mail_storage_hooks_remove(&pop3_migration_mail_storage_hooks);
78317179b4af Added pop3-migration plugin for getting POP3 UIDLs from POP3 server.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
628 }