From 9d3952fd5aedd2f484050515b5d0551aa512edee Mon Sep 17 00:00:00 2001 From: mrkmntal Date: Sat, 19 Sep 2026 20:10:49 -0400 Subject: [PATCH] Fix partial word match/accidental substrings when trying to match port numbers --- hss.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hss.c b/hss.c index 7b4e4dc..423b34b 100755 --- a/hss.c +++ b/hss.c @@ -138,12 +138,19 @@ static int probe_port(const char *host, int port, char *out, size_t len, char (* return 1; } +static int has_port_token(const char *args, const char *needle) { + size_t n = strlen(needle); + for (const char *p = args; (p = strstr(p, needle)); p++) + if ((p == args || p[-1] < '0' || p[-1] > '9') && (p[n] < '0' || p[n] > '9')) return 1; + return 0; +} + static int is_process_match(int port, const char *args, const char *needle) { if (port == 22 && strstr(args, "sshd")) return 1; if ((port == 80 || port == 443) && (strstr(args, "httpd") || strstr(args, "apache") || strstr(args, "nginx") || strstr(args, "lighttpd"))) return 1; if ((port == 21 && strstr(args, "ftp")) || (port == 5432 && strstr(args, "postgres")) || (port == 6379 && strstr(args, "redis"))) return 1; if (port == 3306 && (strstr(args, "mysql") || strstr(args, "mariadb"))) return 1; - return (strstr(args, "python") || strstr(args, "node") || strstr(args, "java") || strstr(args, "ruby")) && strstr(args, needle); + return (strstr(args, "python") || strstr(args, "node") || strstr(args, "java") || strstr(args, "ruby")) && has_port_token(args, needle); } static void find_pids_for_port_hurd(process_t proc, int port, char *out, size_t len, int max_procs) {