From: Alexander Barton Date: Fri, 4 Oct 2002 11:31:28 +0000 (+0000) Subject: - Backports aus HEAD: Format-String- und Buffer-Overflow-Bugs behoben, X-Git-Tag: rel-0-5-2~4 X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git;a=commitdiff_plain;h=bdd23ece63c2365b5831611309e8c1b823d2cc89 - Backports aus HEAD: Format-String- und Buffer-Overflow-Bugs behoben, die zum Abbruch des Servers fuehren konnten. --- diff --git a/configure.in b/configure.in index bc595e31..9433a6ba 100644 --- a/configure.in +++ b/configure.in @@ -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.4 2002/10/03 16:10:25 alex Exp $ +# $Id: configure.in,v 1.58.2.5 2002/10/04 11:31:28 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.1) +AM_INIT_AUTOMAKE(ngircd,0.5.CVS) AM_CONFIG_HEADER(src/config.h) # -- Templates fuer config.h -- diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c index bc19a754..a5463006 100644 --- a/src/ngircd/conf.c +++ b/src/ngircd/conf.c @@ -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.1 2002/09/19 10:17:50 alex Exp $ + * conf.c,v 1.29.2.1 2002/09/19 10:17:50 alex Exp * * conf.h: Konfiguration des ngircd */ @@ -67,7 +67,7 @@ Conf_Test( VOID ) { /* Konfiguration einlesen, ueberpruefen und ausgeben. */ - UINT i; + INT i; Use_Log = FALSE; Set_Defaults( ); @@ -584,7 +584,7 @@ va_dcl /* Im "normalen Betrieb" soll der Log-Mechanismus des ngIRCd verwendet * werden, beim Testen der Konfiguration jedoch nicht, hier sollen alle * Meldungen direkt auf die Konsole ausgegeben werden: */ - if( Use_Log ) Log( Level, msg ); + if( Use_Log ) Log( Level, "%s", msg ); else puts( msg ); } /* Config_Error */ diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index 3d2ed09d..95fe17ec 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -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.1 2002/10/03 16:13:38 alex Exp $ + * conn.c,v 1.72.2.1 2002/10/03 16:13:38 alex Exp * * connect.h: Verwaltung aller Netz-Verbindungen ("connections") */ @@ -1133,7 +1133,7 @@ Read_Resolver_Result( INT r_fd ) FD_CLR( r_fd, &Resolver_FDs ); /* Anfrage vom Parent lesen */ - len = read( r_fd, result, HOST_LEN); + len = read( r_fd, result, HOST_LEN - 1 ); if( len < 0 ) { /* Fehler beim Lesen aus der Pipe */ diff --git a/src/ngircd/irc-server.c b/src/ngircd/irc-server.c index 64c91537..c572eb42 100644 --- a/src/ngircd/irc-server.c +++ b/src/ngircd/irc-server.c @@ -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 2002/09/07 17:57:31 alex Exp $ + * irc-server.c,v 1.18 2002/10/04 11:21:46 alex Exp * * 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 )) { /* Zeile senden */ - if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED; + if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED; sprintf( str, "NJOIN %s :", Channel_Name( chan )); } @@ -199,7 +199,7 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req ) if( str[strlen( str ) - 1] != ':') { /* Ja; Also senden ... */ - if( ! IRC_WriteStrClient( Client, str )) return DISCONNECTED; + if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED; } /* naechsten Channel suchen */ diff --git a/src/ngircd/irc-write.c b/src/ngircd/irc-write.c index 6101927c..30183667 100644 --- a/src/ngircd/irc-write.c +++ b/src/ngircd/irc-write.c @@ -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-write.c,v 1.7.2.1 2002/09/17 17:29:20 alex Exp $ + * irc-write.c,v 1.7.2.1 2002/09/17 17:29:20 alex Exp * * irc-write.c: IRC-Texte und Befehle ueber Netzwerk versenden */ @@ -62,7 +62,7 @@ va_dcl va_end( ap ); /* an den Client selber */ - ok = IRC_WriteStrClientPrefix( Client, Client_ThisServer( ), buffer ); + ok = IRC_WriteStrClientPrefix( Client, Client_ThisServer( ), "%s", buffer ); return ok; } /* IRC_WriteStrClient */ @@ -128,7 +128,7 @@ va_dcl vsnprintf( buffer, 1000, Format, 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 */ @@ -233,7 +233,7 @@ va_dcl va_end( ap ); /* an den Client selber */ - IRC_WriteStrServersPrefix( ExceptOf, Client_ThisServer( ), buffer ); + IRC_WriteStrServersPrefix( ExceptOf, Client_ThisServer( ), "%s", buffer ); } /* IRC_WriteStrServers */ @@ -263,7 +263,7 @@ va_dcl vsnprintf( buffer, 1000, Format, ap ); va_end( ap ); - IRC_WriteStrServersPrefixFlag( ExceptOf, Prefix, '\0', buffer ); + IRC_WriteStrServersPrefixFlag( ExceptOf, Prefix, '\0', "%s", buffer ); } /* IRC_WriteStrServersPrefix */ @@ -301,7 +301,7 @@ va_dcl if(( Client_Type( c ) == CLIENT_SERVER ) && ( Client_Conn( c ) > NONE ) && ( c != Client_ThisServer( )) && ( c != ExceptOf )) { /* 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 ); } diff --git a/src/ngircd/irc.c b/src/ngircd/irc.c index 402cfead..48b59b32 100644 --- a/src/ngircd/irc.c +++ b/src/ngircd/irc.c @@ -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 2002/09/16 09:14:45 alex Exp $ + * irc.c,v 1.96 2002/10/04 11:21:46 alex Exp * * irc.c: IRC-Befehle */ @@ -206,7 +206,7 @@ IRC_NAMES( CLIENT *Client, REQUEST *Req ) if( strlen( rpl ) > ( LINE_LEN - CLIENT_NICK_LEN - 4 )) { /* 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 ), "*", "*" ); } } @@ -217,7 +217,7 @@ IRC_NAMES( CLIENT *Client, REQUEST *Req ) if( rpl[strlen( rpl ) - 1] != ':') { /* 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 ), "*" ); @@ -259,7 +259,7 @@ IRC_ISON( CLIENT *Client, REQUEST *Req ) } 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 */ @@ -325,7 +325,7 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req ) if( strlen( str ) > ( LINE_LEN - CHANNEL_NAME_LEN - 4 )) { /* 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 )); } @@ -335,7 +335,7 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req ) if( str[strlen( str ) - 1] != ':') { /* 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? */ @@ -477,7 +477,7 @@ IRC_USERHOST( CLIENT *Client, REQUEST *Req ) } 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 */ @@ -768,7 +768,7 @@ IRC_Send_NAMES( CLIENT *Client, CHANNEL *Chan ) if( strlen( str ) > ( LINE_LEN - CLIENT_NICK_LEN - 4 )) { /* 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 )); } } @@ -779,7 +779,7 @@ IRC_Send_NAMES( CLIENT *Client, CHANNEL *Chan ) if( str[strlen( str ) - 1] != ':') { /* 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; diff --git a/src/ngircd/lists.c b/src/ngircd/lists.c index f8f29822..7cd44085 100644 --- a/src/ngircd/lists.c +++ b/src/ngircd/lists.c @@ -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: lists.c,v 1.8 2002/09/08 17:06:07 alex Exp $ + * lists.c,v 1.9 2002/10/03 21:49:59 alex Exp * * lists.c: Verwaltung der "IRC-Listen": Ban, Invite, ... */ @@ -317,13 +317,13 @@ GLOBAL CHAR * Lists_MakeMask( CHAR *Pattern ) { /* Hier wird aus einem "beliebigen" Pattern eine gueltige IRC-Mask erzeugt. - * Diese ist aber nur bis zum naechsten Aufruf von Lists_MakeMask() gueltig, - * da ein einziger globaler Puffer verwendet wird. ->Umkopieren!*/ + * Diese ist aber nur bis zum naechsten Aufruf von Lists_MakeMask() gueltig, + * da ein einziger globaler Puffer verwendet wird. ->Umkopieren!*/ STATIC CHAR TheMask[MASK_LEN]; CHAR *excl, *at; - assert( Pattern ); + assert( Pattern != NULL ); excl = strchr( Pattern, '!' ); at = strchr( Pattern, '@' ); diff --git a/src/ngircd/log.c b/src/ngircd/log.c index cf52acce..3eb4569f 100644 --- a/src/ngircd/log.c +++ b/src/ngircd/log.c @@ -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 2002/09/09 22:55:21 alex Exp $ + * log.c,v 1.38 2002/10/04 11:21:46 alex Exp * * log.c: Logging-Funktionen */ @@ -185,7 +185,7 @@ va_dcl else { /* Syslog */ - syslog( Level, msg ); + syslog( Level, "%s", msg ); } #endif diff --git a/src/ngircd/ngircd.c b/src/ngircd/ngircd.c index a96646cf..4c41303d 100644 --- a/src/ngircd/ngircd.c +++ b/src/ngircd/ngircd.c @@ -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 2002/09/07 17:57:17 alex Exp $ + * ngircd.c,v 1.55 2002/10/03 21:49:59 alex Exp * * ngircd.c: Hier beginnt alles ;-) */ @@ -159,7 +159,7 @@ main( int argc, const char *argv[] ) NGIRCd_ConfFile[FNAME_LEN - 1] = '\0'; /* zum uebernaechsten Parameter */ - i++; n = strlen( argv[i] ); + i++; n = (INT32)strlen( argv[i] ); ok = TRUE; } } @@ -451,7 +451,7 @@ Initialize_Listen_Ports( VOID ) /* Ports, auf denen der Server Verbindungen entgegennehmen * soll, initialisieren */ - UINT created, i; + INT created, i; created = 0; for( i = 0; i < Conf_ListenPorts_Count; i++ ) diff --git a/src/ngircd/parse.c b/src/ngircd/parse.c index 6d1efef6..e7c2954f 100644 --- a/src/ngircd/parse.c +++ b/src/ngircd/parse.c @@ -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 2002/09/16 09:20:27 alex Exp $ + * parse.c,v 1.42 2002/10/04 11:21:46 alex Exp * * parse.c: Parsen der Client-Anfragen */ @@ -311,7 +311,7 @@ Handle_Request( CONN_ID Idx, REQUEST *Req ) else strcat( str, " :" ); 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 );