map_search.h revision 1.1
1/*	$NetBSD: map_search.h,v 1.1 2020/03/18 18:59:34 christos Exp $	*/
2
3/*++
4/* NAME
5/*      map_search 3h
6/* SUMMARY
7/*      lookup table search list support
8/* SYNOPSIS
9/*      #include <map_search.h>
10/* DESCRIPTION
11/* .nf
12
13 /*
14  * Utility library.
15  */
16#include <name_code.h>
17
18 /*
19  * External interface.
20  *
21  * The map_search module maintains one lookup table with MAP_SEARCH results,
22  * indexed by the unparsed form of a map specification. The conversion from
23  * unparsed form to MAP_SEARCH result is controlled by a NAME_CODE mapping,
24  * Since one lookup table can support only one mapping per unparsed name,
25  * every MAP_SEARCH result in the lookup table must be built using the same
26  * NAME_CODE table.
27  *
28  * Alternative 1: no lookup table. Allow the user to specify the NAME_CODE
29  * mapping in the map_search_create() request (in addition to the unparsed
30  * form), and let the MAP_SEARCH user store each MAP_SEARCH pointer. But
31  * that would clumsify code that wants to use MAP_SEARCH functionality.
32  *
33  * Alternative 2: one lookup table per NAME_CODE mapping. Change
34  * map_search_init() to return a pointer to {HTABLE *, NAME_CODE *}, and
35  * require that the MAP_SEARCH user pass that pointer to other
36  * map_search_xxx() calls (in addition to the unparsed forms). That would be
37  * about as clumsy as Alternative 1.
38  *
39  * Alternative 3: one lookup table, distinct lookup keys per NAME_CODE table
40  * and map_spec. The caller specifies both the map_spec and the NAME_CODE
41  * mapping when it calls map_seach_create() and map_search_find(). The
42  * implementation securely prepends the name_code argument to the map_spec
43  * argument and uses the result as the table lookup key.
44  *
45  * Alternative 1 is not suitable for the smtpd_mumble_restrictions parser,
46  * which instantiates MAP_SEARCH instances without knowing which specific
47  * access feature is involved. It uses a NAME_CODE mapping that contains the
48  * superset of what all smtpd_mumble_restrictions features need. The
49  * downside is delayed error notification.
50  */
51typedef struct {
52    char   *map_type_name;		/* "type:name", owned */
53    char   *search_order;		/* null or owned */
54} MAP_SEARCH;
55
56extern void map_search_init(const NAME_CODE *);
57extern const MAP_SEARCH *map_search_create(const char *);
58extern const MAP_SEARCH *map_search_lookup(const char *);
59
60#define MAP_SEARCH_ATTR_NAME_SEARCH	"search_order"
61
62#define MAP_SEARCH_CODE_UNKNOWN		127
63
64/* LICENSE
65/* .ad
66/* .fi
67/*      The Secure Mailer license must be distributed with this software.
68/* AUTHOR(S)
69/*      Wietse Venema
70/*      Google, Inc.
71/*      111 8th Avenue
72/*      New York, NY 10011, USA
73/*--*/
74