diff options
Diffstat (limited to 'net-vpn/openconnect/files/openconnect.initd')
-rw-r--r-- | net-vpn/openconnect/files/openconnect.initd | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/net-vpn/openconnect/files/openconnect.initd b/net-vpn/openconnect/files/openconnect.initd new file mode 100644 index 000000000000..7b33920f498c --- /dev/null +++ b/net-vpn/openconnect/files/openconnect.initd @@ -0,0 +1,109 @@ +#!/sbin/openrc-run +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +VPN="${RC_SVCNAME#*.}" +VPNCONF=/etc/openconnect/${VPN}.conf +VPNDIR="/etc/openconnect/${VPN}" +VPNLOG="/var/log/openconnect/${VPN}" +VPNLOGFILE="${VPNLOG}/openconnect.log" +VPNERRFILE="${VPNLOG}/openconnect.err" + +command="/usr/sbin/openconnect" +name="OpenConnect: ${VPN}" +pidfile="/run/openconnect/${VPN}.pid" +stopsig="SIGINT" + +depend() { + before netmount +} + +checkconfig() { + if [ $VPN = "openconnect" ]; then + eerror "You cannot call openconnect directly. You must create a symbolic link to it with the vpn name:" + eerror + eerror "ln -s /etc/init.d/openconnect /etc/init.d/openconnect.vpn0" + eerror + eerror "And then call it instead:" + eerror + eerror "/etc/init.d/openconnect.vpn0 start" + return 1 + fi + return 0 +} + +checktuntap() { + if [ "$RC_UNAME" = "Linux" -a ! -e /dev/net/tun ] ; then + if ! modprobe tun ; then + eerror "TUN/TAP support is not available in this kernel" + return 1 + fi + fi +} + +run_hook() { + if [ -x "$1" ]; then + "$@" + fi +} + +start_pre() { + checkconfig || return + checktuntap || return + checkpath -d "${VPNLOG}" || return + checkpath -d /run/openconnect || return + run_hook "${VPNDIR}/preup.sh" +} + +ssd_helper() { + if [ -n "${password}" ]; then + start-stop-daemon "$@" <<EOF +${password} +EOF + else + start-stop-daemon "$@" + fi +} + +start() { + local server vpnopts password + eval server=\$server_${VPN} + eval vpnopts=\$vpnopts_${VPN} + eval password=\$password_${VPN} + + local config= + if [ -e "${VPNCONF}" ]; then + config="--config=${VPNCONF}" + fi + + # Allow quoted whitespace in vpnopts. + eval set -- ${vpnopts} + + ebegin "Starting ${name}" + ssd_helper --start \ + --exec "${command}" \ + --pidfile "${pidfile}" \ + -- \ + --background \ + ${config} \ + --interface="${VPN}" \ + --pid-file="${pidfile}" \ + "$@" \ + "${server}" \ + >> "${VPNLOGFILE}" \ + 2>> "${VPNERRFILE}" + eend $? +} + +start_post() { + run_hook "${VPNDIR}/postup.sh" +} + +stop_pre() { + checkconfig || return + run_hook "${VPNDIR}/predown.sh" +} + +stop_post() { + run_hook "${VPNDIR}/postdown.sh" +} |