123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #!/sbin/openrc-run
- # Copyright 1999-2012 Gentoo Foundation
- # Distributed under the terms of the GNU General Public License v2
- VPN="${RC_SVCNAME#*.}"
- VPNLOG="/var/log/openconnect/${VPN}"
- VPNLOGFILE="${VPNLOG}/openconnect.log"
- VPNERRFILE="${VPNLOG}/openconnect.err"
- VPNPID="/run/openconnect/${VPN}.pid"
- VPNDIR="/etc/openconnect/${VPN}"
- PREUPSCRIPT="${VPNDIR}/preup.sh"
- PREDOWNSCRIPT="${VPNDIR}/predown.sh"
- POSTUPSCRIPT="${VPNDIR}/postup.sh"
- POSTDOWNSCRIPT="${VPNDIR}/postdown.sh"
- SERVER="server_${VPN}"
- PASSWORD="password_${VPN}"
- VPNOPTS="vpnopts_${VPN}"
- 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:"
- echo
- eerror "ln -s /etc/init.d/openconnect /etc/init.d/openconnect.vpn0"
- echo
- eerror "And then call it instead:"
- echo
- eerror "/etc/init.d/openconnect.vpn0 start"
- return 1
- fi
- }
- checktuntap() {
- if [ $(uname -s) = "Linux" ] ; then
- if [ ! -e /dev/net/tun ]; then
- if ! modprobe tun ; then
- eerror "TUN/TAP support is not available in this kernel"
- return 1
- fi
- fi
- if [ -h /dev/net/tun ] && [ -c /dev/misc/net/tun ]; then
- ebegin "Detected broken /dev/net/tun symlink, fixing..."
- rm -f /dev/net/tun
- ln -s /dev/misc/net/tun /dev/net/tun
- eend $?
- fi
- fi
- }
- start() {
- ebegin "Starting OpenConnect: ${VPN}"
- checkconfig || return 1
- checktuntap || return 1
- if [ "${!SERVER}" == "vpn.server.tld" ]; then
- eend 1 "${VPN} not configured"
- return 1
- fi
- if [ ! -e "${VPNLOG}" ]; then
- mkdir -p "${VPNLOG}"
- fi
- local piddir="${VPNPID%/*}"
- if [ ! -d "$piddir" ] ; then
- mkdir -p "$piddir"
- if [ $? -ne 0 ]; then
- eerror "Directory $piddir for pidfile does not exist and cannot be created"
- return 1
- fi
- fi
- if [ -x "${PREUPSCRIPT}" ] ; then
- "${PREUPSCRIPT}"
- fi
- start-stop-daemon --start --make-pidfile --pidfile "${VPNPID}" --stderr "${VPNERRFILE}" --stdout "${VPNLOGFILE}" --background \
- --exec /usr/sbin/openconnect \
- -- --pid-file="${VPNPID}" ${!VPNOPTS} ${!SERVER} <<< ${!PASSWORD}
- local retval=$?
- if [ ! ${retval} -eq 0 ]; then
- eend ${retval}
- return ${retval}
- fi
- if [ -x "${POSTUPSCRIPT}" ] ; then
- "${POSTUPSCRIPT}"
- fi
- eend $?
- }
- stop() {
- ebegin "Stopping OpenConnect: ${VPN}"
- checkconfig || return 1
- if [ -x "${PREDOWNSCRIPT}" ] ; then
- "${PREDOWNSCRIPT}"
- fi
- start-stop-daemon --pidfile "${VPNPID}" --stop /usr/sbin/openconnect
- local retval=$?
- if [ ! ${retval} -eq 0 ]; then
- eend ${retval}
- return ${retval}
- fi
- if [ -x "${POSTDOWNSCRIPT}" ] ; then
- "${POSTDOWNSCRIPT}"
- fi
- eend $?
- }
|