Commit Diff


commit - 1c80e16b512f22436fe2ff65775d59ec971840b5
commit + 0e5011aaf42a0ec4224718272a51884c3452fdd2
blob - 066acfa72f97e8bd17fe33c6b978cec6d9450609
blob + 87fc598f0a9e4b3588c00d6af34caa63cc08a60b
--- Makefile
+++ Makefile
@@ -1,4 +1,4 @@
-#	$OpenBSD: Makefile,v 1.28 2015/01/22 09:26:05 reyk Exp $
+#	$OpenBSD: Makefile,v 1.29 2015/11/21 12:37:42 reyk Exp $
 
 PROG=		relayd
 SRCS=		parse.y
@@ -6,7 +6,7 @@ SRCS+=		agentx.c ca.c carp.c check_icmp.c check_script
 		check_tcp.c config.c control.c hce.c log.c name2id.c \
 		pfe.c pfe_filter.c pfe_route.c proc.c \
 		relay.c relay_http.c relay_udp.c relayd.c \
-		shuffle.c snmp.c ssl.c
+		shuffle.c snmp.c ssl.c util.c
 MAN=		relayd.8 relayd.conf.5
 
 LDADD=		-levent -lssl -lcrypto -lutil
blob - 58fc6de52025c3ef4b3382d276ea6ed94a22d646
blob + 440f218fb93f4e360a9d501f54c568ccffb2f947
--- log.c
+++ log.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: log.c,v 1.27 2015/01/22 17:42:09 reyk Exp $	*/
+/*	$OpenBSD: log.c,v 1.28 2015/11/21 12:37:42 reyk Exp $	*/
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -16,29 +16,33 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-
-#include <errno.h>
-#include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <stdarg.h>
 #include <string.h>
 #include <syslog.h>
-#include <netdb.h>
-#include <ctype.h>
+#include <errno.h>
 #include <time.h>
 
-#include "relayd.h"
-
 int	 debug;
 int	 verbose;
 
-void	 vlog(int, const char *, va_list)
-	    __attribute__((__format__ (printf, 2, 0)));
-void	 logit(int, const char *, ...)
+void	log_init(int);
+void	log_verbose(int);
+void	log_warn(const char *, ...)
+	    __attribute__((__format__ (printf, 1, 2)));
+void	log_warnx(const char *, ...)
+	    __attribute__((__format__ (printf, 1, 2)));
+void	log_info(const char *, ...)
+	    __attribute__((__format__ (printf, 1, 2)));
+void	log_debug(const char *, ...)
+	    __attribute__((__format__ (printf, 1, 2)));
+void	logit(int, const char *, ...)
 	    __attribute__((__format__ (printf, 2, 3)));
+void	vlog(int, const char *, va_list)
+	    __attribute__((__format__ (printf, 2, 0)));
+__dead void fatal(const char *);
+__dead void fatalx(const char *);
 
 void
 log_init(int n_debug)
@@ -167,237 +171,3 @@ fatalx(const char *emsg)
 	errno = 0;
 	fatal(emsg);
 }
