X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Firc.c;h=ff75b0343cfed4819ee8b2063e7c736b82798fbe;hp=c22b867bd059410645ccd9f387f16073dc6b0926;hb=1e83e6662f0f3c28d95d189da221ffd246d985e3;hpb=ca33cbda05902b0009058d369f88c0a7a43b1bbe diff --git a/src/ngircd/irc.c b/src/ngircd/irc.c index c22b867b..ff75b034 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.88 2002/03/12 14:37:52 alex Exp $ + * $Id: irc.c,v 1.98 2002/10/09 13:35:32 alex Exp $ * * irc.c: IRC-Befehle */ @@ -25,20 +25,24 @@ #include #include "ngircd.h" -#include "channel.h" +#include "conn.h" #include "client.h" +#include "channel.h" +#include "resolve.h" #include "conf.h" #include "conn.h" #include "irc-write.h" #include "log.h" #include "messages.h" +#include "parse.h" #include "tool.h" #include "exp.h" #include "irc.h" -GLOBAL BOOLEAN IRC_MOTD( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_MOTD( CLIENT *Client, REQUEST *Req ) { assert( Client != NULL ); assert( Req != NULL ); @@ -52,9 +56,9 @@ GLOBAL BOOLEAN IRC_MOTD( CLIENT *Client, REQUEST *Req ) } /* IRC_MOTD */ -GLOBAL BOOLEAN IRC_PRIVMSG( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_PRIVMSG( CLIENT *Client, REQUEST *Req ) { - BOOLEAN is_member, has_voice, is_op, ok; CLIENT *cl, *from; CHANNEL *chan; @@ -68,13 +72,16 @@ GLOBAL BOOLEAN IRC_PRIVMSG( CLIENT *Client, REQUEST *Req ) if( Req->argc == 1 ) return IRC_WriteStrClient( Client, ERR_NOTEXTTOSEND_MSG, Client_ID( Client )); if( Req->argc > 2 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); - if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_GetFromID( Req->prefix ); + if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); else from = Client; if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); cl = Client_Search( Req->argv[0] ); if( cl ) { + /* Okay, Ziel ist ein Client. Aber ist es auch ein User? */ + if( Client_Type( cl ) != CLIENT_USER ) return IRC_WriteStrClient( from, ERR_NOSUCHNICK_MSG, Client_ID( from ), Req->argv[0] ); + /* Okay, Ziel ist ein User */ if(( Client_Type( Client ) != CLIENT_SERVER ) && ( strchr( Client_Modes( cl ), 'a' ))) { @@ -88,51 +95,31 @@ GLOBAL BOOLEAN IRC_PRIVMSG( CLIENT *Client, REQUEST *Req ) } chan = Channel_Search( Req->argv[0] ); - if( chan ) - { - /* Okay, Ziel ist ein Channel */ - is_member = has_voice = is_op = FALSE; - if( Channel_IsMemberOf( chan, from )) - { - is_member = TRUE; - if( strchr( Channel_UserModes( chan, from ), 'v' )) has_voice = TRUE; - if( strchr( Channel_UserModes( chan, from ), 'o' )) is_op = TRUE; - } - - /* pruefen, ob Client in Channel schreiben darf */ - ok = TRUE; - if( strchr( Channel_Modes( chan ), 'n' ) && ( ! is_member )) ok = FALSE; - if( strchr( Channel_Modes( chan ), 'm' ) && ( ! is_op ) && ( ! has_voice )) ok = FALSE; - - if( ! ok ) return IRC_WriteStrClient( from, ERR_CANNOTSENDTOCHAN_MSG, Client_ID( from ), Req->argv[0] ); - - /* Text senden */ - if( Client_Conn( from ) > NONE ) Conn_UpdateIdle( Client_Conn( from )); - return IRC_WriteStrChannelPrefix( Client, chan, from, TRUE, "PRIVMSG %s :%s", Req->argv[0], Req->argv[1] ); - } + if( chan ) return Channel_Write( chan, from, Client, Req->argv[1] ); return IRC_WriteStrClient( from, ERR_NOSUCHNICK_MSG, Client_ID( from ), Req->argv[0] ); } /* IRC_PRIVMSG */ -GLOBAL BOOLEAN IRC_NOTICE( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_NOTICE( CLIENT *Client, REQUEST *Req ) { CLIENT *to, *from; 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; - if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_GetFromID( Req->prefix ); + if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); else from = Client; if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); to = Client_Search( Req->argv[0] ); - if( to ) + if(( to ) && ( Client_Type( to ) == CLIENT_USER )) { /* Okay, Ziel ist ein User */ return IRC_WriteStrClientPrefix( to, from, "NOTICE %s :%s", Client_ID( to ), Req->argv[1] ); @@ -141,7 +128,8 @@ GLOBAL BOOLEAN IRC_NOTICE( CLIENT *Client, REQUEST *Req ) } /* IRC_NOTICE */ -GLOBAL BOOLEAN IRC_NAMES( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_NAMES( CLIENT *Client, REQUEST *Req ) { CHAR rpl[COMMAND_LEN], *ptr; CLIENT *target, *from, *c; @@ -156,14 +144,14 @@ GLOBAL BOOLEAN IRC_NAMES( CLIENT *Client, REQUEST *Req ) if( Req->argc > 2 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); /* From aus Prefix ermitteln */ - if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_GetFromID( Req->prefix ); + if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); else from = Client; if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->prefix ); if( Req->argc == 2 ) { /* an anderen Server forwarden */ - target = Client_GetFromID( Req->argv[1] ); + target = Client_Search( Req->argv[1] ); if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[1] ); if( target != Client_ThisServer( )) @@ -218,7 +206,7 @@ GLOBAL BOOLEAN 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 ), "*", "*" ); } } @@ -229,14 +217,15 @@ GLOBAL BOOLEAN 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 ), "*" ); } /* IRC_NAMES */ -GLOBAL BOOLEAN IRC_ISON( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_ISON( CLIENT *Client, REQUEST *Req ) { CHAR rpl[COMMAND_LEN]; CLIENT *c; @@ -258,7 +247,7 @@ GLOBAL BOOLEAN IRC_ISON( CLIENT *Client, REQUEST *Req ) while( ptr ) { ngt_TrimStr( ptr ); - c = Client_GetFromID( ptr ); + c = Client_Search( ptr ); if( c && ( Client_Type( c ) == CLIENT_USER )) { /* Dieser Nick ist "online" */ @@ -270,11 +259,12 @@ GLOBAL BOOLEAN 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 */ -GLOBAL BOOLEAN IRC_WHOIS( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_WHOIS( CLIENT *Client, REQUEST *Req ) { CLIENT *from, *target, *c; CHAR str[LINE_LEN + 1], *ptr = NULL; @@ -290,11 +280,11 @@ GLOBAL BOOLEAN IRC_WHOIS( CLIENT *Client, REQUEST *Req ) if(( Req->argc < 1 ) || ( Req->argc > 2 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); /* Client suchen */ - c = Client_GetFromID( Req->argv[Req->argc - 1] ); + c = Client_Search( Req->argv[Req->argc - 1] ); if(( ! c ) || ( Client_Type( c ) != CLIENT_USER )) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->argv[Req->argc - 1] ); /* Empfaenger des WHOIS suchen */ - if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_GetFromID( Req->prefix ); + if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); else from = Client; if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); @@ -302,7 +292,7 @@ GLOBAL BOOLEAN IRC_WHOIS( CLIENT *Client, REQUEST *Req ) if( Req->argc > 1 ) { /* angegebenen Ziel-Server suchen */ - target = Client_GetFromID( Req->argv[1] ); + target = Client_Search( Req->argv[1] ); if( ! target ) return IRC_WriteStrClient( from, ERR_NOSUCHSERVER_MSG, Client_ID( from ), Req->argv[1] ); ptr = Req->argv[1]; } @@ -335,7 +325,7 @@ GLOBAL BOOLEAN 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 )); } @@ -345,7 +335,7 @@ GLOBAL BOOLEAN 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? */ @@ -371,7 +361,8 @@ GLOBAL BOOLEAN IRC_WHOIS( CLIENT *Client, REQUEST *Req ) } /* IRC_WHOIS */ -GLOBAL BOOLEAN IRC_WHO( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_WHO( CLIENT *Client, REQUEST *Req ) { BOOLEAN ok, only_ops; CHAR flags[8], *ptr; @@ -448,7 +439,8 @@ GLOBAL BOOLEAN IRC_WHO( CLIENT *Client, REQUEST *Req ) } /* IRC_WHO */ -GLOBAL BOOLEAN IRC_USERHOST( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_USERHOST( CLIENT *Client, REQUEST *Req ) { CHAR rpl[COMMAND_LEN]; CLIENT *c; @@ -468,7 +460,7 @@ GLOBAL BOOLEAN IRC_USERHOST( CLIENT *Client, REQUEST *Req ) strcpy( rpl, RPL_USERHOST_MSG ); for( i = 0; i < max; i++ ) { - c = Client_GetFromID( Req->argv[i] ); + c = Client_Search( Req->argv[i] ); if( c && ( Client_Type( c ) == CLIENT_USER )) { /* Dieser Nick ist "online" */ @@ -485,11 +477,12 @@ GLOBAL BOOLEAN 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 */ -GLOBAL BOOLEAN IRC_ERROR( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_ERROR( CLIENT *Client, REQUEST *Req ) { assert( Client != NULL ); assert( Req != NULL ); @@ -501,7 +494,8 @@ GLOBAL BOOLEAN IRC_ERROR( CLIENT *Client, REQUEST *Req ) } /* IRC_ERROR */ -GLOBAL BOOLEAN IRC_LUSERS( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_LUSERS( CLIENT *Client, REQUEST *Req ) { CLIENT *target, *from; @@ -514,20 +508,20 @@ GLOBAL BOOLEAN IRC_LUSERS( CLIENT *Client, REQUEST *Req ) if(( Req->argc > 2 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); /* Absender ermitteln */ - if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_GetFromID( Req->prefix ); + if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); else from = Client; if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); /* An anderen Server forwarden? */ if( Req->argc == 2 ) { - target = Client_GetFromID( Req->argv[1] ); + target = Client_Search( Req->argv[1] ); if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[1] ); else if( target != Client_ThisServer( )) return IRC_WriteStrClientPrefix( target, from, "LUSERS %s %s", Req->argv[0], Req->argv[1] ); } /* Wer ist der Absender? */ - if( Client_Type( Client ) == CLIENT_SERVER ) target = Client_GetFromID( Req->prefix ); + if( Client_Type( Client ) == CLIENT_SERVER ) target = Client_Search( Req->prefix ); else target = Client; if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); @@ -537,7 +531,8 @@ GLOBAL BOOLEAN IRC_LUSERS( CLIENT *Client, REQUEST *Req ) } /* IRC_LUSERS */ -GLOBAL BOOLEAN IRC_LINKS( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_LINKS( CLIENT *Client, REQUEST *Req ) { CLIENT *target, *from, *c; CHAR *mask; @@ -555,20 +550,20 @@ GLOBAL BOOLEAN IRC_LINKS( CLIENT *Client, REQUEST *Req ) else mask = "*"; /* Absender ermitteln */ - if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_GetFromID( Req->prefix ); + if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); else from = Client; if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); /* An anderen Server forwarden? */ if( Req->argc == 2 ) { - target = Client_GetFromID( Req->argv[0] ); + target = Client_Search( Req->argv[0] ); if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[0] ); else if( target != Client_ThisServer( )) return IRC_WriteStrClientPrefix( target, from, "LINKS %s %s", Req->argv[0], Req->argv[1] ); } /* Wer ist der Absender? */ - if( Client_Type( Client ) == CLIENT_SERVER ) target = Client_GetFromID( Req->prefix ); + if( Client_Type( Client ) == CLIENT_SERVER ) target = Client_Search( Req->prefix ); else target = Client; if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); @@ -586,7 +581,8 @@ GLOBAL BOOLEAN IRC_LINKS( CLIENT *Client, REQUEST *Req ) } /* IRC_LINKS */ -GLOBAL BOOLEAN IRC_VERSION( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_VERSION( CLIENT *Client, REQUEST *Req ) { CLIENT *target, *prefix; @@ -597,11 +593,11 @@ GLOBAL BOOLEAN IRC_VERSION( CLIENT *Client, REQUEST *Req ) if(( Req->argc > 1 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); /* Ziel suchen */ - if( Req->argc == 1 ) target = Client_GetFromID( Req->argv[0] ); + if( Req->argc == 1 ) target = Client_Search( Req->argv[0] ); else target = Client_ThisServer( ); /* Prefix ermitteln */ - if( Client_Type( Client ) == CLIENT_SERVER ) prefix = Client_GetFromID( Req->prefix ); + if( Client_Type( Client ) == CLIENT_SERVER ) prefix = Client_Search( Req->prefix ); else prefix = Client; if( ! prefix ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->prefix ); @@ -616,11 +612,12 @@ GLOBAL BOOLEAN IRC_VERSION( CLIENT *Client, REQUEST *Req ) } /* mit Versionsinfo antworten */ - return IRC_WriteStrClient( Client, RPL_VERSION_MSG, Client_ID( prefix ), NGIRCd_DebugLevel, Conf_ServerName, NGIRCd_VersionAddition( )); + return IRC_WriteStrClient( Client, RPL_VERSION_MSG, Client_ID( prefix ), PACKAGE, VERSION, NGIRCd_DebugLevel, Conf_ServerName, NGIRCd_VersionAddition( )); } /* IRC_VERSION */ -GLOBAL BOOLEAN IRC_KILL( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_KILL( CLIENT *Client, REQUEST *Req ) { CLIENT *prefix, *c; @@ -632,7 +629,7 @@ GLOBAL BOOLEAN IRC_KILL( CLIENT *Client, REQUEST *Req ) /* Falsche Anzahl Parameter? */ if(( Req->argc != 2 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); - prefix = Client_GetFromID( Req->prefix ); + prefix = Client_Search( Req->prefix ); if( ! prefix ) { Log( LOG_WARNING, "Got KILL with invalid prefix: \"%s\"!", Req->prefix ); @@ -645,14 +642,64 @@ GLOBAL BOOLEAN IRC_KILL( CLIENT *Client, REQUEST *Req ) IRC_WriteStrServersPrefix( Client, prefix, "KILL %s :%s", Req->argv[0], Req->argv[1] ); /* haben wir selber einen solchen Client? */ - c = Client_GetFromID( Req->argv[0] ); - if( c && ( Client_Conn( c ) != NONE )) Conn_Close( Client_Conn( c ), NULL, Req->argv[1], TRUE ); - + c = Client_Search( Req->argv[0] ); + if( c ) + { + /* Ja, wir haben einen solchen Client */ + if( Client_Conn( c ) != NONE ) Conn_Close( Client_Conn( c ), NULL, Req->argv[1], TRUE ); + else Client_Destroy( c, NULL, Req->argv[1], TRUE ); + } + else Log( LOG_NOTICE, "Client with nick \"%s\" is unknown here.", Req->argv[0] ); + return CONNECTED; } /* IRC_KILL */ -GLOBAL BOOLEAN IRC_Show_MOTD( CLIENT *Client ) +GLOBAL BOOLEAN +IRC_ADMIN(CLIENT *Client, REQUEST *Req ) +{ + CLIENT *target, *prefix; + + 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 )); + + /* Falsche Anzahl Parameter? */ + if(( Req->argc > 1 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); + + /* Ziel suchen */ + if( Req->argc == 1 ) target = Client_Search( Req->argv[0] ); + else target = Client_ThisServer( ); + + /* Prefix ermitteln */ + if( Client_Type( Client ) == CLIENT_SERVER ) prefix = Client_Search( Req->prefix ); + else prefix = Client; + if( ! prefix ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->prefix ); + + /* An anderen Server weiterleiten? */ + if( target != Client_ThisServer( )) + { + if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[0] ); + + /* forwarden */ + IRC_WriteStrClientPrefix( target, prefix, "ADMIN %s", Req->argv[0] ); + return CONNECTED; + } + + /* mit Versionsinfo antworten */ + if( ! IRC_WriteStrClient( Client, RPL_ADMINME_MSG, Client_ID( prefix ), Conf_ServerName )) return DISCONNECTED; + if( ! IRC_WriteStrClient( Client, RPL_ADMINLOC1_MSG, Client_ID( prefix ), Conf_ServerAdmin1 )) return DISCONNECTED; + if( ! IRC_WriteStrClient( Client, RPL_ADMINLOC2_MSG, Client_ID( prefix ), Conf_ServerAdmin2 )) return DISCONNECTED; + if( ! IRC_WriteStrClient( Client, RPL_ADMINEMAIL_MSG, Client_ID( prefix ), Conf_ServerAdminMail )) return DISCONNECTED; + + return CONNECTED; +} /* IRC_ADMIN */ + + + +GLOBAL BOOLEAN +IRC_Show_MOTD( CLIENT *Client ) { BOOLEAN ok; CHAR line[127]; @@ -686,7 +733,8 @@ GLOBAL BOOLEAN IRC_Show_MOTD( CLIENT *Client ) } /* IRC_Show_MOTD */ -GLOBAL BOOLEAN IRC_Send_NAMES( CLIENT *Client, CHANNEL *Chan ) +GLOBAL BOOLEAN +IRC_Send_NAMES( CLIENT *Client, CHANNEL *Chan ) { BOOLEAN is_visible, is_member; CHAR str[LINE_LEN + 1]; @@ -720,7 +768,7 @@ GLOBAL BOOLEAN 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 )); } } @@ -731,14 +779,15 @@ GLOBAL BOOLEAN 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; } /* IRC_Send_NAMES */ -GLOBAL BOOLEAN IRC_Send_WHO( CLIENT *Client, CHANNEL *Chan, BOOLEAN OnlyOps ) +GLOBAL BOOLEAN +IRC_Send_WHO( CLIENT *Client, CHANNEL *Chan, BOOLEAN OnlyOps ) { BOOLEAN is_visible, is_member; CL2CHAN *cl2chan; @@ -782,7 +831,8 @@ GLOBAL BOOLEAN IRC_Send_WHO( CLIENT *Client, CHANNEL *Chan, BOOLEAN OnlyOps ) } /* IRC_Send_WHO */ -GLOBAL BOOLEAN IRC_Send_LUSERS( CLIENT *Client ) +GLOBAL BOOLEAN +IRC_Send_LUSERS( CLIENT *Client ) { INT cnt;