lookjapan.COM - IRC ve mIRC dünyasının forumu!

lookjapan.COM - IRC ve mIRC dünyasının forumu! (http://www.lookjapan.com/index.php)
-   UnrealIRCd (http://www.lookjapan.com/forumdisplay.php?f=60)
-   -   Root (U flag) ve Network admin gline koruması (http://www.lookjapan.com/showthread.php?t=2741)

exclusive 09 Aralık 2015 03:58

Root (U flag) ve Network admin gline koruması
 
Merhaba,

Root (U flag) ve Network adminlere Xline koruması yapmak istiyorum. Bunu nasıl sağlayabilirim.

Teşekkürler.

Entrance 09 Aralık 2015 22:25

Cevap: Root (U flag) ve Network admin gline koruması
 
Alıntı:

exclusive Nickli Üyeden Alıntı (Mesaj 5933)
Merhaba,

Root (U flag) ve Network adminlere Xline koruması yapmak istiyorum. Bunu nasıl sağlayabilirim.

Teşekkürler.

Merhaba,

• Network admin için, piyasada varolan netadmins.c modülünü bulup, kullanmanı öneririm.

• Root admin içinde üzerinde bir takım değişikliklerle xline lerden korunmasını sağlayabiliriz..

İyi forumlar.. ^^

exclusive 10 Aralık 2015 00:02

Cevap: Root (U flag) ve Network admin gline koruması
 
netadmin.c kurulu olduğu halde operler bizlere kill kline v.b atabiliyor ne iş anlamadım. Root için düzenlenmiş halini sağlayabilirmisiniz :)

Emrehan 10 Aralık 2015 18:52

Cevap: Root (U flag) ve Network admin gline koruması
 
Toplam 1 Eklenti bulunuyor.
Alıntı:

exclusive Nickli Üyeden Alıntı (Mesaj 5936)
netadmin.c kurulu olduğu halde operler bizlere kill kline v.b atabiliyor ne iş anlamadım. Root için düzenlenmiş halini sağlayabilirmisiniz :)

Merhaba,

netadmins.c modülü üzerinden birkaç ufak editle ayrı bir modül halinde hazırladım. rootadmins.c modülü. Modül eklenti olarak yüklenmiştir. Modül kurmayı bildiğinizi varsayarak devam edeyim. Modülü kurduktan sonra,

unrealircd.conf'ta;

Kod:

netadmins-are-gods yes;
yazan satırın altına,

Kod:

rootadmins-are-gods yes;
yazınız ve REHASH çekiniz. Test ettim çalışıyor.

@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] usta illa ki daha estetik halini yapacaktır. Benimkisi, nacizane fikir yürütülerek hazırlanmış birşeydir.

NOT: Eklenti güncellenmiştir.

İyi forumlar.. ^^

exclusive 10 Aralık 2015 20:52

Cevap: Root (U flag) ve Network admin gline koruması
 
Winrar hasarlı diyor tekrar upload edermisiniz.

Emrehan 10 Aralık 2015 21:30

Cevap: Root (U flag) ve Network admin gline koruması
 
Alıntı:

exclusive Nickli Üyeden Alıntı (Mesaj 5941)
Winrar hasarlı diyor tekrar upload edermisiniz.

Merhaba,
Düzenlemeyi telefonumda yapıp rar'lama işlemini de telefonda yapmıştım. Sanırım arşiv hatasını ondan vermiş olmalı.
Şuan bilgisayarıma bakım yaptığım için eklentiyi yükleyemiyorum. Ancak eklenti en kısa zamanda tekrar güncellenecektir.

rootadmins.c modülü;
Kod:

/* =================================================================
 * Filename:    rootadmins.c =================================================================
 *
 *        set {
 *            rootadmins-are-gods yes;
 *        };
 *
 * =================================================================
 */

#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                        rootadmin_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                        rootadmins_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(rootadmins)
  = {
        "Modul: rootadmins",
        "Edit by Emrehan",
        "Root Admin(+U) Koruma Modulu",
        "3.2-b8-1",
        NULL
    };

