UnrealIRCd üzerinde çeşitli kodlar yazılır ve C bilen herkes için çok kolaydir.
UnrealIRCd dosyalarini biraz inceleyip, işlemleri kafaya yatirip birazda c bildikten sonra birçok şeyi gerçekleştirebilirsiniz. Örneğin, Bir kullanici Oper açinda özeline kurallar metni gelsin ve #Kontrol Kanalina alinsin.
Bu Makalemizde bunu örnek alalim.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
cd Unreal*
* işareti, Unreal ile baslayan herhangi bir dosyaya girer. Varsayalim ki Unreal3.2 dosyamiz var, cd Unreal* yaptiğimizda Unreal3.2 dizinine girer.
Oper işlemler, m_oper.c üzerinden yapilmaktadir. UnrealIRCd üzerindeki tüm moduller, src/modules/ dizini içerisindedir.
Bizim işlem yapicağimiz dosyaya ulaşmak, girmek için, pico -w src/modules/m_oper.c yazip girebiliriz.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
pico -w src/modules/m_oper.c
ile dosyamiza girdik..
Şimdi, kod yazicağiz ama nereye yazicağiz? Kod yazmak öylesine bir complier açip içerisine kod yazmaktan ibaret değildir sadece. Bunu herkes kolay gibi görebilir. Bu Marketten su almaya benzer. Örneğin, Bir insan marketten su almak için evden cıkar suyunu alir gelir. Yani düşüncesi budur. Fakat Codere göre, Kişi evden cıktı. Sonra Hangi yoldan gidecek? Kestirme yol varmi? Nerelerde başina bir iş gelebilir? Neresi daha güvenli? Yolda yürürken birşey olurmu? Tüm bunlari düşünür.
Örneğin suanda; oper açanlarin açiş kodlarini bulmamiz gerekir.
Bu Modulu incelediğiniz zaman, kişinin operi yok diyebilir.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
if (FAILOPER_WARN)
sendto_one(sptr,
":%s %s %s :*** Your attempt has been logged.", me.name,
IsWebTV(sptr) ? "PRIVMSG" : "NOTICE", sptr->name);
UID Hatasi verebilir.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
(SNO_OPER, "Failed OPER attempt by %s (%s@%s) using UID %s [host doesnt match]",
parv[0], sptr->user->username, sptr->sockhost, name);
maxlogins verebilir.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
sendto_snomask_global
(SNO_OPER, "Failed OPER attempt by %s (%s@%s) using UID %s [maxlogins reached]",
parv[0], sptr->user->username, sptr->sockhost, name);
vs. vs. yani derin düşünülmüş..
Şimdi bize doğru olan kişinin oper açilişini doğrulayan kodlari bulalim, eğer bulamiyorsakta zekamızı calisitirp, kişi oper açinca oper hostu veriliyor bu yoldan bulmak daha kolay olabilir.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
if (IsOper(sptr) && !IsHideOper(sptr))
IRCstats.operators++;
Buradan işlem yapabiliriz.
Veya, buradanda yapabiliriz.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
if (announce != NULL)
sendto_snomask_global(SNO_OPER,
"%s (%s@%s) [%s] %s",
parv[0], sptr->user->username, GetHost(sptr),
parv[1], announce);
Önemli olan, doğru yeri bulmak..
biz, 2. sini alalim.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
/* Coded By toXic */
aChannel *chptr;
#define tox "#Opers"
if ((chptr = find_channel(tox, NullChn)) != NullChn) {
sendto_channel_butone(&me, &me, chptr, ":Koruma PRIVMSG %s \2%s\2 Rumuzu \2 %s\2 ID ile \2 Oper\2 acti, gerekli bilgiler ozeline yollandi..",
tox, parv[0], name);
}
burada, aChannel = Kanali; #define tox ise kanali alir.
#define tox "#opers" yaptiğinizda, kodda tox geçenm heryeri #opers olarak kabul eder ve döngü ile kullanabilirsiniz.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
if ((chptr = find_channel(tox, NullChn)) != NullChn) {
Burasida yansitilacak kanali bulmaya yarayan kodlarimiz.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
sendto_channel_butone(&me, &me, chptr, ":Koruma PRIVMSG %s \2%s\2 Rumuzu \2 %s\2 ID ile \2 Oper\2 acti, gerekli bilgiler ozeline yollandi..",
tox, parv[0], name);
burasi ise, #kanal'a bildirim. yani opers'e bildiriyor.
Kodumuz;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
aChannel *chptr;
#define tox "#Opers"
if ((chptr = find_channel(tox, NullChn)) != NullChn) {
sendto_channel_butone(&me, &me, chptr, ":Koruma PRIVMSG %s \2%s\2 Rumuzu \2 %s\2 ID ile \2 Oper\2 acti, gerekli bilgiler ozeline yollandi..",
tox, parv[0], name);
}
Şimdi, Oper açan kullaniciya bilgi vericez.
Altindan devam ediyoruz;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
sendto_one(sptr, ":mIRCTR PRIVMSG %s #####################################################################", sptr->name);
sendto_one(sptr, ":mIRCTR PRIVMSG %s Merhabalar, %s", parv[0], parv[0]);
sendto_one(sptr, ":mIRCTR PRIVMSG %s Suanda Aktif yonetici Konumuna Gectiniz..", sptr->name);
sendto_one(sptr, ":mIRCTR PRIVMSG %s #####################################################################", sptr->name);
sendto_one(sptr, ":mIRCTR PRIVMSG %s \2", sptr->name);
ekliyoruz..
/****************************************/
parv[0] = oper açan kullanici. Nick'i herne ise..
Kod: Kodu kopyalamak için üzerine çift tıklayın!
sendto_one(sptr, ":mIRCTR PRIVMSG %s Suanda Aktif yonetici Konumuna Gectiniz..", sptr->name);
Burada, Kullaniciya veri gönderimini mIRCTR nicki yapar. Ahmet olsa idi ahmet yapardi. Mesela sunucumuz göndericek deseydik;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
sendto_one(sptr, ":%s PRIVMSG %s Suanda Aktif yonetici Konumuna Gectiniz..", me.name, sptr->name);
Şeklinde olmasi lazimdi. me.name unrealircd.conf taki name'yi temsil eder. Orda sunucu adi ne ise, onu alir yazar.
Şimdi gelelim host yazmaya..
Kod: Kodu kopyalamak için üzerine çift tıklayın!
char ibohost[]="root.administrator.ircforumlari.net";
Bu şekil host olusturuyoruz..
Düzenli olmasi içinde;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
DLLFUNC int m_oper(aClient *cptr, aClient *sptr, int parc, char *parv[]);
satiri altina koyuyoruz yani kodlama baslamadan önce baslangicta..
Kod: Kodu kopyalamak için üzerine çift tıklayın!
if (!stricmp("toXic", name))
{
sptr->user->virthost = strdup(ibohost);
}
Bu sekilde host verme işlemini yapiyoruz. Burada name, kullanicinin nickini değil oper açtiği zaman, mesela nicki abc ama oper nicki toXic, /oper toXic sifre yaptiği zaman eğer doğru ise toXic'i muhattap alir.
mesela;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
sendto_one(sptr, "%s PRIVMSG %s selam %s", me.name, sptr->name, sptr->name);
yaptiğinizda kullanicinin nicki ne ise onu muhattap alir, kullanici abcd nicki ile oper açtiysa, selam abcd der, ama name kullanirsak, oper açtiğimiz nick abcd olsa bile, operi açilan nick toXic oldugu için selam toXic diyecekti.
name burada oper açilan nicki temsil etmesi için kullanilmis, diğer dosyalarda farkli şeyler için kullaniliyor.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
/*
** m_oper
** parv[0] = sender prefix
** parv[1] = oper name
** parv[2] = oper password
*/
Yani kişi toXicin operini açtiği zaman, belirlediğimiz hostu verecektir.
Umarım Gayet açiklayici olmuştur ilk makalemiz, ve çoğu kişinin kafasina bir mentalite oturmustur...