IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   Services Hazır Kodlar (https://www.ircforumlari.net/services-hazir-kodlar/)
-   -   ircservices çoklu root eklentisi (https://www.ircforumlari.net/services-hazir-kodlar/278159-ircservices-coklu-root-eklentisi.html)

Sky-Dancer 19 Ekim 2009 12:36

ircservices çoklu root eklentisi
 
Bir zamanlar çok istenen bir özellik..
16.06.2007 tarihinde yapmıştım, ve yayınlamaya karar verdim.
kodlama : orta~zor
ekleme (edit) : kolay~orta

tek dosya içerisinde işlem yapıyoruz:

Aşama #0:
cd ircservices-xxx
cd modules
cd operserv
pico main.c

Aşama #1:
Kod:

char * ServicesRoot;
bu kodu bulup "hemen altına" şu kodları ekleyin:

Kod:

char **Sky_Roots_Char;
    static int Sky_Roots_Int;
    static int Sky_Realod=0;

Aşama #2:
Kod:

static int introduce_operserv(const char *nick)
bu kodu bulup "hemen üstüne" şu kodları ekleyin:

Kod:

void Root_Ayir(char *ServicesRoot_);
void Root_Ayir(char *ServicesRoot_) {
 char *Sky_Temp=NULL;
 Sky_Realod=1;
    if (ServicesRoot_) {
        Sky_Roots_Int = 0;
        Sky_Temp = strtok(ServicesRoot_, " ");
        do {
            if (Sky_Temp) {
                Sky_Roots_Int++;
                Sky_Roots_Char = realloc(Sky_Roots_Char, sizeof(char *) * Sky_Roots_Int);
                Sky_Roots_Char[Sky_Roots_Int - 1] = sstrdup(Sky_Temp);
            }
        }
  while ((Sky_Temp = strtok(NULL, " ")));
    }
    if (!Sky_Roots_Int)
  config_error("operserv/main", 0, "No Root NickName(s) Defined");
}

Aşama #3:
Kod:

int is_services_root(User *u)
{
    NickInfo *ni;
    int rootid;
    static int warned_ni = 0, warned_id = 0;
    if (u->flags & UF_SERVROOT)
 return 1;
    if (!(ni = get_nickinfo(ServicesRoot))) {
 if (!warned_ni) {
    wallops(s_OperServ, "Warning: Services super-user nickname %s"
      " is not registered", ServicesRoot);
    warned_ni = 1;
 }
 module_log("warning: ServicesRoot nickname not registered");
 return 0;
    }
    warned_ni = 0;
    if (!(rootid = ni->nickgroup)) {
 if (!warned_id) {
    wallops(s_OperServ, "Warning: Services super-user nickname %s"
      " is forbidden or not properly registered", ServicesRoot);
    warned_id = 1;
 }
 module_log("warning: ServicesRoot nickname forbidden or registered"
    " data corrupt");
 return 0;
    }
    if (!is_oper(u) || !u->ni || u->ni->nickgroup != rootid)
 return 0;
    if (user_identified(u))
 return 1;
    return 0;
}

bu kodları silip yerine şu kodları ekleyin (7~8 yerde değişim olduğu için iş karışabilir, o yüzden eskiyi silip yeniyi ekleyin diyorum)

Kod:

int is_services_root(User *u)
{
 int i;
 int ret=0;
    NickInfo *ni;
    int rootid;
    static int warned_ni = 0, warned_id = 0;
    if (u->flags & UF_SERVROOT)
 return 1;
 for (i = 0; i < Sky_Roots_Int; i++) {
 
  if (!(ni = get_nickinfo(Sky_Roots_Char[i]))) {
//  if (!warned_ni) {
    wallops(s_OperServ, "Warning: Services super-user nickname %s"
    " is not registered", Sky_Roots_Char[i]);
    warned_ni = 1;
//  }
  module_log("warning: ServicesRoot nickname not registered");
  continue;
  }
//  warned_ni = 0;
  if (!(rootid = ni->nickgroup)) {
//  if (!warned_id) {
    wallops(s_OperServ, "Warning: Services super-user nickname %s"
    " is forbidden or not properly registered", Sky_Roots_Char[i]);
//  warned_id = 1;
//  }
  module_log("warning: ServicesRoot nickname forbidden or registered"
    " data corrupt");
  continue;
  }
 }
 for (i = 0; i < Sky_Roots_Int; i++) {
  if (!(ni = get_nickinfo(Sky_Roots_Char[i])))
  continue;
  if (!(rootid = ni->nickgroup))
  continue;
  if (!is_oper(u) || !u->ni || u->ni->nickgroup != rootid) {
  ret=0;
  }
  else {
  ret=1;
  break;
  }
 }
    if (ret && user_identified(u))
 return 1;
    return 0;
}

Aşama #4:
Kod:

int nick_is_services_admin(NickInfo *ni)
{
    NickGroupInfo *ngi;
    if (!ni || !(ngi = get_ngi(ni)))
 return 0;
    if (stricmp(ni->nick, ServicesRoot) == 0)
 return 1;
    return ngi->os_priv >= NP_SERVADMIN;
}

bu kodları silip, yerine şu kodları ekleyin;

Kod:

int nick_is_services_admin(NickInfo *ni)
{
 int i;
    NickGroupInfo *ngi;
    if (!ni || !(ngi = get_ngi(ni)))
 return 0;
 for (i = 0; i < Sky_Roots_Int; i++)
  if (stricmp(ni->nick, Sky_Roots_Char[i]) == 0)
  return 1;
    //if (stricmp(ni->nick, ServicesRoot) == 0)
 //return 1;
    return ngi->os_priv >= NP_SERVADMIN;
}

Aşama #5:
Kod:

old_clearchan_sender_set = 1;
yukarıdaki kodu bulup, hemen altına şu kodları ekleyin;

Kod:

if (Sky_Realod==0)
  Root_Ayir(ServicesRoot);

make & make install çekip, servislerinizi yeniden başlatınız..

kodlar biraz karışık. Bu yüzden anlayamayabilirsiniz nerde ne yapıldığını.. ama kısaca özetlemek gerekir ise;
Root satırından gelen nick verisini, aradaki boşluklara göre ayırıp, array'e aktarıp, is_service_root vs. kısmında bu arraydeki nicklerin varlığı||yokluğu şeklinde bakıyoruz.. Varsa root diyoruz. Yok ise root değil diyoruz :)

moduels.conf unuzdaki Root satırınıza bilgi girerken;
ServicesRoot Nick1 Nick2
yukarıdaki şekilde DEĞİL;
ServicesRoot "Nick1 Nick2"
şeklinde girmeniz gerekiyor..

Not : 1 defa test edip olumlu sonuç aldım..

Başka forumlarda paylaşırsanız; Kodun Kimin tarafından yapıldığını da söylemeniz dileğiyle ;)

iyi Çalışmalar..

Sky-Dancer 19 Ekim 2009 12:41

Cevap: ircservices çoklu root eklentisi
 
Bu belirttiğiniz herhangi bir nick, kayıtlı değil ise, uyarı verecektir status de (normalde hani Servis Root nicki kayıtlı değil gibisinden bir hata verir, root nicki kayıtlı değil ise..)

yani kısacası kodun eksiksiz olması lazım (yanlış hatırlamıyor isem [e 2~2,5 sene geçmiş :) bayadır dokunmadığım bir editti.])

