[IRC-Dev CVS] SF.net SVN: irc-dev: [191] ircd/trunk
Brought to you by:
zolty
From: <zo...@us...> - 2008-07-12 20:53:21
|
Revision: 191 http://irc-dev.svn.sourceforge.net/irc-dev/?rev=191&view=rev Author: zolty Date: 2008-07-12 13:53:24 -0700 (Sat, 12 Jul 2008) Log Message: ----------- nuevos modos usuario +ahBX y unificacion status Modified Paths: -------------- ircd/trunk/include/client.h ircd/trunk/include/numeric.h ircd/trunk/ircd/ircd_relay.c ircd/trunk/ircd/listener.c ircd/trunk/ircd/m_info.c ircd/trunk/ircd/m_invite.c ircd/trunk/ircd/m_kick.c ircd/trunk/ircd/m_lusers.c ircd/trunk/ircd/m_mode.c ircd/trunk/ircd/m_notice.c ircd/trunk/ircd/m_privmsg.c ircd/trunk/ircd/m_server.c ircd/trunk/ircd/m_settime.c ircd/trunk/ircd/m_trace.c ircd/trunk/ircd/m_userhost.c ircd/trunk/ircd/m_userip.c ircd/trunk/ircd/m_watch.c ircd/trunk/ircd/m_who.c ircd/trunk/ircd/m_whois.c ircd/trunk/ircd/m_whowas.c ircd/trunk/ircd/s_err.c ircd/trunk/ircd/s_numeric.c ircd/trunk/ircd/s_user.c ircd/trunk/ircd/watch.c Modified: ircd/trunk/include/client.h =================================================================== --- ircd/trunk/include/client.h 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/include/client.h 2008-07-12 20:53:24 UTC (rev 191) @@ -111,6 +111,8 @@ PRIV_LIST_CHAN, /**< oper can list secret channels */ PRIV_FORCE_OPMODE, /**< can hack modes on quarantined channels */ PRIV_FORCE_LOCAL_OPMODE, /**< can hack modes on quarantined local channels */ + PRIV_UMODE_K, /**< oper can set umode +k (Channel Service) */ + PRIV_UMODE_X, /**< oper can set umode +X (can view hidden host) */ #if defined(DDB) PRIV_DBQ, /**< oper can use DBQ (DataBase Query) */ #endif @@ -157,9 +159,13 @@ #elif defined(DDB) || defined(SERVICES) FLAG_NICKREG, /**< nick registered */ FLAG_NICKSUSPEND, /**< nick suspended */ + FLAG_HELPOPER, /**< nick is Help Operator */ + FLAG_ADMIN, /**< nick is Services Admin */ + FLAG_BOT, /**< nick is Services Bot */ #endif FLAG_MSGONLYREG, /**< only privmsg/notices from +r */ FLAG_HIDDENHOST, /**< user's host is hidden */ + FLAG_VIEWHIDDENHOST, /**< can view hiddenhost */ FLAG_SSL, /**< is a user with secure connection */ FLAG_LAST_FLAG, /**< number of flags */ FLAG_LOCAL_UMODES = FLAG_LOCOP, /**< First local mode flag */ @@ -590,6 +596,8 @@ #endif /** Return non-zero if the client has set mode +x (hidden host). */ #define IsHiddenHost(x) HasFlag(x, FLAG_HIDDENHOST) +/** Return non-zero if the client has set mode +X (can view hidden host). */ +#define IsViewHiddenHost(x) HasFlag(x, FLAG_VIEWHIDDENHOST) /** Return non-zero if the client has an active PING request. */ #define IsPingSent(x) HasFlag(x, FLAG_PINGSENT) #ifdef USE_SSL @@ -601,6 +609,12 @@ #define IsNickRegistered(x) HasFlag(x, FLAG_NICKREG) /** Return non-zero if the client has set mode +S (nick suspended) */ #define IsNickSuspended(x) HasFlag(x, FLAG_NICKSUSPEND) +/** Return non-zero if the client has set mode +h (Help Operator) */ +#define IsHelpOper(x) HasFlag(x, FLAG_HELPOPER) +/** Return non-zero if the client has set mode +a (Services Admin) */ +#define IsAdmin(x) HasFlag(x, FLAG_ADMIN) +/** Return non-zero if the client has set mode +B (Services Bot) */ +#define IsBot(x) HasFlag(x, FLAG_BOT) #endif /** Return non-zero if the client has set mode +R. */ #define IsMsgOnlyReg(x) HasFlag(x, FLAG_MSGONLYREG) @@ -654,6 +668,8 @@ #endif /** Mark a client as having mode +x (hidden host). */ #define SetHiddenHost(x) SetFlag(x, FLAG_HIDDENHOST) +/** Mark a client as having mode +X (can view hidden host). */ +#define SetViewHiddenHost(x) SetFlag(x, FLAG_VIEWHIDDENHOST) /** Mark a client as having a pending PING. */ #define SetPingSent(x) SetFlag(x, FLAG_PINGSENT) #ifdef USE_SSL @@ -665,6 +681,12 @@ #define SetNickRegistered(x) SetFlag(x, FLAG_NICKREG) /** Mark a client as having mode +S (nick suspended) */ #define SetNickSuspended(x) SetFlag(x, FLAG_NICKSUSPEND) +/** Mark a client as having mode +h (Help Operator) */ +#define SetHelpOper(x) SetFlag(x, FLAG_HELPOPER) +/** Mark a client as having mode +a (Services Admin) */ +#define SetAdmin(x) SetFlag(x, FLAG_ADMIN) +/** Mark a client as having mode +B (Services Bot) */ +#define SetBot(x) SetFlag(x, FLAG_BOT) #endif /** Mark a client as having mode +R. */ #define SetMsgOnlyReg(x) SetFlag(x, FLAG_MSGONLYREG) @@ -699,6 +721,8 @@ #define ClearServNotice(x) ClrFlag(x, FLAG_SERVNOTICE) /** Remove mode +x (hidden host) from the client. */ #define ClearHiddenHost(x) ClrFlag(x, FLAG_HIDDENHOST) +/** Remove mode +X (can view hidden host) from the client. */ +#define ClearViewHiddenHost(x) ClrFlag(x, FLAG_VIEWHIDDENHOST) /** Clear the client's pending PING flag. */ #define ClearPingSent(x) ClrFlag(x, FLAG_PINGSENT) #ifdef USE_SSL @@ -710,6 +734,12 @@ #define ClearNickRegistered(x) ClrFlag(x, FLAG_NICKREG) /** Remode mode +S (nick suspended) from the client */ #define ClearNickSuspended(x) ClrFlag(x, FLAG_NICKSUSPEND) +/** Remode mode +h (Help Operator) from the client */ +#define ClearHelpOper(x) ClrFlag(x, FLAG_HELPOPER) +/** Remode mode +A (Services Admin) from the client */ +#define ClearAdmin(x) ClrFlag(x, FLAG_ADMIN) +/** Remode mode +B (Services Bot) from the client */ +#define ClearBot(x) ClrFlag(x, FLAG_BOT) #endif /** Remove mode +R from the client. */ #define ClearMsgOnlyReg(x) ClrFlag(x, FLAG_MSGONLYREG) Modified: ircd/trunk/include/numeric.h =================================================================== --- ircd/trunk/include/numeric.h 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/include/numeric.h 2008-07-12 20:53:24 UTC (rev 191) @@ -224,7 +224,7 @@ /* RPL_ENDOFRULES 309 unreal */ /* RPL_WHOISHELPER 309 austnet */ /* RPL_WHOISSVCMSG 310 Dalnet */ -/* RPL_WHOISHELPOP 310 unreal */ +#define RPL_WHOISHELPOP 310 /* IRC-Dev, Unreal extension */ /* RPL_WHOISSERVICE 310 austnet */ #define RPL_WHOISUSER 311 /* See also RPL_ENDOFWHOIS */ #define RPL_WHOISSERVER 312 @@ -256,6 +256,7 @@ #define RPL_LISTUSAGE 334 /* Undernet extension */ /* RPL_COMMANDSYNTAX 334 Dalnet */ /* RPL_LISTSYNTAX 334 unreal */ +#define RPL_WHOISBOT 335 /* IRC-Dev, Unreal extension */ #define RPL_WHOISSSL 337 /* SSL */ /* RPL_CHANPASSOK 338 IRCnet extension (?)*/ #define RPL_WHOISACTUALLY 338 /* Undernet extension, dalnet */ Modified: ircd/trunk/ircd/ircd_relay.c =================================================================== --- ircd/trunk/ircd/ircd_relay.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/ircd_relay.c 2008-07-12 20:53:24 UTC (rev 191) @@ -369,7 +369,7 @@ return; #if defined(DDB) || defined(SERVICES) - if (IsMsgOnlyReg(acptr) && !IsNickRegistered(sptr) && !IsOper(sptr)) { + if (IsMsgOnlyReg(acptr) && !IsNickRegistered(sptr) && !IsAnOper(sptr)) { send_reply(sptr, ERR_NONONREG, cli_name(acptr)); return; } @@ -412,7 +412,7 @@ return; #if defined(DDB) || defined(SERVICES) - if (IsMsgOnlyReg(acptr) && !IsNickRegistered(sptr) && !IsOper(sptr)) + if (IsMsgOnlyReg(acptr) && !IsNickRegistered(sptr) && !IsAnOper(sptr)) return; #endif Modified: ircd/trunk/ircd/listener.c =================================================================== --- ircd/trunk/ircd/listener.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/listener.c 2008-07-12 20:53:24 UTC (rev 191) @@ -136,8 +136,8 @@ { struct Listener *listener = 0; char flags[8]; - int show_hidden = IsOper(sptr); - int count = (IsOper(sptr) || MyUser(sptr)) ? 100 : 8; + int show_hidden = IsAnOper(sptr); + int count = (IsAnOper(sptr) || MyUser(sptr)) ? 100 : 8; int port = 0; int len; Modified: ircd/trunk/ircd/m_info.c =================================================================== --- ircd/trunk/ircd/m_info.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_info.c 2008-07-12 20:53:24 UTC (rev 191) @@ -97,11 +97,11 @@ return 0; while (text[212]) { - if (!IsOper(sptr)) + if (!IsAnOper(sptr)) send_reply(sptr, RPL_INFO, *text); text++; } - if (IsOper(sptr)) + if (IsAnOper(sptr)) { while (*text) send_reply(sptr, RPL_INFO, *text++); @@ -135,11 +135,11 @@ { while (text[212]) { - if (!IsOper(sptr)) + if (!IsAnOper(sptr)) send_reply(sptr, RPL_INFO, *text); text++; } - if (IsOper(sptr) && (NULL != parv[1])) + if (IsAnOper(sptr) && (NULL != parv[1])) { while (*text) send_reply(sptr, RPL_INFO, *text++); Modified: ircd/trunk/ircd/m_invite.c =================================================================== --- ircd/trunk/ircd/m_invite.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_invite.c 2008-07-12 20:53:24 UTC (rev 191) @@ -116,7 +116,7 @@ /* If we get here, it was a VALID and meaningful INVITE */ #if defined(DDB) || defined(SERVICES) - if (IsMsgOnlyReg(acptr) && !IsNickRegistered(sptr) && !IsOper(sptr)) { + if (IsMsgOnlyReg(acptr) && !IsNickRegistered(sptr) && !IsAnOper(sptr)) { send_reply(sptr, ERR_NONONREG, cli_name(acptr)); return; } Modified: ircd/trunk/ircd/m_kick.c =================================================================== --- ircd/trunk/ircd/m_kick.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_kick.c 2008-07-12 20:53:24 UTC (rev 191) @@ -106,7 +106,7 @@ OpLevel(member) == OpLevel(member2) ? "the same" : "a higher"); #elif defined(DDB) || defined(SERVICES) /* Don't allow to kick channel owner */ - if (IsChanOwner(member) && !IsOper(sptr)) + if (IsChanOwner(member) && !IsAnOper(sptr)) return send_reply(sptr, ERR_ISCHANSERVICE, cli_name(who), chptr->chname); #endif Modified: ircd/trunk/ircd/m_lusers.c =================================================================== --- ircd/trunk/ircd/m_lusers.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_lusers.c 2008-07-12 20:53:24 UTC (rev 191) @@ -57,7 +57,7 @@ */ int m_lusers(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { - int longoutput = MyUser(sptr) || IsOper(sptr); + int longoutput = MyUser(sptr) || IsAnOper(sptr); if (parc > 2) if (hunt_server_cmd(sptr, CMD_LUSERS, cptr, feature_int(FEAT_HIS_REMOTE), "%s :%C", 2, parc, parv) != HUNTED_ISME) @@ -104,7 +104,7 @@ */ int ms_lusers(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { - int longoutput = MyUser(sptr) || IsOper(sptr); + int longoutput = MyUser(sptr) || IsAnOper(sptr); if (parc > 2) if (hunt_server_cmd(sptr, CMD_LUSERS, cptr, 0, "%s :%C", 2, parc, parv) != HUNTED_ISME) Modified: ircd/trunk/ircd/m_mode.c =================================================================== --- ircd/trunk/ircd/m_mode.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_mode.c 2008-07-12 20:53:24 UTC (rev 191) @@ -117,7 +117,7 @@ return modebuf_flush(&mbuf); #if 1 /* TRANSICION IRC-HISPANO */ - } else if (feature_bool(FEAT_TRANSICION_HISPANO) && IsOper(sptr) && strchr(parv[2], 'x')) { + } else if (feature_bool(FEAT_TRANSICION_HISPANO) && IsAnOper(sptr) && strchr(parv[2], 'x')) { modebuf_init(&mbuf, sptr, cptr, chptr, (MODEBUF_DEST_CHANNEL | /* Send MODE to channel */ MODEBUF_DEST_SERVER | /* And to server */ @@ -235,7 +235,7 @@ MODE_PARSE_FORCE), /* And force it to be accepted */ NULL); #if 1 /* TRANSICION IRC-HISPANO */ - } else if (IsOper(sptr) && strchr(parv[2], 'x')) { + } else if (IsAnOper(sptr) && strchr(parv[2], 'x')) { modebuf_init(&mbuf, sptr, cptr, chptr, (MODEBUF_DEST_CHANNEL | /* Send MODE to channel */ MODEBUF_DEST_SERVER | /* And to server */ Modified: ircd/trunk/ircd/m_notice.c =================================================================== --- ircd/trunk/ircd/m_notice.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_notice.c 2008-07-12 20:53:24 UTC (rev 191) @@ -132,7 +132,7 @@ /* * coming from another server, we have to check this here */ - else if ('$' == *name && IsOper(sptr)) { + else if ('$' == *name && IsAnOper(sptr)) { server_relay_masked_notice(sptr, name, parv[parc - 1]); } else if ((server = strchr(name, '@'))) { Modified: ircd/trunk/ircd/m_privmsg.c =================================================================== --- ircd/trunk/ircd/m_privmsg.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_privmsg.c 2008-07-12 20:53:24 UTC (rev 191) @@ -129,7 +129,7 @@ /* * coming from another server, we have to check this here */ - else if ('$' == *name && IsOper(sptr)) { + else if ('$' == *name && IsAnOper(sptr)) { server_relay_masked_message(sptr, name, parv[parc - 1]); } else if ((server = strchr(name, '@'))) { Modified: ircd/trunk/ircd/m_server.c =================================================================== --- ircd/trunk/ircd/m_server.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_server.c 2008-07-12 20:53:24 UTC (rev 191) @@ -561,7 +561,12 @@ return exit_client_msg(cptr, sptr, &me, "Bogus protocol (%s)", parv[5]); else if (prot < atoi(MINOR_PROTOCOL)) #if 1 /* TRANSICION IRC-HISPANO */ - prot = atoi(MINOR_PROTOCOL); + { + prot = atoi(MINOR_PROTOCOL); + /* Los P09 siempre son Services y hub */ + SetService(cptr); + SetHub(cptr); + } #else return exit_new_server(cptr, sptr, host, timestamp, "Incompatible protocol: %s", parv[5]); Modified: ircd/trunk/ircd/m_settime.c =================================================================== --- ircd/trunk/ircd/m_settime.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_settime.c 2008-07-12 20:53:24 UTC (rev 191) @@ -161,7 +161,7 @@ static char tbuf[11]; /* Must be a global oper */ - if (!IsOper(sptr)) + if (!IsAnOper(sptr)) return send_reply(sptr, ERR_NOPRIVILEGES); if (parc < 2) /* verify argument count */ Modified: ircd/trunk/ircd/m_trace.c =================================================================== --- ircd/trunk/ircd/m_trace.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_trace.c 2008-07-12 20:53:24 UTC (rev 191) @@ -143,7 +143,7 @@ if (!(acptr = LocalClientArray[i])) /* Local Connection? */ continue; - if (IsInvisible(acptr) && dow && !(MyConnect(sptr) && IsOper(sptr)) && + if (IsInvisible(acptr) && dow && !(MyConnect(sptr) && IsAnOper(sptr)) && !IsAnOper(acptr) && (acptr != sptr)) continue; if (!doall && wilds && match(tname, cli_name(acptr))) Modified: ircd/trunk/ircd/m_userhost.c =================================================================== --- ircd/trunk/ircd/m_userhost.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_userhost.c 2008-07-12 20:53:24 UTC (rev 191) @@ -53,7 +53,7 @@ * of +x. If an oper wants the real host, he should go to * /whois to get it. */ - HasHiddenHost(cptr) && !IsAnOper(sptr) && (sptr != cptr) ? + HasHiddenHost(cptr) && !IsViewHiddenHost(sptr) && (sptr != cptr) ? cli_user(cptr)->host : cli_user(cptr)->realhost); } Modified: ircd/trunk/ircd/m_userip.c =================================================================== --- ircd/trunk/ircd/m_userip.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_userip.c 2008-07-12 20:53:24 UTC (rev 191) @@ -54,7 +54,7 @@ * of +x. If an oper wants the real IP, he should go to * /whois to get it. */ - HasHiddenHost(cptr) && !IsAnOper(sptr) && (sptr != cptr) ? + HasHiddenHost(cptr) && !IsViewHiddenHost(sptr) && (sptr != cptr) ? feature_str(FEAT_HIDDEN_IP) : ircd_ntoa(&cli_ip(cptr))); } Modified: ircd/trunk/ircd/m_watch.c =================================================================== --- ircd/trunk/ircd/m_watch.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_watch.c 2008-07-12 20:53:24 UTC (rev 191) @@ -192,7 +192,7 @@ { send_reply(sptr, RPL_NOWON, cli_name(acptr), cli_user(acptr)->username, - HasHiddenHost(acptr) && !IsAnOper(sptr) ? + HasHiddenHost(acptr) && !IsViewHiddenHost(sptr) ? cli_user(acptr)->host : cli_user(acptr)->realhost, cli_lastnick(acptr)); } Modified: ircd/trunk/ircd/m_who.c =================================================================== --- ircd/trunk/ircd/m_who.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_who.c 2008-07-12 20:53:24 UTC (rev 191) @@ -191,7 +191,7 @@ if (fields & WHO_FIELD_NIP) { - const char* p2 = HasHiddenHost(acptr) && !IsAnOper(sptr) ? + const char* p2 = HasHiddenHost(acptr) && !IsViewHiddenHost(sptr) ? feature_str(FEAT_HIDDEN_IP) : ircd_ntoa(&cli_ip(acptr)); *(p1++) = ' '; @@ -283,9 +283,17 @@ *(p1++) = 'r'; if (IsNickSuspended(acptr)) *(p1++) = 'S'; + if (IsAdmin(acptr)) + *(p1++) = 'a'; + if (IsHelpOper(acptr)) + *(p1++) = 'h'; + if (IsBot(acptr)) + *(p1++) = 'B'; #endif if (HasHiddenHost(acptr)) *(p1++) = 'x'; + if (IsViewHiddenHost(acptr)) + *(p1++) = 'X'; } if (!fields || (fields & WHO_FIELD_DIS)) @@ -658,12 +666,12 @@ || matchexec(cli_user(acptr)->host, mymask, minlen)) && ((!(matchsel & WHO_FIELD_HOS)) || !HasHiddenHost(acptr) - || !IsAnOper(sptr) + || !IsViewHiddenHost(sptr) || matchexec(cli_user(acptr)->realhost, mymask, minlen)) && ((!(matchsel & WHO_FIELD_REN)) || matchexec(cli_info(acptr), mymask, minlen)) && ((!(matchsel & WHO_FIELD_NIP)) - || (HasHiddenHost(acptr) && !IsAnOper(sptr)) + || (HasHiddenHost(acptr) && !IsViewHiddenHost(sptr)) || !ipmask_check(&cli_ip(acptr), &imask, ibits)) #if defined(UNDERNET) && ((!(matchsel & WHO_FIELD_ACC)) @@ -699,12 +707,12 @@ || matchexec(cli_user(acptr)->host, mymask, minlen)) && ((!(matchsel & WHO_FIELD_HOS)) || !HasHiddenHost(acptr) - || !IsAnOper(sptr) + || !IsViewHiddenHost(sptr) || matchexec(cli_user(acptr)->realhost, mymask, minlen)) && ((!(matchsel & WHO_FIELD_REN)) || matchexec(cli_info(acptr), mymask, minlen)) && ((!(matchsel & WHO_FIELD_NIP)) - || (HasHiddenHost(acptr) && !IsAnOper(sptr)) + || (HasHiddenHost(acptr) && !IsViewHiddenHost(sptr)) || !ipmask_check(&cli_ip(acptr), &imask, ibits)) #if defined(UNDERNET) && ((!(matchsel & WHO_FIELD_ACC)) Modified: ircd/trunk/ircd/m_whois.c =================================================================== --- ircd/trunk/ircd/m_whois.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_whois.c 2008-07-12 20:53:24 UTC (rev 191) @@ -103,7 +103,7 @@ chptr = chan->channel; if (!ShowChannel(sptr, chptr) - && !(IsOper(sptr) && IsLocalChannel(chptr->chname))) + && !(IsAnOper(sptr) && IsLocalChannel(chptr->chname))) continue; if (acptr != sptr && IsZombie(chan)) @@ -154,6 +154,8 @@ if (user) { + char *modes = umode_str(acptr); + if (user->away) send_reply(sptr, RPL_AWAY, name, user->away); @@ -162,25 +164,26 @@ send_reply(sptr, RPL_WHOISREGNICK, name); else if (IsNickSuspended(acptr)) send_reply(sptr, RPL_WHOISSUSPEND, name); -#endif /* defined(DDB) || defined(SERVICES) */ if (SeeOper(sptr,acptr)) + send_reply(sptr, RPL_WHOISOPERATOR, name); + + if (IsBot(acptr)) + send_reply(sptr, RPL_WHOISBOT, name, feature_str(FEAT_NETWORK)); + +#else /* UNDERNET */ + if (SeeOper(sptr,acptr)) send_reply(sptr, RPL_WHOISOPERATOR, name); -#if defined(UNDERNET) if (IsAccount(acptr)) send_reply(sptr, RPL_WHOISACCOUNT, name, user->account); #endif - if (IsAnOper(sptr) || (acptr == sptr)) - { - char *modes = umode_str(acptr); - - if (HasHiddenHost(acptr)) + if (HasHiddenHost(acptr) && (IsViewHiddenHost(sptr) || (acptr == sptr))) send_reply(sptr, RPL_WHOISACTUALLY, name, user->username, user->realhost, ircd_ntoa(&cli_ip(acptr))); - send_reply(sptr, RPL_WHOISMODES, name, *modes ? modes : ""); - } + + send_reply(sptr, RPL_WHOISMODES, name, *modes ? modes : ""); #ifdef USE_SSL if (MyConnect(acptr) && IsSSL(acptr) && ((parc >= 3) || Modified: ircd/trunk/ircd/m_whowas.c =================================================================== --- ircd/trunk/ircd/m_whowas.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/m_whowas.c 2008-07-12 20:53:24 UTC (rev 191) @@ -91,10 +91,10 @@ { send_reply(sptr, RPL_WHOWASUSER, temp->name, temp->username, temp->hostname, temp->realname); - if (IsAnOper(sptr) && temp->realhost) + if (IsViewHiddenHost(sptr) && temp->realhost) send_reply(sptr, RPL_WHOISACTUALLY, temp->name, temp->username, temp->realhost, "<untracked>"); send_reply(sptr, RPL_WHOISSERVER, temp->name, - (feature_bool(FEAT_HIS_WHOIS_SERVERNAME) && !IsOper(sptr)) ? + (feature_bool(FEAT_HIS_WHOIS_SERVERNAME) && !IsAnOper(sptr)) ? feature_str(FEAT_HIS_SERVERNAME) : temp->servername, myctime(temp->logoff)); Modified: ircd/trunk/ircd/s_err.c =================================================================== --- ircd/trunk/ircd/s_err.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/s_err.c 2008-07-12 20:53:24 UTC (rev 191) @@ -663,7 +663,7 @@ /* 309 */ { 0 }, /* 310 */ - { 0 }, + { RPL_WHOISHELPOP, "%s :is available for help", "310" }, /* 311 */ { RPL_WHOISUSER, "%s %s %s * :%s", "311" }, /* 312 */ @@ -717,7 +717,7 @@ /* 334 */ { RPL_LISTUSAGE, ":%s", "334" }, /* 335 */ - { 0 }, + { RPL_WHOISBOT, "%s :is a \2Bot\2 on %s", "335" }, /* 336 */ { 0 }, /* 337 */ Modified: ircd/trunk/ircd/s_numeric.c =================================================================== --- ircd/trunk/ircd/s_numeric.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/s_numeric.c 2008-07-12 20:53:24 UTC (rev 191) @@ -108,7 +108,7 @@ * come from the local server */ if (acptr) - sendcmdto_one((feature_bool(FEAT_HIS_REWRITE) && !IsOper(acptr)) ? + sendcmdto_one((feature_bool(FEAT_HIS_REWRITE) && !IsAnOper(acptr)) ? &me : sptr, num, num, acptr, "%C %s", acptr, parv[2]); else Modified: ircd/trunk/ircd/s_user.c =================================================================== --- ircd/trunk/ircd/s_user.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/s_user.c 2008-07-12 20:53:24 UTC (rev 191) @@ -529,9 +529,13 @@ #elif defined(DDB) || defined(SERVICES) { FLAG_NICKREG, 'r' }, { FLAG_NICKSUSPEND, 'S' }, - { FLAG_MSGONLYREG, 'R' }, + { FLAG_ADMIN, 'a' }, + { FLAG_HELPOPER, 'h' }, + { FLAG_BOT, 'B' }, + { FLAG_MSGONLYREG, 'R' }, #endif - { FLAG_HIDDENHOST, 'x' } + { FLAG_HIDDENHOST, 'x' }, + { FLAG_VIEWHIDDENHOST, 'X' } }; /** Length of #userModeList. */ @@ -1081,7 +1085,7 @@ return 0; #if defined(DDB) || defined(SERVICES) - if (IsMsgOnlyReg(dest) && !IsNickRegistered(source) && !IsOper(source)) { + if (IsMsgOnlyReg(dest) && !IsNickRegistered(source) && !IsAnOper(source)) { if(!is_notice) send_reply(source, ERR_NONONREG, cli_name(source)); return 0; @@ -1381,7 +1385,7 @@ send_reply(sptr, RPL_UMODEIS, buf); if (HasFlag(sptr, FLAG_SERVNOTICE) && MyConnect(sptr) && cli_snomask(sptr) != - (unsigned int)(IsOper(sptr) ? SNO_OPERDEFAULT : SNO_DEFAULT)) + (unsigned int)(IsAnOper(sptr) ? SNO_OPERDEFAULT : SNO_DEFAULT)) send_reply(sptr, RPL_SNOMASK, cli_snomask(sptr), cli_snomask(sptr)); return 0; } @@ -1482,6 +1486,12 @@ if (what == MODE_ADD) do_host_hiding = 1; break; + case 'X': + if (what == MODE_ADD) + SetViewHiddenHost(sptr); + else + ClearViewHiddenHost(sptr); + break; #if defined(UNDERNET) case 'r': if (what == MODE_ADD) { @@ -1512,6 +1522,24 @@ else ClearNickSuspended(sptr); break; + case 'a': + if (what == MODE_ADD) + SetAdmin(sptr); + else + ClearAdmin(sptr); + break; + case 'h': + if (what == MODE_ADD) + SetHelpOper(sptr); + else + ClearHelpOper(sptr); + break; + case 'B': + if (what == MODE_ADD) + SetBot(sptr); + else + ClearBot(sptr); + break; case 'R': if (what == MODE_ADD) SetMsgOnlyReg(sptr); @@ -1546,8 +1574,10 @@ * new umode; servers can set it, local users cannot; * prevents users from /kick'ing or /mode -o'ing */ - if (!FlagHas(&setflags, FLAG_CHSERV)) + if (!FlagHas(&setflags, FLAG_CHSERV) && !HasPriv(sptr, PRIV_UMODE_K)) ClearChannelService(sptr); + if (!FlagHas(&setflags, FLAG_VIEWHIDDENHOST) && HasPriv(sptr, PRIV_UMODE_X)) + ClearViewHiddenHost(sptr); /* * only send wallops to opers */ @@ -1572,6 +1602,12 @@ ClearNickRegistered(sptr); if (!FlagHas(&setflags, FLAG_NICKSUSPEND) && IsNickSuspended(sptr)) ClearNickSuspended(sptr); + if (!FlagHas(&setflags, FLAG_ADMIN)) + ClearAdmin(sptr); + if (!FlagHas(&setflags, FLAG_HELPOPER)) + ClearHelpOper(sptr); + if (!FlagHas(&setflags, FLAG_BOT)) + ClearBot(sptr); #endif /* defined(DDB) || defined(SERVICES) */ } if (MyConnect(sptr)) Modified: ircd/trunk/ircd/watch.c =================================================================== --- ircd/trunk/ircd/watch.c 2008-07-12 16:50:33 UTC (rev 190) +++ ircd/trunk/ircd/watch.c 2008-07-12 20:53:24 UTC (rev 191) @@ -146,7 +146,7 @@ send_reply(lp->value.cptr, raw, cli_name(cptr), IsUser(cptr) ? cli_user(cptr)->username : "<N/A>", IsUser(cptr) ? - (HasHiddenHost(cptr) && !IsAnOper(lp->value.cptr) ? + (HasHiddenHost(cptr) && !IsViewHiddenHost(lp->value.cptr) ? cli_user(cptr)->host : cli_user(cptr)->realhost) : "<N/A>", wt_lasttime(wptr)); @@ -166,7 +166,7 @@ if ((acptr = FindUser(nick))) { send_reply(cptr, raw1, cli_name(acptr), cli_user(acptr)->username, - HasHiddenHost(acptr) && !IsAnOper(cptr) ? + HasHiddenHost(acptr) && !IsViewHiddenHost(cptr) ? cli_user(acptr)->host : cli_user(acptr)->realhost, cli_lastnick(acptr)); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |