slackbuilds_ponce/network/dnscrypt-proxy/rc.dnscrypt-proxy

179 lines
4.9 KiB
Text
Raw Normal View History

#!/bin/bash
CONFIGFILE="/etc/default/dnscrypt-proxy"
DAEMON="/usr/sbin/dnscrypt-proxy"
. $CONFIGFILE
start_instance() {
if [ -z ${PIDFILE[$1]} ]; then
echo "No configuration for instance $1 found!"
return
fi
if [ -r ${PIDFILE[$1]} ]; then
echo "dnscrypt-proxy (instance $1) already running!"
return
fi
# dnscrypt-proxy will work without this, but it drops privileges before
# seeding the PRNG. libevent tries to work around a missing /dev/urandom
# but it's safer just to make sure it is available in the chroot.
if [ -n "${CHROOTDIR[$1]}" ]; then
if [ "$(readlink -f ${CHROOTDIR[$1]})" != "/" ]; then
if [ ! -d ${CHROOTDIR[$1]} ]; then
mkdir -p ${CHROOTDIR[$1]}
chmod 755 ${CHROOTDIR[$1]}
fi
if [ ! -d ${CHROOTDIR[$1]}/dev ]; then
mkdir -p ${CHROOTDIR[$1]}/dev
chmod 755 ${CHROOTDIR[$1]}/dev
fi
if [ ! -c ${CHROOTDIR[$1]}/dev/urandom ]; then
mknod -m 666 ${CHROOTDIR[$1]}/dev/urandom c 1 9
fi
fi
fi
OPTIONS="-d"
if [ -n "${LOCALADDRESS[$1]}" ]; then
OPTIONS="${OPTIONS} --local-address=${LOCALADDRESS[$1]}"
fi
if [ -n "${PIDFILE[$1]}" ]; then
OPTIONS="${OPTIONS} --pidfile=${PIDFILE[$1]}"
fi
if [ -n "${USER[$1]}" ]; then
OPTIONS="${OPTIONS} --user=${USER[$1]}"
fi
if [ -n "${RESOLVERNAME[$1]}" ]; then
OPTIONS="${OPTIONS} --resolver-name=${RESOLVERNAME[$1]}"
fi
if [ -n "${RESOLVERSLIST[$1]}" ]; then
OPTIONS="${OPTIONS} --resolvers-list=${RESOLVERSLIST[$1]}"
fi
if [ -z "${RESOLVERNAME[$1]}" ] && [ -n "${RESOLVERADDRESS[$1]}" ]; then
OPTIONS="${OPTIONS} --resolver-address=${RESOLVERADDRESS[$1]}"
fi
if [ -z "${RESOLVERNAME[$1]}" ] && [ -n "${PROVIDERNAME[$1]}" ]; then
OPTIONS="${OPTIONS} --provider-name=${PROVIDERNAME[$1]}"
fi
if [ -z "${RESOLVERNAME[$1]}" ] && [ -n "${PROVIDERKEY[$1]}" ]; then
OPTIONS="${OPTIONS} --provider-key=${PROVIDERKEY[$1]}"
fi
if [ "${EPHEMERALKEYS[$1]}" == "yes" ]; then
OPTIONS="${OPTIONS} --ephemeral-keys"
fi
if [ -n "${EDNSPAYLOADSIZE[$1]}" ]; then
OPTIONS="${OPTIONS} --edns-payload-size=${EDNSPAYLOADSIZE[$1]}"
fi
if [ -n "${MAXACTIVEREQUESTS[$1]}" ]; then
OPTIONS="${OPTIONS} --max-active-requests=${MAXACTIVEREQUESTS[$1]}"
fi
if [ "${TCPONLY[$1]}" == "yes" ]; then
OPTIONS="${OPTIONS} --tcp-only"
fi
if [ -n "${PLUGINS[$1]}" ]; then
for plugin in ${PLUGINS[$1]}
do
OPTIONS="${OPTIONS} --plugin=${plugin}"
done
fi
if [ -n "${LOGLEVEL[$1]}" ]; then
OPTIONS="${OPTIONS} --loglevel=${LOGLEVEL[$1]}"
fi
if [ -n "${LOGFILE[$1]}" ]; then
OPTIONS="${OPTIONS} --logfile=${LOGFILE[$1]}"
fi
$DAEMON $OPTIONS
}
stop_instance() {
if [ -z ${PIDFILE[$1]} ]; then
echo "No 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 [ -z ${PIDFILE[$1]} ]; then
echo "No 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 $((${#PIDFILE[@]}-1))`
do
start_instance $i
done
}
stop() {
for i in `/usr/bin/seq 0 $((${#PIDFILE[@]}-1))`
do
stop_instance $i
done
}
status() {
for i in `/usr/bin/seq 0 $((${#PIDFILE[@]}-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