From: Halil Demirezen (halild@bilmuh.ege.edu.tr)
Date: Wed 27 Aug 2003 - 07:20:47 EDT
Hadi Arkadaslar,
bir soru sorduk hic mi yorum yok?
Iyi calismalar?
Serdar Bey?
On Tue, Aug 26, 2003 at 02:31:31AM +0300, Halil Demirezen wrote:
> Selamlar,
> Hemen konuya girmek istiyorum. qmail-queue.c dosyasi initialize
> edilidigi zaman 0 file descriptordan mailin body sini aliyor ve
> 1 file descriptordan da envelope bilgisini aliyor. Ve envelope bilgisi
> kotrolu dogru ise mail qmail.queue.c sayesinde outgoing queue ye
> ekleniyor. Fakat envelope ya da daha baska internal kaynakli hata
> var ise, ornegin insufficient memory, e.g. bazi die numaralari ile
> _exit(exit_no); ile qmail-queue.c den cikiliyor. Boylece mail
> outgoing queue ye eklenmiyor ve hata loglaniyor. Klasik bir virus
> scanning olayi virus kodunun specific imzasi ( ben buna imza diyorum,
> aslinda anlatmak istedigim virus kodunun virus oldugunu ispatlayan
> byte zinciri) nin optimize bir sistem icinde degerlendirip eger mevcut
> virus database icinde bulunan bir virus ise, herhangi bir islem
> yapmasidir. Bu islemlerde mailin recipientlere gonderilmemesi,
> loglanmasi, yada alicilara bu mail virusludur uyarisi gelmesi, vs,vs.
>
> Bu iki olayi baglamak istiyorum. Simdi genelde inceledigim qmail virus
> scannerler qmail-queue.c dosyasini kullaniyorlar. Yani yeni bir scanner
> binary ile substitude edip, yeni gelen qmail-queue dosyasi cagriliyor.
> Sonra asil qmail-queue spawn ediliyor. qmail-queue beklemede iken,
> baska bir binary spawn ediliyor ve piping kullanilarak 0 dan gelen
> mail yeni spawn edilen binary tarafindan scan ediliyor. Ve eger bir
> virus bulundu ise orijinal qmail-queue ye hata kode lu bir deger
> donuyor piping ile. Eger mailde bir problem yoksa, qmail-queue nin
> 0 file desc den orijinal mail ve 1 nolu desc. den envelope degeri
> gonderilip mail islemi tamamlanmis olur.
>
> Simdi bazi sitelerde mail arsivleri inceledim. Biz yeni gelen
> qmail-queue de orijinal qmail-queue yi spawn ettigimiz zamandan
> once, orjinal qmail-queue ile haberlesmemiz icin, orjinal qmail-queue
> nin 0 inci ve 1 inci file desc. leri icin piping kullanmamiz gerekiyor.
> Yani orijinal qmail-queue ile ayni anda spawn edilen bin. ile orijinal
> qmail-queue haberlesmesi icin....
>
>
> ----> qmail-queue(yeni) -- spawn -----> scanner
> --
> -- spawn -----> qmail-queue(orjinal)
>
> simdi benim yapmaya calistigim yeni qmail-queue olusturmak
> ve onun icinde, 0 ve 1 file desc. leri child processler icin
> kullanilmak uzre pipe fdlerine iliskilendirmek...
>
> mesela, ornek
>
> int fd[2];
> int pid;
>
> if(pipe(fd) != 0)
> perror("pipe fail"), exit(-1);
>
>
> if((pid = fork()) != 0)
> write(fd[1], "deneme msg", 11);
> else {
> execve("/usr/sbin/qmail-queue-original","qmail-queue-original", 0,0);
> }
>
>
>
> yukarida child icinde ben gercek qmail-queue yi calistiriyorum. ve
> qmail-queue-original a 0 dan data aktamam gerekiyor. ve bunu kesinlikle
> yani 0 inci fd yi kesinlikle fd[0] ile iliskilendirmem gerekiyor ki
> parent te fd[1] e yazilan bir data pipe araciligi ile fd[0] a
> aktarilmali ve ayni zamanda fd[0], 0 oldugu icin calisan programin
> 0. fd. sinden input olarak alinmali...
>
> bunun dup ve dup2 syscall larla yapilacagini bir yerde okudum
>
> close(0);
> dup2(0, fd[0]);
>
> gibi ama bir sey olmadi :)
>
> yorumlarinizi alabilir miyim?
> iyi calismalar.
>
>
>
>