[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RE: dup ve pipe.



Selam;
Mesajı okuyunca birden bire başım dönmeye başladı :) Biraz daha
açarmısın diyemiyorum çünkü çok çok açmışsınız. Şu virus falan işlerini
karıştırmasanız belki ne istediğinizi daha iyi anlıyabilirdim. Mesajdan
çıkardığım şey  process A  ile Child Process A1 haberleşecek fakat
process A aynı zamanda qmail ile de haberleşecek. Bumudur?

Mehmet Türker
mailto:m@mturker.net
http://www.turker.name.tr/


-----Original Message-----
From: Halil Demirezen [mailto:halild@bilmuh.ege.edu.tr] 
Sent: Wednesday, August 27, 2003 4:08 PM
To: debian-user-turkish@lists.debian.org
Subject: dup ve pipe.


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.






Reply to: