Merge pull request #8127 from jefferyto/wifidog-ng-init

wifidog-ng: Update init script
This commit is contained in:
Rosen Penev 2019-04-14 11:46:41 -07:00 committed by GitHub
commit e6333ef0ed
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 92 additions and 78 deletions

View file

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=wifidog-ng PKG_NAME:=wifidog-ng
PKG_VERSION:=2.0.0 PKG_VERSION:=2.0.0
PKG_RELEASE:=1 PKG_RELEASE:=2
PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT) PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)

View file

@ -5,117 +5,131 @@ START=95
BIN=/usr/bin/wifidog-ng BIN=/usr/bin/wifidog-ng
dhcp_host_white=1 global_dhcp_host_white=1
validate_gateway_section() {
uci_load_validate wifidog-ng gateway "$1" "$2" \
'enabled:bool:0' \
'interface:uci("network", "@interface"):lan' \
'dhcp_host_white:bool:1'
}
start_wifidog() { start_wifidog() {
local cfg="$1" [ "$2" = 0 ] || {
local enabled interface echo "validation gateway failed" >&2
exit 1
}
uci_validate_section wifidog-ng gateway "${1}" \ [ $enabled = 1 ] || exit 0
'enabled:bool:0' \
'interface:uci("network", "@interface"):lan' \
'dhcp_host_white:bool:1'
[ $? -ne 0 ] && { [ $dhcp_host_white = 1 ] || global_dhcp_host_white=0
echo "validation gateway failed" >&2
exit 1
}
[ $enabled -eq 1 ] || exit 0 # timeout = 24.855 days
ipset -! create wifidog-ng-mac hash:mac timeout 2147483
ipset -! create wifidog-ng-ip hash:ip
# timeout = 49 days modprobe wifidog-ng
ipset -! create wifidog-ng-mac hash:mac timeout 4294967 echo "enabled=1" > /proc/wifidog-ng/config
ipset -! create wifidog-ng-ip hash:ip
modprobe wifidog-ng procd_open_instance
echo "enabled=1" > /proc/wifidog-ng/config procd_set_param command $BIN
procd_set_param respawn
procd_close_instance
}
procd_open_instance validate_server_section() {
procd_set_param command $BIN uci_load_validate wifidog-ng server "$1" "$2" \
procd_set_param respawn 'host:host'
procd_close_instance
} }
parse_server() { parse_server() {
local cfg="$1" [ "$2" = 0 ] || {
local host echo "validation server failed" >&2
exit 1
}
config_get host $cfg host if validate_data ip4addr "$host" 2> /dev/null; then
validate_data ip4addr "$host" 2> /dev/null ipset add wifidog-ng-ip $host
if [ $? -eq 0 ]; else
then echo "ipset=/$host/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
ipset add wifidog-ng-ip $host fi
else }
echo "ipset=/$host/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
fi validate_validated_user_section() {
uci_load_validate wifidog-ng validated_user "$1" "$2" \
'mac:macaddr'
} }
parse_validated_user() { parse_validated_user() {
local cfg="$1" [ "$2" = 0 ] || {
local mac ip echo "validation validated_user failed" >&2
exit 1
}
uci_validate_section wifidog-ng validated_user "${1}" \ [ -n "$mac" ] && ipset add wifidog-ng-mac $mac
'mac:macaddr' }
[ $? -ne 0 ] && { validate_validated_domain_section() {
echo "validation validated_user failed" >&2 uci_load_validate wifidog-ng validated_domain "$1" "$2" \
exit 1 'domain:host'
}
[ -n "$mac" ] && ipset add wifidog-ng-mac $mac
} }
parse_validated_domain() { parse_validated_domain() {
local cfg="$1" [ "$2" = 0 ] || {
local domain echo "validation validated_domain failed" >&2
exit 1
}
uci_validate_section wifidog-ng validated_domain "${1}" \ [ -n "$domain" ] && echo "ipset=/$domain/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
'domain:host' }
[ $? -ne 0 ] && { validate_dhcp_host_section() {
echo "validation validated_domain failed" >&2 uci_load_validate dhcp host "$1" "$2" \
exit 1 'mac:macaddr'
}
[ -n "$domain" ] && echo "ipset=/$domain/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
} }
parse_dhcp_host() { parse_dhcp_host() {
local cfg="$1" [ "$2" = 0 ] || {
local mac ip echo "validation validated dhcp host failed" >&2
exit 1
}
uci_validate_section dhcp host "${1}" \ [ -n "$mac" ] && ipset add wifidog-ng-mac $mac
'mac:macaddr'
[ $? -ne 0 ] && {
echo "validation validated dhcp host failed" >&2
exit 1
}
[ -n "$mac" ] && ipset add wifidog-ng-mac $mac
} }
start_service() { start_service() {
config_load wifidog-ng config_load wifidog-ng
config_foreach start_wifidog gateway config_foreach validate_gateway_section gateway start_wifidog
echo -n > /tmp/dnsmasq.d/wifidog-ng echo -n > /tmp/dnsmasq.d/wifidog-ng
config_foreach parse_server server config_foreach validate_server_section server parse_server
config_foreach parse_validated_user validated_user config_foreach validate_validated_user_section validated_user parse_validated_user
config_foreach parse_validated_domain validated_domain config_foreach validate_validated_domain_section validated_domain parse_validated_domain
[ $dhcp_host_white -eq 1 ] && { [ $global_dhcp_host_white = 1 ] && {
config_load dhcp config_load dhcp
config_foreach parse_dhcp_host host config_foreach validate_dhcp_host_section host parse_dhcp_host
} }
/etc/init.d/dnsmasq restart & /etc/init.d/dnsmasq restart &
} }
stop_service() { stop_service() {
rmmod wifidog-ng rmmod wifidog-ng
ipset destroy wifidog-ng-mac ipset destroy wifidog-ng-mac
ipset destroy wifidog-ng-ip ipset destroy wifidog-ng-ip
}
service_triggers() {
procd_add_reload_trigger "wifidog-ng"
procd_open_validate
validate_gateway_section
validate_server_section
validate_validated_user_section
validate_validated_domain_section
validate_dhcp_host_section
procd_close_validate
} }