/************************************************/ /* */ /* Copyright: */ /* Jean-Marc Pigeon <jmp@safe.ca> */ /* Distributed under the Gnu Public */ /* License, see the License file in this */ /* package. */ /* */ /* Define management level routines to */ /* handle SMTP protocol exchange with */ /* remote site. */ /* */ /************************************************/ #ifndef LVLEML #define LVLEML #include "unieml.h" #include "unicac.h" #include "gescnf.h" #include "gestls.h" #include "gesipc.h" #include "geshdr.h" #define MAILFRM "MAIL FROM: <%s>" #define RCPTTO "RCPT TO: <%s>" #define NORVERS "No_Reverse" #define CPTLS 0x0001 /*is STARTTLS capable */ #define CPRQT 0x0002 /*is CKRCPT capable */ /*default Checker code value */ #define NCKCODE "NCKCODE" typedef enum { /*domain control mode */ c_local, /*dom is local */ c_standard, /*dom checked by MTA */ c_mentor /*dom checked by mentor */ }CTMOD; typedef enum { s_quit, /*SMTP exch completed */ s_rcpt, /*RCPT request. */ s_data, /*DATA contents received*/ s_timeout, /*SMTP exchange timeout */ s_reset, /*A reset was requested */ s_chkid, /*A Check USER ID rqsted*/ s_auth, /*An authentication rqst*/ s_unknown /*SMTP code unknown */ }SCODTYP; typedef struct { char *from; /*SMTP from */ char *ipremote; /*orig remote IP number */ char *listenip; /*listening to IP */ int listenport; /*listening port */ u_long mtaille; /*announced mail size */ }FRMTYP; typedef struct { /*E-mail connection info*/ TLSFILE *tls; /*ref to TLS channel */ time_t lastxchg;/*contact last exchange */ SCODTYP code; /*action code */ int capable; /*remote capability */ char *info; /*code related info */ char *mentunid; /*mentor unique ID */ char *clamvers; /*clamav used version */ int sequence; /*received E-mail number*/ char *session; /*uniq session id */ char *dbgname; /*dbg file name (stdout)*/ int listenport; /*port used to listen */ char *listenip; /*ipnum used to listen */ char *attime; /*contact starting time */ char *locname; /*local interface name */ char *peername; /*remote interface name */ char *ipremote; /*remote ip number */ int remoteport; /*remote port number */ char *hostname; /*remote called hostname*/ char *cipherid; /*information about TLS */ char *dataname; /*E-mail full filename */ char *ckcode; /*Checker Unique code */ u_long mtaille; /*email number of bytes */ int authtry; /*number of auth trial */ int authok; /*email is authenticated*/ int relayable; /*email is relayable */ FRMTYP *frm; /*SMTP FROM: information*/ RCPTYP **rcpts; /*RCPT list */ char **headers; /*E-mail header */ EVLTYP *evl; /*E-mail extracted hdrs */ }CTTYP; typedef struct { /*checker structure */ char *hostname; /*checker host name */ CTMOD control; /*controling mode */ int locked; /*sending channel locked*/ int relay; /*is sender a relay? */ int ckwait; /*maximun waiting time */ CTTYP *contact; /*Contact information */ char **doms; /*domains known */ }CHKTYP; typedef struct { /*skr list */ SKRTYP *sndr1; /*first option sender */ SKRTYP *chkr1; /*first option checker */ SKRTYP *sndr2; /*relay sender */ }DOMTYP; extern int eml_checkfrom(CTTYP *contact,char *buffer); extern char *eml_checkto(CTTYP *contact,char *buffer); extern int eml_checkhelo(CTTYP *c,char *buffer,char sep); extern int eml_countadvice(CTTYP *contact,MENTYP status); extern void eml_settitle(CTTYP *contact); extern void eml_resetcontact(CTTYP *contact); extern CTTYP *eml_gotcontact(TLSFILE *tls); extern CHKTYP *eml_opensmtp(char *server,int ckwait); extern CHKTYP *eml_closesmtp(CHKTYP *smtp); extern CTTYP *eml_itsover(CTTYP *contact); extern CTTYP *eml_domails(CTTYP *contact); extern CTTYP *eml_openmails(char *addrname,int port,int swait); extern void eml_printfcrlf(TLSFILE *tls,char *fmt,...); extern int eml_sendcmd(CTTYP *contact,int expect,char *fmt,...); extern char *eml_xchgmsg(BOXTYP *boxe,pid_t dest,char *fmt,...); extern int eml_smtpidle(CHKTYP *smtp,int idle); extern CHKTYP *eml_openauxiliary(SKRTYP *skr,char *uniqid); extern CHKTYP *eml_closeauxiliary(CHKTYP *chn); extern int eml_sendingauxiliary(CHKTYP *auxi,char *queudir,char *email); extern int eml_senddata(CTTYP *cta,char *title,char **data); extern int eml_sendstream(CTTYP *cta,char *title,char *seq,char *msg); extern void eml_setsession(TLSFILE *tls,CTTYP *cta); extern int eml_checkuser(CHKTYP *checker,char *caller,char *rqst, char *email,PLDTYP *pld); extern DOMTYP *eml_findskr(SKRTYP **skrlst,char *domain,int relais); #endif