1/*	$NetBSD$	*/
2
3/*++
4/* NAME
5/*	input_transp 3
6/* SUMMARY
7/*	receive transparency control
8/* SYNOPSIS
9/*	#include <input_transp.h>
10/*
11/*	int	input_transp_mask(param_name, pattern)
12/*	const char *param_name;
13/*	const char *pattern;
14/*
15/*	int	input_transp_cleanup(cleanup_flags, transp_mask)
16/*	int	cleanup_flags;
17/*	int	transp_mask;
18/* DESCRIPTION
19/*	This module controls how much processing happens before mail is
20/*	written to the Postfix queue. Each transparency option is either
21/*	implemented by a client of the cleanup service, or is passed
22/*	along in a client request to the cleanup service. This eliminates
23/*	the need to configure multiple cleanup service instances.
24/*
25/*	input_transp_mask() takes a comma-separated list of names and
26/*	computes the corresponding mask. The following names are
27/*	recognized in \fBpattern\fR, with the corresponding bit mask
28/*	given in parentheses:
29/* .IP "no_unknown_recipient_checks (INPUT_TRANSP_UNKNOWN_RCPT)"
30/*	Do not try to reject unknown recipients.
31/* .IP "no_address_mappings (INPUT_TRANSP_ADDRESS_MAPPING)"
32/*	Disable canonical address mapping, virtual alias map expansion,
33/*	address masquerading, and automatic BCC recipients.
34/* .IP "no_header_body_checks (INPUT_TRANSP_HEADER_BODY)"
35/*	Disable header/body_checks.
36/* .IP "no_milters (INPUT_TRANSP_MILTER)"
37/*	Disable Milter applications.
38/*
39/*	input_transp_cleanup() takes a bunch of cleanup processing
40/*	flags and updates them according to the settings in the
41/*	specified input transparency mask.
42/* DIAGNOSTICS
43/*	Panic: inappropriate use.
44/* LICENSE
45/* .ad
46/* .fi
47/*	The Secure Mailer license must be distributed with this software.
48/* AUTHOR(S)
49/*	Wietse Venema
50/*	IBM T.J. Watson Research
51/*	P.O. Box 704
52/*	Yorktown Heights, NY 10598, USA
53/*--*/
54
55/* System library. */
56
57#include <sys_defs.h>
58
59/* Utility library. */
60
61#include <name_mask.h>
62#include <msg.h>
63
64/* Global library. */
65
66#include <mail_params.h>
67#include <cleanup_user.h>
68#include <input_transp.h>
69
70/* input_transp_mask - compute mail receive transparency mask */
71
72int     input_transp_mask(const char *param_name, const char *pattern)
73{
74    static const NAME_MASK table[] = {
75	"no_unknown_recipient_checks", INPUT_TRANSP_UNKNOWN_RCPT,
76	"no_address_mappings", INPUT_TRANSP_ADDRESS_MAPPING,
77	"no_header_body_checks", INPUT_TRANSP_HEADER_BODY,
78	"no_milters", INPUT_TRANSP_MILTER,
79	0,
80    };
81
82    return (name_mask(param_name, table, pattern));
83}
84
85/* input_transp_cleanup - adjust cleanup options */
86
87int     input_transp_cleanup(int cleanup_flags, int transp_mask)
88{
89    const char *myname = "input_transp_cleanup";
90
91    if (msg_verbose)
92	msg_info("before %s: cleanup flags = %s",
93		 myname, cleanup_strflags(cleanup_flags));
94    if (transp_mask & INPUT_TRANSP_ADDRESS_MAPPING)
95	cleanup_flags &= ~(CLEANUP_FLAG_BCC_OK | CLEANUP_FLAG_MAP_OK);
96    if (transp_mask & INPUT_TRANSP_HEADER_BODY)
97	cleanup_flags &= ~CLEANUP_FLAG_FILTER;
98    if (transp_mask & INPUT_TRANSP_MILTER)
99	cleanup_flags &= ~CLEANUP_FLAG_MILTER;
100    if (msg_verbose)
101	msg_info("after %s: cleanup flags = %s",
102		 myname, cleanup_strflags(cleanup_flags));
103    return (cleanup_flags);
104}
105