Fix: OpenVPN custom: do not deduplicate lines

- Remove case by case lines to avoid duplicates
- Do not deduplicate all lines
This commit is contained in:
Quentin McGaw (desktop)
2021-09-14 12:32:15 +00:00
parent 5d3982c2d2
commit 91ce790b6b

View File

@@ -32,18 +32,29 @@ func modifyConfig(lines []string, connection models.Connection,
for _, line := range lines { for _, line := range lines {
switch { switch {
case case
// Remove empty lines
line == "", line == "",
// Remove future to be duplicates
line == "mute-replay-warnings",
line == "auth-nocache",
line == "pull-filter ignore \"auth-token\"",
line == "auth-retry nointeract",
line == "suppress-timestamps",
// Remove values always modified
strings.HasPrefix(line, "verb "), strings.HasPrefix(line, "verb "),
strings.HasPrefix(line, "auth-user-pass "), strings.HasPrefix(line, "auth-user-pass "),
strings.HasPrefix(line, "user "), strings.HasPrefix(line, "user "),
strings.HasPrefix(line, "proto "), strings.HasPrefix(line, "proto "),
strings.HasPrefix(line, "remote "), strings.HasPrefix(line, "remote "),
strings.HasPrefix(line, "dev "), strings.HasPrefix(line, "dev "),
settings.Cipher != "" && strings.HasPrefix(line, "cipher "), // Remove values eventually modified
settings.Cipher != "" && strings.HasPrefix(line, "data-ciphers "), settings.Cipher != "" && hasPrefixOneOf(line,
"cipher ", "data-ciphers ", "data-ciphers-fallback "),
settings.Auth != "" && strings.HasPrefix(line, "auth "), settings.Auth != "" && strings.HasPrefix(line, "auth "),
settings.MSSFix > 0 && strings.HasPrefix(line, "mssfix "), settings.MSSFix > 0 && strings.HasPrefix(line, "mssfix "),
!settings.IPv6 && strings.HasPrefix(line, "tun-ipv6"): !settings.IPv6 && hasPrefixOneOf(line, "tun-ipv6",
`pull-filter ignore "route-ipv6"`,
`pull-filter ignore "ifconfig-ipv6"`):
default: default:
modified = append(modified, line) modified = append(modified, line)
} }
@@ -81,21 +92,14 @@ func modifyConfig(lines []string, connection models.Connection,
modified = append(modified, "") // trailing line modified = append(modified, "") // trailing line
return uniqueLines(modified) return modified
} }
func uniqueLines(lines []string) (unique []string) { func hasPrefixOneOf(s string, prefixes ...string) bool {
seen := make(map[string]struct{}, len(lines)) for _, prefix := range prefixes {
unique = make([]string, 0, len(lines)) if strings.HasPrefix(s, prefix) {
return true
for _, line := range lines {
_, ok := seen[line]
if ok {
continue
} }
seen[line] = struct{}{}
unique = append(unique, line)
} }
return false
return unique
} }