- 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;
^ ~~~~~~~~~~~~~~~
;Modes = +tnk mykey +l 5
;Modes = +b nick!~user@bad.host.example.com
;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: "<user>:<nick>:<key>".
# Default: none.
;KeyFile = :ETCDIR:/#chan.key
# Key file, syntax for each line: "<user>:<nick>:<key>".
# 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 ...
[Channel]
# More [Channel] sections, if you like ...
.RE
.TP
\fBAutojoin\fR (boolean)
.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
.TP
\fBKeyFile\fR (string)
Path and file name of a "key file" containing individual channel keys for
Config_Error_TooLong(File, Line, Var);
return;
}
Config_Error_TooLong(File, Line, Var);
return;
}
- if( strcasecmp( Var, "Autojoin" ) == 0 )
+ if( strcasecmp( Var, "Autojoin" ) == 0 ) {
/* Check autojoin */
chan->autojoin = Check_ArgIsTrue(Arg);
/* Check autojoin */
chan->autojoin = Check_ArgIsTrue(Arg);
if( strcasecmp( Var, "Key" ) == 0 ) {
/* Initial Channel Key (mode k) */
len = strlcpy(chan->key, Arg, sizeof(chan->key));
if( strcasecmp( Var, "Key" ) == 0 ) {
/* Initial Channel Key (mode k) */
len = strlcpy(chan->key, Arg, sizeof(chan->key));
#include "log.h"
#include "messages.h"
#include "ngircd.h"
#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"
#include "irc-info.h"
#include "irc-mode.h"
#include "irc-write.h"
} else
IRC_SetPenalty(Client, 1);
} 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
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)
{
**/
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;
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);
conf_chan = array_start(&Conf_Channels);
assert(channel_count == 0 || conf_chan != NULL);
Req.prefix = Client_ID(Client_ThisServer());
Req.command = "JOIN";
Req.argc = 1;
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);
}
}
IRC_JOIN(Client, &Req);
}
}