send.h (3265B)
1 #define MAXSAME 16 2 #define MAXSAMECHAR 1024 3 4 /* status of a destination*/ 5 typedef enum { 6 d_undefined, /* address has not been matched*/ 7 d_pipe, /* repl1|repl2 == delivery command, rep*/ 8 d_cat, /* repl1 == mail file */ 9 d_translate, /* repl1 == translation command*/ 10 d_alias, /* repl1 == translation*/ 11 d_auth, /* repl1 == command to authorize*/ 12 d_syntax, /* addr contains illegal characters*/ 13 d_unknown, /* addr does not match a rewrite rule*/ 14 d_loop, /* addressing loop*/ 15 d_eloop, /* external addressing loop*/ 16 d_noforward, /* forwarding not allowed*/ 17 d_badmbox, /* mailbox badly formatted*/ 18 d_resource, /* ran out of something we needed*/ 19 d_pipeto, /* pipe to from a mailbox*/ 20 } d_status; 21 22 /* a destination*/ 23 typedef struct dest dest; 24 struct dest { 25 dest *next; /* for chaining*/ 26 dest *same; /* dests with same cmd*/ 27 dest *parent; /* destination we're a translation of*/ 28 String *addr; /* destination address*/ 29 String *repl1; /* substitution field 1*/ 30 String *repl2; /* substitution field 2*/ 31 int pstat; /* process status*/ 32 d_status status; /* delivery status*/ 33 int authorized; /* non-zero if we have been authorized*/ 34 int nsame; /* number of same dests chained to this entry*/ 35 int nchar; /* number of characters in the command*/ 36 }; 37 38 typedef struct message message; 39 struct message { 40 String *sender; 41 String *replyaddr; 42 String *date; 43 String *body; 44 String *tmp; /* name of temp file */ 45 String *to; 46 int size; 47 int fd; /* if >= 0, the file the message is stored in*/ 48 char haveto; 49 String *havefrom; 50 String *havesender; 51 String *havereplyto; 52 char havedate; 53 char havemime; 54 String *havesubject; 55 char bulk; /* if Precedence: Bulk in header */ 56 char rfc822headers; 57 int received; /* number of received lines */ 58 char *boundary; /* bondary marker for attachments */ 59 }; 60 61 /* 62 * exported variables 63 */ 64 extern int rmail; 65 extern int onatty; 66 extern char *thissys, *altthissys; 67 extern int xflg; 68 extern int nflg; 69 extern int tflg; 70 extern int debug; 71 extern int nosummary; 72 73 /* 74 * exported procedures 75 */ 76 extern void authorize(dest*); 77 extern int cat_mail(dest*, message*); 78 extern dest *up_bind(dest*, message*, int); 79 extern int ok_to_forward(char*); 80 extern int lookup(char*, char*, Biobuf**, char*, Biobuf**); 81 extern dest *d_new(String*); 82 extern void d_free(dest*); 83 extern dest *d_rm(dest**); 84 extern void d_insert(dest**, dest*); 85 extern dest *d_rm_same(dest**); 86 extern void d_same_insert(dest**, dest*); 87 extern String *d_to(dest*); 88 extern dest *s_to_dest(String*, dest*); 89 extern void gateway(message*); 90 extern dest *expand_local(dest*); 91 extern void logdelivery(dest*, char*, message*); 92 extern void loglist(dest*, message*, char*); 93 extern void logrefusal(dest*, message*, char*); 94 extern int default_from(message*); 95 extern message *m_new(void); 96 extern void m_free(message*); 97 extern message *m_read(Biobuf*, int, int); 98 extern int m_get(message*, long, char**); 99 extern int m_print(message*, Biobuf*, char*, int); 100 extern int m_bprint(message*, Biobuf*); 101 extern String *rule_parse(String*, char*, int*); 102 extern int getrules(void); 103 extern int rewrite(dest*, message*); 104 extern void dumprules(void); 105 extern void regerror(char*); 106 extern dest *translate(dest*); 107 extern char* skipequiv(char*); 108 extern int refuse(dest*, message*, char*, int, int);