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:
parent
0b114e814b
commit
d155ed17c8
15
AUTHORS
15
AUTHORS
@ -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 $
|
||||
|
23
ChangeLog
23
ChangeLog
@ -10,8 +10,27 @@
|
||||
-- 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/").
|
||||
- Updated config.guess and config.sub to newer upstream versions.
|
||||
- NJOIN propagates user channel modes correctly again ... Upsa.
|
||||
@ -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 $
|
||||
|
@ -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
11
NEWS
@ -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 $
|
||||
|
19
configure.in
19
configure.in
@ -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"
|
||||
|
@ -1,5 +1,5 @@
|
||||
%define name ngircd
|
||||
%define version 0.7.1
|
||||
%define version 0.7.5
|
||||
%define release 1
|
||||
%define prefix %{_prefix}
|
||||
|
||||
|
@ -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
|
||||
@ -36,6 +36,10 @@
|
||||
# Ports on which the server should listen. There may be more than
|
||||
# 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:
|
||||
@ -72,6 +76,10 @@
|
||||
# Maximum number of simultaneous connection the server is allowed
|
||||
# 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
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
@ -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 ));
|
||||
|
@ -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"
|
||||
|
||||
@ -69,7 +70,7 @@ Conn_SetPenalty( CONN_ID Idx, time_t Seconds )
|
||||
|
||||
assert( Idx > NONE );
|
||||
assert( Seconds >= 0 );
|
||||
|
||||
|
||||
t = time( NULL ) + Seconds;
|
||||
if( t > My_Connections[Idx].delaytime ) My_Connections[Idx].delaytime = t;
|
||||
} /* Conn_SetPenalty */
|
||||
|
@ -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 );
|
||||
|
||||
@ -915,6 +949,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;
|
||||
@ -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- */
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
||||
@ -161,7 +162,8 @@ 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 );
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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>
|
||||
@ -230,7 +230,8 @@ 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 */
|
||||
|
||||
|
@ -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 )
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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-
|
||||
|
@ -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!) ..."
|
||||
|
@ -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} ..."
|
||||
|
Loading…
Reference in New Issue
Block a user