static void
passdb_imap_verify_plain(struct auth_request *auth_request,
- const char *password ATTR_UNUSED,
+ const char *password,
verify_plain_callback_t *callback)
{
struct imap_auth_request *request;
- struct imapc_parameters params = {};
+ struct imapc_parameters params = {
+ .override_password = password,
+ };
request = p_new(auth_request->pool, struct imap_auth_request, 1);
request->client = imapc_client_init(¶ms, authdb_event(auth_request));
int refcount;
struct event *event;
- struct imapc_settings *set;
+ const struct imapc_settings *set;
struct imapc_parameters params;
enum imapc_client_ssl_mode ssl_mode;
struct ioloop *ioloop;
bool stop_on_state_finish;
+
+ /* Set to imapc_settings attributes with possible override by the
+ imapc_parameters. */
+ const char *dns_client_socket_path;
+ const char *imapc_rawlog_dir;
+ const char *password;
};
struct imapc_client_mailbox {
client->event = event_create(event_parent);
client->untagged_callback = default_untagged_callback;
- /* Explicitly cast to drop const modifier. */
- client->set = (struct imapc_settings *) settings_get_or_fatal(
- client->event, &imapc_setting_parser_info);
+ client->set = settings_get_or_fatal(client->event, &imapc_setting_parser_info);
client->params.session_id_prefix =
p_strdup(pool, params->session_id_prefix);
client->params.temp_path_prefix =
p_strdup(pool, params->temp_path_prefix);
client->params.flags = params->flags;
- /* Only override if the parameter is set. */
- if (params->override_dns_client_socket_path != NULL)
- client->set->dns_client_socket_path =
- p_strdup(pool, params->override_dns_client_socket_path);
- if (params->override_rawlog_dir != NULL)
- client->set->imapc_rawlog_dir =
- p_strdup(pool, params->override_rawlog_dir);
+ /* Set the overriden parameter only if it is set. */
+ client->dns_client_socket_path =
+ (params->override_dns_client_socket_path != NULL) ?
+ p_strdup(pool, params->override_dns_client_socket_path) :
+ p_strdup(pool, client->set->dns_client_socket_path);
+ client->imapc_rawlog_dir =
+ (params->override_rawlog_dir != NULL) ?
+ p_strdup(pool, params->override_rawlog_dir) :
+ p_strdup(pool, client->set->imapc_rawlog_dir);
+ client->password =
+ (params->override_password != NULL) ?
+ p_strdup(pool, params->override_password) :
+ p_strdup(pool, client->set->imapc_password);
event_set_append_log_prefix(client->event, t_strdup_printf(
"imapc(%s:%u): ", client->set->imapc_host, client->set->imapc_port));
this cannot be read from the config directly. */
const char *override_dns_client_socket_path;
const char *override_rawlog_dir;
+ const char *override_password;
enum imapc_parameter_flags flags;
};
conn);
imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_PRELOGIN);
imapc_command_sendf(cmd, "LOGIN %s %s",
- set->imapc_master_user, set->imapc_password);
+ set->imapc_master_user, conn->client->password);
return;
}
if (sasl_mech == NULL &&
((*set->imapc_master_user == '\0' &&
- !need_literal(set->imapc_user) && !need_literal(set->imapc_password)) ||
+ !need_literal(set->imapc_user) && !need_literal(conn->client->password)) ||
(conn->capabilities & IMAPC_CAPABILITY_AUTH_PLAIN) == 0)) {
/* We can use LOGIN command */
cmd = imapc_connection_cmd(conn, imapc_connection_login_cb,
conn);
imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_PRELOGIN);
imapc_command_sendf(cmd, "LOGIN %s %s",
- set->imapc_user, set->imapc_password);
+ set->imapc_user, conn->client->password);
return;
}
sasl_set.authid = set->imapc_master_user;
sasl_set.authzid = set->imapc_user;
}
- sasl_set.password = set->imapc_password;
+ sasl_set.password = conn->client->password;
if (sasl_mech == NULL)
sasl_mech = &dsasl_client_mech_plain;
return -1;
}
- if (*conn->client->set->imapc_rawlog_dir != '\0') {
- iostream_rawlog_create(conn->client->set->imapc_rawlog_dir,
+ if (*conn->client->imapc_rawlog_dir != '\0') {
+ iostream_rawlog_create(conn->client->imapc_rawlog_dir,
&conn->input, &conn->output);
}
conn->output = conn->raw_output = o_stream_create_fd(fd, SIZE_MAX);
o_stream_set_no_error_handling(conn->output, TRUE);
- if (*conn->client->set->imapc_rawlog_dir != '\0' &&
+ if (*conn->client->imapc_rawlog_dir != '\0' &&
conn->client->ssl_mode != IMAPC_CLIENT_SSL_MODE_IMMEDIATE) {
- iostream_rawlog_create(conn->client->set->imapc_rawlog_dir,
+ iostream_rawlog_create(conn->client->imapc_rawlog_dir,
&conn->input, &conn->output);
}
(long)conn->last_connect.tv_sec);
i_zero(&dns_set);
- dns_set.dns_client_socket_path =
- conn->client->set->dns_client_socket_path;
+ dns_set.dns_client_socket_path = conn->client->dns_client_socket_path;
dns_set.timeout_msecs = conn->client->set->imapc_connection_timeout_interval;
dns_set.event_parent = conn->event;