108 lines
3.2 KiB
C
108 lines
3.2 KiB
C
#define MAXSAME 16
|
|
#define MAXSAMECHAR 1024
|
|
|
|
/* status of a destination*/
|
|
typedef enum {
|
|
d_undefined, /* address has not been matched*/
|
|
d_pipe, /* repl1|repl2 == delivery command, rep*/
|
|
d_cat, /* repl1 == mail file */
|
|
d_translate, /* repl1 == translation command*/
|
|
d_alias, /* repl1 == translation*/
|
|
d_auth, /* repl1 == command to authorize*/
|
|
d_syntax, /* addr contains illegal characters*/
|
|
d_unknown, /* addr does not match a rewrite rule*/
|
|
d_loop, /* addressing loop*/
|
|
d_eloop, /* external addressing loop*/
|
|
d_noforward, /* forwarding not allowed*/
|
|
d_badmbox, /* mailbox badly formatted*/
|
|
d_resource, /* ran out of something we needed*/
|
|
d_pipeto, /* pipe to from a mailbox*/
|
|
} d_status;
|
|
|
|
/* a destination*/
|
|
typedef struct dest dest;
|
|
struct dest {
|
|
dest *next; /* for chaining*/
|
|
dest *same; /* dests with same cmd*/
|
|
dest *parent; /* destination we're a translation of*/
|
|
String *addr; /* destination address*/
|
|
String *repl1; /* substitution field 1*/
|
|
String *repl2; /* substitution field 2*/
|
|
int pstat; /* process status*/
|
|
d_status status; /* delivery status*/
|
|
int authorized; /* non-zero if we have been authorized*/
|
|
int nsame; /* number of same dests chained to this entry*/
|
|
int nchar; /* number of characters in the command*/
|
|
};
|
|
|
|
typedef struct message message;
|
|
struct message {
|
|
String *sender;
|
|
String *replyaddr;
|
|
String *date;
|
|
String *body;
|
|
String *tmp; /* name of temp file */
|
|
String *to;
|
|
int size;
|
|
int fd; /* if >= 0, the file the message is stored in*/
|
|
char haveto;
|
|
String *havefrom;
|
|
String *havesender;
|
|
String *havereplyto;
|
|
char havedate;
|
|
char havemime;
|
|
String *havesubject;
|
|
char bulk; /* if Precedence: Bulk in header */
|
|
char rfc822headers;
|
|
int received; /* number of received lines */
|
|
char *boundary; /* bondary marker for attachments */
|
|
};
|
|
|
|
/*
|
|
* exported variables
|
|
*/
|
|
extern int rmail;
|
|
extern int onatty;
|
|
extern char *thissys, *altthissys;
|
|
extern int xflg;
|
|
extern int nflg;
|
|
extern int tflg;
|
|
extern int debug;
|
|
extern int nosummary;
|
|
|
|
/*
|
|
* exported procedures
|
|
*/
|
|
extern void authorize(dest*);
|
|
extern int cat_mail(dest*, message*);
|
|
extern dest *up_bind(dest*, message*, int);
|
|
extern int ok_to_forward(char*);
|
|
extern int lookup(char*, char*, Biobuf**, char*, Biobuf**);
|
|
extern dest *d_new(String*);
|
|
extern void d_free(dest*);
|
|
extern dest *d_rm(dest**);
|
|
extern void d_insert(dest**, dest*);
|
|
extern dest *d_rm_same(dest**);
|
|
extern void d_same_insert(dest**, dest*);
|
|
extern String *d_to(dest*);
|
|
extern dest *s_to_dest(String*, dest*);
|
|
extern void gateway(message*);
|
|
extern dest *expand_local(dest*);
|
|
extern void logdelivery(dest*, char*, message*);
|
|
extern void loglist(dest*, message*, char*);
|
|
extern void logrefusal(dest*, message*, char*);
|
|
extern int default_from(message*);
|
|
extern message *m_new(void);
|
|
extern void m_free(message*);
|
|
extern message *m_read(Biobuf*, int, int);
|
|
extern int m_get(message*, long, char**);
|
|
extern int m_print(message*, Biobuf*, char*, int);
|
|
extern int m_bprint(message*, Biobuf*);
|
|
extern String *rule_parse(String*, char*, int*);
|
|
extern int getrules(void);
|
|
extern int rewrite(dest*, message*);
|
|
extern void dumprules(void);
|
|
extern void regerror(char*);
|
|
extern dest *translate(dest*);
|
|
extern char* skipequiv(char*);
|
|
extern int refuse(dest*, message*, char*, int, int);
|