rmban setup

These are old archives. They are kept for historic purposes only.
Post Reply
Alexufsx
Posts: 12
Joined: Mon Mar 29, 2010 9:27 pm

rmban setup

Post by Alexufsx »

hi every body

i have problem in setup m_rmban

Code: Select all

m_rmban.c:37: error: conflicting types for قclean_ban_maskق
../include/h.h:750: note: previous declaration of قclean_ban_maskق was here
make[2]: *** [custommodule] Error 1
make[2]: Leaving directory `/home/alex/Unreal3.2/src/modules'
make[1]: *** [custommodule] Error 2
make[1]: Leaving directory `/home/alex/Unreal3.2/src'
make: *** [custommodule] Error 2

can any body help me
katsklaw
Posts: 1124
Joined: Sun Apr 18, 2004 5:06 pm
Contact:

Re: rmban setup

Post by katsklaw »

it appears that clean_ban_mask is declared in the core on newer versions of Unreal, m_rmban is a rather old module. I renamed the declarations in this copy and compiled just fine.

I HAVE NOT TESTED IT!!

Code: Select all

/*
 * =================================================================
 * Filename:          m_rmban.c
 * Description:       Command /rmban, taken from DarkFire IRCd.
 * Author:            AngryWolf <[email protected]>
 * Documentation:     m_rmban.txt (comes with the package)
 * =================================================================
 */

#include "config.h"
#include "struct.h"
#include "common.h"
#include "sys.h"
#include "numeric.h"
#include "msg.h"
#include "channel.h"
#include <time.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
#include <io.h>
#endif
#include <fcntl.h>
#include "h.h"
#ifdef STRIPBADWORDS
#include "badwords.h"
#endif
#ifdef _WIN32
#include "version.h"
#endif

extern void		sendto_one(aClient *to, char *pattern, ...);
extern int		del_banid(aChannel *, char *);
#ifdef EXBTYPE_BAN
extern char		*clean_rmban_mask(char *mask, int what);
#else
extern char		*trim_str(char *str, int len);
extern char		*clean_rmban_mask(char *mask);
#endif

#define MSG_RMBAN 	"RMBAN"
#define TOK_RMBAN 	"RB"
#define DelCommand(x)	if (x) CommandDel(x); x = NULL
#define BadParam(x)	((parc < (x)+1) || BadPtr(parv[(x)]))

static Command		*AddCommand(Module *module, char *msg, char *token, iFP func);
DLLFUNC int		m_rmban(aClient *cptr, aClient *sptr, int parc, char *parv[]);

Command			*CmdRmban;
enum MaskType		{ MT_Nick, MT_Nuh };
#ifndef HOOKTYPE_REHASH_COMPLETE
static char		modebuf[MAXMODEPARAMS*2+1], parabuf[504];
#endif
static u_int		modecount;

ModuleHeader MOD_HEADER(m_rmban)
  = {
	"rmban",
	"$Id: m_rmban.c,v 3.1 2004/03/22 21:04:41 angrywolf Exp $",
	"command /rmban",
	"3.2-b8-1",
	NULL 
    };

DLLFUNC int MOD_INIT(m_rmban)(ModuleInfo *modinfo)
{
	CmdRmban = AddCommand(modinfo->handle, MSG_RMBAN, TOK_RMBAN, m_rmban);

	if (!CmdRmban)
		return MOD_FAILED;

	return MOD_SUCCESS;
}

DLLFUNC int MOD_LOAD(m_rmban)(int module_load)
{
	return MOD_SUCCESS;
}

DLLFUNC int MOD_UNLOAD(m_rmban)(int module_unload)
{
	DelCommand(CmdRmban);
	return MOD_SUCCESS;
}

static Command *AddCommand(Module *module, char *msg, char *token, iFP func)
{
	Command *cmd;

	if (CommandExists(msg))
    	{
		config_error("Command %s already exists", msg);
		return NULL;
    	}
    	if (CommandExists(token))
	{
		config_error("Token %s already exists", token);
		return NULL;
    	}

	cmd = CommandAdd(module, msg, token, func, MAXPARA, 0);

#ifndef STATIC_LINKING
	if (ModuleGetError(module) != MODERR_NOERROR || !cmd)
#else
	if (!cmd)
#endif
	{
#ifndef STATIC_LINKING
		config_error("Error adding command %s: %s", msg,
			ModuleGetErrorStr(module));
#else
		config_error("Error adding command %s", msg);
#endif
		return NULL;
	}

	return cmd;
}

