Sophie

Sophie

distrib > Mandriva > 2009.0 > i586 > by-pkgid > c67614878826b4852b4141337f025dd6 > files > 27

clement-debug-2.1-0.133.4mdv2009.0.i586.rpm

/************************************************/
/*						*/
/*      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