From 99dd77e37537b29f33123817075e788e0915ee7c Mon Sep 17 00:00:00 2001 From: Michael Reber Date: Tue, 30 Dec 2025 16:40:57 +0100 Subject: [PATCH] use SplitN to only split on the first colon to preserving IPv6 addresses --- internal/fail2ban/connector_local.go | 6 ++++-- internal/fail2ban/connector_ssh.go | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/fail2ban/connector_local.go b/internal/fail2ban/connector_local.go index 926dfcd..8a042fa 100644 --- a/internal/fail2ban/connector_local.go +++ b/internal/fail2ban/connector_local.go @@ -119,7 +119,8 @@ func (lc *LocalConnector) GetBannedIPs(ctx context.Context, jail string) ([]stri lines := strings.Split(out, "\n") for _, line := range lines { if strings.Contains(line, "IP list:") { - parts := strings.Split(line, ":") + // Use SplitN to only split on the first colon, preserving IPv6 addresses + parts := strings.SplitN(line, ":", 2) if len(parts) > 1 { ips := strings.Fields(strings.TrimSpace(parts[1])) bannedIPs = append(bannedIPs, ips...) @@ -241,7 +242,8 @@ func (lc *LocalConnector) getJails(ctx context.Context) ([]string, error) { lines := strings.Split(out, "\n") for _, line := range lines { if strings.Contains(line, "Jail list:") { - parts := strings.Split(line, ":") + // Use SplitN to only split on the first colon + parts := strings.SplitN(line, ":", 2) if len(parts) > 1 { raw := strings.TrimSpace(parts[1]) jails = strings.Split(raw, ",") diff --git a/internal/fail2ban/connector_ssh.go b/internal/fail2ban/connector_ssh.go index 3aa46c3..fdd9690 100644 --- a/internal/fail2ban/connector_ssh.go +++ b/internal/fail2ban/connector_ssh.go @@ -170,7 +170,8 @@ func (sc *SSHConnector) GetBannedIPs(ctx context.Context, jail string) ([]string lines := strings.Split(out, "\n") for _, line := range lines { if strings.Contains(line, "IP list:") { - parts := strings.Split(line, ":") + // Use SplitN to only split on the first colon, preserving IPv6 addresses + parts := strings.SplitN(line, ":", 2) if len(parts) > 1 { ips := strings.Fields(strings.TrimSpace(parts[1])) bannedIPs = append(bannedIPs, ips...) @@ -335,7 +336,8 @@ func (sc *SSHConnector) getJails(ctx context.Context) ([]string, error) { lines := strings.Split(out, "\n") for _, line := range lines { if strings.Contains(line, "Jail list:") { - parts := strings.Split(line, ":") + // Use SplitN to only split on the first colon + parts := strings.SplitN(line, ":", 2) if len(parts) > 1 { raw := strings.TrimSpace(parts[1]) jails = strings.Split(raw, ",")