mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-11-04 07:52:59 +00:00 
			
		
		
		
	Compare commits
	
		
			24 Commits
		
	
	
		
			rel-0-5-3-
			...
			branch-0-5
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					b74699b074 | ||
| 
						 | 
					35054b1f64 | ||
| 
						 | 
					f68369d821 | ||
| 
						 | 
					d53d18833d | ||
| 
						 | 
					a02c7a5f47 | ||
| 
						 | 
					14216308a0 | ||
| 
						 | 
					7a449bad3c | ||
| 
						 | 
					e0941f1a17 | ||
| 
						 | 
					6cdc8f7802 | ||
| 
						 | 
					266b68b873 | ||
| 
						 | 
					34d7f4162d | ||
| 
						 | 
					6eab6d9514 | ||
| 
						 | 
					2230a6c96a | ||
| 
						 | 
					b4afaf9c52 | ||
| 
						 | 
					8e9a84a902 | ||
| 
						 | 
					0a90f59030 | ||
| 
						 | 
					ad252b5c4c | ||
| 
						 | 
					b0eb4b0019 | ||
| 
						 | 
					92a9e0d34f | ||
| 
						 | 
					ed4417c1a0 | ||
| 
						 | 
					1e66da4e50 | ||
| 
						 | 
					6e55ea7298 | ||
| 
						 | 
					bb180adb49 | ||
| 
						 | 
					e2c896cb7e | 
							
								
								
									
										26
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								ChangeLog
									
									
									
									
									
								
							@@ -10,7 +10,29 @@
 | 
				
			|||||||
                        -- ChangeLog / Aenderungen --
 | 
					                        -- ChangeLog / Aenderungen --
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ngIRCd 0.5.3-pre1, 04.11.2002
 | 
					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,
 | 
					  - NOTICE liefert nun wirklich nie mehr einen Fehler, auch dann nicht,
 | 
				
			||||||
    wenn der sendende Client noch gar nicht registriert ist.
 | 
					    wenn der sendende Client noch gar nicht registriert ist.
 | 
				
			||||||
@@ -298,4 +320,4 @@ ngIRCd 0.0.1, 31.12.2001
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- 
 | 
					-- 
 | 
				
			||||||
$Id: ChangeLog,v 1.87.2.11 2002/11/04 20:03:38 alex Exp $
 | 
					$Id: ChangeLog,v 1.87.2.18 2002/11/29 11:42:24 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.58.2.7 2002/11/04 19:17:52 alex Exp $
 | 
					# $Id: configure.in,v 1.58.2.11 2002/11/29 10:53:44 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.3-pre1)
 | 
					AM_INIT_AUTOMAKE(ngircd,0.5.x-CVS)
 | 
				
			||||||
AM_CONFIG_HEADER(src/config.h)
 | 
					AM_CONFIG_HEADER(src/config.h)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# -- Templates fuer config.h --
 | 
					# -- Templates fuer config.h --
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
%define name    ngircd
 | 
					%define name    ngircd
 | 
				
			||||||
%define version 0.5.3-pre1
 | 
					%define version 0.5.x-CVS
 | 
				
			||||||
%define release 1
 | 
					%define release 1
 | 
				
			||||||
%define prefix  %{_prefix}
 | 
					%define prefix  %{_prefix}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -51,4 +51,4 @@ make
 | 
				
			|||||||
%doc AUTHORS  COPYING  ChangeLog  INSTALL NEWS  README
 | 
					%doc AUTHORS  COPYING  ChangeLog  INSTALL NEWS  README
 | 
				
			||||||
%config(noreplace) /etc
 | 
					%config(noreplace) /etc
 | 
				
			||||||
%{_prefix}/sbin
 | 
					%{_prefix}/sbin
 | 
				
			||||||
