1 /*        $NetBSD: header_body_checks.h,v 1.3 2023/12/23 20:30:43 christos Exp $          */
2 
3 #ifndef _HBC_H_INCLUDED_
4 #define _HBC_H_INCLUDED_
5 
6 /*++
7 /* NAME
8 /*        header_body_checks 3h
9 /* SUMMARY
10 /*        delivery agent header/body checks
11 /* SYNOPSIS
12 /*        #include <header_body_checks.h>
13 /* DESCRIPTION
14 /* .nf
15 
16  /*
17   * Global library.
18   */
19 #include <mime_state.h>
20 #include <maps.h>
21 
22  /*
23   * Postfix < 2.5 compatibility.
24   */
25 #ifndef MIME_HDR_FIRST
26 #define MIME_HDR_FIRST                  (1)
27 #define MIME_HDR_LAST                   (3)
28 #endif
29 
30  /*
31   * External interface.
32   */
33 typedef struct {
34     const char *map_class;              /* parameter name */
35     MAPS   *maps;                       /* map handle */
36 } HBC_MAP_INFO;
37 
38 typedef struct {
39     void    (*logger) (void *, const char *, const char *, const char *, const char *);
40     void    (*prepend) (void *, int, const char *, ssize_t, off_t);
41     char   *(*extend) (void *, const char *, ssize_t, const char *, const char *, const char *, ssize_t, off_t);
42 } HBC_CALL_BACKS;
43 
44 typedef struct {
45     HBC_CALL_BACKS *call_backs;
46     HBC_MAP_INFO map_info[1];           /* actually, a bunch */
47 } HBC_CHECKS;
48 
49 #define HBC_CHECKS_STAT_IGNORE          ((char *) 0)
50 #define HBC_CHECKS_STAT_ERROR (&hbc_checks_error)
51 #define HBC_CHECKS_STAT_UNKNOWN         (&hbc_checks_unknown)
52 
53 extern HBC_CHECKS *hbc_header_checks_create(const char *, const char *,
54                                                            const char *, const char *,
55                                                            const char *, const char *,
56                                                               HBC_CALL_BACKS *);
57 extern HBC_CHECKS *hbc_body_checks_create(const char *, const char *,
58                                                             HBC_CALL_BACKS *);
59 extern char *hbc_header_checks(void *, HBC_CHECKS *, int, const HEADER_OPTS *,
60                                              VSTRING *, off_t);
61 extern char *hbc_body_checks(void *, HBC_CHECKS *, const char *, ssize_t, off_t);
62 
63 #define hbc_header_checks_free(hbc) _hbc_checks_free((hbc), HBC_HEADER_SIZE)
64 #define hbc_body_checks_free(hbc) _hbc_checks_free((hbc), 1)
65 
66  /*
67   * The following are NOT part of the external API.
68   */
69 #define HBC_HEADER_SIZE       (MIME_HDR_LAST - MIME_HDR_FIRST + 1)
70 extern void _hbc_checks_free(HBC_CHECKS *, ssize_t);
71 extern char hbc_checks_error;
72 extern const char hbc_checks_unknown;
73 
74 /* LICENSE
75 /* .ad
76 /* .fi
77 /*        The Secure Mailer license must be distributed with this software.
78 /* AUTHOR(S)
79 /*        Wietse Venema
80 /*        IBM T.J. Watson Research
81 /*        P.O. Box 704
82 /*        Yorktown Heights, NY 10598, USA
83 /*
84 /*        Wietse Venema
85 /*        Google, Inc.
86 /*        111 8th Avenue
87 /*        New York, NY 10011, USA
88 /*--*/
89 
90 #endif
91