1 /* $NetBSD: mail_server.h,v 1.4 2022/10/08 16:12:46 christos Exp $ */ 2 3 /*++ 4 /* NAME 5 /* mail_server 3h 6 /* SUMMARY 7 /* skeleton servers 8 /* SYNOPSIS 9 /* #include <mail_server.h> 10 /* DESCRIPTION 11 /* .nf 12 13 /* 14 * Utility library. 15 */ 16 #include <vstream.h> 17 #include <htable.h> 18 19 /* 20 * Global library. 21 */ 22 #include <mail_conf.h> 23 24 /* 25 * External interface. Tables are defined in mail_conf.h. 26 */ 27 #define MAIL_SERVER_INT_TABLE 1 28 #define MAIL_SERVER_STR_TABLE 2 29 #define MAIL_SERVER_BOOL_TABLE 3 30 #define MAIL_SERVER_TIME_TABLE 4 31 #define MAIL_SERVER_RAW_TABLE 5 32 #define MAIL_SERVER_NINT_TABLE 6 33 #define MAIL_SERVER_NBOOL_TABLE 7 34 #define MAIL_SERVER_LONG_TABLE 8 35 36 #define MAIL_SERVER_PRE_INIT 10 37 #define MAIL_SERVER_POST_INIT 11 38 #define MAIL_SERVER_LOOP 12 39 #define MAIL_SERVER_EXIT 13 40 #define MAIL_SERVER_PRE_ACCEPT 14 41 #define MAIL_SERVER_SOLITARY 15 42 #define MAIL_SERVER_UNLIMITED 16 43 #define MAIL_SERVER_PRE_DISCONN 17 44 #define MAIL_SERVER_PRIVILEGED 18 45 #define MAIL_SERVER_WATCHDOG 19 46 47 #define MAIL_SERVER_IN_FLOW_DELAY 20 48 #define MAIL_SERVER_SLOW_EXIT 21 49 #define MAIL_SERVER_BOUNCE_INIT 22 50 #define MAIL_SERVER_RETIRE_ME 23 51 #define MAIL_SERVER_POST_ACCEPT 24 52 53 typedef void (*MAIL_SERVER_INIT_FN) (char *, char **); 54 typedef int (*MAIL_SERVER_LOOP_FN) (char *, char **); 55 typedef void (*MAIL_SERVER_EXIT_FN) (char *, char **); 56 typedef void (*MAIL_SERVER_ACCEPT_FN) (char *, char **); 57 typedef void (*MAIL_SERVER_POST_ACCEPT_FN) (VSTREAM *, char *, char **, HTABLE *); 58 typedef void (*MAIL_SERVER_DISCONN_FN) (VSTREAM *, char *, char **); 59 typedef void (*MAIL_SERVER_SLOW_EXIT_FN) (char *, char **); 60 61 /* Type-checked API for external use. */ 62 #define CA_MAIL_SERVER_INT_TABLE(v) MAIL_SERVER_INT_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_INT_TABLE, (v)) 63 #define CA_MAIL_SERVER_STR_TABLE(v) MAIL_SERVER_STR_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_STR_TABLE, (v)) 64 #define CA_MAIL_SERVER_BOOL_TABLE(v) MAIL_SERVER_BOOL_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_BOOL_TABLE, (v)) 65 #define CA_MAIL_SERVER_TIME_TABLE(v) MAIL_SERVER_TIME_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_TIME_TABLE, (v)) 66 #define CA_MAIL_SERVER_RAW_TABLE(v) MAIL_SERVER_RAW_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_RAW_TABLE, (v)) 67 #define CA_MAIL_SERVER_NINT_TABLE(v) MAIL_SERVER_NINT_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_NINT_TABLE, (v)) 68 #define CA_MAIL_SERVER_NBOOL_TABLE(v) MAIL_SERVER_NBOOL_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_NBOOL_TABLE, (v)) 69 #define CA_MAIL_SERVER_LONG_TABLE(v) MAIL_SERVER_LONG_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_LONG_TABLE, (v)) 70 #define CA_MAIL_SERVER_PRE_INIT(v) MAIL_SERVER_PRE_INIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_INIT_FN, (v)) 71 #define CA_MAIL_SERVER_POST_INIT(v) MAIL_SERVER_POST_INIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_INIT_FN, (v)) 72 #define CA_MAIL_SERVER_LOOP(v) MAIL_SERVER_LOOP, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_LOOP_FN, (v)) 73 #define CA_MAIL_SERVER_EXIT(v) MAIL_SERVER_EXIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_EXIT_FN, (v)) 74 #define CA_MAIL_SERVER_PRE_ACCEPT(v) MAIL_SERVER_PRE_ACCEPT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_ACCEPT_FN, (v)) 75 #define CA_MAIL_SERVER_POST_ACCEPT(v) MAIL_SERVER_POST_ACCEPT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_POST_ACCEPT_FN, (v)) 76 #define CA_MAIL_SERVER_SOLITARY MAIL_SERVER_SOLITARY 77 #define CA_MAIL_SERVER_UNLIMITED MAIL_SERVER_UNLIMITED 78 #define CA_MAIL_SERVER_PRE_DISCONN(v) MAIL_SERVER_PRE_DISCONN, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_DISCONN_FN, (v)) 79 #define CA_MAIL_SERVER_PRIVILEGED MAIL_SERVER_PRIVILEGED 80 #define CA_MAIL_SERVER_WATCHDOG(v) MAIL_SERVER_WATCHDOG, CHECK_PTR(MAIL_SERVER, int, (v)) 81 #define CA_MAIL_SERVER_IN_FLOW_DELAY MAIL_SERVER_IN_FLOW_DELAY 82 #define CA_MAIL_SERVER_SLOW_EXIT(v) MAIL_SERVER_SLOW_EXIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_SLOW_EXIT_FN, (v)) 83 #define CA_MAIL_SERVER_BOUNCE_INIT(v, w) MAIL_SERVER_BOUNCE_INIT, CHECK_PTR(MAIL_SERVER, char, (v)), CHECK_PPTR(MAIL_SERVER, char, (w)) 84 #define CA_MAIL_SERVER_RETIRE_ME MAIL_SERVER_RETIRE_ME 85 86 CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_SLOW_EXIT_FN); 87 CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_LOOP_FN); 88 CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_INIT_FN); 89 CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_EXIT_FN); 90 CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_DISCONN_FN); 91 CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_ACCEPT_FN); 92 CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_POST_ACCEPT_FN); 93 CHECK_PTR_HELPER_DCL(MAIL_SERVER, int); 94 CHECK_PTR_HELPER_DCL(MAIL_SERVER, char); 95 CHECK_PPTR_HELPER_DCL(MAIL_SERVER, char); 96 CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_TIME_TABLE); 97 CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_STR_TABLE); 98 CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_RAW_TABLE); 99 CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_NINT_TABLE); 100 CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_NBOOL_TABLE); 101 CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_LONG_TABLE); 102 CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_INT_TABLE); 103 CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_BOOL_TABLE); 104 105 /* 106 * single_server.c 107 */ 108 typedef void (*SINGLE_SERVER_FN) (VSTREAM *, char *, char **); 109 extern NORETURN single_server_main(int, char **, SINGLE_SERVER_FN,...); 110 111 /* 112 * multi_server.c 113 */ 114 typedef void (*MULTI_SERVER_FN) (VSTREAM *, char *, char **); 115 extern NORETURN multi_server_main(int, char **, MULTI_SERVER_FN,...); 116 extern void multi_server_disconnect(VSTREAM *); 117 extern int multi_server_drain(void); 118 119 /* 120 * event_server.c 121 */ 122 typedef void (*EVENT_SERVER_FN) (VSTREAM *, char *, char **); 123 extern NORETURN event_server_main(int, char **, EVENT_SERVER_FN,...); 124 extern void event_server_disconnect(VSTREAM *); 125 extern int event_server_drain(void); 126 127 /* 128 * trigger_server.c 129 */ 130 typedef void (*TRIGGER_SERVER_FN) (char *, ssize_t, char *, char **); 131 extern NORETURN trigger_server_main(int, char **, TRIGGER_SERVER_FN,...); 132 133 #define TRIGGER_BUF_SIZE 1024 134 135 /* 136 * dgram_server.c 137 */ 138 typedef void (*DGRAM_SERVER_FN) (char *, ssize_t, char *, char **); 139 extern NORETURN dgram_server_main(int, char **, DGRAM_SERVER_FN,...); 140 141 #define DGRAM_BUF_SIZE 4096 142 143 /* LICENSE 144 /* .ad 145 /* .fi 146 /* The Secure Mailer license must be distributed with this software. 147 /* AUTHOR(S) 148 /* Wietse Venema 149 /* IBM T.J. Watson Research 150 /* P.O. Box 704 151 /* Yorktown Heights, NY 10598, USA 152 /* 153 /* Wietse Venema 154 /* Google, Inc. 155 /* 111 8th Avenue 156 /* New York, NY 10011, USA 157 /*--*/ 158