conf: move 'run-time-feature-disable' options to new FEATURE section

This commit is contained in:
Florian Westphal 2011-01-09 19:42:42 +01:00
parent 23ce0393b2
commit 1964bda252
3 changed files with 90 additions and 67 deletions

View File

@ -134,19 +134,6 @@
# Allow Pre-Defined Channels only (see Section [Channels])
;PredefChannelsOnly = no
# Do any DNS lookups when a client connects to the server.
;DNS = yes
# Do any IDENT lookups if ngIRCd has been compiled with support for it.
;Ident = yes
# Use PAM if ngIRCd has been compiled with support for it.
;PAM = no
# Use ZeroConf service registration if ngIRCd has been
# compiled with support for it (e.g. Howl, Avahi, Mac OS X).
;ZeroConf = no
# try to connect to other irc servers using ipv4 and ipv6, if possible
;ConnectIPv6 = yes
;ConnectIPv4 = yes
@ -167,6 +154,20 @@
# maximum nick name length!
;MaxNickLength = 9
[Features]
# Do any DNS lookups when a client connects to the server.
;DNS = yes
# Do any IDENT lookups if ngIRCd has been compiled with support for it.
;Ident = yes
# Use PAM if ngIRCd has been compiled with support for it.
;PAM = no
# Use ZeroConf service registration if ngIRCd has been
# compiled with support for it (e.g. Howl, Avahi, Mac OS X).
;ZeroConf = no
[Operator]
# [Operator] sections are used to define IRC Operators. There may be
# more than one [Operator] block, one for each local operator.

View File

@ -47,13 +47,18 @@ ports on which the server should be listening. IRC operators of this
server are defined in
.I [Operator]
blocks.
.I [Features]
can be used to disable compile-time features at run time, e.g. if ngircd
was built to support ident lookups, but you do not want ngircd to perform
ident lookups you can disable them here.
This section is optional.
.I [Server]
is the section where server links are configured. And
.I [Channel]
blocks are used to configure pre-defined ("persistent") IRC channels.
.PP
There can be more than one [Operator], [Server] and [Channel] sections
per configuration file, but only one [Global] section.
per configuration file, but only one [Global] and one [Features] section.
.SH [GLOBAL]
The
.I [Global]
@ -205,29 +210,6 @@ you do not want to have channels other than those defined in
[Channel] sections in the configuration file.
Default: no.
.TP
\fBDNS\fR
If set to false, ngIRCd will not make DNS lookups when clients connect.
If you configure the daemon to connect to other servers, ngIRCd may still
perform a DNS lookup if required.
Default: yes.
.TP
\fBIdent\fR
If ngIRCd is compiled with IDENT support this can be used to disable IDENT
lookups at run time.
Default: yes.
.TP
\fBPAM\fR
If ngIRCd is compiled with PAM support this can be used to disable all calls
to the PAM library at runtime; all users connecting without password are
allowed to connect, all passwords given will fail.
Default: yes.
.TP
\fBZeroConf\fR
If ngIRCd is compiled to register its services using ZeroConf (e.g. using
Howl, Avahi or on Mac OS X) this parameter can be used to disable service
registration at runtime.
Default: yes.
.TP
\fBConnectIPv4\fR
Set this to no if you do not want ngIRCd to connect to other IRC servers using
IPv4. This allows usage of ngIRCd in IPv6-only setups.
@ -269,6 +251,33 @@ Password of the IRC operator.
\fBMask\fR
Mask that is to be checked before an /OPER for this account is accepted.
Example: nick!ident@*.example.com
.SH [FEATURES]
An optional section that can be used to disable features at
run-time. A feature is enabled by default if if ngircd was built with
support for it.
\fBDNS\fR
If set to false, ngIRCd will not make DNS lookups when clients connect.
If you configure the daemon to connect to other servers, ngIRCd may still
perform a DNS lookup if required.
Default: yes.
.TP
\fBIdent\fR
If ngIRCd is compiled with IDENT support this can be used to disable IDENT
lookups at run time.
Default: yes.
.TP
\fBPAM\fR
If ngIRCd is compiled with PAM support this can be used to disable all calls
to the PAM library at runtime; all users connecting without password are
allowed to connect, all passwords given will fail.
Default: yes.
.TP
\fBZeroConf\fR
If ngIRCd is compiled to register its services using ZeroConf (e.g. using
Howl, Avahi or on Mac OS X) this parameter can be used to disable service
registration at runtime.
Default: yes.
.TP
.SH [SERVER]
Other servers are configured in
.I [Server]

View File

