From 304acfbef819ce1a154b526144a10cc3346a8f4f Mon Sep 17 00:00:00 2001
From: Jun Kuriyama <kuriyama@FreeBSD.org>
Date: Sun, 20 Jan 2008 21:38:26 +0000
Subject: OpenBSD's Relay Daemon (previously known as hoststated).

relayd is a daemon to relay and dynamically redirect incoming
connections to a target host. Its main purposes are to run as a
load-balancer, application layer gateway, or transparent proxy. The
daemon is able to monitor groups of hosts for availability, which is
determined by checking for a specific service common to a host group.

WWW: http://spootnik.org/relayd/

# This port will work on $OSVERSION >= 700049.
# If you want to use on RELENG_6, apply a patch in
# http://www.openbsd.org/cgi-bin/cvsweb/src/sys/net/pf_table.c.diff?r1=1.67&r2=1.68
---
 net/relayd/Makefile                    | 62 +++++++++++++++++++++++++++++
 net/relayd/distinfo                    |  3 ++
 net/relayd/files/patch-ctl-Makefile    | 20 ++++++++++
 net/relayd/files/patch-ctl-parser.c    | 21 ++++++++++
 net/relayd/files/patch-ctl-parser.h    |  8 ++++
 net/relayd/files/patch-ctl-relayctl.c  | 19 +++++++++
 net/relayd/files/patch-d-Makefile      | 26 ++++++++++++
 net/relayd/files/patch-d-carp.c        | 44 +++++++++++++++++++++
 net/relayd/files/patch-d-check_icmp.c  | 11 ++++++
 net/relayd/files/patch-d-check_tcp.c   | 47 ++++++++++++++++++++++
 net/relayd/files/patch-d-log.c         | 11 ++++++
 net/relayd/files/patch-d-parse.y       | 11 ++++++
 net/relayd/files/patch-d-pfe.c         | 10 +++++
 net/relayd/files/patch-d-pfe_filter.c  | 45 +++++++++++++++++++++
 net/relayd/files/patch-d-relay.c       | 72 ++++++++++++++++++++++++++++++++++
 net/relayd/files/patch-d-relay_udp.c   | 11 ++++++
 net/relayd/files/patch-d-relayd.8      | 20 ++++++++++
 net/relayd/files/patch-d-relayd.c      | 29 ++++++++++++++
 net/relayd/files/patch-d-relayd.conf.5 | 33 ++++++++++++++++
 net/relayd/files/patch-d-relayd.h      | 27 +++++++++++++
 net/relayd/files/relayd.in             | 27 +++++++++++++
 net/relayd/pkg-descr                   |  7 ++++
 net/relayd/pkg-install                 | 36 +++++++++++++++++
 net/relayd/pkg-plist                   |  3 ++
 24 files changed, 603 insertions(+)
 create mode 100644 net/relayd/Makefile
 create mode 100644 net/relayd/distinfo
 create mode 100644 net/relayd/files/patch-ctl-Makefile
 create mode 100644 net/relayd/files/patch-ctl-parser.c
 create mode 100644 net/relayd/files/patch-ctl-parser.h
 create mode 100644 net/relayd/files/patch-ctl-relayctl.c
 create mode 100644 net/relayd/files/patch-d-Makefile
 create mode 100644 net/relayd/files/patch-d-carp.c
 create mode 100644 net/relayd/files/patch-d-check_icmp.c
 create mode 100644 net/relayd/files/patch-d-check_tcp.c
 create mode 100644 net/relayd/files/patch-d-log.c
 create mode 100644 net/relayd/files/patch-d-parse.y
 create mode 100644 net/relayd/files/patch-d-pfe.c
 create mode 100644 net/relayd/files/patch-d-pfe_filter.c
 create mode 100644 net/relayd/files/patch-d-relay.c
 create mode 100644 net/relayd/files/patch-d-relay_udp.c
 create mode 100644 net/relayd/files/patch-d-relayd.8
 create mode 100644 net/relayd/files/patch-d-relayd.c
 create mode 100644 net/relayd/files/patch-d-relayd.conf.5
 create mode 100644 net/relayd/files/patch-d-relayd.h
 create mode 100644 net/relayd/files/relayd.in
 create mode 100644 net/relayd/pkg-descr
 create mode 100644 net/relayd/pkg-install
 create mode 100644 net/relayd/pkg-plist

(limited to 'net/relayd')

