1 /*        $NetBSD: cleanup_user.h,v 1.4 2025/02/25 19:15:45 christos Exp $      */
2 
3 #ifndef _CLEANUP_USER_H_INCLUDED_
4 #define _CLEANUP_USER_H_INCLUDED_
5 
6 /*++
7 /* NAME
8 /*        cleanup_user 3h
9 /* SUMMARY
10 /*        cleanup user interface codes
11 /* SYNOPSIS
12 /*        #include <cleanup_user.h>
13 /* DESCRIPTION
14 /* .nf
15 
16  /*
17   * Client processing options. Flags 16- are reserved for cleanup.h.
18   */
19 #define CLEANUP_FLAG_NONE     0         /* No special features */
20 #define CLEANUP_FLAG_BOUNCE   (1<<0)    /* Bounce bad messages */
21 #define CLEANUP_FLAG_FILTER   (1<<1)    /* Enable header/body checks */
22 #define CLEANUP_FLAG_HOLD     (1<<2)    /* Place message on hold */
23 #define CLEANUP_FLAG_DISCARD  (1<<3)    /* Discard message silently */
24 #define CLEANUP_FLAG_BCC_OK   (1<<4)    /* Ok to add auto-BCC addresses */
25 #define CLEANUP_FLAG_MAP_OK   (1<<5)    /* Ok to map addresses */
26 #define CLEANUP_FLAG_MILTER   (1<<6)    /* Enable Milter applications */
27 #define CLEANUP_FLAG_SMTP_REPLY         (1<<7)    /* Enable SMTP reply */
28 #define CLEANUP_FLAG_SMTPUTF8 (1<<8)    /* SMTPUTF8 requested */
29 #define CLEANUP_FLAG_AUTOUTF8 (1<<9)    /* Autodetect SMTPUTF8 */
30 
31 #define CLEANUP_FLAG_FILTER_ALL         (CLEANUP_FLAG_FILTER | CLEANUP_FLAG_MILTER)
32 
33  /*
34   * These are normally set when receiving mail from outside.
35   */
36 #define CLEANUP_FLAG_MASK_EXTERNAL \
37           (CLEANUP_FLAG_FILTER_ALL | CLEANUP_FLAG_BCC_OK | CLEANUP_FLAG_MAP_OK)
38 
39  /*
40   * These are normally set when generating notices or when forwarding mail
41   * internally.
42   */
43 #define CLEANUP_FLAG_MASK_INTERNAL CLEANUP_FLAG_MAP_OK
44 
45  /*
46   * These are set on the fly while processing SMTP envelopes or message
47   * content.
48   */
49 #define CLEANUP_FLAG_MASK_EXTRA \
50           (CLEANUP_FLAG_HOLD | CLEANUP_FLAG_DISCARD)
51 
52  /*
53   * Diagnostics.
54   *
55   * CLEANUP_STAT_CONT and CLEANUP_STAT_DEFER both update the reason attribute,
56   * but CLEANUP_STAT_DEFER takes precedence. It terminates queue record
57   * processing, and prevents bounces from being sent.
58   */
59 #define CLEANUP_STAT_OK                 0         /* Success. */
60 #define CLEANUP_STAT_BAD      (1<<0)    /* Internal protocol error */
61 #define CLEANUP_STAT_WRITE    (1<<1)    /* Error writing message file */
62 #define CLEANUP_STAT_SIZE     (1<<2)    /* Message file too big */
63 #define CLEANUP_STAT_CONT     (1<<3)    /* Message content rejected */
64 #define CLEANUP_STAT_HOPS     (1<<4)    /* Too many hops */
65 #define CLEANUP_STAT_RCPT     (1<<6)    /* No recipients found */
66 #define CLEANUP_STAT_PROXY    (1<<7)    /* Proxy reject */
67 #define CLEANUP_STAT_DEFER    (1<<8)    /* Temporary reject */
68 #define CLEANUP_STAT_NOPERM   (1<<9)    /* Denied by non-content policy */
69 
70  /*
71   * Non-cleanup errors that live in the same bitmask space, to centralize
72   * error handling.
73   */
74 #define CLEANUP_STAT_BARE_LF   (1<<16)  /* Bare <LF> received */
75 
76  /*
77   * These are set when we can't bounce even if we were asked to.
78   */
79 #define CLEANUP_STAT_MASK_CANT_BOUNCE \
80           (CLEANUP_STAT_BAD | CLEANUP_STAT_WRITE | CLEANUP_STAT_DEFER \
81               | CLEANUP_STAT_RCPT)
82 
83  /*
84   * These are set when we can't examine every record of a message.
85   */
86 #define CLEANUP_STAT_MASK_INCOMPLETE \
87           (CLEANUP_STAT_BAD | CLEANUP_STAT_WRITE | CLEANUP_STAT_SIZE \
88               | CLEANUP_STAT_DEFER)
89 
90  /*
91   * Mapping from status code to DSN detail and free text.
92   */
93 typedef struct {
94     const unsigned status;              /* CLEANUP_STAT_MUMBLE */
95     const int smtp;                     /* RFC 821 */
96     const char *dsn;                              /* RFC 3463 */
97     const char *text;                             /* free text */
98 } CLEANUP_STAT_DETAIL;
99 
100 extern const char *cleanup_strerror(unsigned);
101 extern const CLEANUP_STAT_DETAIL *cleanup_stat_detail(unsigned);
102 extern const char *cleanup_strflags(unsigned);
103 
104 /* LICENSE
105 /* .ad
106 /* .fi
107 /*        The Secure Mailer license must be distributed with this software.
108 /* AUTHOR(S)
109 /*        Wietse Venema
110 /*        IBM T.J. Watson Research
111 /*        P.O. Box 704
112 /*        Yorktown Heights, NY 10598, USA
113 /*
114 /*        Wietse Venema
115 /*        Google, Inc.
116 /*        111 8th Avenue
117 /*        New York, NY 10011, USA
118 /*--*/
119 
120 #endif
121