Commit Diff


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 <string.h>
 #include <unistd.h>
 
+#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 <err.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <time.h>
+
+#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 <syslog.h>
 #include <unistd.h>
 
+#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 <sqlite3.h>
 
+#include "log.h"
 #include "msearchd.h"
 
 char		dbpath[PATH_MAX];