[linux-programlama] Re: dup ve pipe.

---------

From: Halil Demirezen (halild@bilmuh.ege.edu.tr)
Date: Wed 27 Aug 2003 - 07:20:47 EDT

  • Next message: Devrim GUNDUZ: "[linux-programlama] Re: Ynt: Re: [ANNOUNCE] PostgreSQL, Inc. ReleasesOpen Source Replication Version (fwd)"

    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.
    >
    >
    >
    >


  • Next message: Devrim GUNDUZ: "[linux-programlama] Re: Ynt: Re: [ANNOUNCE] PostgreSQL, Inc. ReleasesOpen Source Replication Version (fwd)"

    ---------

    Bu arsiv hypermail 2.1.6 tarafindan uretilmistir.