diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-05 02:29:41 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-05 05:36:21 +0100 |
commit | d539b335e8a7a87dda3da259958bb52183fb760e (patch) | |
tree | 55d388c2c0b3bfb6164f564740a8b8881ebdc315 /conf/name.go | |
parent | build: musl.cc now offers zips (diff) | |
download | wireguard-windows-d539b335e8a7a87dda3da259958bb52183fb760e.tar.xz wireguard-windows-d539b335e8a7a87dda3da259958bb52183fb760e.zip |
conf: validate tunnel name
Diffstat (limited to 'conf/name.go')
-rw-r--r-- | conf/name.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/conf/name.go b/conf/name.go new file mode 100644 index 00000000..da9928e0 --- /dev/null +++ b/conf/name.go @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: MIT + * + * Copyright (C) 2019 WireGuard LLC. All Rights Reserved. + */ + +package conf + +import ( + "regexp" + "strings" +) + +var reservedNames = []string{ + "CON", "PRN", "AUX", "NUL", + "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", + "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9", +} + +const specialChars = "/\\<>:\"|?*\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x00" + +var allowedNameFormat *regexp.Regexp + +func init() { + allowedNameFormat = regexp.MustCompile("^[a-zA-Z0-9_=+.-]{1,32}$") +} + +func isReserved(name string) bool { + if len(name) == 0 { + return false + } + for _, reserved := range reservedNames { + if strings.EqualFold(name, reserved) { + return true + } + } + return false +} + +func hasSpecialChars(name string) bool { + return strings.ContainsAny(name, specialChars) +} + +func TunnelNameIsValid(name string) bool { + // Aside from our own restrictions, let's impose the Windows restrictions first + if isReserved(name) || hasSpecialChars(name) { + return false + } + return allowedNameFormat.MatchString(name) +} |