%attr(644,root,root) %{_prefix}/share/man/
 | 
					%{_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: conf.c,v 1.29.2.4 2002/11/04 19:18:39 alex Exp $
 | 
					 * $Id: conf.c,v 1.29.2.5 2002/11/24 15:25:25 alex Exp $
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * conf.h: Konfiguration des ngircd
 | 
					 * conf.h: Konfiguration des ngircd
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -25,6 +25,9 @@
 | 
				
			|||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <pwd.h>
 | 
				
			||||||
 | 
					#include <grp.h>
 | 
				
			||||||
 | 
					#include <sys/types.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "ngircd.h"
 | 
					#include "ngircd.h"
 | 
				
			||||||
#include "conn.h"
 | 
					#include "conn.h"
 | 
				
			||||||
@@ -67,6 +70,8 @@ Conf_Test( VOID )
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	/* Konfiguration einlesen, ueberpruefen und ausgeben. */
 | 
						/* Konfiguration einlesen, ueberpruefen und ausgeben. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct passwd *pwd;
 | 
				
			||||||
 | 
						struct group *grp;
 | 
				
			||||||
	INT i;
 | 
						INT i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Use_Log = FALSE;
 | 
						Use_Log = FALSE;
 | 
				
			||||||
@@ -91,15 +96,19 @@ Conf_Test( VOID )
 | 
				
			|||||||
	printf( "  AdminInfo2 = %s\n", Conf_ServerAdmin2 );
 | 
						printf( "  AdminInfo2 = %s\n", Conf_ServerAdmin2 );
 | 
				
			||||||
	printf( "  AdminEMail = %s\n", Conf_ServerAdminMail );
 | 
						printf( "  AdminEMail = %s\n", Conf_ServerAdminMail );
 | 
				
			||||||
	printf( "  MotdFile = %s\n", Conf_MotdFile );
 | 
						printf( "  MotdFile = %s\n", Conf_MotdFile );
 | 
				
			||||||
	printf( "  ListenPorts = " );
 | 
						printf( "  Ports = " );
 | 
				
			||||||
	for( i = 0; i < Conf_ListenPorts_Count; i++ )
 | 
						for( i = 0; i < Conf_ListenPorts_Count; i++ )
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if( i != 0 ) printf( ", " );
 | 
							if( i != 0 ) printf( ", " );
 | 
				
			||||||
		printf( "%u", Conf_ListenPorts[i] );
 | 
							printf( "%u", Conf_ListenPorts[i] );
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	puts( "" );
 | 
						puts( "" );
 | 
				
			||||||
	printf( "  ServerUID = %ld\n", (LONG)Conf_UID );
 | 
						pwd = getpwuid( Conf_UID );
 | 
				
			||||||
	printf( "  ServerGID = %ld\n", (LONG)Conf_GID );
 | 
						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( "  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 );
 | 
				
			||||||
@@ -294,6 +303,8 @@ Read_Config( VOID )
 | 
				
			|||||||
LOCAL VOID
 | 
					LOCAL VOID
 | 
				
			||||||
Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
 | 
					Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						struct passwd *pwd;
 | 
				
			||||||
 | 
						struct group *grp;
 | 
				
			||||||
	CHAR *ptr;
 | 
						CHAR *ptr;
 | 
				
			||||||
	LONG port;
 | 
						LONG port;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@@ -372,13 +383,17 @@ Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
 | 
				
			|||||||
	if( strcasecmp( Var, "ServerUID" ) == 0 )
 | 
						if( strcasecmp( Var, "ServerUID" ) == 0 )
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		/* UID, mit der der Daemon laufen soll */
 | 
							/* 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;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if( strcasecmp( Var, "ServerGID" ) == 0 )
 | 
						if( strcasecmp( Var, "ServerGID" ) == 0 )
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		/* GID, mit der der Daemon laufen soll */
 | 
							/* 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;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if( strcasecmp( Var, "PingTimeout" ) == 0 )
 | 
						if( strcasecmp( Var, "PingTimeout" ) == 0 )
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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.2.4 2002/11/04 19:18:39 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")
 | 
					 * 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 CONN_ID Socket2Index PARAMS(( INT Sock ));
 | 
				
			||||||
LOCAL VOID Read_Request PARAMS(( CONN_ID Idx ));
 | 
					LOCAL VOID Read_Request PARAMS(( CONN_ID Idx ));
 | 
				
			||||||
LOCAL BOOLEAN Try_Write 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_Connections PARAMS(( VOID ));
 | 
				
			||||||
LOCAL VOID Check_Servers PARAMS(( VOID ));
 | 
					LOCAL VOID Check_Servers PARAMS(( VOID ));
 | 
				
			||||||
LOCAL VOID Init_Conn_Struct PARAMS(( INT Idx ));
 | 
					LOCAL VOID Init_Conn_Struct PARAMS(( INT Idx ));
 | 
				
			||||||
@@ -236,10 +236,13 @@ Conn_Handler( VOID )
 | 
				
			|||||||
	struct timeval tv;
 | 
						struct timeval tv;
 | 
				
			||||||
	time_t start, t;
 | 
						time_t start, t;
 | 
				
			||||||
	INT i, idx;
 | 
						INT i, idx;
 | 
				
			||||||
 | 
						BOOLEAN timeout;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	start = time( NULL );
 | 
						start = time( NULL );
 | 
				
			||||||
	while(( ! NGIRCd_Quit ) && ( ! NGIRCd_Restart ))
 | 
						while(( ! NGIRCd_Quit ) && ( ! NGIRCd_Restart ))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							timeout = TRUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Check_Servers( );
 | 
							Check_Servers( );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Check_Connections( );
 | 
							Check_Connections( );
 | 
				
			||||||
@@ -250,7 +253,7 @@ Conn_Handler( VOID )
 | 
				
			|||||||
			if(( My_Connections[i].sock > NONE ) && ( My_Connections[i].rdatalen > 0 ))
 | 
								if(( My_Connections[i].sock > NONE ) && ( My_Connections[i].rdatalen > 0 ))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				/* Kann aus dem Buffer noch ein Befehl extrahiert werden? */
 | 
									/* 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 */
 | 
							/* Timeout initialisieren */
 | 
				
			||||||
		tv.tv_sec = 1;
 | 
					 | 
				
			||||||
		tv.tv_usec = 0;
 | 
							tv.tv_usec = 0;
 | 
				
			||||||
 | 
							if( timeout ) tv.tv_sec = TIME_RES;
 | 
				
			||||||
 | 
							else tv.tv_sec = 0;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		/* Auf Aktivitaet warten */
 | 
							/* Auf Aktivitaet warten */
 | 
				
			||||||
		i = select( Conn_MaxFD + 1, &read_sockets, &write_sockets, NULL, &tv );
 | 
							i = select( Conn_MaxFD + 1, &read_sockets, &write_sockets, NULL, &tv );
 | 
				
			||||||
@@ -465,6 +469,10 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformClient )
 | 
				
			|||||||
		if( My_Connections[Idx].sock == NONE ) return;
 | 
							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 )
 | 
						if( close( My_Connections[Idx].sock ) != 0 )
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		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 ));
 | 
							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 ));
 | 
				
			||||||
