chiark / gitweb /
initscript: check firewall
[hippotat.git] / debian / hippotat.init
index c0e4d7eb5955cd1a51df5e81536276a8450e0a11..640bd8f26a24a795fccab59c3c048f4557facb83 100644 (file)
@@ -15,8 +15,11 @@ MASTER_CONFIG=/etc/hippotat/master.cfg
 USER=Debian-hippotat
 PIDFILE=/var/run/hippotat/hippotatd.pid
 LOGFACILITY=daemon
+CHECK_FIREWALL=true
 # HIPPOTATD_ARGS
+AS_USER=as_user_userv
 DESCRIPTION='Asinine IP over HTTP server'
+if type -p authbind >/dev/null 2>&1; then AUTHBIND=authbind; fi
 
 . /etc/default/hippotatd
 
@@ -25,6 +28,13 @@ egrep '^[^   #]' $MASTER_CONFIG >/dev/null 2>&1 || exit 0
 
 . /lib/lsb/init-functions
 
+as_user_userv () {
+       userv --override '
+               execute-from-path
+               no-suppress-args
+       ' $USER "$@"
+}
+
 ssd () {
        set +e
        start-stop-daemon --start --quiet --user $USER --pidfile=$PIDFILE "$@"
@@ -38,10 +48,28 @@ ensure_dirs () {
        chown $USER $pidfiledir
 }
 
+dump_firewall () {
+       iptables -L -v -n
+}
+
+print_config () {
+       $AS_USER $DAEMON $HIPPOTATD_ARGS --print-config "$1"
+}
+
+check_firewall () {
+       vnetwork=$(print_config vnetwork)
+       if dump_firewall | fgrep " $vnetwork " >/dev/null; then :; else
+               log_failure_msg \
+ "no entry in firewall for insecure vnetwork $vnetwork"
+               exit 1
+       fi
+}
+
 do_start () {
+       check_firewall
        ensure_dirs
-       ssd     --chuid $USER --startas \
-               $DAEMON --daemon --pidfile=$PIDFILE \
+       ssd     --chuid $USER --startas                         \
+               $AUTHBIND $DAEMON --daemon --pidfile=$PIDFILE   \
                --syslog-facility=$LOGFACILITY $HIPPOTATD_ARGS
 }
 do_stop () {