/* This file is part of Mailfromd.
Copyright (C) 2005-2020 Sergey Poznyakoff
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see . */
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "libmf.h"
#include "callout.h"
#include "srvman.h"
#include "srvcfg.h"
#include "mfdb.h"
void
callout_alloc_die()
{
mu_error(_("not enough memory"));
abort();
}
const char *program_version = "calloutd (" PACKAGE_STRING ")";
static char prog_doc[] = N_("calloutd -- a call out server");
static char *resolv_conf_file;
struct mu_cfg_param callout_cfg_param[] = {
{ ".mfd:server", mu_cfg_section, NULL, 0, NULL, NULL },
{ "lock-retry-count", mu_cfg_callback, NULL, 0,
config_cb_lock_retry_count,
N_("Retry acquiring DBM file lock this number of times."),
N_("arg: number") },
{ "lock-retry-timeout", mu_cfg_callback, NULL, 0,
config_cb_lock_retry_timeout,
N_("Set the time span between the two DBM locking attempts."),
N_("time: interval") },
{ NULL }
};
extern char **environ;
static char *capa[] = {
"debug",
"logging",
"locking",
".mfd:server",
NULL
};
int
mf_server_function(const char *key, struct mf_srvcfg *cfg)
{
cfg->server = callout_session_server;
return 0;
}
static struct mu_option calloutd_options[] = {
MU_OPTION_GROUP(N_("General options")),
{ "resolv-conf-file", 0, N_("FILE"), MU_OPTION_DEFAULT,
N_("read resolver configuration from FILE"),
mu_c_string, &resolv_conf_file },
MU_OPTION_END
}, *options[] = { calloutd_options, NULL };
struct mu_cli_setup cli = {
.optv = options,
.cfg = callout_cfg_param,
.prog_doc = prog_doc,
};
int
main(int argc, char **argv)
{
mf_init_nls();
mf_proctitle_init(argc, argv, environ);
mu_alloc_die_hook = callout_alloc_die;
/* Set default logging */
mu_log_facility = DEFAULT_LOG_FACILITY;
mu_stdstream_setup(MU_STDSTREAM_RESET_NONE);
mf_srvcfg_log_setup(stderr_closed_p() ? "syslog" : "stderr");
libcallout_init();
db_format_setup();
mf_server_save_cmdline(argc, argv);
dnsbase_init();
database_cfg_init();
mu_acl_cfg_init();
srvman_init();
mf_srvcfg_init(argv[0], NULL);
mf_getopt(&cli, &argc, &argv, capa, MF_GETOPT_DEFAULT);
if (resolv_conf_file)
dnsbase_file_init(resolv_conf_file);
mf_srvcfg_flush();
mf_server_lint_option = "--config-lint";
mf_server_start("calloutd", mailfromd_state_dir, pidfile,
server_flags);
exit(0);
}