From 30ba325ddedb573cfef70e318db1d294c9703b5d Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Sun, 17 Sep 2023 19:38:53 +0200 Subject: Various fixes and enhancements for the "Autojoin" patch - Bring sample-ngircd.conf and ngircd.conf.5 description in line. - Fix configuration parsing, it always showed the 'Unknown variable "Autojoin"' error message, even when everything was perfectly fine. - And fix a build error (at least on macOS with Apple Clang 14): login.c:234:3: error: call to undeclared function 'IRC_JOIN'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] IRC_JOIN(Client, &Req); ^ The #include for the "irc.channel.h" header was missing! - Remove a unused variable that caused a compiler warning: login.c:222:12: warning: unused variable 'n' [-Wunused-variable] size_t i, n, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan)); ^ - Add a explicit cast to fix a compiler warning: login.c:235:15: warning: assigning to 'char *' from 'const char[51]' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] Req.argv[0] = conf_chan->name; ^ ~~~~~~~~~~~~~~~ --- src/ngircd/conf.c | 4 +++- src/ngircd/login.c | 14 ++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c index 5ee552e6..120db216 100644 --- a/src/ngircd/conf.c +++ b/src/ngircd/conf.c @@ -2000,9 +2000,11 @@ Handle_CHANNEL(const char *File, int Line, char *Var, char *Arg) Config_Error_TooLong(File, Line, Var); return; } - if( strcasecmp( Var, "Autojoin" ) == 0 ) + if( strcasecmp( Var, "Autojoin" ) == 0 ) { /* Check autojoin */ chan->autojoin = Check_ArgIsTrue(Arg); + return; + } if( strcasecmp( Var, "Key" ) == 0 ) { /* Initial Channel Key (mode k) */ len = strlcpy(chan->key, Arg, sizeof(chan->key)); diff --git a/src/ngircd/login.c b/src/ngircd/login.c index 0dd0bd89..3412e337 100644 --- a/src/ngircd/login.c +++ b/src/ngircd/login.c @@ -31,6 +31,7 @@ #include "log.h" #include "messages.h" #include "ngircd.h" +#include "irc-channel.h" #include "irc-info.h" #include "irc-mode.h" #include "irc-write.h" @@ -201,24 +202,25 @@ Login_User_PostAuth(CLIENT *Client) } else IRC_SetPenalty(Client, 1); - /* Autojoin clients to the channels */ - Login_Autojoin(Client); + /* Autojoin clients to the channels */ + Login_Autojoin(Client); return CONNECTED; } /** * Autojoin clients to the channels set by administrator - * If autojoin is not set in Config or the channel is not available for search - do nothing * + * Do nothing if autojoin is not set in the configuration or the channel is not + * available (any more). **/ GLOBAL void Login_Autojoin(CLIENT *Client) { - /** make an autojoin to each channel that is good for it **/ REQUEST Req; const struct Conf_Channel *conf_chan; - size_t i, n, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan)); + size_t i, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan)); + conf_chan = array_start(&Conf_Channels); assert(channel_count == 0 || conf_chan != NULL); @@ -230,7 +232,7 @@ Login_Autojoin(CLIENT *Client) Req.prefix = Client_ID(Client_ThisServer()); Req.command = "JOIN"; Req.argc = 1; - Req.argv[0] = conf_chan->name; + Req.argv[0] = (char *)conf_chan->name; IRC_JOIN(Client, &Req); } } -- cgit 1.4.1