luci-base: validation: disallow mutlicast MACs by default
authorJo-Philipp Wich <jo@mein.io>
Sat, 3 Jul 2021 18:10:22 +0000 (20:10 +0200)
committerJo-Philipp Wich <jo@mein.io>
Sat, 3 Jul 2021 18:12:33 +0000 (20:12 +0200)
Extend the MAC address validator to disallow multicast MAC addresses and
add a new optional validator option to require multicast MACs instead of
unicast ones.

Fixes: #5166
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/htdocs/luci-static/resources/validation.js

index 28042ba8cdb08fc1a06b6b95f1153b3812f94535..70d3a7e73a10415c6bc4d42322234288d6776931 100644 (file)
@@ -338,9 +338,10 @@ var ValidatorFactory = baseclass.extend({
                        return this.assert(this.apply('port'), _('valid port or port range (port1-port2)'));
                },
 
-               macaddr: function() {
-                       return this.assert(this.value.match(/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/) != null,
-                               _('valid MAC address'));
+               macaddr: function(multicast) {
+                       var m = this.value.match(/^([a-fA-F0-9]{2}):([a-fA-F0-9]{2}:){4}[a-fA-F0-9]{2}$/);
+                       return this.assert(m != null && !(+m[1] & 1) == !multicast,
+                               multicast ? _('valid multicast MAC address') : _('valid MAC address'));
                },
 
                host: function(ipv4only) {