mirror of
https://github.com/osmarks/ngircd.git
synced 2025-11-14 12:37:10 +00:00
Backported all changes up to now from HEAD.
This commit is contained in:
15
AUTHORS
15
AUTHORS
@@ -12,15 +12,22 @@
|
|||||||
|
|
||||||
Main Authors
|
Main Authors
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
Alexander Barton, <alex@barton.de>, "alex"
|
Alexander Barton, <alex@barton.de> (alex)
|
||||||
|
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
Goetz Hoffart, <goetz@hoffart.de>
|
Goetz Hoffart, <goetz@hoffart.de> (goetz)
|
||||||
Ilja Osthoff, <i.osthoff@gmx.net>
|
Ilja Osthoff, <i.osthoff@gmx.net> (ilja)
|
||||||
Sean Reifschneider, <jafo-rpms@tummy.com>
|
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 $
|
||||||
|
|||||||
21
ChangeLog
21
ChangeLog
@@ -10,6 +10,25 @@
|
|||||||
-- ChangeLog --
|
-- 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)
|
ngIRCd 0.7.1 (2003-07-18)
|
||||||
|
|
||||||
- Included files to build Debian packages (located in "debian/").
|
- 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 $
|
||||||
|
|||||||
@@ -218,7 +218,8 @@
|
|||||||
);
|
);
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
name = Products;
|
name = Products;
|
||||||
refType = 4;
|
path = "";
|
||||||
|
refType = 2;
|
||||||
};
|
};
|
||||||
//1A0
|
//1A0
|
||||||
//1A1
|
//1A1
|
||||||
@@ -421,10 +422,10 @@
|
|||||||
};
|
};
|
||||||
F51F791401DFD0DE01D13771 = {
|
F51F791401DFD0DE01D13771 = {
|
||||||
children = (
|
children = (
|
||||||
FA550F3103D59CB300A85B04,
|
|
||||||
F5263AEF01E2A9B801CE8F8F,
|
F5263AEF01E2A9B801CE8F8F,
|
||||||
F51F791501DFD0DE01D13771,
|
F51F791501DFD0DE01D13771,
|
||||||
F5E9447D02C9EE2801A85B04,
|
F5E9447D02C9EE2801A85B04,
|
||||||
|
FA0B193305060CB800A85B04,
|
||||||
F5B565290325412B01A85B04,
|
F5B565290325412B01A85B04,
|
||||||
F5E9447E02C9EE2801A85B04,
|
F5E9447E02C9EE2801A85B04,
|
||||||
F5E9447F02C9EE2801A85B04,
|
F5E9447F02C9EE2801A85B04,
|
||||||
@@ -433,8 +434,8 @@
|
|||||||
);
|
);
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
name = doc;
|
name = doc;
|
||||||
path = /Users/alex/Develop/ngircd/doc;
|
path = ../doc;
|
||||||
refType = 0;
|
refType = 2;
|
||||||
};
|
};
|
||||||
F51F791501DFD0DE01D13771 = {
|
F51F791501DFD0DE01D13771 = {
|
||||||
fileEncoding = 5;
|
fileEncoding = 5;
|
||||||
@@ -477,8 +478,8 @@
|
|||||||
);
|
);
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
name = testsuite;
|
name = testsuite;
|
||||||
path = /Users/alex/Develop/ngircd/src/testsuite;
|
path = ../src/testsuite;
|
||||||
refType = 0;
|
refType = 2;
|
||||||
};
|
};
|
||||||
F520AEA90335E29001A85B04 = {
|
F520AEA90335E29001A85B04 = {
|
||||||
fileEncoding = 5;
|
fileEncoding = 5;
|
||||||
@@ -593,8 +594,8 @@
|
|||||||
);
|
);
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
name = man;
|
name = man;
|
||||||
path = /Users/alex/Develop/ngircd/man;
|
path = ../man;
|
||||||
refType = 0;
|
refType = 2;
|
||||||
};
|
};
|
||||||
F520AF180335F1B801A85B04 = {
|
F520AF180335F1B801A85B04 = {
|
||||||
fileEncoding = 5;
|
fileEncoding = 5;
|
||||||
@@ -691,8 +692,9 @@
|
|||||||
F576ABFE01D61D7401A85B03,
|
F576ABFE01D61D7401A85B03,
|
||||||
);
|
);
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
path = ngircd;
|
name = ngircd;
|
||||||
refType = 4;
|
path = ../src/ngircd;
|
||||||
|
refType = 2;
|
||||||
};
|
};
|
||||||
F52162BB01C7B904012300F4 = {
|
F52162BB01C7B904012300F4 = {
|
||||||
fileEncoding = 5;
|
fileEncoding = 5;
|
||||||
@@ -1034,7 +1036,7 @@
|
|||||||
);
|
);
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
path = ngircd.pbproj;
|
path = ngircd.pbproj;
|
||||||
refType = 4;
|
refType = 2;
|
||||||
};
|
};
|
||||||
F56D8BA101E0BFA00155ADA7 = {
|
F56D8BA101E0BFA00155ADA7 = {
|
||||||
fileEncoding = 5;
|
fileEncoding = 5;
|
||||||
@@ -1275,7 +1277,8 @@
|
|||||||
);
|
);
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
name = contrib;
|
name = contrib;
|
||||||
refType = 4;
|
path = "";
|
||||||
|
refType = 2;
|
||||||
};
|
};
|
||||||
F5D3536203892AD201A85B04 = {
|
F5D3536203892AD201A85B04 = {
|
||||||
fileEncoding = 5;
|
fileEncoding = 5;
|
||||||
@@ -1377,8 +1380,8 @@
|
|||||||
);
|
);
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
name = portab;
|
name = portab;
|
||||||
path = /Users/alex/Develop/ngircd/src;
|
path = ../src/portab;
|
||||||
refType = 0;
|
refType = 2;
|
||||||
};
|
};
|
||||||
F5F18133023EC63701A85B04 = {
|
F5F18133023EC63701A85B04 = {
|
||||||
fileEncoding = 5;
|
fileEncoding = 5;
|
||||||
@@ -1443,6 +1446,13 @@
|
|||||||
//FA2
|
//FA2
|
||||||
//FA3
|
//FA3
|
||||||
//FA4
|
//FA4
|
||||||
|
FA0B193305060CB800A85B04 = {
|
||||||
|
fileEncoding = 5;
|
||||||
|
isa = PBXFileReference;
|
||||||
|
name = Platforms.txt;
|
||||||
|
path = ../doc/Platforms.txt;
|
||||||
|
refType = 2;
|
||||||
|
};
|
||||||
FA42C8AD03C0A00B00A85B04 = {
|
FA42C8AD03C0A00B00A85B04 = {
|
||||||
fileEncoding = 4;
|
fileEncoding = 4;
|
||||||
isa = PBXFileReference;
|
isa = PBXFileReference;
|
||||||
@@ -1503,7 +1513,8 @@
|
|||||||
);
|
);
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
name = tool;
|
name = tool;
|
||||||
refType = 4;
|
path = ../src;
|
||||||
|
refType = 2;
|
||||||
};
|
};
|
||||||
FA550F2A03D59C8200A85B04 = {
|
FA550F2A03D59C8200A85B04 = {
|
||||||
fileEncoding = 5;
|
fileEncoding = 5;
|
||||||
@@ -1550,93 +1561,6 @@
|
|||||||
settings = {
|
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 = {
|
FAC0383C03BB318400A85B04 = {
|
||||||
fileRef = F51044520297ABF80173DE11;
|
fileRef = F51044520297ABF80173DE11;
|
||||||
isa = PBXBuildFile;
|
isa = PBXBuildFile;
|
||||||
|
|||||||
11
NEWS
11
NEWS
@@ -10,6 +10,15 @@
|
|||||||
-- NEWS --
|
-- 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)
|
ngIRCd 0.7.1 (2003-07-18)
|
||||||
|
|
||||||
- Added support for GNU/Hurd.
|
- 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 $
|
||||||
|
|||||||
15
configure.in
15
configure.in
@@ -8,13 +8,13 @@
|
|||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
# Please read the file COPYING, README and AUTHORS for more information.
|
# 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 --
|
# -- Initialisierung --
|
||||||
|
|
||||||
AC_PREREQ(2.50)
|
AC_PREREQ(2.50)
|
||||||
AC_INIT(ngircd, 0.7.1)
|
AC_INIT(ngircd, 0.7.5)
|
||||||
AC_CONFIG_SRCDIR(src/ngircd/ngircd.c)
|
AC_CONFIG_SRCDIR(src/ngircd/ngircd.c)
|
||||||
AC_CANONICAL_TARGET
|
AC_CANONICAL_TARGET
|
||||||
AM_INIT_AUTOMAKE(1.6)
|
AM_INIT_AUTOMAKE(1.6)
|
||||||
@@ -279,6 +279,15 @@ if test "$GCC" = "yes"; then
|
|||||||
pedantic=""
|
pedantic=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
$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
|
uname | grep "CYGWIN" >/dev/null 2>&1
|
||||||
if test $? -eq 0; then
|
if test $? -eq 0; then
|
||||||
# The include files of Cygwin don't like -ansi,
|
# The include files of Cygwin don't like -ansi,
|
||||||
@@ -287,7 +296,7 @@ if test "$GCC" = "yes"; then
|
|||||||
ansi=""
|
ansi=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
add_CFLAGS="-Wall -W${ansi}${pedantic} $CFLAGS $CFLAGS_ADD"
|
add_CFLAGS="-pipe -Wall -W${ansi}${pedantic} $CFLAGS $CFLAGS_ADD"
|
||||||
else
|
else
|
||||||
the_CFLAGS="$CFLAGS"
|
the_CFLAGS="$CFLAGS"
|
||||||
add_CFLAGS="$CFLAGS_ADD"
|
add_CFLAGS="$CFLAGS_ADD"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
%define name ngircd
|
%define name ngircd
|
||||||
%define version 0.7.1
|
%define version 0.7.5
|
||||||
%define release 1
|
%define release 1
|
||||||
%define prefix %{_prefix}
|
%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
|
# This is a sample configuration file for the ngIRCd, which must adept to
|
||||||
@@ -37,6 +37,10 @@
|
|||||||
# one port, separated with ";". (Default: 6667)
|
# one port, separated with ";". (Default: 6667)
|
||||||
;Ports = 6667, 6668, 66694
|
;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
|
# Text file with the "message of the day" (MOTD). This message will
|
||||||
# be shown to all users connecting to the server:
|
# be shown to all users connecting to the server:
|
||||||
;MotdFile = /usr/local/etc/ngircd.motd
|
;MotdFile = /usr/local/etc/ngircd.motd
|
||||||
@@ -73,6 +77,10 @@
|
|||||||
# to accept (<=0: unlimited):
|
# to accept (<=0: unlimited):
|
||||||
;MaxConnections = -1
|
;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):
|
# Maximum number of channels a user can be member of (<=0: no limit):
|
||||||
;MaxJoins = 10
|
;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"
|
.TH ngircd.conf 5 "Mai 2003" ngircd "ngIRCd Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
@@ -67,6 +67,10 @@ command.
|
|||||||
Ports on which the server should listen. There may be more than one port,
|
Ports on which the server should listen. There may be more than one port,
|
||||||
separated with ';'. Default: 6667.
|
separated with ';'. Default: 6667.
|
||||||
.TP
|
.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
|
\fBMotdFile\fR
|
||||||
Text file with the "message of the day" (MOTD). This message will be shown
|
Text file with the "message of the day" (MOTD). This message will be shown
|
||||||
to all users connecting to the server.
|
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
|
Maximum number of simultaneous connection the server is allowed to accept
|
||||||
(<=0: unlimited). Default: -1.
|
(<=0: unlimited). Default: -1.
|
||||||
.TP
|
.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
|
\fBMaxJoins\fR
|
||||||
Maximum number of channels a user can be member of (<=0: no limit).
|
Maximum number of channels a user can be member of (<=0: no limit).
|
||||||
Default: 10.
|
Default: 10.
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
# Please read the file COPYING, README and AUTHORS for more information.
|
# 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
|
AUTOMAKE_OPTIONS = ../portab/ansi2knr
|
||||||
@@ -71,7 +71,8 @@ cvs-date:
|
|||||||
| $(AWK) "{ print \$$9 }" | sort | tail -1 \
|
| $(AWK) "{ print \$$9 }" | sort | tail -1 \
|
||||||
| sed -e "s/\//-/g" )\"" > cvs-version.new \
|
| sed -e "s/\//-/g" )\"" > cvs-version.new \
|
||||||
|| echo "" > 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
|
TESTS = check-version check-help
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#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 "imp.h"
|
||||||
#include <assert.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;
|
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;
|
is_member = has_voice = is_op = FALSE;
|
||||||
if( Channel_IsMemberOf( Chan, From ))
|
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;
|
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;
|
ok = TRUE;
|
||||||
if( strchr( Channel_Modes( Chan ), 'n' ) && ( ! is_member )) ok = FALSE;
|
if( strchr( Channel_Modes( Chan ), 'n' ) && ( ! is_member )) ok = FALSE;
|
||||||
if( strchr( Channel_Modes( Chan ), 'm' ) && ( ! is_op ) && ( ! has_voice )) 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 ));
|
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 ));
|
if( Client_Conn( From ) > NONE ) Conn_UpdateIdle( Client_Conn( From ));
|
||||||
return IRC_WriteStrChannelPrefix( Client, Chan, From, TRUE, "PRIVMSG %s :%s", Channel_Name( Chan ), Text );
|
return IRC_WriteStrChannelPrefix( Client, Chan, From, TRUE, "PRIVMSG %s :%s", Channel_Name( Chan ), Text );
|
||||||
} /* Channel_Write */
|
} /* Channel_Write */
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#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 "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@@ -120,6 +120,7 @@ Conf_Test( VOID )
|
|||||||
printf( "%u", Conf_ListenPorts[i] );
|
printf( "%u", Conf_ListenPorts[i] );
|
||||||
}
|
}
|
||||||
puts( "" );
|
puts( "" );
|
||||||
|
printf( " Listen = %s\n", Conf_ListenAddress );
|
||||||
pwd = getpwuid( Conf_UID );
|
pwd = getpwuid( Conf_UID );
|
||||||
if( pwd ) printf( " ServerUID = %s\n", pwd->pw_name );
|
if( pwd ) printf( " ServerUID = %s\n", pwd->pw_name );
|
||||||
else printf( " ServerUID = %ld\n", (LONG)Conf_UID );
|
else printf( " ServerUID = %ld\n", (LONG)Conf_UID );
|
||||||
@@ -132,6 +133,8 @@ Conf_Test( VOID )
|
|||||||
printf( " OperCanUseMode = %s\n", Conf_OperCanMode == TRUE ? "yes" : "no" );
|
printf( " OperCanUseMode = %s\n", Conf_OperCanMode == TRUE ? "yes" : "no" );
|
||||||
if( Conf_MaxConnections > 0 ) printf( " MaxConnections = %ld\n", Conf_MaxConnections );
|
if( Conf_MaxConnections > 0 ) printf( " MaxConnections = %ld\n", Conf_MaxConnections );
|
||||||
else printf( " MaxConnections = -1\n" );
|
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 );
|
if( Conf_MaxJoins > 0 ) printf( " MaxJoins = %d\n", Conf_MaxJoins );
|
||||||
else printf( " MaxJoins = -1\n" );
|
else printf( " MaxJoins = -1\n" );
|
||||||
puts( "" );
|
puts( "" );
|
||||||
@@ -340,6 +343,7 @@ Set_Defaults( BOOLEAN InitServers )
|
|||||||
strlcat( Conf_MotdFile, MOTD_FILE, sizeof( Conf_MotdFile ));
|
strlcat( Conf_MotdFile, MOTD_FILE, sizeof( Conf_MotdFile ));
|
||||||
|
|
||||||
Conf_ListenPorts_Count = 0;
|
Conf_ListenPorts_Count = 0;
|
||||||
|
strcpy( Conf_ListenAddress, "" );
|
||||||
|
|
||||||
Conf_UID = Conf_GID = 0;
|
Conf_UID = Conf_GID = 0;
|
||||||
|
|
||||||
@@ -354,6 +358,7 @@ Set_Defaults( BOOLEAN InitServers )
|
|||||||
Conf_OperCanMode = FALSE;
|
Conf_OperCanMode = FALSE;
|
||||||
|
|
||||||
Conf_MaxConnections = -1;
|
Conf_MaxConnections = -1;
|
||||||
|
Conf_MaxConnectionsIP = 5;
|
||||||
Conf_MaxJoins = 10;
|
Conf_MaxJoins = 10;
|
||||||
|
|
||||||
/* Initialize server configuration structures */
|
/* Initialize server configuration structures */
|
||||||
@@ -689,6 +694,16 @@ Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
|
|||||||
Conf_MaxConnections = atol( Arg );
|
Conf_MaxConnections = atol( Arg );
|
||||||
return;
|
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 )
|
if( strcasecmp( Var, "MaxJoins" ) == 0 )
|
||||||
{
|
{
|
||||||
/* Maximum number of channels a user can join. Values <= 0 are equal to "no limit". */
|
/* 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 );
|
Conf_MaxJoins = atoi( Arg );
|
||||||
return;
|
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 );
|
Config_Error( LOG_ERR, "%s, line %d (section \"Global\"): Unknown variable \"%s\"!", NGIRCd_ConfFile, Line, Var );
|
||||||
} /* Handle_GLOBAL */
|
} /* Handle_GLOBAL */
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
* Please read the file COPYING, README and AUTHORS for more information.
|
* 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)
|
* Configuration management (header)
|
||||||
*/
|
*/
|
||||||
@@ -76,6 +76,9 @@ GLOBAL CHAR Conf_MotdFile[FNAME_LEN];
|
|||||||
GLOBAL UINT Conf_ListenPorts[MAX_LISTEN_PORTS];
|
GLOBAL UINT Conf_ListenPorts[MAX_LISTEN_PORTS];
|
||||||
GLOBAL INT Conf_ListenPorts_Count;
|
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 */
|
/* User and group ID the server should run with */
|
||||||
GLOBAL UINT Conf_UID;
|
GLOBAL UINT Conf_UID;
|
||||||
GLOBAL UINT Conf_GID;
|
GLOBAL UINT Conf_GID;
|
||||||
@@ -107,6 +110,9 @@ GLOBAL LONG Conf_MaxConnections;
|
|||||||
/* Maximum number of channels a user can join */
|
/* Maximum number of channels a user can join */
|
||||||
GLOBAL INT Conf_MaxJoins;
|
GLOBAL INT Conf_MaxJoins;
|
||||||
|
|
||||||
|
/* Maximum number of connections per IP address */
|
||||||
|
GLOBAL INT Conf_MaxConnectionsIP;
|
||||||
|
|
||||||
|
|
||||||
GLOBAL VOID Conf_Init PARAMS((VOID ));
|
GLOBAL VOID Conf_Init PARAMS((VOID ));
|
||||||
GLOBAL VOID Conf_Rehash PARAMS((VOID ));
|
GLOBAL VOID Conf_Rehash PARAMS((VOID ));
|
||||||
|
|||||||
@@ -16,10 +16,11 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#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 "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <log.h>
|
||||||
|
|
||||||
#include "conn.h"
|
#include "conn.h"
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#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 "imp.h"
|
||||||
#include <assert.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 New_Server PARAMS(( INT Server, CONN_ID Idx ));
|
||||||
LOCAL VOID Read_Resolver_Result PARAMS(( INT r_fd ));
|
LOCAL VOID Read_Resolver_Result PARAMS(( INT r_fd ));
|
||||||
LOCAL VOID Simple_Message PARAMS(( INT Sock, CHAR *Msg ));
|
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_Listeners;
|
||||||
LOCAL fd_set My_Sockets;
|
LOCAL fd_set My_Sockets;
|
||||||
@@ -119,7 +120,9 @@ Conn_Init( VOID )
|
|||||||
Log( LOG_EMERG, "Can't allocate memory! [Conn_Init]" );
|
Log( LOG_EMERG, "Can't allocate memory! [Conn_Init]" );
|
||||||
exit( 1 );
|
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 */
|
/* zu Beginn haben wir keine Verbindungen */
|
||||||
FD_ZERO( &My_Listeners );
|
FD_ZERO( &My_Listeners );
|
||||||
@@ -146,7 +149,9 @@ Conn_Exit( VOID )
|
|||||||
CONN_ID idx;
|
CONN_ID idx;
|
||||||
INT i;
|
INT i;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Shutting down all connections ..." );
|
Log( LOG_DEBUG, "Shutting down all connections ..." );
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef RENDEZVOUS
|
#ifdef RENDEZVOUS
|
||||||
Rendezvous_UnregisterListeners( );
|
Rendezvous_UnregisterListeners( );
|
||||||
@@ -164,12 +169,16 @@ Conn_Exit( VOID )
|
|||||||
if( FD_ISSET( i, &My_Listeners ))
|
if( FD_ISSET( i, &My_Listeners ))
|
||||||
{
|
{
|
||||||
close( i );
|
close( i );
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Listening socket %d closed.", i );
|
Log( LOG_DEBUG, "Listening socket %d closed.", i );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if( FD_ISSET( i, &My_Connects ))
|
else if( FD_ISSET( i, &My_Connects ))
|
||||||
{
|
{
|
||||||
close( i );
|
close( i );
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Connection %d closed during creation (socket %d).", idx, i );
|
Log( LOG_DEBUG, "Connection %d closed during creation (socket %d).", idx, i );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if( idx < Pool_Size )
|
else if( idx < Pool_Size )
|
||||||
{
|
{
|
||||||
@@ -224,7 +233,9 @@ Conn_ExitListeners( VOID )
|
|||||||
if( FD_ISSET( i, &My_Sockets ) && FD_ISSET( i, &My_Listeners ))
|
if( FD_ISSET( i, &My_Sockets ) && FD_ISSET( i, &My_Listeners ))
|
||||||
{
|
{
|
||||||
close( i );
|
close( i );
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Listening socket %d closed.", i );
|
Log( LOG_DEBUG, "Listening socket %d closed.", i );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} /* Conn_ExitListeners */
|
} /* Conn_ExitListeners */
|
||||||
@@ -236,6 +247,7 @@ Conn_NewListener( CONST UINT Port )
|
|||||||
/* Create new listening socket on specified port */
|
/* Create new listening socket on specified port */
|
||||||
|
|
||||||
struct sockaddr_in addr;
|
struct sockaddr_in addr;
|
||||||
|
struct in_addr inaddr;
|
||||||
INT sock;
|
INT sock;
|
||||||
#ifdef RENDEZVOUS
|
#ifdef RENDEZVOUS
|
||||||
CHAR name[CLIENT_ID_LEN], *info;
|
CHAR name[CLIENT_ID_LEN], *info;
|
||||||
@@ -243,9 +255,24 @@ Conn_NewListener( CONST UINT Port )
|
|||||||
|
|
||||||
/* Server-"Listen"-Socket initialisieren */
|
/* Server-"Listen"-Socket initialisieren */
|
||||||
memset( &addr, 0, sizeof( addr ));
|
memset( &addr, 0, sizeof( addr ));
|
||||||
|
memset( &inaddr, 0, sizeof( inaddr ));
|
||||||
addr.sin_family = AF_INET;
|
addr.sin_family = AF_INET;
|
||||||
addr.sin_port = htons( Port );
|
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 */
|
/* Socket erzeugen */
|
||||||
sock = socket( PF_INET, SOCK_STREAM, 0);
|
sock = socket( PF_INET, SOCK_STREAM, 0);
|
||||||
@@ -279,7 +306,8 @@ Conn_NewListener( CONST UINT Port )
|
|||||||
|
|
||||||
if( sock > Conn_MaxFD ) Conn_MaxFD = sock;
|
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
|
#ifdef RENDEZVOUS
|
||||||
/* Get best server description text */
|
/* Get best server description text */
|
||||||
@@ -350,10 +378,13 @@ Conn_Handler( VOID )
|
|||||||
Check_Servers( );
|
Check_Servers( );
|
||||||
Check_Connections( );
|
Check_Connections( );
|
||||||
|
|
||||||
|
t = time( NULL );
|
||||||
|
|
||||||
/* noch volle Lese-Buffer suchen */
|
/* noch volle Lese-Buffer suchen */
|
||||||
for( i = 0; i < Pool_Size; i++ )
|
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? */
|
/* Kann aus dem Buffer noch ein Befehl extrahiert werden? */
|
||||||
if( Handle_Buffer( i )) timeout = FALSE;
|
if( Handle_Buffer( i )) timeout = FALSE;
|
||||||
@@ -382,7 +413,6 @@ Conn_Handler( VOID )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* von welchen Sockets koennte gelesen werden? */
|
/* von welchen Sockets koennte gelesen werden? */
|
||||||
t = time( NULL );
|
|
||||||
read_sockets = My_Sockets;
|
read_sockets = My_Sockets;
|
||||||
for( i = 0; i < Pool_Size; i++ )
|
for( i = 0; i < Pool_Size; i++ )
|
||||||
{
|
{
|
||||||
@@ -413,7 +443,7 @@ Conn_Handler( VOID )
|
|||||||
|
|
||||||
/* Timeout initialisieren */
|
/* Timeout initialisieren */
|
||||||
tv.tv_usec = 0;
|
tv.tv_usec = 0;
|
||||||
if( timeout ) tv.tv_sec = TIME_RES;
|
if( timeout ) tv.tv_sec = 1;
|
||||||
else tv.tv_sec = 0;
|
else tv.tv_sec = 0;
|
||||||
|
|
||||||
/* Auf Aktivitaet warten */
|
/* 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. */
|
* In diesem Fall wird hier einfach ein Fehler geliefert. */
|
||||||
if( My_Connections[Idx].sock <= NONE )
|
if( My_Connections[Idx].sock <= NONE )
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Skipped write on closed socket (connection %d).", Idx );
|
Log( LOG_DEBUG, "Skipped write on closed socket (connection %d).", Idx );
|
||||||
|
#endif
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -836,7 +868,9 @@ Handle_Write( CONN_ID Idx )
|
|||||||
|
|
||||||
return FALSE;
|
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 );
|
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 */
|
/* PASS und SERVER verschicken */
|
||||||
Conn_WriteStr( Idx, "PASS %s %s", Conf_Server[Conf_GetServer( Idx )].pwd_out, NGIRCd_ProtoID );
|
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;
|
CONN_ID idx;
|
||||||
CLIENT *c;
|
CLIENT *c;
|
||||||
POINTER *ptr;
|
POINTER *ptr;
|
||||||
LONG new_size;
|
LONG new_size, cnt;
|
||||||
|
|
||||||
assert( Sock > NONE );
|
assert( Sock > NONE );
|
||||||
|
|
||||||
@@ -916,6 +950,17 @@ New_Connection( INT Sock )
|
|||||||
/* Socket initialisieren */
|
/* Socket initialisieren */
|
||||||
Init_Socket( new_sock );
|
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 */
|
/* Freie Connection-Struktur suchen */
|
||||||
for( idx = 0; idx < Pool_Size; idx++ ) if( My_Connections[idx].sock == NONE ) break;
|
for( idx = 0; idx < Pool_Size; idx++ ) if( My_Connections[idx].sock == NONE ) break;
|
||||||
if( idx >= Pool_Size )
|
if( idx >= Pool_Size )
|
||||||
@@ -966,9 +1011,13 @@ New_Connection( INT Sock )
|
|||||||
/* Struktur umkopieren ... */
|
/* Struktur umkopieren ... */
|
||||||
memcpy( ptr, My_Connections, sizeof( CONNECTION ) * Pool_Size );
|
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 );
|
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 );
|
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 */
|
/* Adjust pointer to new block */
|
||||||
My_Connections = ptr;
|
My_Connections = ptr;
|
||||||
@@ -1032,7 +1081,9 @@ Socket2Index( INT Sock )
|
|||||||
{
|
{
|
||||||
/* die Connection wurde vermutlich (wegen eines
|
/* die Connection wurde vermutlich (wegen eines
|
||||||
* Fehlers) bereits wieder abgebaut ... */
|
* Fehlers) bereits wieder abgebaut ... */
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Socket2Index: can't get connection for socket %d!", Sock );
|
Log( LOG_DEBUG, "Socket2Index: can't get connection for socket %d!", Sock );
|
||||||
|
#endif
|
||||||
return NONE;
|
return NONE;
|
||||||
}
|
}
|
||||||
else return idx;
|
else return idx;
|
||||||
@@ -1135,6 +1186,9 @@ Handle_Buffer( CONN_ID Idx )
|
|||||||
result = FALSE;
|
result = FALSE;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
/* Check penalty */
|
||||||
|
if( My_Connections[Idx].delaytime > time( NULL )) return result;
|
||||||
|
|
||||||
#ifdef USE_ZLIB
|
#ifdef USE_ZLIB
|
||||||
/* ggf. noch unkomprimiete Daten weiter entpacken */
|
/* ggf. noch unkomprimiete Daten weiter entpacken */
|
||||||
if( My_Connections[Idx].options & CONN_ZIP )
|
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 );
|
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].zip.rdatalen = My_Connections[Idx].rdatalen;
|
||||||
My_Connections[Idx].rdatalen = 0;
|
My_Connections[Idx].rdatalen = 0;
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Moved already received data (%d bytes) to uncompression buffer.", My_Connections[Idx].zip.rdatalen );
|
Log( LOG_DEBUG, "Moved already received data (%d bytes) to uncompression buffer.", My_Connections[Idx].zip.rdatalen );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1251,14 +1307,18 @@ Check_Connections( VOID )
|
|||||||
if( My_Connections[i].lastping < time( NULL ) - Conf_PongTimeout )
|
if( My_Connections[i].lastping < time( NULL ) - Conf_PongTimeout )
|
||||||
{
|
{
|
||||||
/* Timeout */
|
/* Timeout */
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Connection %d: Ping timeout: %d seconds.", i, Conf_PongTimeout );
|
Log( LOG_DEBUG, "Connection %d: Ping timeout: %d seconds.", i, Conf_PongTimeout );
|
||||||
|
#endif
|
||||||
Conn_Close( i, NULL, "Ping timeout", TRUE );
|
Conn_Close( i, NULL, "Ping timeout", TRUE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( My_Connections[i].lastdata < time( NULL ) - Conf_PingTimeout )
|
else if( My_Connections[i].lastdata < time( NULL ) - Conf_PingTimeout )
|
||||||
{
|
{
|
||||||
/* es muss ein PING gesendet werden */
|
/* es muss ein PING gesendet werden */
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Connection %d: sending PING ...", i );
|
Log( LOG_DEBUG, "Connection %d: sending PING ...", i );
|
||||||
|
#endif
|
||||||
My_Connections[i].lastping = time( NULL );
|
My_Connections[i].lastping = time( NULL );
|
||||||
Conn_WriteStr( i, "PING :%s", Client_ID( Client_ThisServer( )));
|
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 )
|
if( My_Connections[i].lastdata < time( NULL ) - Conf_PingTimeout )
|
||||||
{
|
{
|
||||||
/* Timeout */
|
/* Timeout */
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Connection %d timed out ...", i );
|
Log( LOG_DEBUG, "Connection %d timed out ...", i );
|
||||||
|
#endif
|
||||||
Conn_Close( i, NULL, "Timeout", FALSE );
|
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 );
|
Log( LOG_ALERT, "Can't establist server connection: connection limit reached (%d)!", Pool_Size );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Preparing connection %d for \"%s\" ...", idx, Conf_Server[i].host );
|
Log( LOG_DEBUG, "Preparing connection %d for \"%s\" ...", idx, Conf_Server[i].host );
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Verbindungs-Struktur initialisieren */
|
/* Verbindungs-Struktur initialisieren */
|
||||||
Init_Conn_Struct( idx );
|
Init_Conn_Struct( idx );
|
||||||
@@ -1437,7 +1501,9 @@ New_Server( INT Server, CONN_ID Idx )
|
|||||||
FD_SET( new_sock, &My_Connects );
|
FD_SET( new_sock, &My_Connects );
|
||||||
if( new_sock > Conn_MaxFD ) Conn_MaxFD = new_sock;
|
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 );
|
Log( LOG_DEBUG, "Registered new connection %d on socket %d.", Idx, My_Connections[Idx].sock );
|
||||||
|
#endif
|
||||||
} /* New_Server */
|
} /* New_Server */
|
||||||
|
|
||||||
|
|
||||||
@@ -1534,11 +1600,15 @@ Read_Resolver_Result( INT r_fd )
|
|||||||
/* Opsa! Keine passende Connection gefunden!? Vermutlich
|
/* Opsa! Keine passende Connection gefunden!? Vermutlich
|
||||||
* wurde sie schon wieder geschlossen. */
|
* wurde sie schon wieder geschlossen. */
|
||||||
close( r_fd );
|
close( r_fd );
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Resolver: Got result for unknown connection!?" );
|
Log( LOG_DEBUG, "Resolver: Got result for unknown connection!?" );
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Resolver: %s is \"%s\".", My_Connections[i].host, result );
|
Log( LOG_DEBUG, "Resolver: %s is \"%s\".", My_Connections[i].host, result );
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Aufraeumen */
|
/* Aufraeumen */
|
||||||
close( My_Connections[i].res_stat->pipe[0] );
|
close( My_Connections[i].res_stat->pipe[0] );
|
||||||
@@ -1582,4 +1652,18 @@ Simple_Message( INT Sock, CHAR *Msg )
|
|||||||
} /* Simple_Error */
|
} /* 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- */
|
/* -eof- */
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
* Please read the file COPYING, README and AUTHORS for more information.
|
* 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.
|
* Global defines of ngIRCd.
|
||||||
*/
|
*/
|
||||||
@@ -19,8 +19,6 @@
|
|||||||
|
|
||||||
#define NONE -1
|
#define NONE -1
|
||||||
|
|
||||||
#define TIME_RES 2 /* Zeit-Aufloesung des Servers in Sekunden */
|
|
||||||
|
|
||||||
#define FNAME_LEN 256 /* max. Laenge eines Dateinamen */
|
#define FNAME_LEN 256 /* max. Laenge eines Dateinamen */
|
||||||
|
|
||||||
#define LINE_LEN 256 /* max. Laenge einer Konfigurationszeile */
|
#define LINE_LEN 256 /* max. Laenge einer Konfigurationszeile */
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#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 "imp.h"
|
||||||
#include <assert.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_ADMINLOC2_MSG, Client_ID( prefix ), Conf_ServerAdmin2 )) return DISCONNECTED;
|
||||||
if( ! IRC_WriteStrClient( Client, RPL_ADMINEMAIL_MSG, Client_ID( prefix ), Conf_ServerAdminMail )) return DISCONNECTED;
|
if( ! IRC_WriteStrClient( Client, RPL_ADMINEMAIL_MSG, Client_ID( prefix ), Conf_ServerAdminMail )) return DISCONNECTED;
|
||||||
|
|
||||||
|
IRC_SetPenalty( Client, 1 );
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
} /* IRC_ADMIN */
|
} /* IRC_ADMIN */
|
||||||
|
|
||||||
@@ -162,6 +163,7 @@ IRC_LINKS( CLIENT *Client, REQUEST *Req )
|
|||||||
c = Client_Next( c );
|
c = Client_Next( c );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IRC_SetPenalty( target, 1 );
|
||||||
return IRC_WriteStrClient( target, RPL_ENDOFLINKS_MSG, Client_ID( target ), mask );
|
return IRC_WriteStrClient( target, RPL_ENDOFLINKS_MSG, Client_ID( target ), mask );
|
||||||
} /* IRC_LINKS */
|
} /* IRC_LINKS */
|
||||||
|
|
||||||
@@ -197,6 +199,7 @@ IRC_LUSERS( CLIENT *Client, REQUEST *Req )
|
|||||||
|
|
||||||
IRC_Send_LUSERS( target );
|
IRC_Send_LUSERS( target );
|
||||||
|
|
||||||
|
IRC_SetPenalty( target, 1 );
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
} /* IRC_LUSERS */
|
} /* IRC_LUSERS */
|
||||||
|
|
||||||
@@ -230,6 +233,7 @@ IRC_MOTD( CLIENT *Client, REQUEST *Req )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IRC_SetPenalty( from, 3 );
|
||||||
return IRC_Show_MOTD( from );
|
return IRC_Show_MOTD( from );
|
||||||
} /* IRC_MOTD */
|
} /* IRC_MOTD */
|
||||||
|
|
||||||
@@ -324,6 +328,7 @@ IRC_NAMES( CLIENT *Client, REQUEST *Req )
|
|||||||
if( ! IRC_WriteStrClient( from, "%s", rpl )) return DISCONNECTED;
|
if( ! IRC_WriteStrClient( from, "%s", rpl )) return DISCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IRC_SetPenalty( from, 1 );
|
||||||
return IRC_WriteStrClient( from, RPL_ENDOFNAMES_MSG, Client_ID( from ), "*" );
|
return IRC_WriteStrClient( from, RPL_ENDOFNAMES_MSG, Client_ID( from ), "*" );
|
||||||
} /* IRC_NAMES */
|
} /* IRC_NAMES */
|
||||||
|
|
||||||
@@ -402,6 +407,7 @@ IRC_STATS( CLIENT *Client, REQUEST *Req )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IRC_SetPenalty( from, 2 );
|
||||||
return IRC_WriteStrClient( from, RPL_ENDOFSTATS_MSG, Client_ID( from ), query );
|
return IRC_WriteStrClient( from, RPL_ENDOFSTATS_MSG, Client_ID( from ), query );
|
||||||
} /* IRC_STATS */
|
} /* IRC_STATS */
|
||||||
|
|
||||||
@@ -517,6 +523,7 @@ IRC_VERSION( CLIENT *Client, REQUEST *Req )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* mit Versionsinfo antworten */
|
/* mit Versionsinfo antworten */
|
||||||
|
IRC_SetPenalty( Client, 1 );
|
||||||
#ifdef CVSDATE
|
#ifdef CVSDATE
|
||||||
strlcpy( ver, CVSDATE, sizeof( ver ));
|
strlcpy( ver, CVSDATE, sizeof( ver ));
|
||||||
strncpy( ver + 4, ver + 5, 2 );
|
strncpy( ver + 4, ver + 5, 2 );
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#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 "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@@ -223,6 +223,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
|
|||||||
|
|
||||||
/* neuen Client-Nick speichern */
|
/* neuen Client-Nick speichern */
|
||||||
Client_SetID( target, Req->argv[0] );
|
Client_SetID( target, Req->argv[0] );
|
||||||
|
IRC_SetPenalty( target, 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
@@ -457,6 +458,9 @@ Hello_User( CLIENT *Client )
|
|||||||
if( ! IRC_Send_LUSERS( Client )) return DISCONNECTED;
|
if( ! IRC_Send_LUSERS( Client )) return DISCONNECTED;
|
||||||
if( ! IRC_Show_MOTD( Client )) return DISCONNECTED;
|
if( ! IRC_Show_MOTD( Client )) return DISCONNECTED;
|
||||||
|
|
||||||
|
/* Suspend the client for a second ... */
|
||||||
|
IRC_SetPenalty( Client, 1 );
|
||||||
|
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
} /* Hello_User */
|
} /* Hello_User */
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#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 "imp.h"
|
||||||
#include <assert.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 ));
|
Log( LOG_DEBUG, "User \"%s\": Mode change, now \"%s\".", Client_Mask( Target ), Client_Modes( Target ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IRC_SetPenalty( Client, 1 );
|
||||||
return ok;
|
return ok;
|
||||||
} /* Client_Mode */
|
} /* Client_Mode */
|
||||||
|
|
||||||
@@ -598,6 +599,7 @@ chan_exit:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IRC_SetPenalty( Client, 1 );
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
} /* Channel_Mode */
|
} /* Channel_Mode */
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#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 "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@@ -395,6 +395,21 @@ va_dcl
|
|||||||
} /* IRC_WriteStrRelatedPrefix */
|
} /* 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 *
|
LOCAL CHAR *
|
||||||
Get_Prefix( CLIENT *Target, CLIENT *Client )
|
Get_Prefix( CLIENT *Target, CLIENT *Client )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
* Please read the file COPYING, README and AUTHORS for more information.
|
* 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)
|
* Sending IRC commands over the network (header)
|
||||||
*/
|
*/
|
||||||
@@ -30,6 +30,8 @@ GLOBAL VOID IRC_WriteStrServersPrefixFlag PARAMS((CLIENT *ExceptOf, CLIENT *Pref
|
|||||||
|
|
||||||
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
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#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 "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@@ -265,6 +265,7 @@ IRC_TRACE( CLIENT *Client, REQUEST *Req )
|
|||||||
/* Some information about us */
|
/* 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;
|
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 );
|
return IRC_WriteStrClient( from, RPL_TRACEEND_MSG, Client_ID( from ), Conf_ServerName, PACKAGE_NAME, PACKAGE_VERSION, NGIRCd_DebugLevel );
|
||||||
} /* IRC_TRACE */
|
} /* 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;
|
if( ! IRC_WriteStrClient( Client, "NOTICE %s :%s", Client_ID( Client ), cmd->name )) return DISCONNECTED;
|
||||||
cmd++;
|
cmd++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IRC_SetPenalty( Client, 2 );
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
} /* IRC_HELP */
|
} /* IRC_HELP */
|
||||||
|
|
||||||
|
|||||||
@@ -1,28 +1,35 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# ngIRCd Test Suite
|
# 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
|
[ $# -ne 1 ] && exit 1
|
||||||
|
|
||||||
# Flags fuer "ps" ermitteln
|
# detect flags for "ps" and "head"
|
||||||
if [ `uname` = "FreeBSD" ]; then
|
if [ `uname` = "FreeBSD" ]; then
|
||||||
PS_FLAGS="-a"; PS_PIDCOL="1"; HEAD_FLAGS="-n 1"
|
PS_FLAGS="-a"; PS_PIDCOL="1"; HEAD_FLAGS="-n 1"
|
||||||
elif [ `uname` = "A/UX" ]; then
|
elif [ `uname` = "A/UX" ]; then
|
||||||
PS_FLAGS="-ae"; PS_PIDCOL="1"; HEAD_FLAGS="-1"
|
PS_FLAGS="-ae"; PS_PIDCOL="1"; HEAD_FLAGS="-1"
|
||||||
|
elif [ `uname` = "GNU" ]; then
|
||||||
|
PS_FLAGS="-ax"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
|
||||||
else
|
else
|
||||||
PS_FLAGS="-f"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
|
PS_FLAGS="-f"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
|
||||||
ps $PS_FLAGS > /dev/null 2>&1
|
ps $PS_FLAGS > /dev/null 2>&1
|
||||||
if [ $? -ne 0 ]; then PS_FLAGS="a"; PS_PIDCOL="1"; fi
|
if [ $? -ne 0 ]; then PS_FLAGS="a"; PS_PIDCOL="1"; fi
|
||||||
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
|
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`
|
pid=`head $HEAD_FLAGS pids.tmp`
|
||||||
rm -rf procs.tmp pids.tmp
|
rm -rf procs.tmp pids.tmp
|
||||||
|
|
||||||
# ermittelte PID validieren
|
# validate PID
|
||||||
[ "$pid" -gt 1 ] > /dev/null 2>&1
|
[ "$pid" -gt 1 ] > /dev/null 2>&1
|
||||||
[ $? -ne 0 ] && exit 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]
|
[Global]
|
||||||
Name = ngircd.test.server
|
Name = ngircd.test.server
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
Ports = 6789
|
Ports = 6789
|
||||||
MotdFile = ngircd-test.motd
|
MotdFile = ngircd-test.motd
|
||||||
AdminEMail = admin@irc.server
|
AdminEMail = admin@irc.server
|
||||||
|
MaxConnectionsIP = 0
|
||||||
|
|
||||||
[Operator]
|
[Operator]
|
||||||
Name = TestOp
|
Name = TestOp
|
||||||
|
|||||||
@@ -1,31 +1,37 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# ngIRCd Test Suite
|
# 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`
|
[ -z "$srcdir" ] && srcdir=`dirname $0`
|
||||||
|
|
||||||
echo " starting server ..."
|
echo " starting server ..."
|
||||||
|
|
||||||
# alte Logfiles loeschen
|
# remove old logfiles
|
||||||
rm -rf logs *.log
|
rm -rf logs *.log
|
||||||
|
|
||||||
# pruefen, ob getpid.sh gueltige PID's liefert. Wenn dem nicht so ist,
|
# check weather getpid.sh returns valid PIDs. If not, don't start up the
|
||||||
# wird kein ngIRCd gestartet, da dieser ansonsten nicht mehr am Ende
|
# test-server, because we won't be able to kill it at the end of the test.
|
||||||
# des Testlaufs beendet werden koennte!
|
|
||||||
./getpid.sh sh > /dev/null 2>&1
|
./getpid.sh sh > /dev/null 2>&1
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo " error: getpid.sh FAILED!"
|
echo " error: getpid.sh FAILED!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
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 &
|
./T-ngircd -np -f ${srcdir}/ngircd-test.conf > ngircd-test.log 2>&1 &
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
# validieren, dass Server laeuft
|
# validate running test-server
|
||||||
pid=`./getpid.sh T-ngircd`
|
pid=`./getpid.sh T-ngircd`
|
||||||
[ -n "$pid" ] && kill -0 $pid > /dev/null 2>&1 || exit 1
|
[ -n "$pid" ] && kill -0 $pid > /dev/null 2>&1 || exit 1
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,25 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# ngIRCd Test Suite
|
# 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`
|
[ -z "$srcdir" ] && srcdir=`dirname $0`
|
||||||
|
|
||||||
echo " stopping server ..."
|
echo " stopping server ..."
|
||||||
|
|
||||||
# Test-Server stoppen ...
|
# stop test-server ...
|
||||||
pid=`./getpid.sh T-ngircd`
|
pid=`./getpid.sh T-ngircd`
|
||||||
[ -n "$pid" ] && kill $pid > /dev/null 2>&1 || exit 1
|
if [ -z "$pid" ]; then
|
||||||
sleep 1
|
echo " no running server found!?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
kill $pid > /dev/null 2>&1 || exit 1
|
||||||
|
|
||||||
# jetzt duerfte der Prozess nicht mehr laufen
|
# waiting ...
|
||||||
kill -0 $pid > /dev/null 2>&1 && exit 1 || exit 0
|
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-
|
# -eof-
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# ngIRCd Test Suite
|
# 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`
|
[ -z "$srcdir" ] && srcdir=`dirname $0`
|
||||||
|
|
||||||
@@ -12,11 +12,11 @@ mkdir -p logs tests
|
|||||||
|
|
||||||
type expect > /dev/null 2>&1
|
type expect > /dev/null 2>&1
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "SKIP: ${name} -- \"expect\" not found."; exit 77
|
echo " ${name}: \"expect\" not found."; exit 77
|
||||||
fi
|
fi
|
||||||
type telnet > /dev/null 2>&1
|
type telnet > /dev/null 2>&1
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "SKIP: ${name} -- \"telnet\" not found."; exit 77
|
echo " ${name}: \"telnet\" not found."; exit 77
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo " stressing server with $CLIENTS clients (be patient!) ..."
|
echo " stressing server with $CLIENTS clients (be patient!) ..."
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# ngIRCd Test Suite
|
# 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`
|
name=`basename $0`
|
||||||
test=`echo ${name} | cut -d '.' -f 1`
|
test=`echo ${name} | cut -d '.' -f 1`
|
||||||
@@ -8,11 +8,11 @@ mkdir -p logs
|
|||||||
|
|
||||||
type expect > /dev/null 2>&1
|
type expect > /dev/null 2>&1
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "SKIP: ${name} -- \"expect\" not found."; exit 77
|
echo " ${name}: \"expect\" not found."; exit 77
|
||||||
fi
|
fi
|
||||||
type telnet > /dev/null 2>&1
|
type telnet > /dev/null 2>&1
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "SKIP: ${name} -- \"telnet\" not found."; exit 77
|
echo " ${name}: \"telnet\" not found."; exit 77
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo " doing ${test} ..."
|
echo " doing ${test} ..."
|
||||||
|
|||||||
Reference in New Issue
Block a user