/*
 * my_find_chasing
 *
 *    a modified find_chasing(), originally comes from channel.c,
 *    fitting the needs for /rmban.
 */

aClient *my_find_chasing(char *user)
{
        aClient *who;

        if ((who = find_person(user, NULL)))
    		return who;
        if (!(who = get_history(user, (long) KILLCHASETIMELIMIT)))
                return NULL;
        if (!IsServer(who))
                return who;
        else
		return NULL;
}

static u_int match_ban(aClient *cptr, aChannel *chptr, Ban *ban)
{
	char *s;
	static char realhost[NICKLEN + USERLEN + HOSTLEN + 6];
	static char virthost[NICKLEN + USERLEN + HOSTLEN + 6];
	static char     nuip[NICKLEN + USERLEN + HOSTLEN + 6];
	int dovirt = 0, mine = 0;
#ifdef EXBTYPE_BAN
	Extban *extban;

	ban_realhost = realhost;
	ban_ip = ban_virthost = NULL;
#endif

	s = make_nick_user_host(cptr->name, cptr->user->username, cptr->user->realhost);
	strlcpy(realhost, s, sizeof realhost);

	if (MyConnect(cptr))
	{
		mine = 1;
		s = make_nick_user_host(cptr->name, cptr->user->username, Inet_ia2p(&cptr->ip));
		strlcpy(nuip, s, sizeof nuip);
#ifdef EXBTYPE_BAN
		ban_ip = nuip;
#endif
	}

	if (cptr->user->virthost && strcmp(cptr->user->realhost, cptr->user->virthost))
	{
		dovirt = 1;
		s = make_nick_user_host(cptr->name, cptr->user->username,
		    cptr->user->virthost);
		strlcpy(virthost, s, sizeof virthost);
#ifdef EXBTYPE_BAN
		ban_virthost = virthost;
#endif
	}

#ifdef EXBTYPE_BAN
	if (*ban->banstr == '~')
	{
		extban = findmod_by_bantype(ban->banstr[1]);
		if (!extban)
			return 0;
		if (
		      extban->is_banned(cptr, chptr, ban->banstr, BANCHK_JOIN) ||
		      extban->is_banned(cptr, chptr, ban->banstr, BANCHK_MSG) ||
		      extban->is_banned(cptr, chptr, ban->banstr, BANCHK_NICK)
		   )
			return 1;
	}
	else
	{
#endif
		if ((match(ban->banstr, realhost) == 0) ||
		  (mine && (match(ban->banstr, nuip) == 0)) ||
		  (dovirt && (match(ban->banstr, virthost) == 0)))
			return 1;
#ifdef EXBTYPE_BAN
	}
#endif

	return 0;
}


static inline u_int match_type(u_int type, aClient *acptr, aChannel *chptr, Ban *ban, char *mask)
{
	switch (type)
	{
		case MT_Nick:
			if (!match_ban(acptr, chptr, ban))
				return 0;
			break;
		case MT_Nuh:
			if (match(mask, ban->banstr))
				return 0;
	}
	return 1;
}

static inline void init_mode_str()
{
	memset(&modebuf, 0, sizeof modebuf);
	memset(&parabuf, 0, sizeof parabuf);
	*modebuf = '-';
	modecount = 0;
}

static void flush_mode_str(aClient *sptr, aChannel *chptr)
{
	if (modecount > 0)
	{
		sendto_serv_butone(&me, ":%s MODE %s %s %s 0",
			sptr->name, chptr->chname, modebuf, parabuf);
		sendto_channel_butserv(chptr, &me,
			":%s MODE %s %s %s",
			sptr->name, chptr->chname, modebuf, parabuf);
	}
	init_mode_str();
}

