*/
#include "stdinc.h"
-#include "tools.h"
#include "channel.h"
#include "client.h"
#include "ircd.h"
#include "numeric.h"
-#include "s_log.h"
+#include "logger.h"
#include "s_serv.h"
#include "send.h"
#include "whowas.h"
-#include "irc_string.h"
+#include "match.h"
#include "hash.h"
#include "msg.h"
#include "parse.h"
#include "modules.h"
#include "s_newconf.h"
-#include "sprintf_irc.h"
static int mo_olist(struct Client *, struct Client *, int parc, const char *parv[]);
static int
mo_olist(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
- if(IsOperSpy(source_p))
+ if(!IsOperSpy(source_p))
{
- /* If no arg, do all channels *whee*, else just one channel */
- if(parc < 2 || EmptyString(parv[1]))
- {
- report_operspy(source_p, "LIST", NULL);
- list_all_channels(source_p);
- }
- else
- {
- report_operspy(source_p, "LIST", parv[1]);
- list_named_channel(source_p, parv[1]);
- }
+ sendto_one(source_p, form_str(ERR_NOPRIVS),
+ me.name, source_p->name, "oper_spy");
+ sendto_one(source_p, form_str(RPL_LISTEND),
+ me.name, source_p->name);
+ return 0;
}
+ /* If no arg, do all channels *whee*, else just one channel */
+ if(parc < 2 || EmptyString(parv[1]))
+ list_all_channels(source_p);
+ else
+ list_named_channel(source_p, parv[1]);
+
sendto_one(source_p, form_str(RPL_LISTEND), me.name, source_p->name);
return 0;
}
{
struct Channel *chptr;
rb_dlink_node *ptr;
+
+ report_operspy(source_p, "LIST", NULL);
sendto_one(source_p, form_str(RPL_LISTSTART), me.name, source_p->name);
RB_DLINK_FOREACH(ptr, global_channel_list.head)
sendto_one(source_p, form_str(RPL_LIST),
me.name, source_p->name, chptr->chname,
- dlink_list_length(&chptr->members),
+ rb_dlink_list_length(&chptr->members),
chptr->topic == NULL ? "" : chptr->topic);
}
char *p;
char *n = LOCAL_COPY(name);
- sendto_one(source_p, form_str(RPL_LISTSTART), me.name, source_p->name);
-
if((p = strchr(n, ',')))
*p = '\0';
+ /* Put operspy notice before any output, but only if channel exists */
+ chptr = EmptyString(n) ? NULL : find_channel(n);
+ if(chptr != NULL)
+ report_operspy(source_p, "LIST", chptr->chname);
+
+ sendto_one(source_p, form_str(RPL_LISTSTART), me.name, source_p->name);
+
if(EmptyString(n))
- {
- sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
- form_str(ERR_NOSUCHCHANNEL), n);
return;
- }
- if((chptr = find_channel(n)) == NULL)
+ if(chptr == NULL)
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
form_str(ERR_NOSUCHCHANNEL), n);
else
sendto_one(source_p, form_str(RPL_LIST), me.name, source_p->name,
- chptr->chname, dlink_list_length(&chptr->members),
+ chptr->chname, rb_dlink_list_length(&chptr->members),
chptr->topic ? chptr->topic : "");
}