1
0
mirror of https://github.com/osmarks/ngircd.git synced 2025-10-17 23:57:39 +00:00

Compare commits

..

29 Commits

Author SHA1 Message Date
Alexander Barton
b74699b074 - Dokumentation aktualisiert. 2002-11-29 11:42:24 +00:00
Alexander Barton
35054b1f64 - beim Schliessen eines Socket wird versucht, alle Daten zu schreiben [HEAD]. 2002-11-29 11:35:08 +00:00
Alexander Barton
f68369d821 - Prefix-Fehler werden besser protokolliert [aus HEAD]. 2002-11-29 10:59:51 +00:00
Alexander Barton
d53d18833d - Server versendet keine doppelten SQUIT's mehr [aus HEAD]. 2002-11-29 10:58:49 +00:00
Alexander Barton
a02c7a5f47 - Version auf 0.5.x-CVS geaendert. 2002-11-29 10:53:44 +00:00
Alexander Barton
14216308a0 - Versionsnummer auf 0.5.4 angehoben. 2002-11-24 15:33:26 +00:00
Alexander Barton
7a449bad3c - Dokumentation aktualisiert. 2002-11-24 15:33:14 +00:00
Alexander Barton
e0941f1a17 - Fehler-Handling von connect() gefixed (z.B. fuer A/UX relevant). Aus HEAD. 2002-11-24 15:32:14 +00:00
Alexander Barton
6cdc8f7802 - Backport aus HEAD: UID und GID kann nun auch textuell angegeben werden. 2002-11-24 15:25:25 +00:00
Alexander Barton
266b68b873 - volle Lesebuffer und Timeouts behandelt Conn_Handle() nun besser.
- Handle_Buffer() liefert nun ein Ergebnis. (beides aus HEAD)
2002-11-24 15:10:09 +00:00
Alexander Barton
34d7f4162d - Dokumentation aktualisiert (Backports aus HEAD). 2002-11-23 16:21:02 +00:00
Alexander Barton
6eab6d9514 - select() in Try_Write() hat falschen (keinen!) Timeout verwendet;
- der Timeout fuer das select() in Conn_Handler() ist nun TIME_RES (=2).
2002-11-23 16:20:48 +00:00
Alexander Barton
2230a6c96a - neue Konstante TIME_RES: "Zeitaufloesung" des Servers (aus HEAD). 2002-11-23 16:20:25 +00:00
Alexander Barton
b4afaf9c52 - Test-Suite an korrigiertest RPL_UMODEIS angepasst. 2002-11-22 23:46:09 +00:00
Alexander Barton
8e9a84a902 - Dokumentation aktualisiert. 2002-11-22 23:43:48 +00:00
Alexander Barton
0a90f59030 - RPL_UMODEIS ist Code 221, nicht 211 ... *argl* 2002-11-22 22:55:05 +00:00
Alexander Barton
ad252b5c4c - Dokumentation aktualisiert. 2002-11-20 15:53:32 +00:00
Alexander Barton
b0eb4b0019 - angenommene Socketes werden nun korrekt auf "non-blocking" gestellt;
- beim Senden und Empfangen wird EAGAIN ("Blockierung") nun abgefangen.
2002-11-20 15:52:40 +00:00
Alexander Barton
92a9e0d34f - Versionsnummer auf 0.5.x-CVS geaendert. 2002-11-20 11:17:41 +00:00
Alexander Barton
ed4417c1a0 - Dokumentation aktualisiert. 2002-11-20 11:15:33 +00:00
Alexander Barton
1e66da4e50 - bessere Fehler-Ausgaben bei Prefix-Fehlern. 2002-11-20 11:11:19 +00:00
Alexander Barton
6e55ea7298 - corrected a permission problem (Sean Reifschneider). 2002-11-18 14:11:24 +00:00
Alexander Barton
bb180adb49 - Versionsnummer auf 0.5.3 angehoben. 2002-11-08 21:17:17 +00:00
Alexander Barton
e2c896cb7e - Dokumentation aktualisiert. 2002-11-08 21:17:03 +00:00
Alexander Barton
2c7b276cc5 - Dokumentation aktualisiert. 2002-11-04 20:03:38 +00:00
Alexander Barton
4decf352fa - Versionsnummer auf 0.5.3-pre1 angehoben. 2002-11-04 19:34:28 +00:00
Alexander Barton
19c2e79b72 - Code-Formatierung korrigiert: da waren Tabs wo keine hin gehoerten. 2002-11-04 19:27:23 +00:00
Alexander Barton
49d9585242 - "back-ports" aus CVS-HEAD fuer Version 0.5.3 2002-11-04 19:18:39 +00:00
Alexander Barton
9487976620 - Versionsnummer auf 0.5.3-pre1 angehoben. 2002-11-04 19:17:52 +00:00
19 changed files with 255 additions and 135 deletions

View File