@@ -557,18 +565,27 @@ Conn_SetPenalty( CONN_ID Idx, time_t Seconds )
 | 
				
			|||||||
LOCAL BOOLEAN
 | 
					LOCAL BOOLEAN
 | 
				
			||||||
Try_Write( CONN_ID Idx )
 | 
					Try_Write( CONN_ID Idx )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* Versuchen, Daten aus dem Schreib-Puffer in den
 | 
						/* Versuchen, Daten aus dem Schreib-Puffer in den Socket zu 
 | 
				
			||||||
	 * Socket zu schreiben. */
 | 
						 * 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;
 | 
						fd_set write_socket;
 | 
				
			||||||
 | 
						struct timeval tv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	assert( Idx >= 0 );
 | 
						assert( Idx >= 0 );
 | 
				
			||||||
	assert( My_Connections[Idx].sock > NONE );
 | 
						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_ZERO( &write_socket );
 | 
				
			||||||
	FD_SET( My_Connections[Idx].sock, &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! */
 | 
							/* Fehler! */
 | 
				
			||||||
		if( errno != EINTR )
 | 
							if( errno != EINTR )
 | 
				
			||||||
@@ -671,6 +688,9 @@ Handle_Write( CONN_ID Idx )
 | 
				
			|||||||
	len = send( My_Connections[Idx].sock, My_Connections[Idx].wbuf, My_Connections[Idx].wdatalen, 0 );
 | 
						len = send( My_Connections[Idx].sock, My_Connections[Idx].wbuf, My_Connections[Idx].wdatalen, 0 );
 | 
				
			||||||
	if( len < 0 )
 | 
						if( len < 0 )
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							/* Operation haette Socket "nur" blockiert ... */
 | 
				
			||||||
 | 
							if( errno == EAGAIN ) return TRUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Oops, ein Fehler! */
 | 
							/* Oops, ein Fehler! */
 | 
				
			||||||
		Log( LOG_ERR, "Write error on connection %d (socket %d): %s!", Idx, My_Connections[Idx].sock, 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!", NULL, FALSE );
 | 
							Conn_Close( Idx, "Write error!", NULL, FALSE );
 | 
				
			||||||
@@ -699,6 +719,7 @@ New_Connection( INT Sock )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	assert( Sock >= 0 );
 | 
						assert( Sock >= 0 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Connection auf Listen-Socket annehmen */
 | 
				
			||||||
	new_sock_len = sizeof( new_addr );
 | 
						new_sock_len = sizeof( new_addr );
 | 
				
			||||||
	new_sock = accept( Sock, (struct sockaddr *)&new_addr, (socklen_t *)&new_sock_len );
 | 
						new_sock = accept( Sock, (struct sockaddr *)&new_addr, (socklen_t *)&new_sock_len );
 | 
				
			||||||
	if( new_sock < 0 )
 | 
						if( new_sock < 0 )
 | 
				
			||||||
@@ -707,6 +728,9 @@ New_Connection( INT Sock )
 | 
				
			|||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Socket initialisieren */
 | 
				
			||||||
 | 
						Init_Socket( new_sock );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Freie Connection-Struktur suchen */
 | 
						/* 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 )
 | 
				
			||||||
@@ -808,6 +832,9 @@ Read_Request( CONN_ID Idx )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if( len < 0 )
 | 
						if( len < 0 )
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							/* Operation haette Socket "nur" blockiert ... */
 | 
				
			||||||
 | 
							if( errno == EAGAIN ) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Fehler beim Lesen */
 | 
							/* Fehler beim Lesen */
 | 
				
			||||||
		Log( LOG_ERR, "Read error on connection %d (socket %d): %s!", Idx, My_Connections[Idx].sock, 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 );
 | 
				
			||||||
@@ -826,16 +853,19 @@ Read_Request( CONN_ID Idx )
 | 
				
			|||||||
} /* Read_Request */
 | 
					} /* Read_Request */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LOCAL VOID
 | 
					LOCAL BOOLEAN
 | 
				
			||||||
Handle_Buffer( CONN_ID Idx )
 | 
					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). */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef STRICT_RFC
 | 
					#ifndef STRICT_RFC
 | 
				
			||||||
	CHAR *ptr1, *ptr2;
 | 
						CHAR *ptr1, *ptr2;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	CHAR *ptr;
 | 
						CHAR *ptr;
 | 
				
			||||||
	INT len, delta;
 | 
						INT len, delta;
 | 
				
			||||||
 | 
						BOOLEAN action;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Eine komplette Anfrage muss mit CR+LF enden, vgl.
 | 
						/* Eine komplette Anfrage muss mit CR+LF enden, vgl.
 | 
				
			||||||
	 * RFC 2812. Haben wir eine? */
 | 
						 * RFC 2812. Haben wir eine? */
 | 
				
			||||||
