Tekil Mesaj gösterimi
Alt 20 Haziran 2008, 02:00   #1
Çevrimdışı
RedLine
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
netadmins modul eki




Arkadaşlar elimde ki netadmins.c modul'ü çok güzel bir şekilde işliyor fakat netadminleri sadece aynı hubdaysa atamıyorlar fakat farklı hubdan giren bir netadmin x-line yiyor.
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
/* * ================================================================= * Filename: netadmins.c * ================================================================= * Description: Protects all NetAdmins from being killed and banned * by non-NetAdmins, or if you want, by any IRC * operators (except U:Lines). The module must be * installed on all Unreal servers of your network in * order to make it work properly. * ================================================================= * Author: AngryWolf * Email:
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
* ================================================================= * * I accept bugreports, ideas and opinions, and if you have any * questions, just send an email to me! * * Thank you for using my module! * * ================================================================= * Requirements: * ================================================================= * * o Unreal >=3.2-beta19 * o One of the supported operating systems (see unreal32docs.html) * * ================================================================= * Installation: * ================================================================= * * See http://angrywolf.linktipp.org/compiling.php?lang=en * * ================================================================= * Configuration: * ================================================================= * * Optionally, you can set some options to specify how the module * should work. The configuration looks like this: * * set { * // Choose "no" here if you would like to allow * // netadmins to kill each other. Otherwise "yes". * netadmins-are-gods yes; * }; * * ================================================================= * Mirror files: * ================================================================= * * http://angrywolf.linktipp.org/netadmins.c [Germany] * http://angrywolf.uw.hu/netadmins.c [Hungary] * http://angrywolf.fw.hu/netadmins.c [Hungary] * * ================================================================= * Changes: * ================================================================= * * $Log: netadmins.c,v $ * Revision 1.8 2004/04/19 19:37:27 angrywolf * - Fixed a bug with servers not being able to kill netadmins * (reported by YonderBoY). * * Revision 1.7 2004/03/08 21:26:29 angrywolf * - Fixed some bugs that could cause crash if you compile the module * statically (for example, under Windows). * * Revision 1.6 2004/02/04 09:45:30 angrywolf * - Code cleanup. * * Revision 1.5 2004/01/29 07:34:50 angrywolf * - Fixed a number of Windows compilation errors * * Revision 1.4 2004/01/28 22:10:48 angrywolf * - Fixed a crash bug caused by a wrong removal of command overrides. * * Revision 1.3 2004/01/09 20:38:40 angrywolf * - Minor doc correction. * * Revision 1.2 2004/01/09 13:27:36 angrywolf * - Added a new configuration directive: set::netadmins-are-gods. * * Revision 1.1 2004/01/09 12:04:11 angrywolf * Initial revision * * ================================================================= */ #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 ConfigEntry *config_find_entry(ConfigEntry *ce, char *name); extern void sendto_one(aClient *to, char *pattern, ...); extern void sendto_realops(char *pattern, ...); #define DelOverride(cmd, ovr) if (ovr && CommandExists(cmd)) CmdoverrideDel(ovr); ovr = NULL #define DelHook(x) if (x) HookDel(x); x = NULL #define IsParam(x) (parc > (x) && !BadPtr(parv[(x)])) #define IsNotParam(x) (parc <= (x) || BadPtr(parv[(x)])) #define OVR_FUNC(x) int (x)(Cmdoverride *ovr, aClient *cptr, aClient *sptr, int parc, char *parv[]) /* Command types */ #define CMD_KLINE 0 #define CMD_ZLINE 1 #define CMD_GLINE 2 #define CMD_GZLINE 3 #define CMD_SHUN 4 /* Ban types */ #define BT_IP 0 /* Only IP */ #define BT_ANY 1 /* IP or hostname */ /* Mask types */ #define MT_NICK 0 /* Nickname */ #define MT_NUH 1 /* n!u@h mask */ static OVR_FUNC(ovr_kill); static OVR_FUNC(ovr_kline); static OVR_FUNC(ovr_zline); static OVR_FUNC(ovr_gline); static OVR_FUNC(ovr_gzline); static OVR_FUNC(ovr_shun); static Cmdoverride *AddOverride(char *msg, iFP cb); static int netadmin_ban(Cmdoverride *, u_short, aClient *, aClient *, int, char *[]); static int cb_config_test(ConfigFile *, ConfigEntry *, int, int *); static int cb_config_run(ConfigFile *, ConfigEntry *, int); static int cb_config_rehash(); static int cb_stats(aClient *sptr, char *stats); static void InitConf(); /* static void FreeConf(); */ static Cmdoverride *OvrKill, *OvrKline, *OvrZline, *OvrGline, *OvrGzline, *OvrShun; static Hook *HookConfTest = NULL, *HookConfRun = NULL, *HookConfRehash = NULL; static Hook *HookStats = NULL; unsigned netadmins_are_gods; #ifndef STATIC_LINKING static ModuleInfo *MyModInfo; #define MyMod MyModInfo->handle #define SAVE_MODINFO MyModInfo = modinfo; #else #define MyMod NULL #define SAVE_MODINFO #endif ModuleHeader MOD_HEADER(netadmins) = { "netadmins", "$Id: netadmins.c,v 1.8 2004/04/19 19:37:27 angrywolf Exp $", "Kill & ban protection for netadmins", "3.2-b8-1", NULL }; DLLFUNC int MOD_TEST(netadmins)(ModuleInfo *modinfo) { SAVE_MODINFO HookConfTest = HookAddEx(modinfo->handle, HOOKTYPE_CONFIGTEST, cb_config_test); return MOD_SUCCESS; } DLLFUNC int MOD_INIT(netadmins)(ModuleInfo *modinfo) { SAVE_MODINFO InitConf(); HookConfRun = HookAddEx(modinfo->handle, HOOKTYPE_CONFIGRUN, cb_config_run); HookConfRehash = HookAddEx(modinfo->handle, HOOKTYPE_REHASH, cb_config_rehash); HookStats = HookAddEx(modinfo->handle, HOOKTYPE_STATS, cb_stats); return MOD_SUCCESS; } DLLFUNC int MOD_LOAD(netadmins)(int module_load) { int ret = MOD_SUCCESS; OvrKill = AddOverride("kill", ovr_kill); OvrKline = AddOverride("kline", ovr_kline); OvrZline = AddOverride("zline", ovr_zline); OvrGline = AddOverride("gline", ovr_gline); OvrGzline = AddOverride("gzline", ovr_gzline); OvrShun = AddOverride("shun", ovr_shun); if (!OvrKill || !OvrKline || !OvrZline || !OvrGline || !OvrGzline || !OvrShun) ret = MOD_FAILED; return ret; } DLLFUNC int MOD_UNLOAD(netadmins)(int module_unload) { // FreeConf(); DelHook(HookStats); DelHook(HookConfRehash); DelHook(HookConfRun); DelHook(HookConfTest); DelOverride("shun", OvrShun); DelOverride("gzline", OvrGzline); DelOverride("gline", OvrGline); DelOverride("zline", OvrZline); DelOverride("kline", OvrKline); DelOverride("kill", OvrKill); return MOD_SUCCESS; } /* ================================================================= */ static void InitConf() { netadmins_are_gods = 0; } /* * static void FreeConf() * { * } */ static int cb_config_rehash() { // FreeConf(); InitConf(); return 1; } static int cb_config_test(ConfigFile *cf, ConfigEntry *ce, int type, int *errs) { int errors = 0; if (type != CONFIG_SET) return 0; if (!strcmp(ce->ce_varname, "netadmins-are-gods")) { if (!ce->ce_vardata) { config_error("%s:%i: set::netadmins-are-gods without contents", ce->ce_fileptr->cf_filename, ce->ce_varlinenum); errors++; } *errs = errors; return errors ? -1 : 1; } else return 0; } static int cb_config_run(ConfigFile *cf, ConfigEntry *ce, int type) { if (type != CONFIG_SET) return 0; if (!strcmp(ce->ce_varname, "netadmins-are-gods")) { netadmins_are_gods = config_checkval(ce->ce_vardata, CFG_YESNO); return 1; } return 0; } static int cb_stats(aClient *sptr, char *stats) { if (*stats == 'S') { sendto_one(sptr, ":%s %i %s :netadmins-are-gods: %d", me.name, RPL_TEXT, sptr->name, netadmins_are_gods); } return 0; } /* ================================================================= */ Cmdoverride *AddOverride(char *msg, iFP cb) { Cmdoverride *ovr = CmdoverrideAdd(MyMod, msg, cb); #ifndef STATIC_LINKING if (ModuleGetError(MyMod) != MODERR_NOERROR ||!ovr) #else if (!ovr) #endif { #ifndef STATIC_LINKING config_error("Error replacing command %s when loading module %s: %s", msg, MOD_HEADER(netadmins).name, ModuleGetErrorStr(MyMod)); #else config_error("Error replacing command %s when loading module %s", msg, MOD_HEADER(netadmins).name); #endif return NULL; } return ovr; } /* ================================================================= */ static char *find_tkl_cmd(u_int cmd) { switch (cmd) { case CMD_KLINE: return "KLINE"; case CMD_ZLINE: return "ZLINE"; case CMD_GLINE: return "GLINE"; case CMD_GZLINE: return "GZLINE"; case CMD_SHUN: return "SHUN"; } return "???"; } static int match_tkl(u_int btype, char *mask, aClient *cptr) { char *s; if (btype != BT_IP) { s = make_user_host(cptr->user->username, cptr->user->realhost); if (!match(mask, s)) return 1; } if (MyConnect(cptr)) { s = make_user_host(cptr->user->username, Inet_ia2p(&cptr->ip)); if (!match(mask, s)) return 1; } return 0; } static int check_netadmins(u_int mtype, u_int btype, char *mask) { int i, j, found = 0; aClient *cptr; #ifdef NO_FDLIST for (i = 0; i <= LastSlot; i++) if ((cptr = local[i]) && !IsServer(cptr) && !IsMe(cptr) && IsOper(cptr) && IsNetAdmin(cptr)) #else for (i = oper_fdlist.entry[j = 1]; j <= oper_fdlist.last_entry; i = oper_fdlist.entry[++j]) if ((cptr = local[i]) && IsNetAdmin(cptr)) #endif { if (mtype == MT_NICK) { if (!strcasecmp(cptr->name, mask)) { found = 1; break; } } else if (mtype == MT_NUH) { if (match_tkl(btype, mask, cptr)) { found = 1; break; } } } return found; } /* ================================================================= */ static OVR_FUNC(ovr_kline) { if (!IsPerson(sptr) || !OPCanKline(sptr) || !IsAnOper(sptr)) return CallCmdoverride(ovr, cptr, sptr, parc, parv); return netadmin_ban(ovr, CMD_KLINE, cptr, sptr, parc, parv); } static OVR_FUNC(ovr_zline) { if (!IsPerson(sptr) || !OPCanZline(sptr) || !IsAnOper(sptr)) return CallCmdoverride(ovr, cptr, sptr, parc, parv); return netadmin_ban(ovr, CMD_ZLINE, cptr, sptr, parc, parv); } static OVR_FUNC(ovr_gline) { if (!IsPerson(sptr) || !OPCanTKL(sptr) || !IsOper(sptr)) return CallCmdoverride(ovr, cptr, sptr, parc, parv); return netadmin_ban(ovr, CMD_GLINE, cptr, sptr, parc, parv); } static OVR_FUNC(ovr_gzline) { if (!IsPerson(sptr) || !OPCanGZL(sptr) || !IsOper(sptr)) return CallCmdoverride(ovr, cptr, sptr, parc, parv); return netadmin_ban(ovr, CMD_GZLINE, cptr, sptr, parc, parv); } static OVR_FUNC(ovr_shun) { if (!IsPerson(sptr) || !OPCanTKL(sptr) || !IsOper(sptr)) return CallCmdoverride(ovr, cptr, sptr, parc, parv); return netadmin_ban(ovr, CMD_SHUN, cptr, sptr, parc, parv); } /* ================================================================= */ static OVR_FUNC(ovr_kill) { static char buf[BUFSIZE + 1]; char *mask, *reason, *nick; char *p = NULL; aClient *acptr; if (IsServer(sptr) || IsULine(sptr) || !IsAnOper(sptr) || (!netadmins_are_gods && IsOper(sptr) && IsNetAdmin(sptr)) || !IsParam(2)) return CallCmdoverride(ovr, cptr, sptr, parc, parv); mask = parv[1]; reason = parv[2]; buf[0] = 0; if (MyClient(sptr)) mask = canonize(mask); for (nick = strtoken(&p, mask, ","); nick; nick = strtoken(&p, NULL, ",")) { if (!(acptr = find_client(nick, NULL)) && !(acptr = get_history(nick, (long)KILLCHASETIMELIMIT))) { sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, sptr->name, nick); continue; } if (IsOper(acptr) && IsNetAdmin(acptr)) { sendto_one(sptr, ":%s NOTICE %s :You are not allowed to KILL %s", me.name, sptr->name, acptr->name); sendto_realops("*** %s tried to KILL %s (%s)", sptr->name, acptr->name, reason); continue; } if (IsOper(acptr) && IsSAdmin(acptr)) { sendto_one(sptr, ":%s NOTICE %s :You are not allowed to KILL %s", me.name, sptr->name, acptr->name); sendto_realops("*** %s tried to KILL %s (%s)", sptr->name, acptr->name, reason); continue; } if (IsOper(acptr) && IsAdmin(acptr)) { sendto_one(sptr, ":%s NOTICE %s :You are not allowed to KILL %s", me.name, sptr->name, acptr->name); sendto_realops("*** %s tried to KILL %s (%s)", sptr->name, acptr->name, reason); continue; } if (IsOper(acptr) && IsCoAdmin(acptr)) { sendto_one(sptr, ":%s NOTICE %s :You are not allowed to KILL %s", me.name, sptr->name, acptr->name); sendto_realops("*** %s tried to KILL %s (%s)", sptr->name, acptr->name, reason); continue; } if (IsOper(acptr) && IsOper(acptr)) { sendto_one(sptr, ":%s NOTICE %s :You are not allowed to KILL %s", me.name, sptr->name, acptr->name); sendto_realops("*** %s tried to KILL %s (%s)", sptr->name, acptr->name, reason); continue; } if (buf[0]) strcat(buf, ","); strcat(buf, acptr->name); } if (!buf[0]) return 0; parv[1] = buf; return CallCmdoverride(ovr, cptr, sptr, parc, parv); } int netadmin_ban(Cmdoverride *ovr, u_short cmd, aClient *cptr, aClient *sptr, int parc, char *parv[]) { char *mask, *mid; u_short mtype, btype; int ok = 1; /* Check if we actually have to handle the command or not */ if (!netadmins_are_gods && IsOper(sptr) && IsNetAdmin(sptr)) ok = 0; else if (IsULine(sptr) || IsNotParam(1) || *parv[1] == '-') ok = 0; if (!ok) return CallCmdoverride(ovr, cptr, sptr, parc, parv); /* Check for the validity of the first parameter */ mask = parv[1]; if (*mask == '+') mask++; if (strchr(mask, '!')) { sendto_one(sptr, ":%s NOTICE %s :[error] Cannot have ! in masks.", me.name, sptr->name); return 0; } if (strchr(mask, ' ') || ((mid = strchr(mask, '@')) && (mid == mask || !mid[1]))) { sendto_one(sptr, ":%s NOTICE %s :[error] Invalid mask.", me.name, sptr->name); return 0; } /* Check if the first parameter matches a netadmin */ mtype = (strchr(mask, '@') ? MT_NUH : MT_NICK); btype = (cmd == CMD_ZLINE || cmd == CMD_GZLINE) ? BT_IP : BT_ANY; if (check_netadmins(mtype, btype, mask)) { sendto_one(sptr, ":%s NOTICE %s :You are not allowed to add a %s on %s", me.name, sptr->name, find_tkl_cmd(cmd), mask); sendto_realops("*** %s tried to add a %s on %s", sptr->name, find_tkl_cmd(cmd), mask); return 0; } return CallCmdoverride(ovr, cptr, sptr, parc, parv); }

Bunu ne yapmalıyız ki hub lar farklı olsa dahi netadminlere line uygulanamasın. Yardımcı olacak arkadaşlara şimdiden teşekkürler.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet