summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/inbound.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/common/inbound.c b/src/common/inbound.c
index 9278a05d..912fbbd5 100644
--- a/src/common/inbound.c
+++ b/src/common/inbound.c
@@ -668,7 +668,7 @@ inbound_nameslist (server *serv, char *chan, char *names,
 {
 	session *sess;
 	char **name_list;
-	char *host;
+	char *host, *nopre_name;
 	char name[NICKLEN];
 	int i, offset;
 
@@ -700,8 +700,17 @@ inbound_nameslist (server *serv, char *chan, char *names,
 
 		if (serv->have_uhnames)
 		{
-			/* Server may have userhost-in-names cap */
-			offset = strcspn (name_list[i], "!");
+			offset = 0;
+			nopre_name = name_list[i];
+
+			/* Ignore prefixes so '!' won't cause issues */
+			while (strchr (serv->nick_prefixes, *nopre_name) != NULL)
+			{
+				*nopre_name++;
+				offset++;
+			}
+
+			offset += strcspn (nopre_name, "!");
 			if (offset++ < strlen (name_list[i]))
 				host = name_list[i] + offset;
 		}