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 44a5b2a..d12d050 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 67cb63d..d1ac8f4 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 dcd2fb0..a0b8844 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 b404181..31ab9bb 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