2001-06-07 Kevin L. Mitchell <klmitch@mit.edu>
+ * ircd/s_stats.c (hunt_stats): forward-port from pl15 of all the
+ changes required to control remote stats
+
+ * ircd/s_numeric.c (do_numeric): rewrite numeric origins if
+ recipient is not an operator and HEAD_IN_SAND_REWRITE is defined
+ [forward-port from pl15]
+
+ * ircd/m_whowas.c (m_whowas): report server name only if requester
+ is an operator [forward-port from pl15]
+
+ * ircd/m_whois.c (do_whois): /whois <mynick> now correctly reports
+ my server; if HEAD_IN_SAND_REMOTE is 1, ignore the middle argument
+ and obtain the report from the user's server [forward-port from
+ pl15]
+
+ * ircd/m_who.c: add missing include for ircd_policy.h
+ [forward-port from pl15]
+
+ * ircd/m_version.c (m_version): require oper access for remote
+ /version if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
+
+ * ircd/m_time.c (m_time): require oper access for remote /time if
+ HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
+
+ * ircd/m_stats.c: pass extra argument to hunt_stats(); correct
+ missing semicolon [forward-port from pl15]
+
+ * ircd/m_nick.c (ms_nick): hide the origin of certain collision
+ kills [forward-port from pl15]
+
+ * ircd/m_motd.c (m_motd): require oper access for remote /motd if
+ HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
+
+ * ircd/m_lusers.c (m_lusers): require oper access for remote
+ /lusers if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
+
+ * ircd/m_burst.c (ms_burst): server-added bans are stored using
+ local server name, to hide remote server names; modes also are to
+ originate from the local server [forward-port from pl15]
+
+ * ircd/m_admin.c (m_admin): require oper access for remote /admin
+ if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
+
+ * ircd/channel.c (add_banid): if a server is adding a ban, use my
+ server name to hide the remote server's name [forward-port from
+ pl15]
+
+ * ircd/Makefile.in: ran make depend
+
+ * include/s_stats.h: hunt_stats() has to have an extra argument to
+ support the forward-port from pl15
+
+ * include/ircd_policy.h: #define HEAD_IN_SAND_STATS_P; add
+ HEAD_IN_SAND_{BANWHO,REWRITE,REMOTE} [forward-port from pl15]
+
* ircd/engine_poll.c (engine_loop): remove bogus assert that I
forgot to check in the events branch
#define HEAD_IN_SAND_STATS_M
#define HEAD_IN_SAND_STATS_m
#define HEAD_IN_SAND_STATS_O
-#undef HEAD_IN_SAND_STATS_P
+#define HEAD_IN_SAND_STATS_P
#define HEAD_IN_SAND_STATS_R
#define HEAD_IN_SAND_STATS_D
#define HEAD_IN_SAND_STATS_d
#define HEAD_IN_SAND_WHOIS_SERVERNAME
#define HEAD_IN_SAND_WHO_SERVERNAME
+/* CFV-165 - Hiding Nonessential information from non-opers
+ *
+ */
+
+/* don't show which server set a ban */
+#define HEAD_IN_SAND_BANWHO
+
+/* remap remote numerics to come from the local server */
+#define HEAD_IN_SAND_REWRITE
+
+/* disallow remote queries (*sob!*) */
+/* (note, set this to 1 to reenable, not undef */
+#define HEAD_IN_SAND_REMOTE 0
+
#endif /* INCLUDED_ircd_policy_h */
extern const char *statsinfo[];
extern void report_stats(struct Client *sptr, char stat);
extern void report_configured_links(struct Client *sptr, int mask);
-extern int hunt_stats(struct Client* cptr, struct Client* sptr, int parc, char* parv[], char stat);
+extern int hunt_stats(struct Client* cptr, struct Client* sptr, int parc, char* parv[], char stat, int MustBeOper);
extern void report_crule_list(struct Client* to, int mask);
extern void report_motd_list(struct Client* to);
../include/hash.h ../include/ircd.h ../include/struct.h \
../include/ircd_alloc.h ../include/fda.h ../include/ircd_chattr.h \
../include/ircd_features.h ../include/ircd_log.h \
- ../include/ircd_reply.h ../include/ircd_snprintf.h \
- ../include/ircd_string.h ../include/list.h ../include/match.h \
- ../include/msg.h ../include/numeric.h ../include/numnicks.h \
- ../include/querycmds.h ../include/s_bsd.h ../include/s_conf.h \
- ../include/s_debug.h ../include/s_misc.h ../include/s_user.h \
- ../include/send.h ../include/sprintf_irc.h ../include/support.h \
- ../include/sys.h ../include/whowas.h
+ ../include/ircd_policy.h ../include/ircd_reply.h \
+ ../include/ircd_snprintf.h ../include/ircd_string.h ../include/list.h \
+ ../include/match.h ../include/msg.h ../include/numeric.h \
+ ../include/numnicks.h ../include/querycmds.h ../include/s_bsd.h \
+ ../include/s_conf.h ../include/s_debug.h ../include/s_misc.h \
+ ../include/s_user.h ../include/send.h ../include/sprintf_irc.h \
+ ../include/support.h ../include/sys.h ../include/whowas.h
class.o: class.c ../config.h ../include/class.h ../include/client.h \
../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \
../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \
m_admin.o: m_admin.c ../config.h ../include/client.h \
../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \
../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \
- ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \
- ../include/msg.h ../include/numeric.h ../include/numnicks.h \
- ../include/s_conf.h ../include/s_user.h
+ ../include/ircd.h ../include/struct.h ../include/ircd_policy.h \
+ ../include/ircd_reply.h ../include/msg.h ../include/numeric.h \
+ ../include/numnicks.h ../include/s_conf.h ../include/s_user.h
m_away.o: m_away.c ../config.h ../include/client.h \
../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \
../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \
../include/ircd_defs.h ../include/client.h ../include/dbuf.h \
../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \
../include/hash.h ../include/ircd.h ../include/struct.h \
- ../include/ircd_alloc.h ../include/fda.h ../include/ircd_reply.h \
- ../include/ircd_string.h ../include/ircd_chattr.h ../include/list.h \
- ../include/match.h ../include/msg.h ../include/numeric.h \
- ../include/numnicks.h ../include/s_conf.h ../include/s_misc.h \
- ../include/send.h ../include/support.h
+ ../include/ircd_alloc.h ../include/fda.h ../include/ircd_policy.h \
+ ../include/ircd_reply.h ../include/ircd_string.h \
+ ../include/ircd_chattr.h ../include/list.h ../include/match.h \
+ ../include/msg.h ../include/numeric.h ../include/numnicks.h \
+ ../include/s_conf.h ../include/s_misc.h ../include/send.h \
+ ../include/support.h
m_clearmode.o: m_clearmode.c ../config.h ../include/client.h \
../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \
../include/ircd_events.h ../include/ircd_handler.h \
m_lusers.o: m_lusers.c ../config.h ../include/client.h \
../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \
../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \
- ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \
- ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \
- ../include/numnicks.h ../include/querycmds.h \
+ ../include/struct.h ../include/ircd_policy.h ../include/ircd_reply.h \
+ ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \
+ ../include/numeric.h ../include/numnicks.h ../include/querycmds.h \
../include/ircd_features.h ../include/s_user.h ../include/s_serv.h \
../include/send.h
m_map.o: m_map.c ../config.h ../include/client.h \
m_motd.o: m_motd.c ../config.h ../include/client.h \
../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \
../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \
- ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \
- ../include/ircd_chattr.h ../include/match.h ../include/motd.h \
- ../include/msg.h ../include/numeric.h ../include/numnicks.h \
- ../include/s_conf.h ../include/class.h ../include/s_user.h \
- ../include/send.h
+ ../include/struct.h ../include/ircd_policy.h ../include/ircd_reply.h \
+ ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \
+ ../include/motd.h ../include/msg.h ../include/numeric.h \
+ ../include/numnicks.h ../include/s_conf.h ../include/class.h \
+ ../include/s_user.h ../include/send.h
m_names.o: m_names.c ../config.h ../include/channel.h \
../include/ircd_defs.h ../include/client.h ../include/dbuf.h \
../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \
m_time.o: m_time.c ../config.h ../include/client.h \
../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \
../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \
- ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \
- ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \
- ../include/numnicks.h ../include/s_misc.h ../include/s_user.h \
- ../include/send.h
+ ../include/struct.h ../include/ircd_policy.h ../include/ircd_reply.h \
+ ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \
+ ../include/numeric.h ../include/numnicks.h ../include/s_misc.h \
+ ../include/s_user.h ../include/send.h
m_topic.o: m_topic.c ../config.h ../include/channel.h \
../include/ircd_defs.h ../include/client.h ../include/dbuf.h \
../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \
../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \
../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \
../include/ircd.h ../include/struct.h ../include/ircd_features.h \
- ../include/ircd_reply.h ../include/ircd_string.h \
- ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \
- ../include/numnicks.h ../include/s_debug.h ../include/s_user.h \
- ../include/send.h ../include/supported.h ../include/channel.h \
- ../include/version.h
+ ../include/ircd_policy.h ../include/ircd_reply.h \
+ ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \
+ ../include/numeric.h ../include/numnicks.h ../include/s_debug.h \
+ ../include/s_user.h ../include/send.h ../include/supported.h \
+ ../include/channel.h ../include/version.h
m_wallchops.o: m_wallchops.c ../config.h ../include/channel.h \
../include/ircd_defs.h ../include/client.h ../include/dbuf.h \
../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \
../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \
../include/hash.h ../include/ircd.h ../include/struct.h \
../include/ircd_chattr.h ../include/ircd_log.h \
- ../include/ircd_reply.h ../include/ircd_string.h ../include/match.h \
- ../include/numeric.h ../include/numnicks.h ../include/send.h \
- ../include/support.h ../include/whocmds.h
+ ../include/ircd_policy.h ../include/ircd_reply.h \
+ ../include/ircd_string.h ../include/match.h ../include/numeric.h \
+ ../include/numnicks.h ../include/send.h ../include/support.h \
+ ../include/whocmds.h
m_whois.o: m_whois.c ../config.h ../include/channel.h \
../include/ircd_defs.h ../include/client.h ../include/dbuf.h \
../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \
m_whowas.o: m_whowas.c ../config.h ../include/client.h \
../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \
../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \
- ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \
- ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \
- ../include/numeric.h ../include/numnicks.h ../include/s_user.h \
- ../include/s_misc.h ../include/send.h ../include/whowas.h
+ ../include/ircd.h ../include/struct.h ../include/ircd_policy.h \
+ ../include/ircd_reply.h ../include/ircd_string.h \
+ ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \
+ ../include/numnicks.h ../include/s_user.h ../include/s_misc.h \
+ ../include/send.h ../include/whowas.h
match.o: match.c ../config.h ../include/match.h \
../include/ircd_chattr.h
motd.o: motd.c ../config.h ../include/motd.h ../include/class.h \
../include/channel.h ../include/ircd_defs.h ../include/client.h \
../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \
../include/ircd_handler.h ../include/hash.h ../include/ircd.h \
- ../include/struct.h ../include/ircd_snprintf.h ../include/numnicks.h \
- ../include/send.h
+ ../include/struct.h ../include/ircd_policy.h \
+ ../include/ircd_snprintf.h ../include/numnicks.h ../include/send.h
s_serv.o: s_serv.c ../config.h ../include/s_serv.h \
../include/IPcheck.h ../include/channel.h ../include/ircd_defs.h \
../include/client.h ../include/dbuf.h ../include/msgq.h \
#include "ircd_defs.h"
#include "ircd_features.h"
#include "ircd_log.h"
+#include "ircd_policy.h"
#include "ircd_reply.h"
#include "ircd_snprintf.h"
#include "ircd_string.h"
assert(0 != ban->value.ban.banstr);
strcpy(ban->value.ban.banstr, banid);
- ban->value.ban.who = (char*) MyMalloc(strlen(cli_name(cptr)) + 1);
+#ifdef HEAD_IN_SAND_BANWHO
+ if (IsServer(cptr))
+ DupString(ban->value.ban.who, cli_name(&me));
+ else
+#endif
+ DupString(ban->value.ban.who, cli_name(cptr));
assert(0 != ban->value.ban.who);
- strcpy(ban->value.ban.who, cli_name(cptr));
ban->value.ban.when = TStime();
ban->flags = CHFL_BAN; /* This bit is never used I think... */
#include "client.h"
#include "hash.h"
#include "ircd.h"
+#include "ircd_policy.h"
#include "ircd_reply.h"
#include "msg.h"
#include "numeric.h"
return send_reply(sptr, ERR_NOSUCHSERVER, parv[1]);
parv[1] = cli_name(acptr);
- if (hunt_server_cmd(sptr, CMD_ADMIN, cptr, 0, ":%C", 1, parc, parv) != HUNTED_ISME)
+ if (hunt_server_cmd(sptr, CMD_ADMIN, cptr, HEAD_IN_SAND_REMOTE, ":%C", 1,
+ parc, parv) != HUNTED_ISME)
return 0;
}
return send_admin_info(sptr);
#include "hash.h"
#include "ircd.h"
#include "ircd_alloc.h"
+#include "ircd_policy.h"
#include "ircd_reply.h"
#include "ircd_string.h"
#include "list.h"
if (!chptr->creationtime || chptr->creationtime > timestamp) {
chptr->creationtime = timestamp;
- modebuf_init(mbuf = &modebuf, sptr, cptr, chptr, MODEBUF_DEST_CHANNEL);
+ modebuf_init(mbuf = &modebuf, &me, cptr, chptr, MODEBUF_DEST_CHANNEL);
modebuf_mode(mbuf, MODE_DEL | chptr->mode.mode); /* wipeout modes */
chptr->mode.mode &= ~(MODE_ADD | MODE_DEL | MODE_PRIVATE | MODE_SECRET |
MODE_MODERATED | MODE_TOPICLIMIT | MODE_INVITEONLY |
for (lp = chptr->banlist; lp; lp = lp->next)
lp->flags |= CHFL_BURST_BAN_WIPEOUT;
} else if (chptr->creationtime == timestamp) {
- modebuf_init(mbuf = &modebuf, sptr, cptr, chptr, MODEBUF_DEST_CHANNEL);
+ modebuf_init(mbuf = &modebuf, &me, cptr, chptr, MODEBUF_DEST_CHANNEL);
parse_flags |= MODE_PARSE_SET; /* set new modes */
}
newban = make_link(); /* create new ban */
DupString(newban->value.ban.banstr, ban);
+#ifdef HEAD_IN_SAND_BANWHO
+ DupString(newban->value.ban.who, cli_name(&me));
+#else
DupString(newban->value.ban.who, cli_name(sptr));
+#endif
newban->value.ban.when = TStime();
newban->flags = CHFL_BAN | CHFL_BURST_BAN; /* set flags */
#endif /* 0 */
#include "client.h"
#include "ircd.h"
+#include "ircd_policy.h"
#include "ircd_reply.h"
#include "ircd_string.h"
#include "msg.h"
{
int longoutput = MyUser(sptr) || IsOper(sptr);
if (parc > 2)
- if (hunt_server_cmd(sptr, CMD_LUSERS, cptr, 0, "%s :%C", 2, parc, parv) !=
- HUNTED_ISME)
+ if (hunt_server_cmd(sptr, CMD_LUSERS, cptr, HEAD_IN_SAND_REMOTE, "%s :%C",
+ 2, parc, parv) != HUNTED_ISME)
return 0;
send_reply(sptr, RPL_LUSERCLIENT, UserStats.clients - UserStats.inv_clients,
#endif /* 0 */
#include "client.h"
#include "ircd.h"
+#include "ircd_policy.h"
#include "ircd_reply.h"
#include "ircd_string.h"
#include "match.h"
*/
int m_motd(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
{
- if (hunt_server_cmd(sptr, CMD_MOTD, cptr, 0, "%C", 1, parc, parv) !=
- HUNTED_ISME)
+ if (hunt_server_cmd(sptr, CMD_MOTD, cptr, HEAD_IN_SAND_REMOTE, "%C", 1,
+ parc, parv) != HUNTED_ISME)
return 0;
return motd_send(sptr);
(!differ && lastnick <= cli_lastnick(acptr))) {
if (!IsServer(sptr)) {
++ServerStats->is_kill;
- sendcmdto_serv_butone(&me, CMD_KILL, sptr, "%C :%s (%s <- %s (Nick "
- "collision))", sptr, cli_name(&me), cli_name(cli_from(acptr)),
- cli_name(cptr));
+ sendcmdto_serv_butone(&me, CMD_KILL, sptr, "%C :%s (Nick collision)",
+ sptr, cli_name(&me));
assert(!MyConnect(sptr));
cli_flags(sptr) |= FLAGS_KILLED;
* This exits the client we had before getting the NICK message
*/
if (differ) {
- sendcmdto_serv_butone(&me, CMD_KILL, acptr, "%C :%s (%s <- %s (older "
- "nick overruled))", acptr, cli_name(&me),
- cli_name(cli_from(acptr)), cli_name(cptr));
+ sendcmdto_serv_butone(&me, CMD_KILL, acptr, "%C :%s (older nick "
+ "overruled)", acptr, cli_name(&me));
if (MyConnect(acptr))
sendcmdto_one(acptr, CMD_QUIT, cptr, ":Local kill by %s (Ghost)",
cli_name(&me));
exit_client(cptr, acptr, &me, "Nick collision (older nick overruled)");
}
else {
- sendcmdto_serv_butone(&me, CMD_KILL, acptr, "%C :%s (%s <- %s (nick "
- "collision from same user@host))", acptr, cli_name(&me),
- cli_name(cli_from(acptr)), cli_name(cptr));
+ sendcmdto_serv_butone(&me, CMD_KILL, acptr, "%C :%s (nick collision from "
+ "same user@host)", acptr, cli_name(&me));
if (MyConnect(acptr))
sendcmdto_one(acptr, CMD_QUIT, cptr, ":Local kill by %s (Ghost: ",
"switched servers too fast)", cli_name(&me));
char stat = parc > 1 ? parv[1][0] : '\0';
const char **infotext = statsinfo;
- if (hunt_stats(cptr, sptr, parc, parv, stat) != HUNTED_ISME)
+ if (hunt_stats(cptr, sptr, parc, parv, stat, HEAD_IN_SAND_REMOTE)
+ != HUNTED_ISME)
return 0;
switch (stat)
* interpret the fourth parameter as the port number.
*/
#ifdef HEAD_IN_SAND_STATS_P
- return m_not_oper(sptr,cptr,parc,parv)
+ return m_not_oper(sptr,cptr,parc,parv);
#else
show_ports(sptr, 0, (parc > 3) ? atoi(parv[3]) : 0, 100);
#endif
char stat = parc > 1 ? parv[1][0] : '\0';
int i;
- if (hunt_stats(cptr, sptr, parc, parv, stat) != HUNTED_ISME)
+ if (hunt_stats(cptr, sptr, parc, parv, stat, 0) != HUNTED_ISME)
return 0;
switch (stat)
const char** infotext = statsinfo;
int i;
- if (hunt_stats(cptr, sptr, parc, parv, stat) != HUNTED_ISME)
+ if (hunt_stats(cptr, sptr, parc, parv, stat, HEAD_IN_SAND_REMOTE)
+ != HUNTED_ISME)
return 0;
switch (stat)
#endif /* 0 */
#include "client.h"
#include "ircd.h"
+#include "ircd_policy.h"
#include "ircd_reply.h"
#include "ircd_string.h"
#include "msg.h"
*/
int m_time(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
{
- if (hunt_server_cmd(sptr, CMD_TIME, cptr, 0, ":%C", 1, parc, parv) !=
- HUNTED_ISME)
+ if (hunt_server_cmd(sptr, CMD_TIME, cptr, HEAD_IN_SAND_REMOTE, ":%C", 1,
+ parc, parv) != HUNTED_ISME)
return 0;
send_reply(sptr, RPL_TIME, cli_name(&me), TStime(), TSoffset, date((long)0));
#include "hash.h"
#include "ircd.h"
#include "ircd_features.h"
+#include "ircd_policy.h"
#include "ircd_reply.h"
#include "ircd_string.h"
#include "msg.h"
parv[1] = cli_name(acptr);
}
- if (hunt_server_cmd(sptr, CMD_VERSION, cptr, 0, ":%C", 1, parc, parv) ==
- HUNTED_ISME)
+ if (hunt_server_cmd(sptr, CMD_VERSION, cptr, HEAD_IN_SAND_REMOTE, ":%C", 1,
+ parc, parv) == HUNTED_ISME)
{
char featurebuf[512];
#include "ircd.h"
#include "ircd_chattr.h"
#include "ircd_log.h"
+#include "ircd_policy.h"
#include "ircd_reply.h"
#include "ircd_string.h"
#include "match.h"
}
#ifdef HEAD_IN_SAND_WHOIS_SERVERNAME
- if (!IsAnOper(sptr) && sptr != a2cptr)
+ if (!IsAnOper(sptr) && sptr != acptr)
send_reply(sptr, RPL_WHOISSERVER, name, "*.undernet.org",
"The Undernet Underworld");
else
* it with the correct servername - as is needed by hunt_server().
* This is the secret behind the /whois nick nick trick.
*/
+#if HEAD_IN_SAND_REMOTE
+ /* If remote queries are disabled, then use the *second* parameter of
+ * of whois, so /whois nick nick still works.
+ */
+ acptr = FindUser(parv[2]);
+#else
acptr = FindUser(parv[1]);
+#endif
if (acptr)
parv[1] = cli_name(cli_user(acptr)->server);
if (hunt_server_cmd(sptr, CMD_WHOIS, cptr, 0, "%C :%s", 1, parc, parv) !=
#include "client.h"
#include "hash.h"
#include "ircd.h"
+#include "ircd_policy.h"
#include "ircd_reply.h"
#include "ircd_string.h"
#include "msg.h"
{
send_reply(sptr, RPL_WHOWASUSER, temp->name, temp->username,
temp->hostname, temp->realname);
- send_reply(sptr, RPL_WHOISSERVER, temp->name, temp->servername,
- myctime(temp->logoff));
+#ifdef HEAD_IN_SAND_WHOIS_SERVERNAME
+ if (!IsOper(sptr))
+ send_reply(sptr, RPL_WHOISSERVER, temp->name, "*.undernet.org",
+ myctime(temp->logoff));
+ else
+#endif
+ send_reply(sptr, RPL_WHOISSERVER, temp->name, temp->servername,
+ myctime(temp->logoff));
if (temp->away)
send_reply(sptr, RPL_AWAY, temp->name, temp->away);
cur++;
#include "client.h"
#include "hash.h"
#include "ircd.h"
+#include "ircd_policy.h"
#include "ircd_snprintf.h"
#include "numnicks.h"
#include "send.h"
ircd_snprintf(0, num, sizeof(num), "%03d", numeric);
- if (acptr)
- sendcmdto_one(sptr, num, num, acptr, "%C %s", acptr, parv[2]);
- else
- sendcmdto_channel_butone(sptr, num, num, achptr, cptr,
- SKIP_DEAF | SKIP_BURST, "%H %s", achptr, parv[2]);
+#ifdef HEAD_IN_SAND_REWRITE
+ /* Since 2.10.10.pl14 we rewrite numerics from remote servers to appear to
+ * come from the local server
+ */
+ if (IsOper(acptr)) {
+#endif
+ if (acptr)
+ sendcmdto_one(sptr, num, num, acptr, "%C %s", acptr, parv[2]);
+ else
+ sendcmdto_channel_butone(sptr, num, num, achptr, cptr,
+ SKIP_DEAF | SKIP_BURST, "%H %s", achptr,
+ parv[2]);
+#ifdef HEAD_IN_SAND_REWRITE
+ } else {
+ if (acptr)
+ sendcmdto_one(&me, num, num, acptr, "%C %s", acptr, parv[2]);
+ else
+ sendcmdto_channel_butone(&me, num, num, achptr, cptr,
+ SKIP_DEAF | SKIP_BURST, "%H %s", achptr,
+ parv[2]);
+ }
+#endif
return 0;
}
* thusly once all the hubs have upgraded local opers will be able
* to remote stats anywhere on the network.
*/
-int hunt_stats(struct Client* cptr, struct Client* sptr, int parc, char* parv[], char stat)
+int hunt_stats(struct Client* cptr, struct Client* sptr, int parc, char* parv[], char stat, int MustBeOper)
{
switch (stat)
{
case 'u':
case 'F':
case 'f':
- return hunt_server_cmd(sptr, CMD_STATS, cptr, 0, "%s :%C", 2, parc,
- parv);
+ return hunt_server_cmd(sptr, CMD_STATS, cptr, MustBeOper, "%s :%C", 2,
+ parc, parv);
/* open to all, varying # of params */
case 'k':
case 'P':
{
if (parc > 3)
- return hunt_server_cmd(sptr, CMD_STATS, cptr, 0, "%s %C :%s", 2, parc, parv);
+ return hunt_server_cmd(sptr, CMD_STATS, cptr, MustBeOper, "%s %C :%s",
+ 2, parc, parv);
else
- return hunt_server_cmd(sptr, CMD_STATS, cptr, 0, "%s :%C", 2, parc, parv);
+ return hunt_server_cmd(sptr, CMD_STATS, cptr, MustBeOper, "%s :%C", 2,
+ parc, parv);
}
/* oper only, varying # of params */
case 'M':
{
if (parc == 4)
- return hunt_server_cmd(sptr, CMD_STATS, cptr, MyUser(sptr) ? 1 : 0, "%s %C :%s", 2, parc, parv);
+ return hunt_server_cmd(sptr, CMD_STATS, cptr,
+ MyUser(sptr) ? 1 : MustBeOper, "%s %C :%s", 2,
+ parc, parv);
else if (parc > 4)
- return hunt_server_cmd(sptr, CMD_STATS, cptr, MyUser(sptr) ? 1 : 0, "%s %C %s :%s", 2, parc, parv);
+ return hunt_server_cmd(sptr, CMD_STATS, cptr,
+ MyUser(sptr) ? 1 : MustBeOper, "%s %C %s :%s",
+ 2, parc, parv);
else
- return hunt_server_cmd(sptr, CMD_STATS, cptr, MyUser(sptr) ? 1 : 0, "%s :%C", 2, parc, parv);
+ return hunt_server_cmd(sptr, CMD_STATS, cptr,
+ MyUser(sptr) ? 1 : MustBeOper, "%s :%C", 2,
+ parc, parv);
}
/* oper only, standard # of params */
default:
- return hunt_server_cmd(sptr, CMD_STATS, cptr, MyUser(sptr) ? 1 : 0, "%s :%C", 2, parc, parv);
+ return hunt_server_cmd(sptr, CMD_STATS, cptr,
+ MyUser(sptr) ? 1 : MustBeOper, "%s :%C", 2, parc,
+ parv);
}
}