Ricardo Cerqueira wrote:
> 
> Here:
> 
> http://www.ornl.gov/its/archives/mailing-lists/qmail/1999/11/msg00245.html

Ricardo,


The message above has an incomplete patch (last 2 lines missing). Here
is the complete patch:

-----------------------------------------------------------------------
*** qmail-1.03/qmail-smtpd.maxrcpt      Mon Jun 15 07:53:16 1998
--- qmail-1.03/qmail-smtpd.c    Fri Nov 19 16:09:34 1999
***************
*** 25,34 ****
--- 25,36 ----
  #include "commands.h"
  
  #define MAXHOPS 100
  unsigned int databytes = 0;
  int timeout = 1200;
+ int rcptcounter = 0; /* Agregado por mi para el maxrcpt */
+ int maxrcpt = -1; /* Agregado por mi para el maxrcpt */
  
  int safewrite(fd,buf,len) int fd; char *buf; int len;
  {
    int r;
    r = timeoutwrite(timeout,fd,buf,len);
***************
*** 56,66 ****
  void err_wantmail() { out("503 MAIL first (#5.5.1)\r\n"); }
  void err_wantrcpt() { out("503 RCPT first (#5.5.1)\r\n"); }
  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"); }
! 
  
  stralloc greeting = {0};
  
  void smtp_greet(code) char *code;
  {
--- 58,68 ----
  void err_wantmail() { out("503 MAIL first (#5.5.1)\r\n"); }
  void err_wantrcpt() { out("503 RCPT first (#5.5.1)\r\n"); }
  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_excessrcpt() { out("666 Too many recipients specified
(#5.5.4)\r\n"); } /* Agregado por mi para el maxrcpt */
  
  stralloc greeting = {0};
  
  void smtp_greet(code) char *code;
  {
***************
*** 107,116 ****
--- 109,119 ----
      die_control();
    liphostok = control_rldef(&liphost,"control/localiphost",1,(char *)
0);
    if (liphostok == -1) die_control();
    if (control_readint(&timeout,"control/timeoutsmtpd") == -1)
die_control();
    if (timeout <= 0) timeout = 1;
+   if (control_readint(&maxrcpt,"control/maxrcpt") == -1)
die_control(); /* Agregado por mi para el maxrcpt */
  
    if (rcpthosts_init() == -1) die_control();
  
    bmfok = control_readfile(&bmf,"control/badmailfrom",0);
    if (bmfok == -1) die_control();
***************
*** 238,256 ****
--- 241,262 ----
    out("250 flushed\r\n");
  }
  void smtp_mail(arg) char *arg;
  {
    if (!addrparse(arg)) { err_syntax(); return; }
+   rcptcounter = 0; /* Agregado por mi para el maxrcpt */
    flagbarf = bmfcheck();
    seenmail = 1;
    if (!stralloc_copys(&rcptto,"")) die_nomem();
    if (!stralloc_copys(&mailfrom,addr.s)) die_nomem();
    if (!stralloc_0(&mailfrom)) die_nomem();
    out("250 ok\r\n");
  }
  void smtp_rcpt(arg) char *arg; {
+   rcptcounter++; /* Agregado por mi para el maxrcpt */
    if (!seenmail) { err_wantmail(); return; }
+   if (checkrcptcount() == 1) { err_excessrcpt(); } /* Agregado por mi
para el maxrcpt */
    if (!addrparse(arg)) { err_syntax(); return; }
    if (flagbarf) { err_bmf(); return; }
    if (relayclient) {
      --addr.len;
      if (!stralloc_cats(&addr,relayclient)) die_nomem();
***************
*** 390,399 ****
--- 396,411 ----
    if (hops) { out("554 too many hops, this message is looping
(#5.4.6)\r\n"); return; }
    if (databytes) if (!bytestooverflow) { out("552 sorry, that message
size exceeds my databytes limit (#5.3.4)\r\n"); return; }
    if (*qqx == 'D') out("554 "); else out("451 ");
    out(qqx + 1);
    out("\r\n");
+ }                                             /* Agregado por mi para
el maxrcpt */
+ 
+ int checkrcptcount() {                        /* Agregado por mi para
el maxrcpt */
+   if (maxrcpt == -1) {return 0;}              /* Agregado por mi para
el maxrcpt */
+   else if (rcptcounter > maxrcpt) {return 1;} /* Agregado por mi para
el maxrcpt */
+   else {return 0;}                            /* Agregado por mi para
el maxrcpt */
  }
  
  struct commands smtpcommands[] = {
    { "rcpt", smtp_rcpt, 0 }
  , { "mail", smtp_mail, 0 }
-----------------------------------------------------------------------


Rodrigo

-- 
-------------------------------------------
Rodrigo Severo
[EMAIL PROTECTED]
Fabrica de Ideias
sbs - ed. empire center - bl. s - sala 109
cep 70070-904 - brasilia-df - brazil
tel: (61) 321 1357
fax: (61) 321 6096
-------------------------------------------

Reply via email to