iyi Çalışmalar..

insane 19 Ekim 2009 15:49

Cevap: ircservices çoklu root eklentisi
 
Tebrikler, Sky-Dancer ..

Raw 19 Ekim 2009 16:59

Cevap: ircservices çoklu root eklentisi
 
Mehmet kopardın yine ortalığı .. zaman makinesi ne zaman çıkıo :)

CoboL 19 Ekim 2009 17:00

Cevap: ircservices çoklu root eklentisi
 
modules/operserv/main.c: In function âRoot_Ayirâ:
modules/operserv/main.c:203: error: âLeviS_Roots_Charâ undeclared (first use in this function)
modules/operserv/main.c:203: error: (Each undeclared identifier is reported only once
modules/operserv/main.c:203: error: for each function it appears in.)
modules/operserv/main.c: At top level:
modules/operserv/main.c:359: error: expected â;â, â,â or â)â before â*â token

Böyle bir hata veriyor hoca.

CoboL 19 Ekim 2009 17:11

Cevap: ircservices çoklu root eklentisi
 
Üstad Sky ilede denedim yine aynı hataya vardım :) vallahi.

toXic 19 Ekim 2009 17:14

Cevap: ircservices çoklu root eklentisi
 
Kendi Nickini yazarsan doğal olarak verir sky sabitlenmiş durumda ve sabit olarak kaydetmiş sen ahmet_roots_char olarak değiştirirsen normal olarak hata verir. eğer ki değiştirceksen tüm editleri tekrar göze almalısın.


Kod:

char **Sky_Roots_Char;
    static int Sky_Roots_Int;
    static int Sky_Realod=0;

Bu Sekil değiştirmeden kullanırsan bir sorun olmaz.

RedLine 20 Ekim 2009 00:51

Cevap: ircservices çoklu root eklentisi
 
İşte budur sonunda yine herkesin istediği fakat başaramadığı düzenlemeyi yaptın ve kodu yazdın helal olsun be usta cidden. Eline koluna yüreğine sağlık :)

Sky-Dancer 20 Ekim 2009 00:55

Cevap: ircservices çoklu root eklentisi
 
Alıntı:

CoboL Nickli Üyeden Alıntı (Mesaj 838437)
modules/operserv/main.c: In function âRoot_Ayirâ:
modules/operserv/main.c:203: error: âLeviS_Roots_Charâ undeclared (first use in this function)
modules/operserv/main.c:203: error: (Each undeclared identifier is reported only once
modules/operserv/main.c:203: error: for each function it appears in.)
modules/operserv/main.c: At top level:
modules/operserv/main.c:359: error: expected â;â, â,â or â)â before â*â token

Böyle bir hata veriyor hoca.

Sky yazan yerleri neden başka isim ile değiştirirsiniz anlamam. Sonradan telnete giriş yapacaklar için ise; yine bu, bir tür emek hırsızlığı sayılıyor.

LeviS_Roots_Char -> Sky_Roots_Char'ı bu halde değiştirmişsin fakat en üstteki tanımda değiştirmemişsin veya tanımlamayı unutmuşsun. Haliyle derleyici sana demiş ki: âLeviS_Roots_Charâ tanımlanmadı (bu fonksiyon içerisinde ilk kullanımı)

iyi Çalışmalar..

RedLine 20 Ekim 2009 01:07

Cevap: ircservices çoklu root eklentisi
 
Bizim milletimiz nedense birşeylerle oynamayı çok seviyor orasını değiştirir burasını değiştirir. Bırakın bu işleri madem çok seviyorsunuz oturun kendiniz yazın sıfırdan ama yazılmışsa emeğe saygısızlık yapmayın kurcalamayın orasını burasını.


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 01:28.

Powered by vBulletin® Version 3.8.8 Beta 3
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2024 IRCForumlari.Net