You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
2.7 KiB

  1. #!/bin/sh /etc/rc.common
  2. USE_PROCD=1
  3. START=95
  4. BIN=/usr/bin/wifidog-ng
  5. global_dhcp_host_white=1
  6. validate_gateway_section() {
  7. uci_load_validate wifidog-ng gateway "$1" "$2" \
  8. 'enabled:bool:0' \
  9. 'interface:uci("network", "@interface"):lan' \
  10. 'dhcp_host_white:bool:1'
  11. }
  12. start_wifidog() {
  13. [ "$2" = 0 ] || {
  14. echo "validation gateway failed" >&2
  15. exit 1
  16. }
  17. [ $enabled = 1 ] || exit 0
  18. [ $dhcp_host_white = 1 ] || global_dhcp_host_white=0
  19. # timeout = 24.855 days
  20. ipset -! create wifidog-ng-mac hash:mac timeout 2147483
  21. ipset -! create wifidog-ng-ip hash:ip
  22. modprobe wifidog-ng
  23. echo "enabled=1" > /proc/wifidog-ng/config
  24. procd_open_instance
  25. procd_set_param command $BIN
  26. procd_set_param respawn
  27. procd_close_instance
  28. }
  29. validate_server_section() {
  30. uci_load_validate wifidog-ng server "$1" "$2" \
  31. 'host:host'
  32. }
  33. parse_server() {
  34. [ "$2" = 0 ] || {
  35. echo "validation server failed" >&2
  36. exit 1
  37. }
  38. if validate_data ip4addr "$host" 2> /dev/null; then
  39. ipset add wifidog-ng-ip $host
  40. else
  41. echo "ipset=/$host/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
  42. fi
  43. }
  44. validate_validated_user_section() {
  45. uci_load_validate wifidog-ng validated_user "$1" "$2" \
  46. 'mac:macaddr'
  47. }
  48. parse_validated_user() {
  49. [ "$2" = 0 ] || {
  50. echo "validation validated_user failed" >&2
  51. exit 1
  52. }
  53. [ -n "$mac" ] && ipset add wifidog-ng-mac $mac
  54. }
  55. validate_validated_domain_section() {
  56. uci_load_validate wifidog-ng validated_domain "$1" "$2" \
  57. 'domain:host'
  58. }
  59. parse_validated_domain() {
  60. [ "$2" = 0 ] || {
  61. echo "validation validated_domain failed" >&2
  62. exit 1
  63. }
  64. [ -n "$domain" ] && echo "ipset=/$domain/wifidog-ng-ip" >> /tmp/dnsmasq.d/wifidog-ng
  65. }
  66. validate_dhcp_host_section() {
  67. uci_load_validate dhcp host "$1" "$2" \
  68. 'mac:macaddr'
  69. }
  70. parse_dhcp_host() {
  71. [ "$2" = 0 ] || {
  72. echo "validation validated dhcp host failed" >&2
  73. exit 1
  74. }
  75. [ -n "$mac" ] && ipset add wifidog-ng-mac $mac
  76. }
  77. start_service() {
  78. config_load wifidog-ng
  79. config_foreach validate_gateway_section gateway start_wifidog
  80. echo -n > /tmp/dnsmasq.d/wifidog-ng
  81. config_foreach validate_server_section server parse_server
  82. config_foreach validate_validated_user_section validated_user parse_validated_user
  83. config_foreach validate_validated_domain_section validated_domain parse_validated_domain
  84. [ $global_dhcp_host_white = 1 ] && {
  85. config_load dhcp
  86. config_foreach validate_dhcp_host_section host parse_dhcp_host
  87. }
  88. /etc/init.d/dnsmasq restart &
  89. }
  90. stop_service() {
  91. rmmod wifidog-ng
  92. ipset destroy wifidog-ng-mac
  93. ipset destroy wifidog-ng-ip
  94. }
  95. service_triggers() {
  96. procd_add_reload_trigger "wifidog-ng"
  97. procd_open_validate
  98. validate_gateway_section
  99. validate_server_section
  100. validate_validated_user_section
  101. validate_validated_domain_section
  102. validate_dhcp_host_section
  103. procd_close_validate
  104. }