mirror of
https://github.com/osmarks/ngircd.git
synced 2025-06-07 00:44:09 +00:00
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; ^ ~~~~~~~~~~~~~~~
This commit is contained in:
parent
cfd7d4288e
commit
30ba325dde
@ -391,13 +391,15 @@
|
|||||||
;Modes = +tnk mykey +l 5
|
;Modes = +tnk mykey +l 5
|
||||||
;Modes = +b nick!~user@bad.host.example.com
|
;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>".
|
# Key file, syntax for each line: "<user>:<nick>:<key>".
|
||||||
# Default: none.
|
# Default: none.
|
||||||
;KeyFile = :ETCDIR:/#chan.key
|
;KeyFile = :ETCDIR:/#chan.key
|
||||||
|
|
||||||
# Autojoin - set to yes to force all users to join this channel on connect
|
|
||||||
;Autojoin = yes
|
|
||||||
|
|
||||||
[Channel]
|
[Channel]
|
||||||
# More [Channel] sections, if you like ...
|
# More [Channel] sections, if you like ...
|
||||||
|
|
||||||
|
@ -518,7 +518,9 @@ This option can be specified multiple times, evaluated top to bottom.
|
|||||||
.RE
|
.RE
|
||||||
.TP
|
.TP
|
||||||
\fBAutojoin\fR (boolean)
|
\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
|
.TP
|
||||||
\fBKeyFile\fR (string)
|
\fBKeyFile\fR (string)
|
||||||
Path and file name of a "key file" containing individual channel keys for
|
Path and file name of a "key file" containing individual channel keys for
|
||||||
|
@ -2000,9 +2000,11 @@ Handle_CHANNEL(const char *File, int Line, char *Var, char *Arg)
|
|||||||
Config_Error_TooLong(File, Line, Var);
|
Config_Error_TooLong(File, Line, Var);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if( strcasecmp( Var, "Autojoin" ) == 0 )
|
if( strcasecmp( Var, "Autojoin" ) == 0 ) {
|
||||||
/* Check autojoin */
|
/* Check autojoin */
|
||||||
chan->autojoin = Check_ArgIsTrue(Arg);
|
chan->autojoin = Check_ArgIsTrue(Arg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if( strcasecmp( Var, "Key" ) == 0 ) {
|
if( strcasecmp( Var, "Key" ) == 0 ) {
|
||||||
/* Initial Channel Key (mode k) */
|
/* Initial Channel Key (mode k) */
|
||||||
len = strlcpy(chan->key, Arg, sizeof(chan->key));
|
len = strlcpy(chan->key, Arg, sizeof(chan->key));
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "ngircd.h"
|
#include "ngircd.h"
|
||||||
|
#include "irc-channel.h"
|
||||||
#include "irc-info.h"
|
#include "irc-info.h"
|
||||||
#include "irc-mode.h"
|
#include "irc-mode.h"
|
||||||
#include "irc-write.h"
|
#include "irc-write.h"
|
||||||
@ -209,16 +210,17 @@ Login_User_PostAuth(CLIENT *Client)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Autojoin clients to the channels set by administrator
|
* 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
|
GLOBAL void
|
||||||
Login_Autojoin(CLIENT *Client)
|
Login_Autojoin(CLIENT *Client)
|
||||||
{
|
{
|
||||||
/** make an autojoin to each channel that is good for it **/
|
|
||||||
REQUEST Req;
|
REQUEST Req;
|
||||||
const struct Conf_Channel *conf_chan;
|
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);
|
conf_chan = array_start(&Conf_Channels);
|
||||||
assert(channel_count == 0 || conf_chan != NULL);
|
assert(channel_count == 0 || conf_chan != NULL);
|
||||||
|
|
||||||
@ -230,7 +232,7 @@ Login_Autojoin(CLIENT *Client)
|
|||||||
Req.prefix = Client_ID(Client_ThisServer());
|
Req.prefix = Client_ID(Client_ThisServer());
|
||||||
Req.command = "JOIN";
|
Req.command = "JOIN";
|
||||||
Req.argc = 1;
|
Req.argc = 1;
|
||||||
Req.argv[0] = conf_chan->name;
|
Req.argv[0] = (char *)conf_chan->name;
|
||||||
IRC_JOIN(Client, &Req);
|
IRC_JOIN(Client, &Req);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user