added gnutls backend and moved backend code into new files
[ircu2.10.12-pk.git] / ircd / m_jupe.c
index caafef32755dddbff4d4a52da6b70c1802b284d3..51f219f53023dad24147d2ad8596ee23a3ac3a08 100644 (file)
  *            note:   it is guaranteed that parv[0]..parv[parc-1] are all
  *                    non-NULL pointers.
  */
-#if 0
-/*
- * No need to include handlers.h here the signatures must match
- * and we don't need to force a rebuild of all the handlers everytime
- * we add a new one to the list. --Bleep
- */
-#include "handlers.h"
-#endif /* 0 */
+#include "config.h"
+
 #include "client.h"
 #include "jupe.h"
 #include "hash.h"
 #include "ircd.h"
+#include "ircd_features.h"
+#include "ircd_log.h"
 #include "ircd_reply.h"
 #include "ircd_string.h"
 #include "match.h"
 #include "s_conf.h"
 #include "s_misc.h"
 #include "send.h"
-#include "support.h"
 
-#include <assert.h>
+/* #include <assert.h> -- Now using assert in ircd_log.h */
 #include <stdlib.h>
 #include <string.h>
 
@@ -137,7 +132,7 @@ int ms_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
       return 0; /* no such server */
 
     if (!IsMe(acptr)) { /* manually propagate, since we don't set it */
-      sendcmdto_one(acptr, CMD_JUPE, sptr, "%s %s %s %s :%s", target, server,
+      sendcmdto_one(sptr, CMD_JUPE, acptr, "%s %s %s %s :%s", target, server,
                    parv[3], parv[4], reason);
       return 0;
     }
@@ -165,7 +160,7 @@ int ms_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
        return jupe_activate(cptr, sptr, ajupe, lastmod, flags);
       else
        return jupe_deactivate(cptr, sptr, ajupe, lastmod, flags);
-    } else if (JupeLastMod(ajupe) == lastmod) /* no changes */
+    } else if (JupeLastMod(ajupe) == lastmod || IsBurstOrBurstAck(cptr))
       return 0;
     else
       return jupe_resend(cptr, ajupe); /* other server desynched WRT jupes */
@@ -192,7 +187,6 @@ int ms_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
  * parv[4] = [Comment]
  *
  */
-#ifdef CONFIG_OPERCMDS
 int mo_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 {
   struct Client *acptr = 0;
@@ -212,6 +206,9 @@ int mo_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   else
     return jupe_list(sptr, server);
 
+  if (!feature_bool(FEAT_CONFIG_OPERCMDS))
+    return send_reply(sptr, ERR_DISABLED, "JUPE");
+
   if (parc == 4) {
     expire_off = atoi(parv[2]);
     reason = parv[3];
@@ -226,21 +223,22 @@ int mo_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   if (target) {
     if (!(target[0] == '*' && target[1] == '\0')) {
       if (!(acptr = find_match_server(target)))
-       return send_error_to_client(sptr, ERR_NOSUCHSERVER, target);
+       return send_reply(sptr, ERR_NOSUCHSERVER, target);
 
       if (!IsMe(acptr)) { /* manually propagate, since we don't set it */
-       if (!IsOper(sptr))
-         return send_error_to_client(sptr, ERR_NOPRIVILEGES);
+       if (!HasPriv(sptr, PRIV_JUPE))
+         return send_reply(sptr, ERR_NOPRIVILEGES);
 
-       sendcmdto_one(acptr, CMD_JUPE, sptr, "%C %c%s %s %Tu :%s", acptr,
+       sendcmdto_one(sptr, CMD_JUPE, acptr, "%C %c%s %s %Tu :%s", acptr,
                      flags & JUPE_ACTIVE ? '+' : '-', server, parv[3],
                      TStime(), reason);
        return 0;
-      }
+      } else if (!HasPriv(sptr, PRIV_LOCAL_JUPE))
+       return send_reply(sptr, ERR_NOPRIVILEGES);
 
       flags |= JUPE_LOCAL;
-    } else if (!IsOper(sptr))
-      return send_error_to_client(sptr, ERR_NOPRIVILEGES);
+    } else if (!HasPriv(sptr, PRIV_JUPE))
+      return send_reply(sptr, ERR_NOPRIVILEGES);
   }
 
   ajupe = jupe_find(server);
@@ -258,7 +256,6 @@ int mo_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 
   return jupe_add(cptr, sptr, server, reason, expire_off, TStime(), flags);
 }
-#endif /* CONFIG_OPERCMDS */
 
 /*
  * m_jupe - user message handler