@@ -856,6 +886,7 @@ Handle_Buffer( CONN_ID Idx )
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						action = FALSE;
 | 
				
			||||||
	if( ptr )
 | 
						if( ptr )
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		/* Ende der Anfrage wurde gefunden */
 | 
							/* Ende der Anfrage wurde gefunden */
 | 
				
			||||||
@@ -864,23 +895,26 @@ Handle_Buffer( CONN_ID Idx )
 | 
				
			|||||||
		if( len > ( COMMAND_LEN - 1 ))
 | 
							if( len > ( COMMAND_LEN - 1 ))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			/* Eine Anfrage darf(!) nicht laenger als 512 Zeichen
 | 
								/* Eine Anfrage darf(!) nicht laenger als 512 Zeichen
 | 
				
			||||||
			* (incl. CR+LF!) werden; vgl. RFC 2812. Wenn soetwas
 | 
								 * (incl. CR+LF!) werden; vgl. RFC 2812. Wenn soetwas
 | 
				
			||||||
			* empfangen wird, wird der Client disconnectiert. */
 | 
								 * 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 );
 | 
								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 );
 | 
								Conn_Close( Idx, NULL, "Request too long", TRUE );
 | 
				
			||||||
			return;
 | 
								return FALSE;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if( len > delta )
 | 
							if( len > delta )
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			/* Es wurde ein Request gelesen */
 | 
								/* 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 */
 | 
							/* Puffer anpassen */
 | 
				
			||||||
		My_Connections[Idx].rdatalen -= len;
 | 
							My_Connections[Idx].rdatalen -= len;
 | 
				
			||||||
		memmove( My_Connections[Idx].rbuf, My_Connections[Idx].rbuf + len, My_Connections[Idx].rdatalen );
 | 
							memmove( My_Connections[Idx].rbuf, My_Connections[Idx].rbuf + len, My_Connections[Idx].rdatalen );
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						return action;
 | 
				
			||||||
} /* Handle_Buffer */
 | 
					} /* Handle_Buffer */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1018,7 +1052,7 @@ New_Server( INT Server, CONN_ID Idx )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	struct sockaddr_in new_addr;
 | 
						struct sockaddr_in new_addr;
 | 
				
			||||||
	struct in_addr inaddr;
 | 
						struct in_addr inaddr;
 | 
				
			||||||
	INT new_sock;
 | 
						INT res, new_sock;
 | 
				
			||||||
	CLIENT *c;
 | 
						CLIENT *c;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	assert( Server >= 0 );
 | 
						assert( Server >= 0 );
 | 
				
			||||||