-
-const char *
-host_error(enum host_error he)
-{
-	switch (he) {
-	case HCE_NONE:
-		return ("none");
-		break;
-	case HCE_ABORT:
-		return ("aborted");
-		break;
-	case HCE_INTERVAL_TIMEOUT:
-		return ("interval timeout");
-		break;
-	case HCE_ICMP_OK:
-		return ("icmp ok");
-		break;
-	case HCE_ICMP_READ_TIMEOUT:
-		return ("icmp read timeout");
-		break;
-	case HCE_ICMP_WRITE_TIMEOUT:
-		return ("icmp write timeout");
-		break;
-	case HCE_TCP_SOCKET_ERROR:
-		return ("tcp socket error");
-		break;
-	case HCE_TCP_SOCKET_LIMIT:
-		return ("tcp socket limit");
-		break;
-	case HCE_TCP_SOCKET_OPTION:
-		return ("tcp socket option");
-		break;
-	case HCE_TCP_CONNECT_FAIL:
-		return ("tcp connect failed");
-		break;
-	case HCE_TCP_CONNECT_TIMEOUT:
-		return ("tcp connect timeout");
-		break;
-	case HCE_TCP_CONNECT_OK:
-		return ("tcp connect ok");
-		break;
-	case HCE_TCP_WRITE_TIMEOUT:
-		return ("tcp write timeout");
-		break;
-	case HCE_TCP_WRITE_FAIL:
-		return ("tcp write failed");
-		break;
-	case HCE_TCP_READ_TIMEOUT:
-		return ("tcp read timeout");
-		break;
-	case HCE_TCP_READ_FAIL:
-		return ("tcp read failed");
-		break;
-	case HCE_SCRIPT_OK:
-		return ("script ok");
-		break;
-	case HCE_SCRIPT_FAIL:
-		return ("script failed");
-		break;
-	case HCE_TLS_CONNECT_OK:
-		return ("tls connect ok");
-		break;
-	case HCE_TLS_CONNECT_FAIL:
-		return ("tls connect failed");
-		break;
-	case HCE_TLS_CONNECT_TIMEOUT:
-		return ("tls connect timeout");
-		break;
-	case HCE_TLS_CONNECT_ERROR:
-		return ("tls connect error");
-		break;
-	case HCE_TLS_READ_TIMEOUT:
-		return ("tls read timeout");
-		break;
-	case HCE_TLS_WRITE_TIMEOUT:
-		return ("tls write timeout");
-		break;
-	case HCE_TLS_READ_ERROR:
-		return ("tls read error");
-		break;
-	case HCE_TLS_WRITE_ERROR:
-		return ("tls write error");
-		break;
-	case HCE_SEND_EXPECT_FAIL:
-		return ("send/expect failed");
-		break;
-	case HCE_SEND_EXPECT_OK:
-		return ("send/expect ok");
-		break;
-	case HCE_HTTP_CODE_ERROR:
-		return ("http code malformed");
-		break;
-	case HCE_HTTP_CODE_FAIL:
-		return ("http code mismatch");
-		break;
-	case HCE_HTTP_CODE_OK:
-		return ("http code ok");
-		break;
-	case HCE_HTTP_DIGEST_ERROR:
-		return ("http digest malformed");
-		break;
-	case HCE_HTTP_DIGEST_FAIL:
-		return ("http digest mismatch");
-		break;
-	case HCE_HTTP_DIGEST_OK:
-		return ("http digest ok");
-		break;
-	}
-	/* NOTREACHED */
-	return ("invalid");
-}
-
-const char *
-host_status(enum host_status status)
-{
-	switch (status) {
-	case HOST_DOWN:
-		return ("down");
-	case HOST_UNKNOWN:
-		return ("unknown");
-	case HOST_UP:
-		return ("up");
-	};
-	/* NOTREACHED */
-	return ("invalid");
-}
-
-const char *
-table_check(enum table_check check)
-{
-	switch (check) {
-	case CHECK_NOCHECK:
-		return ("none");
-	case CHECK_ICMP:
-		return ("icmp");
-	case CHECK_TCP:
-		return ("tcp");
-	case CHECK_HTTP_CODE:
-		return ("http code");
-	case CHECK_HTTP_DIGEST:
-		return ("http digest");
-	case CHECK_SEND_EXPECT:
-		return ("send expect");
-	case CHECK_SCRIPT:
-		return ("script");
-	};
-	/* NOTREACHED */
-	return ("invalid");
-}
-
-const char *
-print_availability(u_long cnt, u_long up)
-{
-	static char buf[BUFSIZ];
-
-	if (cnt == 0)
-		return ("");
-	bzero(buf, sizeof(buf));
-	snprintf(buf, sizeof(buf), "%.2f%%", (double)up / cnt * 100);
-	return (buf);
-}
-
-const char *
-print_host(struct sockaddr_storage *ss, char *buf, size_t len)
-{
-	if (getnameinfo((struct sockaddr *)ss, ss->ss_len,
-	    buf, len, NULL, 0, NI_NUMERICHOST) != 0) {
-		buf[0] = '\0';
-		return (NULL);
-	}
-	return (buf);
-}
-
-const char *
-print_time(struct timeval *a, struct timeval *b, char *buf, size_t len)
-{
-	struct timeval		tv;
-	u_long			h, sec, min;
-
-	timerclear(&tv);
-	timersub(a, b, &tv);
-	sec = tv.tv_sec % 60;
-	min = tv.tv_sec / 60 % 60;
-	h = tv.tv_sec / 60 / 60;
-
-	snprintf(buf, len, "%.2lu:%.2lu:%.2lu", h, min, sec);
-	return (buf);
-}
-
-const char *
-printb_flags(const u_int32_t v, const char *bits)
-{
-	static char	 buf[2][BUFSIZ];
-	static int	 idx = 0;
-	int		 i, any = 0;
-	char		 c, *p, *r;
-
-	p = r = buf[++idx % 2];
-	bzero(p, BUFSIZ);
-
-	if (bits) {
-		bits++;
-		while ((i = *bits++)) {
-			if (v & (1 << (i - 1))) {
-				if (any) {
-					*p++ = ',';
-					*p++ = ' ';
-				}
-				any = 1;
-				for (; (c = *bits) > 32; bits++) {
-					if (c == '_')
-						*p++ = ' ';
-					else
-						*p++ = tolower((u_char)c);
-				}
-			} else
-				for (; *bits > 32; bits++)
-					;
-		}
-	}
-
-	return (r);
-}
-
-void
-getmonotime(struct timeval *tv)
-{
-	struct timespec	 ts;
-
-	if (clock_gettime(CLOCK_MONOTONIC, &ts))
-		fatal("clock_gettime");
-
-	TIMESPEC_TO_TIMEVAL(tv, &ts);
-}
blob - d48581240d9781c8c9789d06f2203d84924a90f4
blob + e0f7cb248005d3a6484f5942de8d2d298de5db9c
--- relayd.h
+++ relayd.h
@@ -1,4 +1,4 @@
-/*	$OpenBSD: relayd.h,v 1.215 2015/10/27 12:27:54 benno Exp $	*/
+/*	$OpenBSD: relayd.h,v 1.216 2015/11/21 12:37:42 reyk Exp $	*/
 
 /*
  * Copyright (c) 2006 - 2015 Reyk Floeter <reyk@openbsd.org>
@@ -1103,7 +1103,7 @@ int	 parse_config(const char *, struct relayd *);
 int	 load_config(const char *, struct relayd *);
 int	 cmdline_symset(char *);
 
-/* log.c */
+/* util.c */
 const char *host_error(enum host_error);
 const char *host_status(enum host_status);
 const char *table_check(enum table_check);
