about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNakidai <nakidai@disroot.org>2026-01-10 16:38:11 +0300
committerNakidai <nakidai@disroot.org>2026-01-10 16:38:11 +0300
commitf2bccaf552234dd0bea3adbb7640e91e91b5b0e2 (patch)
tree2ebf0fe4c58524a74465e0c3d46d192b5647c8c3
parent76e2c978829bc6ff7bfe6c49bfa3739e19370990 (diff)
downloadlibreircd-master.tar.gz
libreircd-master.zip
Check whether user was registered or not in user_reg() HEAD master
So, it fixes a situation when an already registered user wants to
change their nick and ircd welcomes they
-rw-r--r--user.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/user.c b/user.c
index 8131c84..f2572a9 100644
--- a/user.c
+++ b/user.c
@@ -49,9 +49,12 @@ user_mode(char m)
 void
 user_reg(struct Peer *peer, const char *nick, const char *user, const char *real, const char *mode)
 {
+	int was_registered;
 	unsigned long m;
 	const char *p;
 
+	was_registered = *peer->nick && *peer->user && *peer->real;
+
 	if (nick)
 		strlcpy(peer->nick, nick, sizeof(peer->nick));
 	if (user)
@@ -71,7 +74,7 @@ user_reg(struct Peer *peer, const char *nick, const char *user, const char *real
 			peer->modes |= WALLOPS;
 	}
 skip:
-	if (*peer->nick && *peer->user && *peer->real)
+	if (!was_registered && *peer->nick && *peer->user && *peer->real)
 	{
 		peer->type = CLIENT;
 		reply(peer, 1);