/************************************************/ /* */ /* Copyright: */ /* Jean-Marc Pigeon <jmp@safe.ca> */ /* Distributed under the Gnu Public */ /* License, see the License file in this */ /* package. */ /* */ /* Define all routine to manage SMTP low */ /* level exchange. */ /* */ /************************************************/ #ifndef UNIEML #define UNIEML /*TCP Message identificator */ #define MID "MID" #define RQSTID "RQSTID" #define ANSWID "ANSWID" /*clement event journal reference */ #define EVJRL 1 /*clement environment variable. */ #define CLEMENT_CHKSMTP "CLEMENT_CHKSMTP" #define CLEMENT_CHECKRS "CLEMENT_CHECKRS" #define CLEMENT_LOCSEND "CLEMENT_LOCSEND" /*local access to sendmail */ #define LOCALMAIL "127.0.0.25,25" #define LOCALHOST "localhost" #define SMTPPORT 25 #define MAILDEM "Mailer_Daemon" #define DFLTDOM "All_Other_Domains" #define RLAYDOM "Relay_Domains" #define KEEPLOC "Keeplocal" #define DBGSDIR "dbgs/" /*debug storage dir */ /*E-mail data dir (within spool) */ #define DATADIR "data/" /*incoming Email*/ #define QUEUDIR "mqueue/" /*direct Email */ #define TRBLDIR "trblq/" /*trouble queue */ #define TRIADIR "triage/" /*triage area */ #define SNDRDIR "senders/" /*to srvr send */ #define MAILDIR "mails/" /*local emails */ #define SHELDIR "shell/" /*var/lib shell */ #define UTILDIR "utilities/" /*var/lib util */ #define SUPODIR "support/" /* " support */ #define EMAILEXT "-E" /*Data E-mail extension */ #define QUEUEEXT "-Q" /*Data Queue extension */ /*QUEUE Directive */ #define SMAILF "MAIL FROM:" #define SRCPTT "RCPT TO:" #define SRELAY "RELAY" #define SLISTEN "LISTEN" #define SQUIT "Quit" /*SMTP avail command */ #define RSET "RSET" /*smtp reset cmd*/ #define DATA "DATA" /*smtp data cmd */ #define MAILFRM "MAIL FROM: <%s>" #define RCPTTO "RCPT TO: <%s>" #define HELO "HELO %s" #define EHLO "EHLO %s" #define STARTTLS "STARTTLS" /*mentor API definition */ #define CHKID "CHKID" /*check RCPT againt FROM*/ #define UNIQID "UNIQID"/*Info about a uniq ID */ #define CKRCPT "CKRCPT"/*check RCPT againt FROM*/ #define CKRSND "CKRSND"/*check RCPT via sender */ #define CKRRLY "CKRRLY"/*check RCPT via relay */ #define CKRMNT "CKRMNT"/*check RCPT via mentor */ #define CKCODE "CKCODE"/*Mentor access code */ #define DROPME "DROPME"/* " access disconnect*/ #define REFRESH "RFRSH" /*Mentor user refresh */ #define ADVICE "ADVICE"/*ask help to mentor */ #define SENT "SENT" /*List of Email sent */ #define MENID "MENID" /*Unique log identifier */ #define CLIP "Clip" /*Client IP */ #define MFROM "M-From"/*Mail from */ #define HFROM "H-From"/*E-mail header from */ #define HTO "H-To" /*E-mail header distlist*/ #define SUBJ "Subj" /*E-mail subject */ #define MSGID "MsgId" /*E-mail Messages ID */ #define RPLID "RplId" /*E-mail Reply Msg ID */ #define MSGINF "MsgInf"/*E-mail info */ #define SPAM "Spam" /*E-mail spam level */ #define VIRINF "Virus" /*E-mail virus name */ #define ADVRCPT "RCPT" /*E-mail rcpt entry */ #define ADVINFO "RINFO" /*rcpt advice info */ /*Header add on extension marker */ #define XCLEM "X-Clement-" /*SMTP protocol status */ #define GIVADV 110 /*Request an advice */ #define RETADV 120 /*advice return */ #define SENADV 130 /*send file advice */ #define QUAADV 131 /*Quarantine advice */ #define DISADV 140 /*Discarded advice */ #define RLYADV 141 /*Advice E-mail relayed */ #define MNTCHK 150 /*Check done by mentor */ #define SIGNON 220 /*signon information */ #define QUITOK 221 /*status on QUIT */ #define IDOK 235 /*Authentication ID OK */ #define CMDOK 250 /*Everything OK */ #define RELAYOK 251 /*Mail can be relayed */ #define NOVRFY 252 /*NO VRFY command */ #define SENDB64 334 /*Send B64 data */ #define DATAOK 354 /*ready to accept data */ #define ERRPROC 451 /*local error/processing*/ #define CHKUSR 452 /*Need check user exist */ #define TOOMANY 453 /*too many mail in queue*/ #define TOOOFT 455 /*connecting too often */ #define ALREAD 456 /*already connected */ #define NEWSITE 457 /*new to me (SPF) */ #define NOSNDR 458 /*sender not connected */ #define NOCHKR 459 /*No checker available */ #define SYNERR 500 /*syntax error */ #define BADPAR 501 /*error in parameters */ #define CMDBAD 502 /*cmd not implemented */ #define BADSEQ 503 /*bad command sequence */ #define BADAUTH 504 /*AUTH not available */ #define NOOP 505 /*Not allowed operation */ #define STOLEN 506 /*trying to steal ID */ #define ONHOLD 507 /*system no ready */ #define BADHDR 510 /*bad headers sequence */ #define BADID 535 /*User ID rejected */ #define EXPIRED 536 /*Contract date expired */ #define REJECT 550 /*E-mail/domain rejected*/ #define NOLOC 551 /*User not local */ #define MALABRT 552 /*mail aborted */ #define CMDABRT 553 /*aborted command */ #define FAILED 554 /*transaction failed */ #define NORELAY 555 /*we do not relay */ #define NOMENT 556 /*Not known by Clement */ #define NORESP 558 /*daemon no responding */ #define OPRELAY 559 /*daemon allowing relay */ #define BADVIR 560 /*VIRUS found in E-mail */ #define DOMNRES 561 /*Domain do not resolve */ #define NOSPAMS 562 /*we do not allow spam */ #define BADMX 563 /*NO MX with Email addr */ #define BADSPF 564 /*SPF info do not comply*/ #define MANYRJT 565 /*Too many reject */ #define NCHKED 601 /*ID not checked yet */ #define UNVALID 602 /*ID may be unvalid */ #define TBRECHK 603 /*ID need to be recheck */ /*define debug log file reference */ typedef void STDDBG; typedef enum { /*returned by mentor */ m_indata, /*waiting to get E-mail */ m_direct, /*mail sent directly */ m_relayed, /*mail sent relayed */ m_quarantine, /*mail set in quarantine*/ m_rejected, /*mail reject by mentor */ m_discarded /*rcpt already seen */ }MENTYP; typedef struct { char *rcpt; /*SMTP RCPT address */ MENTYP status; /*User internal status */ int smtpstatus; /*user official status */ char *why; /*why user is rejected */ }RCPTYP; /*Inter process CKRCPT message structure */ typedef struct { char *iprem; /*Msg IPNUM origin */ char *from; /*SMTP 'From:' E-mail */ long taille; /*Email size */ int relais; /*relay allowed */ int listenport; /*SMPT listening port */ char *listenip; /*SMTP listening IP */ char *rcpt; /*SMPT 'Rcpt to:' E-mail*/ char *rqst; /*original request */ }RCPTMSG; typedef struct { /*recipient info */ int pos; /*Rcpt position */ char *email; /*recipient address */ int status; /*SMTP status */ char *why; /*status commentary */ }RCPADV; typedef struct { char *domain; /*domain ref */ char forwarded; /*advice rqst forwarded */ RCPADV **rcpts; /*rcpt info in this dom */ }DOMCHK; typedef struct { int msgnum; /*message number */ int msglast; /*among x messages */ int relayable; /*Rmt orig relayable */ char *info; /*Advice msg info */ char *hdom; /*Hfrom domain */ float spmlvl; /*E-mail spam level */ float spmlim; /*E-mail spam trigger */ DOMCHK **doms; /*domain to be checked */ }ADVIMSG; extern char **eml_splitmsg(char *msg); extern char *eml_strdomain(char *email); extern void eml_journal(char **datalogs); extern char **eml_adddata(char **data,char *frm,...); extern char *eml_ascstat(int status,...); extern int eml_getlistenport(char *listenip); extern RCPTMSG *eml_getrcptmsg(char *msg); extern RCPTMSG *eml_freercptmsg(RCPTMSG *rcptmsg); extern ADVIMSG *eml_getadvimsg(char *msg); extern ADVIMSG *eml_freeadvimsg(ADVIMSG *advimsg); extern char *eml_domtomsg(DOMCHK *dom); extern char *eml_domtoadv(DOMCHK *dom,int spam); extern STDDBG *eml_switchstd(char *name); extern STDDBG *eml_closeswitchstd(STDDBG *stdinfo); extern int eml_locatedomain(char **domains,char *dom); extern RCPTYP *eml_freercpt(RCPTYP *rcpt); extern char *eml_cleanendline(char *line); #endif