1
0
mirror of https://github.com/osmarks/ngircd.git synced 2024-10-28 04:46:17 +00:00

Predefined channles: Fix handling of legacy configuration options

Fix the handling of legacy "Key" and "MaxUsers" [Channel] settings:

- Activate them before evaluating the "Modes" parameter, to allow the
  latter to override those legacy options.
- Enforce setting the respective +k/+l mode(s) to support the legacy
  "Mode = kl" notation, which was valid but is an invalid MODE string:
  key and limit are missing! So set them manually when "k" or "l" are
  detected in the first MODE parameter.
- Sort modes +kl alphabetically, adjust test suite accordingly.
This commit is contained in:
Alexander Barton 2020-03-28 23:37:47 +01:00
parent fed22184c5
commit 4d519cfdbf
2 changed files with 20 additions and 5 deletions

View File

@ -154,16 +154,31 @@ Channel_InitPredefined( void )
Req.argv[Req.argc++] = c;
c = strtok(0, " ");
}
if(Req.argc > 1)
if (Req.argc > 1) {
/* Handling of legacy "Key" and "MaxUsers" settings:
* Enforce setting the respective mode(s), to support
* the legacy "Mode = kl" notation, which was valid but
* is an invalid MODE string: key and limit are missing!
* So set them manually when "k" or "l" are detected in
* the first MODE parameter ... */
if (Req.argc > 1 && strchr(Req.argv[1], 'k')) {
Channel_SetKey(new_chan, conf_chan->key);
Channel_ModeAdd(new_chan, 'k');
}
if (strchr(Req.argv[1], 'l')) {
Channel_SetMaxUsers(new_chan, conf_chan->maxusers);
Channel_ModeAdd(new_chan, 'l');
}
IRC_MODE(Client_ThisServer(), &Req);
}
/* Original channel modes srings are no longer needed */
free(conf_chan->modes[n]);
}
}
Channel_SetKey(new_chan, conf_chan->key);
Channel_SetMaxUsers(new_chan, conf_chan->maxusers);
Set_KeyFile(new_chan, conf_chan->keyfile);
Log(LOG_INFO,

View File

@ -45,7 +45,7 @@ expect {
}
expect {
timeout { exit 1 }
":ngircd.test.server CHANINFO #FullKeyed +Plk Secret 0 :"
":ngircd.test.server CHANINFO #FullKeyed +Pkl Secret 0 :"
}
expect {
timeout { exit 1 }