dovecot-2.2: lmtp: Changed rcpt_to array to contain pointers to ...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Mar 6 00:06:53 UTC 2015
details: http://hg.dovecot.org/dovecot-2.2/rev/c1403c1eb3e9
changeset: 18296:c1403c1eb3e9
user: Timo Sirainen <tss at iki.fi>
date: Fri Mar 06 02:06:10 2015 +0200
description:
lmtp: Changed rcpt_to array to contain pointers to struct mail_recipient
This allow storing the pointers so they don't change.
diffstat:
src/lmtp/client.c | 6 +++---
src/lmtp/client.h | 2 +-
src/lmtp/commands.c | 32 ++++++++++++++++----------------
3 files changed, 20 insertions(+), 20 deletions(-)
diffs (139 lines):
diff -r 2589f9c5cc04 -r c1403c1eb3e9 src/lmtp/client.c
--- a/src/lmtp/client.c Fri Mar 06 01:01:28 2015 +0200
+++ b/src/lmtp/client.c Fri Mar 06 02:06:10 2015 +0200
@@ -349,14 +349,14 @@
void client_state_reset(struct client *client, const char *state_name)
{
- struct mail_recipient *rcpt;
+ struct mail_recipient *const *rcptp;
if (client->proxy != NULL)
lmtp_proxy_deinit(&client->proxy);
if (array_is_created(&client->state.rcpt_to)) {
- array_foreach_modifiable(&client->state.rcpt_to, rcpt)
- mail_storage_service_user_free(&rcpt->service_user);
+ array_foreach_modifiable(&client->state.rcpt_to, rcptp)
+ mail_storage_service_user_free(&(*rcptp)->service_user);
}
if (client->state.raw_mail != NULL) {
diff -r 2589f9c5cc04 -r c1403c1eb3e9 src/lmtp/client.h
--- a/src/lmtp/client.h Fri Mar 06 01:01:28 2015 +0200
+++ b/src/lmtp/client.h Fri Mar 06 02:06:10 2015 +0200
@@ -18,7 +18,7 @@
const char *name;
const char *session_id;
const char *mail_from;
- ARRAY(struct mail_recipient) rcpt_to;
+ ARRAY(struct mail_recipient *) rcpt_to;
unsigned int rcpt_idx;
unsigned int data_end_idx;
diff -r 2589f9c5cc04 -r c1403c1eb3e9 src/lmtp/commands.c
--- a/src/lmtp/commands.c Fri Mar 06 01:01:28 2015 +0200
+++ b/src/lmtp/commands.c Fri Mar 06 02:06:10 2015 +0200
@@ -565,7 +565,7 @@
int cmd_rcpt(struct client *client, const char *args)
{
- struct mail_recipient rcpt;
+ struct mail_recipient *rcpt;
struct mail_storage_service_input input;
const char *params, *address, *username, *detail, *prefix;
const char *const *argv;
@@ -583,13 +583,13 @@
return 0;
}
- memset(&rcpt, 0, sizeof(rcpt));
+ rcpt = p_new(client->state_pool, struct mail_recipient, 1);
address = lmtp_unescape_address(address);
argv = t_strsplit(params, " ");
for (; *argv != NULL; argv++) {
if (strncasecmp(*argv, "ORCPT=", 6) == 0) {
- rcpt.params.dsn_orcpt = parse_xtext(client, *argv + 6);
+ rcpt->params.dsn_orcpt = parse_xtext(client, *argv + 6);
} else {
client_send_line(client, "501 5.5.4 Unsupported options");
return 0;
@@ -601,7 +601,7 @@
if (client->lmtp_set->lmtp_proxy) {
if (client_proxy_rcpt(client, address, username, detail,
- &rcpt.params))
+ &rcpt->params))
return 0;
}
@@ -615,7 +615,7 @@
input.session_id = client->state.session_id;
ret = mail_storage_service_lookup(storage_service, &input,
- &rcpt.service_user, &error);
+ &rcpt->service_user, &error);
if (ret < 0) {
prefix = t_strdup_printf(ERRSTR_TEMP_USERDB_FAIL_PREFIX,
@@ -641,11 +641,11 @@
lmtp_address_translate(client, &address);
- rcpt.address = p_strdup(client->state_pool, address);
- rcpt.detail = p_strdup(client->state_pool, detail);
- if ((ret = lmtp_rcpt_to_is_over_quota(client, &rcpt)) < 0) {
+ rcpt->address = p_strdup(client->state_pool, address);
+ rcpt->detail = p_strdup(client->state_pool, detail);
+ if ((ret = lmtp_rcpt_to_is_over_quota(client, rcpt)) < 0) {
client_send_line(client, ERRSTR_TEMP_MAILBOX_FAIL,
- rcpt.address);
+ rcpt->address);
return 0;
}
if (ret == 0) {
@@ -813,13 +813,13 @@
static bool client_deliver_next(struct client *client, struct mail *src_mail,
struct mail_deliver_session *session)
{
- const struct mail_recipient *rcpts;
+ struct mail_recipient *const *rcpts;
unsigned int count;
int ret;
rcpts = array_get(&client->state.rcpt_to, &count);
while (client->state.rcpt_idx < count) {
- ret = client_deliver(client, &rcpts[client->state.rcpt_idx],
+ ret = client_deliver(client, rcpts[client->state.rcpt_idx],
src_mail, session);
client_state_set(client, "DATA", "");
i_set_failure_prefix("lmtp(%s): ", my_pid);
@@ -836,11 +836,11 @@
static void client_rcpt_fail_all(struct client *client)
{
- const struct mail_recipient *rcpt;
+ struct mail_recipient *const *rcptp;
- array_foreach(&client->state.rcpt_to, rcpt) {
+ array_foreach(&client->state.rcpt_to, rcptp) {
client_send_line(client, ERRSTR_TEMP_MAILBOX_FAIL,
- rcpt->address);
+ (*rcptp)->address);
}
}
@@ -986,10 +986,10 @@
const char *host, *rcpt_to = NULL;
if (array_count(&client->state.rcpt_to) == 1) {
- const struct mail_recipient *rcpt =
+ struct mail_recipient *const *rcptp =
array_idx(&client->state.rcpt_to, 0);
- rcpt_to = rcpt->address;
+ rcpt_to = (*rcptp)->address;
}
/* don't set Return-Path when proxying so it won't get added twice */
More information about the dovecot-cvs
mailing list