summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2002-05-13 14:39:17 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2002-05-13 14:39:17 +0000
commit48452ce4e79704c4c027daa3058a5a46f7856a85 (patch)
tree591f226535d7394dc14c0f516e5a8b6c670701de /lib
parent94abb6c53288c539cbc827c6fea15a8046d8a2e5 (diff)
downloadmailutils-48452ce4e79704c4c027daa3058a5a46f7856a85.tar.gz
mailutils-48452ce4e79704c4c027daa3058a5a46f7856a85.tar.bz2
Moved to mailbox
Diffstat (limited to 'lib')
-rw-r--r--lib/mu_argp.c818
-rw-r--r--lib/mu_argp.h51
2 files changed, 0 insertions, 869 deletions
diff --git a/lib/mu_argp.c b/lib/mu_argp.c
deleted file mode 100644
index 03b24e540..000000000
--- a/lib/mu_argp.c
+++ /dev/null
@@ -1,818 +0,0 @@
-/* GNU mailutils - a suite of utilities for electronic mail
- Copyright (C) 1999, 2001 Free Software Foundation, Inc.
-
- 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 2, 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <getline.h>
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-#include <xalloc.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-
-#include <mailutils/error.h>
-#include <mailutils/errno.h>
-#include <mailutils/mutil.h>
-#include <mailutils/locker.h>
-
-#include <argcv.h>
-#include <mu_argp.h>
-#include <mu_asprintf.h>
-
-#ifdef HAVE_MYSQL
-# include "../MySql/MySql.h"
-#endif
-
-#define ARG_LOG_FACILITY 1
-#define ARG_SQL_GETPWNAM 2
-#define ARG_SQL_GETPWUID 3
-#define ARG_SQL_GETPASS 4
-#define ARG_SQL_HOST 5
-#define ARG_SQL_USER 6
-#define ARG_SQL_PASSWD 7
-#define ARG_SQL_DB 8
-#define ARG_SQL_PORT 9
-#define ARG_PAM_SERVICE 10
-#define ARG_LOCK_FLAGS 11
-
-static struct argp_option mu_common_argp_options[] =
-{
- { NULL, 0, NULL, 0, "Common options:", 0},
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Option to print the license. */
-static struct argp_option mu_license_argp_option[] = {
- { "license", 'L', NULL, 0, "Print license and exit", -2 },
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Options used by programs that access mailboxes. */
-static struct argp_option mu_mailbox_argp_option[] = {
- {"mail-spool", 'm', "URL", 0,
- "Use specified URL as a mailspool directory", 0},
- {"lock-flags", ARG_LOCK_FLAGS, "FLAGS", 0,
- "Default locker flags (E=external, R=retry, T=time, P=pid)", 0},
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Options used by programs that do address mapping. */
-static struct argp_option mu_address_argp_option[] = {
- {"email-addr", 'E', "EMAIL", 0,
- "Set current user's email address (default is loginname@defaultdomain)", 0},
- {"email-domain", 'D', "DOMAIN", 0,
- "Set domain for unqualified user names (default is this host)", 0},
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Options used by programs that log to syslog. */
-static struct argp_option mu_logging_argp_option[] = {
- {"log-facility", ARG_LOG_FACILITY, "FACILITY", 0,
- "Output logs to syslog FACILITY", 0},
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Options used by programs that use extended authentication mechanisms. */
-static struct argp_option mu_auth_argp_option[] = {
-#ifdef USE_LIBPAM
- { "pam-service", ARG_PAM_SERVICE, "STRING", 0,
- "Use STRING as PAM service name", 0},
-#endif
-#ifdef HAVE_MYSQL
- {"sql-getpwnam", ARG_SQL_GETPWNAM, "QUERY", 0,
- "SQL query to retrieve a passwd entry based on username", 0},
- {"sql-getpwuid", ARG_SQL_GETPWUID, "QUERY", 0,
- "SQL query to retrieve a passwd entry based on UID", 0},
- {"sql-getpass", ARG_SQL_GETPASS, "QUERY", 0,
- "SQL query to retrieve a password from the database", 0},
- {"sql-host", ARG_SQL_HOST, "HOSTNAME", 0,
- "Name or IP of MySQL server to connect to", 0},
- {"sql-user", ARG_SQL_USER, "NAME", 0,
- "SQL user name", 0},
- {"sql-passwd", ARG_SQL_PASSWD, "STRING", 0,
- "SQL connection password", 0},
- {"sql-db", ARG_SQL_DB, "STRING", 0,
- "Name of the database to connect to", 0},
- {"sql-port", ARG_SQL_PORT, "NUMBER", 0,
- "Port to use", 0},
-#endif
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Options used by programs that become daemons. */
-static struct argp_option mu_daemon_argp_option[] = {
- {"daemon", 'd', "NUMBER", OPTION_ARG_OPTIONAL,
- "Runs in daemon mode with a maximum of NUMBER children"},
- {"inetd", 'i', 0, 0,
- "Run in inetd mode", 0},
- {"port", 'p', "PORT", 0,
- "Listen on specified port number", 0},
- {"timeout", 't', "NUMBER", 0,
- "Set idle timeout value to NUMBER seconds", 0},
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-static error_t mu_common_argp_parser __P((int key, char *arg,
- struct argp_state *state));
-static error_t mu_daemon_argp_parser __P((int key, char *arg,
- struct argp_state *state));
-
-struct argp mu_common_argp = {
- mu_common_argp_options,
- mu_common_argp_parser,
-};
-
-struct argp_child mu_common_argp_child = {
- &mu_common_argp,
- 0,
- NULL,
- 0,
-};
-
-struct argp mu_license_argp = {
- mu_license_argp_option,
- mu_common_argp_parser,
-};
-
-struct argp_child mu_license_argp_child = {
- &mu_license_argp,
- 0,
- NULL,
- 0
-};
-
-struct argp mu_mailbox_argp = {
- mu_mailbox_argp_option,
- mu_common_argp_parser,
-};
-
-struct argp_child mu_mailbox_argp_child = {
- &mu_mailbox_argp,
- 0,
- NULL,
- 0
-};
-
-struct argp mu_address_argp = {
- mu_address_argp_option,
- mu_common_argp_parser,
-};
-
-struct argp_child mu_address_argp_child = {
- &mu_address_argp,
- 0,
- NULL,
- 0
-};
-
-struct argp mu_logging_argp = {
- mu_logging_argp_option,
- mu_common_argp_parser,
-};
-
-struct argp_child mu_logging_argp_child = {
- &mu_logging_argp,
- 0,
- NULL,
- 0
-};
-
-struct argp mu_auth_argp = {
- mu_auth_argp_option,
- mu_common_argp_parser,
-};
-
-struct argp_child mu_auth_argp_child = {
- &mu_auth_argp,
- 0,
- "Authentication options",
- 0
-};
-
-struct argp mu_daemon_argp = {
- mu_daemon_argp_option,
- mu_daemon_argp_parser,
-};
-
-struct argp_child mu_daemon_argp_child = {
- &mu_daemon_argp,
- 0,
- "Daemon configuration options",
- 0
-};
-
-int log_facility = LOG_FACILITY;
-int mu_argp_error_code = 1;
-
-static int
-parse_log_facility (const char *str)
-{
- int i;
- static struct {
- char *name;
- int facility;
- } syslog_kw[] = {
- { "USER", LOG_USER },
- { "DAEMON", LOG_DAEMON },
- { "AUTH", LOG_AUTH },
- { "LOCAL0", LOG_LOCAL0 },
- { "LOCAL1", LOG_LOCAL1 },
- { "LOCAL2", LOG_LOCAL2 },
- { "LOCAL3", LOG_LOCAL3 },
- { "LOCAL4", LOG_LOCAL4 },
- { "LOCAL5", LOG_LOCAL5 },
- { "LOCAL6", LOG_LOCAL6 },
- { "LOCAL7", LOG_LOCAL7 },
- { "MAIL", LOG_MAIL }
- };
-
- if (strncmp (str, "LOG_", 4) == 0)
- str += 4;
-
- for (i = 0; i < sizeof (syslog_kw) / sizeof (syslog_kw[0]); i++)
- if (strcasecmp (syslog_kw[i].name, str) == 0)
- return syslog_kw[i].facility;
- fprintf (stderr, "unknown facility `%s'\n", str);
- return LOG_FACILITY;
-}
-
-static char license_text[] =
- " This program is free software; you can redistribute it and/or modify\n"
- " it under the terms of the GNU General Public License as published by\n"
- " the Free Software Foundation; either version 2, or (at your option)\n"
- " any later version.\n"
- "\n"
- " This program is distributed in the hope that it will be useful,\n"
- " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
- " GNU General Public License for more details.\n"
- "\n"
- " You should have received a copy of the GNU General Public License\n"
- " along with this program; if not, write to the Free Software\n"
- " Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n";
-
-#ifdef HAVE_MYSQL
-char *sql_getpwnam_query;
-char *sql_getpass_query;
-char *sql_getpwuid_query;
-char *sql_host = MHOST;
-char *sql_user = MUSER;
-char *sql_passwd = MPASS;
-char *sql_db = MDB;
-char *sql_socket = MSOCKET;
-int sql_port = MPORT;
-#endif
-#ifdef USE_LIBPAM
-char *pam_service = NULL;
-#endif
-
-static error_t
-mu_common_argp_parser (int key, char *arg, struct argp_state *state)
-{
- int err = 0;
- char *p;
-
- switch (key)
- {
- /* common */
- case 'L':
- printf ("License for %s:\n\n", argp_program_version);
- printf ("%s", license_text);
- exit (0);
-
- /* mailbox */
- case 'm':
- mu_path_maildir = arg;
- break;
-
- case ARG_LOCK_FLAGS:
- {
- int flags = 0;
- for ( ; *arg; arg++)
- {
- switch (*arg)
- {
- case 'E':
- flags |= MU_LOCKER_EXTERNAL;
- break;
- case 'R':
- flags |= MU_LOCKER_RETRY;
- break;
- case 'T':
- flags |= MU_LOCKER_TIME;
- break;
- case 'P':
- flags |= MU_LOCKER_PID;
- break;
- default:
- argp_error (state, "invalid lock flag '%c'", *arg);
- }
- }
- locker_set_default_flags(flags);
- }
- break;
-
- /* address */
- case 'E':
- if ((err = mu_set_user_email(arg)) != 0)
- {
- argp_error (state, "invalid email-addr '%s': %s",
- arg, mu_errstring(err));
- }
- break;
-
- case 'D':
- if ((err = mu_set_user_email_domain(arg)) != 0)
- {
- argp_error (state, "invalid email-domain '%s': %s",
- arg, mu_errstring(err));
- }
- break;
-
- /* log */
- case ARG_LOG_FACILITY:
- log_facility = parse_log_facility (arg);
- break;
-
- /* authentication */
-#ifdef USE_LIBPAM
- case ARG_PAM_SERVICE:
- pam_service = arg;
- break;
-#endif
-
-#ifdef HAVE_MYSQL
- case ARG_SQL_GETPWNAM:
- sql_getpwnam_query = arg;
- break;
-
- case ARG_SQL_GETPWUID:
- sql_getpwuid_query = arg;
- break;
-
- case ARG_SQL_GETPASS:
- sql_getpass_query = arg;
- break;
-
- case ARG_SQL_HOST:
- sql_host = arg;
- break;
-
- case ARG_SQL_USER:
- sql_user = arg;
- break;
-
- case ARG_SQL_PASSWD:
- sql_passwd = arg;
- break;
-
- case ARG_SQL_DB:
- sql_db = arg;
- break;
-
- case ARG_SQL_PORT:
- sql_port = strtoul (arg, NULL, 0);
- if (sql_port == 0)
- {
- sql_host = NULL;
- sql_socket = arg;
- }
- break;
-
-#endif
- case ARGP_KEY_FINI:
- p = mu_normalize_maildir (mu_path_maildir);
- if (!p)
- {
- argp_error (state, "badly formed maildir: %s", mu_path_maildir);
- }
- mu_path_maildir = p;
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-static error_t
-mu_daemon_argp_parser (int key, char *arg, struct argp_state *state)
-{
- struct daemon_param *p = state->input;
- if (!p)
- return ARGP_ERR_UNKNOWN;
- switch (key)
- {
- case 'd':
- p->mode = MODE_DAEMON;
- if (arg)
- {
- size_t n = strtoul (arg, NULL, 10);
- if (n > 0)
- p->maxchildren = n;
- }
- break;
-
- case 'i':
- p->mode = MODE_INTERACTIVE;
- break;
-
- case 'p':
- p->mode = MODE_DAEMON;
- p->port = strtoul (arg, NULL, 10);
- break;
-
- case 't':
- p->timeout = strtoul (arg, NULL, 10);
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-#ifndef MU_CONFIG_FILE
-# define MU_CONFIG_FILE SYSCONFDIR "/mailutils.rc"
-#endif
-
-#ifndef MU_USER_CONFIG_FILE
-# define MU_USER_CONFIG_FILE "~/.mailutils"
-#endif
-
-static int
-member (const char *array[], const char *text, size_t len)
-{
- int i;
- for (i = 0; array[i]; i++)
- if (strncmp (array[i], text, len) == 0)
- return 1;
- return 0;
-}
-
-/*
-Appends applicable options found in file NAME to argv. If progname
-is NULL, all the options found are assumed to apply. Otherwise they
-apply only if the line starts with ":something", and something is
-found in the CAPA array, or the line starts with PROGNAME.
-*/
-void
-read_rc (const char *progname, const char *name, const char *capa[],
- int *argc, char ***argv)
-{
- FILE *fp;
- char *linebuf = NULL;
- char *buf = NULL;
- size_t n = 0;
- int x_argc = *argc;
- char **x_argv = *argv;
- char* rcfile = mu_tilde_expansion (name, "/", NULL);
-
- if (!rcfile)
- {
- fprintf (stderr, "%s: not enough memory\n", progname);
- exit (1);
- }
-
- fp = fopen (rcfile, "r");
- if (!fp)
- {
- free(rcfile);
- return;
- }
-
- while (getline (&buf, &n, fp) > 0)
- {
- char *kwp, *p;
- int len;
-
- for (kwp = buf; *kwp && isspace (*kwp); kwp++)
- ;
-
- if (*kwp == '#' || *kwp == 0)
- continue;
-
- len = strlen (kwp);
- if (kwp[len-1] == '\n')
- kwp[--len] = 0;
-
- if (kwp[len-1] == '\\' || linebuf)
- {
- int cont;
-
- if (kwp[len-1] == '\\')
- {
- kwp[--len] = 0;
- cont = 1;
- }
- else
- cont = 0;
-
- if (!linebuf)
- linebuf = calloc (len + 1, 1);
- else
- linebuf = realloc (linebuf, strlen (linebuf) + len + 1);
-
- if (!linebuf)
- {
- fprintf (stderr, "%s: not enough memory\n", progname);
- exit (1);
- }
-
- strcpy (linebuf + strlen (linebuf), kwp);
- if (cont)
- continue;
- kwp = linebuf;
- }
-
- len = 0;
- if(progname)
- {
- for (p = kwp; *p && !isspace (*p); p++)
- len++;
- }
- else
- p = kwp; /* Use the whole line. */
-
- if (progname == NULL
- || (kwp[0] == ':' && member (capa, kwp+1, len-1))
- || strncmp (progname, kwp, len) == 0
- )
- {
- int i, n_argc = 0;
- char **n_argv;
-
- if (argcv_get (p, "", NULL, &n_argc, &n_argv))
- {
- argcv_free (n_argc, n_argv);
- if (linebuf)
- free (linebuf);
- linebuf = NULL;
- continue;
- }
- x_argv = realloc (x_argv,
- (x_argc + n_argc) * sizeof (x_argv[0]));
- if (!x_argv)
- {
- fprintf (stderr, "%s: not enough memory\n", progname);
- exit (1);
- }
-
- for (i = 0; i < n_argc; i++)
- x_argv[x_argc++] = n_argv[i];
-
- free (n_argv);
- if (linebuf)
- free (linebuf);
- linebuf = NULL;
- }
- }
- fclose (fp);
- free(rcfile);
-
- *argc = x_argc;
- *argv = x_argv;
-}
-
-
-void
-mu_create_argcv (const char *capa[],
- int argc, char **argv, int *p_argc, char ***p_argv)
-{
- char *progname;
- int x_argc;
- char **x_argv;
- int i;
- int rcdir = 0;
-
- progname = strrchr (argv[0], '/');
- if (progname)
- progname++;
- else
- progname = argv[0];
-
- x_argv = malloc (sizeof (x_argv[0]));
- if (!x_argv)
- {
- fprintf (stderr, "%s: not enough memory\n", progname);
- exit (1);
- }
-
- /* Add command name */
- x_argc = 0;
- x_argv[x_argc] = argv[x_argc];
- x_argc++;
-
- /* Add global config file. */
- read_rc (progname, MU_CONFIG_FILE, capa, &x_argc, &x_argv);
-
- /* Look for per-user config files in ~/.mailutils/ or in ~/, but
- not both. This allows mailutils' utilities to have their config
- files segregated, if necessary. */
-
- {
- struct stat s;
- char* rcdirname = mu_tilde_expansion (MU_USER_CONFIG_FILE, "/", NULL);
-
- if (!rcdirname)
- {
- fprintf (stderr, "%s: not enough memory\n", progname);
- exit (1);
- }
- if(stat(rcdirname, &s) == 0 && S_ISDIR(s.st_mode))
- rcdir = 1;
-
- free(rcdirname);
- }
-
- /* Add per-user config file. */
- if(!rcdir)
- {
- read_rc (progname, MU_USER_CONFIG_FILE, capa, &x_argc, &x_argv);
- }
- else
- {
- char* userrc = NULL;
-
- mu_asprintf(&userrc, "%s/mailutils", MU_USER_CONFIG_FILE);
-
- if (!userrc)
- {
- fprintf (stderr, "%s: not enough memory\n", progname);
- exit (1);
- }
- read_rc (progname, userrc, capa, &x_argc, &x_argv);
-
- free(userrc);
- }
-
- /* Add per-user, per-program config file. */
- {
- char* progrc = NULL;
-
- if(rcdir)
- mu_asprintf(&progrc, "%s/%src", MU_USER_CONFIG_FILE, progname);
- else
- mu_asprintf(&progrc, "~/.mu.%src", progname);
-
- if (!progrc)
- {
- fprintf (stderr, "%s: not enough memory\n", progname);
- exit (1);
- }
-
- read_rc (NULL, progrc, capa, &x_argc, &x_argv);
- free (progrc);
- }
-
- /* Finally, add the command line options */
- x_argv = realloc (x_argv, (x_argc + argc) * sizeof (x_argv[0]));
- for (i = 1; i < argc; i++)
- x_argv[x_argc++] = argv[i];
-
- x_argv[x_argc] = NULL;
-
- *p_argc = x_argc;
- *p_argv = x_argv;
-}
-
-struct argp_capa {
- char *capability;
- struct argp_child *child;
-} mu_argp_capa[] = {
- {"common", &mu_common_argp_child},
- {"license", &mu_license_argp_child},
- {"mailbox", &mu_mailbox_argp_child},
- {"address", &mu_address_argp_child},
- {"logging", &mu_logging_argp_child},
- {"auth", &mu_auth_argp_child},
- {"daemon", &mu_daemon_argp_child},
- {NULL,}
-};
-
-static struct argp_child *
-find_argp_child (const char *capa)
-{
- int i;
- for (i = 0; mu_argp_capa[i].capability; i++)
- if (strcmp (mu_argp_capa[i].capability, capa) == 0)
- return mu_argp_capa[i].child;
- return NULL;
-}
-
-static struct argp *
-mu_build_argp (const struct argp *template, const char *capa[])
-{
- int n;
- int nchild;
- struct argp_child *ap;
- const struct argp_option *opt;
- struct argp *argp;
- int group = 0;
-
- /* Count the capabilities. */
- for (n = 0; capa && capa[n]; n++)
- ;
- if (template->children)
- for (; template->children[n].argp; n++)
- ;
-
- ap = calloc (n + 1, sizeof (*ap));
- if (!ap)
- {
- mu_error ("out of memory");
- abort ();
- }
-
- /* Copy the template's children. */
- nchild = 0;
- if (template->children)
- for (n = 0; template->children[n].argp; n++, nchild++)
- ap[nchild] = template->children[n];
-
- /* Find next group number */
- for (opt = template->options;
- opt && ((opt->name && opt->key) || opt->doc); opt++)
- if (opt->group > group)
- group = opt->group;
-
- group++;
-
- /* Append any capabilities to the children or options, as appropriate. */
- for (n = 0; capa && capa[n]; n++)
- {
- struct argp_child *child = find_argp_child (capa[n]);
- if (!child)
- {
- mu_error ("INTERNAL ERROR: requested unknown argp capability %s",
- capa[n]);
- abort ();
- }
- ap[nchild] = *child;
- ap[nchild].group = group++;
- nchild++;
- }
- ap[nchild].argp = NULL;
-
- /* Copy the template, and give it the expanded children. */
- argp = malloc (sizeof (*argp));
- if (!argp)
- {
- mu_error ("out of memory");
- abort ();
- }
-
- memcpy (argp, template, sizeof (*argp));
-
- argp->children = ap;
-
- return argp;
-}
-
-error_t
-mu_argp_parse(const struct argp *argp,
- int *pargc, char **pargv[],
- unsigned flags,
- const char *capa[],
- int *arg_index,
- void *input)
-{
- error_t ret;
- const struct argp argpnull = { 0 };
-
- if(!argp)
- argp = &argpnull;
-
- argp = mu_build_argp (argp, capa);
- mu_create_argcv (capa, *pargc, *pargv, pargc, pargv);
- ret = argp_parse (argp, *pargc, *pargv, flags, arg_index, input);
- free ((void*) argp->children);
- free ((void*) argp);
- return ret;
-}
-
diff --git a/lib/mu_argp.h b/lib/mu_argp.h
deleted file mode 100644
index 43ffaac87..000000000
--- a/lib/mu_argp.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* GNU mailutils - a suite of utilities for electronic mail
- Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
-
- 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 2, 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef MU_ARGP_H
-#define MU_ARGP_H 1
-
-#include <mailutils/mailbox.h>
-#include <argp.h>
-
-#define MODE_INTERACTIVE 0
-#define MODE_DAEMON 1
-
-struct daemon_param {
- int mode;
- size_t maxchildren;
- unsigned int port;
- unsigned int timeout;
-};
-
-#ifdef USE_LIBPAM
-extern char *pam_service;
-#endif
-extern int log_facility;
-extern int mu_argp_error_code;
-
-extern void mu_create_argcv __P((const char *capa[],
- int argc, char **argv,
- int *p_argc, char ***p_argv));
-extern error_t mu_argp_parse __P((const struct argp *argp,
- int *p_argc, char ***p_argv,
- unsigned flags,
- const char *capa[],
- int *arg_index,
- void *input));
-
-#endif
-

Return to:

Send suggestions and report system problems to the System administrator.