@ -5,26 +5,27 @@ START=95
BIN=/usr/bin/wifidog-ng
BIN=/usr/bin/wifidog-ng
dhcp_host_white=1
global_ dhcp_host_white=1
start_wifidog() {
local cfg="$1"
local enabled interface
uci_validate_section wifidog-ng gateway "${1}" \
validate_gateway_section() {
uci_load_validate wifidog-ng gateway "$1" "$2" \
'enabled:bool:0' \
'enabled:bool:0' \
'interface:uci("network", "@interface"):lan' \
'interface:uci("network", "@interface"):lan' \
'dhcp_host_white:bool:1'
'dhcp_host_white:bool:1'
}
[ $? -ne 0 ] && {
start_wifidog() {
[ "$2" = 0 ] || {
echo "validation gateway failed" >&2
echo "validation gateway failed" >&2
exit 1
exit 1
}
}
[ $enabled -eq 1 ] || exit 0
[ $enabled = 1 ] || exit 0
[ $dhcp_host_white = 1 ] || global_dhcp_host_white=0
# timeout = 49 days
ipset -! create wifidog-ng-mac hash:mac timeout 4294967
# timeout = 24.855 days
ipset -! create wifidog-ng-mac hash:mac timeout 2147483
ipset -! create wifidog-ng-ip hash:ip
ipset -! create wifidog-ng-ip hash:ip
modprobe wifidog-ng
modprobe wifidog-ng
@ -36,28 +37,31 @@ start_wifidog() {
procd_close_instance
procd_close_instance
}
}
validate_server_section() {
uci_load_validate wifidog-ng server "$1" "$2" \
'host:host'
}
parse_server() {
parse_server() {
local cfg="$1"
local host
[ "$2" = 0 ] || {
echo "validation server failed" >&2
exit 1
}
config_get host $cfg host
validate_data ip4addr "$host" 2> /dev/null
if [ $? -eq 0 ];
then
if validate_data ip4addr "$host" 2> /dev/null; then
ipset add wifidog-ng-ip $host
ipset add wifidog-ng-ip $host
else
else
echo "ipset=/$host/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
echo "ipset=/$host/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
fi
fi
}
}
parse_validated_user() {
local cfg="$1"
local mac ip
uci_validate_section wifidog-ng validated_user "${1}" \
validate_validated_user_section() {
uci_load_validate wifidog-ng validated_user "$1" "$2" \
'mac:macaddr'
'mac:macaddr'
}
[ $? -ne 0 ] && {
parse_validated_user() {
[ "$2" = 0 ] || {
echo "validation validated_user failed" >&2
echo "validation validated_user failed" >&2
exit 1
exit 1
}
}
@ -65,14 +69,13 @@ parse_validated_user() {
[ -n "$mac" ] && ipset add wifidog-ng-mac $mac
[ -n "$mac" ] && ipset add wifidog-ng-mac $mac
}
}
parse_validated_domain() {
local cfg="$1"
local domain
uci_validate_section wifidog-ng validated_domain "${1}" \
validate_validated_domain_section() {
uci_load_validate wifidog-ng validated_domain "$1" "$2" \
'domain:host'
'domain:host'
}
[ $? -ne 0 ] && {
parse_validated_domain() {
[ "$2" = 0 ] || {
echo "validation validated_domain failed" >&2
echo "validation validated_domain failed" >&2
exit 1
exit 1
}
}
@ -80,14 +83,13 @@ parse_validated_domain() {
[ -n "$domain" ] && echo "ipset=/$domain/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
[ -n "$domain" ] && echo "ipset=/$domain/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
}
}
parse_dhcp_host() {
local cfg="$1"
local mac ip
uci_validate_section dhcp host "${1}" \
validate_dhcp_host_section() {
uci_load_validate dhcp host "$1" "$2" \
'mac:macaddr'
'mac:macaddr'
}
[ $? -ne 0 ] && {
parse_dhcp_host() {
[ "$2" = 0 ] || {
echo "validation validated dhcp host failed" >&2
echo "validation validated dhcp host failed" >&2
exit 1
exit 1
}
}
@ -97,17 +99,17 @@ parse_dhcp_host() {
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 parse_validated_user validated_user
config_foreach parse_validated_domain validated_domain
config_foreach validate_server_section server parse_ server
config_foreach validate_validated_user_section validated_user parse_ validated_user
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 &
@ -119,3 +121,15 @@ stop_service() {
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
}