diff --git a/net/relayd/Makefile b/net/relayd/Makefile
new file mode 100644
index 000000000000..d281d6b73d9c
--- /dev/null
+++ b/net/relayd/Makefile
@@ -0,0 +1,62 @@
+# New ports collection makefile for: relayd
+# Date created:         5 Jun 2007
+# Whom:                 Jun Kuriyama <kuriyama@FreeBSD.org>
+#
+# $FreeBSD$
+
+PORTNAME=	relayd
+PORTVERSION=	4.2.20071221
+CATEGORIES=	net
+MASTER_SITES=	${MASTER_SITE_LOCAL}
+MASTER_SITE_SUBDIR=	kuriyama
+
+MAINTAINER=	kuriyama@FreeBSD.org
+COMMENT=	OpenBSD Relay Daemon
+
+LIB_DEPENDS=	event:${PORTSDIR}/devel/libevent
+
+WRKSRC=		${WRKDIR}/tmp
+MAN5=		relayd.conf.5
+MAN8=		relayctl.8 relayd.8
+USE_RC_SUBR=	relayd
+
+CFLAGS+=	-I${PREFIX}/include
+
+WRKSRCC=	${WRKDIR}/tmp/relayctl
+WRKSRCD=	${WRKDIR}/tmp/relayd
+_MAKE=		${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_ARGS}
+RUSER=		_relayd
+RGROUP=		_relayd
+
+post-extract:
+	${MKDIR} ${WRKSRC}
+	${MV} ${WRKDIR}/relayctl ${WRKSRC}/
+	${MV} ${WRKDIR}/relayd   ${WRKSRC}/
+
+pre-build:
+	${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|g' \
+		${WRKSRCD}/relayd.h \
+		${WRKSRCD}/relayd.conf.5 ${WRKSRCD}/relayd.8
+
+do-build:
+	(cd ${WRKSRCC}; ${_MAKE} ${ALL_TARGET})
+	(cd ${WRKSRCD}; ${_MAKE} ${ALL_TARGET})
+
+pre-su-install:
+	@${SETENV} PKG_PREFIX=${PREFIX} RUSER=${RUSER} RGROUP=${RGROUP} \
+		${SH} ${PKGINSTALL} ${PORTNAME} PRE-INSTALL
+
+do-install:
+	(cd ${WRKSRCC}; ${_MAKE} ${INSTALL_TARGET} install-man)
+	(cd ${WRKSRCD}; ${_MAKE} ${INSTALL_TARGET} install-man)
+
+.include <bsd.port.pre.mk>
+
+.if ${OSVERSION} < 502106
+IGNORE=	is of no use for you because your system is too old and doesn't have pf
+.endif
+.if (${OSVERSION} < 700049) && !defined(I_KNOW_WHAT_I_AM_DOING)
+IGNORE=	needs a patched kernel to work correctly (http://www.openbsd.org/cgi-bin/cvsweb/src/sys/net/pf_table.c.diff?r1=1.67&r2=1.68)
+.endif
+
+.include <bsd.port.post.mk>
diff --git a/net/relayd/distinfo b/net/relayd/distinfo
new file mode 100644
index 000000000000..714b2da38216
--- /dev/null
+++ b/net/relayd/distinfo
@@ -0,0 +1,3 @@
+MD5 (relayd-4.2.20071221.tar.gz) = 3e6060c3228f2427d4dc3f3740cd4b15
+SHA256 (relayd-4.2.20071221.tar.gz) = e92d777408e87e9c60d5a439affddc6c2ea005fcb116ced937f3ce977e9b3d0d
+SIZE (relayd-4.2.20071221.tar.gz) = 84150
diff --git a/net/relayd/files/patch-ctl-Makefile b/net/relayd/files/patch-ctl-Makefile
new file mode 100644
index 000000000000..686d1a5c1906
--- /dev/null
+++ b/net/relayd/files/patch-ctl-Makefile
@@ -0,0 +1,20 @@
+--- relayctl/Makefile.orig	Tue Jan  9 09:45:32 2007
++++ relayctl/Makefile	Wed Jun  6 18:58:57 2007
+@@ -8,9 +8,16 @@
+ MAN=		relayctl.8
+ 
+ CFLAGS+=	-Wall -Werror -I${.CURDIR} -I${.CURDIR}/../relayd
++CFLAGS+=	-I${PREFIX}/include -D__dead=''
+ CFLAGS+=	-Wstrict-prototypes -Wmissing-prototypes
+ CFLAGS+=	-Wmissing-declarations
+ CFLAGS+=	-Wshadow -Wpointer-arith -Wcast-qual
+-CFLAGS+=	-Wsign-compare -Wbounded
++CFLAGS+=	-Wsign-compare
++
++install:
++	$(INSTALL) -m 555 -g wheel -o root relayctl $(PREFIX)/sbin
++
++install-man:
++	$(INSTALL) -o root -g wheel -m 444 relayctl.8 $(PREFIX)/man/man8
+ 
+ .include <bsd.prog.mk>
diff --git a/net/relayd/files/patch-ctl-parser.c b/net/relayd/files/patch-ctl-parser.c
new file mode 100644
index 000000000000..f2162c9e9f05
--- /dev/null
+++ b/net/relayd/files/patch-ctl-parser.c
@@ -0,0 +1,21 @@
+--- relayctl/parser.c.orig	Wed May 30 07:41:48 2007
++++ relayctl/parser.c	Mon Jan  7 21:32:16 2008
+@@ -18,7 +18,7 @@
+  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+  */
+ 
+-#include <sys/types.h>
++#include <sys/param.h>
+ #include <sys/socket.h>
+ #include <sys/queue.h>
+ #include <netinet/in.h>
+@@ -118,6 +118,9 @@
+ };
+ 
+ static struct parse_result	res;
++
++const struct token      *match_token(const char *, const struct token []);
++void                     show_valid_args(const struct token []);
+ 
+ struct parse_result *
+ parse(int argc, char *argv[])
diff --git a/net/relayd/files/patch-ctl-parser.h b/net/relayd/files/patch-ctl-parser.h
new file mode 100644
index 000000000000..329b6c03dce5
--- /dev/null
+++ b/net/relayd/files/patch-ctl-parser.h
@@ -0,0 +1,8 @@
+--- relayctl/parser.h.orig	Wed Jun  6 18:25:59 2007
++++ relayctl/parser.h	Wed Jun  6 18:27:58 2007
+@@ -38,5 +38,3 @@
+ };
+ 
+ struct parse_result	*parse(int, char *[]);
+-const struct token      *match_token(const char *, const struct token []);
+-void                     show_valid_args(const struct token []);
diff --git a/net/relayd/files/patch-ctl-relayctl.c b/net/relayd/files/patch-ctl-relayctl.c
new file mode 100644
index 000000000000..7aa04fa8810a
--- /dev/null
+++ b/net/relayd/files/patch-ctl-relayctl.c
@@ -0,0 +1,19 @@
+--- relayctl/relayctl.c.orig	Thu Feb 22 14:59:13 2007
++++ relayctl/relayctl.c	Fri Jun  8 13:00:53 2007
+@@ -20,6 +20,7 @@
+  */
+ 
+ #include <sys/types.h>
++#include <sys/param.h>
+ #include <sys/socket.h>
+ #include <sys/queue.h>
+ #include <sys/un.h>
+@@ -286,7 +287,7 @@
+ 	imn = monitor_lookup(imsg->hdr.type);
+ 	printf("%s: imsg type %u len %u peerid %u pid %d\n", imn->name,
+ 	    imsg->hdr.type, imsg->hdr.len, imsg->hdr.peerid, imsg->hdr.pid);
+-	printf("\ttimestamp: %u, %s", now, ctime(&now));
++	printf("\ttimestamp: %lu, %s", (unsigned long)now, ctime(&now));
+ 	if (imn->type == -1)
+ 		done = 1;
+ 	if (imn->func != NULL)
diff --git a/net/relayd/files/patch-d-Makefile b/net/relayd/files/patch-d-Makefile
new file mode 100644
index 000000000000..a983bfebf003
--- /dev/null
+++ b/net/relayd/files/patch-d-Makefile
@@ -0,0 +1,26 @@
+--- relayd/Makefile.orig	Tue Feb 27 04:35:43 2007
++++ relayd/Makefile	Tue Jun  5 20:57:45 2007
+@@ -6,13 +6,20 @@
+ 		check_icmp.c check_tcp.c relay.c carp.c
+ MAN=		relayd.8 relayd.conf.5
+ 
+-LDADD=		-levent -lssl -lcrypto
++LDADD=		-lmd -L${PREFIX}/lib -levent -lssl -lcrypto
+ DPADD=		${LIBEVENT} ${LIBSSL} ${LIBCRYPTO}
+-CFLAGS+=	-Wall -I${.CURDIR}
++CFLAGS+=	-Wall -I${.CURDIR} -I${PREFIX}/include -D__dead='' -DSHA1_DIGEST_LENGTH=SHA_DIGEST_LENGTH -DSHA1_DIGEST_STRING_LENGTH=SHA_DIGEST_LENGTH -DOPENSSL_NO_SHA -DOPENSSL_NO_MD5
+ CFLAGS+=	-Wstrict-prototypes -Wmissing-prototypes
+ CFLAGS+=	-Wmissing-declarations
+ CFLAGS+=	-Wshadow -Wpointer-arith -Wcast-qual
+-CFLAGS+=	-Wsign-compare -Wbounded
++CFLAGS+=	-Wsign-compare
+ CLEANFILES+=	y.tab.h
++
++install:
++	$(INSTALL) -m 555 -g wheel -o root relayd $(PREFIX)/sbin
++
++install-man:
++	$(INSTALL) -m 444 -g wheel -o root relayd.conf.5 $(PREFIX)/man/man5
++	$(INSTALL) -m 444 -g wheel -o root relayd.8 $(PREFIX)/man/man8
+ 
+ .include <bsd.prog.mk>
diff --git a/net/relayd/files/patch-d-carp.c b/net/relayd/files/patch-d-carp.c
new file mode 100644
index 000000000000..57cafacf3229
--- /dev/null
+++ b/net/relayd/files/patch-d-carp.c
@@ -0,0 +1,44 @@
+--- relayd/carp.c.orig	2007-12-08 02:17:00.000000000 +0900
++++ relayd/carp.c	2008-01-14 08:43:07.745281030 +0900
+@@ -19,6 +19,7 @@
+ #include <sys/param.h>
+ #include <sys/socket.h>
+ #include <sys/ioctl.h>
++#include <sys/queue.h>
+ 
+ #include <net/if.h>
+ 
+@@ -105,6 +106,7 @@
+ int
+ carp_demote_get(char *group)
+ {
++#if 0
+ 	int			s;
+ 	struct ifgroupreq	ifgr;
+ 
+@@ -131,6 +133,9 @@
+ 
+ 	close(s);
+ 	return ((int)ifgr.ifgr_attrib.ifg_carp_demoted);
++#else
++	return (-1);
++#endif
+ }
+ 
+ int
+@@ -188,6 +193,7 @@
+ int
+ carp_demote_ioctl(char *group, int demote)
+ {
++#if 0
+ 	int			s, res;
+ 	struct ifgroupreq	ifgr;
+ 
+@@ -214,4 +220,7 @@
+ 
+ 	close(s);
+ 	return (res);
++#else
++	return (-1);
++#endif
+ }
diff --git a/net/relayd/files/patch-d-check_icmp.c b/net/relayd/files/patch-d-check_icmp.c
new file mode 100644
index 000000000000..5fa746a3f234
--- /dev/null
+++ b/net/relayd/files/patch-d-check_icmp.c
@@ -0,0 +1,11 @@
+--- relayd/check_icmp.c.orig	2008-01-14 10:10:32.881133017 +0900
++++ relayd/check_icmp.c	2008-01-14 10:10:45.169385174 +0900
+@@ -16,7 +16,7 @@
+  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+  */
+ 
+-#include <sys/types.h>
++#include <sys/param.h>
+ #include <sys/queue.h>
+ #include <sys/socket.h>
+ 
diff --git a/net/relayd/files/patch-d-check_tcp.c b/net/relayd/files/patch-d-check_tcp.c
new file mode 100644
index 000000000000..44db31fc5190
--- /dev/null
+++ b/net/relayd/files/patch-d-check_tcp.c
@@ -0,0 +1,47 @@
+--- relayd/check_tcp.c.orig	2007-12-08 02:17:00.000000000 +0900
++++ relayd/check_tcp.c	2008-01-14 16:47:41.131892553 +0900
+@@ -31,7 +31,7 @@
+ #include <stdlib.h>
+ #include <errno.h>
+ #include <fnmatch.h>
+-#include <sha1.h>
++#include <sha.h>
+ 
+ #include <openssl/ssl.h>
+ 
+@@ -285,7 +285,7 @@
+ 	if (b == NULL)
+ 		fatal("out of memory");
+ 	*b = '\0';
+-	if (fnmatch(cte->table->conf.exbuf, cte->buf->buf, 0) == 0) {
++	if (fnmatch(cte->table->conf.exbuf, (char *)cte->buf->buf, 0) == 0) {
+ 		cte->host->up = HOST_UP;
+ 		return (0);
+ 	}
+@@ -316,7 +316,7 @@
+ 		fatal("out of memory");
+ 	*b = '\0';
+ 
+-	head = cte->buf->buf;
++	head = (char *)cte->buf->buf;
+ 	host = cte->host;
+ 	if (strncmp(head, "HTTP/1.1 ", strlen("HTTP/1.1 ")) &&
+ 	    strncmp(head, "HTTP/1.0 ", strlen("HTTP/1.0 "))) {
+@@ -363,7 +363,7 @@
+ 		fatal("out of memory");
+ 	*b = '\0';
+ 
+-	head = cte->buf->buf;
++	head = (char *)cte->buf->buf;
+ 	host = cte->host;
+ 	if ((head = strstr(head, "\r\n\r\n")) == NULL) {
+ 		log_debug("check_http_digest: %s failed "
+@@ -373,7 +373,7 @@
+ 	}
+ 	head += strlen("\r\n\r\n");
+ 
+-	digeststr(cte->table->conf.digest_type, head, strlen(head), digest);
++	digeststr(cte->table->conf.digest_type, (u_int8_t*)head, strlen(head), digest);
+ 
+ 	if (strcmp(cte->table->conf.digest, digest)) {
+ 		log_warnx("check_http_digest: %s failed "
diff --git a/net/relayd/files/patch-d-log.c b/net/relayd/files/patch-d-log.c
new file mode 100644
index 000000000000..0811fecce71d
--- /dev/null
+++ b/net/relayd/files/patch-d-log.c
@@ -0,0 +1,11 @@
+--- relayd/log.c.orig	2008-01-14 09:59:27.825621568 +0900
++++ relayd/log.c	2008-01-14 09:59:36.888069516 +0900
+@@ -16,7 +16,7 @@
+  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+  */
+ 
+-#include <sys/types.h>
++#include <sys/param.h>
+ #include <sys/queue.h>
+ #include <sys/socket.h>
+ #include <sys/tree.h>
diff --git a/net/relayd/files/patch-d-parse.y b/net/relayd/files/patch-d-parse.y
new file mode 100644
index 000000000000..7bf00396a128
--- /dev/null
+++ b/net/relayd/files/patch-d-parse.y
@@ -0,0 +1,11 @@
+--- relayd/parse.y.orig	Tue Jun  5 20:12:20 2007
++++ relayd/parse.y	Tue Jun  5 20:12:51 2007
+@@ -1561,7 +1561,7 @@
+ 	hints.ai_family = PF_UNSPEC;
+ 	hints.ai_socktype = SOCK_DGRAM; /* DUMMY */
+ 	error = getaddrinfo(s, NULL, &hints, &res0);
+-	if (error == EAI_AGAIN || error == EAI_NODATA || error == EAI_NONAME)
++	if (error == EAI_AGAIN || error == EAI_NONAME)
+ 		return (0);
+ 	if (error) {
+ 		log_warnx("host_dns: could not parse \"%s\": %s", s,
diff --git a/net/relayd/files/patch-d-pfe.c b/net/relayd/files/patch-d-pfe.c
new file mode 100644
index 000000000000..196f13933648
--- /dev/null
+++ b/net/relayd/files/patch-d-pfe.c
@@ -0,0 +1,10 @@
+--- relayd/pfe.c.orig	2008-01-14 10:06:37.013495830 +0900
++++ relayd/pfe.c	2008-01-14 10:06:47.508856711 +0900
+@@ -17,6 +17,7 @@
+  */
+ 
+ #include <sys/param.h>
++#include <sys/queue.h>
+ #include <sys/stat.h>
+ #include <sys/socket.h>
+ #include <sys/un.h>
diff --git a/net/relayd/files/patch-d-pfe_filter.c b/net/relayd/files/patch-d-pfe_filter.c
new file mode 100644
index 000000000000..fb2747b28b0e
--- /dev/null
+++ b/net/relayd/files/patch-d-pfe_filter.c
@@ -0,0 +1,45 @@
+--- relayd/pfe_filter.c.orig	2007-12-21 05:15:43.000000000 +0900
++++ relayd/pfe_filter.c	2008-01-20 15:31:28.856798863 +0900
+@@ -89,6 +89,7 @@
+ 		    sizeof(tables[i].pfrt_name))
+ 			goto toolong;
+ 		tables[i].pfrt_flags |= PFR_TFLAG_PERSIST;
++		log_debug("init_tables: prepare anchor \"%s\" and table \"%s\"", tables[i].pfrt_anchor, tables[i].pfrt_name);
+ 		i++;
+ 	}
+ 	if (i != env->rdrcount)
+@@ -239,10 +240,15 @@
+ 	    sizeof(io.pfrio_table.pfrt_name)) >=
+ 	    sizeof(io.pfrio_table.pfrt_name))
+ 		goto toolong;
++	/* pfctl -Tflush */
+ 	if (ioctl(env->pf->dev, DIOCRCLRADDRS, &io) == -1)
+ 		fatal("flush_table: cannot flush table addresses");
++	/* pfctl -Tzero */
++#if 0
++	/* XXX: ioctl(DIOCRCLRTSTATS) requires io.pfrio_esize to be set as sizeof(struct pfr_table), but here doesn't set it. */
+ 	if (ioctl(env->pf->dev, DIOCRCLRTSTATS, &io) == -1)
+ 		fatal("flush_table: cannot flush table stats");
++#endif
+ 	log_debug("flush_table: flushed table %s", rdr->conf.name);
+ 	return;
+ 
+@@ -321,7 +327,9 @@
+ 		rio.rule.dst.addr.type = PF_ADDR_ADDRMASK;
+ 		rio.rule.dst.port_op = PF_OP_EQ;
+ 		rio.rule.dst.port[0] = address->port;
++#if 0
+ 		rio.rule.rtableid = -1; /* stay in the main routing table */
++#endif
+ 		rio.rule.action = PF_RDR;
+ 		if (strlen(rdr->conf.tag))
+ 			(void)strlcpy(rio.rule.tagname, rdr->conf.tag,
+@@ -362,7 +370,7 @@
+ 
+ 		if (ioctl(env->pf->dev, DIOCADDRULE, &rio) == -1)
+ 			fatal("cannot add rule");
+-		log_debug("sync_ruleset: rule added");
++		log_debug("sync_ruleset: rule added into anchor \"%s\", table \"%s\"", rio.anchor, pio.addr.addr.v.tblname);
+ 	}
+ 	if (transaction_commit(env) == -1)
+ 		log_warn("sync_ruleset: add rules transaction failed");
diff --git a/net/relayd/files/patch-d-relay.c b/net/relayd/files/patch-d-relay.c
new file mode 100644
index 000000000000..c170b2736a3a
--- /dev/null
+++ b/net/relayd/files/patch-d-relay.c
@@ -0,0 +1,72 @@
+--- relayd/relay.c.orig	2007-12-09 05:36:36.000000000 +0900
++++ relayd/relay.c	2008-01-14 10:26:05.345356528 +0900
+@@ -16,7 +16,7 @@
+  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+  */
+ 
+-#include <sys/types.h>
++#include <sys/param.h>
+ #include <sys/queue.h>
+ #include <sys/time.h>
+ #include <sys/stat.h>
+@@ -675,6 +675,7 @@
+ 		    &val, sizeof(val)) == -1)
+ 			goto bad;
+ 	}
++#if 0
+ 	if (proto->tcpflags & (TCPFLAG_SACK|TCPFLAG_NSACK)) {
+ 		if (proto->tcpflags & TCPFLAG_NSACK)
+ 			val = 0;
+@@ -684,6 +685,7 @@
+ 		    &val, sizeof(val)) == -1)
+ 			goto bad;
+ 	}
++#endif
+ 
+ 	return (s);
+ 
+@@ -1000,7 +1002,7 @@
+ 		}
+ 	}
+ 	if (strstr(val, "$TIMEOUT") != NULL) {
+-		snprintf(ibuf, sizeof(ibuf), "%lu", rlay->conf.timeout.tv_sec);
++		snprintf(ibuf, sizeof(ibuf), "%lu", (unsigned long)rlay->conf.timeout.tv_sec);
+ 		if (expand_string(buf, len, "$TIMEOUT", ibuf) != 0)
+ 			return (NULL);
+ 	}
+@@ -1565,7 +1567,7 @@
+ 	switch (type) {
+ 	case DIGEST_SHA1:
+ 	case DIGEST_MD5:
+-		if ((md = digeststr(type, val, strlen(val), NULL)) == NULL) {
++		if ((md = digeststr(type, (u_int8_t*)val, strlen(val), NULL)) == NULL) {
+ 			relay_close_http(con, 500,
+ 			    "failed to allocate digest", 0);
+ 			goto fail;
+@@ -2469,7 +2471,7 @@
+ 		goto err;
+ 
+ 	/* Set session context to the local relay name */
+-	if (!SSL_CTX_set_session_id_context(ctx, rlay->conf.name,
++	if (!SSL_CTX_set_session_id_context(ctx, (unsigned char*)rlay->conf.name,
+ 	    strlen(rlay->conf.name)))
+ 		goto err;
+ 
+@@ -2849,7 +2851,7 @@
+ 	if (fstat(fd, &st) != 0)
+ 		goto fail;
+ 	size = st.st_size;
+-	if ((buf = (char *)calloc(1, size + 1)) == NULL)
++	if ((buf = (u_int8_t *)calloc(1, size + 1)) == NULL)
+ 		goto fail;
+ 	if (read(fd, buf, size) != size)
+ 		goto fail;
+@@ -2857,7 +2859,7 @@
+ 	close(fd);
+ 
+ 	*len = size + 1;
+-	return (buf);
++	return (char *)(buf);
+ 
+  fail:
+ 	if (buf != NULL)
diff --git a/net/relayd/files/patch-d-relay_udp.c b/net/relayd/files/patch-d-relay_udp.c
new file mode 100644
index 000000000000..9b233242a145
--- /dev/null
+++ b/net/relayd/files/patch-d-relay_udp.c
@@ -0,0 +1,11 @@
+--- relayd/relay_udp.c.orig	2008-01-14 10:09:08.345280942 +0900
++++ relayd/relay_udp.c	2008-01-14 10:09:21.665469901 +0900
+@@ -16,7 +16,7 @@
+  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+  */
+ 
+-#include <sys/types.h>
++#include <sys/param.h>
+ #include <sys/queue.h>
+ #include <sys/time.h>
+ #include <sys/stat.h>
diff --git a/net/relayd/files/patch-d-relayd.8 b/net/relayd/files/patch-d-relayd.8
new file mode 100644
index 000000000000..c58d299a6c3a
--- /dev/null
+++ b/net/relayd/files/patch-d-relayd.8
@@ -0,0 +1,20 @@
+--- relayd/relayd.8.orig	2007-12-12 23:55:12.000000000 +0900
++++ relayd/relayd.8	2008-01-14 08:47:34.673073391 +0900
+@@ -116,7 +116,7 @@
+ .It Fl f Ar file
+ Specify an alternative configuration file.
+ The default is
+-.Pa /etc/relayd.conf .
++.Pa %%PREFIX%%/etc/relayd.conf .
+ .It Fl n
+ Configtest mode.
+ Only check the configuration file for validity.
+@@ -125,7 +125,7 @@
+ .El
+ .Sh FILES
+ .Bl -tag -width "/var/run/relayd.sockXX" -compact
+-.It /etc/relayd.conf
++.It %%PREFIX%%/etc/relayd.conf
+ Default configuration file.
+ .It /var/run/relayd.sock
+ Unix-domain socket used for communication with
diff --git a/net/relayd/files/patch-d-relayd.c b/net/relayd/files/patch-d-relayd.c
new file mode 100644
index 000000000000..19be09b14b3c
--- /dev/null
+++ b/net/relayd/files/patch-d-relayd.c
@@ -0,0 +1,29 @@
+--- relayd/relayd.c.orig	2008-01-14 10:00:21.487354557 +0900
++++ relayd/relayd.c	2008-01-14 16:44:45.705572691 +0900
+@@ -16,7 +16,7 @@
+  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+  */
+ 
+-#include <sys/types.h>
++#include <sys/param.h>
+ #include <sys/queue.h>
+ #include <sys/socket.h>
+ #include <sys/wait.h>
+@@ -36,7 +36,7 @@
+ #include <unistd.h>
+ #include <ctype.h>
+ #include <pwd.h>
+-#include <sha1.h>
++#include <sha.h>
+ #include <md5.h>
+ 
+ #include <openssl/ssl.h>
+@@ -943,7 +943,7 @@
+ {
+ 	switch (type) {
+ 	case DIGEST_SHA1:
+-		return (SHA1Data(data, len, buf));
++		return (SHA1_Data(data, len, buf));
+ 		break;
+ 	case DIGEST_MD5:
+ 		return (MD5Data(data, len, buf));
diff --git a/net/relayd/files/patch-d-relayd.conf.5 b/net/relayd/files/patch-d-relayd.conf.5
new file mode 100644
index 000000000000..f1afc511f8d5
--- /dev/null
+++ b/net/relayd/files/patch-d-relayd.conf.5
@@ -0,0 +1,33 @@
+--- relayd/relayd.conf.5.orig	2007-12-12 23:55:12.000000000 +0900
++++ relayd/relayd.conf.5	2008-01-14 08:49:46.404074048 +0900
+@@ -101,20 +101,7 @@
+ Here are the settings that can be set globally:
+ .Pp
+ .Bl -tag -width Ds -compact
+-.It Ic demote Ar group
+-Enable the global
+-.Xr carp 4
+-demotion option, resetting the carp demotion counter for the
+-specified interface group to zero on startup and to 128 on shutdown of
+-the daemon.
+-For more information on interface groups,
+-see the
+-.Ic group
+-keyword in
+-.Xr ifconfig 8 .
+-.Pp
+-.It Xo
+-.Ic interval Ar number
++.It Ic interval Ar number
+ .Xc
+ Set the interval in seconds at which the hosts will be checked.
+ The default interval is 10 seconds.
+@@ -894,7 +881,7 @@
+ .El
+ .Sh FILES
+ .Bl -tag -width "/etc/ssl/private/address.keyXX" -compact
+-.It Pa /etc/relayd.conf
++.It Pa %%PREFIX%%/etc/relayd.conf
+ .Xr relayd 8
+ configuration file.
+ .Pp
diff --git a/net/relayd/files/patch-d-relayd.h b/net/relayd/files/patch-d-relayd.h
new file mode 100644
index 000000000000..ed7863fe17c1
--- /dev/null
+++ b/net/relayd/files/patch-d-relayd.h
@@ -0,0 +1,27 @@
+--- relayd/relayd.h.orig	2007-12-21 05:15:43.000000000 +0900
++++ relayd/relayd.h	2008-01-14 10:02:42.803752108 +0900
+@@ -20,7 +20,7 @@
+ 
+ #include <sys/tree.h>
+ 
+-#define CONF_FILE		"/etc/relayd.conf"
++#define CONF_FILE		"%%PREFIX%%/etc/relayd.conf"
+ #define RELAYD_SOCKET		"/var/run/relayd.sock"
+ #define PF_SOCKET		"/dev/pf"
+ #define RELAYD_USER		"_relayd"
+@@ -56,6 +56,15 @@
+ #define PURGE_PROTOS		0x08
+ #define PURGE_EVERYTHING	0xff
+ 
++#define	SIMPLEQ_HEAD		STAILQ_HEAD
++#define	SIMPLEQ_FIRST		STAILQ_FIRST
++#define	SIMPLEQ_REMOVE_HEAD	STAILQ_REMOVE_HEAD
++#define	SIMPLEQ_ENTRY		STAILQ_ENTRY
++#define	SIMPLEQ_INIT		STAILQ_INIT
++#define	SIMPLEQ_EMPTY		STAILQ_EMPTY
++#define	SIMPLEQ_NEXT		STAILQ_NEXT
++#define	SIMPLEQ_INSERT_TAIL	STAILQ_INSERT_TAIL
++
+ /* buffer */
+ struct buf {
+ 	TAILQ_ENTRY(buf)	 entry;
diff --git a/net/relayd/files/relayd.in b/net/relayd/files/relayd.in
new file mode 100644
index 000000000000..b2c6f85ec28b
--- /dev/null
+++ b/net/relayd/files/relayd.in
@@ -0,0 +1,27 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+# PROVIDE: relayd
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+#
+# relayd_enable (bool):
+#
+# relayd_flags:
+#
+
+. %%RC_SUBR%%
+
+name=relayd
+rcvar=${name}_enable
+
+load_rc_config $name
+
+: ${relayd_enable="NO"}
+: ${relayd_flags=""}
+
+command="%%PREFIX%%/sbin/relayd"
+command_args="${relayd_flags}"
+
+run_rc_command "$1"
diff --git a/net/relayd/pkg-descr b/net/relayd/pkg-descr
new file mode 100644
index 000000000000..83a1435a3713
--- /dev/null
+++ b/net/relayd/pkg-descr
@@ -0,0 +1,7 @@
+relayd is a daemon to relay and dynamically redirect incoming
+connections to a target host. Its main purposes are to run as a
+load-balancer, application layer gateway, or transparent proxy. The
+daemon is able to monitor groups of hosts for availability, which is
+determined by checking for a specific service common to a host group.
+
+WWW: http://spootnik.org/relayd/
diff --git a/net/relayd/pkg-install b/net/relayd/pkg-install
new file mode 100644
index 000000000000..51d59c7df480
--- /dev/null
+++ b/net/relayd/pkg-install
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# $FreeBSD$
+
+case $2 in
+PRE-INSTALL)
+	USER=${RUSER}
+	GROUP=${RGROUP}
+	UID=913
+	GID=913
+
+	if pw group show "${GROUP}" 2>/dev/null; then
+		echo "You already have a group \"${GROUP}\", so I will use it."
+	else
+		if pw groupadd ${GROUP} -g ${GID}; then
+			echo "Added group \"${GROUP}\"."
+		else
+			echo "Adding group \"${GROUP}\" failed..."
+			exit 1
+		fi
+	fi
+
+	if pw user show "${USER}" 2>/dev/null; then
+		echo "You already have a user \"${USER}\", so I will use it."
+	else
+		if pw useradd ${USER} -u ${UID} -g ${GROUP} -h - \
+			-d /var/empty -c "Relay Daemon" -s /usr/sbin/nologin
+		then
+			echo "Added user \"${USER}\"."
+		else
+			echo "Adding user \"${USER}\" failed..."
+			exit 1
+		fi
+	fi
+	;;
+esac
diff --git a/net/relayd/pkg-plist b/net/relayd/pkg-plist
new file mode 100644
index 000000000000..3b7ff0926a3c
--- /dev/null
+++ b/net/relayd/pkg-plist
@@ -0,0 +1,3 @@
+sbin/relayctl
+sbin/relayd
+@unexec echo "Warning: If you will *NOT* use this package anymore, please remove the _relayd user manually."
-- 
cgit v1.2.3