큰 변화는 없고 몇가지 패치를 더 추가했습니다.
토스터 패치
* 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
knetqmail-1.06 20080815
-
- 사이트 관리자
- Posts: 1192
- Joined: 2000/01/01 00:00
knetqmail-1.06 20080815
Last edited by 임은재 on 2009/10/15 21:24, edited 3 times in total.
-
- 사이트 관리자
- Posts: 1192
- Joined: 2000/01/01 00:00
qmail-smtpd-newline 패치에 문제가 있었습니다.
수정해서 올렸습니다.
다콘님께서 알려주셨습니다.
http://kldp.org/node/97042#comment-455183
수정해서 올렸습니다.
다콘님께서 알려주셨습니다.
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);
}
-
- expert
- Posts: 661
- Joined: 2004/07/26 09:13
- Location: 분당
- Contact:
-
- expert
- Posts: 661
- Joined: 2004/07/26 09:13
- Location: 분당
- Contact:
Who is online
Users browsing this forum: No registered users and 1 guest