Also rename the parameter/variable names.
/* if we want to allow root, then we will not drop
root privileges */
- restrict_access(&pclient->set.restrict_set,
- (pclient->set.allow_root ?
+ restrict_access(&pclient->params.restrict_set,
+ (pclient->params.allow_root ?
RESTRICT_ACCESS_FLAG_ALLOW_ROOT : 0),
- pclient->set.home);
+ pclient->params.home);
exec_child(plclient->bin_path, pclient->args, &pclient->envs,
fd_in[0], fd_out[1], child_extra_fds,
- pclient->set.drop_stderr, event);
+ pclient->params.drop_stderr, event);
i_unreached();
}
e_debug(pclient->event,
"Execution timed out after %u milliseconds: "
"Sending TERM signal",
- pclient->set.input_idle_timeout_msecs);
+ pclient->params.input_idle_timeout_msecs);
/* send sigterm, keep on waiting */
plclient->sent_term = TRUE;
/* Calculate timeout */
runtime = timeval_diff_msecs(&ioloop_timeval, &pclient->start_time);
- if (force || (pclient->set.input_idle_timeout_msecs > 0 &&
- runtime >= pclient->set.input_idle_timeout_msecs)) {
+ if (force || (pclient->params.input_idle_timeout_msecs > 0 &&
+ runtime >= pclient->params.input_idle_timeout_msecs)) {
e_debug(pclient->event,
"Terminating program immediately");
return;
}
- if (runtime > 0 && runtime < pclient->set.input_idle_timeout_msecs)
- timeout = pclient->set.input_idle_timeout_msecs - runtime;
+ if (runtime > 0 && runtime < pclient->params.input_idle_timeout_msecs)
+ timeout = pclient->params.input_idle_timeout_msecs - runtime;
e_debug(pclient->event,
"Waiting for program to finish after %lld msecs "
struct program_client *
program_client_local_create(const char *bin_path,
const char *const *args,
- const struct program_client_settings *set)
+ const struct program_client_parameters *params)
{
struct program_client_local *plclient;
const char *label;
pool = pool_alloconly_create("program client local", 1024);
plclient = p_new(pool, struct program_client_local, 1);
- program_client_init(&plclient->client, pool, label, args, set);
+ program_client_init(&plclient->client, pool, label, args, params);
plclient->client.connect = program_client_local_connect;
plclient->client.close_output = program_client_local_close_output;
plclient->client.switch_ioloop = program_client_local_switch_ioloop;
struct program_client {
pool_t pool;
- struct program_client_settings set;
+ struct program_client_parameters params;
const char **args;
ARRAY_TYPE(const_string) envs;
void program_client_init(struct program_client *pclient, pool_t pool,
const char *initial_label,
const char *const *args,
- const struct program_client_settings *set)
+ const struct program_client_parameters *params)
ATTR_NULL(5);
void program_client_init_streams(struct program_client *pclient);
e_error(pclient->event, "connect(%s) failed: "
"Timeout in %u milliseconds", prclient->address,
- pclient->set.client_connect_timeout_msecs);
+ pclient->params.client_connect_timeout_msecs);
/* Set error to timeout here */
pclient->error = PROGRAM_CLIENT_ERROR_CONNECT_TIMEOUT;
program_client_set_label(pclient, label);
e_debug(pclient->event, "Trying to connect (timeout %u msecs)",
- pclient->set.client_connect_timeout_msecs);
+ pclient->params.client_connect_timeout_msecs);
/* Try to connect */
int fd;
pclient->io = io_add(fd, IO_WRITE,
program_client_net_connected, prclient);
- if (pclient->set.client_connect_timeout_msecs != 0) {
+ if (pclient->params.client_connect_timeout_msecs != 0) {
pclient->to = timeout_add(
- pclient->set.client_connect_timeout_msecs,
+ pclient->params.client_connect_timeout_msecs,
program_client_net_connect_timeout, prclient);
}
}
result->ips_count);
/* Reduce timeout */
- if (pclient->set.client_connect_timeout_msecs > 0) {
- if (pclient->set.client_connect_timeout_msecs <=
+ if (pclient->params.client_connect_timeout_msecs > 0) {
+ if (pclient->params.client_connect_timeout_msecs <=
result->msecs) {
/* We ran out of time */
program_client_fail(
pclient, PROGRAM_CLIENT_ERROR_CONNECT_TIMEOUT);
return;
}
- pclient->set.client_connect_timeout_msecs -= result->msecs;
+ pclient->params.client_connect_timeout_msecs -= result->msecs;
}
/* Then connect */
prclient->ips_count = 1;
} else {
prclient->resolved = FALSE;
- if (pclient->set.dns_client_socket_path != NULL) {
+ if (pclient->params.dns_client_socket_path != NULL) {
e_debug(pclient->event,
"Performing asynchronous DNS lookup");
prclient->dns_set.dns_client_socket_path =
- pclient->set.dns_client_socket_path;
+ pclient->params.dns_client_socket_path;
prclient->dns_set.timeout_msecs =
- pclient->set.client_connect_timeout_msecs;
+ pclient->params.client_connect_timeout_msecs;
prclient->dns_set.event_parent = pclient->event;
(void)dns_lookup(prclient->address, &prclient->dns_set,
program_client_net_connect_resolved,
struct program_client *
program_client_unix_create(const char *socket_path, const char *const *args,
- const struct program_client_settings *set,
+ const struct program_client_parameters *params,
bool noreply)
{
struct program_client_remote *prclient;
pool = pool_alloconly_create("program client unix", 1024);
prclient = p_new(pool, struct program_client_remote, 1);
- program_client_init(&prclient->client, pool, label, args, set);
+ program_client_init(&prclient->client, pool, label, args, params);
prclient->client.connect = program_client_unix_connect;
prclient->client.close_output = program_client_remote_close_output;
prclient->client.disconnect = program_client_remote_disconnect;
struct program_client *
program_client_net_create(const char *host, in_port_t port,
const char *const *args,
- const struct program_client_settings *set,
+ const struct program_client_parameters *params,
bool noreply)
{
struct program_client_remote *prclient;
pool = pool_alloconly_create("program client net", 1024);
prclient = p_new(pool, struct program_client_remote, 1);
- program_client_init(&prclient->client, pool, label, args, set);
+ program_client_init(&prclient->client, pool, label, args, params);
prclient->client.connect = program_client_net_connect_init;
prclient->client.close_output = program_client_remote_close_output;
prclient->client.disconnect = program_client_remote_disconnect;
- prclient->client.set.use_dotstream = TRUE;
+ prclient->client.params.use_dotstream = TRUE;
prclient->address = p_strdup(pool, host);
prclient->port = port;
prclient->have_hostname = TRUE;
program_client_net_create_ips(const struct ip_addr *ips, size_t ips_count,
in_port_t port,
const char *const *args,
- const struct program_client_settings *set,
+ const struct program_client_parameters *params,
bool noreply)
{
struct program_client_remote *prclient;
pool = pool_alloconly_create("program client net", 1024);
prclient = p_new(pool, struct program_client_remote, 1);
- program_client_init(&prclient->client, pool, label, args, set);
+ program_client_init(&prclient->client, pool, label, args, params);
prclient->client.connect = program_client_net_connect_init;
prclient->client.close_output = program_client_remote_close_output;
prclient->client.disconnect = program_client_remote_disconnect;
prclient->client.switch_ioloop = program_client_remote_switch_ioloop;
- prclient->client.set.use_dotstream = TRUE;
+ prclient->client.params.use_dotstream = TRUE;
prclient->address = p_strdup(pool, net_ip2addr(ips));
prclient->ips = p_memdup(pool, ips,
sizeof(struct ip_addr)*ips_count);
{
e_error(pclient->event,
"Execution timed out (> %u msecs)",
- pclient->set.input_idle_timeout_msecs);
+ pclient->params.input_idle_timeout_msecs);
program_client_fail(pclient, PROGRAM_CLIENT_ERROR_RUN_TIMEOUT);
}
{
e_error(pclient->event,
"Connection timed out (> %u msecs)",
- pclient->set.client_connect_timeout_msecs);
+ pclient->params.client_connect_timeout_msecs);
program_client_fail(pclient, PROGRAM_CLIENT_ERROR_CONNECT_TIMEOUT);
}
{
e_debug(pclient->event, "Establishing connection");
- if (pclient->set.client_connect_timeout_msecs != 0) {
+ if (pclient->params.client_connect_timeout_msecs != 0) {
pclient->to = timeout_add(
- pclient->set.client_connect_timeout_msecs,
+ pclient->params.client_connect_timeout_msecs,
program_client_connect_timeout, pclient);
}
struct istream *input = pclient->raw_program_input;
/* initialize dot input stream if required */
- if (pclient->set.use_dotstream)
+ if (pclient->params.use_dotstream)
input = i_stream_create_dot(input, ISTREAM_DOT_TRIM_TRAIL |
ISTREAM_DOT_LOOSE_EOT);
else
struct ostream *output = pclient->raw_program_output;
/* initialize dot output stream if required */
- if (pclient->set.use_dotstream)
+ if (pclient->params.use_dotstream)
output = o_stream_create_dot(output, FALSE);
else
o_stream_ref(output);
pclient->start_time = ioloop_timeval;
timeout_remove(&pclient->to);
- if (pclient->set.input_idle_timeout_msecs != 0) {
+ if (pclient->params.input_idle_timeout_msecs != 0) {
pclient->to =
- timeout_add(pclient->set.input_idle_timeout_msecs,
+ timeout_add(pclient->params.input_idle_timeout_msecs,
program_client_timeout, pclient);
}
void program_client_init(struct program_client *pclient, pool_t pool,
const char *initial_label, const char *const *args,
- const struct program_client_settings *set)
+ const struct program_client_parameters *params)
{
pclient->pool = pool;
if (args != NULL)
pclient->fd_in = -1;
pclient->fd_out = -1;
- if (set == NULL)
+ if (params == NULL)
pclient->event = event_create(NULL);
else {
- pclient->set = *set;
- pclient->debug = set->debug;
- pclient->set.dns_client_socket_path =
- p_strdup(pool, set->dns_client_socket_path);
- pclient->set.home = p_strdup(pool, set->home);
-
- pclient->event = event_create(set->event);
- event_set_forced_debug(pclient->event, set->debug);
+ pclient->params = *params;
+ pclient->debug = params->debug;
+ pclient->params.dns_client_socket_path =
+ p_strdup(pool, params->dns_client_socket_path);
+ pclient->params.home = p_strdup(pool, params->home);
+
+ pclient->event = event_create(params->event);
+ event_set_forced_debug(pclient->event, params->debug);
}
program_client_set_label(pclient, initial_label);
}
int program_client_create(const char *uri, const char *const *args,
- const struct program_client_settings *set,
+ const struct program_client_parameters *params,
bool noreply, struct program_client **pc_r,
const char **error_r)
{
const char *suffix;
if (str_begins(uri, "exec:", &suffix)) {
- *pc_r = program_client_local_create(suffix, args, set);
+ *pc_r = program_client_local_create(suffix, args, params);
return 0;
} else if (str_begins(uri, "unix:", &suffix)) {
- *pc_r = program_client_unix_create(suffix, args, set, noreply);
+ *pc_r = program_client_unix_create(suffix, args, params, noreply);
return 0;
} else if (str_begins(uri, "tcp:", &suffix)) {
const char *host;
"must be host:port in '%s'", suffix);
return -1;
}
- *pc_r = program_client_net_create(host, port, args, set,
+ *pc_r = program_client_net_create(host, port, args, params,
noreply);
return 0;
} else {
PROGRAM_CLIENT_EXIT_STATUS_SUCCESS = 1,
};
-struct program_client_settings {
+struct program_client_parameters {
unsigned int client_connect_timeout_msecs;
unsigned int input_idle_timeout_msecs;
/* initialize with
struct program_client *
program_client_local_create(const char *bin_path, const char *const *args,
- const struct program_client_settings *set)
+ const struct program_client_parameters *params)
ATTR_NULL(3);
struct program_client *
program_client_unix_create(const char *socket_path, const char *const *args,
- const struct program_client_settings *set,
+ const struct program_client_parameters *params,
bool noreply) ATTR_NULL(3);
struct program_client *
program_client_net_create(const char *host, in_port_t port,
const char *const *args,
- const struct program_client_settings *set,
+ const struct program_client_parameters *params,
bool noreply) ATTR_NULL(4);
struct program_client *
program_client_net_create_ips(const struct ip_addr *ips, size_t ips_count,
in_port_t port, const char *const *args,
- const struct program_client_settings *set,
+ const struct program_client_parameters *params,
bool noreply) ATTR_NULL(5);
int program_client_create(const char *uri, const char *const *args,
- const struct program_client_settings *set,
+ const struct program_client_parameters *params,
bool noreply, struct program_client **pc_r,
const char **error_r) ATTR_NULL(3);
"dis parturient montes, nascetur ridiculus mus. Aliquam \n"
"laoreet arcu a hendrerit consequat. Duis vitae erat tellus.";
-static struct program_client_settings pc_set = {
+static struct program_client_parameters pc_params = {
.client_connect_timeout_msecs = 10000,
.input_idle_timeout_msecs = 5000,
.debug = FALSE,
test_begin("test_program_success");
- pc = program_client_local_create("/bin/echo", args, &pc_set);
+ pc = program_client_local_create("/bin/echo", args, &pc_params);
buffer_t *output = buffer_create_dynamic(default_pool, 16);
struct ostream *os = test_ostream_create(output);
test_begin("test_program_io (sync)");
- pc = program_client_local_create("/bin/cat", args, &pc_set);
+ pc = program_client_local_create("/bin/cat", args, &pc_params);
struct istream *is = test_istream_create(pclient_test_io_string);
program_client_set_input(pc, is);
prev_ioloop = current_ioloop;
ioloop = io_loop_create();
- pc = program_client_local_create("/bin/cat", args, &pc_set);
+ pc = program_client_local_create("/bin/cat", args, &pc_params);
struct istream *is = test_istream_create(pclient_test_io_string);
program_client_set_input(pc, is);
test_begin("test_program_failure");
- pc = program_client_local_create("/bin/false", args, &pc_set);
+ pc = program_client_local_create("/bin/false", args, &pc_params);
buffer_t *output = buffer_create_dynamic(default_pool, 16);
struct ostream *os = test_ostream_create(output);
test_begin("test_program_io (big)");
- pc = program_client_local_create("/bin/sh", args, &pc_set);
+ pc = program_client_local_create("/bin/sh", args, &pc_params);
/* make big input with only a small reference string */
struct istream *is1 = test_istream_create(pclient_test_io_string);
static void test_program_wait_no_io(void)
{
- struct program_client_settings set = pc_set;
+ struct program_client_parameters params = pc_params;
struct program_client *pc;
/* nasty program that reads data in bits with intermittent delays
test_begin("test_program_wait (no timeout, no I/O)");
- set.client_connect_timeout_msecs = 0;
- set.input_idle_timeout_msecs = 0;
- pc = program_client_local_create("/bin/sh", args, &set);
+ params.client_connect_timeout_msecs = 0;
+ params.input_idle_timeout_msecs = 0;
+ pc = program_client_local_create("/bin/sh", args, ¶ms);
test_assert(program_client_run(pc) == 1);
while ((c = getopt(argc, argv, "D")) > 0) {
switch (c) {
case 'D':
- pc_set.debug = TRUE;
+ pc_params.debug = TRUE;
break;
default:
i_fatal("Usage: %s [-D]", argv[0]);
"dis parturient montes, nascetur ridiculus mus. Aliquam \r\n"
"laoreet arcu a hendrerit consequat. Duis vitae erat tellus.";
-static struct program_client_settings pc_set = {
+static struct program_client_parameters pc_params = {
.client_connect_timeout_msecs = 5000,
.input_idle_timeout_msecs = 10000,
.debug = FALSE,
test_begin("test_program_success");
pc = program_client_net_create("127.0.0.1", test_globals.port, args,
- &pc_set, FALSE);
+ &pc_params, FALSE);
buffer_t *output = buffer_create_dynamic(default_pool, 16);
struct ostream *os = test_ostream_create(output);
int ret = -2;
pc = program_client_net_create("127.0.0.1", test_globals.port, args,
- &pc_set, FALSE);
+ &pc_params, FALSE);
struct istream *is = test_istream_create(pclient_test_io_string);
program_client_set_input(pc, is);
test_begin("test_program_failure");
pc = program_client_net_create("127.0.0.1", test_globals.port, args,
- &pc_set, FALSE);
+ &pc_params, FALSE);
buffer_t *output = buffer_create_dynamic(default_pool, 16);
struct ostream *os = test_ostream_create(output);
test_begin("test_program_noreply");
pc = program_client_net_create("127.0.0.1", test_globals.port, args,
- &pc_set, TRUE);
+ &pc_params, TRUE);
program_client_run_async(pc, test_program_async_callback, &ret);
pc = program_client_net_create_ips(ips, N_ELEMENTS(ips),
test_globals.port, args,
- &pc_set, TRUE);
+ &pc_params, TRUE);
test_expect_errors(N_ELEMENTS(ips)-1);
program_client_run_async(pc, test_program_async_callback, &ret);
while ((c = getopt(argc, argv, "D")) > 0) {
switch (c) {
case 'D':
- pc_set.debug = TRUE;
+ pc_params.debug = TRUE;
break;
default:
i_fatal("Usage: %s [-D]", argv[0]);
"dis parturient montes, nascetur ridiculus mus. Aliquam \n"
"laoreet arcu a hendrerit consequat. Duis vitae erat tellus.";
-static struct program_client_settings pc_set = {
+static struct program_client_parameters pc_params = {
.client_connect_timeout_msecs = 1000,
.input_idle_timeout_msecs = 5000,
.debug = FALSE,
test_begin("test_program_success");
- pc = program_client_unix_create(TEST_SOCKET, args, &pc_set, FALSE);
+ pc = program_client_unix_create(TEST_SOCKET, args, &pc_params, FALSE);
buffer_t *output = buffer_create_dynamic(default_pool, 16);
struct ostream *os = test_ostream_create(output);
struct program_client *pc;
int ret;
- pc = program_client_unix_create(TEST_SOCKET, args, &pc_set, FALSE);
+ pc = program_client_unix_create(TEST_SOCKET, args, &pc_params, FALSE);
struct istream *is = test_istream_create(pclient_test_io_string);
program_client_set_input(pc, is);
test_begin("test_program_failure");
- pc = program_client_unix_create(TEST_SOCKET, args, &pc_set, FALSE);
+ pc = program_client_unix_create(TEST_SOCKET, args, &pc_params, FALSE);
buffer_t *output = buffer_create_dynamic(default_pool, 16);
struct ostream *os = test_ostream_create(output);
test_begin("test_program_noreply");
- pc = program_client_unix_create(TEST_SOCKET, args, &pc_set, TRUE);
+ pc = program_client_unix_create(TEST_SOCKET, args, &pc_params, TRUE);
program_client_run_async(pc, test_program_async_callback, &ret);
test_begin("test_program_sync");
- pc = program_client_unix_create(TEST_SOCKET, args, &pc_set, TRUE);
+ pc = program_client_unix_create(TEST_SOCKET, args, &pc_params, TRUE);
ret = program_client_run(pc);
test_assert(ret == 1);
test_begin("test_program_async_wait");
test_globals.async_client = program_client_unix_create(TEST_SOCKET,
- args, &pc_set, TRUE);
+ args, &pc_params, TRUE);
program_client_run_async(test_globals.async_client,
test_program_async_wait_finish,
while ((c = getopt(argc, argv, "D")) > 0) {
switch (c) {
case 'D':
- pc_set.debug = TRUE;
+ pc_params.debug = TRUE;
break;
default:
i_fatal("Usage: %s [-D]", argv[0]);
ARRAY_TYPE(const_string) args;
struct smtp_address *rcpt;
unsigned int i;
- struct program_client_settings pc_set;
+ struct program_client_parameters pc_params;
struct program_client *pc;
sendmail_args = t_strsplit(set->sendmail_path, " ");
}
array_append_zero(&args);
- i_zero(&pc_set);
- pc_set.client_connect_timeout_msecs = set->submission_timeout * 1000;
- pc_set.input_idle_timeout_msecs = set->submission_timeout * 1000;
- pc_set.debug = set->mail_debug;
- pc_set.event = subm->event;
- pc_set.allow_root = subm->session->allow_root;
- restrict_access_init(&pc_set.restrict_set);
+ i_zero(&pc_params);
+ pc_params.client_connect_timeout_msecs = set->submission_timeout * 1000;
+ pc_params.input_idle_timeout_msecs = set->submission_timeout * 1000;
+ pc_params.debug = set->mail_debug;
+ pc_params.event = subm->event;
+ pc_params.allow_root = subm->session->allow_root;
+ restrict_access_init(&pc_params.restrict_set);
pc = program_client_local_create
- (sendmail_bin, array_front(&args), &pc_set);
+ (sendmail_bin, array_front(&args), &pc_params);
program_client_set_input(pc, subm->input);
i_stream_unref(&subm->input);
{
const char *socket_path, *const *args, *error, *scheme, *ptr;
- struct program_client_settings set = {
+ struct program_client_parameters params = {
.client_connect_timeout_msecs = 1000,
.debug = event_want_debug(root->quota->event),
};
struct program_client *pc;
- restrict_access_init(&set.restrict_set);
+ restrict_access_init(¶ms.restrict_set);
e_debug(root->quota->event, "Executing warning: %s (because %s)", cmd, reason);
args++;
- if (program_client_create(socket_path, args, &set, TRUE,
+ if (program_client_create(socket_path, args, ¶ms, TRUE,
&pc, &error) < 0) {
e_error(root->quota->event,
"program_client_create(%s) failed: %s", socket_path,
if (mail_user_get_home(user, &home) < 0)
home = NULL;
- struct program_client_settings set = {
+ struct program_client_parameters params = {
.client_connect_timeout_msecs = 1000,
.event = user->event,
.debug = event_want_debug(user->event),
}
struct welcome_client_list *wclient = i_new(struct welcome_client_list, 1);
- wclient->client = program_client_unix_create(socket_path, args, &set, !wait);
+ wclient->client = program_client_unix_create(socket_path, args, ¶ms, !wait);
if (wait) {
enum program_client_exit_status ret =