@@ -1064,13 +1098,12 @@ New_Server( INT Server, CONN_ID Idx )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if( ! Init_Socket( new_sock )) return;
 | 
						if( ! Init_Socket( new_sock )) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	connect( new_sock, (struct sockaddr *)&new_addr, sizeof( new_addr ));
 | 
						res = connect( new_sock, (struct sockaddr *)&new_addr, sizeof( new_addr ));
 | 
				
			||||||
	if( errno != EINPROGRESS )
 | 
						if(( res != 0 ) && ( errno != EINPROGRESS ))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							Log( LOG_CRIT, "Can't connect socket: %s!", strerror( errno ));
 | 
				
			||||||
		close( new_sock );
 | 
							close( new_sock );
 | 
				
			||||||
		Init_Conn_Struct( Idx );
 | 
							Init_Conn_Struct( Idx );
 | 
				
			||||||
		Log( LOG_CRIT, "Can't connect socket: %s!", strerror( errno ));
 | 
					 | 
				
			||||||
		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: 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
 | 
					 * defines.h: (globale) Konstanten
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -20,6 +20,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define NONE -1
 | 
					#define NONE -1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TIME_RES 2			/* Zeit-Aufloesung des Servers in Sekunden */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define FNAME_LEN 256			/* max. Laenge eines Dateinamen */
 | 
					#define FNAME_LEN 256			/* max. Laenge eines Dateinamen */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define LINE_LEN 256			/* max. Laenge einer Konfigurationszeile */
 | 
					#define LINE_LEN 256			/* max. Laenge einer Konfigurationszeile */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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.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
 | 
					 * 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] );
 | 
						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] );
 | 
						target = Client_Search( Req->argv[0] );
 | 
				
			||||||
	if( ! target )
 | 
						if( ! target )
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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.2.3 2002/11/04 19:27:23 alex Exp $
 | 
					 * $Id: messages.h,v 1.46.2.4 2002/11/22 22:55:05 alex Exp $
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * irc.h: IRC-Befehle (Header)
 | 
					 * irc.h: IRC-Befehle (Header)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -23,7 +23,7 @@
 | 
				
			|||||||
