* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
- * $Id: conf.c,v 1.25 2002/05/22 11:14:36 alex Exp $
+ * $Id: conf.c,v 1.28 2002/09/02 14:59:17 alex Exp $
*
* conf.h: Konfiguration des ngircd
*/
#include <unistd.h>
#include "ngircd.h"
+#include "conn.h"
#include "client.h"
#include "defines.h"
#include "log.h"
+#include "resolve.h"
#include "tool.h"
#include "exp.h"
LOCAL BOOLEAN Use_Log = TRUE;
-LOCAL VOID Set_Defaults( VOID );
-LOCAL VOID Read_Config( VOID );
-LOCAL VOID Validate_Config( VOID );
+LOCAL VOID Set_Defaults PARAMS(( VOID ));
+LOCAL VOID Read_Config PARAMS(( VOID ));
+LOCAL VOID Validate_Config PARAMS(( VOID ));
-GLOBAL VOID Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg );
-GLOBAL VOID Handle_OPERATOR( INT Line, CHAR *Var, CHAR *Arg );
-GLOBAL VOID Handle_SERVER( INT Line, CHAR *Var, CHAR *Arg );
-GLOBAL VOID Handle_CHANNEL( INT Line, CHAR *Var, CHAR *Arg );
+LOCAL VOID Handle_GLOBAL PARAMS(( INT Line, CHAR *Var, CHAR *Arg ));
+LOCAL VOID Handle_OPERATOR PARAMS(( INT Line, CHAR *Var, CHAR *Arg ));
+LOCAL VOID Handle_SERVER PARAMS(( INT Line, CHAR *Var, CHAR *Arg ));
+LOCAL VOID Handle_CHANNEL PARAMS(( INT Line, CHAR *Var, CHAR *Arg ));
-LOCAL VOID Config_Error( CONST INT Level, CONST CHAR *Format, ... );
+LOCAL VOID Config_Error PARAMS(( CONST INT Level, CONST CHAR *Format, ... ));
-GLOBAL VOID Conf_Init( VOID )
+GLOBAL VOID
+Conf_Init( VOID )
{
Set_Defaults( );
Read_Config( );
} /* Config_Init */
-GLOBAL INT Conf_Test( VOID )
+GLOBAL INT
+Conf_Test( VOID )
{
/* Konfiguration einlesen, ueberpruefen und ausgeben. */
printf( " PingTimeout = %d\n", Conf_PingTimeout );
printf( " PongTimeout = %d\n", Conf_PongTimeout );
printf( " ConnectRetry = %d\n", Conf_ConnectRetry );
+ printf( " OperCanUseMode = %s\n", Conf_OperCanMode == TRUE ? "yes" : "no" );
puts( "" );
for( i = 0; i < Conf_Oper_Count; i++ )
} /* Conf_Test */
-GLOBAL VOID Conf_Exit( VOID )
-{
- /* ... */
-} /* Config_Exit */
-
-
-LOCAL VOID Set_Defaults( VOID )
+LOCAL VOID
+Set_Defaults( VOID )
{
/* Konfigurationsvariablen initialisieren, d.h. auf Default-Werte setzen. */
strcpy( Conf_ServerName, "" );
- strcpy( Conf_ServerInfo, PACKAGE" "VERSION );
+ sprintf( Conf_ServerInfo, "%s %s", PACKAGE, VERSION );
strcpy( Conf_ServerPwd, "" );
strcpy( Conf_MotdFile, MOTD_FILE );
Conf_Oper_Count = 0;
Conf_Server_Count = 0;
Conf_Channel_Count = 0;
+
+ Conf_OperCanMode = FALSE;
} /* Set_Defaults */
-LOCAL VOID Read_Config( VOID )
+LOCAL VOID
+Read_Config( VOID )
{
/* Konfigurationsdatei einlesen. */
{
/* Keine Konfigurationsdatei gefunden */
Config_Error( LOG_ALERT, "Can't read configuration \"%s\": %s", NGIRCd_ConfFile, strerror( errno ));
- Config_Error( LOG_ALERT, PACKAGE" exiting due to fatal errors!" );
+ Config_Error( LOG_ALERT, "%s exiting due to fatal errors!", PACKAGE );
exit( 1 );
}
} /* Read_Config */
-GLOBAL VOID Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
+LOCAL VOID
+Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
{
CHAR *ptr;
INT32 port;
if(( Conf_ConnectRetry ) < 5 ) Conf_ConnectRetry = 5;
return;
}
+ if( strcasecmp( Var, "OperCanUseMode" ) == 0 )
+ {
+ /* Koennen IRC-Operatoren immer MODE benutzen? */
+ if( strcasecmp( Arg, "yes" ) == 0 ) Conf_OperCanMode = TRUE;
+ else if( strcasecmp( Arg, "true" ) == 0 ) Conf_OperCanMode = TRUE;
+ else if( atoi( Arg ) != 0 ) Conf_OperCanMode = TRUE;
+ else Conf_OperCanMode = FALSE;
+ return;
+ }
Config_Error( LOG_ERR, "%s, line %d (section \"Global\"): Unknown variable \"%s\"!", NGIRCd_ConfFile, Line, Var );
} /* Handle_GLOBAL */
-GLOBAL VOID Handle_OPERATOR( INT Line, CHAR *Var, CHAR *Arg )
+LOCAL VOID
+Handle_OPERATOR( INT Line, CHAR *Var, CHAR *Arg )
{
assert( Line > 0 );
assert( Var != NULL );
} /* Handle_OPERATOR */
-GLOBAL VOID Handle_SERVER( INT Line, CHAR *Var, CHAR *Arg )
+LOCAL VOID
+Handle_SERVER( INT Line, CHAR *Var, CHAR *Arg )
{
INT32 port;
} /* Handle_SERVER */
-GLOBAL VOID Handle_CHANNEL( INT Line, CHAR *Var, CHAR *Arg )
+LOCAL VOID
+Handle_CHANNEL( INT Line, CHAR *Var, CHAR *Arg )
{
assert( Line > 0 );
assert( Var != NULL );
} /* Handle_CHANNEL */
-LOCAL VOID Validate_Config( VOID )
+LOCAL VOID
+Validate_Config( VOID )
{
/* Konfiguration ueberpruefen */
{
/* Kein Servername konfiguriert */
Config_Error( LOG_ALERT, "No server name configured in \"%s\"!", NGIRCd_ConfFile );
- Config_Error( LOG_ALERT, PACKAGE" exiting due to fatal errors!" );
+ Config_Error( LOG_ALERT, "%s exiting due to fatal errors!", PACKAGE );
exit( 1 );
}
} /* Validate_Config */
+#ifdef PROTOTYPES
LOCAL VOID Config_Error( CONST INT Level, CONST CHAR *Format, ... )
+#else
+LOCAL VOID Config_Error( Level, Format, va_alist )
+CONST INT Level;
+CONST CHAR *Format;
+va_dcl
+#endif
{
/* Fehler! Auf Console und/oder ins Log schreiben */
assert( Format != NULL );
/* String mit variablen Argumenten zusammenbauen ... */
+#ifdef PROTOTYPES
va_start( ap, Format );
+#else
+ va_start( ap );
+#endif
vsnprintf( msg, MAX_LOG_MSG_LEN, Format, ap );
va_end( ap );