1
0
mirror of https://github.com/osmarks/ngircd.git synced 2024-12-13 10:20:28 +00:00

Backported all changes up to now from HEAD.

This commit is contained in:
Alexander Barton 2003-11-07 20:51:08 +00:00
parent 0b114e814b
commit d155ed17c8
27 changed files with 342 additions and 181 deletions

15
AUTHORS
View File

@ -12,15 +12,22 @@
Main Authors
~~~~~~~~~~~~
Alexander Barton, <alex@barton.de>, "alex"
Alexander Barton, <alex@barton.de> (alex)
Contributors
~~~~~~~~~~~~
Goetz Hoffart, <goetz@hoffart.de>
Ilja Osthoff, <i.osthoff@gmx.net>
Goetz Hoffart, <goetz@hoffart.de> (goetz)
Ilja Osthoff, <i.osthoff@gmx.net> (ilja)
Sean Reifschneider, <jafo-rpms@tummy.com>
Code snippets
~~~~~~~~~~~~~
J. Kercheval: pattern matching functions
Patrick Powell, <papowell@astart.com>: snprintf()-function
Andrew Tridgell & Martin Pool: strl{cpy|cat}()-functions
--
$Id: AUTHORS,v 1.5 2003/04/21 21:33:18 alex Exp $
$Id: AUTHORS,v 1.5.2.1 2003/11/07 20:51:08 alex Exp $

View File

@ -10,6 +10,25 @@
-- ChangeLog --
ngIRCd 0.7.5 (2003-11-07)
- Fixed ban behavior: users which are banned from a channel can't no
longer send PRIVMSG's to this channel (fixes Bug #47).
- Fixed and enhanced the "penalty handling" of the server: commands that
require more resources block the client for a short time.
- Changed the internal time resolution to one second.
- New configuration variable "MaxConnectionsIP" to limit the number of
simultaneous connections from a single IP that the server will accept.
This configuration options lowers the risk of denial of service attacks
(DoS), the default is 5 connections per client IP.
- Fixed build problems under Mac OS X 10.3.
- Use "-pipe" when compiling with gcc, speeds things up a little :-)
- Added new configuration variable "Listen" to bind all listening
sockets of the server to a single IP address.
- Suppress misleading error message of diff during make run.
- Enhanced test-suite and made it work on GNU/Hurd.
- Fixed minor typo in debug output :-)
ngIRCd 0.7.1 (2003-07-18)
- Included files to build Debian packages (located in "debian/").
@ -458,4 +477,4 @@ ngIRCd 0.0.1, 31.12.2001
--
$Id: ChangeLog,v 1.188.2.17 2003/07/18 20:54:47 alex Exp $
$Id: ChangeLog,v 1.188.2.18 2003/11/07 20:51:08 alex Exp $

View File

