commit - 5009ab3e8c5a6fe7db5c5ad1d3fdc8aecfc64b55
commit + d314c75a37f0132a1a16658494d0f60a0c0083f2
blob - ec425bd284686546de2cc36bb330b82151937ba3
blob + 1d07822c5b405e748af8da30f13c397837afa8fc
--- doc/sample-ngircd.conf.tmpl
+++ doc/sample-ngircd.conf.tmpl
;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
.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
_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
/* 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);