#define RPL_YOURHOST_MSG		"002 %s :Your host is %s, running version 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_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			"221 %s +%s"
 | 
				
			||||||
#define RPL_LUSERCLIENT_MSG		"251 %s :There are %ld users and %ld services on %ld servers"
 | 
					#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_LUSEROP_MSG			"252 %s %ld :operator(s) online"
 | 
				
			||||||
#define RPL_LUSERUNKNOWN_MSG		"253 %s %ld :unknown connection(s)"
 | 
					#define RPL_LUSERUNKNOWN_MSG		"253 %s %ld :unknown connection(s)"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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.2.3 2002/11/04 19:18:39 alex Exp $
 | 
					 * $Id: ngircd.c,v 1.54.2.4 2002/11/24 15:25:25 alex Exp $
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * ngircd.c: Hier beginnt alles ;-)
 | 
					 * ngircd.c: Hier beginnt alles ;-)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -29,6 +29,8 @@
 | 
				
			|||||||
#include <sys/stat.h>
 | 
					#include <sys/stat.h>
 | 
				
			||||||
#include <sys/wait.h>
 | 
					#include <sys/wait.h>
 | 
				
			||||||
#include <time.h>
 | 
					#include <time.h>
 | 
				
			||||||
 | 
					#include <pwd.h>
 | 
				
			||||||
 | 
					#include <grp.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "resolve.h"
 | 
					#include "resolve.h"
 | 
				
			||||||
#include "conn.h"
 | 
					#include "conn.h"
 | 
				
			||||||
@@ -57,6 +59,8 @@ LOCAL VOID Show_Help PARAMS(( VOID ));
 | 
				
			|||||||
GLOBAL int
 | 
					GLOBAL int
 | 
				
			||||||
main( int argc, const char *argv[] )
 | 
					main( int argc, const char *argv[] )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						struct passwd *pwd;
 | 
				
			||||||
 | 
						struct group *grp;
 | 
				
			||||||
	BOOLEAN ok, configtest = FALSE;
 | 
						BOOLEAN ok, configtest = FALSE;
 | 
				
			||||||
	LONG pid, n;
 | 
						LONG pid, n;
 | 
				
			||||||
	INT i;
 | 
						INT i;
 | 
				
			||||||
@@ -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 ));
 | 
									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.", (LONG)getuid( ), (LONG)getgid( ), (LONG)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( );
 | 
							Log_InitErrorfile( );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Signal-Handler initialisieren */
 | 
							/* Signal-Handler initialisieren */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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.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
 | 
					 * parse.c: Parsen der Client-Anfragen
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -101,8 +101,6 @@ Parse_Request( CONN_ID Idx, CHAR *Request )
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else start = Request;
 | 
						else start = Request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if( ! Validate_Prefix( Idx, &req, &closed )) return ! closed;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* Befehl */
 | 
						/* Befehl */
 | 
				
			||||||
	ptr = strchr( start, ' ' );
 | 
						ptr = strchr( start, ' ' );
 | 
				
			||||||
	if( ptr )
 | 
						if( ptr )
 | 
				
			||||||
