luci-base: add a strict flag to the hostname validator
authorJo-Philipp Wich <jo@mein.io>
Thu, 22 Mar 2018 08:49:52 +0000 (09:49 +0100)
committerJo-Philipp Wich <jo@mein.io>
Wed, 4 Apr 2018 21:21:53 +0000 (23:21 +0200)
Some applications, e.g. dnsmasq, do not allow hostnames starting with an
underscore, therefor extend the existing hostname datatype validator with
a `strict` which disallows a leading underscore.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/htdocs/luci-static/resources/cbi.js
modules/luci-base/luasrc/cbi/datatypes.lua

index d40ec34..6c35372 100644 (file)
@@ -218,12 +218,13 @@ var cbi_validators = {
                        ((ipv4only == 1) && cbi_validators.ip4addr.apply(this));
        },
 
-       'hostname': function()
+       'hostname': function(strict)
        {
                if (this.length <= 253)
-                       return (this.match(/^[a-zA-Z0-9]+$/) != null ||
+                       return (this.match(/^[a-zA-Z0-9_]+$/) != null ||
                                (this.match(/^[a-zA-Z0-9_][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$/) &&
-                                this.match(/[^0-9.]/)));
+                                this.match(/[^0-9.]/))) &&
+                              (!strict || !this.match(/^_/));
 
                return false;
        },
index 55cdf8a..99113e0 100644 (file)
@@ -199,13 +199,13 @@ function macaddr(val)
        return ip.checkmac(val) and true or false
 end
 
-function hostname(val)
+function hostname(val, strict)
        if val and (#val < 254) and (
           val:match("^[a-zA-Z_]+$") or
           (val:match("^[a-zA-Z0-9_][a-zA-Z0-9_%-%.]*[a-zA-Z0-9]$") and
            val:match("[^0-9%.]"))
        ) then
-               return true
+               return (not strict or not val:match("^_"))
        end
        return false
 end