132 lines
2.6 KiB
C
132 lines
2.6 KiB
C
/* Error routines for programs that can run as a daemon. */
|
|
|
|
#include <errno.h> /* for definition of errno */
|
|
#include <stdarg.h> /* ANSI C header file */
|
|
#include <syslog.h>
|
|
#include "./include/iptrans.h"
|
|
|
|
static void log_doit(int, int, const char *, va_list ap);
|
|
|
|
int debug=1; /* caller must define and set this:
|
|
nonzero if interactive, zero if daemon */
|
|
|
|
int under_develop=1; /* caller must define and set this:
|
|
nonzero if under develop, zero if not */
|
|
|
|
|
|
/*@ignore@*/
|
|
/* Initialize syslog(), if running as daemon. */
|
|
void
|
|
log_open(const char *ident, int option, int facility)
|
|
{
|
|
if (debug == 0)
|
|
openlog(ident, option, facility);
|
|
}
|
|
|
|
/*
|
|
** Nonfatal error related to a system call.
|
|
** Print a message with the system's errno value and return.
|
|
*/
|
|
|
|
void
|
|
log_ret(const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
|
|
va_start(ap, fmt);
|
|
log_doit(1, LOG_ERR, fmt, ap);
|
|
va_end(ap);
|
|
return;
|
|
}
|
|
|
|
/*
|
|
** Fatal error related to a system call.
|
|
** Print a message and terminate.
|
|
*/
|
|
|
|
void
|
|
log_sys(const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
|
|
va_start(ap, fmt);
|
|
log_doit(1, LOG_ERR, fmt, ap);
|
|
va_end(ap);
|
|
exit(2);
|
|
}
|
|
|
|
/*
|
|
** Nonfatal error unrelated to a system call.
|
|
** Print a message and return.
|
|
*/
|
|
|
|
void
|
|
log_msg(const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
|
|
va_start(ap, fmt);
|
|
log_doit(0, LOG_ERR, fmt, ap);
|
|
va_end(ap);
|
|
return;
|
|
}
|
|
|
|
/*
|
|
** Debug message unrelated to a system call.
|
|
** Print a message and return while .
|
|
*/
|
|
|
|
void
|
|
log_debug(const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
|
|
if (!under_develop) return;
|
|
va_start(ap, fmt);
|
|
log_doit(0, LOG_ERR, fmt, ap);
|
|
va_end(ap);
|
|
return;
|
|
}
|
|
|
|
/*
|
|
** Fatal error unrelated to a system call.
|
|
** Print a message and terminate.
|
|
*/
|
|
|
|
void
|
|
log_quit(const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
|
|
va_start(ap, fmt);
|
|
log_doit(0, LOG_ERR, fmt, ap);
|
|
va_end(ap);
|
|
exit(2);
|
|
}
|
|
|
|
/*
|
|
** Print a message and return to caller.
|
|
** Caller specifies "errnoflag" and "priority".
|
|
*/
|
|
|
|
static void
|
|
log_doit(int errnoflag, int priority, const char *fmt, va_list ap)
|
|
{
|
|
int errno_save;
|
|
char buf[MAXLINE];
|
|
|
|
errno_save = errno; /* value caller might want printed */
|
|
vsprintf(buf, fmt, ap);
|
|
if (errnoflag)
|
|
sprintf(buf+strlen(buf), ": %s", strerror(errno_save));
|
|
strcat(buf, "\n");
|
|
if (debug) {
|
|
fflush(stdout);
|
|
fputs(buf, stderr);
|
|
fflush(stderr);
|
|
} else
|
|
syslog(priority, "%s", buf);
|
|
return;
|
|
}
|
|
/*@end@*/
|