From 911fe645928750f3ce38061a94c9b6db50db0749 Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Sun, 21 Mar 2021 13:57:49 +0100
Subject: validate: T3418: interface-name should also allow all local present
 interfaces

The regex only validated interfaces according to the VyOS naming scheme, but
third party interfacs that are legit (e.g. exists within the kernel) failed
to validate.

The validator now also supports any kind of local interfaces attached to
the OS kernel.
---
 src/validators/interface-name | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

(limited to 'src/validators')

diff --git a/src/validators/interface-name b/src/validators/interface-name
index 72e9fd54a..5bac671b1 100755
--- a/src/validators/interface-name
+++ b/src/validators/interface-name
@@ -14,14 +14,21 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import os
 import re
-import sys
+
+from sys import argv
+from sys import exit
 
 pattern = '^(bond|br|dum|en|ersp|eth|gnv|lan|l2tp|l2tpeth|macsec|peth|ppp|pppoe|pptp|sstp|tun|vti|vtun|vxlan|wg|wlan|wlm)[0-9]+(.\d+)?|lo$'
 
 if __name__ == '__main__':
-    if len(sys.argv) != 2:
-        sys.exit(1)
-    if not re.match(pattern, sys.argv[1]):
-        sys.exit(1)
-    sys.exit(0)
+    if len(argv) != 2:
+        exit(1)
+    interface = argv[1]
+
+    if re.match(pattern, interface):
+        exit(0)
+    if os.path.exists(f'/sys/class/net/{interface}'):
+        exit(0)
+    exit(1)
-- 
cgit v1.2.3