@ -218,7 +218,8 @@
);
isa = PBXGroup;
name = Products;
refType = 4;
path = "";
refType = 2;
};
//1A0
//1A1
@ -421,10 +422,10 @@
};
F51F791401DFD0DE01D13771 = {
children = (
FA550F3103D59CB300A85B04,
F5263AEF01E2A9B801CE8F8F,
F51F791501DFD0DE01D13771,
F5E9447D02C9EE2801A85B04,
FA0B193305060CB800A85B04,
F5B565290325412B01A85B04,
F5E9447E02C9EE2801A85B04,
F5E9447F02C9EE2801A85B04,
@ -433,8 +434,8 @@
);
isa = PBXGroup;
name = doc;
path = /Users/alex/Develop/ngircd/doc;
refType = 0;
path = ../doc;
refType = 2;
};
F51F791501DFD0DE01D13771 = {
fileEncoding = 5;
@ -477,8 +478,8 @@
);
isa = PBXGroup;
name = testsuite;
path = /Users/alex/Develop/ngircd/src/testsuite;
refType = 0;
path = ../src/testsuite;
refType = 2;
};
F520AEA90335E29001A85B04 = {
fileEncoding = 5;
@ -593,8 +594,8 @@
);
isa = PBXGroup;
name = man;
path = /Users/alex/Develop/ngircd/man;
refType = 0;
path = ../man;
refType = 2;
};
F520AF180335F1B801A85B04 = {
fileEncoding = 5;
@ -691,8 +692,9 @@
F576ABFE01D61D7401A85B03,
);
isa = PBXGroup;
path = ngircd;
refType = 4;
name = ngircd;
path = ../src/ngircd;
refType = 2;
};
F52162BB01C7B904012300F4 = {
fileEncoding = 5;
@ -1034,7 +1036,7 @@
);
isa = PBXGroup;
path = ngircd.pbproj;
refType = 4;
refType = 2;
};
F56D8BA101E0BFA00155ADA7 = {
fileEncoding = 5;
@ -1275,7 +1277,8 @@
);
isa = PBXGroup;
name = contrib;
refType = 4;
path = "";
refType = 2;
};
F5D3536203892AD201A85B04 = {
fileEncoding = 5;
@ -1377,8 +1380,8 @@
);
isa = PBXGroup;
name = portab;
path = /Users/alex/Develop/ngircd/src;
refType = 0;
path = ../src/portab;
refType = 2;
};
F5F18133023EC63701A85B04 = {
fileEncoding = 5;
@ -1443,6 +1446,13 @@
//FA2
//FA3
//FA4
FA0B193305060CB800A85B04 = {
fileEncoding = 5;
isa = PBXFileReference;
name = Platforms.txt;
path = ../doc/Platforms.txt;
refType = 2;
};
FA42C8AD03C0A00B00A85B04 = {
fileEncoding = 4;
isa = PBXFileReference;
@ -1503,7 +1513,8 @@
);
isa = PBXGroup;
name = tool;
refType = 4;
path = ../src;
refType = 2;
};
FA550F2A03D59C8200A85B04 = {
fileEncoding = 5;
@ -1550,93 +1561,6 @@
settings = {
};
};
FA550F3103D59CB300A85B04 = {
children = (
FA550F3503D59CD800A85B04,
FA550F3403D59CD800A85B04,
FA550F3703D59CD800A85B04,
FA550F3203D59CD800A85B04,
FA550F3303D59CD800A85B04,
FA550F3603D59CD800A85B04,
FA550F3803D59CD800A85B04,
FA550F3903D59CD800A85B04,
FA550F3A03D59CD800A85B04,
FA550F3B03D59CD800A85B04,
);
isa = PBXGroup;
name = de;
refType = 4;
};
FA550F3203D59CD800A85B04 = {
fileEncoding = 5;
isa = PBXFileReference;
name = CVS.txt;
path = ../doc/de/CVS.txt;
refType = 2;
};
FA550F3303D59CD800A85B04 = {
fileEncoding = 5;
isa = PBXFileReference;
name = FAQ.txt;
path = ../doc/de/FAQ.txt;
refType = 2;
};
FA550F3403D59CD800A85B04 = {
fileEncoding = 5;
isa = PBXFileReference;
name = INSTALL;
path = ../doc/de/INSTALL;
refType = 2;
};
FA550F3503D59CD800A85B04 = {
fileEncoding = 5;
isa = PBXFileReference;
name = Makefile.am;
path = ../doc/de/Makefile.am;
refType = 2;
};
FA550F3603D59CD800A85B04 = {
fileEncoding = 5;
isa = PBXFileReference;
name = Protocol.txt;
path = ../doc/de/Protocol.txt;
refType = 2;
};
FA550F3703D59CD800A85B04 = {
fileEncoding = 5;
isa = PBXFileReference;
name = README;
path = ../doc/de/README;
refType = 2;
};
FA550F3803D59CD800A85B04 = {
fileEncoding = 5;
isa = PBXFileReference;
name = "README-AUX.txt";
path = "../doc/de/README-AUX.txt";
refType = 2;
};
FA550F3903D59CD800A85B04 = {
fileEncoding = 5;
isa = PBXFileReference;
name = "README-BeOS.txt";
path = "../doc/de/README-BeOS.txt";
refType = 2;
};
FA550F3A03D59CD800A85B04 = {
fileEncoding = 5;
isa = PBXFileReference;
name = RFC.txt;
path = ../doc/de/RFC.txt;
refType = 2;
};
FA550F3B03D59CD800A85B04 = {
fileEncoding = 5;
isa = PBXFileReference;
name = "sample-ngircd.conf";
path = "../doc/de/sample-ngircd.conf";
refType = 2;
};
FAC0383C03BB318400A85B04 = {
fileRef = F51044520297ABF80173DE11;
isa = PBXBuildFile;

11
NEWS
View File

@ -10,6 +10,15 @@
-- NEWS --
ngIRCd 0.7.5 (2003-07-11)
- New configuration variable "MaxConnectionsIP" to limit the number of
simultaneous connections from a single IP that the server will accept.
This configuration options lowers the risk of denial of service attacks
(DoS), the default is 5 connections per client IP.
- Added new configuration variable "Listen" to bind all listening
sockets of the server to a single IP address.
ngIRCd 0.7.1 (2003-07-18)
- Added support for GNU/Hurd.
@ -165,4 +174,4 @@ ngIRCd 0.0.1, 31.12.2001
--
$Id: NEWS,v 1.53.2.4 2003/07/18 20:54:47 alex Exp $
$Id: NEWS,v 1.53.2.5 2003/11/07 20:51:08 alex Exp $

View File

@ -8,13 +8,13 @@
# (at your option) any later version.
# Please read the file COPYING, README and AUTHORS for more information.
#
# $Id: configure.in,v 1.89.2.10 2003/07/18 20:55:10 alex Exp $
# $Id: configure.in,v 1.89.2.11 2003/11/07 20:51:08 alex Exp $
#
# -- Initialisierung --
AC_PREREQ(2.50)
AC_INIT(ngircd, 0.7.1)
AC_INIT(ngircd, 0.7.5)
AC_CONFIG_SRCDIR(src/ngircd/ngircd.c)
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE(1.6)
@ -271,7 +271,7 @@ if test "$GCC" = "yes"; then
ansi=" -ansi"
pedantic=" -pedantic"
$CC --version | grep 20020420 > /dev/null 2>&1
$CC --version | grep 20020420 >/dev/null 2>&1
if test $? -eq 0; then
# Mac OS X (and Darwin?) ship with a slightly broken
# prerelease of GCC 3.1 which don't like -pedantic:
@ -279,7 +279,16 @@ if test "$GCC" = "yes"; then
pedantic=""
fi
uname | grep "CYGWIN" > /dev/null 2>&1
$CC --version | grep 20030304 >/dev/null 2>&1
if test $? -eq 0; then
# Mac OS X 10.3 (and Darwin 7.0?) have a strange gcc (or
# system header files?) which produces lots of errors when
# using -ansi; so we don't =:-)
AC_MSG_RESULT([detected broken GNU C compiler, disabling "-ansi"])
ansi=""
fi
uname | grep "CYGWIN" >/dev/null 2>&1
if test $? -eq 0; then
# The include files of Cygwin don't like -ansi,
# so we disable it:
@ -287,7 +296,7 @@ if test "$GCC" = "yes"; then
ansi=""
fi
add_CFLAGS="-Wall -W${ansi}${pedantic} $CFLAGS $CFLAGS_ADD"
add_CFLAGS="-pipe -Wall -W${ansi}${pedantic} $CFLAGS $CFLAGS_ADD"
else
the_CFLAGS="$CFLAGS"
add_CFLAGS="$CFLAGS_ADD"

View File

@ -1,5 +1,5 @@
%define name ngircd
%define version 0.7.1
%define version 0.7.5
%define release 1
%define prefix %{_prefix}

View File

@ -1,4 +1,4 @@
# $Id: sample-ngircd.conf,v 1.20.2.2 2003/04/29 12:37:17 alex Exp $
# $Id: sample-ngircd.conf,v 1.20.2.3 2003/11/07 20:51:09 alex Exp $
#
# This is a sample configuration file for the ngIRCd, which must adept to
@ -37,6 +37,10 @@
# one port, separated with ";". (Default: 6667)
;Ports = 6667, 6668, 66694
# IP address on which the server should listen. (Default: empty,
# so the server listens on all IP addresses of the system)
;Listen = 1.2.3.4
# Text file with the "message of the day" (MOTD). This message will
# be shown to all users connecting to the server:
;MotdFile = /usr/local/etc/ngircd.motd
@ -73,6 +77,10 @@
# to accept (<=0: unlimited):
;MaxConnections = -1
# Maximum number of simultaneous connections from a single IP address
# the server will accept (<=0: unlimited):
;MaxConnectionsIP = 5
# Maximum number of channels a user can be member of (<=0: no limit):
;MaxJoins = 10

View File

@ -1,5 +1,5 @@
.\"
.\" $Id: ngircd.conf.5,v 1.9.2.1 2003/07/18 20:48:20 alex Exp $
.\" $Id: ngircd.conf.5,v 1.9.2.2 2003/11/07 20:51:10 alex Exp $
.\"
.TH ngircd.conf 5 "Mai 2003" ngircd "ngIRCd Manual"
.SH NAME
@ -67,6 +67,10 @@ command.
Ports on which the server should listen. There may be more than one port,
separated with ';'. Default: 6667.
.TP
\fBListen\fR
The ip address on which the server should listen. Default is empty, so
the server listens on all configured ip addresses and interfaces.
.TP
\fBMotdFile\fR
Text file with the "message of the day" (MOTD). This message will be shown
to all users connecting to the server.
@ -114,6 +118,11 @@ not(!) channel-operators? Default: no.
Maximum number of simultaneous connection the server is allowed to accept
(<=0: unlimited). Default: -1.
.TP
\fBMaxConnectionsIP\fR
Maximum number of simultaneous connections from a single IP address that
the server will accept (<=0: unlimited). This configuration options lowers
the risk of denial of service attacks (DoS). Default: 5.
.TP
\fBMaxJoins\fR
Maximum number of channels a user can be member of (<=0: no limit).
Default: 10.

View File

@ -8,7 +8,7 @@
# (at your option) any later version.
# Please read the file COPYING, README and AUTHORS for more information.
#
# $Id: Makefile.am,v 1.39.2.1 2003/07/18 20:49:05 alex Exp $
# $Id: Makefile.am,v 1.39.2.2 2003/11/07 20:51:10 alex Exp $
#
AUTOMAKE_OPTIONS = ../portab/ansi2knr
@ -71,7 +71,8 @@ cvs-date:
| $(AWK) "{ print \$$9 }" | sort | tail -1 \
| sed -e "s/\//-/g" )\"" > cvs-version.new \
|| echo "" > cvs-version.new
diff cvs-version.h cvs-version.new || cp cvs-version.new cvs-version.h
diff cvs-version.h cvs-version.new 2>/dev/null \
|| cp cvs-version.new cvs-version.h
TESTS = check-version check-help

