On Thu, Jun 29, 2000 at 10:55:10AM -0300, Rodrigo Severo wrote:
>
>
> 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:
Errr... No, it isn't. It's a patch! You apply it using the GNU patch utility. It does
NOT have to be "fully working" C code.
RC
>
> -----------------------------------------------------------------------
> *** 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
> -------------------------------------------
--
+-------------------
| Ricardo Cerqueira
| PGP Key fingerprint - B7 05 13 CE 48 0A BF 1E 87 21 83 DB 28 DE 03 42
| Novis - Engenharia ISP / Rede T�cnica
| P�. Duque Saldanha, 1, 7� E / 1050-094 Lisboa / Portugal
| Tel: +351 21 3166730/00 (24h/dia) - Fax: +351 21 3166701