Home | History | Annotate | Line # | Download | only in master
      1 /*	$NetBSD: mail_server.h,v 1.5 2025/02/25 19:15: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) (int, char *, char **);
    139 extern NORETURN dgram_server_main(int, char **, DGRAM_SERVER_FN,...);
    140 
    141 /* LICENSE
    142 /* .ad
    143 /* .fi
    144 /*	The Secure Mailer license must be distributed with this software.
    145 /* AUTHOR(S)
    146 /*	Wietse Venema
    147 /*	IBM T.J. Watson Research
    148 /*	P.O. Box 704
    149 /*	Yorktown Heights, NY 10598, USA
    150 /*
    151 /*	Wietse Venema
    152 /*	Google, Inc.
    153 /*	111 8th Avenue
    154 /*	New York, NY 10011, USA
    155 /*
    156 /*	Wietse Venema
    157 /*	porcupine.org
    158 /*--*/
    159