web: Improve hostname validation
authorManuel Munz <freifunk@somakoma.de>
Sat, 12 Feb 2011 11:09:13 +0000 (11:09 +0000)
committerManuel Munz <freifunk@somakoma.de>
Sat, 12 Feb 2011 11:09:13 +0000 (11:09 +0000)
libs/web/htdocs/luci-static/resources/cbi.js
libs/web/luasrc/cbi/datatypes.lua
modules/admin-full/luasrc/model/cbi/admin_system/system.lua
modules/freifunk/luasrc/model/cbi/freifunk/basics.lua

index 44a5b2aec7caee9a2520822bcf2ee96445bdbd74..d12d050a8ae8f084daafed7a13be6376bad91c1d 100644 (file)
@@ -141,8 +141,8 @@ var cbi_validators = {
        },
 
        'hostname': function(v)
-       {
-               return (v.match(/^[a-zA-Z_][a-zA-Z0-9_\-.]*$/) != null);
+       {       if ( v.length <= 24 )
+                       return (v.match(/^[a-zA-Z0-9][a-zA-Z0-9\-.]*[a-zA-Z0-9]$/) != null);
        },
 
        'wpakey': function(v)
index 67cb63daf048ec8d4511f27560fb7c8103a280b6..d1ac8f405a93c494359dd74eb3eefb531ed03898 100644 (file)
@@ -127,10 +127,9 @@ function macaddr(val)
 end
 
 function hostname(val)
-       if val and val:match("[a-zA-Z0-9_][a-zA-Z0-9_%-%.]*") then
-               return true     -- XXX: ToDo: need better solution
+       if val and (#val < 25) and val.match(val, "^[a-zA-Z0-9][a-zA-Z0-9%-%.]*[a-zA-Z0-9]$") then
+               return true
        end
-
        return false
 end
 
index dcd2fb0181684343a5a9ec548a1954d4981a9183..a0b8844f3b004a78c9bc8e2e53301e6409979a05 100644 (file)
@@ -75,7 +75,7 @@ s:taboption("general", DummyValue, "_uptime", translate("Uptime")).value =
  luci.tools.webadmin.date_format(tonumber(uptime))
 
 hn = s:taboption("general", Value, "hostname", translate("Hostname"))
-
+hn.datatype = "hostname"
 function hn.write(self, section, value)
        Value.write(self, section, value)
        luci.sys.hostname(value)
index b404181dc81b0587010271f1bb7e64564c098a83..31ab9bb6792b500bf961a7ae01473cc8eabf3340 100644 (file)
@@ -38,15 +38,7 @@ b.anonymous = true
 
 hn = b:option(Value, "hostname", translate("Hostname"))
 hn.rmempty = false
-function hn.validate(self, value)
-       if value == nil then
-               return
-       elseif (#value > 24) or string.match(value, "[^%w%.%-]") or string.match(value, "^[%-%.]") or string.match(value, "[%-%.]$") then
-               return nil, translate("Hostname may contain up to 24 alphanumeric characters. Minus and period are also allowed, but not in the beginning or the end of the hostname.")
-       else
-               return value
-       end
-end
+hn.datatype = "hostname"
 
 loc = b:option(Value, "location", translate("Location"))
 loc.rmempty = false