X-Git-Url: http://git.pk910.de/?p=ircu2.10.12-pk.git;a=blobdiff_plain;f=ircd%2Fm_names.c;h=0e1169e7016a38e300ece79c56871fe18c009971;hp=41a48c7f207cc00c69fc51304e65ae2fff98a3eb;hb=8c6a360089ab531c8a52cc55d4c805d3dd3d65ca;hpb=275e1f928a44325a7ea1f0803d0ad23dc4e92d93 diff --git a/ircd/m_names.c b/ircd/m_names.c index 41a48c7..0e1169e 100644 --- a/ircd/m_names.c +++ b/ircd/m_names.c @@ -246,15 +246,15 @@ int m_names(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) mlen = strlen(cli_name(&me)) + 10 + strlen(cli_name(sptr)); /* List all visible channels/visible members */ - + struct Membership *member; for (ch2ptr = GlobalChannelList; ch2ptr; ch2ptr = ch2ptr->next) { if (!ShowChannel(sptr, ch2ptr)) continue; /* Don't show secret chans. */ - else if (find_channel_member(sptr, ch2ptr)) - do_names(sptr, ch2ptr, showingdelayed|NAMES_ALL); /* Full list if we're in this chan. */ - else - do_names(sptr, ch2ptr, showingdelayed|NAMES_VIS); + else if ((member = find_channel_member(sptr, ch2ptr))) { + do_names(sptr, ch2ptr, showingdelayed|NAMES_ALL|((ch2ptr->mode.mode & MODE_AUDITORIUM) && !(member->status & MODE_CHANOP) ? NAMES_OPS : 0)); /* Full list if we're in this chan. */ + } else + do_names(sptr, ch2ptr, showingdelayed|NAMES_VIS|((ch2ptr->mode.mode & MODE_AUDITORIUM) ? NAMES_OPS : 0)); } /* List all remaining users on channel '*' */ @@ -311,7 +311,7 @@ int m_names(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) * Special Case 2: User is on this channel, requesting full names list. * (As performed with each /join) - ** High frequency usage ** */ - do_names(sptr, chptr, showingdelayed|NAMES_ALL|NAMES_EON); + do_names(sptr, chptr, showingdelayed|NAMES_ALL|NAMES_EON|((chptr->mode.mode & MODE_AUDITORIUM) && !(member->status & MODE_CHANOP) ? NAMES_OPS : 0)); } else { @@ -319,7 +319,7 @@ int m_names(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) * Special Case 3: User isn't on this channel, show all visible users, in * non secret channels. */ - do_names(sptr, chptr, showingdelayed|NAMES_VIS|NAMES_EON); + do_names(sptr, chptr, showingdelayed|NAMES_VIS|NAMES_EON|((ch2ptr->mode.mode & MODE_AUDITORIUM) ? NAMES_OPS : 0)); } } else