diff --git a/doc/sample-ngircd.conf.tmpl b/doc/sample-ngircd.conf.tmpl index 12b688d2..9bfa9d41 100644 --- a/doc/sample-ngircd.conf.tmpl +++ b/doc/sample-ngircd.conf.tmpl @@ -134,19 +134,18 @@ # Allow Pre-Defined Channels only (see Section [Channels]) ;PredefChannelsOnly = no - # Don't do any DNS lookups when a client connects to the server. - ;NoDNS = no + # Do any DNS lookups when a client connects to the server. + ;DNS = yes - # Don't do any IDENT lookups, even if ngIRCd has been compiled - # with support for it. - ;NoIdent = no + # Do any IDENT lookups if ngIRCd has been compiled with support for it. + ;Ident = yes - # Don't use PAM, even if ngIRCd has been compiled with support for it. - ;NoPAM = no + # Use PAM if ngIRCd has been compiled with support for it. + ;PAM = no - # Don't use ZeroConf service registration, even if ngIRCd has been + # Use ZeroConf service registration if ngIRCd has been # compiled with support for it (e.g. Howl, Avahi, Mac OS X). - ;NoZeroConf = no + ;ZeroConf = no # try to connect to other irc servers using ipv4 and ipv6, if possible ;ConnectIPv6 = yes diff --git a/man/ngircd.conf.5.tmpl b/man/ngircd.conf.5.tmpl index 8fa7623a..1a6301fb 100644 --- a/man/ngircd.conf.5.tmpl +++ b/man/ngircd.conf.5.tmpl @@ -205,28 +205,28 @@ you do not want to have channels other than those defined in [Channel] sections in the configuration file. Default: no. .TP -\fBNoDNS\fR -If set to true, ngIRCd will not make DNS lookups when clients connect. +\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: no. +Default: yes. .TP -\fBNoIdent\fR +\fBIdent\fR If ngIRCd is compiled with IDENT support this can be used to disable IDENT lookups at run time. -Default: no. +Default: yes. .TP -\fBNoPAM\fR +\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: no. +Default: yes. .TP -\fBNoZeroConf\fR +\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: no. +Default: yes. .TP \fBConnectIPv4\fR Set this to no if you do not want ngIRCd to connect to other IRC servers using diff --git a/src/ngircd/client.c b/src/ngircd/client.c index ecd1a7c5..737c0184 100644 --- a/src/ngircd/client.c +++ b/src/ngircd/client.c @@ -93,7 +93,7 @@ Client_Init( void ) This_Server->hops = 0; gethostname( This_Server->host, CLIENT_HOST_LEN ); - if (!Conf_NoDNS) { + if (Conf_DNS) { h = gethostbyname( This_Server->host ); if (h) strlcpy(This_Server->host, h->h_name, sizeof(This_Server->host)); } diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c index 4a255b26..b194d3ae 100644 --- a/src/ngircd/conf.c +++ b/src/ngircd/conf.c @@ -341,10 +341,10 @@ 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(" NoDNS = %s\n", yesno_to_str(Conf_NoDNS)); - printf(" NoIdent = %s\n", yesno_to_str(Conf_NoIdent)); - printf(" NoPAM = %s\n", yesno_to_str(Conf_NoPAM)); - printf(" NoZeroConf = %s\n", yesno_to_str(Conf_NoZeroConf)); + 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)); @@ -561,6 +561,27 @@ Conf_IsService(int ConfServer, const char *Nick) } /* Conf_IsService */ +static void +Set_Defaults_Optional(void) +{ +#ifdef IDENTAUTH + Conf_Ident = true; +#else + Conf_Ident = false; +#endif +#ifdef PAM + Conf_PAM = true; +#else + Conf_PAM = false; +#endif +#ifdef ZEROCONF + Conf_ZeroConf = true; +#else + Conf_ZeroConf = false; +#endif +} + + /** * Initialize configuration settings with their default values. */ @@ -591,10 +612,7 @@ Set_Defaults(bool InitServers) Conf_PingTimeout = 120; Conf_PongTimeout = 20; Conf_ConnectRetry = 60; - Conf_NoDNS = false; - Conf_NoIdent = false; - Conf_NoPAM = false; - Conf_NoZeroConf = false; + Conf_DNS = true; Conf_Oper_Count = 0; Conf_Channel_Count = 0; @@ -619,6 +637,7 @@ Set_Defaults(bool InitServers) Conf_SyslogFacility = 0; #endif #endif + Set_Defaults_Optional(); /* Initialize server configuration structures */ if (InitServers) { @@ -873,6 +892,53 @@ Handle_MaxNickLength(int Line, const char *Arg) } /* Handle_MaxNickLength */ +static void +WarnIdent(int Line) +{ +#ifndef IDENTAUTH + if (Conf_Ident) { + /* user has enabled ident lookups explicitly, but ... */ + Config_Error(LOG_WARNING, + "%s: line %d: Ident=True, but ngircd was built without IDENT support", + NGIRCd_ConfFile, Line); + } +#endif +} + +static bool +CheckLegacyNoOption(const char *Var, const char *Arg) +{ + if( strcasecmp( Var, "NoDNS" ) == 0 ) { + Conf_DNS = !Check_ArgIsTrue( Arg ); + return true; + } + if (strcasecmp(Var, "NoIdent") == 0) { + Conf_Ident = !Check_ArgIsTrue(Arg); + return true; + } + if(strcasecmp(Var, "NoPAM") == 0) { + Conf_PAM = !Check_ArgIsTrue(Arg); + return true; + } + if(strcasecmp(Var, "NoZeroConf") == 0) { + Conf_ZeroConf = !Check_ArgIsTrue(Arg); + return true; + } + return false; +} + +const char * +NoNo(const char *str) +{ + assert(strncasecmp("no", str, 2) == 0 && str[2]); + return str + 2; +} + +static const char * +InvertArg(const char *arg) +{ + return yesno_to_str(!Check_ArgIsTrue(arg)); +} static void Handle_GLOBAL( int Line, char *Var, char *Arg ) @@ -1036,32 +1102,34 @@ Handle_GLOBAL( int Line, char *Var, char *Arg ) Conf_PredefChannelsOnly = Check_ArgIsTrue( Arg ); return; } - if( strcasecmp( Var, "NoDNS" ) == 0 ) { - /* don't do reverse dns lookups when clients connect? */ - Conf_NoDNS = Check_ArgIsTrue( Arg ); + + if (CheckLegacyNoOption(Var, Arg)) { + Config_Error(LOG_WARNING, "%s, line %d: \"No\"-Prefix has been removed, use " + "\"%s = %s\" instead", + NGIRCd_ConfFile, Line, NoNo(Var), InvertArg(Arg)); + if (strcasecmp(Var, "NoIdent") == 0) + WarnIdent(Line); return; } - if (strcasecmp(Var, "NoIdent") == 0) { - /* don't do IDENT lookups when clients connect? */ - Conf_NoIdent = Check_ArgIsTrue(Arg); -#ifndef IDENTAUTH - if (!Conf_NoIdent) { - /* user has enabled ident lookups explicitly, but ... */ - Config_Error(LOG_WARNING, - "%s: line %d: NoIdent=False, but ngircd was built without IDENT support", - NGIRCd_ConfFile, Line); - } -#endif + if( strcasecmp( Var, "DNS" ) == 0 ) { + /* do reverse dns lookups when clients connect? */ + Conf_DNS = Check_ArgIsTrue( Arg ); return; } - if(strcasecmp(Var, "NoPAM") == 0) { - /* don't use PAM library to authenticate users */ - Conf_NoPAM = Check_ArgIsTrue(Arg); + if (strcasecmp(Var, "Ident") == 0) { + /* do IDENT lookups when clients connect? */ + Conf_Ident = Check_ArgIsTrue(Arg); + WarnIdent(Line); return; } - if(strcasecmp(Var, "NoZeroConf") == 0) { - /* don't register services using ZeroConf */ - Conf_NoZeroConf = Check_ArgIsTrue(Arg); + if(strcasecmp(Var, "PAM") == 0) { + /* use PAM library to authenticate users */ + Conf_PAM = Check_ArgIsTrue(Arg); + return; + } + if(strcasecmp(Var, "ZeroConf") == 0) { + /* register services using ZeroConf */ + Conf_ZeroConf = Check_ArgIsTrue(Arg); return; } #ifdef WANT_IPV6 diff --git a/src/ngircd/conf.h b/src/ngircd/conf.h index 47a499ae..3cddbb4b 100644 --- a/src/ngircd/conf.h +++ b/src/ngircd/conf.h @@ -143,17 +143,17 @@ GLOBAL bool Conf_OperServerMode; /* Are remote IRC operators allowed to manage this server? */ GLOBAL bool Conf_AllowRemoteOper; -/* Disable all DNS functions? */ -GLOBAL bool Conf_NoDNS; +/* Enable all DNS functions? */ +GLOBAL bool Conf_DNS; -/* Disable IDENT lookups, even when compiled with support for it */ -GLOBAL bool Conf_NoIdent; +/* Enable IDENT lookups, even when compiled with support for it */ +GLOBAL bool Conf_Ident; -/* Disable all usage of PAM, even when compiled with support for it */ -GLOBAL bool Conf_NoPAM; +/* Enable all usage of PAM, even when compiled with support for it */ +GLOBAL bool Conf_PAM; -/* Disable service registration using "ZeroConf" */ -GLOBAL bool Conf_NoZeroConf; +/* Enable service registration using "ZeroConf" */ +GLOBAL bool Conf_ZeroConf; /* * try to connect to remote systems using the ipv6 protocol, diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index 51ab8fd3..6a1c056e 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -1381,10 +1381,10 @@ New_Connection(int Sock) identsock = new_sock; #ifdef IDENTAUTH - if (Conf_NoIdent) + if (!Conf_Ident) identsock = -1; #endif - if (!Conf_NoDNS) + if (Conf_DNS) Resolve_Addr(&My_Connections[new_sock].proc_stat, &new_addr, identsock, cb_Read_Resolver_Result); diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c index 03fea99a..381dd201 100644 --- a/src/ngircd/irc-login.c +++ b/src/ngircd/irc-login.c @@ -778,7 +778,7 @@ Hello_User(CLIENT * Client) assert(Client != NULL); conn = Client_Conn(Client); - if (Conf_NoPAM) { + if (!Conf_PAM) { /* Don't do any PAM authentication at all, instead emulate * the beahiour of the daemon compiled without PAM support: * because there can't be any "server password", all diff --git a/src/ngircd/rendezvous.c b/src/ngircd/rendezvous.c index c0c22eb7..056cb1e5 100644 --- a/src/ngircd/rendezvous.c +++ b/src/ngircd/rendezvous.c @@ -151,7 +151,7 @@ GLOBAL bool Rendezvous_Register( char *Name, char *Type, UINT16 Port ) { int i; - if (Conf_NoZeroConf) + if (!Conf_ZeroConf) return true; /* Search free port structure */