@@ -10,6 +10,42 @@
-- ChangeLog / Aenderungen --
ngIRCd 0.5.x-CVS
- Prefix-Fehler werden besser protokolliert (mit verursachendem Befehl).
- SQUIT wird nicht mehr doppelt an andere Server weitergeleitet.
- Der Server versucht nun vor dem Schliessen einer Verbindung Daten, die
noch im Schreibpuffer stehen, zu senden.
ngIRCd 0.5.4, 24.11.2002
- Fehler-Handling von connect() gefixed: der Server kann sich nun auch
unter A/UX wieder zu anderen verbinden.
- in den Konfigurationsvariablen ServerUID und ServerGID kann nun nicht
nur die numerische ID, sondern auch der Name des Users bzw. der Gruppe
verwendet werden. Beim Start des Daemons wird nun beides angezeigt.
- Besseres Logging von Prefix-Fehlern.
- angenommene Sockets werden nun korrekt auf "non-blocking" konfiguriert,
beim Senden und Empfangen werden Blockierungen besser abgefangen.
- RPL_UMODEIS hat Code 221, nicht 211 ... *argl*
- select() in Try_Write() hat falschen (keinen!) Timeout verwendet;
die "Zeit-Aufloesung" des Servers sind zudem nun 2 Sekunden (TIME_RES).
Insgesamt sollte die Reaktionszeit des Server nun besser sein.
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.
@@ -284,4 +320,4 @@ ngIRCd 0.0.1, 31.12.2001
--
$Id: ChangeLog,v 1.87.2.10 2002/10/04 12:43:53 alex Exp $
$Id: ChangeLog,v 1.87.2.18 2002/11/29 11:42:24 alex Exp $

View File

@@ -9,7 +9,7 @@
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
#
# $Id: configure.in,v 1.58.2.6 2002/10/04 12:47:14 alex Exp $
# $Id: configure.in,v 1.58.2.11 2002/11/29 10:53:44 alex Exp $
#
# -- Initialisierung --
@@ -18,7 +18,7 @@ AC_INIT
AC_PREREQ(2.50)
AC_CANONICAL_TARGET
AC_CONFIG_SRCDIR(src/config.h.in)
AM_INIT_AUTOMAKE(ngircd,0.5.2)
AM_INIT_AUTOMAKE(ngircd,0.5.x-CVS)
AM_CONFIG_HEADER(src/config.h)
# -- Templates fuer config.h --

View File

