(struct imap_passdb_module *)_module;
struct imap_auth_request *request;
struct imapc_client_settings set;
+ struct imapc_parameters params = {};
const char *error;
string_t *str;
"lookup host=%s port=%d", set.host, set.port);
request = p_new(auth_request->pool, struct imap_auth_request, 1);
- request->client = imapc_client_init(&set, authdb_event(auth_request));
+ request->client = imapc_client_init(&set, ¶ms, authdb_event(auth_request));
request->auth_request = auth_request;
request->verify_callback = callback;
struct event *event;
struct imapc_client_settings set;
+ struct imapc_parameters params;
imapc_untagged_callback_t *untagged_callback;
void *untagged_context;
struct imapc_client *
imapc_client_init(const struct imapc_client_settings *set,
+ const struct imapc_parameters *params,
struct event *event_parent)
{
struct imapc_client *client;
client->untagged_callback = default_untagged_callback;
+ 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.rawlog_dir =
+ p_strdup(pool, params->override_rawlog_dir);
+
p_array_init(&client->conns, pool, 8);
return client;
}
string_t *path;
int fd;
- if (client->set.temp_path_prefix == NULL) {
+ if (client->params.temp_path_prefix == NULL) {
e_error(client->event,
"temp_path_prefix not set, can't create temp file");
return -1;
}
path = t_str_new(128);
- str_append(path, client->set.temp_path_prefix);
+ str_append(path, client->params.temp_path_prefix);
fd = safe_mkstemp(path, 0600, (uid_t)-1, (gid_t)-1);
if (fd == -1) {
e_error(client->event,
struct imapc_client *
imapc_client_init(const struct imapc_client_settings *set,
+ const struct imapc_parameters *params,
struct event *event_parent);
void imapc_client_disconnect(struct imapc_client *client);
void imapc_client_deinit(struct imapc_client **client);
struct imapc_command *cmd;
if ((conn->capabilities & IMAPC_CAPABILITY_ID) == 0 ||
- conn->client->set.session_id_prefix == NULL)
+ conn->client->params.session_id_prefix == NULL)
return;
cmd = imapc_connection_cmd(conn, imapc_connection_id_callback, conn);
imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_PRELOGIN);
imapc_command_send(cmd, t_strdup_printf(
"ID (\"name\" \"Dovecot\" \"x-session-ext-id\" \"%s-%u\")",
- conn->client->set.session_id_prefix, ++global_id_counter));
+ conn->client->params.session_id_prefix, ++global_id_counter));
}
static void imapc_connection_starttls(struct imapc_connection *conn)
.password = "testpass",
.dns_client_socket_path = "",
- .temp_path_prefix = ".test-tmp/",
.rawlog_dir = "",
.connect_timeout_msecs = 5000,
.max_idle_time = 10000,
};
+static const struct imapc_parameters imapc_params = {
+ .temp_path_prefix = ".test-tmp/",
+};
+
static enum imapc_command_state test_imapc_cmd_last_reply_pop(void)
{
const enum imapc_command_state *replies;
i_sleep_msecs(100); /* wait a little for server setup */
ioloop = io_loop_create();
- imapc_client = imapc_client_init(client_set, NULL);
+ imapc_client = imapc_client_init(client_set, &imapc_params, NULL);
client_test();
imapc_client_logout(imapc_client);
test_assert(array_count(&imapc_cmd_last_replies) == 0);
server.fd_listen = test_open_server_fd(&server.port);
client_set_copy.port = server.port;
- if (mkdir(client_set->temp_path_prefix, 0700) < 0 && errno != EEXIST)
- i_fatal("mkdir(%s) failed: %m", client_set->temp_path_prefix);
+ if (mkdir(imapc_params.temp_path_prefix, 0700) < 0 && errno != EEXIST)
+ i_fatal("mkdir(%s) failed: %m", imapc_params.temp_path_prefix);
if (server_test != NULL) {
/* Fork server */
i_unset_failure_prefix();
test_subprocess_kill_all(SERVER_KILL_TIMEOUT_SECS);
- if (unlink_directory(client_set->temp_path_prefix,
+ if (unlink_directory(imapc_params.temp_path_prefix,
UNLINK_DIRECTORY_FLAG_RMDIR, &error) < 0)
i_fatal("%s", error);
}
const struct imapc_settings *imapc_set;
struct imapc_storage_client *client;
struct imapc_client_settings set;
+ struct imapc_parameters params = {};
string_t *str;
if (settings_get(list->event, &imapc_setting_parser_info, 0,
set.connect_retry_interval_msecs = imapc_set->imapc_connection_retry_interval;
set.max_idle_time = imapc_set->imapc_max_idle_time;
set.max_line_length = imapc_set->imapc_max_line_length;
- set.dns_client_socket_path = *ns->user->set->base_dir == '\0' ? "" :
+ params.override_dns_client_socket_path = *ns->user->set->base_dir == '\0' ? "" :
t_strconcat(ns->user->set->base_dir, "/",
DNS_CLIENT_SOCKET_NAME, NULL);
- set.rawlog_dir = mail_user_home_expand(ns->user,
- imapc_set->imapc_rawlog_dir);
+ params.override_rawlog_dir = mail_user_home_expand(ns->user,
+ imapc_set->imapc_rawlog_dir);
if ((imapc_set->parsed_features & IMAPC_FEATURE_SEND_ID) != 0)
- set.session_id_prefix = ns->user->session_id;
+ params.session_id_prefix = ns->user->session_id;
str = t_str_new(128);
mail_user_set_get_temp_prefix(str, ns->user->set);
- set.temp_path_prefix = str_c(str);
+ params.temp_path_prefix = str_c(str);
if (!imapc_set->imapc_ssl_verify)
set.ssl_allow_invalid_cert = TRUE;
client->refcount = 1;
client->set = imapc_set;
i_array_init(&client->untagged_callbacks, 16);
- client->client = imapc_client_init(&set, list->event);
+ client->client = imapc_client_init(&set, ¶ms, list->event);
imapc_client_register_untagged(client->client,
imapc_storage_client_untagged_cb, client);
if ((ns->flags & NAMESPACE_FLAG_LIST_PREFIX) != 0 &&
(imapc_set->parsed_features & IMAPC_FEATURE_NO_DELAY_LOGIN) != 0) {
/* start logging in immediately */
- imapc_storage_client_login(client, ns->user, set.host);
+ imapc_storage_client_login(client, ns->user, imapc_set->imapc_host);
}
*client_r = client;