#include "geseml.h"
#include "lvleml.h"
+//env variable to define the list of relayable
#define RELAYS "RELAYABLE"
static const char *cry="(crypted link is now set in '%s' mode, security level='%d')";
phase=999; //No NX found!
}
break;
- case 3 : //waitin MX signon
+ case 3 : //waiting MX signon
int res;
res=tcp_get_smtp_reply(rmt,WAITRMT,(char ***)0);
#include "lvleml.h"
#include "modrec.h"
+//env variable to set the rejection level
+#define ENVRJCT "RJCTCRED"
+#define DFLTRJCT -50 //default reject max level
/*
\f
*/
(void) eml_transmit(contact,true,"%d contact denied <%s>",NOTNOW,end);
contact->credit=-1; //small penalty
(void) sleep(1); //To avoid avalanche
- phase++; //connection rejected
+ phase=999; //no Need to go further
}
break;
- case 2 : //do contact
+ case 2 : { //checking remote credit
+ static char *cmt="Remote server credit too low";
+ int reject;
+ char *ptr;
+ SRVTYP *srv;
+
+ reject=DFLTRJCT;
+ if ((ptr=getenv(ENVRJCT))!=(char *)0)
+ reject=atoi(ptr);
+ if (sql_mngremote(contact->sqlptr,sql_select,contact->peerip,&srv)==true) {
+ if (srv->credit<=reject) {
+ contact->termend=rou_freestr(contact->termend);
+ contact->termend=strdup(cmt);
+ (void) eml_transmit(contact,true,"%d 7.0.0 %s",DATRJC,cmt);
+ phase=999; //rejecting remote first hand
+ }
+ srv=sql_freesrv(srv);
+ }
+ }
+ break;
+ case 3 : //do contact
intstat=eml_docontact(contact);
switch (intstat) {
case 1 : //command 'quit' recieved
break;
}
break;
- case 3 : { //connection terminated
- static const char *cmt;
- SRVTYP *srv;
+ default : //SAFE guard
+ if (contact!=(CONTYP *)0) {
+ static const char *cmt;
+ SRVTYP *srv;
- cmt="(Contact terminated, condition=<%s>)";
- if (sql_mngremote(contact->sqlptr,sql_select,contact->peerip,&srv)==true) {
- srv=sql_freesrv(srv);
+ cmt="(Contact terminated, condition=<%s>)";
+ if (sql_mngremote(contact->sqlptr,sql_select,contact->peerip,&srv)==true) {
+ srv=sql_freesrv(srv);
+ }
+ (void) log_fprintlog(contact->logptr,true,cmt,contact->termend);
+ (void) sql_newconnect(contact->sqlptr,contact->peerip,-1);
+ contact=eml_dropcontact(contact);
}
- (void) log_fprintlog(contact->logptr,true,cmt,contact->termend);
- (void) sql_newconnect(contact->sqlptr,contact->peerip,-1);
- contact=eml_dropcontact(contact);
- }
- break;
- default : //SAFE guard
proceed=false;
break;
}