diff --git a/net/wifidog-ng/Makefile b/net/wifidog-ng/Makefile index ecaf54044..3909e2a13 100644 --- a/net/wifidog-ng/Makefile +++ b/net/wifidog-ng/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=wifidog-ng PKG_VERSION:=2.0.0 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT) diff --git a/net/wifidog-ng/files/wifidog-ng.init b/net/wifidog-ng/files/wifidog-ng.init index f39373278..d88acb5ea 100644 --- a/net/wifidog-ng/files/wifidog-ng.init +++ b/net/wifidog-ng/files/wifidog-ng.init @@ -5,117 +5,131 @@ START=95 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() { - local cfg="$1" - local enabled interface - - uci_validate_section wifidog-ng gateway "${1}" \ - 'enabled:bool:0' \ - 'interface:uci("network", "@interface"):lan' \ - 'dhcp_host_white:bool:1' - - [ $? -ne 0 ] && { - echo "validation gateway failed" >&2 - exit 1 - } - - [ $enabled -eq 1 ] || exit 0 - - # timeout = 49 days - ipset -! create wifidog-ng-mac hash:mac timeout 4294967 - ipset -! create wifidog-ng-ip hash:ip - - modprobe wifidog-ng - echo "enabled=1" > /proc/wifidog-ng/config - - procd_open_instance - procd_set_param command $BIN - procd_set_param respawn - procd_close_instance + [ "$2" = 0 ] || { + echo "validation gateway failed" >&2 + exit 1 + } + + [ $enabled = 1 ] || exit 0 + + [ $dhcp_host_white = 1 ] || global_dhcp_host_white=0 + + # timeout = 24.855 days + ipset -! create wifidog-ng-mac hash:mac timeout 2147483 + ipset -! create wifidog-ng-ip hash:ip + + modprobe wifidog-ng + echo "enabled=1" > /proc/wifidog-ng/config + + procd_open_instance + procd_set_param command $BIN + procd_set_param respawn + procd_close_instance +} + +validate_server_section() { + uci_load_validate wifidog-ng server "$1" "$2" \ + 'host:host' } parse_server() { - local cfg="$1" - local host - - config_get host $cfg host - validate_data ip4addr "$host" 2> /dev/null - if [ $? -eq 0 ]; - then - ipset add wifidog-ng-ip $host - else - echo "ipset=/$host/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng - fi + [ "$2" = 0 ] || { + echo "validation server failed" >&2 + exit 1 + } + + 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 +validate_validated_user_section() { + uci_load_validate wifidog-ng validated_user "$1" "$2" \ + 'mac:macaddr' +} - uci_validate_section wifidog-ng validated_user "${1}" \ - 'mac:macaddr' +parse_validated_user() { + [ "$2" = 0 ] || { + echo "validation validated_user failed" >&2 + exit 1 + } - [ $? -ne 0 ] && { - echo "validation validated_user failed" >&2 - exit 1 - } + [ -n "$mac" ] && ipset add wifidog-ng-mac $mac +} - [ -n "$mac" ] && ipset add wifidog-ng-mac $mac +validate_validated_domain_section() { + uci_load_validate wifidog-ng validated_domain "$1" "$2" \ + 'domain:host' } parse_validated_domain() { - local cfg="$1" - local domain + [ "$2" = 0 ] || { + echo "validation validated_domain failed" >&2 + exit 1 + } - uci_validate_section wifidog-ng validated_domain "${1}" \ - 'domain:host' - - [ $? -ne 0 ] && { - echo "validation validated_domain failed" >&2 - exit 1 - } + [ -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 +validate_dhcp_host_section() { + uci_load_validate dhcp host "$1" "$2" \ + 'mac:macaddr' } parse_dhcp_host() { - local cfg="$1" - local mac ip + [ "$2" = 0 ] || { + echo "validation validated dhcp host failed" >&2 + exit 1 + } - uci_validate_section dhcp host "${1}" \ - 'mac:macaddr' - - [ $? -ne 0 ] && { - echo "validation validated dhcp host failed" >&2 - exit 1 - } - - [ -n "$mac" ] && ipset add wifidog-ng-mac $mac + [ -n "$mac" ] && ipset add wifidog-ng-mac $mac } start_service() { - config_load wifidog-ng - config_foreach start_wifidog gateway + config_load wifidog-ng + 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 ] && { - config_load dhcp - config_foreach parse_dhcp_host host - } + [ $global_dhcp_host_white = 1 ] && { + config_load dhcp + config_foreach validate_dhcp_host_section host parse_dhcp_host + } - /etc/init.d/dnsmasq restart & + /etc/init.d/dnsmasq restart & } stop_service() { - rmmod wifidog-ng + rmmod wifidog-ng + + ipset destroy wifidog-ng-mac + ipset destroy wifidog-ng-ip +} + +service_triggers() { + procd_add_reload_trigger "wifidog-ng" - ipset destroy wifidog-ng-mac - ipset destroy wifidog-ng-ip + procd_open_validate + validate_gateway_section + validate_server_section + validate_validated_user_section + validate_validated_domain_section + validate_dhcp_host_section + procd_close_validate }