View File

@ -17,7 +17,7 @@
#include "portab.h"
static char UNUSED id[] = "$Id: channel.c,v 1.42 2002/12/30 17:15:42 alex Exp $";
static char UNUSED id[] = "$Id: channel.c,v 1.42.2.1 2003/11/07 20:51:10 alex Exp $";
#include "imp.h"
#include <assert.h>
@ -669,7 +669,7 @@ Channel_Write( CHANNEL *Chan, CLIENT *From, CLIENT *Client, CHAR *Text )
{
BOOLEAN is_member, has_voice, is_op, ok;
/* Okay, Ziel ist ein Channel */
/* Okay, target is a channel */
is_member = has_voice = is_op = FALSE;
if( Channel_IsMemberOf( Chan, From ))
{
@ -678,14 +678,21 @@ Channel_Write( CHANNEL *Chan, CLIENT *From, CLIENT *Client, CHAR *Text )
if( strchr( Channel_UserModes( Chan, From ), 'o' )) is_op = TRUE;
}
/* pruefen, ob Client in Channel schreiben darf */
/* Check weather client is allowed to write to channel */
ok = TRUE;
if( strchr( Channel_Modes( Chan ), 'n' ) && ( ! is_member )) ok = FALSE;
if( strchr( Channel_Modes( Chan ), 'm' ) && ( ! is_op ) && ( ! has_voice )) ok = FALSE;
/* Is the client banned? */
if( Lists_CheckBanned( From, Chan ))
{
/* Client is banned, bus is he channel operator or has voice? */
if(( ! has_voice ) && ( ! is_op )) ok = FALSE;
}
if( ! ok ) return IRC_WriteStrClient( From, ERR_CANNOTSENDTOCHAN_MSG, Client_ID( From ), Channel_Name( Chan ));
/* Text senden */
/* Send text */
if( Client_Conn( From ) > NONE ) Conn_UpdateIdle( Client_Conn( From ));
return IRC_WriteStrChannelPrefix( Client, Chan, From, TRUE, "PRIVMSG %s :%s", Channel_Name( Chan ), Text );
} /* Channel_Write */

View File

@ -14,7 +14,7 @@
#include "portab.h"
static char UNUSED id[] = "$Id: conf.c,v 1.57.2.2 2003/04/29 12:37:18 alex Exp $";
static char UNUSED id[] = "$Id: conf.c,v 1.57.2.3 2003/11/07 20:51:10 alex Exp $";
#include "imp.h"
#include <assert.h>
@ -120,6 +120,7 @@ Conf_Test( VOID )
printf( "%u", Conf_ListenPorts[i] );
}
puts( "" );
printf( " Listen = %s\n", Conf_ListenAddress );
pwd = getpwuid( Conf_UID );
if( pwd ) printf( " ServerUID = %s\n", pwd->pw_name );
else printf( " ServerUID = %ld\n", (LONG)Conf_UID );
@ -132,6 +133,8 @@ Conf_Test( VOID )
printf( " OperCanUseMode = %s\n", Conf_OperCanMode == TRUE ? "yes" : "no" );
if( Conf_MaxConnections > 0 ) printf( " MaxConnections = %ld\n", Conf_MaxConnections );
else printf( " MaxConnections = -1\n" );
if( Conf_MaxConnectionsIP > 0 ) printf( " MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP );
else printf( " MaxConnectionsIP = -1\n" );
if( Conf_MaxJoins > 0 ) printf( " MaxJoins = %d\n", Conf_MaxJoins );
else printf( " MaxJoins = -1\n" );
puts( "" );
@ -340,6 +343,7 @@ Set_Defaults( BOOLEAN InitServers )
strlcat( Conf_MotdFile, MOTD_FILE, sizeof( Conf_MotdFile ));
Conf_ListenPorts_Count = 0;
strcpy( Conf_ListenAddress, "" );
Conf_UID = Conf_GID = 0;
@ -354,6 +358,7 @@ Set_Defaults( BOOLEAN InitServers )
Conf_OperCanMode = FALSE;
Conf_MaxConnections = -1;
Conf_MaxConnectionsIP = 5;
Conf_MaxJoins = 10;
/* Initialize server configuration structures */
@ -689,6 +694,16 @@ Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
Conf_MaxConnections = atol( Arg );
return;
}
if( strcasecmp( Var, "MaxConnectionsIP" ) == 0 )
{
/* Maximum number of simoultanous connections from one IP. Values <= 0 are equal to "no limit". */
#ifdef HAVE_ISDIGIT
if( ! isdigit( *Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MaxConnectionsIP\" is not a number!", NGIRCd_ConfFile, Line );
else
#endif
Conf_MaxConnectionsIP = atoi( Arg );
return;
}
if( strcasecmp( Var, "MaxJoins" ) == 0 )
{
/* Maximum number of channels a user can join. Values <= 0 are equal to "no limit". */
@ -699,6 +714,15 @@ Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
Conf_MaxJoins = atoi( Arg );
return;
}
if( strcasecmp( Var, "Listen" ) == 0 )
{
/* IP-Address to bind sockets */
if( strlcpy( Conf_ListenAddress, Arg, sizeof( Conf_ListenAddress )) >= sizeof( Conf_ListenAddress ))
{
Config_Error( LOG_WARNING, "%s, line %d: Value of \"Listen\" too long!", NGIRCd_ConfFile, Line );
}
return;
}
Config_Error( LOG_ERR, "%s, line %d (section \"Global\"): Unknown variable \"%s\"!", NGIRCd_ConfFile, Line, Var );
} /* Handle_GLOBAL */

