Blob


1 #define MAXSAME 16
2 #define MAXSAMECHAR 1024
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;
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 };
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 };
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;
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);