/*
* 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
* Please read the file COPYING, README and AUTHORS for more information.
*/
-
#include "portab.h"
/**
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 ));
printf(" MaxConnections = %ld\n", Conf_MaxConnections);
printf(" MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP);
printf(" MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1);
- printf(" MaxNickLength = %u\n\n", Conf_MaxNickLength - 1);
+ printf(" MaxNickLength = %u\n", Conf_MaxNickLength - 1);
+ 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));
Conf_PongTimeout = 20;
Conf_ConnectRetry = 60;
Conf_DNS = true;
+ Conf_NoticeAuth = false;
Conf_Oper_Count = 0;
Conf_Channel_Count = 0;
Conf_MaxJoins = 10;
Conf_MaxNickLength = CLIENT_NICK_LEN_DEFAULT;
+ strcpy(Conf_CloakHost, "");
+ Conf_CloakUserToNick = false;
+
#ifdef SYSLOG
#ifdef LOG_LOCAL5
Conf_SyslogFacility = LOG_LOCAL5;
Conf_SyslogFacility = 0;
#endif
#endif
+
+#ifndef STRICT_RFC
+ Conf_AuthPing = false;
+#endif
+
Set_Defaults_Optional();
/* Initialize server configuration structures */
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 ));
Config_Error_TooLong( Line, Var );
return;
}
+ if( strcasecmp( Var, "CloakHost" ) == 0 ) {
+ /* Client hostname */
+ len = strlcpy( Conf_CloakHost, Arg, sizeof( Conf_CloakHost ));
+ if (len >= sizeof( Conf_CloakHost ))
+ Config_Error_TooLong( Line, Var );
+ return;
+ }
+ if( strcasecmp( Var, "CloakUserToNick" ) == 0 ) {
+ /* Use client nick name as user name */
+ Conf_CloakUserToNick = Check_ArgIsTrue( Arg );
+ return;
+ }
if( strcasecmp( Var, "Info" ) == 0 ) {
/* Info text of server */
len = strlcpy( Conf_ServerInfo, Arg, sizeof( Conf_ServerInfo ));
}
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);
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 */
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
WarnPAM(Line);
return;
}
+
+ Config_Error_Section(Line, Var, "Options");
}
static void
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 );
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
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)
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 )
NGIRCd_ConfFile, Line, Item );
}
-
#ifdef PROTOTYPES
static void Config_Error( const int Level, const char *Format, ... )
#else
#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: */