From 52965f40770c85b448712358ee810bcde99c0a25 Mon Sep 17 00:00:00 2001 From: Glenn Washburn Date: Wed, 1 Mar 2023 23:39:48 -0600 Subject: [PATCH] luci-mod-network: add stricter wireless interface name validation Linux wireless interface names have the following restrictions: * It must not be an empty string * It must not be '.' or '..' * It must not contain any /, : or space character ( , \t, \n, ...) * It must be less than 16 chars * It likely must not contain any % either Fixes: 8673aef8db ("luci-mod-network: remove uciname validation from wireless interface") Signed-off-by: Glenn Washburn [reword validation error messages, remove extended description text as it would be shown as part of the validation errors] Signed-off-by: Jo-Philipp Wich (cherry picked from commit 6ad6a241c32ebd4d62f6021a2e3cbe4e1bc192c2) --- .../luci-base/htdocs/luci-static/resources/validation.js | 9 +++++++++ .../luci-static/resources/view/network/wireless.js | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/modules/luci-base/htdocs/luci-static/resources/validation.js b/modules/luci-base/htdocs/luci-static/resources/validation.js index 6dddf964fb..b7a3a140e4 100644 --- a/modules/luci-base/htdocs/luci-static/resources/validation.js +++ b/modules/luci-base/htdocs/luci-static/resources/validation.js @@ -426,6 +426,15 @@ var ValidatorFactory = baseclass.extend({ return this.assert(this.value.match(/^[a-zA-Z0-9_]+$/), _('valid UCI identifier')); }, + netdevname: function() { + var v = this.value; + + if (v == '.' || v == '..') + return this.assert(false, _('valid network device name, not "." or ".."')); + + return this.assert(v.match(/^[^:/%\s]{1,15}$/), _('valid network device name between 1 and 15 characters not containing ":", "/", "%" or spaces')); + }, + range: function(min, max) { var val = this.factory.parseDecimal(this.value); return this.assert(val >= +min && val <= +max, _('value between %f and %f').format(min, max)); diff --git a/modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js b/modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js index 5843054aba..9fb9027805 100644 --- a/modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js +++ b/modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js @@ -1159,7 +1159,7 @@ return view.extend({ o = ss.taboption('advanced', form.Value, 'ifname', _('Interface name'), _('Override default interface name')); o.optional = true; - o.datatype = 'maxlength(15)'; + o.datatype = 'netdevname'; o.placeholder = radioNet.getIfname(); if (/^radio\d+\.network/.test(o.placeholder)) o.placeholder = ''; -- 2.30.2