client_connection_create(int fd, int listen_fd, bool ssl)
{
struct client_connection *conn;
+ const char *ip;
pool_t pool;
pool = pool_alloconly_create("doveadm client", 1024*16);
i_stream_set_name(conn->input, net_ip2addr(&conn->remote_ip));
o_stream_set_name(conn->output, net_ip2addr(&conn->remote_ip));
+ ip = net_ip2addr(&conn->remote_ip);
+ if (ip[0] != '\0')
+ i_set_failure_prefix("doveadm(%s): ", ip);
+
if (client_connection_read_settings(conn) < 0) {
client_connection_destroy(&conn);
return NULL;
const struct mail_storage_service_input *input,
const char **error_r)
{
- const char *error;
+ const char *error, *ip;
int ret;
- i_set_failure_prefix("doveadm(%s): ", input->username);
+ ip = net_ip2addr(&input->remote_ip);
+ if (ip[0] == '\0')
+ i_set_failure_prefix("doveadm(%s): ", input->username);
+ else
+ i_set_failure_prefix("doveadm(%s,%s): ", ip, input->username);
/* see if we want to execute this command via (another)
doveadm server */
{
i_assert(input->username != NULL);
+ ctx->cur_client_ip = input->remote_ip;
ctx->cur_username = input->username;
ctx->storage_service_input = *input;
ctx->storage_service = mail_storage_service_init(master_service, NULL,
{
struct mail_storage_service_input input;
unsigned int user_idx;
- const char *user, *error;
+ const char *ip, *user, *error;
int ret;
ctx->service_flags |= MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP;
}
if (doveadm_verbose)
printf("\n");
- i_set_failure_prefix("doveadm: ");
+ ip = net_ip2addr(&ctx->cur_client_ip);
+ if (ip[0] == '\0')
+ i_set_failure_prefix("doveadm: ");
+ else
+ i_set_failure_prefix("doveadm(%s): ", ip);
if (ret < 0) {
i_error("Failed to iterate through some users");
ctx->exit_code = EX_TEMPFAIL;
/* search args aren't set for all mail commands */
struct mail_search_args *search_args;
+ struct ip_addr cur_client_ip;
const char *cur_username;
struct mail_storage_service_user *cur_service_user;
struct mail_user *cur_mail_user;