diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-12-03 20:43:04 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-12-03 20:43:04 +0000 |
commit | c57171ac85329c8baad86a7e4221ebeef2df0804 (patch) | |
tree | 28c9f41649987cd286c76a55bed27aa77f783b97 | |
parent | 0112e3c07a2b8fcfb642ace4b880575f86fcf933 (diff) | |
download | mailutils-c57171ac85329c8baad86a7e4221ebeef2df0804.tar.gz mailutils-c57171ac85329c8baad86a7e4221ebeef2df0804.tar.bz2 |
* auth/virtual.c (site_virtual_pwddir): Replace with global
struct mu_gocs_virtual mu_virtual_module_config
* include/mailutils/cfg.h (MU_PARSE_CONFIG_GLOBAL)
(MU_PARSE_CONFIG_VERBOSE, MU_PARSE_CONFIG_DUMP): New defines.
(mu_cfg_tree_create,mu_cfg_tree_set_debug,mu_cfg_tree_set_alloc)
(mu_cfg_tree_alloc,mu_cfg_tree_free)
(mu_cfg_tree_create_node,mu_cfg_tree_add_node): New functions.
* include/mailutils/gocs.h (struct mu_gocs_virtual): New data
type.
* include/mailutils/libargp.h (struct mu_argp_node_list): New data
type.
(mu_argp_node_list_init, mu_argp_node_list_add)
(mu_argp_node_list_new, mu_argp_node_list_finish): New functions.
* libargp/cmdline.h: New header.
* libargp/Makefile.am (libmuargp_a_SOURCES): Add cmdline.h.
* dotlock/dotlock.c, imap4d/imap4d.c, libargp/auth.c,
libargp/cmdline.c, libargp/common.c, libargp/compat.c,
libargp/gsasl.c, libargp/mu_argp.c, libargp/muinit.c,
libargp/pam.c, libargp/radius.c, libargp/sieve.c, libargp/sql.c,
libargp/tls.c, libargp/virtdomain.c, libcfg/common.c,
libcfg/init.c, libcfg/virtdomain.c, maidag/maidag.c,
mail.local/main.c, mail.remote/mail.remote.c, mimeview/mimeview.c,
movemail/movemail.c, pop3d/pop3d.c, readmsg/readmsg.c,
sieve/sieve.c: Change option parsing, usig mu_cfg_tree_ functions.
* mailbox/argcv.c: Fix a typo in comment.
* mailbox/cfg_lexer.c (mu_parse_config_tree): New function.
(_mu_parse_config): Rewrite using mu_parse_config_tree.
* mailbox/cfg_parser.y (mu_cfg_format_error,_mu_cfg_vperror)
(debug_print_node): Use default diag debug_t object, if the passed
one is NULL. Reset locus after formatting.
(mu_cfg_postorder): Return immediately if node == NULL.
(mu_cfg_tree_create,mu_cfg_tree_set_debug,mu_cfg_tree_set_alloc)
(mu_cfg_tree_alloc,mu_cfg_tree_free,mu_cfg_tree_create_node)
(mu_cfg_tree_add_node): New functions.
* mailbox/gocs.c (mu_gocs_store): Make sure no capa/data tuple
gets registered twice.
36 files changed, 709 insertions, 392 deletions
@@ -1,5 +1,45 @@ 2007-12-03 Sergey Poznyakoff <gray@gnu.org.ua> + * auth/virtual.c (site_virtual_pwddir): Replace with global + struct mu_gocs_virtual mu_virtual_module_config + + * include/mailutils/cfg.h (MU_PARSE_CONFIG_GLOBAL) + (MU_PARSE_CONFIG_VERBOSE, MU_PARSE_CONFIG_DUMP): New defines. + (mu_cfg_tree_create,mu_cfg_tree_set_debug,mu_cfg_tree_set_alloc) + (mu_cfg_tree_alloc,mu_cfg_tree_free) + (mu_cfg_tree_create_node,mu_cfg_tree_add_node): New functions. + * include/mailutils/gocs.h (struct mu_gocs_virtual): New data + type. + * include/mailutils/libargp.h (struct mu_argp_node_list): New data + type. + (mu_argp_node_list_init, mu_argp_node_list_add) + (mu_argp_node_list_new, mu_argp_node_list_finish): New functions. + * libargp/cmdline.h: New header. + * libargp/Makefile.am (libmuargp_a_SOURCES): Add cmdline.h. + + * dotlock/dotlock.c, imap4d/imap4d.c, libargp/auth.c, + libargp/cmdline.c, libargp/common.c, libargp/compat.c, + libargp/gsasl.c, libargp/mu_argp.c, libargp/muinit.c, + libargp/pam.c, libargp/radius.c, libargp/sieve.c, libargp/sql.c, + libargp/tls.c, libargp/virtdomain.c, libcfg/common.c, + libcfg/init.c, libcfg/virtdomain.c, maidag/maidag.c, + mail.local/main.c, mail.remote/mail.remote.c, mimeview/mimeview.c, + movemail/movemail.c, pop3d/pop3d.c, readmsg/readmsg.c, + sieve/sieve.c: Change option parsing, usig mu_cfg_tree_ functions. + + * mailbox/argcv.c: Fix a typo in comment. + * mailbox/cfg_lexer.c (mu_parse_config_tree): New function. + (_mu_parse_config): Rewrite using mu_parse_config_tree. + * mailbox/cfg_parser.y (mu_cfg_format_error,_mu_cfg_vperror) + (debug_print_node): Use default diag debug_t object, if the passed + one is NULL. Reset locus after formatting. + (mu_cfg_postorder): Return immediately if node == NULL. + (mu_cfg_tree_create,mu_cfg_tree_set_debug,mu_cfg_tree_set_alloc) + (mu_cfg_tree_alloc,mu_cfg_tree_free,mu_cfg_tree_create_node) + (mu_cfg_tree_add_node): New functions. + * mailbox/gocs.c (mu_gocs_store): Make sure no capa/data tuple + gets registered twice. + * NEWS: Update. * gnulib.modules: Add des. Sort lines. * imap4d/Makefile.am (imap4d_SOURCES): Add preauth.c @@ -7,13 +47,13 @@ * imap4d/authenticate.c (imap4d_authenticate): Use imap4d_session_setup. * imap4d/imap4d.c (imap4d_session_setup) - (imap4d_session_setup.0): New functions. + (imap4d_session_setup0): New functions. (imap4d_mainloop): Implement PREAUTH mode. * imap4d/imap4d.h (RESP_PREAUTH): New define. (enum imap4d_preauth): New data type. (preauth_mode,preauth_program,preauth_only,ident_port): New globals. - (imap4d_session_setup,imap4d_session_setup.0): New functions. + (imap4d_session_setup,imap4d_session_setup0): New functions. * imap4d/login.c (imap4d_login): Use imap4d_session_setup0. * imap4d/util.c (sc2string): Handle RESP_PREAUTH diff --git a/auth/virtual.c b/auth/virtual.c index 53719862e..9a6756b2c 100644 --- a/auth/virtual.c +++ b/auth/virtual.c @@ -55,17 +55,15 @@ #ifdef ENABLE_VIRTUAL_DOMAINS -/* FIXME: Make global, prefix with mu_ */ -static char *site_virtual_pwddir = SITE_VIRTUAL_PWDDIR; +struct mu_gocs_virtual mu_virtual_module_config = { SITE_VIRTUAL_PWDDIR }; int mu_virtual_module_init (void *data) { if (data) { - site_virtual_pwddir = strdup (data); - if (!site_virtual_pwddir) - return 1; + struct mu_gocs_virtual *p = data; + mu_virtual_module_config = *p; } return 0; } @@ -91,12 +89,12 @@ getpwnam_virtual (const char *u) if (delim == 0) return NULL; - filename = malloc (strlen (site_virtual_pwddir) + + filename = malloc (strlen (mu_virtual_module_config.pwddir) + strlen (&u[delim + 1]) + 2 /* slash and null byte */); if (filename == NULL) return NULL; - sprintf (filename, "%s/%s", site_virtual_pwddir, &u[delim + 1]); + sprintf (filename, "%s/%s", mu_virtual_module_config.pwddir, &u[delim + 1]); pfile = fopen (filename, "r"); free (filename); diff --git a/dotlock/dotlock.c b/dotlock/dotlock.c index b6abf2efb..c38282f57 100644 --- a/dotlock/dotlock.c +++ b/dotlock/dotlock.c @@ -77,10 +77,12 @@ static int debug; static error_t parse_opt (int key, char *arg, struct argp_state *state) { + static struct mu_argp_node_list lst; + switch (key) { case 'd': - debug = 1; + mu_argp_node_list_new (&lst, "debug", "yes"); break; case 'u': @@ -89,21 +91,11 @@ parse_opt (int key, char *arg, struct argp_state *state) case 'r': if (arg) - { - retries = atoi (arg); - if (retries <= 0) - argp_error (state, _("RETRIES must be greater than 0")); - } - flags |= MU_LOCKER_RETRY; + mu_argp_node_list_new (&lst, "retry", arg); break; case 'f': - if (arg) - { - force = atoi (arg); - if (force <= 0) - argp_error (state, _("MINUTES must be greater than 0")); - } + mu_argp_node_list_new (&lst, "force", arg ? arg : "0"); break; case ARGP_KEY_ARG: @@ -115,6 +107,14 @@ parse_opt (int key, char *arg, struct argp_state *state) case ARGP_KEY_NO_ARGS: argp_error (state, _("FILE must be specified")); + case ARGP_KEY_INIT: + mu_argp_node_list_init (&lst); + break; + + case ARGP_KEY_FINI: + mu_argp_node_list_finish (&lst, NULL, NULL); + break; + default: return ARGP_ERR_UNKNOWN; } @@ -166,6 +166,9 @@ main (int argc, char *argv[]) force *= 60; flags |= MU_LOCKER_TIME; } + + if (retries != 0) + flags |= MU_LOCKER_RETRY; if ((err = mu_locker_create (&locker, file, flags))) { diff --git a/imap4d/imap4d.c b/imap4d/imap4d.c index 186e2fc8d..05918b39f 100644 --- a/imap4d/imap4d.c +++ b/imap4d/imap4d.c @@ -110,40 +110,41 @@ static int imap4d_mainloop (int, FILE *, FILE *); static error_t imap4d_parse_opt (int key, char *arg, struct argp_state *state) { + static struct mu_argp_node_list lst; + switch (key) { - case ARGP_KEY_INIT: - state->child_inputs[0] = state->input; - break; - case 'O': - set_namespace (NS_OTHER, arg); + mu_argp_node_list_new (&lst, "other-namespace", arg); break; case 'S': - set_namespace (NS_SHARED, arg); + mu_argp_node_list_new (&lst, "shared-namespace", arg); break; case ARG_LOGIN_DISABLED: - login_disabled = 1; + mu_argp_node_list_new (&lst, "login-disabled", "yes"); break; case ARG_CREATE_HOME_DIR: - create_home_dir = 1; + mu_argp_node_list_new (&lst, "create-home-dir", "yes"); if (arg) - { - char *p; - home_dir_mode = strtoul (arg, &p, 8); - if (p || (home_dir_mode & 0777)) - argp_error (state, _("Invalid mode specification: %s"), arg); - } + mu_argp_node_list_new (&lst, "home-dir-mode", arg); break; #ifdef WITH_TLS case ARG_TLS_REQUIRED: - tls_required = 1; + mu_argp_node_list_new (&lst, "tls-required", "yes"); break; #endif + + case ARGP_KEY_INIT: + mu_argp_node_list_init (&lst); + break; + + case ARGP_KEY_FINI: + mu_argp_node_list_finish (&lst, NULL, NULL); + break; default: return ARGP_ERR_UNKNOWN; @@ -170,7 +171,7 @@ cb_mode (mu_debug_t debug, void *data, char *arg) { char *p; home_dir_mode = strtoul (arg, &p, 8); - if (p || (home_dir_mode & 0777)) + if (p[0] || (home_dir_mode & ~0777)) mu_cfg_format_error (debug, MU_DEBUG_ERROR, _("Invalid mode specification: %s"), arg); return 0; diff --git a/include/mailutils/cfg.h b/include/mailutils/cfg.h index 5436d4962..aa986e4be 100644 --- a/include/mailutils/cfg.h +++ b/include/mailutils/cfg.h @@ -198,14 +198,30 @@ int mu_config_register_plain_section (const char *parent_path, const char *ident, struct mu_cfg_param *params); +#define MU_PARSE_CONFIG_GLOBAL 0x1 +#define MU_PARSE_CONFIG_VERBOSE 0x2 +#define MU_PARSE_CONFIG_DUMP 0x4 + int mu_parse_config (const char *file, const char *progname, - struct mu_cfg_param *progparam, int global); + struct mu_cfg_param *progparam, int flags); int mu_cfg_parse_boolean (const char *str, int *res); extern int mu_cfg_parser_verbose; -void mu_cfg_format_tree (mu_stream_t stream, mu_cfg_tree_t *tree); +void mu_cfg_format_tree (mu_stream_t stream, struct mu_cfg_tree *tree); + +int mu_cfg_tree_create (struct mu_cfg_tree **ptree); +void mu_cfg_tree_set_debug (struct mu_cfg_tree *tree, mu_debug_t debug); +void mu_cfg_tree_set_alloc (struct mu_cfg_tree *tree, + mu_cfg_alloc_t alloc, mu_cfg_free_t free); +void *mu_cfg_tree_alloc (struct mu_cfg_tree *tree, size_t size); +void mu_cfg_tree_free (struct mu_cfg_tree *tree, void *mem); +mu_cfg_node_t *mu_cfg_tree_create_node + (struct mu_cfg_tree *tree, enum mu_cfg_node_type type, + mu_cfg_locus_t *loc, char *tag, char *label, + mu_cfg_node_t *node); +void mu_cfg_tree_add_node (mu_cfg_tree_t *tree, mu_cfg_node_t *node); #ifdef __cplusplus } diff --git a/include/mailutils/gocs.h b/include/mailutils/gocs.h index da7ebe929..e5ca15781 100644 --- a/include/mailutils/gocs.h +++ b/include/mailutils/gocs.h @@ -80,6 +80,11 @@ struct mu_gocs_pam char *service; }; +struct mu_gocs_virtual +{ + char *pwddir; +}; + /* Auxiliary variables for use by libargp/libcfg */ extern int mu_load_user_rcfile; extern int mu_load_site_rcfile; diff --git a/include/mailutils/libargp.h b/include/mailutils/libargp.h index 56f761748..642b4d997 100644 --- a/include/mailutils/libargp.h +++ b/include/mailutils/libargp.h @@ -79,6 +79,18 @@ error_t mu_argp_parse (const struct argp *myargp, const char *capa[], int *arg_index, void *input) __attribute__ ((deprecated)); + +struct mu_argp_node_list +{ + int count; + mu_cfg_node_t *head, *tail; +}; + +void mu_argp_node_list_init (struct mu_argp_node_list *); +void mu_argp_node_list_add (struct mu_argp_node_list *, mu_cfg_node_t *); +void mu_argp_node_list_new (struct mu_argp_node_list *, + char *, char *); +void mu_argp_node_list_finish (struct mu_argp_node_list *, char *, char *); #ifdef __cplusplus } diff --git a/libargp/Makefile.am b/libargp/Makefile.am index fad3d319e..141c10c0d 100644 --- a/libargp/Makefile.am +++ b/libargp/Makefile.am @@ -27,6 +27,7 @@ lib_LIBRARIES = libmuargp.a libmuargp_a_SOURCES =\ auth.c\ cmdline.c\ + cmdline.h\ common.c\ compat.c\ gsasl.c\ diff --git a/libargp/auth.c b/libargp/auth.c index 783248667..32be741ab 100644 --- a/libargp/auth.c +++ b/libargp/auth.c @@ -19,7 +19,7 @@ #ifdef HAVE_CONFIG_H # include <config.h> #endif -#include "mailutils/libargp.h" +#include "cmdline.h" #include "mailutils/mu_auth.h" @@ -80,27 +80,32 @@ auth_set_debug () static error_t mu_auth_argp_parser (int key, char *arg, struct argp_state *state) { + static struct mu_argp_node_list lst; + switch (key) { + case ARGP_KEY_INIT: + mu_argp_node_list_init (&lst); + break; + case ARGP_KEY_FINI: - mu_auth_finish_setup (); + mu_argp_node_list_finish (&lst, "auth", NULL); break; - /* authentication */ case OPT_AUTHORIZATION: - mu_authorization_add_module_list (arg); + mu_argp_node_list_new (&lst, "authorization", arg); break; case OPT_AUTHENTICATION: - mu_authentication_add_module_list (arg); + mu_argp_node_list_new (&lst, "authentication", arg); break; case OPT_CLEAR_AUTHENTICATION: - mu_authentication_clear_list (); + mu_argp_node_list_new (&lst, "authentication", "clear"); break; case OPT_CLEAR_AUTHORIZATION: - mu_authorization_clear_list (); + mu_argp_node_list_new (&lst, "authorization", "clear"); break; case OPT_DEBUG_AUTH: diff --git a/libargp/cmdline.c b/libargp/cmdline.c index f90b94055..397746dc0 100644 --- a/libargp/cmdline.c +++ b/libargp/cmdline.c @@ -19,7 +19,7 @@ #ifdef HAVE_CONFIG_H # include <config.h> #endif -#include "mailutils/libargp.h" +#include "cmdline.h" static struct mu_cmdline_capa *all_cmdline_capa[] = { &mu_common_cmdline, @@ -63,5 +63,53 @@ mu_libargp_init () } } - - +void +mu_argp_node_list_init (struct mu_argp_node_list *lst) +{ + lst->count = 0; + lst->head = lst->tail = NULL; +} + +void +mu_argp_node_list_add (struct mu_argp_node_list *lst, mu_cfg_node_t *node) +{ + lst->count++; + if (lst->tail) + lst->tail->next = node; + else + lst->head = node; + lst->tail = node; +} + +void +mu_argp_node_list_new (struct mu_argp_node_list *lst, + char *tag, char *label) +{ + mu_cfg_node_t *node; + mu_cfg_locus_t loc = { "command line", 0 }; + + loc.line = lst->count; + node = mu_cfg_tree_create_node (mu_argp_tree, mu_cfg_node_param, + &loc, tag, label, NULL); + mu_argp_node_list_add (lst, node); +} + +void +mu_argp_node_list_finish (struct mu_argp_node_list *lst, char *tag, + char *label) +{ + mu_cfg_node_t *node; + + if (!lst->head) + return; + if (tag) + node = mu_cfg_tree_create_node (mu_argp_tree, + mu_cfg_node_tag, + NULL, + tag, label, + lst->head); + else + node = lst->head; + mu_cfg_tree_add_node (mu_argp_tree, node); + mu_argp_node_list_init (lst); +} diff --git a/libargp/cmdline.h b/libargp/cmdline.h new file mode 100644 index 000000000..0020d8019 --- /dev/null +++ b/libargp/cmdline.h @@ -0,0 +1,23 @@ +/* GNU Mailutils -- a suite of utilities for electronic mail + Copyright (C) 2007 Free Software Foundation, Inc. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301 USA */ + +#include "mailutils/libcfg.h" +#include "mailutils/libargp.h" + +extern struct mu_cfg_tree *mu_argp_tree; + diff --git a/libargp/common.c b/libargp/common.c index 3c9c1b07e..608667aef 100644 --- a/libargp/common.c +++ b/libargp/common.c @@ -19,45 +19,11 @@ #ifdef HAVE_CONFIG_H # include <config.h> #endif -#include "mailutils/libargp.h" +#include "cmdline.h" #include <string.h> #include <mailutils/syslog.h> #include <mailutils/daemon.h> -static struct mu_gocs_daemon daemon_settings; -static struct mu_gocs_locking locking_settings; -static struct mu_gocs_logging logging_settings; -static struct mu_gocs_mailbox mailbox_settings; -static struct mu_gocs_source_email source_email_settings; -static struct mu_gocs_mailer mailer_settings; -static struct mu_gocs_debug debug_settings; - - -void -assign_string (char **pstr, char *val) -{ - if (!val) - { - if (*pstr) - { - free (*pstr); - *pstr = NULL; - } - } - else - { - size_t size = strlen (val); - char *p = realloc (*pstr, size + 1); - if (!p) - { - mu_error ("%s", mu_strerror (ENOMEM)); - exit (1); - } - strcpy (p, val); - *pstr = p; - } -} - /* ************************************************************************* */ /* Common */ @@ -158,17 +124,21 @@ static struct argp_option mu_logging_argp_option[] = { static error_t mu_logging_argp_parser (int key, char *arg, struct argp_state *state) { + static struct mu_argp_node_list lst; + switch (key) { /* log */ case OPT_LOG_FACILITY: - if (mu_string_to_syslog_facility (arg, &logging_settings.facility)) - mu_error (_("Unknown syslog facility `%s'"), arg); - /* FIXME: error reporting */ + mu_argp_node_list_new (&lst, "facility", arg); break; - + + case ARGP_KEY_INIT: + mu_argp_node_list_init (&lst); + break; + case ARGP_KEY_FINI: - mu_gocs_store ("logging", &logging_settings); + mu_argp_node_list_finish (&lst, "logging", NULL); break; default: @@ -253,19 +223,25 @@ static struct argp_option mu_mailbox_argp_option[] = { static error_t mu_mailbox_argp_parser (int key, char *arg, struct argp_state *state) { + static struct mu_argp_node_list lst; + switch (key) { /* mailbox */ case 'm': - assign_string (&mailbox_settings.mail_spool, arg); + mu_argp_node_list_new (&lst, "mail-spool", arg); break; case OPT_MAILBOX_TYPE: - assign_string (&mailbox_settings.mailbox_type, arg); + mu_argp_node_list_new (&lst, "mailbox-type", arg); break; + case ARGP_KEY_INIT: + mu_argp_node_list_init (&lst); + break; + case ARGP_KEY_FINI: - mu_gocs_store ("mailbox", &mailbox_settings); + mu_argp_node_list_finish (&lst, "mailbox", NULL); break; default: @@ -314,30 +290,36 @@ static struct argp_option mu_locking_argp_option[] = { static error_t mu_locking_argp_parser (int key, char *arg, struct argp_state *state) { + static struct mu_argp_node_list lst; + switch (key) { case OPT_LOCK_FLAGS: - assign_string (&locking_settings.lock_flags, arg); + mu_argp_node_list_new (&lst, "flags", arg); break; case OPT_LOCK_RETRY_COUNT: - locking_settings.lock_retry_count = strtoul (arg, NULL, 0); + mu_argp_node_list_new (&lst, "retry-count", arg); break; case OPT_LOCK_RETRY_TIMEOUT: - locking_settings.lock_retry_timeout = strtoul (arg, NULL, 0); + mu_argp_node_list_new (&lst, "retry-timeout", arg); break; case OPT_LOCK_EXPIRE_TIMEOUT: - locking_settings.lock_expire_timeout = strtoul (arg, NULL, 0); + mu_argp_node_list_new (&lst, "expire-timeout", arg); break; case OPT_LOCK_EXTERNAL_PROGRAM: - assign_string (&locking_settings.external_locker, arg); + mu_argp_node_list_new (&lst, "external-locker", arg); + break; + + case ARGP_KEY_INIT: + mu_argp_node_list_init (&lst); break; case ARGP_KEY_FINI: - mu_gocs_store ("locking", &locking_settings); + mu_argp_node_list_finish (&lst, "locking", NULL); break; default: @@ -379,18 +361,24 @@ static struct argp_option mu_address_argp_option[] = { static error_t mu_address_argp_parser (int key, char *arg, struct argp_state *state) { + static struct mu_argp_node_list lst; + switch (key) { case 'E': - assign_string (&source_email_settings.address, arg); + mu_argp_node_list_new (&lst, "email-addr", arg); break; case 'D': - assign_string (&source_email_settings.domain, arg); + mu_argp_node_list_new (&lst, "email-domain", arg); break; + case ARGP_KEY_INIT: + mu_argp_node_list_init (&lst); + break; + case ARGP_KEY_FINI: - mu_gocs_store ("address", &source_email_settings); + mu_argp_node_list_finish (&lst, "address", NULL); break; default: @@ -430,15 +418,21 @@ static struct argp_option mu_mailer_argp_option[] = { static error_t mu_mailer_argp_parser (int key, char *arg, struct argp_state *state) { + static struct mu_argp_node_list lst; + switch (key) { /* mailer */ case 'M': - assign_string (&mailer_settings.mailer, arg); + mu_argp_node_list_new (&lst, "url", arg); + break; + + case ARGP_KEY_INIT: + mu_argp_node_list_init (&lst); break; case ARGP_KEY_FINI: - mu_gocs_store ("mailer", &mailer_settings); + mu_argp_node_list_finish (&lst, "mailer", NULL); break; default: @@ -488,51 +482,40 @@ static struct argp_option mu_daemon_argp_option[] = { static error_t mu_daemon_argp_parser (int key, char *arg, struct argp_state *state) { - static int options_given = 0; + static struct mu_argp_node_list lst; switch (key) { case 'd': - options_given = 1; - daemon_settings.mode = MODE_DAEMON; - if (arg) - daemon_settings.maxchildren = strtoul (arg, NULL, 10); + mu_argp_node_list_new (&lst, "mode", arg); break; case 'i': - options_given = 1; - daemon_settings.mode = MODE_INTERACTIVE; + mu_argp_node_list_new (&lst, "mode", "inetd"); break; case 'p': - options_given = 1; - daemon_settings.mode = MODE_DAEMON; - daemon_settings.port = strtoul (arg, NULL, 10); /*FIXME: overflow */ + mu_argp_node_list_new (&lst, "port", arg); break; case 'P': - options_given = 1; - assign_string (&daemon_settings.pidfile, arg); + mu_argp_node_list_new (&lst, "pidfile", arg); break; case 't': - options_given = 1; - daemon_settings.timeout = strtoul (arg, NULL, 10); + mu_argp_node_list_new (&lst, "timeout", arg); break; case 'x': - options_given = 1; - daemon_settings.transcript = 1; + mu_argp_node_list_new (&lst, "transcript", "yes"); break; case ARGP_KEY_INIT: - options_given = 0; - daemon_settings = mu_gocs_daemon; + mu_argp_node_list_init (&lst); break; case ARGP_KEY_FINI: - if (options_given) - mu_gocs_store ("daemon", &daemon_settings); + mu_argp_node_list_finish (&lst, "daemon", NULL); break; default: @@ -570,23 +553,24 @@ static struct argp_option mu_debug_argp_options[] = static error_t mu_debug_argp_parser (int key, char *arg, struct argp_state *state) { + static struct mu_argp_node_list lst; + switch (key) { case OPT_DEBUG_LEVEL: - debug_settings.string = arg; - debug_settings.errpfx = strdup ("command line"); + mu_argp_node_list_new (&lst, "level", arg); break; case OPT_LINE_INFO: - debug_settings.line_info = 1; + mu_argp_node_list_new (&lst, "line-info", "yes"); break; case ARGP_KEY_INIT: - debug_settings.line_info = -1; + mu_argp_node_list_init (&lst); break; case ARGP_KEY_FINI: - mu_gocs_store ("debug", &debug_settings); + mu_argp_node_list_finish (&lst, "debug", NULL); break; default: diff --git a/libargp/gsasl.c b/libargp/gsasl.c index f3e65ab45..598b6ce1b 100644 --- a/libargp/gsasl.c +++ b/libargp/gsasl.c @@ -19,7 +19,7 @@ #ifdef HAVE_CONFIG_H # include <config.h> #endif -#include "mai |