static void add_mode_to_str(aClient *sptr, aChannel *chptr, char *mode, char *param)
{
	strcat(modebuf, mode);
	strcat(parabuf, param);
	strcat(parabuf, " ");
	if (++modecount == MAXMODEPARAMS)
		flush_mode_str(sptr, chptr);
}

/*
 * dump a NULL-terminated array of strings to user sptr using
 * the numeric rplnum, and then return 0
 * (taken from DarkFire IRCd)
 */

static int dumpit(aClient *sptr, int rplnum, char **p)
{
        for (; *p != NULL; p++)
                sendto_one(sptr, ":%s %03d %s :%s",
			me.name, rplnum, sptr->name, *p);
	/* let user take 8 seconds to read it! */
        if (MyClient(sptr))
                sptr->since += 8;
        return 0;
}

/* help for /rmban command */
static char *rmban_help[] =
{
	"*** Help on /rmban *** ",
	"COMMAND - Removes bans from a channel with given specifications.",
	" /rmban #channel [mask [time [max]]]",
	"The #channel field specifies which channel to remove bans in.",
	"The mask field can be:",
	" - a mask",
	"     /rmban #chan *!*@*.com [remove bans ending in .com in #chan]",
	"     /rmban #chan * [remove all bans in #chan]",
	" - a nickname of someone online, to unban all bans affecting that user",
	"     /rmban #chan JoeBob [remove all bans affecting JoeBob]",
	" - nothing: unban yourself",
	"The time field can be:",
	" - zero (0) or unspecified: no time restrictions on bans removed",
	" - ># : only bans older than # seconds. the '>' is optional.",
	"     /rmban #chan * 600 [remove bans in #chan older than 10 mins]",
	" - <# : only bans newer than # seconds.",
	"     /rmban #chan * <30 [remove bans less than 30 seconds old]",
	"The max field can be:",
	" - zero (0) or unspecified: no limit on number of bans to remove",
	" - not zero: remove only the 5 newest bans with that mask",
	"     /rmban #chan * 0 10 [remove 10 most recent bans]",
	"NOTE: The fields can be combined in any way, but if you specify",
	"time, you may not skip any fields.",
	"     /rmban #chan *!*@*.foobar.com 30 2",
	" [remove the 2 most recent bans older than 30 seconds for *.foobar.com]",
	"*** End of help ***",
	NULL
};

/*
 * m_rmban
 *
 *	parv[1] = channel (if none, send help screen)
 *	parv[2] = mask (if none, self assumed)
 *	parv[3] = time limit (+x older than x secs, -x younger than x, 0 default)
 *	parv[4] = max count to delete (60 default)
 *
 * originally written by RedLightning and sedition
 * expanded/renamed/etc by binary
 * taken from DarkFire IRCd by AngryWolf
 *
 */

