diff --git a/doc/sample-ngircd.conf.tmpl b/doc/sample-ngircd.conf.tmpl index 2dbc3b99..cea23a2b 100644 --- a/doc/sample-ngircd.conf.tmpl +++ b/doc/sample-ngircd.conf.tmpl @@ -391,12 +391,14 @@ ;Modes = +tnk mykey +l 5 ;Modes = +b nick!~user@bad.host.example.com + # Should ngIRCd automatically join ("autojoin") all users to this + # channel on connect? Note: The users must have permissions to access + # the channel, otherwise joining them will fail! + ;Autojoin = yes + # Key file, syntax for each line: "::". # Default: none. ;KeyFile = :ETCDIR:/#chan.key - - # Autojoin - set to yes to force all users to join this channel on connect - ;Autojoin = yes [Channel] # More [Channel] sections, if you like ... diff --git a/man/ngircd.conf.5.tmpl b/man/ngircd.conf.5.tmpl index 55b034c3..80c00714 100644 --- a/man/ngircd.conf.5.tmpl +++ b/man/ngircd.conf.5.tmpl @@ -518,7 +518,9 @@ This option can be specified multiple times, evaluated top to bottom. .RE .TP \fBAutojoin\fR (boolean) -Forces users to join this channel on connect. Users must have access to the channel to make it work. +Should ngIRCd automatically join ("autojoin") all users to this channel on +connect? Note: The users must have permissions to access the channel, otherwise +joining them will fail! .TP \fBKeyFile\fR (string) Path and file name of a "key file" containing individual channel keys for 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); } }