]> jfr.im git - solanum.git/blobdiff - modules/m_svinfo.c
Add umode +I to allow users to hide their idle time (#220)
[solanum.git] / modules / m_svinfo.c
index 9067a64fdac7d600b0a9ca08e7feebd5d6535564..6aaf9b16f1ab45c3571626532a4afe428438dfef 100644 (file)
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
- *
- *  $Id: m_svinfo.c 494 2006-01-15 16:08:28Z jilles $
  */
 #include "stdinc.h"
 #include "client.h"
-#include "common.h"            /* TRUE bleah */
-#include "irc_string.h"
+#include "match.h"
 #include "ircd.h"
 #include "numeric.h"
 #include "send.h"
 #include "s_conf.h"
-#include "s_log.h"
+#include "s_newconf.h"
+#include "logger.h"
 #include "msg.h"
 #include "parse.h"
 #include "modules.h"
 
-static int ms_svinfo(struct Client *, struct Client *, int, const char **);
+static const char svinfo_desc[] =
+       "Provides TS6 SVINFO command to ensure version and clock synchronisation";
 
+static void ms_svinfo(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
 struct Message svinfo_msgtab = {
-       "SVINFO", 0, 0, 0, MFLG_SLOW,
+       "SVINFO", 0, 0, 0, 0,
        {mg_unreg, mg_ignore, mg_ignore, {ms_svinfo, 5}, mg_ignore, mg_ignore}
 };
 
 mapi_clist_av1 svinfo_clist[] = { &svinfo_msgtab, NULL };
-DECLARE_MODULE_AV1(svinfo, NULL, NULL, svinfo_clist, NULL, NULL, "$Revision: 494 $");
+DECLARE_MODULE_AV2(svinfo, NULL, NULL, svinfo_clist, NULL, NULL, NULL, NULL, svinfo_desc);
 
 /*
  * ms_svinfo - SVINFO message handler
- *      parv[0] = sender prefix
  *      parv[1] = TS_CURRENT for the server
  *      parv[2] = TS_MIN for the server
  *      parv[3] = unused, send 0
  *      parv[4] = server's idea of UTC time
  */
-static int
-ms_svinfo(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
+static void
+ms_svinfo(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
 {
-       signed int deltat;
+       signed long deltat;
        time_t theirtime;
+       char squitreason[120];
 
        /* SVINFO isnt remote. */
        if(source_p != client_p)
-               return 0;
+               return;
 
        if(TS_CURRENT < atoi(parv[2]) || atoi(parv[1]) < TS_MIN)
        {
                /* TS version is too low on one of the sides, drop the link */
-               sendto_realops_snomask(SNO_GENERAL, L_ALL,
+               sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
                                     "Link %s dropped, wrong TS protocol version (%s,%s)",
-                                    get_server_name(source_p, SHOW_IP), parv[1], parv[2]);
-               exit_client(source_p, source_p, source_p, "Incompatible TS version");
-               return 0;
+                                    source_p->name, parv[1], parv[2]);
+               snprintf(squitreason, sizeof squitreason, "Incompatible TS version (%s,%s)",
+                               parv[1], parv[2]);
+               exit_client(source_p, source_p, source_p, squitreason);
+               return;
        }
 
        /*
-        * since we're here, might as well set CurrentTime while we're at it
+        * since we're here, might as well set rb_current_time() while we're at it
         */
-       set_time();
+       rb_set_time();
        theirtime = atol(parv[4]);
-       deltat = abs(theirtime - CurrentTime);
+       deltat = labs(theirtime - rb_current_time());
 
        if(deltat > ConfigFileEntry.ts_max_delta)
        {
-               sendto_realops_snomask(SNO_GENERAL, L_ALL,
+               sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
                                     "Link %s dropped, excessive TS delta"
-                                    " (my TS=%ld, their TS=%ld, delta=%d)",
-                                    get_server_name(source_p, SHOW_IP),
-                                    (long) CurrentTime, (long) theirtime, deltat);
+                                    " (my TS=%ld, their TS=%ld, delta=%ld)",
+                                    source_p->name,
+                                    (long) rb_current_time(), (long) theirtime, deltat);
                ilog(L_SERVER,
                     "Link %s dropped, excessive TS delta"
-                    " (my TS=%ld, their TS=%ld, delta=%d)",
-                    log_client_name(source_p, SHOW_IP), (long) CurrentTime, (long) theirtime, deltat);
-               exit_client(source_p, source_p, source_p, "Excessive TS delta");
-               return 0;
+                    " (my TS=%ld, their TS=%ld, delta=%ld)",
+                    log_client_name(source_p, SHOW_IP), (long) rb_current_time(), (long) theirtime, deltat);
+               snprintf(squitreason, sizeof squitreason, "Excessive TS delta (my TS=%ld, their TS=%ld, delta=%ld)",
+                               (long) rb_current_time(), (long) theirtime, deltat);
+               disable_server_conf_autoconn(source_p->name);
+               exit_client(source_p, source_p, source_p, squitreason);
+               return;
        }
 
        if(deltat > ConfigFileEntry.ts_warn_delta)
        {
-               sendto_realops_snomask(SNO_GENERAL, L_ALL,
+               sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
                                     "Link %s notable TS delta"
-                                    " (my TS=%ld, their TS=%ld, delta=%d)",
-                                    source_p->name, (long) CurrentTime, (long) theirtime, deltat);
+                                    " (my TS=%ld, their TS=%ld, delta=%ld)",
+                                    source_p->name, (long) rb_current_time(), (long) theirtime, deltat);
        }
-
-       return 0;
 }
-