From 90b522de5fcc6a95c3352a76d774833a2f1f22c7 Mon Sep 17 00:00:00 2001 From: Frank Lahm Date: Sun, 26 Sep 2010 18:10:38 +0200 Subject: [PATCH 1/1] second sigint restores default logging instead of killing afpd --- etc/afpd/afp_dsi.c | 26 +++++++++++++------------- etc/afpd/afp_options.c | 3 +++ etc/afpd/globals.h | 1 + etc/afpd/main.c | 3 +++ 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/etc/afpd/afp_dsi.c b/etc/afpd/afp_dsi.c index 54e5c4b6..90facbee 100644 --- a/etc/afpd/afp_dsi.c +++ b/etc/afpd/afp_dsi.c @@ -1,6 +1,4 @@ /* - * $Id: afp_dsi.c,v 1.53 2010/03/30 12:55:26 franklahm Exp $ - * * Copyright (c) 1999 Adrian Sun (asun@zoology.washington.edu) * Copyright (c) 1990,1993 Regents of The University of Michigan. * All Rights Reserved. See COPYRIGHT. @@ -392,21 +390,23 @@ void afp_over_dsi(AFPObj *obj) dircache_dump(); } + /* The first SIGINT enables debugging, the next restores the config */ if (debug_request) { - char logstr[50]; + static int debugging = 0; debug_request = 0; - /* The first SIGINT enables debugging, the second one kills us */ - action.sa_handler = afp_dsi_die; - sigfillset( &action.sa_mask ); - action.sa_flags = SA_RESTART; - if ( sigaction( SIGINT, &action, NULL ) < 0 ) { - LOG(log_error, logtype_afpd, "afp_over_dsi: sigaction: %s", strerror(errno) ); - afp_dsi_die(EXITERR_SYS); + if (debugging) { + if (obj->options.logconfig) + setuplog(obj->options.logconfig); + else + setuplog("default log_note"); + debugging = 0; + } else { + char logstr[50]; + debugging = 1; + sprintf(logstr, "default log_maxdebug /tmp/afpd.%u.XXXXXX", getpid()); + setuplog(logstr); } - - sprintf(logstr, "default log_maxdebug /tmp/afpd.%u.XXXXXX", getpid()); - setuplog(logstr); } if (cmd == DSIFUNC_TICKLE) { diff --git a/etc/afpd/afp_options.c b/etc/afpd/afp_options.c index c1ce4bc9..3b16a067 100644 --- a/etc/afpd/afp_options.c +++ b/etc/afpd/afp_options.c @@ -153,6 +153,8 @@ void afp_options_free(struct afp_options *opt, free(opt->ntdomain); if (opt->ntseparator && (opt->ntseparator != save->ntseparator)) free(opt->ntseparator); + if (opt->logconfig && (opt->logconfig != save->logconfig)) + free(opt->logconfig); } /* initialize options */ @@ -339,6 +341,7 @@ int afp_options_parseline(char *buf, struct afp_options *options) char *optstr; if ((optstr = getoption(c, "-setuplog"))) { setuplog(optstr); + options->logconfig = optstr; /* at least store the last (possibly only) one */ c += sizeof("-setuplog"); } } diff --git a/etc/afpd/globals.h b/etc/afpd/globals.h index 5fbb048b..6ce22a8a 100644 --- a/etc/afpd/globals.h +++ b/etc/afpd/globals.h @@ -86,6 +86,7 @@ struct afp_options { /* default value for winbind authentication */ char *ntdomain, *ntseparator; + char *logconfig; }; #define AFPOBJ_TMPSIZ (MAXPATHLEN) diff --git a/etc/afpd/main.c b/etc/afpd/main.c index 32d44d95..30a32346 100644 --- a/etc/afpd/main.c +++ b/etc/afpd/main.c @@ -150,6 +150,9 @@ int main(int ac, char **av) /* Log SIGBUS/SIGSEGV SBT */ fault_setup(NULL); + /* Default log setup: log to syslog */ + setuplog("default log_note"); + afp_options_init(&default_options); if (!afp_options_parse(ac, av, &default_options)) exit(EXITERR_CONF); -- 2.39.2