DLLFUNC int m_rmban(aClient *cptr, aClient *sptr, int parc, char *parv[])
{
	aClient		*acptr = NULL;
	aChannel	*chptr;
	Ban		*ban, *next;
	char		*mask, *tlim, *maxc;
	u_int		type, max, count;
	int		tlimit;
	TS		tmin, tmax;

	if (!IsPerson(sptr) || !MyConnect(cptr))
		return -1;
	if (BadParam(1))
		return dumpit(sptr, RPL_TEXT, rmban_help);
	if (!(chptr = find_channel(parv[1], NULL)))
	{
		sendto_one(sptr, err_str(ERR_NOSUCHCHANNEL),
			me.name, sptr->name, parv[1]);
		return -1;
	}

	mask	= BadParam(2) ? NULL : parv[2];
	tlim	= BadParam(3) ? NULL : parv[3];
	maxc	= BadParam(4) ? NULL : parv[4];

	if (!is_chan_op(sptr, chptr))
	{
#ifndef NO_OPEROVERRIDE
		if (!IsOper(sptr) || !OPCanOverride(sptr))
		{
#endif
			sendto_one(sptr, err_str(ERR_CHANOPRIVSNEEDED),
				me.name, sptr->name, chptr->chname);
			return -1;
#ifndef NO_OPEROVERRIDE
		}
        	sendto_snomask(SNO_EYES,
			"*** OperOverride -- %s (%s@%s) RMBAN %s" "%s%s" "%s%s" "%s%s",
			sptr->name, sptr->user->username, sptr->user->realhost,
			/* parv[1] */ chptr->chname,
			/* parv[2] */ mask ? " " : "", mask ? mask : "",
			/* parv[3] */ tlim ? " " : "", tlim ? tlim : "",
			/* parv[4] */ maxc ? " " : "", maxc ? maxc : "");
#endif
	}

	if (!mask)
	{
		acptr	= sptr;
		mask	= sptr->name;
		type	= MT_Nick;
	}
	else if (!strchr(mask, '@') && !strchr(mask, '!') && !strchr(mask, ':')
	    && (acptr = my_find_chasing(mask)))
	{
		mask	= acptr->name;
		type	= MT_Nick;
	}
	else
	{
#ifdef EXBTYPE_BAN
		mask	= clean_rmban_mask(mask, MODE_ADD);
#else
		mask	= clean_rmban_mask(mask);
#endif
		type	= MT_Nuh;
	}

	if (tlim)
	{
		if (*tlim == '<')
			tlimit = -atoi(tlim+1);
		else if (*tlim == '>')
			tlimit = atoi(tlim+1);
		else
			tlimit = atoi(tlim); /* use +/- signs */
	}
	else
		tlimit = 0;

	count = max = maxc ? atoi(maxc) : 0;

	tmin = 0;
	tmax = time(NULL);

	if (tlimit < 0)
		tmin = time(NULL) + tlimit;
	else
		tmax -= tlimit;

	init_mode_str();

	for (ban = chptr->banlist; ban; ban = next)
	{
		next = ban->next;

		if (!match_type(type, acptr, chptr, ban, mask))
			continue;
	        if (ban->when < tmin || ban->when > tmax)
			continue;

		/* ban found */
		add_mode_to_str(sptr, chptr, "b", ban->banstr);
		del_banid(chptr, ban->banstr);

    		if (--count == 0)
			break;
	}

	flush_mode_str(sptr, chptr);

	sendto_one(sptr, ":%s NOTICE %s :Removed all bans on %s matching %s, %s %d secs, %d max",
		me.name, sptr->name, chptr->chname, mask,
		tlimit < 0 ? "newer than" : "older than", abs(tlimit), max);

	return 0;
}

Hope it helps.
Alexufsx
Posts: 12
Joined: Mon Mar 29, 2010 9:27 pm

Re: rmban setup

Post by Alexufsx »

it is set up but
When i make rehash

Code: Select all

Notice -- unrealircd.conf:27: loadmodule src/modules/m_rmban.so: failed to load: tmp/C529A72E.m_rmban.so: undefined symbol: clean_rmban_mask
katsklaw
Posts: 1124
Joined: Sun Apr 18, 2004 5:06 pm
Contact:

Re: rmban setup

Post by katsklaw »

what did you type to compile the module?
Alexufsx
Posts: 12
Joined: Mon Mar 29, 2010 9:27 pm

Re: rmban setup

Post by Alexufsx »

nothing

i do copy and past
katsklaw
Posts: 1124
Joined: Sun Apr 18, 2004 5:06 pm
Contact:

Re: rmban setup

Post by katsklaw »

Alexufsx wrote:nothing

i do copy and past

You have to compile the module. copy and paste the code into src/modules/m_rmban.c then from Unreal directory type make custommodule MODULEFILE=m_rmban
Alexufsx
Posts: 12
Joined: Mon Mar 29, 2010 9:27 pm

Re: rmban setup

Post by Alexufsx »

i make it

but not work
katsklaw
Posts: 1124
Joined: Sun Apr 18, 2004 5:06 pm
Contact:

Re: rmban setup

Post by katsklaw »

ok, I'll have to look at it later when i have more time. If anyone else can fix it faster, please do so ;)
Alexufsx
Posts: 12
Joined: Mon Mar 29, 2010 9:27 pm

Re: rmban setup

Post by Alexufsx »

Thanks a lot katsklaw
Post Reply