@@ -1334,12 +1334,18 @@ u_int16_t	shuffle_generate16(struct shuffle *);
 /* log.c */
 void	log_init(int);
 void	log_verbose(int);
-void	log_warn(const char *, ...) __attribute__((__format__ (printf, 1, 2)));
-void	log_warnx(const char *, ...) __attribute__((__format__ (printf, 1, 2)));
-void	log_info(const char *, ...) __attribute__((__format__ (printf, 1, 2)));
-void	log_debug(const char *, ...) __attribute__((__format__ (printf, 1, 2)));
-void	logit(int, const char *, ...) __attribute__((__format__ (printf, 2, 3)));
-void	vlog(int, const char *, va_list) __attribute__((__format__ (printf, 2, 0)));
+void	log_warn(const char *, ...)
+	    __attribute__((__format__ (printf, 1, 2)));
+void	log_warnx(const char *, ...)
+	    __attribute__((__format__ (printf, 1, 2)));
+void	log_info(const char *, ...)
+	    __attribute__((__format__ (printf, 1, 2)));
+void	log_debug(const char *, ...)
+	    __attribute__((__format__ (printf, 1, 2)));
+void	logit(int, const char *, ...)
+	    __attribute__((__format__ (printf, 2, 3)));
+void	vlog(int, const char *, va_list)
+	    __attribute__((__format__ (printf, 2, 0)));
 __dead void fatal(const char *);
 __dead void fatalx(const char *);
 