DLLFUNC int MOD_TEST(rootadmins)(ModuleInfo *modinfo)
{
        SAVE_MODINFO
        HookConfTest = HookAddEx(modinfo->handle, HOOKTYPE_CONFIGTEST, cb_config_test);

        return MOD_SUCCESS;
}

DLLFUNC int MOD_INIT(rootadmins)(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(rootadmins)(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(rootadmins)(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()
{
        rootadmins_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, "rootadmins-are-gods"))
        {
                if (!ce->ce_vardata)
                {
                        config_error("%s:%i: set::rootadmins-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, "rootadmins-are-gods"))
        {
                rootadmins_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 :rootadmins-are-gods: %d",
                        me.name, RPL_TEXT, sptr->name, rootadmins_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(rootadmins).name, ModuleGetErrorStr(MyMod));
#else
                config_error("Error replacing command %s when loading module %s",
                        msg, MOD_HEADER(rootadmins).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_rootadmins(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) && IsRootAdmin(cptr))
#else
        for (i = oper_fdlist.entry[j = 1]; j <= oper_fdlist.last_entry; i = oper_fdlist.entry[++j])
                if ((cptr = local[i]) && IsRootAdmin(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 rootadmin_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 rootadmin_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 rootadmin_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 rootadmin_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 rootadmin_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) ||
            (!rootadmins_are_gods && IsOper(sptr) && IsRootAdmin(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) && IsRootAdmin(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) && 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 rootadmin_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 (!rootadmins_are_gods && IsOper(sptr) && IsRootAdmin(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 rootadmin */

        mtype = (strchr(mask, '@') ? MT_NUH : MT_NICK);
        btype = (cmd == CMD_ZLINE || cmd == CMD_GZLINE) ? BT_IP : BT_ANY;

        if (check_rootadmins(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);
}

İyi forumlar.. ^^

exclusive 10 Aralık 2015 21:40

Cevap: Root (U flag) ve Network admin gline koruması
 
+U root flagına network adminler dahil xline uygulayamaz değilmi?

Emrehan 10 Aralık 2015 21:45

Cevap: Root (U flag) ve Network admin gline koruması
 
Alıntı:

exclusive Nickli Üyeden Alıntı (Mesaj 5945)
+U root flagına network adminler dahil xline uygulayamaz değilmi?

Burada yapılan işlem, bir Root Admin'in bile başka bir Root Admin'e xline uygulamasını engelliyor. Kısacası Network Admin de dahil hiçbir oper/admin rütbesi Root Admin'e xline uygulayamaz.

İyi forumlar.. ^^

exclusive 10 Aralık 2015 22:01

Cevap: Root (U flag) ve Network admin gline koruması
 
KILLCLONES komutu ile atabiliyorlar bunu nasıl engelleyebiliriz?

Emrehan 10 Aralık 2015 22:31

Cevap: Root (U flag) ve Network admin gline koruması
 
Alıntı:

exclusive Nickli Üyeden Alıntı (Mesaj 5947)
KILLCLONES komutu ile atabiliyorlar bunu nasıl engelleyebiliriz?

Merhaba,
Bu tip komutlarla uğraşmak zaman alıcı olur. Mesela KILLCLONES'i de hallettik bu sefer de RAW SVSKILL var. Ancak yine de basit bir çözüm yolu olarak şunu söyleyebilirim. KILLCLONES komutunu sadece ServicesRoot erişimindeki kişilere kullandırıp diğer tüm yetkilere kapatabilirsiniz.

Kod:

ircservices-*/modules/operserv/main.c
dosyasında;

Kod:

{"KILLCLONES",do_killclones,is_services_oper, OPER_HELP_KILLCLONES,-1,-1},
satırını bulup
Kod:

{"KILLCLONES",do_killclones,is_services_root, OPER_HELP_KILLCLONES,-1,-1},
şeklinde değiştirin.

make ve make install komutlarını uygulayıp servicesi yeniden başlatın.

Başka çözümlerde üretilebilir. Örneğin; KILLCLONES komutunun RootAdmin, NetworkAdmin gibi rütbelere uygulanması engellenebilir. Kurcalamak gerek.

İyi forumlar.. ^^


All times are GMT +3. The time now is 02:02.

Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.