[dovecot-cvs] dovecot-lda/src common.h, 1.2, 1.3 deliver.c, 1.27,
1.28 sieve-cmu.c, 1.9, 1.10
cras at dovecot.org
cras at dovecot.org
Fri Oct 7 12:34:46 EEST 2005
Update of /var/lib/cvs/dovecot-lda/src
In directory talvi:/tmp/cvs-serv4443
Modified Files:
common.h deliver.c sieve-cmu.c
Log Message:
Support setting flags to mails
Index: common.h
===================================================================
RCS file: /var/lib/cvs/dovecot-lda/src/common.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- common.h 15 Aug 2005 10:23:50 -0000 1.2
+++ common.h 7 Oct 2005 09:34:43 -0000 1.3
@@ -15,7 +15,8 @@
const char *script_path, const char *username);
int save_mail(struct mail_storage *storage, const char *mailbox,
- struct mail *mail);
+ struct mail *mail, enum mail_flags flags,
+ const char *const *keywords);
const char *get_return_path(struct mail *mail);
Index: deliver.c
===================================================================
RCS file: /var/lib/cvs/dovecot-lda/src/deliver.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- deliver.c 3 Oct 2005 21:24:53 -0000 1.27
+++ deliver.c 7 Oct 2005 09:34:43 -0000 1.28
@@ -82,10 +82,12 @@
}
int save_mail(struct mail_storage *storage, const char *mailbox,
- struct mail *mail)
+ struct mail *mail, enum mail_flags flags,
+ const char *const *keywords)
{
struct mailbox *box;
struct mailbox_transaction_context *t;
+ struct mail_keywords *kw;
int ret = 0;
box = mailbox_open(storage, mailbox, NULL, MAILBOX_OPEN_FAST |
@@ -115,8 +117,11 @@
t = mailbox_transaction_begin(box, MAILBOX_TRANSACTION_FLAG_EXTERNAL);
- if (mailbox_copy(t, mail, NULL) < 0)
+ kw = strarray_length(keywords) == 0 ? NULL :
+ mailbox_keywords_create(t, keywords);
+ if (mailbox_copy(t, mail, flags, kw, NULL) < 0)
ret = -1;
+ mailbox_keywords_free(t, kw);
if (ret < 0)
mailbox_transaction_rollback(t);
@@ -577,7 +582,7 @@
if (ret <= 0) {
/* sieve script didn't handle this. store into inbox. */
i_stream_seek(input, 0);
- if (save_mail(storage, "INBOX", mail) < 0) {
+ if (save_mail(storage, "INBOX", mail, 0, NULL) < 0) {
const char *error;
int ret, syntax, temporary_error;
Index: sieve-cmu.c
===================================================================
RCS file: /var/lib/cvs/dovecot-lda/src/sieve-cmu.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- sieve-cmu.c 24 Sep 2005 10:58:13 -0000 1.9
+++ sieve-cmu.c 7 Oct 2005 09:34:43 -0000 1.10
@@ -2,6 +2,7 @@
#include "common.h"
#include "ioloop.h"
+#include "array.h"
#include "hostpid.h"
#include "str.h"
#include "str-sanitize.h"
@@ -182,6 +183,44 @@
return SIEVE_FAIL;
}
+static void get_flags(const sieve_imapflags_t *sieve_flags,
+ enum mail_flags *flags_r, const char *const **keywords_r)
+{
+ array_t ARRAY_DEFINE(keywords, const char *);
+ const char *name;
+ int i;
+
+ *flags_r = 0;
+
+ ARRAY_CREATE(&keywords, default_pool, const char *, 16);
+ for (i = 0; i < sieve_flags->nflags; i++) {
+ name = sieve_flags->flag[i];
+
+ if (name != NULL && *name != '\\') {
+ /* keyword */
+ array_append(&keywords, &name, 1);
+ } else {
+ /* system flag */
+ if (name == NULL || strcasecmp(name, "\\flagged") == 0)
+ *flags_r |= MAIL_FLAGGED;
+ else if (strcasecmp(name, "\\answered") == 0)
+ *flags_r |= MAIL_ANSWERED;
+ else if (strcasecmp(name, "\\deleted") == 0)
+ *flags_r |= MAIL_DELETED;
+ else if (strcasecmp(name, "\\seen") == 0)
+ *flags_r |= MAIL_SEEN;
+ else if (strcasecmp(name, "\\draft") == 0)
+ *flags_r |= MAIL_DRAFT;
+ }
+ }
+
+ name = NULL;
+ array_append(&keywords, &name, 1);
+
+ *keywords_r = array_count(&keywords) == 1 ? NULL :
+ array_get(&keywords, 0);
+}
+
static int sieve_fileinto(void *ac,
void *ic __attr_unused__,
void *sc,
@@ -191,9 +230,12 @@
sieve_fileinto_context_t *fc = (sieve_fileinto_context_t *) ac;
script_data_t *sd = (script_data_t *) sc;
sieve_msgdata_t *md = (sieve_msgdata_t *) mc;
+ enum mail_flags flags;
+ const char *const *keywords;
- /* FIXME: flags */
- if (save_mail(sd->storage, fc->mailbox, md->mail) < 0)
+ get_flags(fc->imapflags, &flags, &keywords);
+
+ if (save_mail(sd->storage, fc->mailbox, md->mail, flags, keywords) < 0)
return SIEVE_FAIL;
return SIEVE_OK;
}
@@ -205,9 +247,12 @@
sieve_keep_context_t *kc = (sieve_keep_context_t *) ac;
script_data_t *sd = (script_data_t *) sc;
sieve_msgdata_t *md = (sieve_msgdata_t *) mc;
+ enum mail_flags flags;
+ const char *const *keywords;
- /* FIXME: flags */
- if (save_mail(sd->storage, "INBOX", md->mail) < 0)
+ get_flags(kc->imapflags, &flags, &keywords);
+
+ if (save_mail(sd->storage, "INBOX", md->mail, flags, keywords) < 0)
return SIEVE_FAIL;
return SIEVE_OK;
More information about the dovecot-cvs
mailing list