X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_jupe.c;h=51f219f53023dad24147d2ad8596ee23a3ac3a08;hb=a36ad5e29241b0c89379947b13887cb6930ef3e0;hp=24cb8787a73b0dfafc873c9f62cf7c8f0e814124;hpb=f207cb87cc0b426c8c1ab878ddaadc1aaed899db;p=ircu2.10.12-pk.git diff --git a/ircd/m_jupe.c b/ircd/m_jupe.c index 24cb878..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 @@ -125,7 +120,7 @@ int ms_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { struct Client *acptr = 0; struct Jupe *ajupe; - int local = 0, active = 1; + unsigned int flags = 0; time_t expire_off, lastmod; char *server = parv[2], *target = parv[1], *reason = parv[5]; @@ -137,24 +132,18 @@ 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 */ - if (IsServer(sptr)) - sendto_one(acptr, "%s " TOK_JUPE " %s %s %s %s :%s", NumServ(sptr), - target, server, parv[3], parv[4], reason); - else - sendto_one(acptr, "%s%s " TOK_JUPE " %s %s %s %s :%s", NumNick(sptr), - target, server, parv[3], parv[4], reason); - + sendcmdto_one(sptr, CMD_JUPE, acptr, "%s %s %s %s :%s", target, server, + parv[3], parv[4], reason); return 0; } - local = 1; + flags |= JUPE_LOCAL; } - if (*server == '-') { - active = 0; + if (*server == '-') server++; - } else if (*server == '+') { - active = 1; + else if (*server == '+') { + flags |= JUPE_ACTIVE; server++; } @@ -164,31 +153,35 @@ int ms_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) ajupe = jupe_find(server); if (ajupe) { - if (JupeIsLocal(ajupe) && !local) /* global jupes override local ones */ + if (JupeIsLocal(ajupe) && !(flags & JUPE_LOCAL)) /* global over local */ jupe_free(ajupe); else if (JupeLastMod(ajupe) < lastmod) { /* new modification */ - if (active) - return jupe_activate(cptr, sptr, ajupe, lastmod); + if (flags & JUPE_ACTIVE) + return jupe_activate(cptr, sptr, ajupe, lastmod, flags); else - return jupe_deactivate(cptr, sptr, ajupe, lastmod); - } else if (JupeLastMod(ajupe) == lastmod) /* no changes */ + return jupe_deactivate(cptr, sptr, ajupe, lastmod, flags); + } else if (JupeLastMod(ajupe) == lastmod || IsBurstOrBurstAck(cptr)) return 0; else return jupe_resend(cptr, ajupe); /* other server desynched WRT jupes */ } - return jupe_add(cptr, sptr, server, reason, expire_off, lastmod, local, - active); + return jupe_add(cptr, sptr, server, reason, expire_off, lastmod, flags); } /* * 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] @@ -198,66 +191,70 @@ int mo_jupe(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { struct Client *acptr = 0; struct Jupe *ajupe; - int local = 0, active = 1; + 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); if (*server == '+') { - active = 1; + flags |= JUPE_ACTIVE; server++; - } else if (*server == '-') { - active = 0; + } else if (*server == '-') server++; - } else + else return jupe_list(sptr, server); - if (parc < 5) + if (!feature_bool(FEAT_CONFIG_OPERCMDS)) + return send_reply(sptr, ERR_DISABLED, "JUPE"); + + 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 (!(target[0] == '*' && target[1] == '\0')) { - if (!(acptr = find_match_server(target))) { - sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], target); - return 0; - } + if (target) { + if (!(target[0] == '*' && target[1] == '\0')) { + if (!(acptr = find_match_server(target))) + return send_reply(sptr, ERR_NOSUCHSERVER, target); - if (!IsMe(acptr)) { /* manually propagate, since we don't set it */ - if (!IsOper(sptr)) { - sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); - return 0; - } + if (!IsMe(acptr)) { /* manually propagate, since we don't set it */ + if (!HasPriv(sptr, PRIV_JUPE)) + return send_reply(sptr, ERR_NOPRIVILEGES); - sendto_one(acptr, "%s%s " TOK_JUPE " %s %c%s %s " TIME_T_FMT " :%s", - NumNick(sptr), NumServ(acptr), active ? '+' : '-', server, - parv[3], TStime(), reason); - return 0; - } + 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); - local = 1; - } else if (!IsOper(sptr)) { - sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); - return 0; + flags |= JUPE_LOCAL; + } else if (!HasPriv(sptr, PRIV_JUPE)) + return send_reply(sptr, ERR_NOPRIVILEGES); } - expire_off = atoi(parv[3]); - ajupe = jupe_find(server); if (ajupe) { - if (JupeIsLocal(ajupe) && !local) /* global jupes override local ones */ + if (JupeIsLocal(ajupe) && !(flags & JUPE_LOCAL)) /* global over local */ jupe_free(ajupe); else { - if (active) - return jupe_activate(cptr, sptr, ajupe, TStime()); + if (flags & JUPE_ACTIVE) + return jupe_activate(cptr, sptr, ajupe, TStime(), flags); else - return jupe_deactivate(cptr, sptr, ajupe, TStime()); + return jupe_deactivate(cptr, sptr, ajupe, TStime(), flags); } } - return jupe_add(cptr, sptr, server, reason, expire_off, TStime(), local, - active); + return jupe_add(cptr, sptr, server, reason, expire_off, TStime(), flags); } /*