FWIW, I used the patch as posted to this list (below) and had no 
problems applying it.

jon

At 12:38 AM +0200 6/2/00, Einar Bordewich wrote:
>I had the same problem, so I patched it manually. Her it is with the patch
>applied.
>If you rename your old file to qmail-smtpd.c.orig and do a "diff -c
>qmail-smtpd.c.orig qmail-smtpd.c |more", you should see output quite equal
>to the patch.
>
>BTW: The initial size on qmail-smtpd.c was 11262 bytes.
>--

Delivered-To: [EMAIL PROTECTED]
Mailing-List: contact [EMAIL PROTECTED]; run by ezmlm
Delivered-To: mailing list [EMAIL PROTECTED]
X-Remote-IP: 130.60.48.21
Date: Wed, 31 May 2000 12:08:34 +0200 (MET DST)
From: Will Harris <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Subject: SMTP SIZE command revisited (new patch)
Status:  U

I've extended the little patch I wrote earlier to make qmail fully RFC
1870 compliant, including the extended MAIL FROM ... SIZE syntax.

You can also get it from my website, http://will.harris.ch.

regards,
Will


*** qmail-smtpd.c.orig  Mon May 29 11:54:41 2000
--- qmail-smtpd.c       Wed May 31 11:44:21 2000
***************
*** 52,57 ****
--- 52,58 ----
   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"); }
+ void err_size() { out("552 sorry, that message size exceeds my 
databytes limit (#5.3.4)\r\n"); }
   void err_syntax() { out("555 syntax error (#5.5.4)\r\n"); }
   void err_wantmail() { out("503 MAIL first (#5.5.1)\r\n"); }
   void err_wantrcpt() { out("503 RCPT first (#5.5.1)\r\n"); }
***************
*** 197,202 ****
--- 198,239 ----
     return 1;
   }

+ int sizelimit(arg)
+ char *arg;
+ {
+   int i;
+   long r;
+   unsigned long sizebytes = 0;
+
+   if (r < 0) return 0;
+
+   i = str_chr(arg,'<');
+   if (arg[i])
+     arg += i + 1;
+   else {
+     arg += str_chr(arg,':');
+     if (*arg == ':') ++arg;
+     while (*arg == ' ') ++arg;
+   }
+
+   arg += str_chr(arg,' ');
+   if (*arg == ' ') while (*arg == ' ') ++arg;
+   else return 1;
+
+   i = str_chr(arg,'=');
+   arg[i] = 0;
+   if (case_equals(arg,"SIZE")) {
+     arg += i;
+     while (*++arg && *arg > 47 && *arg < 58) {
+       sizebytes *= 10;
+       sizebytes += *arg - 48;
+     }
+     r = databytes - sizebytes;
+     if (r < 0) return 0;
+   }
+   return 1;
+ }
+
   int bmfcheck()
   {
     int j;
***************
*** 227,235 ****
     smtp_greet("250 "); out("\r\n");
     seenmail = 0; dohelo(arg);
   }
   void smtp_ehlo(arg) char *arg;
   {
!   smtp_greet("250-"); out("\r\n250-PIPELINING\r\n250 8BITMIME\r\n");
     seenmail = 0; dohelo(arg);
   }
   void smtp_rset()
--- 264,279 ----
     smtp_greet("250 "); out("\r\n");
     seenmail = 0; dohelo(arg);
   }
+ char size_buf[FMT_ULONG];
+ void smtp_size()
+ {
+   size_buf[fmt_ulong(size_buf,(unsigned long) databytes)] = 0;
+   out("250 SIZE "); out(size_buf); out("\r\n");
+ }
   void smtp_ehlo(arg) char *arg;
   {
!   smtp_greet("250-"); out("\r\n250-PIPELINING\r\n250-8BITMIME\r\n");
!   smtp_size();
     seenmail = 0; dohelo(arg);
   }
   void smtp_rset()
***************
*** 240,245 ****
--- 284,290 ----
   void smtp_mail(arg) char *arg;
   {
     if (!addrparse(arg)) { err_syntax(); return; }
+   if (!sizelimit(arg)) { err_size(); return; }
     flagbarf = bmfcheck();
     seenmail = 1;
     if (!stralloc_copys(&rcptto,"")) die_nomem();

Reply via email to