knetqmail-1.06 20080815

관련 자료
Post Reply
임은재
사이트 관리자
사이트 관리자
Posts: 1192
Joined: 2000/01/01 00:00

knetqmail-1.06 20080815

Post by 임은재 » 2008/04/03 09:31

큰 변화는 없고 몇가지 패치를 더 추가했습니다.

토스터 패치
* smtp auth
* tls/ssl
* spf
* qmail-queue (to allow for virus scanners)
* maildir++ patch
* support oversize dns packets (not necessary if you use dnscache)
* chkuser (check for local vpopmail users, envelope syntax. requires vpopmail to be previously installed)
http://www.interazioni.it/opensource/chkuser/
* spam throttle
* qregex (regular expression matching in badmailfrom and badmailto)
* big concurrency (set the spawn limit above 255)
* qmail-dk

추가한 패치
* doublebounce-trim.patch
* qmail-date-localtime.patch

업데이트한 패치
* qmail-smtpd-auth-0.59
http://www.fehcom.de/qmail/smtpauth.html

* 20080402 - 추가한 패치 *
다음 세가지 패치를 추가했습니다.
1. qmail-1.03.link-sync.patch
http://www.thedjbway.org/qmail/patches/ ... sync.patch

2. qmail-1.03.qmtpd-netstring.patch
http://www.thedjbway.org/qmail/patches/ ... ring.patch

3. qmail-smtpd-newline.patch

설치 방법: vpopmail과 libdomainkey가 있어야 합니다.
참고: http://qmail.kldp.org/phpbb/viewtopic.php?t=7681

다운로드: knetqmail-1.06-20080815.tar.bz2
Last edited by 임은재 on 2009/10/15 21:24, edited 3 times in total.

임은재
사이트 관리자
사이트 관리자
Posts: 1192
Joined: 2000/01/01 00:00

Post by 임은재 » 2008/08/15 09:47

qmail-smtpd-newline 패치에 문제가 있었습니다.
수정해서 올렸습니다.

다콘님께서 알려주셨습니다.
http://kldp.org/node/97042#comment-455183

Code: Select all

diff -urN knetqmail-1.06-20080402.orig/qmail-smtpd.c knetqmail-1.06-20080402/qmail-smtpd.c
--- knetqmail-1.06-20080402.orig/qmail-smtpd.c  2008-04-02 17:31:02.000000000 +0900
+++ knetqmail-1.06-20080402/qmail-smtpd.c       2008-08-09 07:15:23.000000000 +0900
@@ -103,7 +103,6 @@
 void die_nomem() { out("421 out of memory (#4.3.0)\r\n"); flush(); _exit(1); }
 void die_control() { out("421 unable to read controls (#4.3.0)\r\n"); flush(); _exit(1); }
 void die_ipme() { out("421 unable to figure out my IP addresses (#4.3.0)\r\n"); flush(); _exit(1); }
-void straynewline() { out("451 See http://pobox.com/~djb/docs/smtplf.html.\r\n"); flush(); _exit(1); }

 void err_size() { out("552 sorry, that message size exceeds my databytes limit (#5.3.4)\r\n"); }
 void err_bmf() { out("553 sorry, your envelope sender has been denied (#5.7.1)\r\n"); }
@@ -763,23 +762,14 @@
   int flagmaybex; /* 1 if this line might match RECEIVED, if fih */
   int flagmaybey; /* 1 if this line might match \r\n, if fih */
   int flagmaybez; /* 1 if this line might match DELIVERED, if fih */
-  int seencr;

