libs/web: rework hostname match to not allow arbritary sequences of numbers and dots
[project/luci.git] / libs / web / htdocs / luci-static / resources / cbi.js
index 5eee59c..e932dac 100644 (file)
@@ -151,12 +151,20 @@ var cbi_validators = {
        },
 
        'hostname': function(v)
-       {       if ( v.length <= 253 )
-                       return (v.match(/^[a-zA-Z0-9][a-zA-Z0-9\-.]*[a-zA-Z0-9]$/) != null);
+       {
+               if (v.length <= 253)
+                       return (v.match(/^[a-zA-Z]+$/) != null ||
+                               (v.match(/^[a-zA-Z0-9][a-zA-Z0-9\-.]*[a-zA-Z0-9]$/) &&
+                                v.match(/[^0-9.]/)));
 
                return false;
        },
 
+       'network': function(v)
+       {
+               return cbi_validators.uciname(v) || cbi_validators.host(v);
+       },
+
        'wpakey': function(v)
        {
                if( v.length == 64 )
@@ -184,7 +192,7 @@ var cbi_validators = {
        'neg_network_ip4addr': function(v)
        {
                v = v.replace(/^\s*!/, "");
-               return cbi_validators.uciname(v) || cbi_validators.ip4addr(v);          
+               return cbi_validators.uciname(v) || cbi_validators.ip4addr(v);
        },
 
        'range': function(v, args)
@@ -227,6 +235,24 @@ var cbi_validators = {
                        return cbi_validators[args[0]](v.replace(/^\s*!\s*/, ''));
 
                return false;
+       },
+
+       'list': function(v, args)
+       {
+               var cb = cbi_validators[args[0] || 'string'];
+               if (typeof cb == "function")
+               {
+                       var cbargs = args.slice(1);
+                       var values = v.match(/[^\s]+/g);
+
+                       for (var i = 0; i < values.length; i++)
+                               if (!cb(values[i], cbargs))
+                                       return false;
+
+                       return true;
+               }
+
+               return false;
        }
 };