":Your client may not be compatible with this server.");
send_reply(cptr, SND_EXPLICIT | ERR_BADPING,
":Compatible clients are available at "
- "ftp://ftp.undernet.org/pub/irc/clients");
+ URL_CLIENTS);
}
exit_client_msg(cptr,cptr,&me, "Ping Timeout");
continue;
if ((host = strchr(name, '%')))
*host++ = '\0';
+ /* As reported by Vampire-, it's possible to brute force finding users
+ * by sending a message to each server and see which one succeeded.
+ * This means we have to remove error reporting. Sigh. Better than
+ * removing the ability to send directed messages to client servers
+ * Thanks for the suggestion Vampire=. -- Isomer 2001-08-28
+ * Argh, /ping nick@server, disallow messages to non +k clients :/ I hate
+ * this. -- Isomer 2001-09-16
+ */
if (!(acptr = FindUser(name)) || !MyUser(acptr) ||
- (!EmptyString(host) && 0 != match(host, cli_user(acptr)->host))) {
+ (!EmptyString(host) && 0 != match(host, cli_user(acptr)->host)) ||
+ !IsChannelService(acptr)) {
+#if 0
send_reply(sptr, ERR_NOSUCHNICK, name);
+#endif
return;
}
* nickname addressed?
*/
if (0 == (acptr = findNUser(name)) || !IsUser(acptr)) {
- send_reply(sptr, SND_EXPLICIT | ERR_NOSUCHNICK, "* :Target left UnderNet. "
+ send_reply(sptr, SND_EXPLICIT | ERR_NOSUCHNICK, "* :Target left " NETWORK ". "
"Failed to deliver: [%.20s]", text);
return;
}
}
start = end;
}
- if (*start)
- vector[count++] = start;
-
+ if (*start) {
+ for (i = 0; i < count; ++i) {
+ if (0 == ircd_strcmp(vector[i], start))
+ return count;
+ vector[count++] = start;
+ }
+ }
return count;
}
MAGIC_REMOTE_JOIN_TS != chanTS)
cli_serv(cli_user(sptr)->server)->lag = TStime() - chanTS;
- /* If this server is >5 minutes fast, squit it */
- if (TStime() - chanTS<-5*60*60)
- return exit_client(sptr, sptr, &me, "Timestamp Drift/Bogus TS");
+ /* If this server is >1 minute fast, warn */
+ if (TStime() - chanTS<-60) {
+ static int rate;
+ sendto_opmask_butone_ratelimited(0,SNO_NETWORK,&rate,
+ "Timestamp drift from %s (%is)",cli_name(cptr),chanTS-TStime());
+
+ /* If this server is >5 minutes fast, squit it */
+ if (TStime() - chanTS<-5*60*60)
+ return exit_client(sptr, sptr, &me, "Timestamp Drift/Bogus TS");
+ }
/* For each channel in the comma seperated list: */
for (name = ircd_strtok(&p, parv[1], ","); name;
#include "hash.h"
#include "ircd.h"
#include "ircd_log.h"
+#include "ircd_policy.h"
#include "ircd_reply.h"
#include "ircd_snprintf.h"
#include "ircd_string.h"
*/
if (MyConnect(victim))
sendcmdto_one(IsServer(sptr) ? &me : sptr, CMD_KILL, victim,
- "%C :%s%s", victim, IsServer(sptr) ? "*.undernet.org" :
+ "%C :%s%s", victim, IsServer(sptr) ? HEAD_IN_SAND_SERVERNAME :
cli_name(sptr), comment);
ircd_snprintf(0, buf, sizeof(buf), "Killed (%s%s)", IsServer(sptr) ?
- "*.undernet.org" : cli_name(sptr), comment);
+ HEAD_IN_SAND_SERVERNAME : cli_name(sptr), comment);
return exit_client(cptr, victim, sptr, buf);
}
#include "client.h"
#include "ircd.h"
+#include "ircd_defs.h"
#include "ircd_policy.h"
#include "ircd_reply.h"
#include "ircd_string.h"
send_reply(sptr, RPL_ENDOFLINKS, parc < 2 ? "*" : parv[1]);
sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :%s", sptr,
- "/LINKS has been disabled, from CFV-165. "
- "Visit http://www.undernet.org/servers.php");
+ "/LINKS has been disabled, from CFV-165. Visit " URL_SERVERS );
return 0;
}
#endif
#include "client.h"
#include "ircd.h"
+#include "ircd_defs.h"
#include "ircd_policy.h"
#include "ircd_reply.h"
#include "ircd_snprintf.h"
{
sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :%s", sptr,
"/MAP has been disabled, from CFV-165. "
- "Visit http://www.undernet.org/servers.php");
+ "Visit " URL_SERVERS);
return 0;
}
#endif
#include "ircd_chattr.h"
#include "ircd_reply.h"
#include "ircd_string.h"
+#include "ircd_policy.h"
#include "msg.h"
#include "numeric.h"
#include "numnicks.h"
* if sptr is a server it is exited here, nothing else to do
*/
return exit_client_msg(cptr, sptr, &me,
- "Killed (*.undernet.org (%s <- %s))",
+ "Killed (" HEAD_IN_SAND_SERVERNAME " (%s <- %s))",
cli_name(cli_from(acptr)), cli_name(cptr));
}
cli_flags(sptr) |= FLAGS_KILLED;
exit_client(cptr, sptr, &me,
- "Killed (*.undernet.org (Nick collision))");
+ "Killed (" HEAD_IN_SAND_SERVERNAME " (Nick collision))");
/*
* we have killed sptr off, zero out it's pointer so if it's used
* again we'll know about it --Bleep
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, ":Killed (*.undernet.org (older "
+ sendcmdto_one(acptr, CMD_QUIT, cptr, ":Killed (" HEAD_IN_SAND_SERVERNAME " (older "
"nick overruled))");
- sendcmdto_one(&me, CMD_KILL, acptr, "%C :*.undernet.org (older nick "
+ sendcmdto_one(&me, CMD_KILL, acptr, "%C :" HEAD_IN_SAND_SERVERNAME " (older nick "
"overruled)", acptr);
}
- exit_client(cptr, acptr, &me, "Killed (*.undernet.org (older nick "
+ exit_client(cptr, acptr, &me, "Killed (" HEAD_IN_SAND_SERVERNAME " (older nick "
"overruled))");
}
else {
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, ":Killed (*.undernet.org (nick "
+ sendcmdto_one(acptr, CMD_QUIT, cptr, ":Killed (" HEAD_IN_SAND_SERVERNAME " (nick "
"collision from same user@host))");
- sendcmdto_one(&me, CMD_KILL, acptr, "%C :*.undernet.org (older nick "
+ sendcmdto_one(&me, CMD_KILL, acptr, "%C :" HEAD_IN_SAND_SERVERNAME " (older nick "
"overruled)", acptr);
}
- exit_client(cptr, acptr, &me, "Killed (*.undernet.org (nick collision "
+ exit_client(cptr, acptr, &me, "Killed (" HEAD_IN_SAND_SERVERNAME " (nick collision "
"from same user@host))");
}
if (lastnick == cli_lastnick(acptr))
#ifdef HEAD_IN_SAND_WHOIS_SERVERNAME
if (!IsAnOper(sptr) && sptr != acptr)
- send_reply(sptr, RPL_WHOISSERVER, name, "*.undernet.org",
- "The Undernet Underworld");
+ send_reply(sptr, RPL_WHOISSERVER, name, HEAD_IN_SAND_SERVERNAME,
+ HEAD_IN_SAND_SERVERINFO);
else
#endif
send_reply(sptr, RPL_WHOISSERVER, name, cli_name(a2cptr),
struct Client *acptr;
char *to;
+ if (MustBeOper && !IsPrivileged(acptr))
+ {
+ send_reply(from, ERR_NOPRIVILEGES);
+ return HUNTED_NOSUCH;
+ }
/* Assume it's me, if no server or an unregistered client */
if (parc <= server || EmptyString((to = parv[server])) || IsUnknown(from))
return (HUNTED_ISME);
va_end(vl);
}
+/*
+ * Send a server notice to all users subscribing to the indicated <mask>
+ * except for <one> - Ratelimited 1 / 30sec
+ */
+void sendto_opmask_butone_ratelimited(struct Client *one, unsigned int mask,
+ time_t *rate, const char *pattern, ...)
+{
+ va_list vl;
+
+ if ((CurrentTime - *rate) < 30)
+ return;
+ else
+ *rate = CurrentTime;
+
+ va_start(vl, pattern);
+ vsendto_opmask_butone(one, mask, pattern, vl);
+ va_end(vl);
+
+}
+
+
/*
* Same as above, except called with a variable argument list
*/