-  state = 1;
+  /* NEWLINE: We start in state 2 now, instead of state 1. */
+  state = 2;
   *hops = 0;
   flaginheader = 1;
   pos = 0; flagmaybex = flagmaybey = flagmaybez = 1;
   for (;;) {
     substdio_get(&ssin,&ch,1);
-    if (ch == '\n')
-     {
-      if (seencr == 0)
-       {
-        substdio_seek(ssin,-1);
-        ch = '\r';
-       }
-     }
-    if (ch == '\r') seencr = 1; else seencr = 0;
     if (flaginheader) {
       if (pos < 9) {
         if (ch != "delivered"[pos]) if (ch != "DELIVERED"[pos]) flagmaybez = 0;
@@ -789,36 +779,42 @@
         if (flagmaybex) if (pos == 7) ++*hops;
         if (pos < 2) if (ch != "\r\n"[pos]) flagmaybey = 0;
         if (flagmaybey) if (pos == 1) flaginheader = 0;
+       /* NEWLINE: Header may end on \n now, too. */
+        if (pos == 0) if (ch == '\n') flaginheader = 0;
        ++pos;
       }
       if (ch == '\n') { pos = 0; flagmaybex = flagmaybey = flagmaybez = 1; }
     }
     switch(state) {
+      /* NEWLINE: New state machine to allow both \n and \r\n */
       case 0:
-        if (ch == '\n') straynewline();
-        if (ch == '\r') { state = 4; continue; }
+        if (ch == '\n') state = 2;
+        if (ch == '\r') { state = 1; continue; }
         break;
-      case 1: /* \r\n */
-        if (ch == '\n') straynewline();
-        if (ch == '.') { state = 2; continue; }
-        if (ch == '\r') { state = 4; continue; }
+     case 1: /* \r */
+        if (ch == '\n') { state = 2; break; }
+        if (ch == '\r') break;
         state = 0;
+       put ("\r");
         break;
-      case 2: /* \r\n + . */
-        if (ch == '\n') straynewline();
-        if (ch == '\r') { state = 3; continue; }
+      case 2: /* \n or \r\n */
+        if (ch == '.') { state = 3; continue; }
+        if (ch == '\r') { state = 1; continue; }
+        if (ch == '\n') break;
         state = 0;
         break;
-      case 3: /* \r\n + .\r */
+      case 3: /* \n or \r\n   . */
         if (ch == '\n') return;
-        put(".");
-        put("\r");
         if (ch == '\r') { state = 4; continue; }
         state = 0;
         break;
-      case 4: /* + \r */
-        if (ch == '\n') { state = 1; break; }
-        if (ch != '\r') { put("\r"); state = 0; }
+      case 4: /* \n or \r\n  . \r */
+        if (ch == '\n') return;
+        put (".");
+        put ("\r");
+        if (ch == '\r') { state = 1; continue; }
+        state = 0;
+        break;
     }
     put(&ch);
   }

stone92
expert
expert
Posts: 661
Joined: 2004/07/26 09:13
Location: 분당
Contact:

Post by stone92 » 2009/02/09 20:41

은재님 부탁이 있습니다.
knetqmail 에 qmail-dk-auth 패치도 포함해 주실수 있는지요?
저는 개인적으로 패치를 해서 쓰고 있습니다만..

임은재
사이트 관리자
사이트 관리자
Posts: 1192
Joined: 2000/01/01 00:00

Post by 임은재 » 2009/02/27 07:39

은재님 부탁이 있습니다.
knetqmail 에 qmail-dk-auth 패치도 포함해 주실수 있는지요?
저는 개인적으로 패치를 해서 쓰고 있습니다만..
stone92님, 말씀하신 패치는 직접 추가해서 이곳에 올려주세요. dk-auth는 제 개인적으로 판단해서는 아직 널리 쓰이지 않는것 같아 추가하지 않았습니다.

stone92
expert
expert
Posts: 661
Joined: 2004/07/26 09:13
Location: 분당
Contact:

Post by stone92 » 2009/02/27 09:35

네...^^;
제가 집에서 아웃룩으로 gmail같은 domainkey 체크하는 곳으로 메일을 보내보면
메일 헤더에 도메인키가 안붙어서 나가더라구요..
smtp-auth 와 같이 사용할때는 dk-auth 패치를 해줘야지만
헤더가 붙어서 나가서 패치를 했으면 했습니다.
현재 knetqmail 에 추가 패치를 해서 한번 올리도록 하겠습니다.

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests