commit - a39f47916368a518f39cd50f6bb3e5bfea971f96
commit + 2e02da291a97b157a07ee94b11b7317533b5bac0
blob - 7799da19f37be714e763e7d8030b6a178df54afa
blob + 36e14aad3d80e9ff68a5aa0337127d25dc639800
--- src/ngircd/conf.c
+++ src/ngircd/conf.c
* 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.40 2002/11/25 01:01:59 alex Exp $
+ * $Id: conf.c,v 1.41 2002/11/30 22:15:49 alex Exp $
*
* conf.h: Konfiguration des ngircd
*/
#include <pwd.h>
#include <grp.h>
#include <sys/types.h>
+
+#ifdef HAVE_CTYPE_H
+# include <ctype.h>
+#endif
#include "ngircd.h"
#include "conn.h"
/* Der Server-Name */
strncpy( Conf_ServerName, Arg, CLIENT_ID_LEN - 1 );
Conf_ServerName[CLIENT_ID_LEN - 1] = '\0';
+ if( strlen( Arg ) > CLIENT_ID_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Name\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "Info" ) == 0 )
/* Server-Info-Text */
strncpy( Conf_ServerInfo, Arg, CLIENT_INFO_LEN - 1 );
Conf_ServerInfo[CLIENT_INFO_LEN - 1] = '\0';
+ if( strlen( Arg ) > CLIENT_INFO_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Info\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "Password" ) == 0 )
/* Server-Passwort */
strncpy( Conf_ServerPwd, Arg, CLIENT_PASS_LEN - 1 );
Conf_ServerPwd[CLIENT_PASS_LEN - 1] = '\0';
+ if( strlen( Arg ) > CLIENT_PASS_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Password\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "AdminInfo1" ) == 0 )
/* Server-Info-Text */
strncpy( Conf_ServerAdmin1, Arg, CLIENT_INFO_LEN - 1 );
Conf_ServerAdmin1[CLIENT_INFO_LEN - 1] = '\0';
+ if( strlen( Arg ) > CLIENT_INFO_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"AdminInfo1\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "AdminInfo2" ) == 0 )
/* Server-Info-Text */
strncpy( Conf_ServerAdmin2, Arg, CLIENT_INFO_LEN - 1 );
Conf_ServerAdmin2[CLIENT_INFO_LEN - 1] = '\0';
+ if( strlen( Arg ) > CLIENT_INFO_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"AdminInfo2\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "AdminEMail" ) == 0 )
/* Server-Info-Text */
strncpy( Conf_ServerAdminMail, Arg, CLIENT_INFO_LEN - 1 );
Conf_ServerAdminMail[CLIENT_INFO_LEN - 1] = '\0';
+ if( strlen( Arg ) > CLIENT_INFO_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"AdminEMail\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "Ports" ) == 0 )
/* Datei mit der "message of the day" (MOTD) */
strncpy( Conf_MotdFile, Arg, FNAME_LEN - 1 );
Conf_MotdFile[FNAME_LEN - 1] = '\0';
+ if( strlen( Arg ) > FNAME_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MotdFile\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "ServerUID" ) == 0 )
/* UID, mit der der Daemon laufen soll */
pwd = getpwnam( Arg );
if( pwd ) Conf_UID = pwd->pw_uid;
- else Conf_UID = (UINT)atoi( Arg );
+ else
+ {
+#ifdef HAVE_ISDIGIT
+ if( ! isdigit( *Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"ServerUID\" is not a number!", NGIRCd_ConfFile, Line );
+ else
+#endif
+ Conf_UID = (UINT)atoi( Arg );
+ }
return;
}
if( strcasecmp( Var, "ServerGID" ) == 0 )
/* GID, mit der der Daemon laufen soll */
grp = getgrnam( Arg );
if( grp ) Conf_GID = grp->gr_gid;
- else Conf_GID = (UINT)atoi( Arg );
+ else
+ {
+#ifdef HAVE_ISDIGIT
+ if( ! isdigit( *Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"ServerGID\" is not a number!", NGIRCd_ConfFile, Line );
+ else
+#endif
+ Conf_GID = (UINT)atoi( Arg );
+ }
return;
}
if( strcasecmp( Var, "PingTimeout" ) == 0 )
{
/* PING-Timeout */
Conf_PingTimeout = atoi( Arg );
- if(( Conf_PingTimeout ) < 5 ) Conf_PingTimeout = 5;
+ if( Conf_PingTimeout < 5 )
+ {
+ Config_Error( LOG_WARNING, "%s, line %d: Value of \"PingTimeout\" too low!", NGIRCd_ConfFile, Line );
+ Conf_PingTimeout = 5;
+ }
return;
}
if( strcasecmp( Var, "PongTimeout" ) == 0 )
{
/* PONG-Timeout */
Conf_PongTimeout = atoi( Arg );
- if(( Conf_PongTimeout ) < 5 ) Conf_PongTimeout = 5;
+ if( Conf_PongTimeout < 5 )
+ {
+ Config_Error( LOG_WARNING, "%s, line %d: Value of \"PongTimeout\" too low!", NGIRCd_ConfFile, Line );
+ Conf_PongTimeout = 5;
+ }
return;
}
if( strcasecmp( Var, "ConnectRetry" ) == 0 )
{
/* Sekunden zwischen Verbindungsversuchen zu anderen Servern */
Conf_ConnectRetry = atoi( Arg );
- if(( Conf_ConnectRetry ) < 5 ) Conf_ConnectRetry = 5;
+ if( Conf_ConnectRetry < 5 )
+ {
+ Config_Error( LOG_WARNING, "%s, line %d: Value of \"ConnectRetry\" too low!", NGIRCd_ConfFile, Line );
+ Conf_ConnectRetry = 5;
+ }
return;
}
if( strcasecmp( Var, "OperCanUseMode" ) == 0 )
{
/* Maximale Anzahl von Verbindungen. Werte <= 0 stehen
* fuer "kein Limit". */
+#ifdef HAVE_ISDIGIT
+ if( ! isdigit( *Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MaxConnections\" is not a number!", NGIRCd_ConfFile, Line );
+ else
+#endif
Conf_MaxConnections = atol( Arg );
return;
}
/* Name des IRC Operator */
strncpy( Conf_Oper[Conf_Oper_Count - 1].name, Arg, CLIENT_PASS_LEN - 1 );
Conf_Oper[Conf_Oper_Count - 1].name[CLIENT_PASS_LEN - 1] = '\0';
+ if( strlen( Arg ) > CLIENT_PASS_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Name\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "Password" ) == 0 )
/* Passwort des IRC Operator */
strncpy( Conf_Oper[Conf_Oper_Count - 1].pwd, Arg, CLIENT_PASS_LEN - 1 );
Conf_Oper[Conf_Oper_Count - 1].pwd[CLIENT_PASS_LEN - 1] = '\0';
+ if( strlen( Arg ) > CLIENT_PASS_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Password\" too long!", NGIRCd_ConfFile, Line );
return;
}
/* Hostname des Servers */
strncpy( Conf_Server[Conf_Server_Count - 1].host, Arg, HOST_LEN - 1 );
Conf_Server[Conf_Server_Count - 1].host[HOST_LEN - 1] = '\0';
+ if( strlen( Arg ) > HOST_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Host\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "Name" ) == 0 )
/* Name des Servers ("Nick") */
strncpy( Conf_Server[Conf_Server_Count - 1].name, Arg, CLIENT_ID_LEN - 1 );
Conf_Server[Conf_Server_Count - 1].name[CLIENT_ID_LEN - 1] = '\0';
+ if( strlen( Arg ) > CLIENT_ID_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Name\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "MyPassword" ) == 0 )
/* Passwort dieses Servers, welches empfangen werden muss */
strncpy( Conf_Server[Conf_Server_Count - 1].pwd_in, Arg, CLIENT_PASS_LEN - 1 );
Conf_Server[Conf_Server_Count - 1].pwd_in[CLIENT_PASS_LEN - 1] = '\0';
+ if( strlen( Arg ) > CLIENT_PASS_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MyPassword\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "PeerPassword" ) == 0 )
/* Passwort des anderen Servers, welches gesendet werden muss */
strncpy( Conf_Server[Conf_Server_Count - 1].pwd_out, Arg, CLIENT_PASS_LEN - 1 );
Conf_Server[Conf_Server_Count - 1].pwd_out[CLIENT_PASS_LEN - 1] = '\0';
+ if( strlen( Arg ) > CLIENT_PASS_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"PeerPassword\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "Port" ) == 0 )
if( strcasecmp( Var, "Group" ) == 0 )
{
/* Server-Gruppe */
+#ifdef HAVE_ISDIGIT
+ if( ! isdigit( *Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Group\" is not a number!", NGIRCd_ConfFile, Line );
+ else
+#endif
Conf_Server[Conf_Server_Count - 1].group = atoi( Arg );
return;
}
/* Hostname des Servers */
strncpy( Conf_Channel[Conf_Channel_Count - 1].name, Arg, CHANNEL_NAME_LEN - 1 );
Conf_Channel[Conf_Channel_Count - 1].name[CHANNEL_NAME_LEN - 1] = '\0';
+ if( strlen( Arg ) > CHANNEL_NAME_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Name\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "Modes" ) == 0 )
/* Name des Servers ("Nick") */
strncpy( Conf_Channel[Conf_Channel_Count - 1].modes, Arg, CHANNEL_MODE_LEN - 1 );
Conf_Channel[Conf_Channel_Count - 1].modes[CHANNEL_MODE_LEN - 1] = '\0';
+ if( strlen( Arg ) > CHANNEL_MODE_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Modes\" too long!", NGIRCd_ConfFile, Line );
return;
}
if( strcasecmp( Var, "Topic" ) == 0 )
/* Passwort des Servers */
strncpy( Conf_Channel[Conf_Channel_Count - 1].topic, Arg, CHANNEL_TOPIC_LEN - 1 );
Conf_Channel[Conf_Channel_Count - 1].topic[CHANNEL_TOPIC_LEN - 1] = '\0';
+ if( strlen( Arg ) > CHANNEL_TOPIC_LEN - 1 ) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Topic\" too long!", NGIRCd_ConfFile, Line );
return;
}