send.h 3.2 KB

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