View File

@ -8,7 +8,7 @@
* (at your option) any later version.
* Please read the file COPYING, README and AUTHORS for more information.
*
* $Id: conf.h,v 1.26 2002/12/31 16:12:50 alex Exp $
* $Id: conf.h,v 1.26.2.1 2003/11/07 20:51:11 alex Exp $
*
* Configuration management (header)
*/
@ -76,6 +76,9 @@ GLOBAL CHAR Conf_MotdFile[FNAME_LEN];
GLOBAL UINT Conf_ListenPorts[MAX_LISTEN_PORTS];
GLOBAL INT Conf_ListenPorts_Count;
/* Address to which the socket should be bound or empty (=all) */
GLOBAL CHAR Conf_ListenAddress[16];
/* User and group ID the server should run with */
GLOBAL UINT Conf_UID;
GLOBAL UINT Conf_GID;
@ -107,6 +110,9 @@ GLOBAL LONG Conf_MaxConnections;
/* Maximum number of channels a user can join */
GLOBAL INT Conf_MaxJoins;
/* Maximum number of connections per IP address */
GLOBAL INT Conf_MaxConnectionsIP;
GLOBAL VOID Conf_Init PARAMS((VOID ));
GLOBAL VOID Conf_Rehash PARAMS((VOID ));

View File

@ -16,10 +16,11 @@
#include "portab.h"
static char UNUSED id[] = "$Id: conn-func.c,v 1.1 2002/12/30 17:14:28 alex Exp $";
static char UNUSED id[] = "$Id: conn-func.c,v 1.1.2.1 2003/11/07 20:51:11 alex Exp $";
#include "imp.h"
#include <assert.h>
#include <log.h>
#include "conn.h"

View File

