mIRCForumlari - mIRC ve IRC Kullanıcılarının Paylaşım Platformu
  https://www.mircforumlari.net/iletisim/


SohbetG.Com

Kullanıcı Etiket Listesi

Yeni Konu aç Cevapla
 
Seçenekler
Alt 22 Aralık 2022, 06:14   #1
Çevrimdışı
Üyelik tarihi: 07 Aralık 2022
Konular: 21245
Mesajlar: 24.248
Nerden: İstanbul
Cinsiyet: Erkek
Web Site: TRmIRC.Net
IRC Sunucu: IRC.TRmIRC.Net
Alınan Beğeni: 3770
Beğendikleri: 6794
@RahmetLi
Ruh Hali : : Olu Gibi
Standart ircservices çoklu root eklentisi

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..
ALINTI : Sky-Danger





Kalbim Atar Cansız, Geçmez Gün Ahsız, Vahsız..
  Alıntı ile Cevapla

Cevapla
Etiketler
admin, altına, biraz, değil, gerekir, girme, hemen, içerisinde, izi, işlem, kodları, kodu, kolay, kısmı, kısmında, nerde, nicki, nicklerin, null, olduğu, set, user, varsa, war, yeniden, yerde, yeri, yerine, üstü, yüzde


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Seçenekler