Commit Diff


commit - 5009ab3e8c5a6fe7db5c5ad1d3fdc8aecfc64b55
commit + d314c75a37f0132a1a16658494d0f60a0c0083f2
blob - ec425bd284686546de2cc36bb330b82151937ba3
blob + 1d07822c5b405e748af8da30f13c397837afa8fc
--- doc/sample-ngircd.conf.tmpl
+++ doc/sample-ngircd.conf.tmpl
@@ -172,8 +172,8 @@
 	;ConnectIPv4 = yes
 
 	# Default user mode(s) to set on new local clients. Please note that
-	# only modes can be set that the client could set on itself, you can't
-	# set "a" (away) or "o" (IRC Op), for example! Default: none.
+	# only modes can be set that the client could set using regular MODE
+	# commands, you can't set "a" (away) for example! Default: none.
 	;DefaultUserModes = i
 
 	# Do DNS lookups when a client connects to the server.
blob - 208b46110a00824fbab5d1844a1c1acc2a73023c
blob + 9b2ed08259b3e0ea2b2fd95c3f6ad5a7382e00e6
--- man/ngircd.conf.5.tmpl
+++ man/ngircd.conf.5.tmpl
@@ -267,8 +267,8 @@ Default: yes.
 .TP
 \fBDefaultUserModes\fR (string)
 Default user mode(s) to set on new local clients. Please note that only modes
-can be set that the client could set on itself, you can't set "a" (away) or
-"o" (IRC Op), for example!
+can be set that the client could set using regular MODE commands, you can't
+set "a" (away) for example!
 Default: none.
 .TP
 \fBDNS\fR (boolean)
blob - fe981213b33c8d85a3ad3ccb467e54fd6b54b56d
blob + 79ab2ebe94beaa41b904b01b1493a83d125e5e25
--- src/ngircd/irc-mode.c
+++ src/ngircd/irc-mode.c
@@ -68,6 +68,13 @@ IRC_MODE( CLIENT *Client, REQUEST *Req )
 
 	_IRC_GET_SENDER_OR_RETURN_(origin, Req, Client)
 
+	/* Test for "fake" MODE commands injected by this local instance,
+	 * for example when handling the "DefaultUserModes" settings.
+	 * This doesn't harm real commands, because prefixes of regular
+	 * clients are checked in Validate_Prefix() and can't be faked. */
+	if (Req->prefix && Client_Search(Req->prefix) == Client_ThisServer())
+		Client = Client_Search(Req->prefix);
+
 	/* Channel or user mode? */
 	cl = NULL; chan = NULL;
 	if (Client_IsValidNick(Req->argv[0]))
blob - 7f427a3a753e0fd3b0b9886d641439b521a3f08b
blob + 64cc81251c6594cbd129a56270262fa9fede6c19
--- src/ngircd/login.c
+++ src/ngircd/login.c
@@ -192,7 +192,7 @@ Login_User_PostAuth(CLIENT *Client)
 	/* Set default user modes */
 	if (Conf_DefaultUserModes[0]) {
 		snprintf(modes, sizeof(modes), "+%s", Conf_DefaultUserModes);
-		Req.prefix = Client_ThisServer();
+		Req.prefix = Client_ID(Client_ThisServer());
 		Req.command = "MODE";
 		Req.argc = 2;
 		Req.argv[0] = Client_ID(Client);