@ -16,7 +16,7 @@
#include "portab.h"
static char UNUSED id[] = "$Id: conn.c,v 1.122.2.1 2003/04/25 16:50:53 alex Exp $";
static char UNUSED id[] = "$Id: conn.c,v 1.122.2.2 2003/11/07 20:51:11 alex Exp $";
#include "imp.h"
#include <assert.h>
@ -87,6 +87,7 @@ LOCAL BOOLEAN Init_Socket PARAMS(( INT Sock ));
LOCAL VOID New_Server PARAMS(( INT Server, CONN_ID Idx ));
LOCAL VOID Read_Resolver_Result PARAMS(( INT r_fd ));
LOCAL VOID Simple_Message PARAMS(( INT Sock, CHAR *Msg ));
LOCAL INT Count_Connections PARAMS(( struct sockaddr_in addr ));
LOCAL fd_set My_Listeners;
LOCAL fd_set My_Sockets;
@ -119,7 +120,9 @@ Conn_Init( VOID )
Log( LOG_EMERG, "Can't allocate memory! [Conn_Init]" );
exit( 1 );
}
Log( LOG_DEBUG, "Allocted connection pool for %d items (%ld bytes).", Pool_Size, sizeof( CONNECTION ) * Pool_Size );
#ifdef DEBUG
Log( LOG_DEBUG, "Allocated connection pool for %d items (%ld bytes).", Pool_Size, sizeof( CONNECTION ) * Pool_Size );
#endif
/* zu Beginn haben wir keine Verbindungen */
FD_ZERO( &My_Listeners );
@ -146,7 +149,9 @@ Conn_Exit( VOID )
CONN_ID idx;
INT i;
#ifdef DEBUG
Log( LOG_DEBUG, "Shutting down all connections ..." );
#endif
#ifdef RENDEZVOUS
Rendezvous_UnregisterListeners( );
@ -164,12 +169,16 @@ Conn_Exit( VOID )
if( FD_ISSET( i, &My_Listeners ))
{
close( i );
#ifdef DEBUG
Log( LOG_DEBUG, "Listening socket %d closed.", i );
#endif
}
else if( FD_ISSET( i, &My_Connects ))
{
close( i );
#ifdef DEBUG
Log( LOG_DEBUG, "Connection %d closed during creation (socket %d).", idx, i );
#endif
}
else if( idx < Pool_Size )
{
@ -224,7 +233,9 @@ Conn_ExitListeners( VOID )
if( FD_ISSET( i, &My_Sockets ) && FD_ISSET( i, &My_Listeners ))
{
close( i );
#ifdef DEBUG
Log( LOG_DEBUG, "Listening socket %d closed.", i );
#endif
}
}
} /* Conn_ExitListeners */
@ -236,6 +247,7 @@ Conn_NewListener( CONST UINT Port )
/* Create new listening socket on specified port */
struct sockaddr_in addr;
struct in_addr inaddr;
INT sock;
#ifdef RENDEZVOUS
CHAR name[CLIENT_ID_LEN], *info;
@ -243,9 +255,24 @@ Conn_NewListener( CONST UINT Port )
/* Server-"Listen"-Socket initialisieren */
memset( &addr, 0, sizeof( addr ));
memset( &inaddr, 0, sizeof( inaddr ));
addr.sin_family = AF_INET;
addr.sin_port = htons( Port );
addr.sin_addr.s_addr = htonl( INADDR_ANY );
if( Conf_ListenAddress[0] )
{
#ifdef HAVE_INET_ATON
if( inet_aton( Conf_ListenAddress, &inaddr ) == 0 )
#else
inaddr.s_addr = inet_addr( Conf_ListenAddress );
if( inaddr.s_addr == (unsigned)-1 )
#endif
{
Log( LOG_CRIT, "Can't listen on %s:%u: can't convert ip address %s!", Conf_ListenAddress, Port, Conf_ListenAddress );
return FALSE;
}
}
else inaddr.s_addr = htonl( INADDR_ANY );
addr.sin_addr = inaddr;
/* Socket erzeugen */
sock = socket( PF_INET, SOCK_STREAM, 0);
@ -279,7 +306,8 @@ Conn_NewListener( CONST UINT Port )
if( sock > Conn_MaxFD ) Conn_MaxFD = sock;
Log( LOG_INFO, "Now listening on port %d (socket %d).", Port, sock );
if( Conf_ListenAddress[0]) Log( LOG_INFO, "Now listening on %s:%d (socket %d).", Conf_ListenAddress, Port, sock );
else Log( LOG_INFO, "Now listening on 0.0.0.0:%d (socket %d).", Port, sock );
#ifdef RENDEZVOUS
/* Get best server description text */
@ -350,10 +378,13 @@ Conn_Handler( VOID )
Check_Servers( );
Check_Connections( );
t = time( NULL );
/* noch volle Lese-Buffer suchen */
for( i = 0; i < Pool_Size; i++ )
{
if(( My_Connections[i].sock > NONE ) && ( My_Connections[i].rdatalen > 0 ))
if(( My_Connections[i].sock > NONE ) && ( My_Connections[i].rdatalen > 0 ) &&
( My_Connections[i].delaytime < t ))
{
/* Kann aus dem Buffer noch ein Befehl extrahiert werden? */
if( Handle_Buffer( i )) timeout = FALSE;
@ -382,7 +413,6 @@ Conn_Handler( VOID )
}
/* von welchen Sockets koennte gelesen werden? */
t = time( NULL );
read_sockets = My_Sockets;
for( i = 0; i < Pool_Size; i++ )
{
@ -413,7 +443,7 @@ Conn_Handler( VOID )
/* Timeout initialisieren */
tv.tv_usec = 0;
if( timeout ) tv.tv_sec = TIME_RES;
if( timeout ) tv.tv_sec = 1;
else tv.tv_sec = 0;
/* Auf Aktivitaet warten */
@ -527,7 +557,9 @@ Conn_Write( CONN_ID Idx, CHAR *Data, INT Len )
* In diesem Fall wird hier einfach ein Fehler geliefert. */
if( My_Connections[Idx].sock <= NONE )
{
#ifdef DEBUG
Log( LOG_DEBUG, "Skipped write on closed socket (connection %d).", Idx );
#endif
return FALSE;
}
@ -836,7 +868,9 @@ Handle_Write( CONN_ID Idx )
return FALSE;
}
#ifdef DEBUG
Log( LOG_DEBUG, "Connection %d with \"%s:%d\" established, now sendig PASS and SERVER ...", Idx, My_Connections[Idx].host, Conf_Server[Conf_GetServer( Idx )].port );
#endif
/* PASS und SERVER verschicken */
Conn_WriteStr( Idx, "PASS %s %s", Conf_Server[Conf_GetServer( Idx )].pwd_out, NGIRCd_ProtoID );
@ -887,7 +921,7 @@ New_Connection( INT Sock )
CONN_ID idx;
CLIENT *c;
POINTER *ptr;
LONG new_size;
LONG new_size, cnt;
assert( Sock > NONE );
@ -916,6 +950,17 @@ New_Connection( INT Sock )
/* Socket initialisieren */
Init_Socket( new_sock );
/* Check IP-based connection limit */
cnt = Count_Connections( new_addr );
if(( Conf_MaxConnectionsIP > 0 ) && ( cnt >= Conf_MaxConnectionsIP ))
{
/* Access denied, too many connections from this IP! */
Log( LOG_ERR, "Refused connection from %s: too may connections (%ld) from this IP!", inet_ntoa( new_addr.sin_addr ), cnt);
Simple_Message( new_sock, "ERROR :Connection refused, too many connections from your IP!" );
close( new_sock );
return;
}
/* Freie Connection-Struktur suchen */
for( idx = 0; idx < Pool_Size; idx++ ) if( My_Connections[idx].sock == NONE ) break;
if( idx >= Pool_Size )
@ -966,9 +1011,13 @@ New_Connection( INT Sock )
/* Struktur umkopieren ... */
memcpy( ptr, My_Connections, sizeof( CONNECTION ) * Pool_Size );
#ifdef DEBUG
Log( LOG_DEBUG, "Allocated new connection pool for %ld items (%ld bytes). [malloc()/memcpy()]", new_size, sizeof( CONNECTION ) * new_size );
#endif
}
#ifdef DEBUG
else Log( LOG_DEBUG, "Allocated new connection pool for %ld items (%ld bytes). [realloc()]", new_size, sizeof( CONNECTION ) * new_size );
#endif
/* Adjust pointer to new block */
My_Connections = ptr;
@ -1032,7 +1081,9 @@ Socket2Index( INT Sock )
{
/* die Connection wurde vermutlich (wegen eines
* Fehlers) bereits wieder abgebaut ... */
#ifdef DEBUG
Log( LOG_DEBUG, "Socket2Index: can't get connection for socket %d!", Sock );
#endif
return NONE;
}
else return idx;
@ -1135,6 +1186,9 @@ Handle_Buffer( CONN_ID Idx )
result = FALSE;
do
{
/* Check penalty */
if( My_Connections[Idx].delaytime > time( NULL )) return result;
#ifdef USE_ZLIB
/* ggf. noch unkomprimiete Daten weiter entpacken */
if( My_Connections[Idx].options & CONN_ZIP )
@ -1214,7 +1268,9 @@ Handle_Buffer( CONN_ID Idx )
memcpy( My_Connections[Idx].zip.rbuf, My_Connections[Idx].rbuf, My_Connections[Idx].rdatalen );
My_Connections[Idx].zip.rdatalen = My_Connections[Idx].rdatalen;
My_Connections[Idx].rdatalen = 0;
#ifdef DEBUG
Log( LOG_DEBUG, "Moved already received data (%d bytes) to uncompression buffer.", My_Connections[Idx].zip.rdatalen );
#endif
}
}
#endif
@ -1251,14 +1307,18 @@ Check_Connections( VOID )
if( My_Connections[i].lastping < time( NULL ) - Conf_PongTimeout )
{
/* Timeout */
#ifdef DEBUG
Log( LOG_DEBUG, "Connection %d: Ping timeout: %d seconds.", i, Conf_PongTimeout );
#endif
Conn_Close( i, NULL, "Ping timeout", TRUE );
}
}
else if( My_Connections[i].lastdata < time( NULL ) - Conf_PingTimeout )
{
/* es muss ein PING gesendet werden */
#ifdef DEBUG
Log( LOG_DEBUG, "Connection %d: sending PING ...", i );
#endif
My_Connections[i].lastping = time( NULL );
Conn_WriteStr( i, "PING :%s", Client_ID( Client_ThisServer( )));
}
@ -1269,7 +1329,9 @@ Check_Connections( VOID )
if( My_Connections[i].lastdata < time( NULL ) - Conf_PingTimeout )
{
/* Timeout */
#ifdef DEBUG
Log( LOG_DEBUG, "Connection %d timed out ...", i );
#endif
Conn_Close( i, NULL, "Timeout", FALSE );
}
}
@ -1325,7 +1387,9 @@ Check_Servers( VOID )
Log( LOG_ALERT, "Can't establist server connection: connection limit reached (%d)!", Pool_Size );
return;
}
#ifdef DEBUG
Log( LOG_DEBUG, "Preparing connection %d for \"%s\" ...", idx, Conf_Server[i].host );
#endif
/* Verbindungs-Struktur initialisieren */
Init_Conn_Struct( idx );
@ -1437,7 +1501,9 @@ New_Server( INT Server, CONN_ID Idx )
FD_SET( new_sock, &My_Connects );
if( new_sock > Conn_MaxFD ) Conn_MaxFD = new_sock;
#ifdef DEBUG
Log( LOG_DEBUG, "Registered new connection %d on socket %d.", Idx, My_Connections[Idx].sock );
#endif
} /* New_Server */
@ -1534,11 +1600,15 @@ Read_Resolver_Result( INT r_fd )
/* Opsa! Keine passende Connection gefunden!? Vermutlich
* wurde sie schon wieder geschlossen. */
close( r_fd );
#ifdef DEBUG
Log( LOG_DEBUG, "Resolver: Got result for unknown connection!?" );
#endif
return;
}
#ifdef DEBUG
Log( LOG_DEBUG, "Resolver: %s is \"%s\".", My_Connections[i].host, result );
#endif
/* Aufraeumen */
close( My_Connections[i].res_stat->pipe[0] );
@ -1582,4 +1652,18 @@ Simple_Message( INT Sock, CHAR *Msg )
} /* Simple_Error */
LOCAL INT
Count_Connections( struct sockaddr_in addr_in )
{
INT i, cnt;
cnt = 0;
for( i = 0; i < Pool_Size; i++ )
{
if(( My_Connections[i].sock > NONE ) && ( My_Connections[i].addr.sin_addr.s_addr == addr_in.sin_addr.s_addr )) cnt++;
}
return cnt;
} /* Count_Connections */
/* -eof- */