@@ -1,5 +1,5 @@
%define name ngircd
%define version 0.5.2
%define version 0.5.x-CVS
%define release 1
%define prefix %{_prefix}
@@ -51,4 +51,4 @@ make
%doc AUTHORS COPYING ChangeLog INSTALL NEWS README
%config(noreplace) /etc
%{_prefix}/sbin
%attr(644,root,root) %{_prefix}/share/man/
%{_prefix}/share/man/

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* 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
*/
@@ -249,11 +249,11 @@ Channel_Quit( CLIENT *Client, CHAR *Reason )
} /* Channel_Quit */
GLOBAL INT
GLOBAL LONG
Channel_Count( VOID )
{
CHANNEL *c;
INT count;
LONG count;
count = 0;
c = My_Channels;
@@ -266,11 +266,11 @@ Channel_Count( VOID )
} /* Channel_Count */
GLOBAL INT
GLOBAL LONG
Channel_MemberCount( CHANNEL *Chan )
{
CL2CHAN *cl2chan;
INT count;
LONG count;
assert( Chan != NULL );

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* 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)
*/
@@ -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 INT Channel_Count PARAMS((VOID ));
GLOBAL INT Channel_MemberCount PARAMS((CHANNEL *Chan ));
GLOBAL LONG Channel_Count PARAMS((VOID ));
GLOBAL LONG Channel_MemberCount PARAMS((CHANNEL *Chan ));
GLOBAL CHAR *Channel_Name PARAMS((CHANNEL *Chan ));
GLOBAL CHAR *Channel_Modes PARAMS((CHANNEL *Chan ));

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: client.c,v 1.60.2.1 2002/10/04 12:40:58 alex Exp $
* $Id: client.c,v 1.60.2.2 2002/11/04 19:18:39 alex Exp $
*
* client.c: Management aller Clients
*
@@ -60,8 +60,8 @@ LOCAL CLIENT *This_Server, *My_Clients;
LOCAL CHAR GetID_Buffer[GETID_LEN];
LOCAL INT Count PARAMS(( CLIENT_TYPE Type ));
LOCAL INT MyCount PARAMS(( CLIENT_TYPE Type ));
LOCAL LONG Count PARAMS(( CLIENT_TYPE Type ));
LOCAL LONG MyCount PARAMS(( CLIENT_TYPE Type ));
LOCAL CLIENT *New_Client_Struct PARAMS(( VOID ));
LOCAL VOID Generate_MyToken PARAMS(( CLIENT *Client ));
@@ -840,46 +840,46 @@ Client_Next( CLIENT *c )
} /* Client_Next */
GLOBAL INT
GLOBAL LONG
Client_UserCount( VOID )
{
return Count( CLIENT_USER );
} /* Client_UserCount */
GLOBAL INT
GLOBAL LONG
Client_ServiceCount( VOID )
{
return Count( CLIENT_SERVICE );;
} /* Client_ServiceCount */
GLOBAL INT
GLOBAL LONG
Client_ServerCount( VOID )
{
return Count( CLIENT_SERVER );
} /* Client_ServerCount */
GLOBAL INT
GLOBAL LONG
Client_MyUserCount( VOID )
{
return MyCount( CLIENT_USER );
} /* Client_MyUserCount */
GLOBAL INT
GLOBAL LONG
Client_MyServiceCount( VOID )
{
return MyCount( CLIENT_SERVICE );
} /* Client_MyServiceCount */
GLOBAL INT
GLOBAL LONG
Client_MyServerCount( VOID )
{
CLIENT *c;
INT cnt;
LONG cnt;
cnt = 0;
c = My_Clients;
@@ -892,11 +892,11 @@ Client_MyServerCount( VOID )
} /* Client_MyServerCount */
GLOBAL INT
GLOBAL LONG
Client_OperCount( VOID )
{
CLIENT *c;
INT cnt;
LONG cnt;
cnt = 0;
c = My_Clients;
@@ -909,11 +909,11 @@ Client_OperCount( VOID )
} /* Client_OperCount */
GLOBAL INT
GLOBAL LONG
Client_UnknownCount( VOID )
{
CLIENT *c;
INT cnt;
LONG cnt;
cnt = 0;
c = My_Clients;
@@ -953,11 +953,11 @@ Client_IsValidNick( CHAR *Nick )
} /* Client_IsValidNick */
LOCAL INT
LOCAL LONG
Count( CLIENT_TYPE Type )
{
CLIENT *c;
INT cnt;
LONG cnt;
cnt = 0;
c = My_Clients;
@@ -970,11 +970,11 @@ Count( CLIENT_TYPE Type )
} /* Count */
LOCAL INT
LOCAL LONG
MyCount( CLIENT_TYPE Type )
{
CLIENT *c;
INT cnt;
LONG cnt;
cnt = 0;
c = My_Clients;

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* 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)
*/
@@ -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_CheckID PARAMS((CLIENT *Client, CHAR *ID ));
GLOBAL INT Client_UserCount PARAMS((VOID ));
GLOBAL INT Client_ServiceCount PARAMS((VOID ));
GLOBAL INT Client_ServerCount PARAMS((VOID ));
GLOBAL INT Client_OperCount PARAMS((VOID ));
GLOBAL INT Client_UnknownCount PARAMS((VOID ));
GLOBAL INT Client_MyUserCount PARAMS((VOID ));
GLOBAL INT Client_MyServiceCount PARAMS((VOID ));
GLOBAL INT Client_MyServerCount PARAMS((VOID ));
GLOBAL LONG Client_UserCount PARAMS((VOID ));
GLOBAL LONG Client_ServiceCount PARAMS((VOID ));
GLOBAL LONG Client_ServerCount PARAMS((VOID ));
GLOBAL LONG Client_OperCount PARAMS((VOID ));
GLOBAL LONG Client_UnknownCount PARAMS((VOID ));
GLOBAL LONG Client_MyUserCount PARAMS((VOID ));
GLOBAL LONG Client_MyServiceCount PARAMS((VOID ));
GLOBAL LONG Client_MyServerCount PARAMS((VOID ));
GLOBAL BOOLEAN Client_IsValidNick PARAMS((CHAR *Nick ));

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: conf.c,v 1.29.2.3 2002/10/04 13:12:46 alex Exp $
* $Id: conf.c,v 1.29.2.5 2002/11/24 15:25:25 alex Exp $
*
* conf.h: Konfiguration des ngircd
*/
@@ -25,6 +25,9 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <sys/types.h>
#include "ngircd.h"
#include "conn.h"
@@ -67,6 +70,8 @@ Conf_Test( VOID )
{
/* Konfiguration einlesen, ueberpruefen und ausgeben. */
struct passwd *pwd;
struct group *grp;
INT i;
Use_Log = FALSE;
@@ -91,15 +96,19 @@ Conf_Test( VOID )
printf( " AdminInfo2 = %s\n", Conf_ServerAdmin2 );
printf( " AdminEMail = %s\n", Conf_ServerAdminMail );
printf( " MotdFile = %s\n", Conf_MotdFile );
printf( " ListenPorts = " );
printf( " Ports = " );
for( i = 0; i < Conf_ListenPorts_Count; i++ )
{
if( i != 0 ) printf( ", " );
printf( "%u", Conf_ListenPorts[i] );
}
puts( "" );
printf( " ServerUID = %ld\n", (INT32)Conf_UID );
printf( " ServerGID = %ld\n", (INT32)Conf_GID );
pwd = getpwuid( Conf_UID );
if( pwd ) printf( " ServerUID = %s\n", pwd->pw_name );
else printf( " ServerUID = %ld\n", (LONG)Conf_UID );
grp = getgrgid( Conf_GID );
if( grp ) printf( " ServerGID = %s\n", grp->gr_name );
else printf( " ServerGID = %ld\n", (LONG)Conf_GID );
printf( " PingTimeout = %d\n", Conf_PingTimeout );
printf( " PongTimeout = %d\n", Conf_PongTimeout );
printf( " ConnectRetry = %d\n", Conf_ConnectRetry );
@@ -294,8 +303,10 @@ Read_Config( VOID )
LOCAL VOID
Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
{
struct passwd *pwd;
struct group *grp;
CHAR *ptr;
INT32 port;
LONG port;
assert( Line > 0 );
assert( Var != NULL );
@@ -372,13 +383,17 @@ Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
if( strcasecmp( Var, "ServerUID" ) == 0 )
{
/* UID, mit der der Daemon laufen soll */
Conf_UID = (UINT)atoi( Arg );
pwd = getpwnam( Arg );
if( pwd ) Conf_UID = pwd->pw_uid;
else Conf_UID = (UINT)atoi( Arg );
return;
}
if( strcasecmp( Var, "ServerGID" ) == 0 )
{
/* GID, mit der der Daemon laufen soll */
Conf_GID = (UINT)atoi( Arg );
grp = getgrnam( Arg );
if( grp ) Conf_GID = grp->gr_gid;
else Conf_GID = (UINT)atoi( Arg );
return;
}
if( strcasecmp( Var, "PingTimeout" ) == 0 )
@@ -446,7 +461,7 @@ Handle_OPERATOR( INT Line, CHAR *Var, CHAR *Arg )
LOCAL VOID
Handle_SERVER( INT Line, CHAR *Var, CHAR *Arg )
{
INT32 port;
LONG port;
assert( Line > 0 );
assert( Var != NULL );
@@ -539,7 +554,7 @@ Validate_Config( VOID )
}
#ifdef STRICT_RFC
if( ! ConfAdminMail[0] )
if( ! Conf_ServerAdminMail[0] )
{
/* Keine Server-Information konfiguriert */
Config_Error( LOG_ALERT, "No administrator email address configured in \"%s\" ('AdminEMail')!", NGIRCd_ConfFile );

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: conn.c,v 1.72.2.3 2002/10/04 13:12:46 alex Exp $
* $Id: conn.c,v 1.72.2.9 2002/11/29 11:35:08 alex Exp $
*
* connect.h: Verwaltung aller Netz-Verbindungen ("connections")
*/
@@ -84,7 +84,7 @@ LOCAL VOID New_Connection PARAMS(( INT Sock ));
LOCAL CONN_ID Socket2Index PARAMS(( INT Sock ));
LOCAL VOID Read_Request PARAMS(( CONN_ID Idx ));
LOCAL BOOLEAN Try_Write PARAMS(( CONN_ID Idx ));
LOCAL VOID Handle_Buffer PARAMS(( CONN_ID Idx ));
LOCAL BOOLEAN Handle_Buffer PARAMS(( CONN_ID Idx ));
LOCAL VOID Check_Connections PARAMS(( VOID ));
LOCAL VOID Check_Servers PARAMS(( VOID ));
LOCAL VOID Init_Conn_Struct PARAMS(( INT Idx ));
@@ -235,11 +235,14 @@ Conn_Handler( VOID )
fd_set read_sockets, write_sockets;
struct timeval tv;
time_t start, t;
INT i;
INT i, idx;
BOOLEAN timeout;
start = time( NULL );
while(( ! NGIRCd_Quit ) && ( ! NGIRCd_Restart ))
{
timeout = TRUE;
Check_Servers( );
Check_Connections( );
@@ -250,7 +253,7 @@ Conn_Handler( VOID )
if(( My_Connections[i].sock > NONE ) && ( My_Connections[i].rdatalen > 0 ))
{
/* Kann aus dem Buffer noch ein Befehl extrahiert werden? */
Handle_Buffer( i );
if( Handle_Buffer( i )) timeout = FALSE;
}
}
@@ -302,8 +305,9 @@ Conn_Handler( VOID )
}
/* Timeout initialisieren */
tv.tv_sec = 1;
tv.tv_usec = 0;
if( timeout ) tv.tv_sec = TIME_RES;
else tv.tv_sec = 0;
/* Auf Aktivitaet warten */
i = select( Conn_MaxFD + 1, &read_sockets, &write_sockets, NULL, &tv );
@@ -317,7 +321,7 @@ Conn_Handler( VOID )
/* Fehler (z.B. Interrupt) */
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 );
exit( 1 );
}
@@ -327,7 +331,18 @@ Conn_Handler( VOID )
/* Koennen Daten geschrieben werden? */
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? */
@@ -454,14 +469,23 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformClient )
if( My_Connections[Idx].sock == NONE ) return;
}
/* zunaechst versuchen, noch im Schreibpuffer vorhandene
* Daten auf den Socket zu schreiben ... */
Try_Write( Idx );
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
{
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 );
if( c ) Client_Destroy( c, LogMsg, FwdMsg, TRUE );
@@ -475,18 +499,18 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformClient )
free( My_Connections[Idx].res_stat );
}
/* Bei Server-Verbindungen lasttry-Zeitpunkt so setzen, dass
* der naechste Verbindungsversuch in RECONNECT_DELAY Sekunden
* gestartet wird. */
if(( My_Connections[Idx].our_server >= 0 ) && ( Conf_Server[My_Connections[Idx].our_server].lasttry < time( NULL )))
/* Startzeit des naechsten Connect-Versuchs modifizieren? */
if(( My_Connections[Idx].our_server >= 0 ) && ( Conf_Server[My_Connections[Idx].our_server].lasttry < time( NULL ) - Conf_ConnectRetry ))
{
/* 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;
}
FD_CLR( My_Connections[Idx].sock, &My_Sockets );
FD_CLR( My_Connections[Idx].sock, &My_Connects );
My_Connections[Idx].sock = NONE;
/* Connection-Struktur loeschen (=freigeben) */
Init_Conn_Struct( Idx );
} /* Conn_Close */
@@ -541,23 +565,32 @@ Conn_SetPenalty( CONN_ID Idx, time_t Seconds )
LOCAL BOOLEAN
Try_Write( CONN_ID Idx )
{
/* Versuchen, Daten aus dem Schreib-Puffer in den
* Socket zu schreiben. */
/* Versuchen, Daten aus dem Schreib-Puffer in den Socket zu
* schreiben. TRUE wird geliefert, wenn entweder keine Daten
* zum Versenden vorhanden sind oder erfolgreich bearbeitet
* werden konnten. Im Fehlerfall wird FALSE geliefert und
* die Verbindung geschlossen. */
fd_set write_socket;
struct timeval tv;
assert( Idx >= 0 );
assert( My_Connections[Idx].sock > NONE );
assert( My_Connections[Idx].wdatalen > 0 );
/* sind ueberhaupt Daten vorhanden? */
if( ! My_Connections[Idx].wdatalen > 0 ) return TRUE;
/* Timeout initialisieren: 0 Sekunden, also nicht blockieren */
tv.tv_sec = 0; tv.tv_usec = 0;
FD_ZERO( &write_socket );
FD_SET( My_Connections[Idx].sock, &write_socket );
if( select( My_Connections[Idx].sock + 1, NULL, &write_socket, NULL, 0 ) == -1 )
if( select( My_Connections[Idx].sock + 1, NULL, &write_socket, NULL, &tv ) == -1 )
{
/* Fehler! */
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 );
return FALSE;
}
@@ -598,7 +631,7 @@ Handle_Read( INT Sock )
/* Ein Client Socket: entweder ein User oder Server */
idx = Socket2Index( Sock );
Read_Request( idx );
if( idx > NONE ) Read_Request( idx );
}
} /* Handle_Read */
@@ -610,7 +643,7 @@ Handle_Write( CONN_ID Idx )
INT len, res, err;
assert( Idx >= 0 );
assert( Idx > NONE );
assert( My_Connections[Idx].sock > NONE );
if( FD_ISSET( My_Connections[Idx].sock, &My_Connects ))
@@ -646,9 +679,7 @@ Handle_Write( CONN_ID Idx )
/* PASS und SERVER verschicken */
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 TRUE;
return Conn_WriteStr( Idx, "SERVER %s :%s", Conf_ServerName, Conf_ServerInfo );
}
assert( My_Connections[Idx].wdatalen > 0 );
@@ -657,9 +688,12 @@ Handle_Write( CONN_ID Idx )
len = send( My_Connections[Idx].sock, My_Connections[Idx].wbuf, My_Connections[Idx].wdatalen, 0 );
if( len < 0 )
{
/* Operation haette Socket "nur" blockiert ... */
if( errno == EAGAIN ) return TRUE;
/* Oops, ein Fehler! */
Log( LOG_ERR, "Write error (buffer) on connection %d: %s!", Idx, strerror( errno ));
Conn_Close( Idx, "Write error (buffer)!", NULL, FALSE );
Log( LOG_ERR, "Write error on connection %d (socket %d): %s!", Idx, My_Connections[Idx].sock, strerror( errno ));
Conn_Close( Idx, "Write error!", NULL, FALSE );
return FALSE;
}
@@ -685,6 +719,7 @@ New_Connection( INT Sock )
assert( Sock >= 0 );
/* Connection auf Listen-Socket annehmen */
new_sock_len = sizeof( new_addr );
new_sock = accept( Sock, (struct sockaddr *)&new_addr, (socklen_t *)&new_sock_len );
if( new_sock < 0 )
@@ -693,7 +728,10 @@ New_Connection( INT Sock )
return;
}
/* Freie Connection-Struktur suschen */
/* Socket initialisieren */
Init_Socket( new_sock );
/* Freie Connection-Struktur suchen */
for( idx = 0; idx < MAX_CONNECTIONS; idx++ ) if( My_Connections[idx].sock == NONE ) break;
if( idx >= MAX_CONNECTIONS )
{
@@ -752,8 +790,14 @@ Socket2Index( INT Sock )
for( idx = 0; idx < MAX_CONNECTIONS; idx++ ) if( My_Connections[idx].sock == Sock ) break;
assert( idx < MAX_CONNECTIONS );
return idx;
if( idx >= MAX_CONNECTIONS )
{
/* 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 */
@@ -788,8 +832,11 @@ Read_Request( CONN_ID Idx )
if( len < 0 )
{
/* Operation haette Socket "nur" blockiert ... */
if( errno == EAGAIN ) return;
/* 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 );
return;
}
@@ -806,13 +853,19 @@ Read_Request( CONN_ID Idx )
} /* Read_Request */
LOCAL VOID
LOCAL BOOLEAN
Handle_Buffer( CONN_ID Idx )
{
/* Daten im Lese-Puffer einer Verbindung verarbeiten. */
/* Daten im Lese-Puffer einer Verbindung verarbeiten.
* Wurde ein Request verarbeitet, so wird TRUE geliefert,
* ansonsten FALSE (auch bei Fehlern). */
CHAR *ptr, *ptr1, *ptr2;
#ifndef STRICT_RFC
CHAR *ptr1, *ptr2;
#endif
CHAR *ptr;
INT len, delta;
BOOLEAN action;
/* Eine komplette Anfrage muss mit CR+LF enden, vgl.
* RFC 2812. Haben wir eine? */
@@ -833,6 +886,7 @@ Handle_Buffer( CONN_ID Idx )
}
#endif
action = FALSE;
if( ptr )
{
/* Ende der Anfrage wurde gefunden */
@@ -841,23 +895,26 @@ Handle_Buffer( CONN_ID Idx )
if( len > ( COMMAND_LEN - 1 ))
{
/* Eine Anfrage darf(!) nicht laenger als 512 Zeichen
* (incl. CR+LF!) werden; vgl. RFC 2812. Wenn soetwas
* empfangen wird, wird der Client disconnectiert. */
* (incl. CR+LF!) werden; vgl. RFC 2812. Wenn soetwas
* empfangen wird, wird der Client disconnectiert. */
Log( LOG_ERR, "Request too long (connection %d): %d bytes (max. %d expected)!", Idx, My_Connections[Idx].rdatalen, COMMAND_LEN - 1 );
Conn_Close( Idx, NULL, "Request too long", TRUE );
return;
return FALSE;
}
if( len > delta )
{
/* Es wurde ein Request gelesen */
if( ! Parse_Request( Idx, My_Connections[Idx].rbuf )) return;
if( ! Parse_Request( Idx, My_Connections[Idx].rbuf )) return FALSE;
else action = TRUE;
}
/* Puffer anpassen */
My_Connections[Idx].rdatalen -= len;
memmove( My_Connections[Idx].rbuf, My_Connections[Idx].rbuf + len, My_Connections[Idx].rdatalen );
}
return action;
} /* Handle_Buffer */
@@ -995,7 +1052,7 @@ New_Server( INT Server, CONN_ID Idx )
struct sockaddr_in new_addr;
struct in_addr inaddr;
INT new_sock;
INT res, new_sock;
CLIENT *c;
assert( Server >= 0 );
@@ -1041,13 +1098,12 @@ New_Server( INT Server, CONN_ID Idx )
if( ! Init_Socket( new_sock )) return;
connect( new_sock, (struct sockaddr *)&new_addr, sizeof( new_addr ));
if( errno != EINPROGRESS )
res = connect( new_sock, (struct sockaddr *)&new_addr, sizeof( new_addr ));
if(( res != 0 ) && ( errno != EINPROGRESS ))
{
Log( LOG_CRIT, "Can't connect socket: %s!", strerror( errno ));
close( new_sock );
Init_Conn_Struct( Idx );
Log( LOG_CRIT, "Can't connect socket: %s!", strerror( errno ));
return;
}
@@ -1072,6 +1128,8 @@ New_Server( INT Server, CONN_ID Idx )
FD_SET( new_sock, &My_Sockets );
FD_SET( new_sock, &My_Connects );
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 */
@@ -1151,7 +1209,7 @@ Read_Resolver_Result( INT r_fd )
if( i >= MAX_CONNECTIONS )
{
/* Opsa! Keine passende Connection gefunden!? Vermutlich
* wurde sie schon wieder geschlossen. */
* wurde sie schon wieder geschlossen. */
close( r_fd );
Log( LOG_DEBUG, "Resolver: Got result for unknown connection!?" );
return;

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: defines.h,v 1.33 2002/09/07 17:58:00 alex Exp $
* $Id: defines.h,v 1.33.2.1 2002/11/23 16:20:25 alex Exp $
*
* defines.h: (globale) Konstanten
*/
@@ -20,6 +20,8 @@
#define NONE -1
#define TIME_RES 2 /* Zeit-Aufloesung des Servers in Sekunden */
#define FNAME_LEN 256 /* max. Laenge eines Dateinamen */
#define LINE_LEN 256 /* max. Laenge einer Konfigurationszeile */

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: irc-server.c,v 1.17.2.2 2002/10/04 13:12:46 alex Exp $
* $Id: irc-server.c,v 1.17.2.3 2002/11/29 10:58:49 alex Exp $
*
* irc-server.c: IRC-Befehle fuer Server-Links
*/
@@ -339,9 +339,6 @@ IRC_SQUIT( CLIENT *Client, REQUEST *Req )
Log( LOG_DEBUG, "Got SQUIT from %s for \"%s\": \"%s\" ...", Client_ID( Client ), Req->argv[0], Req->argv[1] );
/* SQUIT an alle Server weiterleiten */
IRC_WriteStrServers( Client, "SQUIT %s :%s", Req->argv[0], Req->argv[1] );
target = Client_Search( Req->argv[0] );
if( ! target )
{

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: irc.c,v 1.95.2.2 2002/10/04 13:12:46 alex Exp $
* $Id: irc.c,v 1.95.2.3 2002/11/04 19:18:39 alex Exp $
*
* irc.c: IRC-Befehle
*/
@@ -109,7 +109,7 @@ IRC_NOTICE( CLIENT *Client, REQUEST *Req )
assert( Client != 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? */
if( Req->argc != 2 ) return CONNECTED;
@@ -834,7 +834,7 @@ IRC_Send_WHO( CLIENT *Client, CHANNEL *Chan, BOOLEAN OnlyOps )
GLOBAL BOOLEAN
IRC_Send_LUSERS( CLIENT *Client )
{
INT cnt;
LONG cnt;
assert( Client != NULL );

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: log.c,v 1.37.2.2 2002/10/04 13:12:46 alex Exp $
* $Id: log.c,v 1.37.2.3 2002/11/04 19:18:39 alex Exp $
*
* log.c: Logging-Funktionen
*/
@@ -96,7 +96,7 @@ Log_InitErrorfile( VOID )
* landen z.B. alle Ausgaben von assert()-Aufrufen. */
/* 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 */
fflush( stderr );

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: messages.h,v 1.46.2.1 2002/10/03 16:13:38 alex Exp $
* $Id: messages.h,v 1.46.2.4 2002/11/22 22:55:05 alex Exp $
*
* irc.h: IRC-Befehle (Header)
*/
@@ -20,15 +20,15 @@
#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 has been started %s"
#define RPL_MYINFO_MSG "004 %s %s ngircd-%s %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_LUSEROP_MSG "252 %s %d :operator(s) online"
#define RPL_LUSERUNKNOWN_MSG "253 %s %d :unknown connection(s)"
#define RPL_LUSERCHANNELS_MSG "254 %s %d :channels formed"
#define RPL_LUSERME_MSG "255 %s :I have %d users, %d services and %d servers"
#define RPL_UMODEIS_MSG "221 %s +%s"
#define RPL_LUSERCLIENT_MSG "251 %s :There are %ld users and %ld services on %ld servers"
#define RPL_LUSEROP_MSG "252 %s %ld :operator(s) online"
#define RPL_LUSERUNKNOWN_MSG "253 %s %ld :unknown connection(s)"
#define RPL_LUSERCHANNELS_MSG "254 %s %ld :channels formed"
#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_ADMINLOC1_MSG "257 %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_ENDOFWHOIS_MSG "318 %s %s :End of WHOIS list"
#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_CHANNELMODEIS_MSG "324 %s %s +%s"
#define RPL_NOTOPIC_MSG "331 %s %s :No topic is set"

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: ngircd.c,v 1.54.2.2 2002/10/04 13:12:46 alex Exp $
* $Id: ngircd.c,v 1.54.2.4 2002/11/24 15:25:25 alex Exp $
*
* ngircd.c: Hier beginnt alles ;-)
*/
@@ -29,6 +29,8 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <time.h>
#include <pwd.h>
#include <grp.h>
#include "resolve.h"
#include "conn.h"
@@ -57,8 +59,10 @@ LOCAL VOID Show_Help PARAMS(( VOID ));
GLOBAL int
main( int argc, const char *argv[] )
{
struct passwd *pwd;
struct group *grp;
BOOLEAN ok, configtest = FALSE;
INT32 pid, n;
LONG pid, n;
INT i;
umask( 0077 );
@@ -140,7 +144,7 @@ main( int argc, const char *argv[] )
{
/* Kurze Option */
for( n = 1; n < (INT32)strlen( argv[i] ); n++ )
for( n = 1; n < (LONG)strlen( argv[i] ); n++ )
{
ok = FALSE;
#ifdef DEBUG
@@ -159,7 +163,7 @@ main( int argc, const char *argv[] )
NGIRCd_ConfFile[FNAME_LEN - 1] = '\0';
/* zum uebernaechsten Parameter */
i++; n = (INT32)strlen( argv[i] );
i++; n = (LONG)strlen( argv[i] );
ok = TRUE;
}
}
@@ -227,7 +231,7 @@ main( int argc, const char *argv[] )
if( ! NGIRCd_NoDaemon )
{
/* Daemon im Hintergrund erzeugen */
pid = (INT32)fork( );
pid = (LONG)fork( );
if( pid > 0 )
{
/* "alter" Prozess */
@@ -275,8 +279,12 @@ 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 ));
}
}
Log( LOG_INFO, "Running as user %ld, group %ld, with PID %ld.", (INT32)getuid( ), (INT32)getgid( ), (INT32)getpid( ));
/* User, Gruppe und Prozess-ID des Daemon ausgeben */
pwd = getpwuid( getuid( )); grp = getgrgid( getgid( ));
Log( LOG_INFO, "Running as user %s(%ld), group %s(%ld), with PID %ld.", pwd ? pwd->pw_name : "unknown", (LONG)getuid( ), grp ? grp->gr_name : "unknown", (LONG)getgid( ), (LONG)getpid( ));
/* stderr in "Error-File" umlenken */
Log_InitErrorfile( );
/* Signal-Handler initialisieren */

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: parse.c,v 1.41.2.2 2002/10/04 13:12:46 alex Exp $
* $Id: parse.c,v 1.41.2.4 2002/11/29 10:59:51 alex Exp $
*
* parse.c: Parsen der Client-Anfragen
*/
@@ -101,8 +101,6 @@ Parse_Request( CONN_ID Idx, CHAR *Request )
}
else start = Request;
if( ! Validate_Prefix( Idx, &req, &closed )) return ! closed;
/* Befehl */
ptr = strchr( start, ' ' );
if( ptr )
@@ -116,8 +114,6 @@ Parse_Request( CONN_ID Idx, CHAR *Request )
}
req.command = start;
if( ! Validate_Command( Idx, &req, &closed )) return ! closed;
/* Argumente, Parameter */
if( ptr )
{
@@ -156,6 +152,9 @@ Parse_Request( CONN_ID Idx, CHAR *Request )
}
}
/* Daten validieren */
if( ! Validate_Prefix( Idx, &req, &closed )) return ! closed;
if( ! Validate_Command( Idx, &req, &closed )) return ! closed;
if( ! Validate_Args( Idx, &req, &closed )) return ! closed;
return Handle_Request( Idx, &req );
@@ -209,8 +208,8 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, BOOLEAN *Closed )
if( ! c )
{
/* im Prefix angegebener Client ist nicht bekannt */
Log( LOG_ERR, "Invalid prefix, client not known (connection %d)!?", Idx );
if( ! Conn_WriteStr( Idx, "ERROR :Invalid prefix, client not known!?" )) *Closed = TRUE;
Log( LOG_ERR, "Invalid prefix \"%s\", client not known (connection %d, command %s)!?", Req->prefix, Idx, Req->command );
if( ! Conn_WriteStr( Idx, "ERROR :Invalid prefix \"%s\", client not known!?", Req->prefix )) *Closed = TRUE;
return FALSE;
}
@@ -221,7 +220,7 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, BOOLEAN *Closed )
{
/* das angegebene Prefix ist aus dieser Richtung, also
* aus der gegebenen Connection, ungueltig! */
Log( LOG_ERR, "Spoofed prefix \"%s\" from \"%s\" (connection %d)!", Req->prefix, Client_Mask( Client_GetFromConn( Idx )), Idx );
Log( LOG_ERR, "Spoofed prefix \"%s\" from \"%s\" (connection %d, command %s)!", Req->prefix, Client_Mask( Client_GetFromConn( Idx )), Idx, Req->command );
Conn_Close( Idx, NULL, "Spoofed prefix", TRUE );
*Closed = TRUE;
return FALSE;
@@ -280,8 +279,8 @@ Handle_Request( CONN_ID Idx, REQUEST *Req )
else target = NULL;
if( ! target )
{
if( Req->argc > 0 ) Log( LOG_WARNING, "Unknown target for status code: \"%s\"", Req->argv[0] );
else Log( LOG_WARNING, "Unknown target for status code!" );
if( Req->argc > 0 ) Log( LOG_WARNING, "Unknown target for status code %s: \"%s\"", Req->command, Req->argv[0] );
else Log( LOG_WARNING, "Unknown target for status code %s!", Req->command );
return TRUE;
}
if( target == Client_ThisServer( ))

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* 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"
*/
@@ -56,6 +56,9 @@ typedef void POINTER;
typedef signed int INT;
typedef unsigned int UINT;
typedef signed long LONG;
typedef unsigned long ULONG;
typedef signed char INT8;
typedef unsigned char UINT8;
typedef signed short INT16;
@@ -63,6 +66,7 @@ typedef unsigned short UINT16;
typedef signed long INT32;
typedef unsigned long UINT32;
typedef double DOUBLE;
typedef float FLOAT;
typedef char CHAR;

View File

@@ -1,4 +1,4 @@
# $Id: mode-test.e,v 1.2 2002/09/09 21:26:00 alex Exp $
# $Id: mode-test.e,v 1.2.2.1 2002/11/22 23:46:09 alex Exp $
spawn telnet localhost 6789
expect {
@@ -22,7 +22,7 @@ expect {
send "mode nick\r"
expect {
timeout { exit 1 }
"211 nick +i"
"221 nick +i"
}
send "mode nick -i\r"
@@ -44,7 +44,7 @@ expect {
send "mode nick\r"
expect {
timeout { exit 1 }
"211 nick +o"
"221 nick +o"
}
send "join #channel\r"

View File

@@ -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]
Name = ngircd.test.server
Info = ngIRCd Test-Server
Ports = 6789
MotdFile = ngircd-test.motd
AdminEMail = admin@irc.server
[Operator]
Name = TestOp