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>
Thu, 7 May 2020 17:40:49 +0000 (19:40 +0200)
The `server` option allows plain IPs besides the `/domain/addr` format.

Fixes: #3870
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 137db1c4d1bac4000f9c17150ac286b73787ce20)

modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js

index d37bbe2aef883cff72e7038c6fd9bd6710b2c3ba..f58adc93a54848af090371a3353a5e456b97c8ab 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;