Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/plugins/mail-log/mail-log-plugin.c @ 5258:1fffd36401eb HEAD
Log the mailbox name, unless it's INBOX.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 10 Mar 2007 14:54:20 +0200 |
parents | f33e5ce7a73c |
children | 40bd57129083 |
rev | line source |
---|---|
5034
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1 /* Copyright (C) 2007 Timo Sirainen */ |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "array.h" |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "str-sanitize.h" |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "mail-storage-private.h" |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "mail-log-plugin.h" |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #define MAILBOX_NAME_LOG_LEN 64 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 #define MSGID_LOG_LEN 80 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 #define MAIL_LOG_CONTEXT(obj) \ |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 *((void **)array_idx_modifiable(&(obj)->module_contexts, \ |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 mail_log_storage_module_id)) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 struct mail_log_mail_storage { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 struct mail_storage_vfuncs super; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 }; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 struct mail_log_mailbox { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 struct mailbox_vfuncs super; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 }; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 struct mail_log_mail { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 struct mail_vfuncs super; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 }; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 /* defined by imap, pop3, lda */ |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 extern void (*hook_mail_storage_created)(struct mail_storage *storage); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 |
5185
24f4a959a24c
Added <plugin_name>_version string.
Timo Sirainen <tss@iki.fi>
parents:
5117
diff
changeset
|
31 const char *mail_log_plugin_version = PACKAGE_VERSION; |
24f4a959a24c
Added <plugin_name>_version string.
Timo Sirainen <tss@iki.fi>
parents:
5117
diff
changeset
|
32 |
5034
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 static void (*mail_log_next_hook_mail_storage_created) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 (struct mail_storage *storage); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 static unsigned int mail_log_storage_module_id = 0; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 static bool mail_log_storage_module_id_set = FALSE; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 static void mail_log_action(struct mail *mail, const char *action) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 { |
5258
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
41 const char *msgid, *mailbox_str; |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
42 |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
43 mailbox_str = mailbox_get_name(mail->box); |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
44 if (strcmp(mailbox_str, "INBOX") == 0) { |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
45 /* most operations are for INBOX, and POP3 has only INBOX, |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
46 so don't add it. */ |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
47 mailbox_str = ""; |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
48 } else { |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
49 mailbox_str = str_sanitize(mailbox_str, 80); |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
50 mailbox_str = t_strconcat(", box=", mailbox_str, NULL); |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
51 } |
5034
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 msgid = mail_get_first_header(mail, "Message-ID"); |
5258
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
54 i_info("%s: uid=%u, msgid=%s%s", action, mail->uid, |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
55 msgid == NULL ? "(null)" : str_sanitize(msgid, MSGID_LOG_LEN), |
1fffd36401eb
Log the mailbox name, unless it's INBOX.
Timo Sirainen <tss@iki.fi>
parents:
5205
diff
changeset
|
56 mailbox_str); |
5034
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 } |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 static int mail_log_mail_expunge(struct mail *_mail) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 struct mail_private *mail = (struct mail_private *)_mail; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 struct mail_log_mail *lmail = MAIL_LOG_CONTEXT(mail); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 if (lmail->super.expunge(_mail) < 0) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 return -1; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 mail_log_action(_mail, "expunged"); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 return 0; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 } |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 static int |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 mail_log_mail_update_flags(struct mail *_mail, enum modify_type modify_type, |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 enum mail_flags flags) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 struct mail_private *mail = (struct mail_private *)_mail; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 struct mail_log_mail *lmail = MAIL_LOG_CONTEXT(mail); |
5205
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
77 enum mail_flags old_flags, new_flags; |
5034
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 |
5205
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
79 old_flags = mail_get_flags(_mail); |
5034
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 if (lmail->super.update_flags(_mail, modify_type, flags) < 0) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 return -1; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 |
5205
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
83 new_flags = old_flags; |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
84 switch (modify_type) { |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
85 case MODIFY_ADD: |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
86 new_flags |= flags; |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
87 break; |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
88 case MODIFY_REMOVE: |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
89 new_flags &= ~flags; |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
90 break; |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
91 case MODIFY_REPLACE: |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
92 new_flags = flags; |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
93 break; |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
94 } |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
95 if (((old_flags ^ new_flags) & MAIL_DELETED) == 0) |
5034
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 return 0; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
97 |
5205
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
98 mail_log_action(_mail, (new_flags & MAIL_DELETED) != 0 ? |
f33e5ce7a73c
Fixed deleted/undeleted logging.
Timo Sirainen <tss@iki.fi>
parents:
5185
diff
changeset
|
99 "deleted" : "undeleted"); |
5034
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 return 0; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 } |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 static struct mail * |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 mail_log_mail_alloc(struct mailbox_transaction_context *t, |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 enum mail_fetch_field wanted_fields, |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
106 struct mailbox_header_lookup_ctx *wanted_headers) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
108 struct mail_log_mailbox *lbox = MAIL_LOG_CONTEXT(t->box); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
109 struct mail_log_mail *lmail; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 struct mail *_mail; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 struct mail_private *mail; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
112 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
113 _mail = lbox->super.mail_alloc(t, wanted_fields, wanted_headers); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
114 mail = (struct mail_private *)_mail; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
115 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
116 lmail = p_new(mail->pool, struct mail_log_mail, 1); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 lmail->super = mail->v; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
118 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 mail->v.update_flags = mail_log_mail_update_flags; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 mail->v.expunge = mail_log_mail_expunge; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 array_idx_set(&mail->module_contexts, |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 mail_log_storage_module_id, &lmail); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 return _mail; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
124 } |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
125 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
126 static int |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 mail_log_copy(struct mailbox_transaction_context *t, struct mail *mail, |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 enum mail_flags flags, struct mail_keywords *keywords, |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
129 struct mail *dest_mail) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
130 { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
131 struct mail_log_mailbox *lbox = MAIL_LOG_CONTEXT(t->box); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 const char *name; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
133 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
134 if (lbox->super.copy(t, mail, flags, keywords, dest_mail) < 0) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 return -1; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
137 t_push(); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 name = str_sanitize(mailbox_get_name(t->box), MAILBOX_NAME_LOG_LEN); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 mail_log_action(mail, t_strdup_printf("copy -> %s", name)); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 t_pop(); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 return 0; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
142 } |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
143 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
144 static struct mailbox * |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
145 mail_log_mailbox_open(struct mail_storage *storage, const char *name, |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 struct istream *input, enum mailbox_open_flags flags) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
147 { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 struct mail_log_mail_storage *lstorage = MAIL_LOG_CONTEXT(storage); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
149 struct mailbox *box; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 struct mail_log_mailbox *lbox; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
151 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
152 box = lstorage->super.mailbox_open(storage, name, input, flags); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 if (box == NULL) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 return NULL; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
155 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
156 lbox = p_new(box->pool, struct mail_log_mailbox, 1); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 lbox->super = box->v; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 box->v.mail_alloc = mail_log_mail_alloc; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
160 box->v.copy = mail_log_copy; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 array_idx_set(&box->module_contexts, mail_log_storage_module_id, &lbox); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 return box; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 } |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
164 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
165 static int |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
166 mail_log_mailbox_delete(struct mail_storage *storage, const char *name) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
167 { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
168 struct mail_log_mail_storage *lstorage = MAIL_LOG_CONTEXT(storage); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
169 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
170 if (lstorage->super.mailbox_delete(storage, name) < 0) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
171 return -1; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
172 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
173 i_info("Mailbox deleted: %s", str_sanitize(name, MAILBOX_NAME_LOG_LEN)); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
174 return 0; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
175 } |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
176 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
177 static void mail_log_mail_storage_created(struct mail_storage *storage) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
178 { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
179 struct mail_log_mail_storage *lstorage; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
180 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
181 if (mail_log_next_hook_mail_storage_created != NULL) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
182 mail_log_next_hook_mail_storage_created(storage); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
183 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
184 lstorage = p_new(storage->pool, struct mail_log_mail_storage, 1); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
185 lstorage->super = storage->v; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
186 storage->v.mailbox_open = mail_log_mailbox_open; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
187 storage->v.mailbox_delete = mail_log_mailbox_delete; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
188 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
189 if (!mail_log_storage_module_id_set) { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
190 mail_log_storage_module_id = mail_storage_module_id++; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
191 mail_log_storage_module_id_set = TRUE; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
192 } |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
193 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
194 array_idx_set(&storage->module_contexts, |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
195 mail_log_storage_module_id, &lstorage); |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
196 } |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
197 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
198 void mail_log_plugin_init(void) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
199 { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
200 mail_log_next_hook_mail_storage_created = |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
201 hook_mail_storage_created; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
202 hook_mail_storage_created = mail_log_mail_storage_created; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
203 } |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
204 |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
205 void mail_log_plugin_deinit(void) |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
206 { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
207 if (mail_log_storage_module_id_set) { |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
208 hook_mail_storage_created = |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
209 mail_log_next_hook_mail_storage_created; |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
210 } |
1b28e0434d85
Added mail_log plugin to log various mail operations. Currently it logs mail
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
211 } |