View File

@ -8,7 +8,7 @@
* (at your option) any later version.
* Please read the file COPYING, README and AUTHORS for more information.
*
* $Id: defines.h,v 1.42 2003/02/23 12:03:39 alex Exp $
* $Id: defines.h,v 1.42.2.1 2003/11/07 20:51:11 alex Exp $
*
* Global defines of ngIRCd.
*/
@ -19,8 +19,6 @@
#define NONE -1
#define TIME_RES 2 /* Zeit-Aufloesung des Servers in Sekunden */
#define FNAME_LEN 256 /* max. Laenge eines Dateinamen */
#define LINE_LEN 256 /* max. Laenge einer Konfigurationszeile */

View File

@ -14,7 +14,7 @@
#include "portab.h"
static char UNUSED id[] = "$Id: irc-info.c,v 1.16.2.1 2003/07/18 20:49:35 alex Exp $";
static char UNUSED id[] = "$Id: irc-info.c,v 1.16.2.2 2003/11/07 20:51:11 alex Exp $";
#include "imp.h"
#include <assert.h>
@ -77,6 +77,7 @@ IRC_ADMIN(CLIENT *Client, REQUEST *Req )
if( ! IRC_WriteStrClient( Client, RPL_ADMINLOC2_MSG, Client_ID( prefix ), Conf_ServerAdmin2 )) return DISCONNECTED;
if( ! IRC_WriteStrClient( Client, RPL_ADMINEMAIL_MSG, Client_ID( prefix ), Conf_ServerAdminMail )) return DISCONNECTED;
IRC_SetPenalty( Client, 1 );
return CONNECTED;
} /* IRC_ADMIN */
@ -162,6 +163,7 @@ IRC_LINKS( CLIENT *Client, REQUEST *Req )
c = Client_Next( c );
}
IRC_SetPenalty( target, 1 );
return IRC_WriteStrClient( target, RPL_ENDOFLINKS_MSG, Client_ID( target ), mask );
} /* IRC_LINKS */
@ -197,6 +199,7 @@ IRC_LUSERS( CLIENT *Client, REQUEST *Req )
IRC_Send_LUSERS( target );
IRC_SetPenalty( target, 1 );
return CONNECTED;
} /* IRC_LUSERS */
@ -230,6 +233,7 @@ IRC_MOTD( CLIENT *Client, REQUEST *Req )
}
}
IRC_SetPenalty( from, 3 );
return IRC_Show_MOTD( from );
} /* IRC_MOTD */
@ -324,6 +328,7 @@ IRC_NAMES( CLIENT *Client, REQUEST *Req )
if( ! IRC_WriteStrClient( from, "%s", rpl )) return DISCONNECTED;
}
IRC_SetPenalty( from, 1 );
return IRC_WriteStrClient( from, RPL_ENDOFNAMES_MSG, Client_ID( from ), "*" );
} /* IRC_NAMES */
@ -402,6 +407,7 @@ IRC_STATS( CLIENT *Client, REQUEST *Req )
break;
}
IRC_SetPenalty( from, 2 );
return IRC_WriteStrClient( from, RPL_ENDOFSTATS_MSG, Client_ID( from ), query );
} /* IRC_STATS */
@ -517,6 +523,7 @@ IRC_VERSION( CLIENT *Client, REQUEST *Req )
}
/* mit Versionsinfo antworten */
IRC_SetPenalty( Client, 1 );
#ifdef CVSDATE
strlcpy( ver, CVSDATE, sizeof( ver ));
strncpy( ver + 4, ver + 5, 2 );

View File

@ -14,7 +14,7 @@
#include "portab.h"
static char UNUSED id[] = "$Id: irc-login.c,v 1.34 2003/03/31 15:54:21 alex Exp $";
static char UNUSED id[] = "$Id: irc-login.c,v 1.34.2.1 2003/11/07 20:51:11 alex Exp $";
#include "imp.h"
#include <assert.h>
@ -223,6 +223,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
/* neuen Client-Nick speichern */
Client_SetID( target, Req->argv[0] );
IRC_SetPenalty( target, 2 );
}
return CONNECTED;
@ -457,6 +458,9 @@ Hello_User( CLIENT *Client )
if( ! IRC_Send_LUSERS( Client )) return DISCONNECTED;
if( ! IRC_Show_MOTD( Client )) return DISCONNECTED;
/* Suspend the client for a second ... */
IRC_SetPenalty( Client, 1 );
return CONNECTED;
} /* Hello_User */

View File

