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' \
'interface:uci("network", "@interface"):lan' \
'dhcp_host_white:bool:1'
+}
- [ $? -ne 0 ] && {
+start_wifidog() {
+ [ "$2" = 0 ] || {
echo "validation gateway failed" >&2
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
modprobe wifidog-ng
procd_close_instance
}
+validate_server_section() {
+ uci_load_validate wifidog-ng server "$1" "$2" \
+ 'host:host'
+}
+
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
else
echo "ipset=/$host/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
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'
+}
- [ $? -ne 0 ] && {
+parse_validated_user() {
+ [ "$2" = 0 ] || {
echo "validation validated_user failed" >&2
exit 1
}
[ -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'
+}
- [ $? -ne 0 ] && {
+parse_validated_domain() {
+ [ "$2" = 0 ] || {
echo "validation validated_domain failed" >&2
exit 1
}
[ -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'
+}
- [ $? -ne 0 ] && {
+parse_dhcp_host() {
+ [ "$2" = 0 ] || {
echo "validation validated dhcp host failed" >&2
exit 1
}
start_service() {
config_load wifidog-ng
- config_foreach start_wifidog gateway
+ config_foreach validate_gateway_section gateway start_wifidog
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_foreach parse_dhcp_host host
+ config_foreach validate_dhcp_host_section host parse_dhcp_host
}
/etc/init.d/dnsmasq restart &
ipset destroy wifidog-ng-mac
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
+}