1
0
mirror of https://github.com/osmarks/ngircd.git synced 2024-10-27 20:36:18 +00:00

Don't send invalid CHANINFO commands when no key is set

It can happen that a channel is +k, but no key is set: for example by
misconfiguring a pre-defined channel. In this case, ngIRCd sent an
invalud CHANINFO command ("CHANINFO #test +Pk  0 :'", note the unset
key represented by the two spaces) to its peers.

Fix this and enhance the CHANINFO documentation.
This commit is contained in:
Alexander Barton 2020-06-11 16:45:30 +02:00
parent b003d469f1
commit 07cb8ed9ae
2 changed files with 7 additions and 2 deletions

View File

@ -874,6 +874,10 @@ Server Protocol Commands
CHANINFO is used by servers to inform each other about a channel: CHANINFO is used by servers to inform each other about a channel:
its modes, channel key, user limits and its topic. its modes, channel key, user limits and its topic.
. .
Note: even when <modes> don't include "k" (key) or "l" (limit), both
parameters must be given when used; use "*" for "no key" and 0 for
"no limit" for the unused parameter in this case.
.
The CHANINFO command is allowed on server-links only. The CHANINFO command is allowed on server-links only.
References: References:

View File

@ -214,7 +214,7 @@ Synchronize_Lists(CLIENT * Client)
static bool static bool
Send_CHANINFO(CLIENT * Client, CHANNEL * Chan) Send_CHANINFO(CLIENT * Client, CHANNEL * Chan)
{ {
char *modes, *topic; char *modes, *topic, *key;
bool has_k, has_l; bool has_k, has_l;
#ifdef DEBUG #ifdef DEBUG
@ -243,9 +243,10 @@ Send_CHANINFO(CLIENT * Client, CHANNEL * Chan)
Channel_Name(Chan), modes, topic); Channel_Name(Chan), modes, topic);
} }
/* "CHANINFO <chan> +<modes> <key> <limit> :<topic>" */ /* "CHANINFO <chan> +<modes> <key> <limit> :<topic>" */
key = Channel_Key(Chan);
return IRC_WriteStrClient(Client, "CHANINFO %s +%s %s %lu :%s", return IRC_WriteStrClient(Client, "CHANINFO %s +%s %s %lu :%s",
Channel_Name(Chan), modes, Channel_Name(Chan), modes,
has_k ? Channel_Key(Chan) : "*", has_k ? (key && *key ? key : "*") : "*",
has_l ? Channel_MaxUsers(Chan) : 0, topic); has_l ? Channel_MaxUsers(Chan) : 0, topic);
} /* Send_CHANINFO */ } /* Send_CHANINFO */