Re: qmail remote patch

2004-01-19 Thread Anton Alin-Adrian
This patch attempts to implement rfc821 a bit. Also it defines the pos 
var as unsigned. Working till now..

--- qmail-smtpd.c.orig  Mon Jun 15 13:53:16 1998
+++ qmail-smtpd.c   Mon Jan 19 23:29:35 2004
@@ -1,3 +1,15 @@
+/*
+*  This is a patched version of qmail, implementing RFC 821 
regarding text line limitations.
+*  Developed by Alin-Adrian Anton 
([EMAIL PROTECTED],[EMAIL PROTECTED])
+*
+*  You may remove this banner if it annoys you. This patch is 
public domain, for the
+*  benefit of the community.
+*
+*  It also fixes an integer overflow in the blast() function.
+   NOTE: it implements the most relaxed RFC821, as it is specified 
there.
+*/
+
+
#include sig.h
#include readwrite.h
#include stralloc.h
@@ -48,7 +60,6 @@
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_bmf() { out(553 sorry, your envelope sender is in my 
badmailfrom list (#5.7.1)\r\n); }
void err_nogateway() { out(553 sorry, that domain isn't in my list of 
allowed rcpthosts (#5.7.1)\r\n); }
void err_unimpl() { out(502 unimplemented (#5.5.1)\r\n); }
@@ -58,7 +69,7 @@
void err_noop() { out(250 ok\r\n); }
void err_vrfy() { out(252 send some mail, i'll try my best\r\n); }
void err_qqt() { out(451 qqt failure (#4.3.0)\r\n); }
-
+void err_longline() { out(500 Line too long, please read RFC 
821.\r\n); flush(); _exit(1); }

stralloc greeting = {0};

@@ -293,10 +304,46 @@
void blast(hops)
int *hops;
{
+
+/*
+*RFC 821  August 1982
+*   Simple Mail Transfer Protocol
+*
+*text line
+*
+*   The maximum total length of a text line including the
+*   CRLF is 1000 characters (but not counting the leading
+*   dot duplicated for transparency).
+*
+*recipients buffer
+*
+*   The maximum total number of recipients that must be
+*   buffered is 100 recipients.
+*
+*
+*  
+*  *  *
+*  *  TO THE MAXIMUM EXTENT POSSIBLE, IMPLEMENTATION  *
+*  *  TECHNIQUES WHICH IMPOSE NO LIMITS ON THE LENGTH *
+*  *  OF THESE OBJECTS SHOULD BE USED.*
+*  *  *
+*  
+*
+* Errors due to exceeding these limits may be reported by using
+* the reply codes, for example:
+*
+*500 Line too long.
+*
+*501 Path too long
+*
+*552 Too many recipients.
+*
+*552 Too much mail data.
+*/
  char ch;
  int state;
  int flaginheader;
-  int pos; /* number of bytes since most recent \n, if fih */
+  unsigned int pos; /* number of bytes since most recent \n, if fih */
  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 */
@@ -317,7 +364,8 @@
if (pos  2) if (ch != \r\n[pos]) flagmaybey = 0;
if (flagmaybey) if (pos == 1) flaginheader = 0;
  }
-  ++pos;
+if (++pos65535-1) err_longline(); /* will bail out nicely with 
err 500 */
+
  if (ch == '\n') { pos = 0; flagmaybex = flagmaybey = flagmaybez = 
1; }
}
switch(state) {

___
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: qmail remote patch

2004-01-19 Thread Andrea Campi
On Mon, Jan 19, 2004 at 11:49:35PM +0200, Anton Alin-Adrian wrote:
 This patch attempts to implement rfc821 a bit. Also it defines the pos 
 var as unsigned. Working till now..

Guys? This is *way* off topic for this list. Could you please either
discuss this with djb, or just post your patches to ports@, or whatever -
as long as you move off this list? Thanks a lot.

Bye,
Andrea

-- 
Where do you think you're going today?
___
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]