@ -14,7 +14,7 @@
#include "portab.h"
static char UNUSED id[] = "$Id: irc-mode.c,v 1.31 2003/01/21 21:04:16 alex Exp $";
static char UNUSED id[] = "$Id: irc-mode.c,v 1.31.2.1 2003/11/07 20:51:11 alex Exp $";
#include "imp.h"
#include <assert.h>
@ -231,6 +231,7 @@ client_exit:
Log( LOG_DEBUG, "User \"%s\": Mode change, now \"%s\".", Client_Mask( Target ), Client_Modes( Target ));
}
IRC_SetPenalty( Client, 1 );
return ok;
} /* Client_Mode */
@ -598,6 +599,7 @@ chan_exit:
}
}
IRC_SetPenalty( Client, 1 );
return CONNECTED;
} /* Channel_Mode */

View File

@ -14,7 +14,7 @@
#include "portab.h"
static char UNUSED id[] = "$Id: irc-write.c,v 1.14 2002/12/30 17:15:42 alex Exp $";
static char UNUSED id[] = "$Id: irc-write.c,v 1.14.2.1 2003/11/07 20:51:11 alex Exp $";
#include "imp.h"
#include <assert.h>
@ -395,6 +395,21 @@ va_dcl
} /* IRC_WriteStrRelatedPrefix */
GLOBAL VOID
IRC_SetPenalty( CLIENT *Client, INT Seconds )
{
CONN_ID c;
assert( Client != NULL );
assert( Seconds > 0 );
if( Client_Type( Client ) == CLIENT_SERVER ) return;
c = Client_Conn( Client );
if( c > NONE ) Conn_SetPenalty( c, Seconds );
} /* IRC_SetPenalty */
LOCAL CHAR *
Get_Prefix( CLIENT *Target, CLIENT *Client )
{

View File

@ -8,7 +8,7 @@
* (at your option) any later version.
* Please read the file COPYING, README and AUTHORS for more information.
*
* $Id: irc-write.h,v 1.5 2002/12/12 12:23:43 alex Exp $
* $Id: irc-write.h,v 1.5.4.1 2003/11/07 20:51:11 alex Exp $
*
* Sending IRC commands over the network (header)
*/
@ -18,17 +18,19 @@
#define __irc_write_h__
GLOBAL BOOLEAN IRC_WriteStrClient PARAMS((CLIENT *Client, CHAR *Format, ... ));
GLOBAL BOOLEAN IRC_WriteStrClientPrefix PARAMS((CLIENT *Client, CLIENT *Prefix, CHAR *Format, ... ));
GLOBAL BOOLEAN IRC_WriteStrClient PARAMS(( CLIENT *Client, CHAR *Format, ... ));
GLOBAL BOOLEAN IRC_WriteStrClientPrefix PARAMS(( CLIENT *Client, CLIENT *Prefix, CHAR *Format, ... ));
GLOBAL BOOLEAN IRC_WriteStrChannel PARAMS((CLIENT *Client, CHANNEL *Chan, BOOLEAN Remote, CHAR *Format, ... ));
GLOBAL BOOLEAN IRC_WriteStrChannelPrefix PARAMS((CLIENT *Client, CHANNEL *Chan, CLIENT *Prefix, BOOLEAN Remote, CHAR *Format, ... ));
GLOBAL BOOLEAN IRC_WriteStrChannel PARAMS(( CLIENT *Client, CHANNEL *Chan, BOOLEAN Remote, CHAR *Format, ... ));
GLOBAL BOOLEAN IRC_WriteStrChannelPrefix PARAMS(( CLIENT *Client, CHANNEL *Chan, CLIENT *Prefix, BOOLEAN Remote, CHAR *Format, ... ));
GLOBAL VOID IRC_WriteStrServers PARAMS((CLIENT *ExceptOf, CHAR *Format, ... ));
GLOBAL VOID IRC_WriteStrServersPrefix PARAMS((CLIENT *ExceptOf, CLIENT *Prefix, CHAR *Format, ... ));
GLOBAL VOID IRC_WriteStrServersPrefixFlag PARAMS((CLIENT *ExceptOf, CLIENT *Prefix, CHAR Flag, CHAR *Format, ... ));
GLOBAL VOID IRC_WriteStrServers PARAMS(( CLIENT *ExceptOf, CHAR *Format, ... ));
GLOBAL VOID IRC_WriteStrServersPrefix PARAMS(( CLIENT *ExceptOf, CLIENT *Prefix, CHAR *Format, ... ));
GLOBAL VOID IRC_WriteStrServersPrefixFlag PARAMS(( CLIENT *ExceptOf, CLIENT *Prefix, CHAR Flag, CHAR *Format, ... ));
GLOBAL BOOLEAN IRC_WriteStrRelatedPrefix PARAMS((CLIENT *Client, CLIENT *Prefix, BOOLEAN Remote, CHAR *Format, ... ));
GLOBAL BOOLEAN IRC_WriteStrRelatedPrefix PARAMS(( CLIENT *Client, CLIENT *Prefix, BOOLEAN Remote, CHAR *Format, ... ));
GLOBAL VOID IRC_SetPenalty PARAMS(( CLIENT *Client, INT Seconds ));
#endif

View File

@ -14,7 +14,7 @@
#include "portab.h"
static char UNUSED id[] = "$Id: irc.c,v 1.120.2.1 2003/04/29 12:20:14 alex Exp $";
static char UNUSED id[] = "$Id: irc.c,v 1.120.2.2 2003/11/07 20:51:11 alex Exp $";
#include "imp.h"
#include <assert.h>
@ -265,6 +265,7 @@ IRC_TRACE( CLIENT *Client, REQUEST *Req )
/* Some information about us */
if( ! IRC_WriteStrClient( from, RPL_TRACESERVER_MSG, Client_ID( from ), Conf_ServerName, Client_Mask( Client_ThisServer( )), Option_String( Client_Conn( Client )))) return DISCONNECTED;
IRC_SetPenalty( Client, 3 );
return IRC_WriteStrClient( from, RPL_TRACEEND_MSG, Client_ID( from ), Conf_ServerName, PACKAGE_NAME, PACKAGE_VERSION, NGIRCd_DebugLevel );
} /* IRC_TRACE */
@ -286,6 +287,8 @@ IRC_HELP( CLIENT *Client, REQUEST *Req )
if( ! IRC_WriteStrClient( Client, "NOTICE %s :%s", Client_ID( Client ), cmd->name )) return DISCONNECTED;
cmd++;
}
IRC_SetPenalty( Client, 2 );
return CONNECTED;
} /* IRC_HELP */

View File

