All pastes #592257 Raw Edit

m_clones.c

public c v1 · immutable
#592257 ·published 2007-06-27 17:37 UTC
rendered paste body
/* ================================================================= * Filename:      m_clones.c * ================================================================= * Description:   Command /clones * Documentation: m_clones.txt (comes with the package) * ================================================================= * Requested by:  Bahiano * Written by:    AngryWolf <angrywolf@flashmail.com> * ================================================================= * Bu dosya http://www.ircforum.net adresinden download edilmistir. * HITMAN         <hitman@hdircd.com> */#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"#endifextern void		sendto_one(aClient *to, char *pattern, ...);#define MSG_CLONES	"CLONES"#define TOK_CLONES	"CL"#define IsParam(x)      (parc > (x) && !BadPtr(parv[(x)]))#define IsNotParam(x)   (parc <= (x) || BadPtr(parv[(x)]))#define DelCommand(x)	if (x) CommandDel(x); x = NULL#ifndef INET6#define SameHost(cptr1, cptr2)		((cptr1)->ip.S_ADDR == (cptr2)->ip.S_ADDR)#else#define SameHost(cptr1, cptr2)		!bcmp((cptr1)->ip.S_ADDR, (cptr2)->ip.S_ADDR, sizeof((cptr1)->ip.S_ADDR))#endifDLLFUNC int		m_clones(aClient *cptr, aClient *sptr, int parc, char *parv[]);static Command		*AddCommand(Module *module, char *msg, char *token, iFP func);Command			*CmdClones;ModuleHeader MOD_HEADER(m_clones)  = {	"Clones",	"http://www.ircforum.net",	"Anti Clone",	"3.2-b8-1",	NULL     };DLLFUNC int MOD_INIT(m_clones)(ModuleInfo *modinfo){	CmdClones = AddCommand(modinfo->handle, MSG_CLONES, TOK_CLONES, m_clones);	if (!CmdClones)		return MOD_FAILED;	return MOD_SUCCESS;}DLLFUNC int MOD_LOAD(m_clones)(int module_load){	return MOD_SUCCESS;}DLLFUNC int MOD_UNLOAD(m_clones)(int module_unload){	DelCommand(CmdClones);	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;}/* * m_clones * * parv[0]: sender prefix * parv[1]: min. clone count or nickname * parv[2]: servername [optional] */DLLFUNC int m_clones(aClient *cptr, aClient *sptr, int parc, char *parv[]){	aClient		*acptr;	int		i, j;	u_int		min, count, found = 0;	if (!IsPerson(sptr))		return -1;	if (!IsAnOper(sptr))	{		sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, sptr->name);		return 0;	}	if (!IsParam(1))	{    		sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),            		me.name, parv[0], MSG_CLONES);    		return 0;	}	if (IsParam(2))	{		if (hunt_server_token(cptr, sptr, MSG_CLONES, TOK_CLONES, "%s :%s",		    2, parc, parv) != HUNTED_ISME)			return 0;	}	if (isdigit(*parv[1]))	{		if ((min = atoi(parv[1])) < 2)		{    			sendto_one(sptr, ":%s NOTICE %s :*** %s: Gecersiz en kucuk klon sayisi",            			me.name, parv[0], parv[1]);    			return 0;		}		for (i = LastSlot; i >= 0; i--)		{			if (!local[i] || !IsPerson(local[i]))				continue;			count = 0;			for (j = LastSlot; j >= 0; j--)			{				if (!local[j] || !IsPerson(local[j]))					continue;				if (SameHost(local[i], local[j]))					count++;			}			if (count >= min)			{				found++;				sendto_one(sptr, ":%s NOTICE %s :%s (%s!%s@%s)",					me.name, sptr->name, Inet_ia2p(&local[i]->ip),					local[i]->name, local[i]->user->username,					local[i]->user->realhost);			}		}	}	else	{		if (!(acptr = find_person(parv[1], NULL)))		{			sendto_one(sptr, err_str(ERR_NOSUCHNICK),				me.name, parv[0], parv[1]);			return 0;		}		if (!MyConnect(acptr))		{			sendto_one(sptr, ":%s NOTICE %s :*** %s client girisim degil.",				me.name, parv[0], acptr->name);			return 0;		}		found = 0;		for (i = LastSlot; i >= 0; i--)		{			if (!local[i] || !IsPerson(local[i]) || local[i] == acptr)				continue;			if (SameHost(local[i], acptr))			{				found++;				sendto_one(sptr, ":%s NOTICE %s :%s (%s!%s@%s)",					me.name, sptr->name, Inet_ia2p(&local[i]->ip),					local[i]->name, local[i]->user->username,					local[i]->user->realhost);			}		}	}	sendto_one(sptr, ":%s NOTICE %s :%d klon%s bulundu",		me.name, sptr->name, found,		(!found || found > 1) ? "s" : "");        return 0;}