From: Timo Sirainen Date: Tue, 14 Sep 2010 12:17:18 +0000 (+0100) Subject: lda: Added -r parameter to specify final recipient address. X-Git-Tag: 2.0.3~22 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9c45821d7448c6f63391d318a6dff785e46e58ee;p=thirdparty%2Fdovecot%2Fcore.git lda: Added -r parameter to specify final recipient address. (As opposed to -a which specifies original recipient address.) This is going to be used by Sieve checks. --- diff --git a/src/lda/main.c b/src/lda/main.c index fc7a517109..9cacbde204 100644 --- a/src/lda/main.c +++ b/src/lda/main.c @@ -251,7 +251,7 @@ int main(int argc, char *argv[]) master_service = master_service_init("lda", MASTER_SERVICE_FLAG_STANDALONE | MASTER_SERVICE_FLAG_DONT_LOG_TO_STDERR, - &argc, &argv, "a:d:ef:km:p:"); + &argc, &argv, "a:d:ef:km:p:r:"); memset(&ctx, 0, sizeof(ctx)); ctx.pool = pool_alloconly_create("mail deliver context", 256); @@ -262,7 +262,7 @@ int main(int argc, char *argv[]) while ((c = master_getopt(master_service)) > 0) { switch (c) { case 'a': - /* destination address */ + /* original recipient address */ ctx.dest_addr = optarg; break; case 'd': @@ -294,6 +294,10 @@ int main(int argc, char *argv[]) /* input path */ path = t_abspath(optarg); break; + case 'r': + /* final recipient address */ + ctx.final_dest_addr = optarg; + break; default: print_help(); return EX_USAGE; @@ -409,6 +413,8 @@ int main(int argc, char *argv[]) t_strconcat(user, "@", ctx.set->hostname, NULL); } } + if (ctx.final_dest_addr == NULL) + ctx.final_dest_addr = ctx.dest_addr; if (mail_deliver(&ctx, &storage) < 0) { if (storage == NULL) { diff --git a/src/lib-lda/mail-deliver.h b/src/lib-lda/mail-deliver.h index e100543ba8..46ca89e607 100644 --- a/src/lib-lda/mail-deliver.h +++ b/src/lib-lda/mail-deliver.h @@ -21,8 +21,10 @@ struct mail_deliver_context { /* Destination user */ struct mail_user *dest_user; - /* Destination email address */ + /* Original recipient address */ const char *dest_addr; + /* Final recipient address (typically same as dest_addr) */ + const char *final_dest_addr; /* Mailbox where mail should be saved, unless e.g. Sieve does something to it. */ const char *dest_mailbox_name; diff --git a/src/lmtp/commands.c b/src/lmtp/commands.c index 8d4f715604..cf34a6b578 100644 --- a/src/lmtp/commands.c +++ b/src/lmtp/commands.c @@ -463,6 +463,7 @@ client_deliver(struct client *client, const struct mail_recipient *rcpt, dctx.src_envelope_sender = client->state.mail_from; dctx.dest_user = client->state.dest_user; dctx.dest_addr = rcpt->address; + dctx.final_dest_addr = rcpt->address; dctx.dest_mailbox_name = *rcpt->detail == '\0' ? "INBOX" : rcpt->detail; dctx.save_dest_mail = array_count(&client->state.rcpt_to) > 1 && client->state.first_saved_mail == NULL;