1*fb52cf35Schristos /* $NetBSD: mail_server.h,v 1.4 2022/10/08 16:12:46 christos Exp $ */ 241fbaed0Stron 341fbaed0Stron /*++ 441fbaed0Stron /* NAME 541fbaed0Stron /* mail_server 3h 641fbaed0Stron /* SUMMARY 741fbaed0Stron /* skeleton servers 841fbaed0Stron /* SYNOPSIS 941fbaed0Stron /* #include <mail_server.h> 1041fbaed0Stron /* DESCRIPTION 1141fbaed0Stron /* .nf 1241fbaed0Stron 1341fbaed0Stron /* 1441fbaed0Stron * Utility library. 1541fbaed0Stron */ 1641fbaed0Stron #include <vstream.h> 17*fb52cf35Schristos #include <htable.h> 1841fbaed0Stron 1941fbaed0Stron /* 20837e7c1aSchristos * Global library. 21837e7c1aSchristos */ 22837e7c1aSchristos #include <mail_conf.h> 23837e7c1aSchristos 24837e7c1aSchristos /* 2541fbaed0Stron * External interface. Tables are defined in mail_conf.h. 2641fbaed0Stron */ 2741fbaed0Stron #define MAIL_SERVER_INT_TABLE 1 2841fbaed0Stron #define MAIL_SERVER_STR_TABLE 2 2941fbaed0Stron #define MAIL_SERVER_BOOL_TABLE 3 3041fbaed0Stron #define MAIL_SERVER_TIME_TABLE 4 3141fbaed0Stron #define MAIL_SERVER_RAW_TABLE 5 3241fbaed0Stron #define MAIL_SERVER_NINT_TABLE 6 33e8314800Stron #define MAIL_SERVER_NBOOL_TABLE 7 34e694ac3bStron #define MAIL_SERVER_LONG_TABLE 8 3541fbaed0Stron 3641fbaed0Stron #define MAIL_SERVER_PRE_INIT 10 3741fbaed0Stron #define MAIL_SERVER_POST_INIT 11 3841fbaed0Stron #define MAIL_SERVER_LOOP 12 3941fbaed0Stron #define MAIL_SERVER_EXIT 13 4041fbaed0Stron #define MAIL_SERVER_PRE_ACCEPT 14 4141fbaed0Stron #define MAIL_SERVER_SOLITARY 15 4241fbaed0Stron #define MAIL_SERVER_UNLIMITED 16 4341fbaed0Stron #define MAIL_SERVER_PRE_DISCONN 17 4441fbaed0Stron #define MAIL_SERVER_PRIVILEGED 18 4541fbaed0Stron #define MAIL_SERVER_WATCHDOG 19 4641fbaed0Stron 4741fbaed0Stron #define MAIL_SERVER_IN_FLOW_DELAY 20 4828e9a2d2Stron #define MAIL_SERVER_SLOW_EXIT 21 49837e7c1aSchristos #define MAIL_SERVER_BOUNCE_INIT 22 503c275423Schristos #define MAIL_SERVER_RETIRE_ME 23 51*fb52cf35Schristos #define MAIL_SERVER_POST_ACCEPT 24 5241fbaed0Stron 5341fbaed0Stron typedef void (*MAIL_SERVER_INIT_FN) (char *, char **); 5441fbaed0Stron typedef int (*MAIL_SERVER_LOOP_FN) (char *, char **); 5541fbaed0Stron typedef void (*MAIL_SERVER_EXIT_FN) (char *, char **); 5641fbaed0Stron typedef void (*MAIL_SERVER_ACCEPT_FN) (char *, char **); 57*fb52cf35Schristos typedef void (*MAIL_SERVER_POST_ACCEPT_FN) (VSTREAM *, char *, char **, HTABLE *); 5841fbaed0Stron typedef void (*MAIL_SERVER_DISCONN_FN) (VSTREAM *, char *, char **); 5928e9a2d2Stron typedef void (*MAIL_SERVER_SLOW_EXIT_FN) (char *, char **); 6041fbaed0Stron 61837e7c1aSchristos /* Type-checked API for external use. */ 62837e7c1aSchristos #define CA_MAIL_SERVER_INT_TABLE(v) MAIL_SERVER_INT_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_INT_TABLE, (v)) 63837e7c1aSchristos #define CA_MAIL_SERVER_STR_TABLE(v) MAIL_SERVER_STR_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_STR_TABLE, (v)) 64837e7c1aSchristos #define CA_MAIL_SERVER_BOOL_TABLE(v) MAIL_SERVER_BOOL_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_BOOL_TABLE, (v)) 65837e7c1aSchristos #define CA_MAIL_SERVER_TIME_TABLE(v) MAIL_SERVER_TIME_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_TIME_TABLE, (v)) 66837e7c1aSchristos #define CA_MAIL_SERVER_RAW_TABLE(v) MAIL_SERVER_RAW_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_RAW_TABLE, (v)) 67837e7c1aSchristos #define CA_MAIL_SERVER_NINT_TABLE(v) MAIL_SERVER_NINT_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_NINT_TABLE, (v)) 68837e7c1aSchristos #define CA_MAIL_SERVER_NBOOL_TABLE(v) MAIL_SERVER_NBOOL_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_NBOOL_TABLE, (v)) 69837e7c1aSchristos #define CA_MAIL_SERVER_LONG_TABLE(v) MAIL_SERVER_LONG_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_LONG_TABLE, (v)) 70837e7c1aSchristos #define CA_MAIL_SERVER_PRE_INIT(v) MAIL_SERVER_PRE_INIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_INIT_FN, (v)) 71837e7c1aSchristos #define CA_MAIL_SERVER_POST_INIT(v) MAIL_SERVER_POST_INIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_INIT_FN, (v)) 72837e7c1aSchristos #define CA_MAIL_SERVER_LOOP(v) MAIL_SERVER_LOOP, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_LOOP_FN, (v)) 73837e7c1aSchristos #define CA_MAIL_SERVER_EXIT(v) MAIL_SERVER_EXIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_EXIT_FN, (v)) 74837e7c1aSchristos #define CA_MAIL_SERVER_PRE_ACCEPT(v) MAIL_SERVER_PRE_ACCEPT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_ACCEPT_FN, (v)) 75*fb52cf35Schristos #define CA_MAIL_SERVER_POST_ACCEPT(v) MAIL_SERVER_POST_ACCEPT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_POST_ACCEPT_FN, (v)) 76837e7c1aSchristos #define CA_MAIL_SERVER_SOLITARY MAIL_SERVER_SOLITARY 77837e7c1aSchristos #define CA_MAIL_SERVER_UNLIMITED MAIL_SERVER_UNLIMITED 78837e7c1aSchristos #define CA_MAIL_SERVER_PRE_DISCONN(v) MAIL_SERVER_PRE_DISCONN, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_DISCONN_FN, (v)) 79837e7c1aSchristos #define CA_MAIL_SERVER_PRIVILEGED MAIL_SERVER_PRIVILEGED 80837e7c1aSchristos #define CA_MAIL_SERVER_WATCHDOG(v) MAIL_SERVER_WATCHDOG, CHECK_PTR(MAIL_SERVER, int, (v)) 81837e7c1aSchristos #define CA_MAIL_SERVER_IN_FLOW_DELAY MAIL_SERVER_IN_FLOW_DELAY 82837e7c1aSchristos #define CA_MAIL_SERVER_SLOW_EXIT(v) MAIL_SERVER_SLOW_EXIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_SLOW_EXIT_FN, (v)) 83837e7c1aSchristos #define CA_MAIL_SERVER_BOUNCE_INIT(v, w) MAIL_SERVER_BOUNCE_INIT, CHECK_PTR(MAIL_SERVER, char, (v)), CHECK_PPTR(MAIL_SERVER, char, (w)) 843c275423Schristos #define CA_MAIL_SERVER_RETIRE_ME MAIL_SERVER_RETIRE_ME 85837e7c1aSchristos 86837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_SLOW_EXIT_FN); 87837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_LOOP_FN); 88837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_INIT_FN); 89837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_EXIT_FN); 90837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_DISCONN_FN); 91837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_ACCEPT_FN); 92*fb52cf35Schristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_POST_ACCEPT_FN); 93837e7c1aSchristos CHECK_PTR_HELPER_DCL(MAIL_SERVER, int); 94837e7c1aSchristos CHECK_PTR_HELPER_DCL(MAIL_SERVER, char); 95837e7c1aSchristos CHECK_PPTR_HELPER_DCL(MAIL_SERVER, char); 96837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_TIME_TABLE); 97837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_STR_TABLE); 98837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_RAW_TABLE); 99837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_NINT_TABLE); 100837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_NBOOL_TABLE); 101837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_LONG_TABLE); 102837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_INT_TABLE); 103837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_BOOL_TABLE); 104837e7c1aSchristos 10541fbaed0Stron /* 10641fbaed0Stron * single_server.c 10741fbaed0Stron */ 10841fbaed0Stron typedef void (*SINGLE_SERVER_FN) (VSTREAM *, char *, char **); 10941fbaed0Stron extern NORETURN single_server_main(int, char **, SINGLE_SERVER_FN,...); 11041fbaed0Stron 11141fbaed0Stron /* 11241fbaed0Stron * multi_server.c 11341fbaed0Stron */ 11441fbaed0Stron typedef void (*MULTI_SERVER_FN) (VSTREAM *, char *, char **); 11541fbaed0Stron extern NORETURN multi_server_main(int, char **, MULTI_SERVER_FN,...); 11641fbaed0Stron extern void multi_server_disconnect(VSTREAM *); 11741fbaed0Stron extern int multi_server_drain(void); 11841fbaed0Stron 11941fbaed0Stron /* 12028e9a2d2Stron * event_server.c 12128e9a2d2Stron */ 12228e9a2d2Stron typedef void (*EVENT_SERVER_FN) (VSTREAM *, char *, char **); 12328e9a2d2Stron extern NORETURN event_server_main(int, char **, EVENT_SERVER_FN,...); 12428e9a2d2Stron extern void event_server_disconnect(VSTREAM *); 12528e9a2d2Stron extern int event_server_drain(void); 12628e9a2d2Stron 12728e9a2d2Stron /* 12841fbaed0Stron * trigger_server.c 12941fbaed0Stron */ 130837e7c1aSchristos typedef void (*TRIGGER_SERVER_FN) (char *, ssize_t, char *, char **); 13141fbaed0Stron extern NORETURN trigger_server_main(int, char **, TRIGGER_SERVER_FN,...); 13241fbaed0Stron 13341fbaed0Stron #define TRIGGER_BUF_SIZE 1024 13441fbaed0Stron 1353c275423Schristos /* 1363c275423Schristos * dgram_server.c 1373c275423Schristos */ 1383c275423Schristos typedef void (*DGRAM_SERVER_FN) (char *, ssize_t, char *, char **); 1393c275423Schristos extern NORETURN dgram_server_main(int, char **, DGRAM_SERVER_FN,...); 1403c275423Schristos 1413c275423Schristos #define DGRAM_BUF_SIZE 4096 1423c275423Schristos 14341fbaed0Stron /* LICENSE 14441fbaed0Stron /* .ad 14541fbaed0Stron /* .fi 14641fbaed0Stron /* The Secure Mailer license must be distributed with this software. 14741fbaed0Stron /* AUTHOR(S) 14841fbaed0Stron /* Wietse Venema 14941fbaed0Stron /* IBM T.J. Watson Research 15041fbaed0Stron /* P.O. Box 704 15141fbaed0Stron /* Yorktown Heights, NY 10598, USA 1523c275423Schristos /* 1533c275423Schristos /* Wietse Venema 1543c275423Schristos /* Google, Inc. 1553c275423Schristos /* 111 8th Avenue 1563c275423Schristos /* New York, NY 10011, USA 15741fbaed0Stron /*--*/ 158