[dovecot-cvs] dovecot/src/lib failures.c,1.15,1.16 failures.h,1.4,1.5
cras at procontrol.fi
cras at procontrol.fi
Sat Dec 28 10:06:37 EET 2002
Update of /home/cvs/dovecot/src/lib
In directory danu:/tmp/cvs-serv18946/lib
Modified Files:
failures.c failures.h
Log Message:
In case of internal errors in logging, exit() with FATAL_LOGERROR.
Index: failures.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/failures.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- failures.c 27 Dec 2002 16:02:25 -0000 1.15
+++ failures.c 28 Dec 2002 08:06:34 -0000 1.16
@@ -79,8 +79,8 @@
}
}
-static void default_handler(const char *prefix, FILE *f,
- const char *format, va_list args)
+static int default_handler(const char *prefix, FILE *f,
+ const char *format, va_list args)
{
static int recursed = 0;
va_list args2;
@@ -89,7 +89,7 @@
if (recursed == 2) {
/* we're being called from some signal handler, or
printf_string_upper_bound() killed us again */
- return;
+ return -1;
}
recursed++;
@@ -128,17 +128,21 @@
errno = old_errno;
recursed--;
+
+ return 0;
}
static void default_panic_handler(const char *format, va_list args)
{
- default_handler("Panic: ", log_fd, format, args);
+ (void)default_handler("Panic: ", log_fd, format, args);
abort();
}
static void default_fatal_handler(int status, const char *format, va_list args)
{
- default_handler("Fatal: ", log_fd, format, args);
+ if (default_handler("Fatal: ", log_fd, format, args) < 0 &&
+ status == FATAL_DEFAULT)
+ status = FATAL_LOGERROR;
if (fflush(log_fd) < 0 && status == FATAL_DEFAULT)
status = FATAL_LOGWRITE;
@@ -150,7 +154,8 @@
{
int old_errno = errno;
- default_handler("Error: ", log_fd, format, args);
+ if (default_handler("Error: ", log_fd, format, args) < 0)
+ exit(FATAL_LOGERROR);
if (fflush(log_fd) < 0)
exit(FATAL_LOGWRITE);
@@ -162,7 +167,7 @@
{
int old_errno = errno;
- default_handler("Warning: ", log_fd, format, args);
+ (void)default_handler("Warning: ", log_fd, format, args);
if (fflush(log_fd) < 0)
exit(FATAL_LOGWRITE);
@@ -174,7 +179,7 @@
{
int old_errno = errno;
- default_handler("Info: ", log_info_fd, format, args);
+ (void)default_handler("Info: ", log_info_fd, format, args);
if (fflush(log_info_fd) < 0)
exit(FATAL_LOGWRITE);
@@ -271,14 +276,14 @@
info_handler = func;
}
-static void syslog_handler(int level, const char *format, va_list args)
+static int syslog_handler(int level, const char *format, va_list args)
{
va_list args2;
static int recursed = 0;
if (recursed != 0)
- return;
+ return -1;
recursed++;
@@ -288,33 +293,37 @@
vsyslog(level, format, args2);
recursed--;
+
+ return 0;
}
void i_syslog_panic_handler(const char *fmt, va_list args)
{
- syslog_handler(LOG_CRIT, fmt, args);
+ (void)syslog_handler(LOG_CRIT, fmt, args);
abort();
}
void i_syslog_fatal_handler(int status, const char *fmt, va_list args)
{
- syslog_handler(LOG_CRIT, fmt, args);
+ if (syslog_handler(LOG_CRIT, fmt, args) < 0 && status == FATAL_DEFAULT)
+ status = FATAL_LOGERROR;
exit(status);
}
void i_syslog_error_handler(const char *fmt, va_list args)
{
- syslog_handler(LOG_ERR, fmt, args);
+ if (syslog_handler(LOG_ERR, fmt, args) < 0)
+ exit(FATAL_LOGERROR);
}
void i_syslog_warning_handler(const char *fmt, va_list args)
{
- syslog_handler(LOG_WARNING, fmt, args);
+ (void)syslog_handler(LOG_WARNING, fmt, args);
}
void i_syslog_info_handler(const char *fmt, va_list args)
{
- syslog_handler(LOG_INFO, fmt, args);
+ (void)syslog_handler(LOG_INFO, fmt, args);
}
void i_set_failure_syslog(const char *ident, int options, int facility)
Index: failures.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib/failures.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- failures.h 20 Dec 2002 01:47:11 -0000 1.4
+++ failures.h 28 Dec 2002 08:06:34 -0000 1.5
@@ -5,8 +5,9 @@
typedef enum {
FATAL_LOGOPEN = 80, /* Can't open log file */
FATAL_LOGWRITE = 81, /* Can't write to log file */
- FATAL_OUTOFMEM = 82, /* Out of memory */
- FATAL_EXEC = 83, /* exec() failed */
+ FATAL_LOGERROR = 82, /* Internal logging error */
+ FATAL_OUTOFMEM = 83, /* Out of memory */
+ FATAL_EXEC = 84, /* exec() failed */
FATAL_DEFAULT = 89
} FatalExitStatus;
More information about the dovecot-cvs
mailing list