X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_jupe.c;h=51f219f53023dad24147d2ad8596ee23a3ac3a08;hb=refs%2Fheads%2Fupstream;hp=3dbfba51bcd6772671d131e06433e8d91bd0a5df;hpb=065a143ab1c4e5aab94187e51a843a31e93b146a;p=ircu2.10.12-pk.git diff --git a/ircd/m_jupe.c b/ircd/m_jupe.c index 3dbfba5..51f219f 100644 --- a/ircd/m_jupe.c +++ b/ircd/m_jupe.c @@ -80,18 +80,14 @@ * 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" @@ -101,9 +97,8 @@ #include "s_conf.h" #include "s_misc.h" #include "send.h" -#include "support.h" -#include +/* #include -- Now using assert in ircd_log.h */ #include #include @@ -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 */ @@ -178,23 +173,27 @@ int ms_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) * mo_jupe - oper message handler * * parv[0] = Send prefix + * parv[1] = [[+|-]] * - * From oper: + * Local (to me) style: + * + * parv[2] = [Expiration offset] + * parv[3] = [Comment] + * + * Global (or remote local) style: * - * parv[1] = [[+|-]] * parv[2] = [target] * parv[3] = [Expiration offset] * parv[4] = [Comment] * */ -#ifdef CONFIG_OPERCMDS int mo_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { struct Client *acptr = 0; struct Jupe *ajupe; unsigned int flags = 0; time_t expire_off; - char *server = parv[1], *target = parv[2], *reason = parv[4]; + char *server = parv[1], *target = 0, *reason; if (parc < 2) return jupe_list(sptr, 0); @@ -207,28 +206,40 @@ int mo_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) else return jupe_list(sptr, server); - if (parc < 5) - return need_more_params(sptr, "JUPE"); + if (!feature_bool(FEAT_CONFIG_OPERCMDS)) + return send_reply(sptr, ERR_DISABLED, "JUPE"); - if (!(target[0] == '*' && target[1] == '\0')) { - if (!(acptr = find_match_server(target))) - return send_error_to_client(sptr, ERR_NOSUCHSERVER, target); + if (parc == 4) { + expire_off = atoi(parv[2]); + reason = parv[3]; + flags |= JUPE_LOCAL; + } else if (parc > 4) { + target = parv[2]; + expire_off = atoi(parv[3]); + reason = parv[4]; + } else + return need_more_params(sptr, "JUPE"); - if (!IsMe(acptr)) { /* manually propagate, since we don't set it */ - if (!IsOper(sptr)) - return send_error_to_client(sptr, ERR_NOPRIVILEGES); + if (target) { + if (!(target[0] == '*' && target[1] == '\0')) { + if (!(acptr = find_match_server(target))) + return send_reply(sptr, ERR_NOSUCHSERVER, target); - sendcmdto_one(acptr, CMD_JUPE, sptr, "%C %c%s %s %Tu :%s", acptr, - flags & JUPE_ACTIVE ? '+' : '-', server, parv[3], - TStime(), reason); - return 0; - } + if (!IsMe(acptr)) { /* manually propagate, since we don't set it */ + if (!HasPriv(sptr, PRIV_JUPE)) + return send_reply(sptr, ERR_NOPRIVILEGES); - flags |= JUPE_LOCAL; - } else if (!IsOper(sptr)) - return send_error_to_client(sptr, ERR_NOPRIVILEGES); + 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); - expire_off = atoi(parv[3]); + flags |= JUPE_LOCAL; + } else if (!HasPriv(sptr, PRIV_JUPE)) + return send_reply(sptr, ERR_NOPRIVILEGES); + } ajupe = jupe_find(server); @@ -245,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