commit - 1c80e16b512f22436fe2ff65775d59ec971840b5
commit + 0e5011aaf42a0ec4224718272a51884c3452fdd2
blob - 066acfa72f97e8bd17fe33c6b978cec6d9450609
blob + 87fc598f0a9e4b3588c00d6af34caa63cc08a60b
--- Makefile
+++ Makefile
-# $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
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
-/* $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>
* 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)
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
-/* $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>
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);
/* 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
+/* $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);
+}