summaryrefslogtreecommitdiff
path: root/mda/mda.c
diff options
context:
space:
mode:
Diffstat (limited to 'mda/mda.c')
-rw-r--r--mda/mda.c143
1 files changed, 143 insertions, 0 deletions
diff --git a/mda/mda.c b/mda/mda.c
new file mode 100644
index 000000000..89951b8f6
--- /dev/null
+++ b/mda/mda.c
@@ -0,0 +1,143 @@
+/* GNU Mailutils -- a suite of utilities for electronic mail
+ Copyright (C) 2007-2019 Free Software Foundation, Inc.
+
+ GNU Mailutils 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.
+
+ GNU Mailutils 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 GNU Mailutils. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "libmda.h"
+
+static void
+set_stderr (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ mu_log_syslog = 0;
+}
+
+static struct mu_option mda_options[] = {
+ MU_OPTION_GROUP (N_("General options")),
+ { "stderr", 0, NULL, MU_OPTION_DEFAULT,
+ N_("log to standard error"),
+ mu_c_string, NULL, set_stderr },
+ MU_OPTION_END
+}, *options[] = { mda_options, NULL };
+
+static char *capa[] = {
+ "auth",
+ "debug",
+ "logging",
+ "mailbox",
+ "locking",
+ "mailer",
+ "sieve",
+ "deliver",
+ "forward",
+ "quota",
+ "script",
+ NULL
+};
+
+static int
+cb_stderr (void *data, mu_config_value_t *val)
+{
+ int res;
+
+ if (mu_cfg_assert_value_type (val, MU_CFG_STRING))
+ return 1;
+ if (mu_str_to_c (val->v.string, mu_c_bool, &res, NULL))
+ mu_error (_("not a boolean"));
+ else
+ mu_log_syslog = !res;
+ return 0;
+}
+
+struct mu_cfg_param mda_cfg_param[] = {
+ { "stderr", mu_cfg_callback, NULL, 0, cb_stderr,
+ N_("Log to stderr instead of syslog."),
+ N_("arg: bool") },
+ { NULL }
+};
+
+struct mu_cli_setup cli = {
+ options,
+ mda_cfg_param,
+ N_("mda -- the GNU local mail delivery agent."),
+ N_("[recipient...]"),
+};
+
+int
+main (int argc, char **argv)
+{
+ struct mu_parseopt pohint;
+ struct mu_cfg_parse_hints cfhint;
+
+ umask (0077);
+
+ /* Native Language Support */
+ MU_APP_INIT_NLS ();
+
+ /* Default locker settings */
+ mu_locker_set_default_flags (MU_LOCKER_PID|MU_LOCKER_RETRY,
+ mu_locker_assign);
+ mu_locker_set_default_retry_timeout (1);
+ mu_locker_set_default_retry_count (300);
+
+ /* Register needed modules */
+ MU_AUTH_REGISTER_ALL_MODULES ();
+
+ /* Register all supported mailbox and mailer formats */
+ mu_register_all_formats ();
+ mu_registrar_record (mu_smtp_record);
+
+ mda_filter_cfg_init ();
+
+ mu_log_syslog = 1;
+ mu_log_print_severity = 1;
+
+ /* Parse command line */
+ mda_cli_capa_init ();
+
+ pohint.po_flags = 0;
+
+ pohint.po_package_name = PACKAGE_NAME;
+ pohint.po_flags |= MU_PARSEOPT_PACKAGE_NAME;
+
+ pohint.po_package_url = PACKAGE_URL;
+ pohint.po_flags |= MU_PARSEOPT_PACKAGE_URL;
+
+ pohint.po_bug_address = PACKAGE_BUGREPORT;
+ pohint.po_flags |= MU_PARSEOPT_BUG_ADDRESS;
+
+ pohint.po_extra_info = mu_general_help_text;
+ pohint.po_flags |= MU_PARSEOPT_EXTRA_INFO;
+
+ pohint.po_version_hook = mu_version_hook;
+ pohint.po_flags |= MU_PARSEOPT_VERSION_HOOK;
+
+ pohint.po_negation = "no-";
+ pohint.po_flags |= MU_PARSEOPT_NEGATION;
+
+ cfhint.site_file = mu_site_config_file ();
+ cfhint.flags = MU_CFHINT_SITE_FILE | MU_CFHINT_NO_CONFIG_OVERRIDE;
+
+ mu_cli_ext (argc, argv, &cli, &pohint, &cfhint,
+ capa, NULL, &argc, &argv);
+ if (argc == 0)
+ {
+ mu_error (_("recipients not given"));
+ return EX_USAGE;
+ }
+
+ mu_stdstream_strerr_setup (mu_log_syslog ?
+ MU_STRERR_SYSLOG : MU_STRERR_STDERR);
+
+ return mda_run_delivery (mda_deliver_to_user, argc, argv);
+}

Return to:

Send suggestions and report system problems to the System administrator.