X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Firc-info.c;h=46e342711387269a1cc47d19ecf1e1dee870c388;hb=ae7470ceb546d87cbd366d508641276313ec9130;hp=ad585fe236151dc68f013ad22a81896512de767a;hpb=056de78e315a79edc1166649514bf8dfeb18abb1;p=ngircd-alex.git diff --git a/src/ngircd/irc-info.c b/src/ngircd/irc-info.c index ad585fe2..46e34271 100644 --- a/src/ngircd/irc-info.c +++ b/src/ngircd/irc-info.c @@ -7,13 +7,15 @@ * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. - * - * IRC info commands */ - #include "portab.h" +/** + * @file + * IRC info commands + */ + #include "imp.h" #include #include @@ -627,42 +629,51 @@ IRC_TIME( CLIENT *Client, REQUEST *Req ) } /* IRC_TIME */ +/** + * Handler for the IRC command "USERHOST". + * See RFC 2812 section 4.8. + */ GLOBAL bool -IRC_USERHOST( CLIENT *Client, REQUEST *Req ) +IRC_USERHOST(CLIENT *Client, REQUEST *Req) { char rpl[COMMAND_LEN]; CLIENT *c; int max, i; - assert( Client != NULL ); - assert( Req != NULL ); + assert(Client != NULL); + assert(Req != NULL); - if(( Req->argc < 1 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); + if ((Req->argc < 1)) + return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, + Client_ID(Client), Req->command); - if( Req->argc > 5 ) max = 5; - else max = Req->argc; + if (Req->argc > 5) + max = 5; + else + max = Req->argc; - strlcpy( rpl, RPL_USERHOST_MSG, sizeof rpl ); - for( i = 0; i < max; i++ ) - { - c = Client_Search( Req->argv[i] ); - if( c && ( Client_Type( c ) == CLIENT_USER )) - { + strlcpy(rpl, RPL_USERHOST_MSG, sizeof rpl); + for (i = 0; i < max; i++) { + c = Client_Search(Req->argv[i]); + if (c && (Client_Type(c) == CLIENT_USER)) { /* This Nick is "online" */ - strlcat( rpl, Client_ID( c ), sizeof( rpl )); - if( Client_HasMode( c, 'o' )) strlcat( rpl, "*", sizeof( rpl )); - strlcat( rpl, "=", sizeof( rpl )); - if( Client_HasMode( c, 'a' )) strlcat( rpl, "-", sizeof( rpl )); - else strlcat( rpl, "+", sizeof( rpl )); - strlcat( rpl, Client_User( c ), sizeof( rpl )); - strlcat( rpl, "@", sizeof( rpl )); - strlcat( rpl, Client_Hostname( c ), sizeof( rpl )); - strlcat( rpl, " ", sizeof( rpl )); + strlcat(rpl, Client_ID(c), sizeof(rpl)); + if (Client_HasMode(c, 'o')) + strlcat(rpl, "*", sizeof(rpl)); + strlcat(rpl, "=", sizeof(rpl)); + if (Client_HasMode(c, 'a')) + strlcat(rpl, "-", sizeof(rpl)); + else + strlcat(rpl, "+", sizeof(rpl)); + strlcat(rpl, Client_User(c), sizeof(rpl)); + strlcat(rpl, "@", sizeof(rpl)); + strlcat(rpl, Client_HostnameCloaked(c), sizeof(rpl)); + strlcat(rpl, " ", sizeof(rpl)); } } - ngt_TrimLastChr( rpl, ' '); + ngt_TrimLastChr(rpl, ' '); - return IRC_WriteStrClient( Client, rpl, Client_ID( Client ) ); + return IRC_WriteStrClient(Client, rpl, Client_ID(Client)); } /* IRC_USERHOST */ @@ -719,9 +730,11 @@ IRC_VERSION( CLIENT *Client, REQUEST *Req ) static bool write_whoreply(CLIENT *Client, CLIENT *c, const char *channelname, const char *flags) { - return IRC_WriteStrClient(Client, RPL_WHOREPLY_MSG, Client_ID(Client), channelname, - Client_User(c), Client_Hostname(c), Client_ID(Client_Introducer(c)), Client_ID(c), - flags, Client_Hops(c), Client_Info(c)); + return IRC_WriteStrClient(Client, RPL_WHOREPLY_MSG, Client_ID(Client), + channelname, Client_User(c), + Client_HostnameCloaked(c), + Client_ID(Client_Introducer(c)), Client_ID(c), + flags, Client_Hops(c), Client_Info(c)); } @@ -903,6 +916,15 @@ IRC_WHO( CLIENT *Client, REQUEST *Req ) } /* IRC_WHO */ +/** + * Handler for the IRC "WHOIS" command. + * + * See RFC 2812, 3.6.2 "Whois query". + * + * @param Client The client from which this command has been received. + * @param Req Request structure with prefix and all parameters. + * @return CONNECTED or DISCONNECTED. + */ GLOBAL bool IRC_WHOIS( CLIENT *Client, REQUEST *Req ) { @@ -915,11 +937,17 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req ) assert( Req != NULL ); /* Bad number of parameters? */ - if(( Req->argc < 1 ) || ( Req->argc > 2 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); + if (Req->argc < 1 || Req->argc > 2) + return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, + Client_ID(Client), Req->command); /* Search client */ - 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] ); + c = Client_Search(Req->argv[Req->argc - 1]); + if (!c || (Client_Type(c) != CLIENT_USER + && Client_Type(c) != CLIENT_SERVICE)) + return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, + Client_ID(Client), + Req->argv[Req->argc - 1]); /* Search sender of the WHOIS */ if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); @@ -939,8 +967,11 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req ) if(( Client_NextHop( target ) != Client_ThisServer( )) && ( Client_Type( Client_NextHop( target )) == CLIENT_SERVER )) return IRC_WriteStrClientPrefix( target, from, "WHOIS %s :%s", Req->argv[0], Req->argv[1] ); - /* Nick, user and name */ - if( ! IRC_WriteStrClient( from, RPL_WHOISUSER_MSG, Client_ID( from ), Client_ID( c ), Client_User( c ), Client_Hostname( c ), Client_Info( c ))) return DISCONNECTED; + /* Nick, user, hostname and client info */ + if (!IRC_WriteStrClient(from, RPL_WHOISUSER_MSG, Client_ID(from), + Client_ID(c), Client_User(c), + Client_HostnameCloaked(c), Client_Info(c))) + return DISCONNECTED; /* Server */ if( ! IRC_WriteStrClient( from, RPL_WHOISSERVER_MSG, Client_ID( from ), Client_ID( c ), Client_ID( Client_Introducer( c )), Client_Info( Client_Introducer( c )))) return DISCONNECTED; @@ -1225,7 +1256,9 @@ static bool Show_MOTD_SSLInfo(CLIENT *Client) return ret; } #else -static inline bool Show_MOTD_SSLInfo(UNUSED CLIENT *c) { return true; } +static inline bool +Show_MOTD_SSLInfo(UNUSED CLIENT *c) +{ return true; } #endif GLOBAL bool @@ -1317,14 +1350,13 @@ IRC_Send_NAMES( CLIENT *Client, CHANNEL *Chan ) } /* IRC_Send_NAMES */ - /** * Send the ISUPPORT numeric (005). * This numeric indicates the features that are supported by this server. * See for details. */ GLOBAL bool -IRC_Send_ISUPPORT PARAMS((CLIENT * Client)) +IRC_Send_ISUPPORT(CLIENT * Client) { if (!IRC_WriteStrClient(Client, RPL_ISUPPORT1_MSG, Client_ID(Client), Conf_MaxJoins))