#!/bin/bash CONFIGFILE="/etc/default/dnscrypt-proxy" DAEMON="/usr/sbin/dnscrypt-proxy" . $CONFIGFILE start_instance() { if [ ! -r ${DNSCRYPTCONFIG[$1]} ]; then echo "No configuration for instance $1 found!" return fi if [ -z ${PIDFILE[$1]} ]; then echo "No PID configuration for instance $1 found!" return fi if [ -z ${USER[$1]} ]; then echo "No user configuration for instance $1 found!" return fi if [ -r ${PIDFILE[$1]} ]; then echo "dnscrypt-proxy (instance $1) already running!" return fi mkdir -p $(dirname ${PIDFILE[$1]}) # The child (unprivileged) process needs write access or the PID will not # be written. chmod 0700 $(dirname ${PIDFILE[$1]}) chown ${USER[$1]} $(dirname ${PIDFILE[$1]}) # The new Go-based dnscrypt-proxy no longer has the ability to daemonize. # In the absence of a standard Slackware daemon tool we'll use nohup. :( nohup $DAEMON -config ${DNSCRYPTCONFIG[$1]} -pidfile ${PIDFILE[$1]} >> /dev/null 2>&1 & } stop_instance() { if [ ! -r ${DNSCRYPTCONFIG[$1]} ]; then echo "No configuration for instance $1 found!" return fi if [ -z ${PIDFILE[$1]} ]; then echo "No PID configuration for instance $1 found!" return fi if [ ! -r ${PIDFILE[$1]} ]; then echo "dnscrypt-proxy (instance $1) is not running!" return fi echo "Stopping dnscrypt-proxy (instance $1)..." kill $(cat ${PIDFILE[$1]}) } status_instance() { if [ ! -r ${DNSCRYPTCONFIG[$1]} ]; then echo "No configuration for instance $1 found!" return fi if [ -z ${PIDFILE[$1]} ]; then echo "No PID configuration for instance $1 found!" return fi if [ ! -r ${PIDFILE[$1]} ]; then echo "dnscrypt-proxy (instance $1) is not running." return fi PID=$(cat ${PIDFILE[$1]}) if [ -z "$PID" ]; then echo "PID file is empty! dnscrypt-proxy (instance $1) does not appear to be running, but there is a stale PID file." elif kill -0 $PID ; then echo "dnscrypt-proxy (instance $1) is running." else echo "dnscrypt-proxy (instance $1) is not running, but there is a stale PID file." fi } start() { for i in `/usr/bin/seq 0 $((${#DNSCRYPTCONFIG[@]}-1))` do start_instance $i done } stop() { for i in `/usr/bin/seq 0 $((${#DNSCRYPTCONFIG[@]}-1))` do stop_instance $i done } status() { for i in `/usr/bin/seq 0 $((${#DNSCRYPTCONFIG[@]}-1))` do status_instance $i done } case "$1" in 'start') start ;; 'stop') stop ;; 'restart') stop start ;; 'status') status ;; *_start) INSTANCE=`echo $1 | /bin/cut -d '_' -f 1` start_instance $INSTANCE ;; *_stop) INSTANCE=`echo $1 | /bin/cut -d '_' -f 1` stop_instance $INSTANCE ;; *_restart) INSTANCE=`echo $1 | /bin/cut -d '_' -f 1` stop_instance $INSTANCE sleep 1 start_instance $INSTANCE ;; *_status) INSTANCE=`echo $1 | /bin/cut -d '_' -f 1` status_instance $INSTANCE ;; *) echo "Usage: $0 {start|stop|restart|status|#_start|#_stop|#_restart}" exit 1 ;; esac