char cmd;
switch (sig) {
+ case SIGTERM:
case SIGINT:
cmd = OC_CMD_CANCEL;
break;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = handle_signal;
+ sigaction(SIGTERM, &sa, NULL);
sigaction(SIGINT, &sa, NULL);
sigaction(SIGHUP, &sa, NULL);
sigaction(SIGUSR2, &sa, NULL);
ret = 1;
break;
case -EINTR:
- vpn_progress(vpninfo, PRG_INFO, _("User cancelled (SIGINT); exiting.\n"));
+ vpn_progress(vpninfo, PRG_INFO, _("User cancelled (SIGINT/SIGTERM); exiting.\n"));
ret = 0;
break;
case -ECONNABORTED:
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2018 Nikos Mavrogiannopoulos
+#
+# This file is part of ocserv.
+#
+# ocserv is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at
+# your option) any later version.
+#
+# ocserv is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+# This tests operation/traffic under compression (lzs or lz4).
+
+OCCTL="${OCCTL:-occtl}"
+SERV="${OCSERV:-ocserv}"
+srcdir=${srcdir:-.}
+PORT=4569
+PIDFILE=ocserv-pid.$$.tmp
+CLIPID=oc-pid.$$.tmp
+PATH=${PATH}:/usr/sbin
+IP=$(which ip)
+OUTFILE=traffic.$$.tmp
+export DISCONNECT_FILE=disconnected-ok.$$.tmp
+
+. `dirname $0`/common.sh
+
+rm -f ${DISCONNECT_FILE}
+
+if test -z "${IP}";then
+ echo "no IP tool is present"
+ exit 77
+fi
+
+if test "$(id -u)" != "0";then
+ echo "This test must be run as root"
+ exit 77
+fi
+
+echo "Testing ocserv connection with DTLS-PSK... "
+
+function finish {
+ set +e
+ echo " * Cleaning up..."
+ test -n "${PID}" && kill ${PID} >/dev/null 2>&1
+ test -n "${PIDFILE}" && rm -f ${PIDFILE} >/dev/null 2>&1
+ test -f "${CLIPID}" && kill $(cat ${CLIPID}) >/dev/null 2>&1
+ test -f "${CLIPID}" && rm -f ${CLIPID} >/dev/null 2>&1
+ test -n "${CONFIG}" && rm -f ${CONFIG} >/dev/null 2>&1
+ rm -f ${OUTFILE} 2>&1
+}
+trap finish EXIT
+
+# server address
+ADDRESS=10.202.2.1
+CLI_ADDRESS=10.202.1.1
+VPNNET=192.168.3.0/24
+VPNADDR=192.168.3.1
+VPNNET6=fd91:6d87:8341:dc6a::/112
+VPNADDR6=fd91:6d87:8341:dc6a::1
+OCCTL_SOCKET=./occtl-comp-$$.socket
+USERNAME=test
+TUNDEV=oc-$$-tun0
+
+. `dirname $0`/ns.sh
+
+# Run servers
+update_config test-dtls-psk.config
+if test "$VERBOSE" = 1;then
+DEBUG="-d 3"
+fi
+
+${CMDNS2} ${SERV} -p ${PIDFILE} -f -c ${CONFIG} ${DEBUG} & PID=$!
+
+sleep 4
+
+# Run clients
+echo " * Getting cookie from ${ADDRESS}:${PORT}..."
+( echo "test" | ${CMDNS1} ${OPENCONNECT} ${ADDRESS}:${PORT} -u ${USERNAME} --servercert=d66b507ae074d03b02eafca40d35f87dd81049d3 --cookieonly )
+if test $? != 0;then
+ echo "Could not get cookie from server"
+ exit 1
+fi
+
+echo " * Connecting to ${ADDRESS}:${PORT}..."
+( echo "test" | ${CMDNS1} ${OPENCONNECT} --interface ${TUNDEV} --dtls-ciphers=PSK-NEGOTIATE ${ADDRESS}:${PORT} -u ${USERNAME} --servercert=d66b507ae074d03b02eafca40d35f87dd81049d3 -s ${srcdir}/scripts/vpnc-script-detect-disconnect --pid-file=${CLIPID} --passwd-on-stdin -b )
+if test $? != 0;then
+ echo "Could not connect to server"
+ exit 1
+fi
+
+set -e
+
+echo " * wait for ${TUNDEV}"
+
+TIMEOUT=10
+while ! ${CMDNS1} ip addr list dev ${TUNDEV} &>/dev/null; do
+ TIMEOUT=$(($TIMEOUT - 1))
+ if [ $TIMEOUT -eq 0 ]; then
+ echo "Timed out waiting for ${TUNDEV}"
+ exit 1
+ fi
+ sleep 1
+done
+
+echo " * add routes"
+
+${CMDNS1} ip route add ${VPNADDR} dev ${TUNDEV}
+${CMDNS1} ip -6 route add ${VPNADDR6} dev ${TUNDEV}
+
+echo " * ping remote address"
+
+${CMDNS1} ping -c 3 ${VPNADDR}
+
+test -f "${CLIPID}" && kill $(cat ${CLIPID}) >/dev/null 2>&1
+rm -f "${CLIPID}"
+
+sleep 5
+
+if ! test -f ${DISCONNECT_FILE};then
+ echo "Could not find ${DISCONNECT_FILE}"
+ exit 1
+fi
+
+exit 0