* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
- * $Id: m_mode.c 1006 2006-03-09 15:32:14Z nenolod $
*/
#include "stdinc.h"
-#include "tools.h"
-#include "balloc.h"
#include "channel.h"
#include "client.h"
#include "hash.h"
-#include "irc_string.h"
+#include "match.h"
#include "ircd.h"
#include "numeric.h"
#include "s_user.h"
#include "s_conf.h"
#include "s_serv.h"
-#include "s_log.h"
+#include "logger.h"
#include "send.h"
#include "msg.h"
#include "parse.h"
#include "modules.h"
#include "packet.h"
-#include "sprintf_irc.h"
#include "s_newconf.h"
static int m_mode(struct Client *, struct Client *, int, const char **);
static int ms_mode(struct Client *, struct Client *, int, const char **);
static int ms_tmode(struct Client *, struct Client *, int, const char **);
+static int ms_mlock(struct Client *, struct Client *, int, const char **);
static int ms_bmask(struct Client *, struct Client *, int, const char **);
struct Message mode_msgtab = {
"TMODE", 0, 0, 0, MFLG_SLOW,
{mg_ignore, mg_ignore, {ms_tmode, 4}, {ms_tmode, 4}, mg_ignore, mg_ignore}
};
+struct Message mlock_msgtab = {
+ "MLOCK", 0, 0, 0, MFLG_SLOW,
+ {mg_ignore, mg_ignore, {ms_mlock, 3}, {ms_mlock, 3}, mg_ignore, mg_ignore}
+};
struct Message bmask_msgtab = {
"BMASK", 0, 0, 0, MFLG_SLOW,
{mg_ignore, mg_ignore, mg_ignore, {ms_bmask, 5}, mg_ignore, mg_ignore}
};
-mapi_clist_av1 mode_clist[] = { &mode_msgtab, &tmode_msgtab, &bmask_msgtab, NULL };
+mapi_clist_av1 mode_clist[] = { &mode_msgtab, &tmode_msgtab, &mlock_msgtab, &bmask_msgtab, NULL };
DECLARE_MODULE_AV1(mode, NULL, NULL, mode_clist, NULL, NULL, "$Revision: 1006 $");
/*
* m_mode - MODE command handler
- * parv[0] - sender
* parv[1] - channel
*/
static int
{
msptr = find_channel_membership(chptr, source_p);
- if(is_deop(msptr))
- return 0;
-
/* Finish the flood grace period... */
if(MyClient(source_p) && !IsFloodDone(source_p))
{
return 0;
}
+static int
+ms_mlock(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
+{
+ struct Channel *chptr = NULL;
+
+ /* Now, try to find the channel in question */
+ if(!IsChanPrefix(parv[2][0]) || !check_channel_name(parv[2]))
+ {
+ sendto_one_numeric(source_p, ERR_BADCHANNAME, form_str(ERR_BADCHANNAME), parv[2]);
+ return 0;
+ }
+
+ chptr = find_channel(parv[2]);
+
+ if(chptr == NULL)
+ {
+ sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
+ form_str(ERR_NOSUCHCHANNEL), parv[2]);
+ return 0;
+ }
+
+ /* TS is higher, drop it. */
+ if(atol(parv[1]) > chptr->channelts)
+ return 0;
+
+ if(IsServer(source_p))
+ set_channel_mlock(client_p, source_p, chptr, parv[3], TRUE);
+
+ return 0;
+}
+
static int
ms_bmask(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
static char modebuf[BUFSIZE];
static char parabuf[BUFSIZE];
struct Channel *chptr;
- dlink_list *banlist;
+ rb_dlink_list *banlist;
const char *s;
char *t;
char *mbuf;
fakesource_p = &me;
else
fakesource_p = source_p;
- mlen = ircsprintf(modebuf, ":%s MODE %s +", fakesource_p->name, chptr->chname);
+ mlen = rb_sprintf(modebuf, ":%s MODE %s +", fakesource_p->name, chptr->chname);
mbuf = modebuf + mlen;
pbuf = parabuf;
}
*mbuf++ = parv[3][0];
- arglen = ircsprintf(pbuf, "%s ", s);
+ arglen = rb_sprintf(pbuf, "%s ", s);
pbuf += arglen;
plen += arglen;
modecount++;