aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2007-12-13 18:20:45 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2007-12-13 18:20:45 +0000
commitcfb04309fb01de8797f85f2f945e375fd6091a99 (patch)
treec63a917781d2602db08b190b582115b56806eee4 /src/main.c
parent60fbc52f285b19ccbc9723cdae135cbb22acfe98 (diff)
downloadmailfromd-cfb04309fb01de8797f85f2f945e375fd6091a99.tar.gz
mailfromd-cfb04309fb01de8797f85f2f945e375fd6091a99.tar.bz2
Ported r1536 from branches/release_4_2_patches (= r1535 from tags/release_4_2):
git-svn-id: file:///svnroot/mailfromd/trunk@1538 7a8a7f39-df28-0410-adc6-e0d955640f24
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/main.c b/src/main.c
index f09f34ec..121c73b9 100644
--- a/src/main.c
+++ b/src/main.c
@@ -39,14 +39,12 @@
# include <mailutils/argp.h>
#else
# include <mailutils/libargp.h>
#endif
#include "mailfromd.h"
-#include "syslog_async.h"
-
/* Configurable options */
int mode = MAILFROMD_DAEMON; /* Default operation mode */
enum smtp_state test_state = smtp_state_envfrom; /* State for --test mode */
int need_config = 1;/* Set if the current mode requires reading the
@@ -78,14 +76,17 @@ char *portspec; /* Communication socket specification.
int force_remove; /* Remove local communication socket if it already
exists */
int foreground; /* Stay in foreground */
int single_process_option; /* Run in single process mode. */
unsigned long source_address = INADDR_ANY; /* Source address for TCP
connections */
+#ifdef USE_SYSLOG_ASYNC
int use_syslog_async = DEFAULT_SYSLOG_ASYNC;
- /* Use asynchronous syslog implementation */
+ /* Use asynchronous syslog implementation */
+#endif
+
char *syslog_tag; /* Tag to mark syslog entries with. */
char *mailfromd_state_dir; /* see init_names() */
char *pidfile; /* see init_names() */
char *user = DEFAULT_USER; /* Switch to this user privileges after
startup */
mu_list_t retain_groups; /* List of group IDs to retain when switching
@@ -125,26 +126,30 @@ time_t response_timeout = 30;
/* Logging & debugging */
int
syslog_printer (int prio, const char *fmt, va_list ap)
{
+#ifdef USE_SYSLOG_ASYNC
if (use_syslog_async) {
vsyslog_async (prio, fmt, ap);
- } else {
+ } else
+#endif
+ {
#if HAVE_VSYSLOG
vsyslog (prio, fmt, ap);
#else
char buf[128];
vsnprintf (buf, sizeof buf, fmt, ap);
syslog (prio, "%s", buf);
#endif
}
return 0;
}
+#ifdef USE_SYSLOG_ASYNC
void
mf_gacopyz_syslog_async_log_printer(int level, char *fmt, va_list ap)
{
switch (level) {
case SMI_LOG_DEBUG:
level = LOG_DEBUG;
@@ -162,12 +167,13 @@ mf_gacopyz_syslog_async_log_printer(int level, char *fmt, va_list ap)
case SMI_LOG_FATAL:
default:
level = LOG_EMERG;
}
vsyslog_async(level, fmt, ap);
}
+#endif
int
syslog_error_printer (const char *fmt, va_list ap)
{
return syslog_printer(LOG_ERR, fmt, ap);
}
@@ -1066,16 +1072,18 @@ static struct argp_option options[] = {
{ "gacopyz-log", OPTION_GACOPYZ_LOG, N_("LEVEL"), 0,
N_("Set Gacopyz log level"), GRP+1 },
{ "stderr", 's', NULL, 0,
N_("Log to stderr"), GRP+1 },
{ "syslog", OPTION_SYSLOG, NULL, 0,
N_("Log to syslog (default)"), GRP+1 },
+#ifdef USE_SYSLOG_ASYNC
{ "syslog-async", OPTION_SYSLOG_ASYNC, NULL, 0,
N_("Use asynchronous syslog"), GRP+1 },
{ "no-syslog-async", OPTION_NO_SYSLOG_ASYNC, NULL, 0,
N_("Use system syslog"), GRP+1 },
+#endif
{ "log-tag", OPTION_LOG_TAG, N_("STRING"), 0,
N_("Set the identifier used in syslog messages to STRING"), GRP+1 },
{ "source-info", OPTION_SOURCE_INFO, NULL, 0,
N_("Debug messages include source information"), GRP+1 },
{ "stack-trace", OPTION_STACK_TRACE, NULL, 0,
N_("Enable stack traces on runtime errors"), GRP+1 },
@@ -1389,20 +1397,21 @@ parse_opt (int key, char *arg, struct argp_state *state)
break;
case OPTION_SYSLOG:
log_to_stderr = 0;
break;
+#ifdef USE_SYSLOG_ASYNC
case OPTION_SYSLOG_ASYNC:
use_syslog_async = 1;
break;
case OPTION_NO_SYSLOG_ASYNC:
use_syslog_async = 0;
break;
-
+#endif
case OPTION_TIMEOUT:
set_option("timeout", arg, 1);
break;
case OPTION_TRACE:
do_trace = 1;
@@ -1973,17 +1982,19 @@ mailfromd_show_defaults()
printf("script file: %s\n", script_file);
printf("preprocessor: %s\n", ext_pp ? ext_pp : "none");
printf("user: %s\n", user);
printf("statedir: %s\n", mailfromd_state_dir);
printf("socket: %s\n", portspec);
printf("pidfile: %s\n", pidfile);
+#ifdef USE_SYSLOG_ASYNC
#if DEFAULT_SYSLOG_ASYNC == 1
printf("default syslog: non-blocking\n");
#else
printf("default syslog: blocking\n");
#endif
+#endif
printf("database format: ");
#if defined WITH_GDBM
printf("GDBM");
#elif defined WITH_BDB
printf("Berkeley DB %d.x", WITH_BDB);
#endif
@@ -1994,16 +2005,19 @@ mailfromd_show_defaults()
void
log_setup(int want_stderr)
{
/* Set up logging */
if (!want_stderr) {
+#ifdef USE_SYSLOG_ASYNC
if (use_syslog_async) {
openlog_async(syslog_tag, LOG_PID, log_facility);
gacopyz_set_logger(mf_gacopyz_syslog_async_log_printer);
- } else {
+ } else
+#endif
+ {
openlog(syslog_tag, LOG_PID, log_facility);
gacopyz_set_logger(gacopyz_syslog_log_printer);
}
mu_error_set_print(syslog_error_printer);
} else {
gacopyz_set_logger(gacopyz_stderr_log_printer);

Return to:

Send suggestions and report system problems to the System administrator.