X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Firc-info.c;h=1788bf60feebf6e1733b0e92c4070d1f0848250f;hp=d367647f4ea7bfd67132d45323049f1a62c5ab66;hb=ccc899c7f4751ba72dcd7330c55614cf986f0fa3;hpb=0fc822d8c44be42a62d3c26bbab99d5d0bc88346 diff --git a/src/ngircd/irc-info.c b/src/ngircd/irc-info.c index d367647f..1788bf60 100644 --- a/src/ngircd/irc-info.c +++ b/src/ngircd/irc-info.c @@ -16,13 +16,12 @@ * IRC info commands */ -#include "imp.h" #include -#include #include #include #include #include +#include #include "ngircd.h" #include "conn-func.h" @@ -30,12 +29,9 @@ #include "channel.h" #include "class.h" #include "conf.h" -#include "defines.h" #include "lists.h" -#include "log.h" #include "messages.h" #include "match.h" -#include "tool.h" #include "parse.h" #include "irc.h" #include "irc-macros.h" @@ -43,7 +39,6 @@ #include "client-cap.h" #include "op.h" -#include "exp.h" #include "irc-info.h" /* Local functions */ @@ -167,7 +162,7 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps) if (OnlyOps && !is_ircop) continue; - is_visible = Client_HasMode(c, 'i'); + is_visible = !Client_HasMode(c, 'i'); if (is_member || is_visible) { memset(flags, 0, sizeof(flags)); @@ -318,48 +313,50 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c) Client_Info(Client_Introducer(c)))) return DISCONNECTED; - /* Channels */ - snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG, - Client_ID(from), Client_ID(c)); - cl2chan = Channel_FirstChannelOf(c); - while (cl2chan) { - chan = Channel_GetChannel(cl2chan); - assert(chan != NULL); - - /* next */ - cl2chan = Channel_NextChannelOf(c, cl2chan); - - /* Secret channel? */ - if (Channel_HasMode(chan, 's') - && !Channel_IsMemberOf(chan, Client)) - continue; + /* Channels, show only if client has no +I or if from is oper */ + if(!(Client_HasMode(c, 'I')) || Client_HasMode(from, 'o')) { + snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG, + Client_ID(from), Client_ID(c)); + cl2chan = Channel_FirstChannelOf(c); + while (cl2chan) { + chan = Channel_GetChannel(cl2chan); + assert(chan != NULL); + + /* next */ + cl2chan = Channel_NextChannelOf(c, cl2chan); + + /* Secret channel? */ + if (Channel_HasMode(chan, 's') + && !Channel_IsMemberOf(chan, Client)) + continue; - /* Local channel and request is not from a user? */ - if (Client_Type(Client) == CLIENT_SERVER - && Channel_IsLocal(chan)) - continue; + /* Local channel and request is not from a user? */ + if (Client_Type(Client) == CLIENT_SERVER + && Channel_IsLocal(chan)) + continue; - /* Concatenate channel names */ - if (str[strlen(str) - 1] != ':') - strlcat(str, " ", sizeof(str)); + /* Concatenate channel names */ + if (str[strlen(str) - 1] != ':') + strlcat(str, " ", sizeof(str)); - who_flags_qualifier(Client, Channel_UserModes(chan, c), - str, sizeof(str)); - strlcat(str, Channel_Name(chan), sizeof(str)); + who_flags_qualifier(Client, Channel_UserModes(chan, c), + str, sizeof(str)); + strlcat(str, Channel_Name(chan), sizeof(str)); - if (strlen(str) > (COMMAND_LEN - CHANNEL_NAME_LEN - 4)) { - /* Line becomes too long: send it! */ + if (strlen(str) > (COMMAND_LEN - CHANNEL_NAME_LEN - 4)) { + /* Line becomes too long: send it! */ + if (!IRC_WriteStrClient(Client, "%s", str)) + return DISCONNECTED; + snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG, + Client_ID(from), Client_ID(c)); + } + } + if(str[strlen(str) - 1] != ':') { + /* There is data left to send: */ if (!IRC_WriteStrClient(Client, "%s", str)) return DISCONNECTED; - snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG, - Client_ID(from), Client_ID(c)); } } - if(str[strlen(str) - 1] != ':') { - /* There is data left to send: */ - if (!IRC_WriteStrClient(Client, "%s", str)) - return DISCONNECTED; - } /* IRC-Services? */ if (Client_Type(c) == CLIENT_SERVICE && @@ -410,7 +407,7 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c) /* Local client and requester is the user itself or an IRC Op? */ if (Client_Conn(c) > NONE && - (from == c || (!Conf_MorePrivacy && Client_HasMode(from, 'o')))) { + (from == c || Client_HasMode(from, 'o'))) { /* Client hostname */ if (!IRC_WriteStrClient(from, RPL_WHOISHOST_MSG, Client_ID(from), Client_ID(c), @@ -561,7 +558,15 @@ IRC_INFO(CLIENT * Client, REQUEST * Req) NGIRCd_Version)) return DISCONNECTED; -#if defined(__DATE__) && defined(__TIME__) +#if defined(BIRTHDATE) + char t_str[60]; + time_t t = BIRTHDATE; + (void)strftime(t_str, sizeof(t_str), "%a %b %d %Y at %H:%M:%S (%Z)", + localtime(&t)); + snprintf(msg, sizeof(msg), "Birth Date: %s", t_str); + if (!IRC_WriteStrClient(Client, RPL_INFO_MSG, Client_ID(prefix), msg)) + return DISCONNECTED; +#elif defined(__DATE__) && defined(__TIME__) snprintf(msg, sizeof(msg), "Birth Date: %s at %s", __DATE__, __TIME__); if (!IRC_WriteStrClient(Client, RPL_INFO_MSG, Client_ID(prefix), msg)) return DISCONNECTED;