@ -62,6 +62,7 @@ static bool Read_Config PARAMS(( bool ngircd_starting ));
static bool Validate_Config PARAMS(( bool TestOnly, bool Rehash ));
static void Handle_GLOBAL PARAMS(( int Line, char *Var, char *Arg ));
static void Handle_FEATURES PARAMS(( int Line, char *Var, char *Arg ));
static void Handle_OPERATOR PARAMS(( int Line, char *Var, char *Arg ));
static void Handle_SERVER PARAMS(( int Line, char *Var, char *Arg ));
static void Handle_CHANNEL PARAMS(( int Line, char *Var, char *Arg ));
@ -232,7 +233,7 @@ opers_free(void)
{
struct Conf_Oper *op;
size_t len;
len = array_length(&Conf_Opers, sizeof(*op));
op = array_start(&Conf_Opers);
while (len--) {
@ -247,7 +248,7 @@ opers_puts(void)
{
struct Conf_Oper *op;
size_t len;
len = array_length(&Conf_Opers, sizeof(*op));
op = array_start(&Conf_Opers);
while (len--) {
@ -341,11 +342,6 @@ Conf_Test( void )
printf(" OperServerMode = %s\n", yesno_to_str(Conf_OperServerMode));
printf(" AllowRemoteOper = %s\n", yesno_to_str(Conf_AllowRemoteOper));
printf(" PredefChannelsOnly = %s\n", yesno_to_str(Conf_PredefChannelsOnly));
printf(" DNS = %s\n", yesno_to_str(Conf_DNS));
printf(" Ident = %s\n", yesno_to_str(Conf_Ident));
printf(" PAM = %s\n", yesno_to_str(Conf_PAM));
printf(" ZeroConf = %s\n", yesno_to_str(Conf_ZeroConf));
#ifdef WANT_IPV6
printf(" ConnectIPv4 = %s\n", yesno_to_str(Conf_ConnectIPv6));
printf(" ConnectIPv6 = %s\n", yesno_to_str(Conf_ConnectIPv4));
@ -355,6 +351,13 @@ Conf_Test( void )
printf(" MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1);
printf(" MaxNickLength = %u\n\n", Conf_MaxNickLength - 1);
puts("[FEATURES]");
printf(" DNS = %s\n", yesno_to_str(Conf_DNS));
printf(" Ident = %s\n", yesno_to_str(Conf_Ident));
printf(" PAM = %s\n", yesno_to_str(Conf_PAM));
printf(" ZeroConf = %s\n", yesno_to_str(Conf_ZeroConf));
puts("");
opers_puts();
for( i = 0; i < MAX_SERVERS; i++ ) {
@ -818,6 +821,7 @@ Read_Config( bool ngircd_starting )
arg = ptr + 1; ngt_TrimStr( arg );
if( strcasecmp( section, "[GLOBAL]" ) == 0 ) Handle_GLOBAL( line, var, arg );
else if( strcasecmp( section, "[FEATURES]" ) == 0 ) Handle_FEATURES( line, var, arg );
else if( strcasecmp( section, "[OPERATOR]" ) == 0 ) Handle_OPERATOR( line, var, arg );
else if( strcasecmp( section, "[SERVER]" ) == 0 ) Handle_SERVER( line, var, arg );
else if( strcasecmp( section, "[CHANNEL]" ) == 0 ) Handle_CHANNEL( line, var, arg );
@ -1117,7 +1121,7 @@ Handle_GLOBAL( int Line, char *Var, char *Arg )
if (CheckLegacyNoOption(Var, Arg)) {
Config_Error(LOG_WARNING, "%s, line %d: \"No\"-Prefix has been removed, use "
"\"%s = %s\" instead",
"\"%s = %s\" in [FEATURES] section instead",
NGIRCd_ConfFile, Line, NoNo(Var), InvertArg(Arg));
if (strcasecmp(Var, "NoIdent") == 0)
WarnIdent(Line);
@ -1125,28 +1129,6 @@ Handle_GLOBAL( int Line, char *Var, char *Arg )
WarnPAM(Line);
return;
}
if( strcasecmp( Var, "DNS" ) == 0 ) {
/* do reverse dns lookups when clients connect? */
Conf_DNS = Check_ArgIsTrue( Arg );
return;
}
if (strcasecmp(Var, "Ident") == 0) {
/* do IDENT lookups when clients connect? */
Conf_Ident = Check_ArgIsTrue(Arg);
WarnIdent(Line);
return;
}
if(strcasecmp(Var, "PAM") == 0) {
/* use PAM library to authenticate users */
Conf_PAM = Check_ArgIsTrue(Arg);
WarnPAM(Line);
return;
}
if(strcasecmp(Var, "ZeroConf") == 0) {
/* register services using ZeroConf */
Conf_ZeroConf = Check_ArgIsTrue(Arg);
return;
}
#ifdef WANT_IPV6
/* the default setting for all the WANT_IPV6 special options is 'true' */
if( strcasecmp( Var, "ConnectIPv6" ) == 0 ) {
@ -1271,6 +1253,37 @@ Handle_GLOBAL( int Line, char *Var, char *Arg )
} /* Handle_GLOBAL */
static void
Handle_FEATURES(int Line, char *Var, char *Arg)
{
assert( Line > 0 );
assert( Var != NULL );
assert( Arg != NULL );
if( strcasecmp( Var, "DNS" ) == 0 ) {
/* do reverse dns lookups when clients connect? */
Conf_DNS = Check_ArgIsTrue( Arg );
return;
}
if (strcasecmp(Var, "Ident") == 0) {
/* do IDENT lookups when clients connect? */
Conf_Ident = Check_ArgIsTrue(Arg);
WarnIdent(Line);
return;
}
if(strcasecmp(Var, "PAM") == 0) {
/* use PAM library to authenticate users */
Conf_PAM = Check_ArgIsTrue(Arg);
WarnPAM(Line);
return;
}
if(strcasecmp(Var, "ZeroConf") == 0) {
/* register services using ZeroConf */
Conf_ZeroConf = Check_ArgIsTrue(Arg);
return;
}
}
static void
Handle_OPERATOR( int Line, char *Var, char *Arg )
{