#!/bin/sh /etc/rc.common # Copyright (C) 2018 Jean-Michel Lacroix USE_PROCD=1 START=60 APP=darkstat RUN_D=/var/darkstat PID_F=$RUN_D/$APP.pid CONFIGNAME=darkstat USER=nobody GROUP=nogroup CONFIGSTR="" FILTERSTR="" export_bool () { local option="$1" local section="$2" local _keystr="$3" local _loctmp config_get_bool _loctmp "$section" "$option" if [ -n "$_loctmp" ]; then if [ 1 -eq "$_loctmp" ]; then CONFIGSTR="$CONFIGSTR${_keystr} " fi fi } set_config_string(){ mkdir -p $RUN_D . /lib/functions/network.sh config_load $CONFIGNAME config_foreach build_config_string darkstat } build_config_string() { local cfg="$1" config_get interface $cfg interface network_get_device ifname "$interface" CONFIGSTR=" -i $ifname " export_bool syslog $cfg "--syslog" export_bool verbose $cfg "--verbose" # We need the --no-daemon parameter as with PROCD the process has to run in the background CONFIGSTR="$CONFIGSTR--no-daemon " export_bool no_promisc $cfg "--no-promisc" export_bool no_dns $cfg "--no-dns" export_bool no_macs $cfg "--no-macs" export_bool no_lastseen $cfg "--no-lastseen" config_get httpaddr $cfg httpaddr CONFIGSTR="$CONFIGSTR${httpaddr:+-b "$httpaddr"} " config_get httpport $cfg httpport CONFIGSTR="$CONFIGSTR${httpport:+-p "$httpport"} " config_get network_netmask $cfg network_netmask CONFIGSTR="$CONFIGSTR${network_netmask:+-l "$network_netmask"} " export_bool local_only $cfg "--local-only" config_get hosts_max $cfg hosts_max CONFIGSTR="$CONFIGSTR${hosts_max:+--hosts-max "$hosts_max"} " config_get hosts_keep $cfg hosts_keep CONFIGSTR="$CONFIGSTR${ports_keep:+--ports-keep "$ports_keep"} " config_get highest_port $cfg highest_port CONFIGSTR="$CONFIGSTR${highest_port:+--highest-port "$highest_port"} " config_get export_file $cfg export_file CONFIGSTR="$CONFIGSTR${export_file:+--export "$export_file"} " config_get import_file $cfg import_file CONFIGSTR="$CONFIGSTR${import_file:+--import "$import_file"} " config_get daylog_file $cfg daylog_file CONFIGSTR="$CONFIGSTR${daylog_file:+--daylog "$daylog_file"} " CONFIGSTR="$CONFIGSTR--chroot $RUN_D --pidfile $PID_F" # Now that we have the configuration string (CONFIGSTR), let us get the filter (FILTERSTR) config_get network_filter $cfg network_filter FILTERSTR="${network_filter:+$network_filter}" } service_triggers() { procd_add_reload_trigger $CONFIGNAME } start_service() { set_config_string procd_open_instance procd_set_param command /usr/sbin/$APP procd_append_param command $CONFIGSTR # Let us check if we have a filter string and apply it if we do if [ "$FILTERSTR" != "" ]; then procd_append_param command "-f" "$FILTERSTR" fi procd_close_instance } stop_service() { rm -f $PID_F } reload_service() { stop start }