#!/bin/bash . /etc/rc.conf . /etc/rc.d/functions CFGDIR="/etc/openvpn" STATEDIR="/var/run/openvpn" SVCNAME="$(basename $0)" case "$1" in start) stat_busy "Starting OpenVPN ... " success=0 mkdir -p "${STATEDIR}" if [ "${SVCNAME}" == "openvpn" ]; then for cfg in "${CFGDIR}"/*.conf; do echo -n " - $(basename "${cfg}" .conf) " /usr/sbin/openvpn --daemon --writepid "${STATEDIR}"/"$(basename "${cfg}" .conf)".pid --cd "${CFGDIR}" --config "${cfg}" || success=$? if [ $success -eq 0 ]; then add_daemon "openvpn.$(basename "${cfg}" .conf)" stat_done else stat_fail fi done else cfg="${SVCNAME#*.}.conf" stat_append "$(basename "${cfg}" .conf) " /usr/sbin/openvpn --daemon --writepid "${STATEDIR}"/"$(basename "${cfg}" .conf)".pid --cd "${CFGDIR}" --config "${cfg}" || success=$? if [ $success -eq 0 ]; then add_daemon $SVCNAME stat_done else stat_fail fi fi ;; stop) stat_busy "Stopping OpenVPN ..." if [ "${SVCNAME}" == "openvpn" ]; then for pidfile in "${STATEDIR}"/*.pid; do echo -n " - $(basename "${pidfile}" .pid) " kill $(cat "${pidfile}" 2>/dev/null) 2>/dev/null rm -f "${pidfile}" rm_daemon "openvpn.$(basename "${cfg}" .conf)" stat_done done else pidfile="${STATEDIR}"/"${SVCNAME#*.}.pid" stat_append "${pidfile#.*} " kill $(cat "${pidfile}" 2>/dev/null) 2>/dev/null rm -f "${pidfile}" rm_daemon ${SVCNAME} stat_done fi ;; restart) $0 stop sleep 1 $0 start ;; status) stat_busy "Checking ${SVCNAME} status"; if [ "${SVCNAME}" == "openvpn" ]; then for cfg in "${CFGDIR}"/*.conf; do cfg="openvpn.$(basename "${cfg}" .conf)" echo -n " - $cfg" ck_status $cfg done else ck_status $SVCNAME fi ;; *) echo "usage: $0 {start|stop|restart|status}" esac exit 0