#ifndef _MAIL_H
#define _MAIL_H
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <ctype.h>
#include <sys/types.h>
#include <errno.h>
#include <pwd.h>
#include <signal.h>
#include <string.h>
#include <grp.h>
#define _CLOCK_T
#include <time.h>
#include <sys/stat.h>
#include <setjmp.h>
#include <sys/utsname.h>
#include <limits.h>
#ifdef SVR3
struct utimbuf {
time_t actime;
time_t modtime;
};
#else
# include <utime.h>
#endif
#include "libmail.h"
#ifdef SVR3
# ifndef sun
typedef int gid_t;
typedef int uid_t;
# endif
typedef int pid_t;
#endif
#define CHILD 0
#define SAME 0
#define BELL 07
# define PIPER "/usr/lib/mail/mail_pipe"
#define SENDMAIL "/usr/lib/sendmail"
#define CERROR -1
#define CSUCCESS 0
#define TRUE 1
#define FALSE 0
#define HEAD 1
#define TAIL 0
#define REAL 1
#define DEFAULT 0
#define NOMATCH -1
#define DELIVER 0
#define POSTDELIVER 1
#define DENY 2
#define TRANSLATE 3
#define FAILURE 0
#define CONTINUE 1
#define SUCCESS 2
#define HDRSIZ 1024
#define E_FLGE 1
#define E_FLGE_OM 2
#define E_REMOTE 1
#define E_FILE 2
#define E_SPACE 3
#define E_FRWD 4
#define E_SYNTAX 5
#define E_FRWL 6
#define E_SNDR 7
#define E_USER 8
#define E_FROM 9
#define E_PERM 10
#define E_MBOX 11
#define E_TMP 12
#define E_DEAD 13
#define E_UNBND 14
#define E_LOCK 15
#define E_GROUP 16
#define E_MEM 17
#define E_FORK 18
#define E_PIPE 19
#define E_OWNR 20
#define E_DENY 21
#define E_SURG 22
#define H_AFWDCNT 1
#define H_AFWDFROM 2
#define H_CLEN 3
#define H_CTYPE 4
#define H_DATE 5
#define H_DEFOPTS 6
#define H_EOH 7
#define H_FROM 8
#define H_FROM1 9
#define H_FROM2 10
#define H_MIMEVERS 11
#define H_MTSID 12
#define H_MTYPE 13
#define H_MVERS 14
#define H_MSVC 15
#define H_RECEIVED 16
#define H_RVERS 17
#define H_SUBJ 18
#define H_TO 19
#define H_TCOPY 20
#define H_TROPTS 21
#define H_UAID 22
#define H_DAFWDFROM 23
#define H_DTCOPY 24
#define H_DRECEIVED 25
#define H_CONT 26
#define H_NAMEVALUE 27
#define DELIVERY 001
#define NODELIVERY 002
#define REPORT 010
#define RETURN 020
#define IGNORE 040
#define REMOTE 1
#define ORDINARY 2
#define ZAP 3
#define FORWARD 4
#define TTY 5
#define LSIZE (2*BUFSIZ)
#define MAXLET 1000
#define FROMLEVELS 20
#ifdef FILENAME_MAX
# define MAXFILENAME FILENAME_MAX
#else
# define MAXFILENAME 512
#endif
#define DEADPERM 0600
#ifndef MFMODE
#define MFMODE 0660
#endif
#define A_OK 0
#define A_EXECUTE 1
#define A_EXIST 0
#define A_WRITE 2
#define A_READ 4
# define MAILSURR "/etc/mail/mailsurr"
# define MAILCNFG "/etc/mail/mailcnfg"
struct hdr {
char *tag;
int default_display;
};
struct hdrs {
struct hdrs *next;
struct hdrs *prev;
struct hdrs *cont;
char value[HDRSIZ+1];
};
struct hdrlines {
struct hdrs *head;
struct hdrs *tail;
};
typedef struct recip {
struct recip *next;
char *name;
} recip;
typedef struct reciplist {
recip *last_recip;
recip recip_list;
} reciplist;
struct let {
long adr;
char change;
char text;
};
typedef enum t_surrtype
{
t_eof, t_transport = '<',
t_accept = 'a', t_deny = 'd',
t_translate = 't', t_postprocess = '>'
} t_surrtype;
typedef struct t_surrfile
{
string *orig_pattern;
char *orig_regex;
int orig_reglen;
int orig_nbra;
string *recip_pattern;
char *recip_regex;
int recip_reglen;
int recip_nbra;
t_surrtype surr_type;
int batchsize;
char *statlist;
string *cmd_left;
string *cmd_right;
int fullyresolved;
} t_surrfile;
#include <stdlib.h>
#include <unistd.h>
extern void Dout(char *subname, int level, char *fmt, ...);
extern void Tout(char *subname, char *msg, ...);
extern int add_recip(reciplist *plist, char *name, int checkdups);
extern char *altcompile(const char *instring, char *expbuf, char *endbuf);
extern int areforwarding(char *mailfile);
extern void cat(char*, char*, char*);
extern int ckdlivopts(int tcopy_hdr, int *svopts);
extern void cksaved(char *user);
extern int cksurg_rc(int surr_num, int rc);
extern void clr_hinfo(void);
extern void clrhdr(int hdrtype);
extern void cmdexpand(int letnum, string *instr, string *outstr, char **lbraslist, char **lbraelist);
extern void copyback(void);
extern int copylet(int letnum, FILE *f, int type);
extern void copymt(FILE *f1, FILE *f2);
extern void createmf(uid_t uid, char *file);
extern void del_reciplist (reciplist *list);
extern void delete(int);
extern void doFopt(void);
extern void done(int) __NORETURN;
extern void sig_done(int);
extern FILE *doopen(char *file, char *type, int errnum);
extern int dowait(pid_t pidval);
extern void dumpaff(int type, int htype, int *didafflines, int *suppress, FILE *f);
extern void dumprcv(int type, int htype, int *didrcvlines, int *suppress, FILE *f);
extern void errmsg(int error_value, char *error_message);
extern int findSurg(int letnum, string *execbuf, int flag, int *psurr_num, int *paccept, string *lorig, string *lrecipname);
extern void gendeliv(FILE *fp, int rc, char *name);
extern int getcomment(char *s, char *q);
extern int gethead(int current, int all);
extern int getaline(char *ptr2line, int max, FILE *f);
extern int getnumbr(char *s);
extern int getsurr(FILE *fp, string *buf, int firstfield);
extern void goback(int letnum);
extern int init(void);
extern void initsurrfile(void);
extern int isheader(char *lp, int *ctfp);
extern int isit(char *lp, int type);
extern int islocal(char *user, uid_t *puid);
extern int istext(unsigned char *s, int size);
extern int legal(char *file);
extern void lock(char *user);
extern void madd_recip(reciplist *plist, char *name, int checkdups);
extern char *mailcompile(string *pattern, int *retlen, int *retnbra);
extern void mkdead(void);
extern void mktmp(void);
extern void mta_ercode(FILE *outfile);
extern void new_reciplist (reciplist *list);
extern int notme(char *fto, char *myname);
extern int parse(int argc, char **argv);
extern int pckaffspot(void);
extern int pckrcvspot(void);
extern void pickFrom(char *lineptr);
extern int pipletr(int letter, char *command, int cltype);
extern void poplist (int hdrtype, int where);
extern int printhdr (int type, int hdrtype, struct hdrs *hptr, FILE *fp);
extern void printmail(void);
extern void pushlist(int hdrtype, int where, char *s, int contflg);
extern void savdead(void);
extern void savehdrs(char *s, int hdrtype);
extern int sel_disp (int type, int hdrtype, char *s);
extern int sendlist(reciplist *list, int letnum, int level);
extern void sendmail(int argc, char **argv);
extern int sendsurg(reciplist *plist, int letnum, int flag, int local);
extern void setletr(int letter, int status);
extern void (*setsig(int i, void(*f)()))();
extern void setsurg_bt(string *st, int *pbatchsize, int *presolved);
extern char *setsurg_rc(string *st, int defreal, int *pbatchsize);
extern char **setup_exec(char*);
extern void stamp(void);
extern int systm(char *s);
extern void tmperr(void);
extern string *tokdef(string *fld, string *tok, char *name);
extern int translate(reciplist *plist, char *cmdstr, char *origname);
extern void unlock(void);
extern int validmsg(int);
extern int wtmpf(char *str, int length);
extern int ac;
extern char **av;
extern int affbytecnt;
extern int affcnt;
extern int Daffbytecnt;
extern int Daffcnt;
extern char binmsg[];
extern int changed;
extern char datestring[60];
extern char dbgfname[20];
extern FILE *dbgfp;
extern char dead[];
extern int debug;
extern int delflg;
extern int dflag;
extern char *errlist[];
extern int error;
extern char *failsafe;
extern int file_size;
extern int flge;
extern int flgE;
extern int flgF;
extern int flgf;
extern int flgh;
extern int flgm;
extern int flgp;
extern int flgP;
extern int flgr;
extern int flgt;
extern int flgT;
extern int flgw;
extern int fnuhdrtype;
extern char forwmsg[];
extern char frwlmsg[];
extern char fromS[1024];
extern char fromU[1024];
extern char frwrd[];
extern char fwdFrom[1024];
extern int goerr;
extern struct group *grpptr;
extern struct hdrlines hdrlines[H_CONT];
extern struct hdr header[];
extern char *help[];
extern char *hmbox;
extern char *hmdead;
extern char *home;
extern time_t iop;
extern int interactive;
extern int ismail;
extern int deliverflag;
extern int fromflag;
extern int keepdbgfile;
extern struct let let[MAXLET];
extern char *lettmp;
extern char lfil[MAXFILENAME];
extern char line[LSIZE];
extern char *mailfile;
extern char mailcnfg[];
extern char maildir[];
extern gid_t mailgrp;
extern char mailsave[];
extern char *mailsurr;
extern FILE *malf;
extern int maxerr;
extern char mbox[];
extern uid_t mf_uid;
extern gid_t mf_gid;
extern char *msgtype;
extern char my_name[1024];
extern char from_user[1024];
extern uid_t my_euid;
extern gid_t my_egid;
extern uid_t my_uid;
extern gid_t my_gid;
extern int nlet;
extern int onlet;
extern int optcnt;
extern int orig_aff;
extern int orig_dbglvl;
extern int orig_rcv;
extern int orig_tcopy;
extern struct passwd *pwd;
extern int pflg;
extern int Pflg;
extern char *program;
extern int rcvbytecnt;
extern int Drcvbytecnt;
extern char *recipname;
extern int replying;
extern char RFC822datestring[60];
extern char rmtmsg[];
extern char Rpath[1024];
extern char rtrnmsg[];
extern int sav_errno;
extern char savefile[MAXFILENAME];
extern void (*saveint)(int);
extern char *seldisp[];
extern int sending;
extern char m_sendto[1024];
extern jmp_buf sjbuf;
extern int surg_rc;
extern t_surrfile *surrfile;
extern int surr_len;
extern char *SURRcmdstr;
extern FILE *SURRerrfile;
extern char *thissys;
extern FILE *tmpf;
extern mode_t umsave;
extern struct utsname utsn;
extern struct utimbuf *utimep;
extern char uval[1024];
#ifdef NOTDEF
#ifdef sun
#define _NFILE getdtablesize()
#endif
#endif
#endif