diff options
| author | Alexander Barton <alex@barton.de> | 2020-03-28 23:37:47 +0100 |
|---|---|---|
| committer | Alexander Barton <alex@barton.de> | 2020-03-29 00:45:59 +0100 |
| commit | 4d519cfdbf57344aeaa3610a302bf4c654c058f6 (patch) | |
| tree | f2bb3764bbaae7d08cd242fe1168b805c828522b /src | |
| parent | fed22184c57be6959b1906138ce83f5476ec2efa (diff) | |
| download | ngircd-4d519cfdbf57344aeaa3610a302bf4c654c058f6.tar.gz ngircd-4d519cfdbf57344aeaa3610a302bf4c654c058f6.zip | |
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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ngircd/channel.c | 23 | ||||
| -rw-r--r-- | src/testsuite/server-login-test.e | 2 |
2 files changed, 20 insertions, 5 deletions
diff --git a/src/ngircd/channel.c b/src/ngircd/channel.c index 657fe781..3282a8d0 100644 --- a/src/ngircd/channel.c +++ b/src/ngircd/channel.c @@ -136,7 +136,7 @@ Channel_InitPredefined( void ) Channel_SetTopic(new_chan, NULL, conf_chan->topic); /* Evaluate modes strings with fake requests */ - if(conf_chan->modes_num) { + if (conf_chan->modes_num) { /* Prepare fake request structure */ strlcpy(name, conf_chan->name, sizeof(name)); Log(LOG_INFO, "Evaluating predefined channel modes for \"%s\".", name); @@ -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, diff --git a/src/testsuite/server-login-test.e b/src/testsuite/server-login-test.e index b5226a7d..bdf95e09 100644 --- a/src/testsuite/server-login-test.e +++ b/src/testsuite/server-login-test.e @@ -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 } |