From e54f5ffadd6d56b027b94fdf18d5a66dafee12f7 Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 12 Nov 2022 15:26:27 -0500 Subject: [PATCH] i2ptunnel: Fix IRC USER filtering Wasn't passing through user and realname fields Pass through RFC 2812 mode field if present reported by RN --- .../src/net/i2p/i2ptunnel/irc/IRCFilter.java | 32 +++++++++++++++---- history.txt | 6 ++++ .../src/net/i2p/router/RouterVersion.java | 2 +- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/IRCFilter.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/IRCFilter.java index 66b3abf41..3cfbab783 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/IRCFilter.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/IRCFilter.java @@ -389,15 +389,35 @@ abstract class IRCFilter { } return s; } - + if("USER".equals(command)) { - if (field.length < idx + 2) + // USER (RFC 1459) + // USER (RFC 2812) + // may contain spaces, and thus must be prefixed with a colon. + if (field.length < idx + 3) return s; // invalid, allow server response - int cidx = field[idx + 1].lastIndexOf(':'); + // Replace hostname/servername; pass numeric mode and unused '*' through unchanged + String hostname = field[idx + 1]; + try { + Integer.parseInt(hostname); + // mode + } catch (NumberFormatException nfe) { + hostname = "hostname"; + } + // Warning: max field size is 4, so servername or unused is combined with realname + // in field[idx + 2] + String servername; + if (field[idx + 2].startsWith("* ")) + servername = "*"; + else + servername = "localhost"; + String realname; + int cidx = field[idx + 2].lastIndexOf(':'); if (cidx < 0) - return "USER user hostname localhost :realname"; - String realname = field[idx + 1].substring(cidx + 1); - String ret = "USER " + field[idx] + " hostname localhost :" + realname; + realname = "realname"; + else + realname = field[idx + 2].substring(cidx + 1); + String ret = "USER " + field[idx] + ' ' + hostname + ' ' + servername + " :" + realname; return ret; } diff --git a/history.txt b/history.txt index 289c34c70..5f3c7aee6 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,9 @@ +2022-11-12 zzz + * i2ptunnel: Fix IRC USER filtering + +2022-11-09 zzz + * SAM: Add warning at startup if not bound to localhost + 2022-11-01 zzz * GeoIP 2022-11-01 * SSU: diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index def90930f..b9f86d25e 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Git"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 14; + public final static long BUILD = 15; /** for example "-test" */ public final static String EXTRA = "-rc";