X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_silence.c;h=ce9d4dc5ed58d63738f446cc68a1f32020ee2019;hb=refs%2Fheads%2Fupstream-ssl;hp=4530d6bcb7d84c96e983c7768fe0f29fb745b71b;hpb=d8b9a1237511b9f8d071b327e80af7705cca754d;p=ircu2.10.12-pk.git diff --git a/ircd/m_silence.c b/ircd/m_silence.c index 4530d6b..ce9d4dc 100644 --- a/ircd/m_silence.c +++ b/ircd/m_silence.c @@ -64,6 +64,7 @@ apply_silence(struct Client *sptr, char *mask) { struct Ban *sile; int flags; + int res; char orig_mask[NICKLEN+USERLEN+HOSTLEN+3]; assert(mask && mask[0]); @@ -100,7 +101,8 @@ apply_silence(struct Client *sptr, char *mask) } /* Apply it to the silence list. */ - return apply_ban(&cli_user(sptr)->silence, sile, 1) ? NULL : sile; + res = apply_ban(&cli_user(sptr)->silence, sile, 1); + return res ? NULL : sile; } /** Apply and send silence updates for a user. @@ -123,7 +125,6 @@ forward_silences(struct Client *sptr, char *silences, struct Client *dest) accepted[ac_count++] = sile; } - if (MyUser(sptr)) { size_t siles, maxsiles, totlength, maxlength, jj; @@ -258,8 +259,9 @@ forward_silences(struct Client *sptr, char *silences, struct Client *dest) /* Free any silence-deleting updates. */ for (ii = 0; ii < ac_count; ++ii) { - if (accepted[ii]->flags & BAN_DEL) + if ((accepted[ii]->flags & (BAN_ADD | BAN_DEL)) == BAN_DEL) { free_ban(accepted[ii]); + } } } @@ -287,7 +289,7 @@ int m_silence(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) /* See if the user is requesting a silence list. */ acptr = sptr; if (parc < 2 || EmptyString(parv[1]) || (acptr = FindUser(parv[1]))) { - if (cli_user(acptr)) { + if (cli_user(acptr) && ((acptr == sptr) || IsChannelService(acptr))) { for (sile = cli_user(acptr)->silence; sile; sile = sile->next) { send_reply(sptr, RPL_SILELIST, cli_name(acptr), (sile->flags & BAN_EXCEPTION ? "~" : ""), sile->banstr);