commit dded54032feab793f6531ee8565f46c56a182b36 from: Omar Polo date: Mon Oct 16 11:05:20 2023 UTC switch log implementation commit - d71b4c26e7f272397ef261a0416a6eedcb65da11 commit + dded54032feab793f6531ee8565f46c56a182b36 blob - 5695726c77a6a9a2fb8ce8a473e32e9d6b5b7ce5 blob + 00870432ddcd485aa2c6b2a1dde1ab65afbcbc3a --- msearchd/Makefile +++ msearchd/Makefile @@ -2,7 +2,7 @@ include config.mk include ../config.mk PROG = msearchd -SRCS = msearchd.c fcgi.c server.c +SRCS = msearchd.c fcgi.c log.c server.c MAN = msearchd.8 OBJS = ${SRCS:.c=.o} ${COMPATS:.c=.o} @@ -48,7 +48,8 @@ DEFS = -DSYSCONFDIR="\"${REALSYSCONFDIR}\"" \ # -- maintainer targets -- -DISTFILES = Makefile configure ${SRCS} msearchd.h msearchd.8 schema.sql +DISTFILES = Makefile configure ${SRCS} log.h msearchd.h \ + msearchd.8 schema.sql dist: mkdir -p ${DESTDIR}/ blob - c96d03f9df0062274eb70d38ab16e54190344639 blob + e7f7f6aa631ddf3a63fc5cc483f120105416002c --- msearchd/fcgi.c +++ msearchd/fcgi.c @@ -19,6 +19,7 @@ #include #include +#include "log.h" #include "msearchd.h" #define MIN(a, b) ((a) < (b) ? (a) : (b)) blob - /dev/null blob + d153cd62d8e6349df4a36cc0e5d45c5621970200 (mode 644) --- /dev/null +++ msearchd/log.c @@ -0,0 +1,170 @@ +/* + * This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "log.h" + +__dead void log_syslog_fatal(int, const char *, ...); +__dead void log_syslog_fatalx(int, const char *, ...); +void log_syslog_warn(const char *, ...); +void log_syslog_warnx(const char *, ...); +void log_syslog_info(const char *, ...); +void log_syslog_debug(const char *, ...); + +const struct logger syslogger = { + .fatal = &log_syslog_fatal, + .fatalx = &log_syslog_fatalx, + .warn = &log_syslog_warn, + .warnx = &log_syslog_warnx, + .info = &log_syslog_info, + .debug = &log_syslog_debug, +}; + +const struct logger dbglogger = { + .fatal = &err, + .fatalx = &errx, + .warn = &warn, + .warnx = &warnx, + .info = &warnx, + .debug = &warnx, +}; + +const struct logger *logger = &dbglogger; + +static char logbuf[4096]; +static int debug; +static int verbose; + +void +log_init(int n_debug, int facility) +{ + debug = n_debug; + verbose = n_debug; + + tzset(); + if (debug) + setvbuf(stderr, logbuf, _IOLBF, sizeof(logbuf)); + else { + openlog(getprogname(), LOG_PID | LOG_NDELAY, facility); + logger = &syslogger; + } +} + +void +log_setverbose(int v) +{ + verbose = v; +} + +__dead void +log_syslog_fatal(int eval, const char *fmt, ...) +{ + static char s[BUFSIZ]; + va_list ap; + int r, save_errno; + + save_errno = errno; + + va_start(ap, fmt); + r = vsnprintf(s, sizeof(s), fmt, ap); + va_end(ap); + + errno = save_errno; + + if (r > 0 && (size_t)r <= sizeof(s)) + syslog(LOG_DAEMON|LOG_CRIT, "%s: %s", s, strerror(errno)); + + exit(eval); +} + +__dead void +log_syslog_fatalx(int eval, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vsyslog(LOG_DAEMON|LOG_CRIT, fmt, ap); + va_end(ap); + + exit(eval); +} + +void +log_syslog_warn(const char *fmt, ...) +{ + static char s[BUFSIZ]; + va_list ap; + int r, save_errno; + + save_errno = errno; + + va_start(ap, fmt); + r = vsnprintf(s, sizeof(s), fmt, ap); + va_end(ap); + + errno = save_errno; + + if (r > 0 && (size_t)r < sizeof(s)) + syslog(LOG_DAEMON|LOG_ERR, "%s: %s", s, strerror(errno)); + + errno = save_errno; +} + +void +log_syslog_warnx(const char *fmt, ...) +{ + va_list ap; + int save_errno; + + save_errno = errno; + va_start(ap, fmt); + vsyslog(LOG_DAEMON|LOG_ERR, fmt, ap); + va_end(ap); + errno = save_errno; +} + +void +log_syslog_info(const char *fmt, ...) +{ + va_list ap; + int save_errno; + + if (verbose < 1) + return; + + save_errno = errno; + va_start(ap, fmt); + vsyslog(LOG_DAEMON|LOG_INFO, fmt, ap); + va_end(ap); + errno = save_errno; +} + +void +log_syslog_debug(const char *fmt, ...) +{ + va_list ap; + int save_errno; + + if (verbose < 2) + return; + + save_errno = errno; + va_start(ap, fmt); + vsyslog(LOG_DAEMON|LOG_DEBUG, fmt, ap); + va_end(ap); + errno = save_errno; +} blob - 9ee7a8f3f1d361a0be1c5776f5ebae5f4d567045 blob + 896cf77febcc34d64f88e1c7441efa5e2f1e2976 --- msearchd/msearchd.c +++ msearchd/msearchd.c @@ -23,6 +23,7 @@ #include #include +#include "log.h" #include "msearchd.h" #ifndef MSEARCHD_DB @@ -52,34 +53,7 @@ const char *tmpl_head; const char *tmpl_search; const char *tmpl_search_header; const char *tmpl_foot; - -__dead void srch_syslog_fatal(int, const char *, ...); -__dead void srch_syslog_fatalx(int, const char *, ...); -void srch_syslog_warn(const char *, ...); -void srch_syslog_warnx(const char *, ...); -void srch_syslog_info(const char *, ...); -void srch_syslog_debug(const char *, ...); - -const struct logger syslogger = { - .fatal = &srch_syslog_fatal, - .fatalx = &srch_syslog_fatalx, - .warn = &srch_syslog_warn, - .warnx = &srch_syslog_warnx, - .info = &srch_syslog_info, - .debug = &srch_syslog_debug, -}; -const struct logger dbglogger = { - .fatal = &err, - .fatalx = &errx, - .warn = &warn, - .warnx = &warnx, - .info = &warnx, - .debug = &warnx, -}; - -const struct logger *logger = &dbglogger; - static void sighdlr(int sig) { @@ -332,8 +306,7 @@ main(int argc, char **argv) if (root == NULL) root = pw->pw_dir; - if (!debug) - logger = &syslogger; + log_init(debug, LOG_DAEMON); if (!debug && !server && daemon(1, 0) == -1) fatal("daemon"); @@ -419,103 +392,4 @@ main(int argc, char **argv) } return (1); -} - -__dead void -srch_syslog_fatal(int eval, const char *fmt, ...) -{ - static char s[BUFSIZ]; - va_list ap; - int r, save_errno; - - save_errno = errno; - - va_start(ap, fmt); - r = vsnprintf(s, sizeof(s), fmt, ap); - va_end(ap); - - errno = save_errno; - - if (r > 0 && (size_t)r <= sizeof(s)) - syslog(LOG_DAEMON|LOG_CRIT, "%s: %s", s, strerror(errno)); - - exit(eval); -} - -__dead void -srch_syslog_fatalx(int eval, const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - vsyslog(LOG_DAEMON|LOG_CRIT, fmt, ap); - va_end(ap); - - exit(eval); -} - -void -srch_syslog_warn(const char *fmt, ...) -{ - static char s[BUFSIZ]; - va_list ap; - int r, save_errno; - - save_errno = errno; - - va_start(ap, fmt); - r = vsnprintf(s, sizeof(s), fmt, ap); - va_end(ap); - - errno = save_errno; - - if (r > 0 && (size_t)r < sizeof(s)) - syslog(LOG_DAEMON|LOG_ERR, "%s: %s", s, strerror(errno)); - - errno = save_errno; } - -void -srch_syslog_warnx(const char *fmt, ...) -{ - va_list ap; - int save_errno; - - save_errno = errno; - va_start(ap, fmt); - vsyslog(LOG_DAEMON|LOG_ERR, fmt, ap); - va_end(ap); - errno = save_errno; -} - -void -srch_syslog_info(const char *fmt, ...) -{ - va_list ap; - int save_errno; - - if (verbose < 1) - return; - - save_errno = errno; - va_start(ap, fmt); - vsyslog(LOG_DAEMON|LOG_INFO, fmt, ap); - va_end(ap); - errno = save_errno; -} - -void -srch_syslog_debug(const char *fmt, ...) -{ - va_list ap; - int save_errno; - - if (verbose < 2) - return; - - save_errno = errno; - va_start(ap, fmt); - vsyslog(LOG_DAEMON|LOG_DEBUG, fmt, ap); - va_end(ap); - errno = save_errno; -} blob - /dev/null blob + 4e26c5293dfc7e06848e76380e90711193e81e52 (mode 644) --- /dev/null +++ msearchd/log.h @@ -0,0 +1,31 @@ +/* + * This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + */ + +#define LOG_ATTR_PRINTF(A, B) __attribute__((__format__ (printf, A, B))) +struct logger { + __dead void (*fatal)(int, const char *, ...) LOG_ATTR_PRINTF(2, 3); + __dead void (*fatalx)(int, const char *, ...) LOG_ATTR_PRINTF(2, 3); + void (*warn)(const char *, ...) LOG_ATTR_PRINTF(1, 2); + void (*warnx)(const char *, ...) LOG_ATTR_PRINTF(1, 2); + void (*info)(const char *, ...) LOG_ATTR_PRINTF(1, 2); + void (*debug)(const char *, ...) LOG_ATTR_PRINTF(1, 2); +}; +#undef LOG_ATTR_PRINTF + +extern const struct logger *logger, syslogger, dbglogger; + +#define fatal(...) logger->fatal(1, __VA_ARGS__) +#define fatalx(...) logger->fatalx(1, __VA_ARGS__) +#define log_warn(...) logger->warn(__VA_ARGS__) +#define log_warnx(...) logger->warnx(__VA_ARGS__) +#define log_info(...) logger->info(__VA_ARGS__) +#define log_debug(...) logger->debug(__VA_ARGS__) + +void log_init(int, int); +void log_setverbose(int); blob - 2efdad37df16fbfd2cedee23b3be99d95a3618d6 blob + 7455aa62012e70a41af8a7c487521f29796294ac --- msearchd/msearchd.h +++ msearchd/msearchd.h @@ -18,25 +18,6 @@ enum { METHOD_POST, }; -#define ATTR_PRINTF(A, B) __attribute__((__format__ (printf, A, B))) - -struct logger { - __dead void (*fatal)(int, const char *, ...) ATTR_PRINTF(2, 3); - __dead void (*fatalx)(int, const char *, ...) ATTR_PRINTF(2, 3); - void (*warn)(const char *, ...) ATTR_PRINTF(1, 2); - void (*warnx)(const char *, ...) ATTR_PRINTF(1, 2); - void (*info)(const char *, ...) ATTR_PRINTF(1, 2); - void (*debug)(const char *, ...) ATTR_PRINTF(1, 2); -}; - -extern const struct logger *logger; -#define fatal(...) logger->fatal(1, __VA_ARGS__) -#define fatalx(...) logger->fatalx(1, __VA_ARGS__) -#define log_warn(...) logger->warn(__VA_ARGS__) -#define log_warnx(...) logger->warnx(__VA_ARGS__) -#define log_info(...) logger->info(__VA_ARGS__) -#define log_debug(...) logger->debug(__VA_ARGS__) - #ifdef DEBUG #define DPRINTF log_debug #else blob - 77fe2630969c6a22b9d8da5c452301249272cfe7 blob + 38deceb07596bd382c91f42d452e16f555f190ce --- msearchd/server.c +++ msearchd/server.c @@ -15,6 +15,7 @@ #include +#include "log.h" #include "msearchd.h" char dbpath[PATH_MAX];