if (rc < 0)
{
log_write(0, LOG_MAIN|LOG_PANIC, "Failed to get %s lock for %s: %s",
- read_only? "read" : "write", buffer,
- (errno == ETIMEDOUT)? "timed out" : strerror(errno));
+ read_only ? "read" : "write", buffer,
+ errno == ETIMEDOUT ? "timed out" : strerror(errno));
(void)close(dbblock->lockfd);
errno = 0; /* Indicates locking failure */
return NULL;
}
-DEBUG(D_hints_lookup) debug_printf("locked %s\n", buffer);
+DEBUG(D_hints_lookup) debug_printf("locked %s\n", buffer);
/* At this point we have an opened and locked separate lock file, that is,
exclusive access to the database, so we can go ahead and open it. If we are
EXIM_DBOPEN(buffer, flags, EXIMDB_MODE, &(dbblock->dbptr));
DEBUG(D_hints_lookup) debug_printf("returned from EXIM_DBOPEN\n");
-if (dbblock->dbptr == NULL && errno == ENOENT && flags == O_RDWR)
+if (!dbblock->dbptr && errno == ENOENT && flags == O_RDWR)
{
DEBUG(D_hints_lookup)
debug_printf("%s appears not to exist: trying to create\n", buffer);
*lastname = 0;
dd = opendir(CS buffer);
- while ((ent = readdir(dd)) != NULL)
- {
+ while ((ent = readdir(dd)))
if (Ustrncmp(ent->d_name, name, namelen) == 0)
{
struct stat statbuf;
DEBUG(D_hints_lookup) debug_printf("failed setting %s to owned by exim\n", buffer);
}
}
- }
closedir(dd);
}
/* If the open has failed, return NULL, leaving errno set. If lof is TRUE,
log the event - also for debugging - but not if the file just doesn't exist. */
-if (dbblock->dbptr == NULL)
+if (!dbblock->dbptr)
{
if (save_errno != ENOENT)
- {
if (lof)
log_write(0, LOG_MAIN, "%s", string_open_failed(save_errno, "DB file %s",
buffer));
DEBUG(D_hints_lookup)
debug_printf("%s", CS string_open_failed(save_errno, "DB file %s\n",
buffer));
- }
(void)close(dbblock->lockfd);
errno = save_errno;
return NULL;
DEBUG(D_hints_lookup)
debug_printf("opened hints database %s: flags=%s\n", buffer,
- (flags == O_RDONLY)? "O_RDONLY" : (flags == O_RDWR)? "O_RDWR" :
- (flags == (O_RDWR|O_CREAT))? "O_RDWR|O_CREAT" : "??");
+ flags == O_RDONLY ? "O_RDONLY"
+ : flags == O_RDWR ? "O_RDWR"
+ : flags == (O_RDWR|O_CREAT) ? "O_RDWR|O_CREAT"
+ : "??");
/* Pass back the block containing the opened database handle and the open fd
for the lock. */
{
EXIM_DBCLOSE(dbblock->dbptr);
(void)close(dbblock->lockfd);
+DEBUG(D_hints_lookup) debug_printf("closed hints database and lockfile\n");
}
{
address_item *endaddr, *addr;
address_item *last_first = NULL;
- address_item **paddr = (i==0)? addr_succeed :
- (i==1)? addr_failed : addr_defer;
+ address_item **paddr = i==0 ? addr_succeed :
+ i==1 ? addr_failed : addr_defer;
address_item **saved_paddr = NULL;
- DEBUG(D_retry) debug_printf("%s addresses:\n", (i == 0)? "Succeeded" :
- (i == 1)? "Failed" : "Deferred");
+ DEBUG(D_retry) debug_printf("%s addresses:\n",
+ i == 0 ? "Succeeded" : i == 1 ? "Failed" : "Deferred");
/* Loop for each address on the chain. For deferred addresses, the whole
address times out unless one of its retry addresses has a retry rule that
retry items for any parent addresses - these are typically "delete" items,
because the parent must have succeeded in order to generate the child. */
- while ((endaddr = *paddr) != NULL)
+ while ((endaddr = *paddr))
{
BOOL timed_out = FALSE;
retry_item *rti;
- for (addr = endaddr; addr != NULL; addr = addr->parent)
+ for (addr = endaddr; addr; addr = addr->parent)
{
int update_count = 0;
int timedout_count = 0;
- DEBUG(D_retry) debug_printf("%s%s\n", addr->address, (addr->retries == NULL)?
- ": no retry items" : "");
+ DEBUG(D_retry) debug_printf(" %s%s\n", addr->address,
+ addr->retries ? "" : ": no retry items");
/* Loop for each retry item. */
- for (rti = addr->retries; rti != NULL; rti = rti->next)
+ for (rti = addr->retries; rti; rti = rti->next)
{
uschar *message;
int message_length, message_space, failing_interval, next_try;
opening if no addresses have retry items - common when none have yet
reached their retry next try time. */
- if (dbm_file == NULL)
+ if (!dbm_file)
dbm_file = dbfn_open(US"retry", O_RDWR, &dbblock, TRUE);
- if (dbm_file == NULL)
+ if (!dbm_file)
{
DEBUG(D_deliver|D_retry|D_hints_lookup)
debug_printf("retry database not available for updating\n");
but the address gets delivered to the second one. This optimization
doesn't succeed in cleaning out all the dead entries, but it helps. */
- if (*addr_defer == NULL && (rti->flags & rf_message) != 0)
+ if (!*addr_defer && rti->flags & rf_message)
rti->flags |= rf_delete;
/* Handle the case of a request to delete the retry info for this
destination. */
- if ((rti->flags & rf_delete) != 0)
+ if (rti->flags & rf_delete)
{
(void)dbfn_delete(dbm_file, rti->key);
DEBUG(D_retry)
information is found, we can't generate a retry time, so there is
no point updating the database. This retry item is timed out. */
- if ((retry = retry_find_config(rti->key + 2,
- ((rti->flags & rf_host) != 0)? addr->domain : NULL,
- rti->basic_errno, rti->more_errno)) == NULL)
+ if (!(retry = retry_find_config(rti->key + 2,
+ rti->flags & rf_host ? addr->domain : NULL,
+ rti->basic_errno, rti->more_errno)))
{
DEBUG(D_retry) debug_printf("No configured retry item for %s%s%s\n",
rti->key,
- ((rti->flags & rf_host) != 0)? US" or " : US"",
- ((rti->flags & rf_host) != 0)? addr->domain : US"");
+ rti->flags & rf_host ? US" or " : US"",
+ rti->flags & rf_host ? addr->domain : US"");
if (addr == endaddr) timedout_count++;
continue;
}
DEBUG(D_retry)
{
- if ((rti->flags & rf_host) != 0)
+ if (rti->flags & rf_host)
debug_printf("retry for %s (%s) = %s %d %d\n", rti->key,
addr->domain, retry->pattern, retry->basic_errno,
retry->more_errno);
records have a maximum data length, we enforce a limit. There isn't
much point in keeping a huge message here, anyway. */
- message = (rti->basic_errno > 0)? US strerror(rti->basic_errno) :
- (rti->message == NULL)?
- US"unknown error" : US string_printing(rti->message);
+ message = rti->basic_errno > 0
+ ? US strerror(rti->basic_errno)
+ : rti->message
+ ? US string_printing(rti->message)
+ : US"unknown error";
message_length = Ustrlen(message);
if (message_length > 150) message_length = 150;
Ignore an old one if it is too old since it was last updated. */
retry_record = dbfn_read(dbm_file, rti->key);
- if (retry_record != NULL &&
- now - retry_record->time_stamp > retry_data_expire)
+ if ( retry_record
+ && now - retry_record->time_stamp > retry_data_expire)
retry_record = NULL;
- if (retry_record == NULL)
+ if (!retry_record)
{
retry_record = store_get(sizeof(dbdata_retry) + message_length);
message_space = message_length;
successful delivery will reset the first_failed time, and this can lead
to a failing message being retried too often. */
- if ((rti->flags & rf_host) == 0 && message_age > failing_interval)
+ if (!(rti->flags & rf_host) && message_age > failing_interval)
failing_interval = message_age;
/* Search for the current retry rule. The cutoff time of the
always times out, but we can't compute a retry time. */
final_rule = NULL;
- for (rule = retry->rules; rule != NULL; rule = rule->next)
+ for (rule = retry->rules; rule; rule = rule->next)
{
if (failing_interval <= rule->timeout) break;
final_rule = rule;
flag is false (can be forced via fixdb from outside, but ensure it is
consistent with the rules whenever we go through here). */
- if (rule != NULL)
- {
+ if (rule)
retry_record->expired = FALSE;
- }
/* Otherwise, set the retry timeout expired, and set the final rule
as the one from which to compute the next retry time. Subsequent
this is a small bit of code, and it does no harm to leave it in place,
just in case. */
- if (received_time <= retry_record->first_failed &&
- addr == endaddr && !retry_record->expired && rule != NULL)
+ if ( received_time <= retry_record->first_failed
+ && addr == endaddr
+ && !retry_record->expired
+ && rule)
{
retry_rule *last_rule;
- for (last_rule = rule;
- last_rule->next != NULL;
- last_rule = last_rule->next);
+ for (last_rule = rule; last_rule->next; last_rule = last_rule->next)
+ ;
if (now - received_time > last_rule->timeout)
{
DEBUG(D_retry) debug_printf("on queue longer than maximum retry\n");
case set the next retry time to now, so that one delivery attempt
happens for subsequent messages. */
- if (rule == NULL) next_try = now; else
+ if (!rule)
+ next_try = now;
+ else
{
- if (rule->rule == 'F') next_try = now + rule->p1;
+ if (rule->rule == 'F')
+ next_try = now + rule->p1;
else /* rule = 'G' or 'H' */
{
int last_predicted_gap =
last_predicted_gap : last_actual_gap;
int next_gap = (lastgap * rule->p2)/1000;
if (rule->rule == 'G')
- {
next_try = now + ((lastgap < rule->p1)? rule->p1 : next_gap);
- }
else /* The 'H' rule */
{
next_try = now + rule->p1;
time was not reached (or because of hosts_max_try). */
if (update_count > 0 && update_count == timedout_count)
- {
if (!testflag(endaddr, af_retry_skipped))
{
DEBUG(D_retry) debug_printf("timed out: all retries expired\n");
DEBUG(D_retry)
debug_printf("timed out but some hosts were skipped\n");
}
- }
} /* Loop for an address and its parents */
/* If this is a deferred address, and retry processing was requested by
if (i == 2) /* Handling defers */
{
- if (endaddr->retries != NULL && timed_out)
+ if (endaddr->retries && timed_out)
{
if (last_first == endaddr) paddr = saved_paddr;
addr = *paddr;
/* Close and unlock the database */
-if (dbm_file != NULL) dbfn_close(dbm_file);
+if (dbm_file) dbfn_close(dbm_file);
DEBUG(D_retry) debug_printf("end of retry processing\n");
}
/* Now scan the configured transports and check inconsistencies. A shadow
transport is permitted only for local transports. */
-for (t = transports; t != NULL; t = t->next)
+for (t = transports; t; t = t->next)
{
- if (!t->info->local)
- {
- if (t->shadow != NULL)
- log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
- "shadow transport not allowed on non-local transport %s", t->name);
- }
+ if (!t->info->local && t->shadow)
+ log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
+ "shadow transport not allowed on non-local transport %s", t->name);
if (t->body_only && t->headers_only)
log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
for (addr = first_addr;
addr && address_count < max_rcpt;
addr = addr->next)
+ if (addr->transport_return == PENDING_DEFER)
{
int count;
BOOL no_flush;
addr->dsn_aware = peer_offered & PEER_OFFERED_DSN
? dsn_support_yes : dsn_support_no;
- if (addr->transport_return != PENDING_DEFER) continue;
-
address_count++;
no_flush = pipelining_active && (!mua_wrapper || addr->next);
*/
if (ok && transport_pass_socket(tblock->name, host->name, host->address,
new_message_id, inblock.sock))
- {
send_quit = FALSE;
- }
}
/* If RSET failed and there are addresses left, they get deferred. */
{
address_item *first_addr = NULL;
address_item *addr;
-for (addr = addrlist; addr != NULL; addr = addr->next)
+for (addr = addrlist; addr; addr = addr->next)
if (addr->transport_return == DEFER)
{
- if (first_addr == NULL) first_addr = addr;
+ if (!first_addr) first_addr = addr;
addr->transport_return = PENDING_DEFER;
addr->basic_errno = 0;
addr->more_errno = (host->mx >= 0)? 'M' : 'A';
int total_hosts_tried = 0;
address_item *addr;
BOOL expired = TRUE;
-BOOL continuing = continue_hostname != NULL;
uschar *expanded_hosts = NULL;
uschar *pistring;
uschar *tid = string_sprintf("%s transport", tblock->name);
DEBUG(D_transport)
{
debug_printf("%s transport entered\n", tblock->name);
- for (addr = addrlist; addr != NULL; addr = addr->next)
+ for (addr = addrlist; addr; addr = addr->next)
debug_printf(" %s\n", addr->address);
- if (continuing) debug_printf("already connected to %s [%s]\n",
+ if (hostlist)
+ {
+ debug_printf("hostlist:\n");
+ for (host = hostlist; host; host = host->next)
+ debug_printf(" %s:%d\n", host->name, host->port);
+ }
+ if (continue_hostname) debug_printf("already connected to %s [%s]\n",
continue_hostname, continue_host_address);
}
a host list with hosts_override set, use the host list supplied with the
transport. It is an error for this not to exist. */
-if (hostlist == NULL || (ob->hosts_override && ob->hosts != NULL))
+if (!hostlist || (ob->hosts_override && ob->hosts))
{
- if (ob->hosts == NULL)
+ if (!ob->hosts)
{
addrlist->message = string_sprintf("%s transport called with no hosts set",
tblock->name);
as the hosts string will never be used again, it doesn't matter that we
replace all the : characters with zeros. */
- if (ob->hostlist == NULL)
+ if (!ob->hostlist)
{
uschar *s = ob->hosts;
{
addrlist->message = string_sprintf("failed to expand list of hosts "
"\"%s\" in %s transport: %s", s, tblock->name, expand_string_message);
- addrlist->transport_return = search_find_defer? DEFER : PANIC;
+ addrlist->transport_return = search_find_defer ? DEFER : PANIC;
return FALSE; /* Only top address has status */
}
DEBUG(D_transport) debug_printf("expanded list of hosts \"%s\" to "
host_build_hostlist(&hostlist, s, ob->hosts_randomize);
/* Check that the expansion yielded something useful. */
- if (hostlist == NULL)
+ if (!hostlist)
{
addrlist->message =
string_sprintf("%s transport has empty hosts setting", tblock->name);
already been randomized (but don't bother if continuing down an existing
connection). */
-else if (ob->hosts_randomize && hostlist->mx == MX_NONE && !continuing)
+else if (ob->hosts_randomize && hostlist->mx == MX_NONE && !continue_hostname)
{
host_item *newlist = NULL;
- while (hostlist != NULL)
+ while (hostlist)
{
host_item *h = hostlist;
hostlist = hostlist->next;
h->sort_key = random_number(100);
- if (newlist == NULL)
+ if (!newlist)
{
h->next = NULL;
newlist = h;
else
{
host_item *hh = newlist;
- while (hh->next != NULL)
+ while (hh->next)
{
if (h->sort_key < hh->next->sort_key) break;
hh = hh->next;
time. After that, set the status and error data for any addresses that haven't
had it set already. */
-for (cutoff_retry = 0; expired &&
- cutoff_retry < ((ob->delay_after_cutoff)? 1 : 2);
+for (cutoff_retry = 0;
+ expired && cutoff_retry < (ob->delay_after_cutoff ? 1 : 2);
cutoff_retry++)
{
host_item *nexthost = NULL;
int unexpired_hosts_tried = 0;
for (host = hostlist;
- host != NULL &&
- unexpired_hosts_tried < ob->hosts_max_try &&
- total_hosts_tried < ob->hosts_max_try_hardlimit;
+ host
+ && unexpired_hosts_tried < ob->hosts_max_try
+ && total_hosts_tried < ob->hosts_max_try_hardlimit;
host = nexthost)
{
int rc;
int host_af;
uschar *rs;
- BOOL serialized = FALSE;
BOOL host_is_expired = FALSE;
BOOL message_defer = FALSE;
BOOL some_deferred = FALSE;
Note that we mustn't skip unusable hosts if the address is not unset; they
may be needed as expired hosts on the 2nd time round the cutoff loop. */
- if (host->address == NULL)
+ if (!host->address)
{
int new_port, flags;
host_item *hh;
"HOST_FIND_AGAIN" : "HOST_FIND_FAILED", host->name);
host->status = hstatus_unusable;
- for (addr = addrlist; addr != NULL; addr = addr->next)
+ for (addr = addrlist; addr; addr = addr->next)
{
if (addr->transport_return != DEFER) continue;
addr->basic_errno = ERRNO_UNKNOWNHOST;
if (rc == HOST_FOUND_LOCAL && !ob->allow_localhost)
{
- for (addr = addrlist; addr != NULL; addr = addr->next)
+ for (addr = addrlist; addr; addr = addr->next)
{
addr->basic_errno = 0;
addr->message = string_sprintf("%s transport found host %s to be "
result of the lookup. Set expired FALSE, to save the outer loop executing
twice. */
- if (continuing && (Ustrcmp(continue_hostname, host->name) != 0 ||
- Ustrcmp(continue_host_address, host->address) != 0))
+ if ( continue_hostname
+ && ( Ustrcmp(continue_hostname, host->name) != 0
+ || Ustrcmp(continue_host_address, host->address) != 0
+ ) )
{
expired = FALSE;
continue; /* With next host */
&domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) == OK))
{
expired = FALSE;
- for (addr = addrlist; addr != NULL; addr = addr->next)
- {
- if (addr->transport_return != DEFER) continue;
- addr->message = US"domain matches queue_smtp_domains, or -odqs set";
- }
+ for (addr = addrlist; addr; addr = addr->next)
+ if (addr->transport_return == DEFER)
+ addr->message = US"domain matches queue_smtp_domains, or -odqs set";
continue; /* With next host */
}
the standard SMTP port. A host may have its own port setting that overrides
the default. */
- pistring = string_sprintf(":%d", (host->port == PORT_NONE)?
- port : host->port);
+ pistring = string_sprintf(":%d", host->port == PORT_NONE
+ ? port : host->port);
if (Ustrcmp(pistring, ":25") == 0) pistring = US"";
/* Select IPv4 or IPv6, and choose an outgoing interface. If the interface
because connections to the same host from a different interface should be
treated separately. */
- host_af = (Ustrchr(host->address, ':') == NULL)? AF_INET : AF_INET6;
+ host_af = Ustrchr(host->address, ':') == NULL ? AF_INET : AF_INET6;
if ((rs = ob->interface) && *rs)
{
if (!smtp_get_interface(rs, host_af, addrlist, &interface, tid))
switch (host->status)
{
case hstatus_unusable:
- expired = FALSE;
- setflag(addrlist, af_retry_skipped);
- /* Fall through */
+ expired = FALSE;
+ setflag(addrlist, af_retry_skipped);
+ /* Fall through */
case hstatus_unusable_expired:
- switch (host->why)
- {
- case hwhy_retry: hosts_retry++; break;
- case hwhy_failed: hosts_fail++; break;
- case hwhy_deferred: hosts_defer++; break;
- }
-
- /* If there was a retry message key, implying that previously there
- was a message-specific defer, we don't want to update the list of
- messages waiting for these hosts. */
-
- if (retry_message_key != NULL) update_waiting = FALSE;
- continue; /* With the next host or IP address */
+ switch (host->why)
+ {
+ case hwhy_retry: hosts_retry++; break;
+ case hwhy_failed: hosts_fail++; break;
+ case hwhy_deferred: hosts_defer++; break;
+ }
+
+ /* If there was a retry message key, implying that previously there
+ was a message-specific defer, we don't want to update the list of
+ messages waiting for these hosts. */
+
+ if (retry_message_key) update_waiting = FALSE;
+ continue; /* With the next host or IP address */
}
}
else
{
- if (host->address == NULL ||
- host->status != hstatus_unusable_expired ||
- host->last_try > received_time)
+ if ( !host->address
+ || host->status != hstatus_unusable_expired
+ || host->last_try > received_time)
continue;
- DEBUG(D_transport)
- debug_printf("trying expired host %s [%s]%s\n",
+ DEBUG(D_transport) debug_printf("trying expired host %s [%s]%s\n",
host->name, host->address, pistring);
host_is_expired = TRUE;
}
and remember this for later deletion. Do not do any of this if we are
sending the message down a pre-existing connection. */
- if (!continuing &&
- verify_check_given_host(&ob->serialize_hosts, host) == OK)
+ if ( !continue_hostname
+ && verify_check_given_host(&ob->serialize_hosts, host) == OK)
{
serialize_key = string_sprintf("host-serialize-%s", host->name);
if (!enq_start(serialize_key, 1))
hosts_serial++;
continue;
}
- serialized = TRUE;
}
/* OK, we have an IP address that is not waiting for its retry time to
DEBUG(D_transport) debug_printf("delivering %s to %s [%s] (%s%s)\n",
message_id, host->name, host->address, addrlist->address,
- (addrlist->next == NULL)? "" : ", ...");
+ addrlist->next ? ", ..." : "");
set_process_info("delivering %s to %s [%s] (%s%s)",
message_id, host->name, host->address, addrlist->address,
- (addrlist->next == NULL)? "" : ", ...");
+ addrlist->next ? ", ..." : "");
/* This is not for real; don't do the delivery. If there are
any remaining hosts, list them. */
{
host_item *host2;
set_errno_nohost(addrlist, 0, NULL, OK, FALSE);
- for (addr = addrlist; addr != NULL; addr = addr->next)
+ for (addr = addrlist; addr; addr = addr->next)
{
addr->host_used = host;
addr->special_action = '*';
{
debug_printf("*** delivery by %s transport bypassed by -N option\n"
"*** host and remaining hosts:\n", tblock->name);
- for (host2 = host; host2 != NULL; host2 = host2->next)
+ for (host2 = host; host2; host2 = host2->next)
debug_printf(" %s [%s]\n", host2->name,
- (host2->address == NULL)? US"unset" : host2->address);
+ host2->address ? host2->address : US"unset");
}
rc = OK;
}
failures, where the log has already been written. If all hosts defer a
general message is written at the end. */
- if (rc == DEFER && first_addr->basic_errno != ERRNO_AUTHFAIL &&
- first_addr->basic_errno != ERRNO_TLSFAILURE)
+ if (rc == DEFER && first_addr->basic_errno != ERRNO_AUTHFAIL
+ && first_addr->basic_errno != ERRNO_TLSFAILURE)
write_logs(first_addr, host);
#ifndef DISABLE_EVENT
/* Delivery attempt finished */
- rs = (rc == OK)? US"OK" : (rc == DEFER)? US"DEFER" : (rc == ERROR)?
- US"ERROR" : US"?";
+ rs = rc == OK ? US"OK"
+ : rc == DEFER ? US"DEFER"
+ : rc == ERROR ? US"ERROR"
+ : US"?";
set_process_info("delivering %s: just tried %s [%s] for %s%s: result %s",
message_id, host->name, host->address, addrlist->address,
- (addrlist->next == NULL)? "" : " (& others)", rs);
+ addrlist->next ? " (& others)" : "", rs);
/* Release serialization if set up */
- if (serialized) enq_end(serialize_key);
+ if (serialize_key) enq_end(serialize_key);
/* If the result is DEFER, or if a host retry record is known to exist, we
need to add an item to the retry chain for updating the retry database
the unusable tree at the outer level, so even if different address blocks
contain the same address, it still won't get tried again.) */
- if (rc == DEFER || retry_host_key != NULL)
+ if (rc == DEFER || retry_host_key)
{
- int delete_flag = (rc != DEFER)? rf_delete : 0;
- if (retry_host_key == NULL)
+ int delete_flag = rc != DEFER ? rf_delete : 0;
+ if (!retry_host_key)
{
BOOL incl_ip;
if (exp_bool(addrlist, US"transport", tblock->name, D_transport,
ob->expand_retry_include_ip_address, &incl_ip) != OK)
incl_ip = TRUE; /* error; use most-specific retry record */
- retry_host_key = incl_ip ?
- string_sprintf("T:%S:%s%s", host->name, host->address, pistring) :
- string_sprintf("T:%S%s", host->name, pistring);
+ retry_host_key = incl_ip
+ ? string_sprintf("T:%S:%s%s", host->name, host->address, pistring)
+ : string_sprintf("T:%S%s", host->name, pistring);
}
/* If a delivery of another message over an existing SMTP connection
host is genuinely down, another non-continued message delivery will
notice it soon enough. */
- if (delete_flag != 0 || !continuing)
+ if (delete_flag != 0 || !continue_hostname)
retry_add_item(first_addr, retry_host_key, rf_host | delete_flag);
/* We may have tried an expired host, if its retry time has come; ensure
if (rc == DEFER)
{
- host->status = (host_is_expired)?
- hstatus_unusable_expired : hstatus_unusable;
+ host->status = host_is_expired
+ ? hstatus_unusable_expired : hstatus_unusable;
host->why = hwhy_deferred;
}
}
reasonable. Also, stop the message from being remembered as waiting
for specific hosts. */
- if (message_defer || retry_message_key != NULL)
+ if (message_defer || retry_message_key)
{
- int delete_flag = message_defer? 0 : rf_delete;
- if (retry_message_key == NULL)
+ int delete_flag = message_defer ? 0 : rf_delete;
+ if (!retry_message_key)
{
BOOL incl_ip;
if (exp_bool(addrlist, US"transport", tblock->name, D_transport,
ob->expand_retry_include_ip_address, &incl_ip) != OK)
incl_ip = TRUE; /* error; use most-specific retry record */
- retry_message_key = incl_ip ?
- string_sprintf("T:%S:%s%s:%s", host->name, host->address, pistring,
- message_id) :
- string_sprintf("T:%S%s:%s", host->name, pistring, message_id);
+ retry_message_key = incl_ip
+ ? string_sprintf("T:%S:%s%s:%s", host->name, host->address, pistring,
+ message_id)
+ : string_sprintf("T:%S%s:%s", host->name, pistring, message_id);
}
retry_add_item(addrlist, retry_message_key,
rf_message | rf_host | delete_flag);
case when we were trying to deliver down an existing channel and failed.
Don't try any other hosts in this case. */
- if (continuing) break;
+ if (continue_hostname) break;
/* If the whole delivery, or some individual addresses, were deferred and
there are more hosts that could be tried, do not count this host towards
important because if we don't try all hosts, the address will never time
out. NOTE: this does not apply to hosts_max_try_hardlimit. */
- if ((rc == DEFER || some_deferred) && nexthost != NULL)
+ if ((rc == DEFER || some_deferred) && nexthost)
{
BOOL timedout;
retry_config *retry = retry_find_config(host->name, NULL, 0, 0);
- if (retry != NULL && retry->rules != NULL)
+ if (retry && retry->rules)
{
retry_rule *last_rule;
for (last_rule = retry->rules;
- last_rule->next != NULL;
+ last_rule->next;
last_rule = last_rule->next);
timedout = time(NULL) - received_time > last_rule->timeout;
}
if (mua_wrapper)
{
- for (addr = addrlist; addr != NULL; addr = addr->next)
+ for (addr = addrlist; addr; addr = addr->next)
addr->transport_return = FAIL;
goto END_TRANSPORT;
}
transport_name <my_smtp>
my_smtp transport entered
userx@domain.com
+hostlist:
+ 127.0.0.1:-1
checking status of 127.0.0.1
127.0.0.1 [127.0.0.1]:1111/ip4.ip4.ip4.ip4 status = usable
delivering 10HmaX-0005vi-00 to 127.0.0.1 [127.0.0.1] (userx@domain.com)
Delivery address list:
userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> userx@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
Processing retry items
Succeeded addresses:
-userx@test.ex: no retry items
+ userx@test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
Delivery address list:
CALLER@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> CALLER@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
Processing retry items
Succeeded addresses:
-CALLER@test.ex: no retry items
+ CALLER@test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
Succeeded addresses:
Failed addresses:
Deferred addresses:
-userx@test.ex
+ userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
retry for R:userx@test.ex:<CALLER@test.ex> = * 0 0
failing_interval=ttt message_age=ttt
Succeeded addresses:
Failed addresses:
Deferred addresses:
-userx@test.ex
+ userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
deleted retry information for R:userx@test.ex
deleted retry information for R:test.ex
Succeeded addresses:
Failed addresses:
Deferred addresses:
-userx@test.ex
+ userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
deleted retry information for R:userx@test.ex
deleted retry information for R:test.ex
Succeeded addresses:
Failed addresses:
Deferred addresses:
-userx@test.ex: no retry items
+ userx@test.ex: no retry items
end of retry processing
LOG: queue_run MAIN
End queue run: pid=pppp
Succeeded addresses:
Failed addresses:
Deferred addresses:
-usery@test.ex
+ usery@test.ex
locking TESTSUITE/spool/db/retry.lockfile
retry for R:usery@test.ex:<CALLER@test.ex> = * 0 0
failing_interval=ttt message_age=ttt
Writing retry data for R:usery@test.ex:<CALLER@test.ex>
first failed=dddd last try=dddd next try=+1 expired=0
errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<usery@test.ex>: 451 Temporary error
-userx@test.ex
+ userx@test.ex
retry for R:userx@test.ex:<CALLER@test.ex> = * 0 0
failing_interval=ttt message_age=ttt
Writing retry data for R:userx@test.ex:<CALLER@test.ex>
Succeeded addresses:
Failed addresses:
Deferred addresses:
-usery@test.ex
+ usery@test.ex
locking TESTSUITE/spool/db/retry.lockfile
deleted retry information for R:usery@test.ex
deleted retry information for R:test.ex
Writing retry data for R:usery@test.ex:<CALLER@test.ex>
first failed=dddd last try=dddd next try=+2 expired=0
errno=-44 more_errno=dd,A H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<usery@test.ex>: 451 Temporary error
-userx@test.ex
+ userx@test.ex
deleted retry information for R:userx@test.ex
deleted retry information for R:test.ex
retry for R:userx@test.ex:<CALLER@test.ex> = * 0 0
Delivery address list:
kilos@recurse.test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
From: CALLER_NAME <CALLER@test.ex>
re-routed to kilos@recurse.test.ex.test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
envelope to: kilos@recurse.test.ex.test.ex
transport: <none>
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> kilos@recurse.test.ex.test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
Delivery address list:
2@b
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> 2@b <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
Processing retry items
Succeeded addresses:
-2@b: no retry items
+ 2@b: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
Delivery address list:
2@b
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> 2@b <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaY-0005vi-00
Processing retry items
Succeeded addresses:
-2@b: no retry items
+ 2@b: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
set_process_info: pppp delivering specified messages
set_process_info: pppp delivering 10HmaX-0005vi-00
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
set_process_info: pppp delivering 10HmaX-0005vi-00 using smtp
checking status of 127.0.0.1
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
*@127.0.0.1 in "*"? yes (matched "*")
checking status of V4NET.0.0.0
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
Succeeded addresses:
Failed addresses:
Deferred addresses:
-x@y
+ x@y
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/retry: flags=O_RDWR
timed out: all retries expired
LOG: MAIN
** x@y: retry timeout exceeded
+closed hints database and lockfile
end of retry processing
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xebb95ced -odi -odi -t -oem -oi -f <> -E10HmaX-0005vi-00
Exim version x.yz ....
set_process_info: pppp delivering specified messages
set_process_info: pppp delivering 10HmaY-0005vi-00
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/retry: flags=O_RDONLY
no domain retry record
no address retry record
CALLER@myhost.test.ex: queued for routing
+closed hints database and lockfile
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
routing CALLER@myhost.test.ex
--------> r0 router <--------
set_process_info: pppp tidying up after delivering 10HmaY-0005vi-00
Processing retry items
Succeeded addresses:
-CALLER@myhost.test.ex: no retry items
+ CALLER@myhost.test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
host 127.0.0.1 [127.0.0.1]
Attempting full verification using callout
locking TESTSUITE/spool/db/callout.lockfile
-locked TESTSUITE/spool/db/callout.lockfile
+locked TESTSUITE/spool/db/callout.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/callout)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR
callout cache: found domain record for remote
dbfn_read: key=qq@remote
callout cache: no address record found for qq@remote
+closed hints database and lockfile
interface=NULL port=1224
Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
SMTP<< 220 Server ready
SMTP>> QUIT
cmd buf flush ddd bytes
locking TESTSUITE/spool/db/callout.lockfile
-locked TESTSUITE/spool/db/callout.lockfile
+locked TESTSUITE/spool/db/callout.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/callout)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR|O_CREAT
result=1 postmaster=0 random=0
dbfn_write: key=qq@remote
wrote negative callout cache address record for qq@remote
+closed hints database and lockfile
----------- end verify ------------
l_message: $acl_verify_message
warn: condition test succeeded in ACL "rcpt"
host 127.0.0.1 [127.0.0.1]
Attempting full verification using callout
locking TESTSUITE/spool/db/callout.lockfile
-locked TESTSUITE/spool/db/callout.lockfile
+locked TESTSUITE/spool/db/callout.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/callout)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR
dbfn_read: key=qq@remote
callout cache: found address record for qq@remote
callout cache: address record is negative
+closed hints database and lockfile
----------- end verify ------------
l_message: $acl_verify_message
warn: condition test succeeded in ACL "rcpt"
rd+CALLER@test.ex
rd+usery@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
envelope to: CALLER@test.ex
transport: t1
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> TESTSUITE/test-mail/junk <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
=> TESTSUITE/test-mail/junk <rd+usery@test.ex> R=r5 T=ft1
--------> TESTSUITE/test-mail/junk <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
=> TESTSUITE/test-mail/junk <rd+CALLER@test.ex> R=r4 T=ft1
--------> CALLER@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
=> CALLER <CALLER@test.ex> R=r1 T=t1
--------> usery@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
=> usery <usery@test.ex> R=r2 T=t1
--------> userz@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
Processing retry items
Succeeded addresses:
-userz@test.ex: no retry items
-usery@test.ex: no retry items
-CALLER@test.ex: no retry items
-TESTSUITE/test-mail/junk: no retry items
-rd+CALLER@test.ex: no retry items
-TESTSUITE/test-mail/junk: no retry items
-rd+usery@test.ex: no retry items
-rd+CALLER@test.ex: no retry items
-rd+usery@test.ex: no retry items
+ userz@test.ex: no retry items
+ usery@test.ex: no retry items
+ CALLER@test.ex: no retry items
+ TESTSUITE/test-mail/junk: no retry items
+ rd+CALLER@test.ex: no retry items
+ TESTSUITE/test-mail/junk: no retry items
+ rd+usery@test.ex: no retry items
+ rd+CALLER@test.ex: no retry items
+ rd+usery@test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
Delivery address list:
userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
envelope to: userx@test.ex
transport: <none>
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> TESTSUITE/test-mail/junk <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
Delivery address list:
userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
envelope to: userx@test.ex
transport: <none>
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> >sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex, ... <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
sender@test.ex
sender@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> sender@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaY-0005vi-00
Processing retry items
Succeeded addresses:
-sender@test.ex: no retry items
+ sender@test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
Processing retry items
Succeeded addresses:
->sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex, ...: no retry items
-userx@test.ex: no retry items
-userx@test.ex: no retry items
+ >sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex,sender@test.ex, ...: no retry items
+ userx@test.ex: no retry items
+ userx@test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
Delivery address list:
userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> userx@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
Processing retry items
Succeeded addresses:
-userx@test.ex: no retry items
+ userx@test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
name=127.0.0.1 address=127.0.0.1
Attempting full verification using callout
locking TESTSUITE/spool/db/callout.lockfile
-locked TESTSUITE/spool/db/callout.lockfile
+locked TESTSUITE/spool/db/callout.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/callout)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR
callout cache: no domain record found for y
dbfn_read: key=x@y
callout cache: no address record found for x@y
+closed hints database and lockfile
interface=NULL port=1224
Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
SMTP<< 220 server ready
SMTP>> QUIT
cmd buf flush ddd bytes
locking TESTSUITE/spool/db/callout.lockfile
-locked TESTSUITE/spool/db/callout.lockfile
+locked TESTSUITE/spool/db/callout.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/callout)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR|O_CREAT
result=1 postmaster=0 random=0
dbfn_write: key=x@y
wrote positive callout cache address record for x@y
+closed hints database and lockfile
----------- end verify ------------
sender x@y verified ok
accept: condition test succeeded in ACL "mail"
name=127.0.0.1 address=127.0.0.1
Attempting full verification using callout
locking TESTSUITE/spool/db/callout.lockfile
-locked TESTSUITE/spool/db/callout.lockfile
+locked TESTSUITE/spool/db/callout.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/callout)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/callout: flags=O_RDWR
dbfn_read: key=x@y
callout cache: found address record for x@y
callout cache: address record is positive
+closed hints database and lockfile
----------- end verify ------------
sender x@y verified ok
accept: condition test succeeded in ACL "mail"
set_process_info: pppp delivering 10HmaX-0005vi-00 using t1
t1 transport entered
userx@test.ex
+hostlist:
+ 127.0.0.1:-1
checking status of 127.0.0.1
127.0.0.1 [127.0.0.1]:1111 status = usable
delivering 10HmaX-0005vi-00 to 127.0.0.1 [127.0.0.1] (userx@test.ex)
set_process_info: pppp delivering 10HmaZ-0005vi-00 using t1
t1 transport entered
CALLER@the.local.host.name
+hostlist:
+ 127.0.0.1:-1
checking status of 127.0.0.1
127.0.0.1 [127.0.0.1]:1111 status = usable
delivering 10HmaZ-0005vi-00 to 127.0.0.1 [127.0.0.1] (CALLER@the.local.host.name)
set_process_info: pppp delivering 10HmaY-0005vi-00 using t1
t1 transport entered
usery@test.ex
+hostlist:
+ 127.0.0.1:-1
checking status of 127.0.0.1
no message retry record
127.0.0.1 [127.0.0.1]:1111 status = unusable
Delivery address list:
userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> userx@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
Processing retry items
Succeeded addresses:
-userx@test.ex: no retry items
+ userx@test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
== TESTSUITE/test-mail/rmbox <x@test.ex> R=r1 T=t1 defer (-22): mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/rmbox)
Processing retry items
Succeeded addresses:
-x@test.ex: no retry items
+ x@test.ex: no retry items
Failed addresses:
Deferred addresses:
-TESTSUITE/test-mail/rmbox
+ TESTSUITE/test-mail/rmbox
locking TESTSUITE/spool/db/retry.lockfile
retry for T:TESTSUITE/test-mail/rmbox:x@test.ex = *@test.ex -22 0
failing_interval=ttt message_age=ttt
Writing retry data for T:TESTSUITE/test-mail/rmbox:x@test.ex
first failed=dddd last try=dddd next try=+900 expired=0
errno=-22 more_errno=dd mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/rmbox)
-x@test.ex: no retry items
+ x@test.ex: no retry items
end of retry processing
>>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
== TESTSUITE/test-mail/rmbox <x@test.ex> R=r1 T=t1 defer (-52): Retry time not yet reached
Processing retry items
Succeeded addresses:
-x@test.ex: no retry items
+ x@test.ex: no retry items
Failed addresses:
Deferred addresses:
-TESTSUITE/test-mail/rmbox: no retry items
-x@test.ex: no retry items
+ TESTSUITE/test-mail/rmbox: no retry items
+ x@test.ex: no retry items
end of retry processing
LOG: queue_run MAIN
End queue run: pid=pppp
Succeeded addresses:
Failed addresses:
Deferred addresses:
-x@y
+ x@y
locking TESTSUITE/spool/db/retry.lockfile
retry for R:x@y:<CALLER@myhost.test.ex> = * 0 0
failing_interval=ttt message_age=ttt
=> x@y R=r1 T=smtp H=127.0.0.1 [127.0.0.1] C="250 OK"
Processing retry items
Succeeded addresses:
-x@y
+ x@y
locking TESTSUITE/spool/db/retry.lockfile
deleted retry information for R:x@y:<CALLER@myhost.test.ex>
deleted retry information for R:x@y
Delivery address list:
userx@myhost.test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> userx@myhost.test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
Processing retry items
Succeeded addresses:
-userx@myhost.test.ex: no retry items
+ userx@myhost.test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
Delivery address list:
userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
envelope to: userx@test.ex
transport: <none>
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> TESTSUITE/test-mail <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
Processing retry items
Succeeded addresses:
-TESTSUITE/test-mail: no retry items
-userx@test.ex: no retry items
-userx@test.ex: no retry items
+ TESTSUITE/test-mail: no retry items
+ userx@test.ex: no retry items
+ userx@test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
Delivery address list:
nofile@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> nofile@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
Processing retry items
Succeeded addresses:
-nofile@test.ex: no retry items
+ nofile@test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
Delivery address list:
userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> userx@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaY-0005vi-00
Processing retry items
Succeeded addresses:
-userx@test.ex: no retry items
+ userx@test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing
Delivery address list:
userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> userx@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
Succeeded addresses:
Failed addresses:
Deferred addresses:
-userx@test.ex
+ userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/retry: flags=O_RDWR
first failed=dddd last try=dddd next try=+86400 expired=0
errno=-22 more_errno=dd mailbox is full (MTA-imposed quota exceeded while writing to tmp/MAILDIR.myhost.test.ex)
dbfn_write: key=T:userx@test.ex
+closed hints database and lockfile
end of retry processing
delivery deferred: update_spool=1 header_rewritten=0
Writing spool header file: TESTSUITE/spool//input//hdr.pppp
Delivery address list:
userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/retry: flags=O_RDONLY
no domain retry record
no address retry record
userx@test.ex: queued for routing
+closed hints database and lockfile
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
routing userx@test.ex
--------> r1 router <--------
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> userx@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/retry: flags=O_RDONLY
dbfn_read: key=T:userx@test.ex
retry record exists: age=ttt (max 1w)
time to retry = tttt expired = 0
+closed hints database and lockfile
search_tidyup called
changed uid/gid: local delivery to userx <userx@test.ex> transport=t1
uid=CALLER_UID gid=CALLER_GID pid=pppp
Succeeded addresses:
Failed addresses:
Deferred addresses:
-userx@test.ex
+ userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
opened hints database TESTSUITE/spool/db/retry: flags=O_RDWR
first failed=dddd last try=dddd next try=+86400 expired=0
errno=-22 more_errno=dd mailbox is full (MTA-imposed quota exceeded while writing to tmp/MAILDIR.myhost.test.ex)
dbfn_write: key=T:userx@test.ex
+closed hints database and lockfile
end of retry processing
delivery deferred: update_spool=1 header_rewritten=0
Writing spool header file: TESTSUITE/spool//input//hdr.pppp
Delivery address list:
userx@test.ex
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
--------> userx@test.ex <--------
locking TESTSUITE/spool/db/retry.lockfile
-locked TESTSUITE/spool/db/retry.lockfile
+locked TESTSUITE/spool/db/retry.lockfile
EXIM_DBOPEN(TESTSUITE/spool/db/retry)
returned from EXIM_DBOPEN
no retry data available
set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
Processing retry items
Succeeded addresses:
-userx@test.ex: no retry items
+ userx@test.ex: no retry items
Failed addresses:
Deferred addresses:
end of retry processing