X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Fconf.c;h=19d22d1572ac63bcb557cc02779005f7fc60918a;hp=12893ad8f86446abaa1574280abefb14be6889a8;hb=9a102ca96b7d2cbecdbe1a7fcec1444cad22d50b;hpb=25dd193e9b49b38db39cf549f94df4ba11812fe9 diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c index 12893ad8..19d22d15 100644 --- a/src/ngircd/conf.c +++ b/src/ngircd/conf.c @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2010 Alexander Barton (alex@barton.de) + * Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -72,6 +72,8 @@ static void Handle_CHANNEL PARAMS(( int Line, char *Var, char *Arg )); static void Config_Error PARAMS(( const int Level, const char *Format, ... )); static void Config_Error_NaN PARAMS(( const int LINE, const char *Value )); +static void Config_Error_Section PARAMS(( const int Line, const char *Item, + const char *Section )); static void Config_Error_TooLong PARAMS(( const int LINE, const char *Value )); static void Init_Server_Struct PARAMS(( CONF_SERVER *Server )); @@ -352,10 +354,14 @@ Conf_Test( void ) printf(" MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP); printf(" MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1); printf(" MaxNickLength = %u\n", Conf_MaxNickLength - 1); - printf(" ClientHost = %s\n", Conf_ClientHost); - printf(" ClientUserNick = %s\n\n", yesno_to_str(Conf_ClientUserNick)); + printf(" NoticeAuth = %s\n", yesno_to_str(Conf_NoticeAuth)); + printf(" CloakHost = %s\n", Conf_CloakHost); + printf(" CloakUserToNick = %s\n", yesno_to_str(Conf_CloakUserToNick)); +#ifndef STRICT_RFC + printf(" RequireAuthPing = %s\n", yesno_to_str(Conf_AuthPing)); +#endif - puts("[FEATURES]"); + printf("\n[FEATURES]\n"); 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)); @@ -592,8 +598,6 @@ Set_Defaults(bool InitServers) int i; strcpy(Conf_ServerName, ""); - strcpy(Conf_ClientHost, ""); - Conf_ClientUserNick = false; snprintf(Conf_ServerInfo, sizeof Conf_ServerInfo, "%s %s", PACKAGE_NAME, PACKAGE_VERSION); strcpy(Conf_ServerPwd, ""); @@ -616,6 +620,7 @@ Set_Defaults(bool InitServers) Conf_PongTimeout = 20; Conf_ConnectRetry = 60; Conf_DNS = true; + Conf_NoticeAuth = false; Conf_Oper_Count = 0; Conf_Channel_Count = 0; @@ -633,6 +638,9 @@ Set_Defaults(bool InitServers) Conf_MaxJoins = 10; Conf_MaxNickLength = CLIENT_NICK_LEN_DEFAULT; + strcpy(Conf_CloakHost, ""); + Conf_CloakUserToNick = false; + #ifdef SYSLOG #ifdef LOG_LOCAL5 Conf_SyslogFacility = LOG_LOCAL5; @@ -640,6 +648,11 @@ Set_Defaults(bool InitServers) Conf_SyslogFacility = 0; #endif #endif + +#ifndef STRICT_RFC + Conf_AuthPing = false; +#endif + Set_Defaults_Optional(); /* Initialize server configuration structures */ @@ -962,11 +975,11 @@ Handle_GLOBAL( int Line, char *Var, char *Arg ) struct passwd *pwd; struct group *grp; size_t len; - + assert( Line > 0 ); assert( Var != NULL ); assert( Arg != NULL ); - + if( strcasecmp( Var, "Name" ) == 0 ) { /* Server name */ len = strlcpy( Conf_ServerName, Arg, sizeof( Conf_ServerName )); @@ -974,16 +987,16 @@ Handle_GLOBAL( int Line, char *Var, char *Arg ) Config_Error_TooLong( Line, Var ); return; } - if( strcasecmp( Var, "ClientHost" ) == 0 ) { + if( strcasecmp( Var, "CloakHost" ) == 0 ) { /* Client hostname */ - len = strlcpy( Conf_ClientHost, Arg, sizeof( Conf_ClientHost )); - if (len >= sizeof( Conf_ClientHost )) + len = strlcpy( Conf_CloakHost, Arg, sizeof( Conf_CloakHost )); + if (len >= sizeof( Conf_CloakHost )) Config_Error_TooLong( Line, Var ); return; } - if( strcasecmp( Var, "ClientUserNick" ) == 0 ) { + if( strcasecmp( Var, "CloakUserToNick" ) == 0 ) { /* Use client nick name as user name */ - Conf_ClientUserNick = Check_ArgIsTrue( Arg ); + Conf_CloakUserToNick = Check_ArgIsTrue( Arg ); return; } if( strcasecmp( Var, "Info" ) == 0 ) { @@ -1127,8 +1140,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\" in [FEATURES] section instead", + Config_Error(LOG_WARNING, "%s, line %d: \"No\"-Prefix has been removed, use \"%s = %s\" in [FEATURES] section instead", NGIRCd_ConfFile, Line, NoNo(Var), InvertArg(Arg)); if (strcasecmp(Var, "NoIdent") == 0) WarnIdent(Line); @@ -1192,6 +1204,11 @@ Handle_GLOBAL( int Line, char *Var, char *Arg ) Conf_MaxNickLength = Handle_MaxNickLength(Line, Arg); return; } + if(strcasecmp(Var, "NoticeAuth") == 0) { + /* send NOTICE AUTH messages to clients on connect */ + Conf_NoticeAuth = Check_ArgIsTrue(Arg); + return; + } if( strcasecmp( Var, "Listen" ) == 0 ) { /* IP-Address to bind sockets */ @@ -1249,9 +1266,16 @@ Handle_GLOBAL( int Line, char *Var, char *Arg ) return; } #endif - Config_Error(LOG_ERR, "%s, line %d (section \"Global\"): Unknown variable \"%s\"!", - NGIRCd_ConfFile, Line, Var); -} /* Handle_GLOBAL */ +#ifndef STRICT_RFC + if (strcasecmp(Var, "RequireAuthPing") == 0 ) { + /* Require new clients to do an "autheticatin PING-PONG" */ + Conf_AuthPing = Check_ArgIsTrue(Arg); + return; + } +#endif + + Config_Error_Section(Line, Var, "Global"); +} static void @@ -1278,6 +1302,8 @@ Handle_FEATURES(int Line, char *Var, char *Arg) WarnPAM(Line); return; } + + Config_Error_Section(Line, Var, "Options"); } static void @@ -1317,17 +1343,16 @@ Handle_OPERATOR( int Line, char *Var, char *Arg ) op->mask = strdup_warn( Arg ); return; } - Config_Error( LOG_ERR, "%s, line %d (section \"Operator\"): Unknown variable \"%s\"!", - NGIRCd_ConfFile, Line, Var ); -} /* Handle_OPERATOR */ + Config_Error_Section(Line, Var, "Operator"); +} static void Handle_SERVER( int Line, char *Var, char *Arg ) { long port; size_t len; - + assert( Line > 0 ); assert( Var != NULL ); assert( Arg != NULL ); @@ -1413,9 +1438,8 @@ Handle_SERVER( int Line, char *Var, char *Arg ) return; } - Config_Error( LOG_ERR, "%s, line %d (section \"Server\"): Unknown variable \"%s\"!", - NGIRCd_ConfFile, Line, Var ); -} /* Handle_SERVER */ + Config_Error_Section(Line, Var, "Server"); +} static bool @@ -1497,10 +1521,8 @@ Handle_CHANNEL(int Line, char *Var, char *Arg) return; } - Config_Error( LOG_ERR, "%s, line %d (section \"Channel\"): Unknown variable \"%s\"!", - NGIRCd_ConfFile, Line, Var ); -} /* Handle_CHANNEL */ - + Config_Error_Section(Line, Var, "Channel"); +} static bool Validate_Config(bool Configtest, bool Rehash) @@ -1608,6 +1630,12 @@ Config_Error_TooLong ( const int Line, const char *Item ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"%s\" too long!", NGIRCd_ConfFile, Line, Item ); } +static void +Config_Error_Section(const int Line, const char *Item, const char *Section) +{ + Config_Error(LOG_ERR, "%s, line %d (section \"%s\"): Unknown variable \"%s\"!", + NGIRCd_ConfFile, Line, Section, Item); +} static void Config_Error_NaN( const int Line, const char *Item ) @@ -1616,7 +1644,6 @@ Config_Error_NaN( const int Line, const char *Item ) NGIRCd_ConfFile, Line, Item ); } - #ifdef PROTOTYPES static void Config_Error( const int Level, const char *Format, ... ) #else @@ -1640,7 +1667,7 @@ va_dcl #endif vsnprintf( msg, MAX_LOG_MSG_LEN, Format, ap ); va_end( ap ); - + /* During "normal operations" the log functions of the daemon should * be used, but during testing of the configuration file, all messages * should go directly to the console: */