case 1 : //checking credential
if (srv->links>1) {
status=ALREADY;
- (void) eml_status(contact,status,NULL,"-4.5.6 Server already connected");
+ (void) eml_note(contact,NULL,"%d 4.5.6 already connected",status);
+ (void) eml_transmit(contact,true,"%d 4.5.6 already connected",status);
phase=999; //To many server connected
}
break;
const char *ninfo;
cmt=srv->listing;
- ninfo="-4.5.7 Originator server IP [%s] black listed <%s>";
+ ninfo="%d 4.5.7 Originator server IP [%s] black listed <%s>";
if (cmt==(char *)0)
cmt="credit too low";
(void) log_fprintlog(contact->logptr,false,"(Remote %s[%s] credit='%d' %s)",
contact->peerip,
srv->credit,"too low");
status=BLCKLST;
- (void) eml_status(contact,status,NULL,ninfo,contact->peerip,cmt);
+ (void) eml_note(contact,NULL,ninfo,status,contact->peerip,cmt);
+ (void) eml_transmit(contact,true,ninfo,status,contact->peerip,cmt);
(void) setterminator(contact,"Remote server credit is too low");
phase=999; //To many server connected
}
(void) eml_transmit(contact,true,"%d %s",SENDB64,logdat[i]);
got=tcp_getline(contact->socptr,contact->delay,&line);
if (got<=0) {
- const char *ninfo=" 5.7.2 auth sequence missing";
+ const char *ninfo="%d 5.7.2 auth sequence missing";
(void) strcpy(local,"");
- (void) eml_status(contact,UKNUSER,NULL,ninfo);
+ (void) eml_note(contact,NULL,ninfo,UKNUSER);
+ (void) eml_transmit(contact,true,ninfo,UKNUSER);
break; //exiting from loop
}
(void) log_fprintlog(contact->logptr,false,"%s",line);
break;
case 1 : //check buffer
if ((buffer==(char *)0)||(strlen(buffer)==0)) {
- const char *ninfo=" 5.7.1 Missing auth type";
+ const char *ninfo="%d 5.7.1 Missing auth type";
- (void) eml_status(contact,UKNUSER,NULL,ninfo);
+ (void) eml_note(contact,NULL,ninfo,UKNUSER);
+ (void) eml_transmit(contact,true,ninfo,UKNUSER);
phase=999; //No need to go further
}
break;
static char *cmt="bad authentication type";
(void) rou_alert(0,"%s auth type <%s> unknown (Bug?)",OPEP,local);
- (void) eml_status(contact,BADPAR,NULL," 5.7.2 %s",cmt);
+ (void) eml_note(contact,NULL,"%d 5.7.2 %s",BADPAR,cmt);
+ (void) eml_transmit(contact,true,"%d 5.7.2 %s",BADPAR,cmt);
(void) setterminator(contact,cmt);
phase=999; //Trouble Trouble
}
static char *cmt="Unsafe PLAIN auth mode";
contact->credit-=2;
- (void) eml_status(contact,FAILED,NULL," 5.7.3 %s",cmt);
+ (void) eml_note(contact,NULL,"%d 5.7.3 %s",FAILED,cmt);
+ (void) eml_transmit(contact,true,"%d 5.7.3 %s",FAILED,cmt);
(void) setterminator(contact,cmt);
}
break;
static char *cmt="Unsafe LOGIN auth mode";
contact->credit-=2;
- (void) eml_status(contact,FAILED,NULL," 5.7.3 %s",cmt);
+ (void) eml_note(contact,NULL,"%d 5.7.3 %s",FAILED,cmt);
+ (void) eml_transmit(contact,true,"%d 5.7.3 %s",FAILED,cmt);
(void) setterminator(contact,cmt);
}
break;
(void) rou_alert(0,"%s auth type <%d> not yet implemented (Bug?!)",
OPEP,code);
- (void) eml_status(contact,FAILED,NULL," 5.7.5 %s",cmt);
+ (void) eml_note(contact,NULL,"%d 5.7.5 %s",FAILED,cmt);
+ (void) eml_transmit(contact,true,"%d 5.7.5 %s",FAILED,cmt);
(void) setterminator(contact,cmt);
phase=999;
}
fmt=DISP"Auth Rejected status='%d' for user=<%s> pass=<%s>";
(void) log_fprintlog(contact->logptr,true,fmt,BADAUTH,auth,rmtpass);
(void) sleep(2);
- (void) eml_status(contact,BADAUTH,NULL," 5.7.4 wrong authentication");
+ (void) eml_note(contact,NULL,"%d 5.7.4 wrong authentication",BADAUTH);
+ (void) eml_transmit(contact,true,"%d 5.7.4 wrong authentication",BADAUTH);
contact->credit-=1;
}
else {
(void) log_fprintlog(contact->logptr,true,fmt,auth);
- (void) eml_status(contact,IDOK,NULL," 5.7.5 authentication successful");
+ (void) eml_note(contact,NULL,"%d 5.7.5 authentication successful",IDOK);
+ (void) eml_transmit(contact,true,"%d 5.7.5 authentication successful",IDOK);
contact->credit+=2;
}
}
switch (phase) {
case 0 : //is user a local user
if ((sql_mngusr(contact->sqlptr,sql_select,rcptto,&usr))==false) {
- (void) eml_status(contact,UKNUSER,rcptto,
- " 5.6.0 <%s> unknown user",
- rcptto);
+ (void) eml_note(contact,rcptto,"%d 5.6.0 <%s> unknown user",
+ UKNUSER,rcptto);
+ (void) eml_transmit(contact,true,"%d 5.6.0 <%s> unknown user",
+ UKNUSER,rcptto);
phase=999; //No user found in database
}
break;
break;
case 2 : //is user lock?
if (usr->lock==1) {
- (void) eml_status(contact,EXPIRED,rcptto,
- " 5.6.1 <%s> account lock",
- rcptto);
+ (void) eml_note(contact,rcptto,"%d 5.6.1 <%s> account lock",
+ EXPIRED,rcptto);
+ (void) eml_transmit(contact,true,"%d 5.6.1 <%s> account lock",
+ EXPIRED,rcptto);
phase=999; //No user found in database
}
break;
isok=true;
break;
case spf_fail : //Bad SPF
- (void) eml_status(contact,FAILED,rcptto,
- " 5.6.6 %s from IP=[%s]",
- "Relaying not allowed",
- contact->peerip);
+ (void) eml_note(contact,rcptto,"%d 5.6.6 %s from IP=[%s]",
+ FAILED,"Relaying not allowed",
+ contact->peerip);
+ (void) eml_transmit(contact,rcptto,"%d 5.6.6 %s from IP=[%s]",
+ FAILED,"Relaying not allowed",
+ contact->peerip);
break;
case spf_softfail : //Bad SPF
- (void) eml_status(contact,FAILED,rcptto,
- " 5.6.7 %s from IP=[%s]",
- "SPF soft fail not allowed",
- contact->peerip);
+ (void) eml_note(contact,rcptto,"%d 5.6.7 %s from IP=[%s]",
+ FAILED,"SPF soft fail not allowed",
+ contact->peerip);
+ (void) eml_transmit(contact,rcptto,"%d 5.6.7 %s from IP=[%s]",
+ FAILED,"SPF soft fail not allowed",
+ contact->peerip);
break;
default : //trouble trouble
- (void) eml_status(contact,FAILED,rcptto,
- " 5.6.8 %s (<%s> SPF unknown)",
+ (void) eml_note(contact,rcptto,"%d 5.6.8 %s (<%s> SPF unknown)",
+ FAILED,
+ "Originator domain BAD SPF definition",
+ contact->mailfrom);
+ (void) eml_transmit(contact,true,"%d 5.6.8 %s (<%s> SPF unknown)",
+ FAILED,
"Originator domain BAD SPF definition",
contact->mailfrom);
break;
char *rcptto;
(void) rou_asprintf(&rcptto,"%s@%s",rmtusr->userid,rmtusr->domain);
- (void) eml_status(contact,NORELAY,rcptto," 2.8.0 %s for domain <%s>",
- cmt,rmtusr->domain);
+ (void) eml_note(contact,rcptto,"%d 2.8.0 %s for domain <%s>",
+ NORELAY,cmt,rmtusr->domain);
+ (void) eml_transmit(contact,true,"%d 2.8.0 %s for domain <%s>",
+ NORELAY,cmt,rmtusr->domain);
rcptto=rou_freestr(rcptto);
}
proceed=false;
good=true;
break;
default : //SAFE guard
- if (good==false)
- (void) eml_status(contact,BADPAR,NULL," 5.5.4 %s.",DETAIL);
+ if (good==false) {
+ (void) eml_note(contact,NULL,"%d 5.5.4 %s.",BADPAR,DETAIL);
+ (void) eml_transmit(contact,true,"%d 5.5.4 %s.",BADPAR,DETAIL);
+ }
proceed=false;
break;
}
break;
case 1 : //do we have an originator
if ((rcptto==(char *)0)||(strlen(rcptto)==0)) {
- (void) eml_status(contact,BADPAR,rcptto," 5.6.1 recipient not specified");
+ (void) eml_note(contact,rcptto,"%d 5.6.1 recipient not specified",BADPAR);
+ (void) eml_transmit(contact,true,"%d 5.6.1 recipient not specified",BADPAR);
phase=999; //no need to go further
}
break;
case 2 : //check rcpt format
if ((rcptto[0]!='<')||(rcptto[strlen(rcptto)-1]!='>')) {
- (void) eml_status(contact,BADPAR,rcptto," 5.6.2 '%s' bad Format error",
- rcptto);
+ (void) eml_note(contact,rcptto,"%d 5.6.2 '%s' bad Format error",
+ BADPAR,rcptto);
+ (void) eml_transmit(contact,true,"%d 5.6.2 '%s' bad Format error",
+ BADPAR,rcptto);
phase=999; //no need to go further
}
rcptto[strlen(rcptto)-1]='\000';
*/
/************************************************/
/* */
-/* Procedure to report the contact status */
-/* store this status within the database */
+/* Procedure to report the contact ongoing */
+/* informationn. store this information */
+/* within the database. */
/* */
/************************************************/
-PUBLIC void eml_status(CONTYP *contact,int actcode,char *rcpt,const char *fmt,...)
+PUBLIC void eml_note(CONTYP *contact,char *rcpt,const char *fmt,...)
{
#define OPEP "lvleml.c:eml_status"
va_list args;
char **resp;
char *report;
-char *info;
ACTTYP action;
va_start(args,fmt);
resp=(char **)0;
(void) rou_vasprintf(&report,fmt,args);
-(void) rou_asprintf(&info,"%d%s",actcode,report);
-resp=(char **)rou_addlist((void **)resp,(void *)info);
+resp=(char **)rou_addlist((void **)resp,(void *)report);
(void) memset(&action,'\000',sizeof(ACTTYP));
-action.sessid=contact->session->sessid;
action.code='X';
+action.sessid=contact->session->sessid;
action.reverse=contact->peername;
action.remoteip=contact->peerip;
-action.sfrom=contact->mailfrom;
+if (contact->mailfrom!=(char *)0)
+ action.sfrom=contact->mailfrom;
if (contact->session->hfrom!=(char *)0)
action.hfrom=contact->session->hfrom;
if (contact->session->hsubject!=(char *)0)
action.resp=resp;
if (sql_mngact(contact->sqlptr,&action)==false)
(void) rou_alert(0,"%s, unable to store report within database (bug?",OPEP);
-(void) eml_transmit(contact,true,"%s",info);
resp=(char **)rou_freelist((void **)resp,(genfree_t)rou_freestr);
-report=rou_freestr(report);
va_end(args);
#undef OPEP