@ -1,28 +1,35 @@
#!/bin/sh
# ngIRCd Test Suite
# $Id: getpid.sh,v 1.2.4.1 2003/04/22 20:01:23 alex Exp $
# $Id: getpid.sh,v 1.2.4.2 2003/11/07 20:51:11 alex Exp $
# wurde ein Name uebergeben?
# did we get a name?
[ $# -ne 1 ] && exit 1
# Flags fuer "ps" ermitteln
# detect flags for "ps" and "head"
if [ `uname` = "FreeBSD" ]; then
PS_FLAGS="-a"; PS_PIDCOL="1"; HEAD_FLAGS="-n 1"
elif [ `uname` = "A/UX" ]; then
PS_FLAGS="-ae"; PS_PIDCOL="1"; HEAD_FLAGS="-1"
elif [ `uname` = "GNU" ]; then
PS_FLAGS="-ax"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
else
PS_FLAGS="-f"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
ps $PS_FLAGS > /dev/null 2>&1
if [ $? -ne 0 ]; then PS_FLAGS="a"; PS_PIDCOL="1"; fi
fi
# PID ermitteln
# debug output
#echo "$0: PS_FLAGS=$PS_FLAGS"
#echo "$0: PS_PIDCOL=$PS_PIDCOL"
#echo "$0: HEAD_FLAGS=$HEAD_FLAGS"
# search PID
ps $PS_FLAGS > procs.tmp
cat procs.tmp | grep "$1" | awk "{print \$$PS_PIDCOL}" | sort -n > pids.tmp
cat procs.tmp | grep -v "$0" | grep "$1" | awk "{print \$$PS_PIDCOL}" | sort -n > pids.tmp
pid=`head $HEAD_FLAGS pids.tmp`
rm -rf procs.tmp pids.tmp
# ermittelte PID validieren
# validate PID
[ "$pid" -gt 1 ] > /dev/null 2>&1
[ $? -ne 0 ] && exit 1

View File

@ -1,4 +1,4 @@
# $Id: ngircd-test.conf,v 1.3 2002/10/21 13:45:23 alex Exp $
# $Id: ngircd-test.conf,v 1.3.4.1 2003/11/07 20:51:11 alex Exp $
[Global]
Name = ngircd.test.server
@ -6,6 +6,7 @@
Ports = 6789
MotdFile = ngircd-test.motd
AdminEMail = admin@irc.server
MaxConnectionsIP = 0
[Operator]
Name = TestOp

View File

@ -1,31 +1,37 @@
#!/bin/sh
# ngIRCd Test Suite
# $Id: start-server.sh,v 1.10 2002/11/10 14:28:06 alex Exp $
# $Id: start-server.sh,v 1.10.4.1 2003/11/07 20:51:11 alex Exp $
[ -z "$srcdir" ] && srcdir=`dirname $0`
echo " starting server ..."
# alte Logfiles loeschen
# remove old logfiles
rm -rf logs *.log
# pruefen, ob getpid.sh gueltige PID's liefert. Wenn dem nicht so ist,
# wird kein ngIRCd gestartet, da dieser ansonsten nicht mehr am Ende
# des Testlaufs beendet werden koennte!
# check weather getpid.sh returns valid PIDs. If not, don't start up the
# test-server, because we won't be able to kill it at the end of the test.
./getpid.sh sh > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo " error: getpid.sh FAILED!"
exit 1
fi
# MOTD fuer Test-Server erzeugen
# check if there is a test-server already running
./getpid.sh T-ngircd > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " error: test-server already running!"
exit 1
fi
# generate MOTD for test-server
echo "This is an ngIRCd Test Server" > ngircd-test.motd
# Test-Server starten ...
# starting up test-server ...
./T-ngircd -np -f ${srcdir}/ngircd-test.conf > ngircd-test.log 2>&1 &
sleep 1
# validieren, dass Server laeuft
# validate running test-server
pid=`./getpid.sh T-ngircd`
[ -n "$pid" ] && kill -0 $pid > /dev/null 2>&1 || exit 1

View File

@ -1,17 +1,25 @@
#!/bin/sh
# ngIRCd Test Suite
# $Id: stop-server.sh,v 1.9 2002/11/10 14:28:06 alex Exp $
# $Id: stop-server.sh,v 1.9.4.1 2003/11/07 20:51:11 alex Exp $
[ -z "$srcdir" ] && srcdir=`dirname $0`
echo " stopping server ..."
# Test-Server stoppen ...
# stop test-server ...
pid=`./getpid.sh T-ngircd`
[ -n "$pid" ] && kill $pid > /dev/null 2>&1 || exit 1
sleep 1
if [ -z "$pid" ]; then
echo " no running server found!?"
exit 1
fi
kill $pid > /dev/null 2>&1 || exit 1
# jetzt duerfte der Prozess nicht mehr laufen
kill -0 $pid > /dev/null 2>&1 && exit 1 || exit 0
# waiting ...
for i in 1 2 3 4 5; do
kill -0 $pid > /dev/null 2>&1 || exit 0
sleep 1
done
echo " server still running!?"
exit 1
# -eof-

View File

@ -1,6 +1,6 @@
#!/bin/sh
# ngIRCd Test Suite
# $Id: stress-server.sh,v 1.6.4.1 2003/04/22 20:01:23 alex Exp $
# $Id: stress-server.sh,v 1.6.4.2 2003/11/07 20:51:11 alex Exp $
[ -z "$srcdir" ] && srcdir=`dirname $0`
@ -12,11 +12,11 @@ mkdir -p logs tests
type expect > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "SKIP: ${name} -- \"expect\" not found."; exit 77
echo " ${name}: \"expect\" not found."; exit 77
fi
type telnet > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "SKIP: ${name} -- \"telnet\" not found."; exit 77
echo " ${name}: \"telnet\" not found."; exit 77
fi
echo " stressing server with $CLIENTS clients (be patient!) ..."

View File

@ -1,6 +1,6 @@
#!/bin/sh
# ngIRCd Test Suite
# $Id: tests.sh,v 1.3 2002/09/12 02:29:03 alex Exp $
# $Id: tests.sh,v 1.3.6.1 2003/11/07 20:51:11 alex Exp $
name=`basename $0`
test=`echo ${name} | cut -d '.' -f 1`
@ -8,11 +8,11 @@ mkdir -p logs
type expect > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "SKIP: ${name} -- \"expect\" not found."; exit 77
echo " ${name}: \"expect\" not found."; exit 77
fi
type telnet > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "SKIP: ${name} -- \"telnet\" not found."; exit 77
echo " ${name}: \"telnet\" not found."; exit 77
fi
echo " doing ${test} ..."