On Fri 03/07/2020 23:14, Bjorn Ketelaars wrote:
> Diff below brings ocserv to 1.1.0. Biggest change is that ocserv
> switched from fork to fork/exec model to achieve better scaling.
> Implementation of this fork/exec model does not really agree with
> OpenBSD because it depends heavily on procfs, which we do not have.
> Upstream was so friendly to address this issue in the upcoming release
> (1.1.1). In the meantime I propose to cherry-pick the fix.
>
> Overview on changes can be found at
> https://gitlab.com/openconnect/ocserv/-/blob/1.1.0/NEWS.
>
> 'make test' runs successfully. Run tested on amd64.
>
> Comments/OK?
Ping...
Diff enclosed for your convenience.
diff --git Makefile Makefile
index 6c0b80e762d..5bbae2e5aa3 100644
--- Makefile
+++ Makefile
@@ -2,7 +2,7 @@
COMMENT= server implementing the AnyConnect SSL VPN protocol
-DISTNAME= ocserv-1.0.1
+DISTNAME= ocserv-1.1.0
EXTRACT_SUFX= .tar.xz
CATEGORIES= net
@@ -34,7 +34,8 @@ LIB_DEPENDS= archivers/lz4 \
security/openpam
TEST_DEPENDS= net/openconnect \
shells/bash \
- sysutils/coreutils
+ sysutils/coreutils \
+ textproc/gsed
CONFIGURE_STYLE= autoconf
CONFIGURE_ARGS= --without-docker-tests \
@@ -79,6 +80,7 @@ post-install:
# tests use socket_wrapper, which is not in ports.
pre-test:
ln -fs ${LOCALBASE}/bin/gtimeout ${WRKDIR}/bin/timeout
+ ln -fs ${LOCALBASE}/bin/gsed ${WRKDIR}/bin/sed
sed -i 's#\/bin\/true#\/usr\/bin\/true#g' ${WRKSRC}/tests/test-*
post-test:
diff --git distinfo distinfo
index d426fcd637a..9bf8734762b 100644
--- distinfo
+++ distinfo
@@ -1,2 +1,2 @@
-SHA256 (ocserv-1.0.1.tar.xz) = Wdnvehrrlf9udi4qDyMbP64upCD2ihzwnTmiY5UED0s=
-SIZE (ocserv-1.0.1.tar.xz) = 787800
+SHA256 (ocserv-1.1.0.tar.xz) = o/r+hHsIvexams1y5pjf13zpeZyxkUZndSbmeUuUp3k=
+SIZE (ocserv-1.1.0.tar.xz) = 806964
diff --git patches/patch-configure_ac patches/patch-configure_ac
index e2a13a78076..b9f58a5cc1e 100644
--- patches/patch-configure_ac
+++ patches/patch-configure_ac
@@ -1,8 +1,12 @@
$OpenBSD: patch-configure_ac,v 1.12 2019/12/29 07:28:22 bket Exp $
+
+OpenBSD does not have procfs. Taken from
+https://gitlab.com/openconnect/ocserv/-/merge_requests/184
+
Index: configure.ac
--- configure.ac.orig
+++ configure.ac
-@@ -199,7 +199,7 @@ if test "$test_for_geoip" = yes && test "$have_maxmind
+@@ -211,7 +211,7 @@ if test "$test_for_geoip" = yes && test "$have_maxmind
fi
have_readline=no
@@ -11,3 +15,12 @@ Index: configure.ac
#include <stdio.h>
#include <readline/readline.h>], [rl_replace_line(0,0);])
if test x$ac_cv_libreadline = xyes; then
+@@ -641,6 +641,8 @@ fi
+
+ AM_CONDITIONAL(ENABLE_OIDC_AUTH, test "x$enable_oidc_auth" = xyes)
+ AM_CONDITIONAL(ENABLE_OIDC_AUTH_TESTS, test "x$enable_oidc_auth" = xyes)
++
++AC_CHECK_FILE(/proc/self/exe, AC_DEFINE([PROC_FS_SUPPORTED],[1], [procfs
supported]), [])
+
+ uid=$(id -u)
+ gid=$(id -g)
diff --git patches/patch-src_config_c patches/patch-src_config_c
new file mode 100644
index 00000000000..fc4755622e5
--- /dev/null
+++ patches/patch-src_config_c
@@ -0,0 +1,44 @@
+$OpenBSD$
+
+OpenBSD does not have procfs. Taken from
+https://gitlab.com/openconnect/ocserv/-/merge_requests/184
+
+Index: src/config.c
+--- src/config.c.orig
++++ src/config.c
+@@ -1130,6 +1130,7 @@ static void parse_cfg_file(void *pool, const char *fil
+ ctx.reload = (flags&CFG_FLAG_RELOAD)?1:0;
+ ctx.head = head;
+
++#if defined(PROC_FS_SUPPORTED)
+ // Worker always reads from snapshot
+ if ((flags & CFG_FLAG_WORKER) == CFG_FLAG_WORKER) {
+ char * snapshot_file = NULL;
+@@ -1192,6 +1193,27 @@ static void parse_cfg_file(void *pool, const char *fil
+ }
+
+ }
++#else
++ const char * cfg_file = file;
++
++ if (cfg_file == NULL) {
++ fprintf(stderr, ERRSTR"no config file!\n");
++ exit(1);
++ }
++
++ /* parse configuration
++ */
++ ret = ini_parse(cfg_file, cfg_ini_handler, &ctx);
++ if (ret < 0 && file != NULL && strcmp(file, DEFAULT_CFG_FILE) == 0) {
++ cfg_file = OLD_DEFAULT_CFG_FILE;
++ ret = ini_parse(cfg_file, cfg_ini_handler, &ctx);
++ }
++
++ if (ret < 0) {
++ fprintf(stderr, ERRSTR"cannot load config file %s\n", cfg_file);
++ exit(1);
++ }
++#endif
+
+ /* apply configuration not yet applied.
+ * We start from the last, which is the default server (firstly
diff --git patches/patch-src_main_c patches/patch-src_main_c
new file mode 100644
index 00000000000..e28883b602d
--- /dev/null
+++ patches/patch-src_main_c
@@ -0,0 +1,53 @@
+$OpenBSD$
+
+OpenBSD does not have procfs. Taken from
+https://gitlab.com/openconnect/ocserv/-/merge_requests/184
+
+Index: src/main.c
+--- src/main.c.orig
++++ src/main.c
+@@ -1009,9 +1009,7 @@ static void listen_watcher_cb (EV_P_ ev_io *w, int rev
+ int cmd_fd[2];
+ pid_t pid;
+ hmac_component_st hmac_components[3];
+- char path[_POSIX_PATH_MAX];
+ char worker_path[_POSIX_PATH_MAX];
+- size_t path_length;
+
+ if (ltmp->sock_type == SOCK_TYPE_TCP || ltmp->sock_type ==
SOCK_TYPE_UNIX) {
+ /* connection on TCP port */
+@@ -1111,16 +1109,27 @@ static void listen_watcher_cb (EV_P_ ev_io *w, int rev
+ safe_memset((uint8_t*)s->hmac_key, 0,
sizeof(s->hmac_key));
+
+ set_env_from_ws(s);
+- path_length = readlink("/proc/self/exe", path,
sizeof(path)-1);
+- if (path_length == -1) {
+- mslog(s, NULL, LOG_ERR, "readlink failed %s",
strerror(ret));
+- exit(1);
++#if defined(PROC_FS_SUPPORTED)
++ {
++ char path[_POSIX_PATH_MAX];
++ size_t path_length;
++ path_length = readlink("/proc/self/exe", path,
sizeof(path)-1);
++ if (path_length == -1) {
++ mslog(s, NULL, LOG_ERR, "readlink
failed %s", strerror(ret));
++ exit(1);
++ }
++ path[path_length] = '\0';
++ if (snprintf(worker_path, sizeof(worker_path),
"%s-worker", path) >= sizeof(worker_path)) {
++ mslog(s, NULL, LOG_ERR, "snprint of
path %s and ocserv-worker failed", path);
++ exit(1);
++ }
+ }
+- path[path_length] = '\0';
+- if (snprintf(worker_path, sizeof(worker_path),
"%s-worker", path) >= sizeof(worker_path)) {
+- mslog(s, NULL, LOG_ERR, "snprint of path %s and
ocserv-worker failed", path);
++#else
++ if (snprintf(worker_path, sizeof(worker_path),
"%s-worker", worker_argv[0]) >= sizeof(worker_path)) {
++ mslog(s, NULL, LOG_ERR, "snprint of path %s and
ocserv-worker failed", worker_argv[0]);
+ exit(1);
+ }
++#endif
+
+ worker_argv[0] = worker_path;
+ execv(worker_path, worker_argv);
diff --git patches/patch-src_occtl_occtl_c patches/patch-src_occtl_occtl_c
index c921e90f255..4e302651af5 100644
--- patches/patch-src_occtl_occtl_c
+++ patches/patch-src_occtl_occtl_c
@@ -2,7 +2,7 @@ $OpenBSD: patch-src_occtl_occtl_c,v 1.4 2018/01/12 22:28:51
sthen Exp $
Index: src/occtl/occtl.c
--- src/occtl/occtl.c.orig
+++ src/occtl/occtl.c
-@@ -249,7 +249,7 @@ static int handle_help_cmd(CONN_TYPE * conn, const cha
+@@ -264,7 +264,7 @@ static int handle_help_cmd(CONN_TYPE * conn, const cha
static int handle_reset_cmd(CONN_TYPE * conn, const char *arg, cmd_params_st
*params)
{
rl_reset_terminal(NULL);
diff --git patches/patch-tests_common_sh patches/patch-tests_common_sh
new file mode 100644
index 00000000000..b1dae805f02
--- /dev/null
+++ patches/patch-tests_common_sh
@@ -0,0 +1,14 @@
+$OpenBSD$
+
+Index: tests/common.sh
+--- tests/common.sh.orig
++++ tests/common.sh
+@@ -23,7 +23,7 @@
+
+ builddir=${builddir:-.}
+
+-OPENCONNECT=${OPENCONNECT:-$(which openconnect)}
++OPENCONNECT=${LOCALBASE}/sbin/openconnect
+
+ if test -z "${OPENCONNECT}" || ! test -x ${OPENCONNECT};then
+ echo "You need openconnect to run this test"
diff --git pkg/PLIST pkg/PLIST
index ff2feaeb728..1f85d474737 100644
--- pkg/PLIST
+++ pkg/PLIST
@@ -8,6 +8,7 @@
@man man/man8/ocpasswd.8
@man man/man8/ocserv.8
@bin sbin/ocserv
+@bin sbin/ocserv-worker
share/examples/ocserv/
share/examples/ocserv/ocserv-fw
share/examples/ocserv/profile.xml