@@ -116,8 +114,6 @@ Parse_Request( CONN_ID Idx, CHAR *Request )
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	req.command = start;
 | 
						req.command = start;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if( ! Validate_Command( Idx, &req, &closed )) return ! closed;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* Argumente, Parameter */
 | 
						/* Argumente, Parameter */
 | 
				
			||||||
	if( ptr )
 | 
						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;
 | 
						if( ! Validate_Args( Idx, &req, &closed )) return ! closed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return Handle_Request( Idx, &req );
 | 
						return Handle_Request( Idx, &req );
 | 
				
			||||||
@@ -209,8 +208,8 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, BOOLEAN *Closed )
 | 
				
			|||||||
	if( ! c )
 | 
						if( ! c )
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		/* im Prefix angegebener Client ist nicht bekannt */
 | 
							/* im Prefix angegebener Client ist nicht bekannt */
 | 
				
			||||||
		Log( LOG_ERR, "Invalid prefix, client not known (connection %d)!?", Idx );
 | 
							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, client not known!?" )) *Closed = TRUE;
 | 
							if( ! Conn_WriteStr( Idx, "ERROR :Invalid prefix \"%s\", client not known!?", Req->prefix )) *Closed = TRUE;
 | 
				
			||||||
		return FALSE;
 | 
							return FALSE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -221,7 +220,7 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, BOOLEAN *Closed )
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		/* das angegebene Prefix ist aus dieser Richtung, also
 | 
							/* das angegebene Prefix ist aus dieser Richtung, also
 | 
				
			||||||
		 * aus der gegebenen Connection, ungueltig! */
 | 
							 * 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 );
 | 
							Conn_Close( Idx, NULL, "Spoofed prefix", TRUE );
 | 
				
			||||||
		*Closed = TRUE;
 | 
							*Closed = TRUE;
 | 
				
			||||||
		return FALSE;
 | 
							return FALSE;
 | 
				
			||||||
@@ -280,8 +279,8 @@ Handle_Request( CONN_ID Idx, REQUEST *Req )
 | 
				
			|||||||
		else target = NULL;
 | 
							else target = NULL;
 | 
				
			||||||
		if( ! target )
 | 
							if( ! target )
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if( Req->argc > 0 ) Log( LOG_WARNING, "Unknown target for status code: \"%s\"", Req->argv[0] );
 | 
								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!" );
 | 
								else Log( LOG_WARNING, "Unknown target for status code %s!", Req->command );
 | 
				
			||||||
			return TRUE;
 | 
								return TRUE;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if( target == Client_ThisServer( ))
 | 
							if( target == Client_ThisServer( ))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
					spawn telnet localhost 6789
 | 
				
			||||||
expect {
 | 
					expect {
 | 
				
			||||||
@@ -22,7 +22,7 @@ expect {
 | 
				
			|||||||
send "mode nick\r"
 | 
					send "mode nick\r"
 | 
				
			||||||
expect {
 | 
					expect {
 | 
				
			||||||
	timeout { exit 1 }
 | 
						timeout { exit 1 }
 | 
				
			||||||
	"211 nick +i"
 | 
						"221 nick +i"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
send "mode nick -i\r"
 | 
					send "mode nick -i\r"
 | 
				
			||||||
@@ -44,7 +44,7 @@ expect {
 | 
				
			|||||||
send "mode nick\r"
 | 
					send "mode nick\r"
 | 
				
			||||||
expect {
 | 
					expect {
 | 
				
			||||||
	timeout { exit 1 }
 | 
						timeout { exit 1 }
 | 
				
			||||||
	"211 nick +o"
 | 
						"221 nick +o"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
send "join #channel\r"
 | 
					send "join #channel\r"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user