luci-mod-network: dhcp.js: fix validation logic
authorJo-Philipp Wich <jo@mein.io>
Sat, 11 Apr 2020 16:19:59 +0000 (18:19 +0200)
committerJo-Philipp Wich <jo@mein.io>
Sat, 11 Apr 2020 16:27:36 +0000 (18:27 +0200)
The `server` option allows plain IPs besides the `/domain/addr` format.

Fixes: #3870
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js

index 525526d62f354a350cd7b16e2a107568dbf60d26..6551b72731b5d8b0f304bdbb7c132b41dac9019f 100644 (file)
@@ -99,7 +99,7 @@ function validateServerSpec(sid, s) {
        if (s == null || s == '')
                return true;
 
-       var m = s.match(/^\/(.+)\/(.*)$/);
+       var m = s.match(/^(?:\/(.+)\/)?(.*)$/);
        if (!m)
                return _('Expecting: %s').format(_('valid hostname'));
 
@@ -116,11 +116,20 @@ function validateServerSpec(sid, s) {
 
        if (!m)
                return _('Expecting: %s').format(_('valid IP address'));
-       else if (validation.parseIPv4(m[1]) && m[3] != null && !validation.parseIPv4(m[3]))
-               return _('Expecting: %s').format(_('valid IPv4 address'));
-       else if (validation.parseIPv6(m[1]) && m[3] != null && !validation.parseIPv6(m[3]))
-               return _('Expecting: %s').format(_('valid IPv6 address'));
-       else if ((m[2] != null && +m[2] > 65535) || (m[4] != null && +m[4] > 65535))
+
+       if (validation.parseIPv4(m[1])) {
+               if (m[3] != null && !validation.parseIPv4(m[3]))
+                       return _('Expecting: %s').format(_('valid IPv4 address'));
+       }
+       else if (validation.parseIPv6(m[1])) {
+               if (m[3] != null && !validation.parseIPv6(m[3]))
+                       return _('Expecting: %s').format(_('valid IPv6 address'));
+       }
+       else {
+               return _('Expecting: %s').format(_('valid IP address'));
+       }
+
+       if ((m[2] != null && +m[2] > 65535) || (m[4] != null && +m[4] > 65535))
                return _('Expecting: %s').format(_('valid port value'));
 
        return true;