blob - /dev/null
blob + a06b6b2e73107c49ced0436ed2e39d66a44a6994 (mode 644)
--- /dev/null
+++ util.c
@@ -0,0 +1,263 @@
+/*	$OpenBSD: util.c,v 1.1 2015/11/21 12:37:42 reyk Exp $	*/
+
+/*
+ * Copyright (c) 2006 - 2015 Reyk Floeter <reyk@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <netdb.h>
+#include <ctype.h>
+
+#include "relayd.h"
+
+const char *
+host_error(enum host_error he)
+{
+	switch (he) {
+	case HCE_NONE:
+		return ("none");
+		break;
+	case HCE_ABORT:
+		return ("aborted");
+		break;
+	case HCE_INTERVAL_TIMEOUT:
+		return ("interval timeout");
+		break;
+	case HCE_ICMP_OK:
+		return ("icmp ok");
+		break;
+	case HCE_ICMP_READ_TIMEOUT:
+		return ("icmp read timeout");
+		break;
+	case HCE_ICMP_WRITE_TIMEOUT:
+		return ("icmp write timeout");
+		break;
+	case HCE_TCP_SOCKET_ERROR:
+		return ("tcp socket error");
+		break;
+	case HCE_TCP_SOCKET_LIMIT:
+		return ("tcp socket limit");
+		break;
+	case HCE_TCP_SOCKET_OPTION:
+		return ("tcp socket option");
+		break;
+	case HCE_TCP_CONNECT_FAIL:
+		return ("tcp connect failed");
+		break;
+	case HCE_TCP_CONNECT_TIMEOUT:
+		return ("tcp connect timeout");
+		break;
+	case HCE_TCP_CONNECT_OK:
+		return ("tcp connect ok");
+		break;
+	case HCE_TCP_WRITE_TIMEOUT:
+		return ("tcp write timeout");
+		break;
+	case HCE_TCP_WRITE_FAIL:
+		return ("tcp write failed");
+		break;
+	case HCE_TCP_READ_TIMEOUT:
+		return ("tcp read timeout");
+		break;
+	case HCE_TCP_READ_FAIL:
+		return ("tcp read failed");
+		break;
+	case HCE_SCRIPT_OK:
+		return ("script ok");
+		break;
+	case HCE_SCRIPT_FAIL:
+		return ("script failed");
+		break;
+	case HCE_TLS_CONNECT_OK:
+		return ("tls connect ok");
+		break;
+	case HCE_TLS_CONNECT_FAIL:
+		return ("tls connect failed");
+		break;
+	case HCE_TLS_CONNECT_TIMEOUT:
+		return ("tls connect timeout");
+		break;
+	case HCE_TLS_CONNECT_ERROR:
+		return ("tls connect error");
+		break;
+	case HCE_TLS_READ_TIMEOUT:
+		return ("tls read timeout");
+		break;
+	case HCE_TLS_WRITE_TIMEOUT:
+		return ("tls write timeout");
+		break;
+	case HCE_TLS_READ_ERROR:
+		return ("tls read error");
+		break;
+	case HCE_TLS_WRITE_ERROR:
+		return ("tls write error");
+		break;
+	case HCE_SEND_EXPECT_FAIL:
+		return ("send/expect failed");
+		break;
+	case HCE_SEND_EXPECT_OK:
+		return ("send/expect ok");
+		break;
+	case HCE_HTTP_CODE_ERROR:
+		return ("http code malformed");
+		break;
+	case HCE_HTTP_CODE_FAIL:
+		return ("http code mismatch");
+		break;
+	case HCE_HTTP_CODE_OK:
+		return ("http code ok");
+		break;
+	case HCE_HTTP_DIGEST_ERROR:
+		return ("http digest malformed");
+		break;
+	case HCE_HTTP_DIGEST_FAIL:
+		return ("http digest mismatch");
+		break;
+	case HCE_HTTP_DIGEST_OK:
+		return ("http digest ok");
+		break;
+	}
+	/* NOTREACHED */
+	return ("invalid");
+}
+
+const char *
+host_status(enum host_status status)
+{
+	switch (status) {
+	case HOST_DOWN:
+		return ("down");
+	case HOST_UNKNOWN:
+		return ("unknown");
+	case HOST_UP:
+		return ("up");
+	};
+	/* NOTREACHED */
+	return ("invalid");
+}
+
+const char *
+table_check(enum table_check check)
+{
+	switch (check) {
+	case CHECK_NOCHECK:
+		return ("none");
+	case CHECK_ICMP:
+		return ("icmp");
+	case CHECK_TCP:
+		return ("tcp");
+	case CHECK_HTTP_CODE:
+		return ("http code");
+	case CHECK_HTTP_DIGEST:
+		return ("http digest");
+	case CHECK_SEND_EXPECT:
+		return ("send expect");
+	case CHECK_SCRIPT:
+		return ("script");
+	};
+	/* NOTREACHED */
+	return ("invalid");
+}
+
+const char *
+print_availability(u_long cnt, u_long up)
+{
+	static char buf[BUFSIZ];
+
+	if (cnt == 0)
+		return ("");
+	bzero(buf, sizeof(buf));
+	snprintf(buf, sizeof(buf), "%.2f%%", (double)up / cnt * 100);
+	return (buf);
+}
+
+const char *
+print_host(struct sockaddr_storage *ss, char *buf, size_t len)
+{
+	if (getnameinfo((struct sockaddr *)ss, ss->ss_len,
+	    buf, len, NULL, 0, NI_NUMERICHOST) != 0) {
+		buf[0] = '\0';
+		return (NULL);
+	}
+	return (buf);
+}
+
+const char *
+print_time(struct timeval *a, struct timeval *b, char *buf, size_t len)
+{
+	struct timeval		tv;
+	u_long			h, sec, min;
+
+	timerclear(&tv);
+	timersub(a, b, &tv);
+	sec = tv.tv_sec % 60;
+	min = tv.tv_sec / 60 % 60;
+	h = tv.tv_sec / 60 / 60;
+
+	snprintf(buf, len, "%.2lu:%.2lu:%.2lu", h, min, sec);
+	return (buf);
+}
+
+const char *
+printb_flags(const u_int32_t v, const char *bits)
+{
+	static char	 buf[2][BUFSIZ];
+	static int	 idx = 0;
+	int		 i, any = 0;
+	char		 c, *p, *r;
+
+	p = r = buf[++idx % 2];
+	bzero(p, BUFSIZ);
+
+	if (bits) {
+		bits++;
+		while ((i = *bits++)) {
+			if (v & (1 << (i - 1))) {
+				if (any) {
+					*p++ = ',';
+					*p++ = ' ';
+				}
+				any = 1;
+				for (; (c = *bits) > 32; bits++) {
+					if (c == '_')
+						*p++ = ' ';
+					else
+						*p++ = tolower((u_char)c);
+				}
+			} else
+				for (; *bits > 32; bits++)
+					;
+		}
+	}
+
+	return (r);
+}
+
+void
+getmonotime(struct timeval *tv)
+{
+	struct timespec	 ts;
+
+	if (clock_gettime(CLOCK_MONOTONIC, &ts))
+		fatal("clock_gettime");
+
+	TIMESPEC_TO_TIMEVAL(tv, &ts);
+}