mirror of
https://github.com/osmarks/ngircd.git
synced 2025-10-19 16:47:38 +00:00
Compare commits
37 Commits
branch-0-1
...
rel-0-5-3
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bb180adb49 | ||
![]() |
e2c896cb7e | ||
![]() |
2c7b276cc5 | ||
![]() |
4decf352fa | ||
![]() |
19c2e79b72 | ||
![]() |
49d9585242 | ||
![]() |
9487976620 | ||
![]() |
35d1c2fc06 | ||
![]() |
c557a2920e | ||
![]() |
845b295e7d | ||
![]() |
59b5b0e025 | ||
![]() |
bdd23ece63 | ||
![]() |
a119700c62 | ||
![]() |
b0e7f564c7 | ||
![]() |
d69410f28d | ||
![]() |
d5fa1f76bb | ||
![]() |
3dec467ebc | ||
![]() |
a5fe6d6783 | ||
![]() |
37b579f3cd | ||
![]() |
268d02b90d | ||
![]() |
037418e8c0 | ||
![]() |
45c3886800 | ||
![]() |
38f387146f | ||
![]() |
fcbd44caa9 | ||
![]() |
f027308798 | ||
![]() |
462540e079 | ||
![]() |
7721c79747 | ||
![]() |
678a4dfba0 | ||
![]() |
8c956d25b7 | ||
![]() |
9f9f676716 | ||
![]() |
cf20b16d2a | ||
![]() |
97d4e580ae | ||
![]() |
b072b7712c | ||
![]() |
fd6a7f67ce | ||
![]() |
6c04ba84cd | ||
![]() |
ef6b7c7c63 | ||
![]() |
2592e73da0 |
48
ChangeLog
48
ChangeLog
@@ -10,8 +10,52 @@
|
|||||||
-- ChangeLog / Aenderungen --
|
-- ChangeLog / Aenderungen --
|
||||||
|
|
||||||
|
|
||||||
ngIRCd CVS-HEAD
|
ngIRCd 0.5.3, 08.11.2002
|
||||||
|
|
||||||
|
- NOTICE liefert nun wirklich nie mehr einen Fehler, auch dann nicht,
|
||||||
|
wenn der sendende Client noch gar nicht registriert ist.
|
||||||
|
- ein "schneller Server-Reconnect" wird nur noch dann versucht, wenn die
|
||||||
|
Verbindung zuvor ordentlich (="lange genug") in Ordnung war; somit also
|
||||||
|
nicht meht, wenn der Peer-Server gleich beim Connect ein ERROR liefert.
|
||||||
|
Das vermeidet "Connect-Orgien".
|
||||||
|
- einige Datentypen aufgeraumt: z.B. sind viele INT32s nun LONGs. Das ist
|
||||||
|
auf Platformen mit 8-Byte-Integern kompatibler.
|
||||||
|
- RPL_YOURHOST_MSG ist nun ircII- und RFC-kompatibel ;-)
|
||||||
|
- Segfault unter hoher Netzaktivitaet behoben: in Conn_Close() wird die
|
||||||
|
Connection-Struktur nun frueher als "ungueltig" markiert.
|
||||||
|
|
||||||
|
ngIRCd 0.5.2, 04.10.2002
|
||||||
|
|
||||||
|
- Buffer Overflow in Read_Resolver_Result() behoben.
|
||||||
|
- Format-String-Bugs, die zum Abbruch des Servers fuehrten, behoben.
|
||||||
|
- Maximale Laenge eines IRC-Prefix wurde falsch berechnet.
|
||||||
|
|
||||||
|
ngIRCd 0.5.1, 03.10.2002
|
||||||
|
|
||||||
|
- in RPL_YOURHOST_MSG wurde ein fehlerhafter Versionsstring geliefert.
|
||||||
|
- Test-Suite: start-server.sh, stop-server.sh und stress-server.sh koennen
|
||||||
|
nun "manuell" von der Kommandozeile gestartet werden, stress-server.sh
|
||||||
|
startet per Default nur noch 5 Sessions, eine andere Zahl kann auf der
|
||||||
|
Kommandozeile uebergeben werden (Syntax: "stress-server.sh <count>").
|
||||||
|
- In bestimmten Faellen hat der Server versucht auf einen bereits wieder
|
||||||
|
geschlossenen Socket Daten zu schreiben; das fuehrte zu einem Abbruch des
|
||||||
|
Servers durch ein assert(). Nun wird geprueft, ob der Socket noch ok ist.
|
||||||
|
- im "contrib"-Verzeichnis befindet sich nun eine RPM-Spec-Datei, aus den
|
||||||
|
.tar.gz's koennen nun mit "rpm -ta <archiv>" RPM's erzeugt werden. Danke
|
||||||
|
an Sean Reifschneider <jafo@tummy.com>!
|
||||||
|
- Syntax von RPL_MYINFO_MSG korrigiert: liefert nun vier Parameter.
|
||||||
|
|
||||||
|
ngIRCd 0.5.0, 20.09.2002
|
||||||
|
|
||||||
|
- Dokumentation aktualisiert.
|
||||||
|
- Fehler bei Validierung von "AdminInfo2" behoben.
|
||||||
|
- Test der Flags fuer "ps" in der Testsuite verbessert, ist nun zu mehr
|
||||||
|
Plattformen kompatibler.
|
||||||
|
|
||||||
|
ngIRCd 0.5.0-pre2, 17.09.2002
|
||||||
|
- Fix in IRC_WriteStrServersPrefix() war "badly broken" -- behoben.
|
||||||
|
|
||||||
|
ngIRCd 0.5.0-pre1, 16.09.2002
|
||||||
- Manual-Pages ngircd.8 und ngircd.conf.5 begonnen.
|
- Manual-Pages ngircd.8 und ngircd.conf.5 begonnen.
|
||||||
- Wird der Netzwerk-Sniffer aktiviert (--sniffer), so schaltet der
|
- Wird der Netzwerk-Sniffer aktiviert (--sniffer), so schaltet der
|
||||||
ngIRCd nun automatisch in den Debug-Modus.
|
ngIRCd nun automatisch in den Debug-Modus.
|
||||||
@@ -254,4 +298,4 @@ ngIRCd 0.0.1, 31.12.2001
|
|||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
$Id: ChangeLog,v 1.87 2002/09/16 10:00:28 alex Exp $
|
$Id: ChangeLog,v 1.87.2.12 2002/11/08 21:17:03 alex Exp $
|
||||||
|
@@ -9,12 +9,12 @@
|
|||||||
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
#
|
#
|
||||||
# $Id: Makefile.am,v 1.9 2002/03/31 20:23:06 alex Exp $
|
# $Id: Makefile.am,v 1.9.2.1 2002/10/03 16:13:38 alex Exp $
|
||||||
#
|
#
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = gnu
|
AUTOMAKE_OPTIONS = gnu
|
||||||
|
|
||||||
SUBDIRS = doc MacOSX src man
|
SUBDIRS = doc MacOSX src man contrib
|
||||||
|
|
||||||
maintainer-clean-local:
|
maintainer-clean-local:
|
||||||
rm -rf autom4te.cache
|
rm -rf autom4te.cache
|
||||||
@@ -25,4 +25,7 @@ maintainer-clean-local:
|
|||||||
lint:
|
lint:
|
||||||
make -C src/ngircd lint
|
make -C src/ngircd lint
|
||||||
|
|
||||||
|
rpm: distcheck
|
||||||
|
rpm -ta ngircd-*.tar.gz
|
||||||
|
|
||||||
# -eof-
|
# -eof-
|
||||||
|
34
NEWS
34
NEWS
@@ -10,31 +10,25 @@
|
|||||||
-- NEWS / Neuigkeiten --
|
-- NEWS / Neuigkeiten --
|
||||||
|
|
||||||
|
|
||||||
ngIRCd CVS-HEAD
|
ngIRCd 0.5.0, 20.09.2002
|
||||||
|
|
||||||
- Manual-Pages ngircd.8 und ngircd.conf.5 begonnen.
|
|
||||||
- AIX (3.2.5), HP-UX (10.20), IRIX (6.5), NetBSD (1.5.3/m68k) und Solaris
|
- AIX (3.2.5), HP-UX (10.20), IRIX (6.5), NetBSD (1.5.3/m68k) und Solaris
|
||||||
(2.5.1, 2.6) gehoeren nun auch zu den unterstuetzten Platformen.
|
(2.5.1, 2.6) gehoeren nun auch zu den unterstuetzten Platformen.
|
||||||
- "persistente Channels" (Mode 'P') implementiert: diese koennen in der
|
|
||||||
Konfigurationsdatei definiert werden (Sektion "Channel", vgl. Beispiel-
|
|
||||||
Konfiguration "sample-ngircd.conf") und bleiben auch dann bestehen,
|
|
||||||
wenn kein User mehr im Channel ist. Zu Channel-Operatoren werden bisher
|
|
||||||
nur IRC-Operatoren, die den Channel betreten. Die persistenten Channels
|
|
||||||
werden durch das Flag "P" gelennzeichnet, welches normal durch Channel-
|
|
||||||
Op's gesetzt und geloescht werden kann.
|
|
||||||
- KICK implementiert (bisher kann nur ein User aus einem Channel geckicked
|
|
||||||
werden, Listen, wir im RFC vorgesehen, werden bisher nicht unterstuetzt).
|
|
||||||
- INVITE, den Channel-Mode "i" sowie Invite-Lists ueber den MODE-Befehl
|
|
||||||
(setzen, erfragen und loeschen) implementiert.
|
|
||||||
- Unter A/UX (und evtl. weiteren Systemen) kompiliert der ngIRCd nun mit
|
- Unter A/UX (und evtl. weiteren Systemen) kompiliert der ngIRCd nun mit
|
||||||
dem "nativen" (ggf. pre-ANSI) Compiler.
|
dem "nativen" (ggf. pre-ANSI) Compiler.
|
||||||
- LIST versteht nun Wildcards und kann an andere Server geforwarded werden.
|
- "persistente Channels" (Mode 'P') implementiert: diese koennen in der
|
||||||
- neue Konfigurationsoption "OperCanUseMode" (Sektion "Global"):
|
Konfigurationsdatei definiert werden (Sektion "Channel", vgl. Beispiel-
|
||||||
|
Konfiguration "sample-ngircd.conf") und bleiben auch dann bestehen,
|
||||||
|
wenn kein User mehr im Channel ist.
|
||||||
|
- neue IRC-Befehle: KICK, INVITE, ADMIN, CHANINFO; LIST wurde erweitert.
|
||||||
|
Mit dem neuen Befehl CHANINFO syncronisieren Server, die das IRC+-
|
||||||
|
Protokoll unterstuetzen, Channel-Modes und Topics. Fuer den ADMIN-Befehl
|
||||||
|
gibt es neue Konfigurationsoptionen (Sektion "Global"): "AdminInfo1",
|
||||||
|
"AdminInfo2" und "AdminEMail".
|
||||||
|
- Invite- und Ban-Lists implementiert.
|
||||||
|
- neue Konfigurationsoption "OperCanUseMode" (Sektion "Global"):
|
||||||
ist sie aktiv, koennen IRC-Operatoren immer Channel-Modes setzen.
|
ist sie aktiv, koennen IRC-Operatoren immer Channel-Modes setzen.
|
||||||
- mit dem neuen Befehl CHANINFO syncronisieren Server, die das IRC+-
|
- "Test-Suite" begonnen: mit "make check" wird sie durchlaufen.
|
||||||
Protokoll unterstuetzen, Channel-Modes und Topics.
|
|
||||||
- Ban-Lists (setzen, erfragen und loeschen) implementiert.
|
|
||||||
- ADMIN-Befehl implementiert.
|
|
||||||
|
|
||||||
ngIRCd 0.4.2, 29.04.2002
|
ngIRCd 0.4.2, 29.04.2002
|
||||||
|
|
||||||
@@ -116,4 +110,4 @@ ngIRCd 0.0.1, 31.12.2001
|
|||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
$Id: NEWS,v 1.38 2002/09/16 11:03:05 alex Exp $
|
$Id: NEWS,v 1.38.2.4 2002/10/03 16:09:50 alex Exp $
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
#
|
#
|
||||||
# $Id: configure.in,v 1.59 2002/09/17 17:12:24 alex Exp $
|
# $Id: configure.in,v 1.58.2.8 2002/11/08 21:17:17 alex Exp $
|
||||||
#
|
#
|
||||||
|
|
||||||
# -- Initialisierung --
|
# -- Initialisierung --
|
||||||
@@ -18,7 +18,7 @@ AC_INIT
|
|||||||
AC_PREREQ(2.50)
|
AC_PREREQ(2.50)
|
||||||
AC_CANONICAL_TARGET
|
AC_CANONICAL_TARGET
|
||||||
AC_CONFIG_SRCDIR(src/config.h.in)
|
AC_CONFIG_SRCDIR(src/config.h.in)
|
||||||
AM_INIT_AUTOMAKE(ngircd,0.5.0-pre2)
|
AM_INIT_AUTOMAKE(ngircd,0.5.3)
|
||||||
AM_CONFIG_HEADER(src/config.h)
|
AM_CONFIG_HEADER(src/config.h)
|
||||||
|
|
||||||
# -- Templates fuer config.h --
|
# -- Templates fuer config.h --
|
||||||
@@ -194,6 +194,7 @@ AC_OUTPUT([ \
|
|||||||
src/ngircd/Makefile \
|
src/ngircd/Makefile \
|
||||||
src/testsuite/Makefile \
|
src/testsuite/Makefile \
|
||||||
man/Makefile \
|
man/Makefile \
|
||||||
|
contrib/Makefile \
|
||||||
])
|
])
|
||||||
|
|
||||||
# -- Ergebnis --
|
# -- Ergebnis --
|
||||||
|
20
contrib/Makefile.am
Normal file
20
contrib/Makefile.am
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#
|
||||||
|
# ngIRCd -- The Next Generation IRC Daemon
|
||||||
|
# Copyright (c)2001,2002 by Alexander Barton (alex@barton.de)
|
||||||
|
#
|
||||||
|
# Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
|
||||||
|
# der GNU General Public License (GPL), wie von der Free Software Foundation
|
||||||
|
# herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
|
||||||
|
# der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
|
||||||
|
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
|
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
|
#
|
||||||
|
# $Id: Makefile.am,v 1.1.2.1 2002/10/03 16:13:38 alex Exp $
|
||||||
|
#
|
||||||
|
|
||||||
|
EXTRA_DIST = ngircd.spec
|
||||||
|
|
||||||
|
maintainer-clean-local:
|
||||||
|
rm -f Makefile Makefile.in
|
||||||
|
|
||||||
|
# -eof-
|
54
contrib/ngircd.spec
Normal file
54
contrib/ngircd.spec
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
%define name ngircd
|
||||||
|
%define version 0.5.3
|
||||||
|
%define release 1
|
||||||
|
%define prefix %{_prefix}
|
||||||
|
|
||||||
|
Summary: Next Generation Internet Relay Chat Daemon
|
||||||
|
Name: %{name}
|
||||||
|
Version: %{version}
|
||||||
|
Release: %{release}
|
||||||
|
Copyright: GPL
|
||||||
|
Group: Networking/Daemons
|
||||||
|
URL: http://arthur.ath.cx/~alex/ngircd/
|
||||||
|
Source: %{name}-%{version}.tar.gz
|
||||||
|
Packager: Sean Reifschneider <jafo-rpms@tummy.com>
|
||||||
|
BuildRoot: /var/tmp/%{name}-root
|
||||||
|
|
||||||
|
%description
|
||||||
|
ngIRCd is a free open source daemon for Internet Relay Chat (IRC),
|
||||||
|
developed under the GNU General Public License (GPL). It's written from
|
||||||
|
scratch and is not based upon the original IRCd like many others.
|
||||||
|
|
||||||
|
Why should you use ngIRCd? Because ...
|
||||||
|
|
||||||
|
* ... there are no problems with servers on changing or non-static IP
|
||||||
|
addresses.
|
||||||
|
* ... there is a small and lean configuration file.
|
||||||
|
* ... there is a free, modern and open source C source code.
|
||||||
|
* ... it is still under active development.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup
|
||||||
|
%build
|
||||||
|
%configure
|
||||||
|
make
|
||||||
|
|
||||||
|
%install
|
||||||
|
[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT"
|
||||||
|
%makeinstall
|
||||||
|
(
|
||||||
|
cd "$RPM_BUILD_ROOT"
|
||||||
|
( cd usr/sbin; mv *-ngircd ngircd )
|
||||||
|
( cd usr/share/man/man5; mv *-ngircd.conf.5 ngircd.conf.5 )
|
||||||
|
( cd usr/share/man/man8; mv *-ngircd.8 ngircd.8 )
|
||||||
|
)
|
||||||
|
|
||||||
|
%clean
|
||||||
|
[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT"
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(755,root,root)
|
||||||
|
%doc AUTHORS COPYING ChangeLog INSTALL NEWS README
|
||||||
|
%config(noreplace) /etc
|
||||||
|
%{_prefix}/sbin
|
||||||
|
%attr(644,root,root) %{_prefix}/share/man/
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: channel.c,v 1.32 2002/09/03 23:57:57 alex Exp $
|
* $Id: channel.c,v 1.32.2.1 2002/11/04 19:18:39 alex Exp $
|
||||||
*
|
*
|
||||||
* channel.c: Management der Channels
|
* channel.c: Management der Channels
|
||||||
*/
|
*/
|
||||||
@@ -249,11 +249,11 @@ Channel_Quit( CLIENT *Client, CHAR *Reason )
|
|||||||
} /* Channel_Quit */
|
} /* Channel_Quit */
|
||||||
|
|
||||||
|
|
||||||
GLOBAL INT
|
GLOBAL LONG
|
||||||
Channel_Count( VOID )
|
Channel_Count( VOID )
|
||||||
{
|
{
|
||||||
CHANNEL *c;
|
CHANNEL *c;
|
||||||
INT count;
|
LONG count;
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
c = My_Channels;
|
c = My_Channels;
|
||||||
@@ -266,11 +266,11 @@ Channel_Count( VOID )
|
|||||||
} /* Channel_Count */
|
} /* Channel_Count */
|
||||||
|
|
||||||
|
|
||||||
GLOBAL INT
|
GLOBAL LONG
|
||||||
Channel_MemberCount( CHANNEL *Chan )
|
Channel_MemberCount( CHANNEL *Chan )
|
||||||
{
|
{
|
||||||
CL2CHAN *cl2chan;
|
CL2CHAN *cl2chan;
|
||||||
INT count;
|
LONG count;
|
||||||
|
|
||||||
assert( Chan != NULL );
|
assert( Chan != NULL );
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: channel.h,v 1.21 2002/09/03 23:57:57 alex Exp $
|
* $Id: channel.h,v 1.21.2.1 2002/11/04 19:18:39 alex Exp $
|
||||||
*
|
*
|
||||||
* channel.h: Management der Channels (Header)
|
* channel.h: Management der Channels (Header)
|
||||||
*/
|
*/
|
||||||
@@ -59,8 +59,8 @@ GLOBAL VOID Channel_Quit PARAMS((CLIENT *Client, CHAR *Reason ));
|
|||||||
|
|
||||||
GLOBAL VOID Channel_Kick PARAMS(( CLIENT *Client, CLIENT *Origin, CHAR *Name, CHAR *Reason ));
|
GLOBAL VOID Channel_Kick PARAMS(( CLIENT *Client, CLIENT *Origin, CHAR *Name, CHAR *Reason ));
|
||||||
|
|
||||||
GLOBAL INT Channel_Count PARAMS((VOID ));
|
GLOBAL LONG Channel_Count PARAMS((VOID ));
|
||||||
GLOBAL INT Channel_MemberCount PARAMS((CHANNEL *Chan ));
|
GLOBAL LONG Channel_MemberCount PARAMS((CHANNEL *Chan ));
|
||||||
|
|
||||||
GLOBAL CHAR *Channel_Name PARAMS((CHANNEL *Chan ));
|
GLOBAL CHAR *Channel_Name PARAMS((CHANNEL *Chan ));
|
||||||
GLOBAL CHAR *Channel_Modes PARAMS((CHANNEL *Chan ));
|
GLOBAL CHAR *Channel_Modes PARAMS((CHANNEL *Chan ));
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: client.c,v 1.60 2002/09/03 18:54:31 alex Exp $
|
* $Id: client.c,v 1.60.2.2 2002/11/04 19:18:39 alex Exp $
|
||||||
*
|
*
|
||||||
* client.c: Management aller Clients
|
* client.c: Management aller Clients
|
||||||
*
|
*
|
||||||
@@ -53,12 +53,15 @@
|
|||||||
#include <exp.h>
|
#include <exp.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define GETID_LEN (CLIENT_NICK_LEN-1) + 1 + (CLIENT_USER_LEN-1) + 1 + (CLIENT_HOST_LEN-1) + 1
|
||||||
|
|
||||||
|
|
||||||
LOCAL CLIENT *This_Server, *My_Clients;
|
LOCAL CLIENT *This_Server, *My_Clients;
|
||||||
LOCAL CHAR GetID_Buffer[CLIENT_ID_LEN];
|
LOCAL CHAR GetID_Buffer[GETID_LEN];
|
||||||
|
|
||||||
|
|
||||||
LOCAL INT Count PARAMS(( CLIENT_TYPE Type ));
|
LOCAL LONG Count PARAMS(( CLIENT_TYPE Type ));
|
||||||
LOCAL INT MyCount PARAMS(( CLIENT_TYPE Type ));
|
LOCAL LONG MyCount PARAMS(( CLIENT_TYPE Type ));
|
||||||
|
|
||||||
LOCAL CLIENT *New_Client_Struct PARAMS(( VOID ));
|
LOCAL CLIENT *New_Client_Struct PARAMS(( VOID ));
|
||||||
LOCAL VOID Generate_MyToken PARAMS(( CLIENT *Client ));
|
LOCAL VOID Generate_MyToken PARAMS(( CLIENT *Client ));
|
||||||
@@ -713,7 +716,7 @@ Client_Mask( CLIENT *Client )
|
|||||||
|
|
||||||
if( Client->type == CLIENT_SERVER ) return Client->id;
|
if( Client->type == CLIENT_SERVER ) return Client->id;
|
||||||
|
|
||||||
sprintf( GetID_Buffer, "%s!%s@%s", Client->id, Client->user, Client->host );
|
snprintf( GetID_Buffer, GETID_LEN, "%s!%s@%s", Client->id, Client->user, Client->host );
|
||||||
return GetID_Buffer;
|
return GetID_Buffer;
|
||||||
} /* Client_Mask */
|
} /* Client_Mask */
|
||||||
|
|
||||||
@@ -837,46 +840,46 @@ Client_Next( CLIENT *c )
|
|||||||
} /* Client_Next */
|
} /* Client_Next */
|
||||||
|
|
||||||
|
|
||||||
GLOBAL INT
|
GLOBAL LONG
|
||||||
Client_UserCount( VOID )
|
Client_UserCount( VOID )
|
||||||
{
|
{
|
||||||
return Count( CLIENT_USER );
|
return Count( CLIENT_USER );
|
||||||
} /* Client_UserCount */
|
} /* Client_UserCount */
|
||||||
|
|
||||||
|
|
||||||
GLOBAL INT
|
GLOBAL LONG
|
||||||
Client_ServiceCount( VOID )
|
Client_ServiceCount( VOID )
|
||||||
{
|
{
|
||||||
return Count( CLIENT_SERVICE );;
|
return Count( CLIENT_SERVICE );;
|
||||||
} /* Client_ServiceCount */
|
} /* Client_ServiceCount */
|
||||||
|
|
||||||
|
|
||||||
GLOBAL INT
|
GLOBAL LONG
|
||||||
Client_ServerCount( VOID )
|
Client_ServerCount( VOID )
|
||||||
{
|
{
|
||||||
return Count( CLIENT_SERVER );
|
return Count( CLIENT_SERVER );
|
||||||
} /* Client_ServerCount */
|
} /* Client_ServerCount */
|
||||||
|
|
||||||
|
|
||||||
GLOBAL INT
|
GLOBAL LONG
|
||||||
Client_MyUserCount( VOID )
|
Client_MyUserCount( VOID )
|
||||||
{
|
{
|
||||||
return MyCount( CLIENT_USER );
|
return MyCount( CLIENT_USER );
|
||||||
} /* Client_MyUserCount */
|
} /* Client_MyUserCount */
|
||||||
|
|
||||||
|
|
||||||
GLOBAL INT
|
GLOBAL LONG
|
||||||
Client_MyServiceCount( VOID )
|
Client_MyServiceCount( VOID )
|
||||||
{
|
{
|
||||||
return MyCount( CLIENT_SERVICE );
|
return MyCount( CLIENT_SERVICE );
|
||||||
} /* Client_MyServiceCount */
|
} /* Client_MyServiceCount */
|
||||||
|
|
||||||
|
|
||||||
GLOBAL INT
|
GLOBAL LONG
|
||||||
Client_MyServerCount( VOID )
|
Client_MyServerCount( VOID )
|
||||||
{
|
{
|
||||||
CLIENT *c;
|
CLIENT *c;
|
||||||
INT cnt;
|
LONG cnt;
|
||||||
|
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
c = My_Clients;
|
c = My_Clients;
|
||||||
@@ -889,11 +892,11 @@ Client_MyServerCount( VOID )
|
|||||||
} /* Client_MyServerCount */
|
} /* Client_MyServerCount */
|
||||||
|
|
||||||
|
|
||||||
GLOBAL INT
|
GLOBAL LONG
|
||||||
Client_OperCount( VOID )
|
Client_OperCount( VOID )
|
||||||
{
|
{
|
||||||
CLIENT *c;
|
CLIENT *c;
|
||||||
INT cnt;
|
LONG cnt;
|
||||||
|
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
c = My_Clients;
|
c = My_Clients;
|
||||||
@@ -906,11 +909,11 @@ Client_OperCount( VOID )
|
|||||||
} /* Client_OperCount */
|
} /* Client_OperCount */
|
||||||
|
|
||||||
|
|
||||||
GLOBAL INT
|
GLOBAL LONG
|
||||||
Client_UnknownCount( VOID )
|
Client_UnknownCount( VOID )
|
||||||
{
|
{
|
||||||
CLIENT *c;
|
CLIENT *c;
|
||||||
INT cnt;
|
LONG cnt;
|
||||||
|
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
c = My_Clients;
|
c = My_Clients;
|
||||||
@@ -950,11 +953,11 @@ Client_IsValidNick( CHAR *Nick )
|
|||||||
} /* Client_IsValidNick */
|
} /* Client_IsValidNick */
|
||||||
|
|
||||||
|
|
||||||
LOCAL INT
|
LOCAL LONG
|
||||||
Count( CLIENT_TYPE Type )
|
Count( CLIENT_TYPE Type )
|
||||||
{
|
{
|
||||||
CLIENT *c;
|
CLIENT *c;
|
||||||
INT cnt;
|
LONG cnt;
|
||||||
|
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
c = My_Clients;
|
c = My_Clients;
|
||||||
@@ -967,11 +970,11 @@ Count( CLIENT_TYPE Type )
|
|||||||
} /* Count */
|
} /* Count */
|
||||||
|
|
||||||
|
|
||||||
LOCAL INT
|
LOCAL LONG
|
||||||
MyCount( CLIENT_TYPE Type )
|
MyCount( CLIENT_TYPE Type )
|
||||||
{
|
{
|
||||||
CLIENT *c;
|
CLIENT *c;
|
||||||
INT cnt;
|
LONG cnt;
|
||||||
|
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
c = My_Clients;
|
c = My_Clients;
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: client.h,v 1.29 2002/09/03 18:54:31 alex Exp $
|
* $Id: client.h,v 1.29.2.1 2002/11/04 19:18:39 alex Exp $
|
||||||
*
|
*
|
||||||
* client.h: Konfiguration des ngircd (Header)
|
* client.h: Konfiguration des ngircd (Header)
|
||||||
*/
|
*/
|
||||||
@@ -124,14 +124,14 @@ GLOBAL BOOLEAN Client_ModeDel PARAMS((CLIENT *Client, CHAR Mode ));
|
|||||||
GLOBAL BOOLEAN Client_CheckNick PARAMS((CLIENT *Client, CHAR *Nick ));
|
GLOBAL BOOLEAN Client_CheckNick PARAMS((CLIENT *Client, CHAR *Nick ));
|
||||||
GLOBAL BOOLEAN Client_CheckID PARAMS((CLIENT *Client, CHAR *ID ));
|
GLOBAL BOOLEAN Client_CheckID PARAMS((CLIENT *Client, CHAR *ID ));
|
||||||
|
|
||||||
GLOBAL INT Client_UserCount PARAMS((VOID ));
|
GLOBAL LONG Client_UserCount PARAMS((VOID ));
|
||||||
GLOBAL INT Client_ServiceCount PARAMS((VOID ));
|
GLOBAL LONG Client_ServiceCount PARAMS((VOID ));
|
||||||
GLOBAL INT Client_ServerCount PARAMS((VOID ));
|
GLOBAL LONG Client_ServerCount PARAMS((VOID ));
|
||||||
GLOBAL INT Client_OperCount PARAMS((VOID ));
|
GLOBAL LONG Client_OperCount PARAMS((VOID ));
|
||||||
GLOBAL INT Client_UnknownCount PARAMS((VOID ));
|
GLOBAL LONG Client_UnknownCount PARAMS((VOID ));
|
||||||
GLOBAL INT Client_MyUserCount PARAMS((VOID ));
|
GLOBAL LONG Client_MyUserCount PARAMS((VOID ));
|
||||||
GLOBAL INT Client_MyServiceCount PARAMS((VOID ));
|
GLOBAL LONG Client_MyServiceCount PARAMS((VOID ));
|
||||||
GLOBAL INT Client_MyServerCount PARAMS((VOID ));
|
GLOBAL LONG Client_MyServerCount PARAMS((VOID ));
|
||||||
|
|
||||||
GLOBAL BOOLEAN Client_IsValidNick PARAMS((CHAR *Nick ));
|
GLOBAL BOOLEAN Client_IsValidNick PARAMS((CHAR *Nick ));
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: conf.c,v 1.29 2002/09/16 09:13:06 alex Exp $
|
* $Id: conf.c,v 1.29.2.4 2002/11/04 19:18:39 alex Exp $
|
||||||
*
|
*
|
||||||
* conf.h: Konfiguration des ngircd
|
* conf.h: Konfiguration des ngircd
|
||||||
*/
|
*/
|
||||||
@@ -67,7 +67,7 @@ Conf_Test( VOID )
|
|||||||
{
|
{
|
||||||
/* Konfiguration einlesen, ueberpruefen und ausgeben. */
|
/* Konfiguration einlesen, ueberpruefen und ausgeben. */
|
||||||
|
|
||||||
UINT i;
|
INT i;
|
||||||
|
|
||||||
Use_Log = FALSE;
|
Use_Log = FALSE;
|
||||||
Set_Defaults( );
|
Set_Defaults( );
|
||||||
@@ -98,8 +98,8 @@ Conf_Test( VOID )
|
|||||||
printf( "%u", Conf_ListenPorts[i] );
|
printf( "%u", Conf_ListenPorts[i] );
|
||||||
}
|
}
|
||||||
puts( "" );
|
puts( "" );
|
||||||
printf( " ServerUID = %ld\n", (INT32)Conf_UID );
|
printf( " ServerUID = %ld\n", (LONG)Conf_UID );
|
||||||
printf( " ServerGID = %ld\n", (INT32)Conf_GID );
|
printf( " ServerGID = %ld\n", (LONG)Conf_GID );
|
||||||
printf( " PingTimeout = %d\n", Conf_PingTimeout );
|
printf( " PingTimeout = %d\n", Conf_PingTimeout );
|
||||||
printf( " PongTimeout = %d\n", Conf_PongTimeout );
|
printf( " PongTimeout = %d\n", Conf_PongTimeout );
|
||||||
printf( " ConnectRetry = %d\n", Conf_ConnectRetry );
|
printf( " ConnectRetry = %d\n", Conf_ConnectRetry );
|
||||||
@@ -295,7 +295,7 @@ LOCAL VOID
|
|||||||
Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
|
Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
|
||||||
{
|
{
|
||||||
CHAR *ptr;
|
CHAR *ptr;
|
||||||
INT32 port;
|
LONG port;
|
||||||
|
|
||||||
assert( Line > 0 );
|
assert( Line > 0 );
|
||||||
assert( Var != NULL );
|
assert( Var != NULL );
|
||||||
@@ -446,7 +446,7 @@ Handle_OPERATOR( INT Line, CHAR *Var, CHAR *Arg )
|
|||||||
LOCAL VOID
|
LOCAL VOID
|
||||||
Handle_SERVER( INT Line, CHAR *Var, CHAR *Arg )
|
Handle_SERVER( INT Line, CHAR *Var, CHAR *Arg )
|
||||||
{
|
{
|
||||||
INT32 port;
|
LONG port;
|
||||||
|
|
||||||
assert( Line > 0 );
|
assert( Line > 0 );
|
||||||
assert( Var != NULL );
|
assert( Var != NULL );
|
||||||
@@ -539,7 +539,7 @@ Validate_Config( VOID )
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef STRICT_RFC
|
#ifdef STRICT_RFC
|
||||||
if( ! ConfAdminMail[0] )
|
if( ! Conf_ServerAdminMail[0] )
|
||||||
{
|
{
|
||||||
/* Keine Server-Information konfiguriert */
|
/* Keine Server-Information konfiguriert */
|
||||||
Config_Error( LOG_ALERT, "No administrator email address configured in \"%s\" ('AdminEMail')!", NGIRCd_ConfFile );
|
Config_Error( LOG_ALERT, "No administrator email address configured in \"%s\" ('AdminEMail')!", NGIRCd_ConfFile );
|
||||||
@@ -548,7 +548,7 @@ Validate_Config( VOID )
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( ! Conf_ServerAdmin1[0] && ! Conf_ServerAdmin1[0] && ! Conf_ServerAdminMail[0] )
|
if( ! Conf_ServerAdmin1[0] && ! Conf_ServerAdmin2[0] && ! Conf_ServerAdminMail[0] )
|
||||||
{
|
{
|
||||||
/* Keine Server-Information konfiguriert */
|
/* Keine Server-Information konfiguriert */
|
||||||
Log( LOG_WARNING, "No server information configured but required by RFC!" );
|
Log( LOG_WARNING, "No server information configured but required by RFC!" );
|
||||||
@@ -584,7 +584,7 @@ va_dcl
|
|||||||
/* Im "normalen Betrieb" soll der Log-Mechanismus des ngIRCd verwendet
|
/* Im "normalen Betrieb" soll der Log-Mechanismus des ngIRCd verwendet
|
||||||
* werden, beim Testen der Konfiguration jedoch nicht, hier sollen alle
|
* werden, beim Testen der Konfiguration jedoch nicht, hier sollen alle
|
||||||
* Meldungen direkt auf die Konsole ausgegeben werden: */
|
* Meldungen direkt auf die Konsole ausgegeben werden: */
|
||||||
if( Use_Log ) Log( Level, msg );
|
if( Use_Log ) Log( Level, "%s", msg );
|
||||||
else puts( msg );
|
else puts( msg );
|
||||||
} /* Config_Error */
|
} /* Config_Error */
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: conn.c,v 1.72 2002/09/07 22:34:44 alex Exp $
|
* $Id: conn.c,v 1.72.2.4 2002/11/04 19:18:39 alex Exp $
|
||||||
*
|
*
|
||||||
* connect.h: Verwaltung aller Netz-Verbindungen ("connections")
|
* connect.h: Verwaltung aller Netz-Verbindungen ("connections")
|
||||||
*/
|
*/
|
||||||
@@ -235,7 +235,7 @@ Conn_Handler( VOID )
|
|||||||
fd_set read_sockets, write_sockets;
|
fd_set read_sockets, write_sockets;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
time_t start, t;
|
time_t start, t;
|
||||||
INT i;
|
INT i, idx;
|
||||||
|
|
||||||
start = time( NULL );
|
start = time( NULL );
|
||||||
while(( ! NGIRCd_Quit ) && ( ! NGIRCd_Restart ))
|
while(( ! NGIRCd_Quit ) && ( ! NGIRCd_Restart ))
|
||||||
@@ -317,7 +317,7 @@ Conn_Handler( VOID )
|
|||||||
/* Fehler (z.B. Interrupt) */
|
/* Fehler (z.B. Interrupt) */
|
||||||
if( errno != EINTR )
|
if( errno != EINTR )
|
||||||
{
|
{
|
||||||
Log( LOG_EMERG, "select(): %s!", strerror( errno ));
|
Log( LOG_EMERG, "Conn_Handler(): select(): %s!", strerror( errno ));
|
||||||
Log( LOG_ALERT, "%s exiting due to fatal errors!", PACKAGE );
|
Log( LOG_ALERT, "%s exiting due to fatal errors!", PACKAGE );
|
||||||
exit( 1 );
|
exit( 1 );
|
||||||
}
|
}
|
||||||
@@ -327,7 +327,18 @@ Conn_Handler( VOID )
|
|||||||
/* Koennen Daten geschrieben werden? */
|
/* Koennen Daten geschrieben werden? */
|
||||||
for( i = 0; i < Conn_MaxFD + 1; i++ )
|
for( i = 0; i < Conn_MaxFD + 1; i++ )
|
||||||
{
|
{
|
||||||
if( FD_ISSET( i, &write_sockets )) Handle_Write( Socket2Index( i ));
|
if( ! FD_ISSET( i, &write_sockets )) continue;
|
||||||
|
|
||||||
|
/* Es kann geschrieben werden ... */
|
||||||
|
idx = Socket2Index( i );
|
||||||
|
if( idx == NONE ) continue;
|
||||||
|
|
||||||
|
if( ! Handle_Write( idx ))
|
||||||
|
{
|
||||||
|
/* Fehler beim Schreiben! Diesen Socket nun
|
||||||
|
* auch aus dem Read-Set entfernen: */
|
||||||
|
FD_CLR( i, &read_sockets );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Daten zum Lesen vorhanden? */
|
/* Daten zum Lesen vorhanden? */
|
||||||
@@ -359,7 +370,6 @@ va_dcl
|
|||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
assert( Idx >= 0 );
|
assert( Idx >= 0 );
|
||||||
assert( My_Connections[Idx].sock > NONE );
|
|
||||||
assert( Format != NULL );
|
assert( Format != NULL );
|
||||||
|
|
||||||
#ifdef PROTOTYPES
|
#ifdef PROTOTYPES
|
||||||
@@ -393,10 +403,20 @@ Conn_Write( CONN_ID Idx, CHAR *Data, INT Len )
|
|||||||
* der Client disconnectiert und FALSE geliefert. */
|
* der Client disconnectiert und FALSE geliefert. */
|
||||||
|
|
||||||
assert( Idx >= 0 );
|
assert( Idx >= 0 );
|
||||||
assert( My_Connections[Idx].sock > NONE );
|
|
||||||
assert( Data != NULL );
|
assert( Data != NULL );
|
||||||
assert( Len > 0 );
|
assert( Len > 0 );
|
||||||
|
|
||||||
|
/* Ist der entsprechende Socket ueberhaupt noch offen?
|
||||||
|
* In einem "Handler-Durchlauf" kann es passieren, dass
|
||||||
|
* dem nicht mehr so ist, wenn einer von mehreren
|
||||||
|
* Conn_Write()'s fehlgeschlagen ist. In diesem Fall
|
||||||
|
* wird hier einfach ein Fehler geliefert. */
|
||||||
|
if( My_Connections[Idx].sock <= NONE )
|
||||||
|
{
|
||||||
|
Log( LOG_DEBUG, "Skipped write on closed socket (connection %d).", Idx );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* pruefen, ob Daten im Schreibpuffer sind. Wenn ja, zunaechst
|
/* pruefen, ob Daten im Schreibpuffer sind. Wenn ja, zunaechst
|
||||||
* pruefen, ob diese gesendet werden koennen */
|
* pruefen, ob diese gesendet werden koennen */
|
||||||
if( My_Connections[Idx].wdatalen > 0 )
|
if( My_Connections[Idx].wdatalen > 0 )
|
||||||
@@ -447,12 +467,17 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformClient )
|
|||||||
|
|
||||||
if( close( My_Connections[Idx].sock ) != 0 )
|
if( close( My_Connections[Idx].sock ) != 0 )
|
||||||
{
|
{
|
||||||
Log( LOG_ERR, "Error closing connection %d with %s:%d - %s!", Idx, inet_ntoa( My_Connections[Idx].addr.sin_addr ), ntohs( My_Connections[Idx].addr.sin_port), strerror( errno ));
|
Log( LOG_ERR, "Error closing connection %d (socket %d) with %s:%d - %s!", Idx, My_Connections[Idx].sock, inet_ntoa( My_Connections[Idx].addr.sin_addr ), ntohs( My_Connections[Idx].addr.sin_port), strerror( errno ));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log( LOG_INFO, "Connection %d with %s:%d closed.", Idx, inet_ntoa( My_Connections[Idx].addr.sin_addr ), ntohs( My_Connections[Idx].addr.sin_port ));
|
Log( LOG_INFO, "Connection %d (socket %d) with %s:%d closed.", Idx, My_Connections[Idx].sock, inet_ntoa( My_Connections[Idx].addr.sin_addr ), ntohs( My_Connections[Idx].addr.sin_port ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Socket als "ungueltig" markieren */
|
||||||
|
FD_CLR( My_Connections[Idx].sock, &My_Sockets );
|
||||||
|
FD_CLR( My_Connections[Idx].sock, &My_Connects );
|
||||||
|
My_Connections[Idx].sock = NONE;
|
||||||
|
|
||||||
c = Client_GetFromConn( Idx );
|
c = Client_GetFromConn( Idx );
|
||||||
if( c ) Client_Destroy( c, LogMsg, FwdMsg, TRUE );
|
if( c ) Client_Destroy( c, LogMsg, FwdMsg, TRUE );
|
||||||
@@ -466,18 +491,18 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformClient )
|
|||||||
free( My_Connections[Idx].res_stat );
|
free( My_Connections[Idx].res_stat );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bei Server-Verbindungen lasttry-Zeitpunkt so setzen, dass
|
/* Startzeit des naechsten Connect-Versuchs modifizieren? */
|
||||||
* der naechste Verbindungsversuch in RECONNECT_DELAY Sekunden
|
if(( My_Connections[Idx].our_server >= 0 ) && ( Conf_Server[My_Connections[Idx].our_server].lasttry < time( NULL ) - Conf_ConnectRetry ))
|
||||||
* gestartet wird. */
|
|
||||||
if(( My_Connections[Idx].our_server >= 0 ) && ( Conf_Server[My_Connections[Idx].our_server].lasttry < time( NULL )))
|
|
||||||
{
|
{
|
||||||
/* Okay, die Verbindung stand schon "genuegend lange" */
|
/* Okay, die Verbindung stand schon "genuegend lange":
|
||||||
|
* lasttry-Zeitpunkt so setzen, dass der naechste
|
||||||
|
* Verbindungsversuch in RECONNECT_DELAY Sekunden
|
||||||
|
* gestartet wird. */
|
||||||
Conf_Server[My_Connections[Idx].our_server].lasttry = time( NULL ) - Conf_ConnectRetry + RECONNECT_DELAY;
|
Conf_Server[My_Connections[Idx].our_server].lasttry = time( NULL ) - Conf_ConnectRetry + RECONNECT_DELAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
FD_CLR( My_Connections[Idx].sock, &My_Sockets );
|
/* Connection-Struktur loeschen (=freigeben) */
|
||||||
FD_CLR( My_Connections[Idx].sock, &My_Connects );
|
Init_Conn_Struct( Idx );
|
||||||
My_Connections[Idx].sock = NONE;
|
|
||||||
} /* Conn_Close */
|
} /* Conn_Close */
|
||||||
|
|
||||||
|
|
||||||
@@ -548,7 +573,7 @@ Try_Write( CONN_ID Idx )
|
|||||||
/* Fehler! */
|
/* Fehler! */
|
||||||
if( errno != EINTR )
|
if( errno != EINTR )
|
||||||
{
|
{
|
||||||
Log( LOG_ALERT, "select() failed: %s!", strerror( errno ));
|
Log( LOG_ALERT, "Try_Write(): select() failed: %s (con=%d, sock=%d)!", strerror( errno ), Idx, My_Connections[Idx].sock );
|
||||||
Conn_Close( Idx, "Server error!", NULL, FALSE );
|
Conn_Close( Idx, "Server error!", NULL, FALSE );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -589,7 +614,7 @@ Handle_Read( INT Sock )
|
|||||||
/* Ein Client Socket: entweder ein User oder Server */
|
/* Ein Client Socket: entweder ein User oder Server */
|
||||||
|
|
||||||
idx = Socket2Index( Sock );
|
idx = Socket2Index( Sock );
|
||||||
Read_Request( idx );
|
if( idx > NONE ) Read_Request( idx );
|
||||||
}
|
}
|
||||||
} /* Handle_Read */
|
} /* Handle_Read */
|
||||||
|
|
||||||
@@ -601,7 +626,7 @@ Handle_Write( CONN_ID Idx )
|
|||||||
|
|
||||||
INT len, res, err;
|
INT len, res, err;
|
||||||
|
|
||||||
assert( Idx >= 0 );
|
assert( Idx > NONE );
|
||||||
assert( My_Connections[Idx].sock > NONE );
|
assert( My_Connections[Idx].sock > NONE );
|
||||||
|
|
||||||
if( FD_ISSET( My_Connections[Idx].sock, &My_Connects ))
|
if( FD_ISSET( My_Connections[Idx].sock, &My_Connects ))
|
||||||
@@ -637,9 +662,7 @@ Handle_Write( CONN_ID Idx )
|
|||||||
|
|
||||||
/* PASS und SERVER verschicken */
|
/* PASS und SERVER verschicken */
|
||||||
Conn_WriteStr( Idx, "PASS %s %s", Conf_Server[My_Connections[Idx].our_server].pwd, NGIRCd_ProtoID );
|
Conn_WriteStr( Idx, "PASS %s %s", Conf_Server[My_Connections[Idx].our_server].pwd, NGIRCd_ProtoID );
|
||||||
Conn_WriteStr( Idx, "SERVER %s :%s", Conf_ServerName, Conf_ServerInfo );
|
return Conn_WriteStr( Idx, "SERVER %s :%s", Conf_ServerName, Conf_ServerInfo );
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
assert( My_Connections[Idx].wdatalen > 0 );
|
assert( My_Connections[Idx].wdatalen > 0 );
|
||||||
@@ -649,8 +672,8 @@ Handle_Write( CONN_ID Idx )
|
|||||||
if( len < 0 )
|
if( len < 0 )
|
||||||
{
|
{
|
||||||
/* Oops, ein Fehler! */
|
/* Oops, ein Fehler! */
|
||||||
Log( LOG_ERR, "Write error (buffer) on connection %d: %s!", Idx, strerror( errno ));
|
Log( LOG_ERR, "Write error on connection %d (socket %d): %s!", Idx, My_Connections[Idx].sock, strerror( errno ));
|
||||||
Conn_Close( Idx, "Write error (buffer)!", NULL, FALSE );
|
Conn_Close( Idx, "Write error!", NULL, FALSE );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -684,7 +707,7 @@ New_Connection( INT Sock )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Freie Connection-Struktur suschen */
|
/* Freie Connection-Struktur suchen */
|
||||||
for( idx = 0; idx < MAX_CONNECTIONS; idx++ ) if( My_Connections[idx].sock == NONE ) break;
|
for( idx = 0; idx < MAX_CONNECTIONS; idx++ ) if( My_Connections[idx].sock == NONE ) break;
|
||||||
if( idx >= MAX_CONNECTIONS )
|
if( idx >= MAX_CONNECTIONS )
|
||||||
{
|
{
|
||||||
@@ -743,8 +766,14 @@ Socket2Index( INT Sock )
|
|||||||
|
|
||||||
for( idx = 0; idx < MAX_CONNECTIONS; idx++ ) if( My_Connections[idx].sock == Sock ) break;
|
for( idx = 0; idx < MAX_CONNECTIONS; idx++ ) if( My_Connections[idx].sock == Sock ) break;
|
||||||
|
|
||||||
assert( idx < MAX_CONNECTIONS );
|
if( idx >= MAX_CONNECTIONS )
|
||||||
return idx;
|
{
|
||||||
|
/* die Connection wurde vermutlich (wegen eines
|
||||||
|
* Fehlers) bereits wieder abgebaut ... */
|
||||||
|
Log( LOG_DEBUG, "Socket2Index: can't get connection for socket %d!", Sock );
|
||||||
|
return NONE;
|
||||||
|
}
|
||||||
|
else return idx;
|
||||||
} /* Socket2Index */
|
} /* Socket2Index */
|
||||||
|
|
||||||
|
|
||||||
@@ -780,7 +809,7 @@ Read_Request( CONN_ID Idx )
|
|||||||
if( len < 0 )
|
if( len < 0 )
|
||||||
{
|
{
|
||||||
/* Fehler beim Lesen */
|
/* Fehler beim Lesen */
|
||||||
Log( LOG_ERR, "Read error on connection %d: %s!", Idx, strerror( errno ));
|
Log( LOG_ERR, "Read error on connection %d (socket %d): %s!", Idx, My_Connections[Idx].sock, strerror( errno ));
|
||||||
Conn_Close( Idx, "Read error!", "Client closed connection", FALSE );
|
Conn_Close( Idx, "Read error!", "Client closed connection", FALSE );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -802,7 +831,10 @@ Handle_Buffer( CONN_ID Idx )
|
|||||||
{
|
{
|
||||||
/* Daten im Lese-Puffer einer Verbindung verarbeiten. */
|
/* Daten im Lese-Puffer einer Verbindung verarbeiten. */
|
||||||
|
|
||||||
CHAR *ptr, *ptr1, *ptr2;
|
#ifndef STRICT_RFC
|
||||||
|
CHAR *ptr1, *ptr2;
|
||||||
|
#endif
|
||||||
|
CHAR *ptr;
|
||||||
INT len, delta;
|
INT len, delta;
|
||||||
|
|
||||||
/* Eine komplette Anfrage muss mit CR+LF enden, vgl.
|
/* Eine komplette Anfrage muss mit CR+LF enden, vgl.
|
||||||
@@ -1063,6 +1095,8 @@ New_Server( INT Server, CONN_ID Idx )
|
|||||||
FD_SET( new_sock, &My_Sockets );
|
FD_SET( new_sock, &My_Sockets );
|
||||||
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;
|
||||||
|
|
||||||
|
Log( LOG_DEBUG, "Registered new connection %d on socket %d.", Idx, My_Connections[Idx].sock );
|
||||||
} /* New_Server */
|
} /* New_Server */
|
||||||
|
|
||||||
|
|
||||||
@@ -1124,7 +1158,7 @@ Read_Resolver_Result( INT r_fd )
|
|||||||
FD_CLR( r_fd, &Resolver_FDs );
|
FD_CLR( r_fd, &Resolver_FDs );
|
||||||
|
|
||||||
/* Anfrage vom Parent lesen */
|
/* Anfrage vom Parent lesen */
|
||||||
len = read( r_fd, result, HOST_LEN);
|
len = read( r_fd, result, HOST_LEN - 1 );
|
||||||
if( len < 0 )
|
if( len < 0 )
|
||||||
{
|
{
|
||||||
/* Fehler beim Lesen aus der Pipe */
|
/* Fehler beim Lesen aus der Pipe */
|
||||||
@@ -1142,7 +1176,7 @@ Read_Resolver_Result( INT r_fd )
|
|||||||
if( i >= MAX_CONNECTIONS )
|
if( i >= MAX_CONNECTIONS )
|
||||||
{
|
{
|
||||||
/* 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 );
|
||||||
Log( LOG_DEBUG, "Resolver: Got result for unknown connection!?" );
|
Log( LOG_DEBUG, "Resolver: Got result for unknown connection!?" );
|
||||||
return;
|
return;
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: irc-login.c,v 1.21 2002/09/09 03:34:33 alex Exp $
|
* $Id: irc-login.c,v 1.21.2.1 2002/09/22 21:37:06 alex Exp $
|
||||||
*
|
*
|
||||||
* irc-login.c: Anmeldung und Abmeldung im IRC
|
* irc-login.c: Anmeldung und Abmeldung im IRC
|
||||||
*/
|
*/
|
||||||
@@ -441,7 +441,7 @@ Hello_User( CLIENT *Client )
|
|||||||
IRC_WriteStrServers( NULL, "NICK %s 1 %s %s 1 +%s :%s", Client_ID( Client ), Client_User( Client ), Client_Hostname( Client ), Client_Modes( Client ), Client_Info( Client ));
|
IRC_WriteStrServers( NULL, "NICK %s 1 %s %s 1 +%s :%s", Client_ID( Client ), Client_User( Client ), Client_Hostname( Client ), Client_Modes( Client ), Client_Info( Client ));
|
||||||
|
|
||||||
if( ! IRC_WriteStrClient( Client, RPL_WELCOME_MSG, Client_ID( Client ), Client_Mask( Client ))) return FALSE;
|
if( ! IRC_WriteStrClient( Client, RPL_WELCOME_MSG, Client_ID( Client ), Client_Mask( Client ))) return FALSE;
|
||||||
if( ! IRC_WriteStrClient( Client, RPL_YOURHOST_MSG, Client_ID( Client ), Client_ID( Client_ThisServer( )), VERSION, TARGET_CPU, TARGET_CPU, TARGET_OS )) return FALSE;
|
if( ! IRC_WriteStrClient( Client, RPL_YOURHOST_MSG, Client_ID( Client ), Client_ID( Client_ThisServer( )), VERSION, TARGET_CPU, TARGET_VENDOR, TARGET_OS )) return FALSE;
|
||||||
if( ! IRC_WriteStrClient( Client, RPL_CREATED_MSG, Client_ID( Client ), NGIRCd_StartStr )) return FALSE;
|
if( ! IRC_WriteStrClient( Client, RPL_CREATED_MSG, Client_ID( Client ), NGIRCd_StartStr )) return FALSE;
|
||||||
if( ! IRC_WriteStrClient( Client, RPL_MYINFO_MSG, Client_ID( Client ), Client_ID( Client_ThisServer( )), VERSION, USERMODES, CHANMODES )) return FALSE;
|
if( ! IRC_WriteStrClient( Client, RPL_MYINFO_MSG, Client_ID( Client ), Client_ID( Client_ThisServer( )), VERSION, USERMODES, CHANMODES )) return FALSE;
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: irc-server.c,v 1.17 2002/09/07 17:57:31 alex Exp $
|
* $Id: irc-server.c,v 1.17.2.2 2002/10/04 13:12:46 alex Exp $
|
||||||
*
|
*
|
||||||
* irc-server.c: IRC-Befehle fuer Server-Links
|
* irc-server.c: IRC-Befehle fuer Server-Links
|
||||||
*/
|
*/
|
||||||
@@ -188,7 +188,7 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
|
|||||||
if( strlen( str ) > ( LINE_LEN - CLIENT_NICK_LEN - 8 ))
|
if( strlen( str ) > ( LINE_LEN - CLIENT_NICK_LEN - 8 ))
|
||||||
{
|
{
|
||||||
/* Zeile senden */
|
/* Zeile senden */
|
||||||
if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED;
|
if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED;
|
||||||
sprintf( str, "NJOIN %s :", Channel_Name( chan ));
|
sprintf( str, "NJOIN %s :", Channel_Name( chan ));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,7 +199,7 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
|
|||||||
if( str[strlen( str ) - 1] != ':')
|
if( str[strlen( str ) - 1] != ':')
|
||||||
{
|
{
|
||||||
/* Ja; Also senden ... */
|
/* Ja; Also senden ... */
|
||||||
if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED;
|
if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* naechsten Channel suchen */
|
/* naechsten Channel suchen */
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: irc-write.c,v 1.8 2002/09/17 17:11:56 alex Exp $
|
* $Id: irc-write.c,v 1.7.2.3 2002/10/04 13:12:46 alex Exp $
|
||||||
*
|
*
|
||||||
* irc-write.c: IRC-Texte und Befehle ueber Netzwerk versenden
|
* irc-write.c: IRC-Texte und Befehle ueber Netzwerk versenden
|
||||||
*/
|
*/
|
||||||
@@ -62,7 +62,7 @@ va_dcl
|
|||||||
va_end( ap );
|
va_end( ap );
|
||||||
|
|
||||||
/* an den Client selber */
|
/* an den Client selber */
|
||||||
ok = IRC_WriteStrClientPrefix( Client, Client_ThisServer( ), buffer );
|
ok = IRC_WriteStrClientPrefix( Client, Client_ThisServer( ), "%s", buffer );
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
} /* IRC_WriteStrClient */
|
} /* IRC_WriteStrClient */
|
||||||
@@ -128,7 +128,7 @@ va_dcl
|
|||||||
vsnprintf( buffer, 1000, Format, ap );
|
vsnprintf( buffer, 1000, Format, ap );
|
||||||
va_end( ap );
|
va_end( ap );
|
||||||
|
|
||||||
return IRC_WriteStrChannelPrefix( Client, Chan, Client_ThisServer( ), Remote, buffer );
|
return IRC_WriteStrChannelPrefix( Client, Chan, Client_ThisServer( ), Remote, "%s", buffer );
|
||||||
} /* IRC_WriteStrChannel */
|
} /* IRC_WriteStrChannel */
|
||||||
|
|
||||||
|
|
||||||
@@ -233,7 +233,7 @@ va_dcl
|
|||||||
va_end( ap );
|
va_end( ap );
|
||||||
|
|
||||||
/* an den Client selber */
|
/* an den Client selber */
|
||||||
IRC_WriteStrServersPrefix( ExceptOf, Client_ThisServer( ), buffer );
|
IRC_WriteStrServersPrefix( ExceptOf, Client_ThisServer( ), "%s", buffer );
|
||||||
} /* IRC_WriteStrServers */
|
} /* IRC_WriteStrServers */
|
||||||
|
|
||||||
|
|
||||||
@@ -263,7 +263,7 @@ va_dcl
|
|||||||
vsnprintf( buffer, 1000, Format, ap );
|
vsnprintf( buffer, 1000, Format, ap );
|
||||||
va_end( ap );
|
va_end( ap );
|
||||||
|
|
||||||
IRC_WriteStrServersPrefixFlag( ExceptOf, Prefix, '\0', buffer );
|
IRC_WriteStrServersPrefixFlag( ExceptOf, Prefix, '\0', "%s", buffer );
|
||||||
} /* IRC_WriteStrServersPrefix */
|
} /* IRC_WriteStrServersPrefix */
|
||||||
|
|
||||||
|
|
||||||
@@ -301,7 +301,7 @@ va_dcl
|
|||||||
if(( Client_Type( c ) == CLIENT_SERVER ) && ( Client_Conn( c ) > NONE ) && ( c != Client_ThisServer( )) && ( c != ExceptOf ))
|
if(( Client_Type( c ) == CLIENT_SERVER ) && ( Client_Conn( c ) > NONE ) && ( c != Client_ThisServer( )) && ( c != ExceptOf ))
|
||||||
{
|
{
|
||||||
/* Ziel-Server gefunden. Nun noch pruefen, ob Flags stimmen */
|
/* Ziel-Server gefunden. Nun noch pruefen, ob Flags stimmen */
|
||||||
if(( Flag == '\0' ) || ( strchr( Client_Flags( c ), Flag ) != NULL )) IRC_WriteStrClientPrefix( c, Prefix, buffer );
|
if(( Flag == '\0' ) || ( strchr( Client_Flags( c ), Flag ) != NULL )) IRC_WriteStrClientPrefix( c, Prefix, "%s", buffer );
|
||||||
}
|
}
|
||||||
c = Client_Next( c );
|
c = Client_Next( c );
|
||||||
}
|
}
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: irc.c,v 1.95 2002/09/16 09:14:45 alex Exp $
|
* $Id: irc.c,v 1.95.2.3 2002/11/04 19:18:39 alex Exp $
|
||||||
*
|
*
|
||||||
* irc.c: IRC-Befehle
|
* irc.c: IRC-Befehle
|
||||||
*/
|
*/
|
||||||
@@ -109,7 +109,7 @@ IRC_NOTICE( CLIENT *Client, REQUEST *Req )
|
|||||||
assert( Client != NULL );
|
assert( Client != NULL );
|
||||||
assert( Req != NULL );
|
assert( Req != NULL );
|
||||||
|
|
||||||
if(( Client_Type( Client ) != CLIENT_USER ) && ( Client_Type( Client ) != CLIENT_SERVER )) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client ));
|
if(( Client_Type( Client ) != CLIENT_USER ) && ( Client_Type( Client ) != CLIENT_SERVER )) return CONNECTED;
|
||||||
|
|
||||||
/* Falsche Anzahl Parameter? */
|
/* Falsche Anzahl Parameter? */
|
||||||
if( Req->argc != 2 ) return CONNECTED;
|
if( Req->argc != 2 ) return CONNECTED;
|
||||||
@@ -206,7 +206,7 @@ IRC_NAMES( CLIENT *Client, REQUEST *Req )
|
|||||||
if( strlen( rpl ) > ( LINE_LEN - CLIENT_NICK_LEN - 4 ))
|
if( strlen( rpl ) > ( LINE_LEN - CLIENT_NICK_LEN - 4 ))
|
||||||
{
|
{
|
||||||
/* Zeile wird zu lang: senden! */
|
/* Zeile wird zu lang: senden! */
|
||||||
if( ! IRC_WriteStrClient( from, rpl )) return DISCONNECTED;
|
if( ! IRC_WriteStrClient( from, "%s", rpl )) return DISCONNECTED;
|
||||||
sprintf( rpl, RPL_NAMREPLY_MSG, Client_ID( from ), "*", "*" );
|
sprintf( rpl, RPL_NAMREPLY_MSG, Client_ID( from ), "*", "*" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -217,7 +217,7 @@ IRC_NAMES( CLIENT *Client, REQUEST *Req )
|
|||||||
if( rpl[strlen( rpl ) - 1] != ':')
|
if( rpl[strlen( rpl ) - 1] != ':')
|
||||||
{
|
{
|
||||||
/* es wurden User gefunden */
|
/* es wurden User gefunden */
|
||||||
if( ! IRC_WriteStrClient( from, rpl )) return DISCONNECTED;
|
if( ! IRC_WriteStrClient( from, "%s", rpl )) return DISCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
return IRC_WriteStrClient( from, RPL_ENDOFNAMES_MSG, Client_ID( from ), "*" );
|
return IRC_WriteStrClient( from, RPL_ENDOFNAMES_MSG, Client_ID( from ), "*" );
|
||||||
@@ -259,7 +259,7 @@ IRC_ISON( CLIENT *Client, REQUEST *Req )
|
|||||||
}
|
}
|
||||||
if( rpl[strlen( rpl ) - 1] == ' ' ) rpl[strlen( rpl ) - 1] = '\0';
|
if( rpl[strlen( rpl ) - 1] == ' ' ) rpl[strlen( rpl ) - 1] = '\0';
|
||||||
|
|
||||||
return IRC_WriteStrClient( Client, rpl, Client_ID( Client ) );
|
return IRC_WriteStrClient( Client, "%s", rpl, Client_ID( Client ) );
|
||||||
} /* IRC_ISON */
|
} /* IRC_ISON */
|
||||||
|
|
||||||
|
|
||||||
@@ -325,7 +325,7 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
|
|||||||
if( strlen( str ) > ( LINE_LEN - CHANNEL_NAME_LEN - 4 ))
|
if( strlen( str ) > ( LINE_LEN - CHANNEL_NAME_LEN - 4 ))
|
||||||
{
|
{
|
||||||
/* Zeile wird zu lang: senden! */
|
/* Zeile wird zu lang: senden! */
|
||||||
if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED;
|
if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED;
|
||||||
sprintf( str, RPL_WHOISCHANNELS_MSG, Client_ID( from ), Client_ID( c ));
|
sprintf( str, RPL_WHOISCHANNELS_MSG, Client_ID( from ), Client_ID( c ));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,7 +335,7 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
|
|||||||
if( str[strlen( str ) - 1] != ':')
|
if( str[strlen( str ) - 1] != ':')
|
||||||
{
|
{
|
||||||
/* Es sind noch Daten da, die gesendet werden muessen */
|
/* Es sind noch Daten da, die gesendet werden muessen */
|
||||||
if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED;
|
if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IRC-Operator? */
|
/* IRC-Operator? */
|
||||||
@@ -477,7 +477,7 @@ IRC_USERHOST( CLIENT *Client, REQUEST *Req )
|
|||||||
}
|
}
|
||||||
if( rpl[strlen( rpl ) - 1] == ' ' ) rpl[strlen( rpl ) - 1] = '\0';
|
if( rpl[strlen( rpl ) - 1] == ' ' ) rpl[strlen( rpl ) - 1] = '\0';
|
||||||
|
|
||||||
return IRC_WriteStrClient( Client, rpl, Client_ID( Client ) );
|
return IRC_WriteStrClient( Client, "%s", rpl, Client_ID( Client ) );
|
||||||
} /* IRC_USERHOST */
|
} /* IRC_USERHOST */
|
||||||
|
|
||||||
|
|
||||||
@@ -768,7 +768,7 @@ IRC_Send_NAMES( CLIENT *Client, CHANNEL *Chan )
|
|||||||
if( strlen( str ) > ( LINE_LEN - CLIENT_NICK_LEN - 4 ))
|
if( strlen( str ) > ( LINE_LEN - CLIENT_NICK_LEN - 4 ))
|
||||||
{
|
{
|
||||||
/* Zeile wird zu lang: senden! */
|
/* Zeile wird zu lang: senden! */
|
||||||
if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED;
|
if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED;
|
||||||
sprintf( str, RPL_NAMREPLY_MSG, Client_ID( Client ), "=", Channel_Name( Chan ));
|
sprintf( str, RPL_NAMREPLY_MSG, Client_ID( Client ), "=", Channel_Name( Chan ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -779,7 +779,7 @@ IRC_Send_NAMES( CLIENT *Client, CHANNEL *Chan )
|
|||||||
if( str[strlen( str ) - 1] != ':')
|
if( str[strlen( str ) - 1] != ':')
|
||||||
{
|
{
|
||||||
/* Es sind noch Daten da, die gesendet werden muessen */
|
/* Es sind noch Daten da, die gesendet werden muessen */
|
||||||
if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED;
|
if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
@@ -834,7 +834,7 @@ IRC_Send_WHO( CLIENT *Client, CHANNEL *Chan, BOOLEAN OnlyOps )
|
|||||||
GLOBAL BOOLEAN
|
GLOBAL BOOLEAN
|
||||||
IRC_Send_LUSERS( CLIENT *Client )
|
IRC_Send_LUSERS( CLIENT *Client )
|
||||||
{
|
{
|
||||||
INT cnt;
|
LONG cnt;
|
||||||
|
|
||||||
assert( Client != NULL );
|
assert( Client != NULL );
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: lists.c,v 1.8 2002/09/08 17:06:07 alex Exp $
|
* $Id: lists.c,v 1.8.2.2 2002/10/04 13:12:46 alex Exp $
|
||||||
*
|
*
|
||||||
* lists.c: Verwaltung der "IRC-Listen": Ban, Invite, ...
|
* lists.c: Verwaltung der "IRC-Listen": Ban, Invite, ...
|
||||||
*/
|
*/
|
||||||
@@ -317,13 +317,13 @@ GLOBAL CHAR *
|
|||||||
Lists_MakeMask( CHAR *Pattern )
|
Lists_MakeMask( CHAR *Pattern )
|
||||||
{
|
{
|
||||||
/* Hier wird aus einem "beliebigen" Pattern eine gueltige IRC-Mask erzeugt.
|
/* Hier wird aus einem "beliebigen" Pattern eine gueltige IRC-Mask erzeugt.
|
||||||
* Diese ist aber nur bis zum naechsten Aufruf von Lists_MakeMask() gueltig,
|
* Diese ist aber nur bis zum naechsten Aufruf von Lists_MakeMask() gueltig,
|
||||||
* da ein einziger globaler Puffer verwendet wird. ->Umkopieren!*/
|
* da ein einziger globaler Puffer verwendet wird. ->Umkopieren!*/
|
||||||
|
|
||||||
STATIC CHAR TheMask[MASK_LEN];
|
STATIC CHAR TheMask[MASK_LEN];
|
||||||
CHAR *excl, *at;
|
CHAR *excl, *at;
|
||||||
|
|
||||||
assert( Pattern );
|
assert( Pattern != NULL );
|
||||||
|
|
||||||
excl = strchr( Pattern, '!' );
|
excl = strchr( Pattern, '!' );
|
||||||
at = strchr( Pattern, '@' );
|
at = strchr( Pattern, '@' );
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: log.c,v 1.37 2002/09/09 22:55:21 alex Exp $
|
* $Id: log.c,v 1.37.2.3 2002/11/04 19:18:39 alex Exp $
|
||||||
*
|
*
|
||||||
* log.c: Logging-Funktionen
|
* log.c: Logging-Funktionen
|
||||||
*/
|
*/
|
||||||
@@ -96,7 +96,7 @@ Log_InitErrorfile( VOID )
|
|||||||
* landen z.B. alle Ausgaben von assert()-Aufrufen. */
|
* landen z.B. alle Ausgaben von assert()-Aufrufen. */
|
||||||
|
|
||||||
/* Dateiname zusammen bauen */
|
/* Dateiname zusammen bauen */
|
||||||
sprintf( Error_File, "%s/%s-%ld.err", ERROR_DIR, PACKAGE, (INT32)getpid( ));
|
sprintf( Error_File, "%s/%s-%ld.err", ERROR_DIR, PACKAGE, (LONG)getpid( ));
|
||||||
|
|
||||||
/* stderr umlenken */
|
/* stderr umlenken */
|
||||||
fflush( stderr );
|
fflush( stderr );
|
||||||
@@ -185,7 +185,7 @@ va_dcl
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Syslog */
|
/* Syslog */
|
||||||
syslog( Level, msg );
|
syslog( Level, "%s", msg );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: messages.h,v 1.46 2002/09/16 09:23:40 alex Exp $
|
* $Id: messages.h,v 1.46.2.3 2002/11/04 19:27:23 alex Exp $
|
||||||
*
|
*
|
||||||
* irc.h: IRC-Befehle (Header)
|
* irc.h: IRC-Befehle (Header)
|
||||||
*/
|
*/
|
||||||
@@ -20,15 +20,15 @@
|
|||||||
|
|
||||||
|
|
||||||
#define RPL_WELCOME_MSG "001 %s :Welcome to the Internet Relay Network %s"
|
#define RPL_WELCOME_MSG "001 %s :Welcome to the Internet Relay Network %s"
|
||||||
#define RPL_YOURHOST_MSG "002 %s :Your host is %s, running ngircd %s-%s/%s/%s"
|
#define RPL_YOURHOST_MSG "002 %s :Your host is %s, running version ngircd-%s (%s/%s/%s)"
|
||||||
#define RPL_CREATED_MSG "003 %s :This server was started %s"
|
#define RPL_CREATED_MSG "003 %s :This server has been started %s"
|
||||||
#define RPL_MYINFO_MSG "004 %s :%s ngircd-%s %s %s"
|
#define RPL_MYINFO_MSG "004 %s %s ngircd-%s %s %s"
|
||||||
#define RPL_UMODEIS_MSG "211 %s +%s"
|
#define RPL_UMODEIS_MSG "211 %s +%s"
|
||||||
#define RPL_LUSERCLIENT_MSG "251 %s :There are %d users and %d services on %d servers"
|
#define RPL_LUSERCLIENT_MSG "251 %s :There are %ld users and %ld services on %ld servers"
|
||||||
#define RPL_LUSEROP_MSG "252 %s %d :operator(s) online"
|
#define RPL_LUSEROP_MSG "252 %s %ld :operator(s) online"
|
||||||
#define RPL_LUSERUNKNOWN_MSG "253 %s %d :unknown connection(s)"
|
#define RPL_LUSERUNKNOWN_MSG "253 %s %ld :unknown connection(s)"
|
||||||
#define RPL_LUSERCHANNELS_MSG "254 %s %d :channels formed"
|
#define RPL_LUSERCHANNELS_MSG "254 %s %ld :channels formed"
|
||||||
#define RPL_LUSERME_MSG "255 %s :I have %d users, %d services and %d servers"
|
#define RPL_LUSERME_MSG "255 %s :I have %ld users, %ld services and %ld servers"
|
||||||
#define RPL_ADMINME_MSG "256 %s %s :Administrative info"
|
#define RPL_ADMINME_MSG "256 %s %s :Administrative info"
|
||||||
#define RPL_ADMINLOC1_MSG "257 %s :%s"
|
#define RPL_ADMINLOC1_MSG "257 %s :%s"
|
||||||
#define RPL_ADMINLOC2_MSG "258 %s :%s"
|
#define RPL_ADMINLOC2_MSG "258 %s :%s"
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
#define RPL_WHOISIDLE_MSG "317 %s %s %ld :seconds idle"
|
#define RPL_WHOISIDLE_MSG "317 %s %s %ld :seconds idle"
|
||||||
#define RPL_ENDOFWHOIS_MSG "318 %s %s :End of WHOIS list"
|
#define RPL_ENDOFWHOIS_MSG "318 %s %s :End of WHOIS list"
|
||||||
#define RPL_WHOISCHANNELS_MSG "319 %s %s :"
|
#define RPL_WHOISCHANNELS_MSG "319 %s %s :"
|
||||||
#define RPL_LIST_MSG "322 %s %s %d :%s"
|
#define RPL_LIST_MSG "322 %s %s %ld :%s"
|
||||||
#define RPL_LISTEND_MSG "323 %s :End of LIST"
|
#define RPL_LISTEND_MSG "323 %s :End of LIST"
|
||||||
#define RPL_CHANNELMODEIS_MSG "324 %s %s +%s"
|
#define RPL_CHANNELMODEIS_MSG "324 %s %s +%s"
|
||||||
#define RPL_NOTOPIC_MSG "331 %s %s :No topic is set"
|
#define RPL_NOTOPIC_MSG "331 %s %s :No topic is set"
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: ngircd.c,v 1.54 2002/09/07 17:57:17 alex Exp $
|
* $Id: ngircd.c,v 1.54.2.3 2002/11/04 19:18:39 alex Exp $
|
||||||
*
|
*
|
||||||
* ngircd.c: Hier beginnt alles ;-)
|
* ngircd.c: Hier beginnt alles ;-)
|
||||||
*/
|
*/
|
||||||
@@ -58,7 +58,7 @@ GLOBAL int
|
|||||||
main( int argc, const char *argv[] )
|
main( int argc, const char *argv[] )
|
||||||
{
|
{
|
||||||
BOOLEAN ok, configtest = FALSE;
|
BOOLEAN ok, configtest = FALSE;
|
||||||
INT32 pid, n;
|
LONG pid, n;
|
||||||
INT i;
|
INT i;
|
||||||
|
|
||||||
umask( 0077 );
|
umask( 0077 );
|
||||||
@@ -140,7 +140,7 @@ main( int argc, const char *argv[] )
|
|||||||
{
|
{
|
||||||
/* Kurze Option */
|
/* Kurze Option */
|
||||||
|
|
||||||
for( n = 1; n < (INT32)strlen( argv[i] ); n++ )
|
for( n = 1; n < (LONG)strlen( argv[i] ); n++ )
|
||||||
{
|
{
|
||||||
ok = FALSE;
|
ok = FALSE;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
@@ -159,7 +159,7 @@ main( int argc, const char *argv[] )
|
|||||||
NGIRCd_ConfFile[FNAME_LEN - 1] = '\0';
|
NGIRCd_ConfFile[FNAME_LEN - 1] = '\0';
|
||||||
|
|
||||||
/* zum uebernaechsten Parameter */
|
/* zum uebernaechsten Parameter */
|
||||||
i++; n = strlen( argv[i] );
|
i++; n = (LONG)strlen( argv[i] );
|
||||||
ok = TRUE;
|
ok = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -227,7 +227,7 @@ main( int argc, const char *argv[] )
|
|||||||
if( ! NGIRCd_NoDaemon )
|
if( ! NGIRCd_NoDaemon )
|
||||||
{
|
{
|
||||||
/* Daemon im Hintergrund erzeugen */
|
/* Daemon im Hintergrund erzeugen */
|
||||||
pid = (INT32)fork( );
|
pid = (LONG)fork( );
|
||||||
if( pid > 0 )
|
if( pid > 0 )
|
||||||
{
|
{
|
||||||
/* "alter" Prozess */
|
/* "alter" Prozess */
|
||||||
@@ -275,7 +275,7 @@ main( int argc, const char *argv[] )
|
|||||||
if( setuid( Conf_UID ) != 0 ) Log( LOG_ERR, "Can't change User-ID to %u: %s", Conf_UID, strerror( errno ));
|
if( setuid( Conf_UID ) != 0 ) Log( LOG_ERR, "Can't change User-ID to %u: %s", Conf_UID, strerror( errno ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Log( LOG_INFO, "Running as user %ld, group %ld, with PID %ld.", (INT32)getuid( ), (INT32)getgid( ), (INT32)getpid( ));
|
Log( LOG_INFO, "Running as user %ld, group %ld, with PID %ld.", (LONG)getuid( ), (LONG)getgid( ), (LONG)getpid( ));
|
||||||
|
|
||||||
Log_InitErrorfile( );
|
Log_InitErrorfile( );
|
||||||
|
|
||||||
@@ -451,7 +451,7 @@ Initialize_Listen_Ports( VOID )
|
|||||||
/* Ports, auf denen der Server Verbindungen entgegennehmen
|
/* Ports, auf denen der Server Verbindungen entgegennehmen
|
||||||
* soll, initialisieren */
|
* soll, initialisieren */
|
||||||
|
|
||||||
UINT created, i;
|
INT created, i;
|
||||||
|
|
||||||
created = 0;
|
created = 0;
|
||||||
for( i = 0; i < Conf_ListenPorts_Count; i++ )
|
for( i = 0; i < Conf_ListenPorts_Count; i++ )
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: parse.c,v 1.41 2002/09/16 09:20:27 alex Exp $
|
* $Id: parse.c,v 1.41.2.2 2002/10/04 13:12:46 alex Exp $
|
||||||
*
|
*
|
||||||
* parse.c: Parsen der Client-Anfragen
|
* parse.c: Parsen der Client-Anfragen
|
||||||
*/
|
*/
|
||||||
@@ -311,7 +311,7 @@ Handle_Request( CONN_ID Idx, REQUEST *Req )
|
|||||||
else strcat( str, " :" );
|
else strcat( str, " :" );
|
||||||
strcat( str, Req->argv[i] );
|
strcat( str, Req->argv[i] );
|
||||||
}
|
}
|
||||||
return IRC_WriteStrClientPrefix( target, prefix, str );
|
return IRC_WriteStrClientPrefix( target, prefix, "%s", str );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( strcasecmp( Req->command, "PASS" ) == 0 ) return IRC_PASS( client, Req );
|
if( strcasecmp( Req->command, "PASS" ) == 0 ) return IRC_PASS( client, Req );
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: portab.h,v 1.7 2002/06/26 15:43:38 alex Exp $
|
* $Id: portab.h,v 1.7.2.1 2002/11/04 19:18:39 alex Exp $
|
||||||
*
|
*
|
||||||
* portab.h: "Portabilitaets-Definitionen"
|
* portab.h: "Portabilitaets-Definitionen"
|
||||||
*/
|
*/
|
||||||
@@ -56,6 +56,9 @@ typedef void POINTER;
|
|||||||
|
|
||||||
typedef signed int INT;
|
typedef signed int INT;
|
||||||
typedef unsigned int UINT;
|
typedef unsigned int UINT;
|
||||||
|
typedef signed long LONG;
|
||||||
|
typedef unsigned long ULONG;
|
||||||
|
|
||||||
typedef signed char INT8;
|
typedef signed char INT8;
|
||||||
typedef unsigned char UINT8;
|
typedef unsigned char UINT8;
|
||||||
typedef signed short INT16;
|
typedef signed short INT16;
|
||||||
@@ -63,6 +66,7 @@ typedef unsigned short UINT16;
|
|||||||
typedef signed long INT32;
|
typedef signed long INT32;
|
||||||
typedef unsigned long UINT32;
|
typedef unsigned long UINT32;
|
||||||
|
|
||||||
|
typedef double DOUBLE;
|
||||||
typedef float FLOAT;
|
typedef float FLOAT;
|
||||||
|
|
||||||
typedef char CHAR;
|
typedef char CHAR;
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
#
|
#
|
||||||
# $Id: Makefile.am,v 1.3 2002/09/12 02:26:17 alex Exp $
|
# $Id: Makefile.am,v 1.3.2.2 2002/09/20 15:39:55 alex Exp $
|
||||||
#
|
#
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = ../portab/ansi2knr
|
AUTOMAKE_OPTIONS = ../portab/ansi2knr
|
||||||
@@ -17,21 +17,24 @@ AUTOMAKE_OPTIONS = ../portab/ansi2knr
|
|||||||
INCLUDES = -I$(srcdir)/../portab
|
INCLUDES = -I$(srcdir)/../portab
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
|
getpid.sh \
|
||||||
start-server.sh stop-server.sh tests.sh stress-server.sh \
|
start-server.sh stop-server.sh tests.sh stress-server.sh \
|
||||||
connect-test.e channel-test.e mode-test.e \
|
connect-test.e channel-test.e mode-test.e \
|
||||||
stress-A.e stress-B.e check-idle.e \
|
stress-A.e stress-B.e check-idle.e \
|
||||||
ngircd-test.conf
|
ngircd-test.conf
|
||||||
|
|
||||||
clean-local:
|
clean-local:
|
||||||
rm -rf logs tests *-test ngircd-test.log ngircd-test.motd ngircd-TEST procs.tmp
|
rm -rf logs tests *-test ngircd-test.log ngircd-test.motd \
|
||||||
|
ngircd-TEST* procs.tmp
|
||||||
|
|
||||||
maintainer-clean-local:
|
maintainer-clean-local:
|
||||||
rm -f Makefile Makefile.in
|
rm -f Makefile Makefile.in
|
||||||
|
|
||||||
check_SCRIPTS = ngircd-TEST tests.sh
|
check_SCRIPTS = ngircd-TEST-Binary tests.sh
|
||||||
|
|
||||||
ngircd-TEST:
|
ngircd-TEST-Binary:
|
||||||
ln -s ../ngircd/ngircd ngircd-TEST
|
cp ../ngircd/ngircd ngircd-TEST
|
||||||
|
[ -f getpid.sh ] || ln -s $(srcdir)/getpid.sh .
|
||||||
|
|
||||||
connect-test: tests.sh
|
connect-test: tests.sh
|
||||||
ln -s $(srcdir)/tests.sh connect-test
|
ln -s $(srcdir)/tests.sh connect-test
|
||||||
|
28
src/testsuite/getpid.sh
Executable file
28
src/testsuite/getpid.sh
Executable file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# ngIRCd Test Suite
|
||||||
|
# $Id: getpid.sh,v 1.1.2.1 2002/09/20 15:19:55 alex Exp $
|
||||||
|
|
||||||
|
# wurde ein Name uebergeben?
|
||||||
|
[ $# -ne 1 ] && exit 1
|
||||||
|
|
||||||
|
# Flags fuer "ps" ermitteln
|
||||||
|
if [ `uname` = "FreeBSD" ]; then
|
||||||
|
PS_FLAGS=-a; PS_PIDCOL=1
|
||||||
|
else
|
||||||
|
PS_FLAGS=-f; PS_PIDCOL=2
|
||||||
|
ps $PS_FLAGS > /dev/null 2>&1
|
||||||
|
if [ $? -ne 0 ]; then PS_FLAGS=a; PS_PIDCOL=1; fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# PID ermitteln
|
||||||
|
ps $PS_FLAGS > procs.tmp
|
||||||
|
pid=`cat procs.tmp | grep "$1" | awk "{ print \\\$$PS_PIDCOL }" | sort -n | head -n 1`
|
||||||
|
|
||||||
|
# ermittelte PID validieren
|
||||||
|
[ "$pid" -gt 1 ] > /dev/null 2>&1
|
||||||
|
[ $? -ne 0 ] && exit 1
|
||||||
|
|
||||||
|
echo $pid
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
# -eof-
|
@@ -1,10 +1,11 @@
|
|||||||
# $Id: ngircd-test.conf,v 1.2 2002/09/09 21:25:50 alex Exp $
|
# $Id: ngircd-test.conf,v 1.2.2.1 2002/11/04 19:18:39 alex Exp $
|
||||||
|
|
||||||
[Global]
|
[Global]
|
||||||
Name = ngircd.test.server
|
Name = ngircd.test.server
|
||||||
Info = ngIRCd Test-Server
|
Info = ngIRCd Test-Server
|
||||||
Ports = 6789
|
Ports = 6789
|
||||||
MotdFile = ngircd-test.motd
|
MotdFile = ngircd-test.motd
|
||||||
|
AdminEMail = admin@irc.server
|
||||||
|
|
||||||
[Operator]
|
[Operator]
|
||||||
Name = TestOp
|
Name = TestOp
|
||||||
|
@@ -1,22 +1,32 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# ngIRCd Test Suite
|
# ngIRCd Test Suite
|
||||||
# $Id: start-server.sh,v 1.5 2002/09/16 09:53:16 alex Exp $
|
# $Id: start-server.sh,v 1.5.2.4 2002/10/03 16:13:38 alex Exp $
|
||||||
|
|
||||||
|
[ -z "$srcdir" ] && srcdir=`dirname $0`
|
||||||
|
|
||||||
echo " starting server ..."
|
echo " starting server ..."
|
||||||
|
|
||||||
rm -rf logs
|
# alte Logfiles loeschen
|
||||||
|
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!
|
||||||
|
./getpid.sh make > /dev/null 2>&1
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo " error: getpid.sh FAILED!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# MOTD fuer Test-Server erzeugen
|
||||||
echo "This is an ngIRCd Test Server" > ngircd-test.motd
|
echo "This is an ngIRCd Test Server" > ngircd-test.motd
|
||||||
|
|
||||||
|
# Test-Server starten ...
|
||||||
./ngircd-TEST -np -f ${srcdir}/ngircd-test.conf > ngircd-test.log 2>&1 &
|
./ngircd-TEST -np -f ${srcdir}/ngircd-test.conf > ngircd-test.log 2>&1 &
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
PS_FLAGS=a; PS_PIDCOL=1
|
# validieren, dass Server laeuft
|
||||||
ps a > /dev/null 2>&1
|
pid=`./getpid.sh ngircd-TEST`
|
||||||
if [ $? -ne 0 ]; then PS_FLAGS=-f; PS_PIDCOL=2; fi
|
[ -n "$pid" ] && kill -0 $pid > /dev/null 2>&1 || exit 1
|
||||||
|
|
||||||
ps $PS_FLAGS > procs.tmp
|
|
||||||
pid=`cat procs.tmp | grep ngircd-TEST | awk "{ print \\\$$PS_PIDCOL }"`
|
|
||||||
kill -0 $pid > /dev/null 2>&1
|
|
||||||
|
|
||||||
# -eof-
|
# -eof-
|
||||||
|
@@ -1,15 +1,17 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# ngIRCd Test Suite
|
# ngIRCd Test Suite
|
||||||
# $Id: stop-server.sh,v 1.4 2002/09/16 09:53:16 alex Exp $
|
# $Id: stop-server.sh,v 1.4.2.4 2002/10/03 16:13:38 alex Exp $
|
||||||
|
|
||||||
|
[ -z "$srcdir" ] && srcdir=`dirname $0`
|
||||||
|
|
||||||
echo " stopping server ..."
|
echo " stopping server ..."
|
||||||
|
|
||||||
PS_FLAGS=a; PS_PIDCOL=1
|
# Test-Server stoppen ...
|
||||||
ps a > /dev/null 2>&1
|
pid=`./getpid.sh ngircd-TEST`
|
||||||
if [ $? -ne 0 ]; then PS_FLAGS=-f; PS_PIDCOL=2; fi
|
[ -n "$pid" ] && kill $pid > /dev/null 2>&1 || exit 1
|
||||||
|
sleep 1
|
||||||
|
|
||||||
ps $PS_FLAGS > procs.tmp
|
# jetzt duerfte der Prozess nicht mehr laufen
|
||||||
pid=`cat procs.tmp | grep ngircd-TEST | awk "{ print \\\$$PS_PIDCOL }"`
|
kill -0 $pid > /dev/null 2>&1 && exit 1 || exit 0
|
||||||
kill $pid > /dev/null 2>&1
|
|
||||||
|
|
||||||
# -eof-
|
# -eof-
|
||||||
|
@@ -1,9 +1,10 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# ngIRCd Test Suite
|
# ngIRCd Test Suite
|
||||||
# $Id: stress-server.sh,v 1.4 2002/09/16 09:54:17 alex Exp $
|
# $Id: stress-server.sh,v 1.4.2.2 2002/10/03 16:13:38 alex Exp $
|
||||||
|
|
||||||
if [ `uname` = "Darwin" -o `uname` = "IRIX" -o `uname` = "IRIX64" ]; then CLIENTS=5
|
[ -z "$srcdir" ] && srcdir=`dirname $0`
|
||||||
else CLIENTS=50; fi
|
|
||||||
|
[ $1 -gt 0 ] 2> /dev/null && CLIENTS=$1 || CLIENTS=5
|
||||||
|
|
||||||
name=`basename $0`
|
name=`basename $0`
|
||||||
test=`echo ${name} | cut -d '.' -f 1`
|
test=`echo ${name} | cut -d '.' -f 1`
|
||||||
|
Reference in New Issue
Block a user