Added support for SQLite.
[exim.git] / src / src / lookups / README
CommitLineData
13b685f9 1$Cambridge: exim/src/src/lookups/README,v 1.2 2005/08/01 13:20:28 ph10 Exp $
0756eb3c
PH
2
3LOOKUPS
4-------
5
6Each lookup type is implemented by 6 functions, xxx_open(), xxx_check(),
7xxx_find(), xxx_close(), xxx_tidy(), and xxx_quote(), where xxx is the name of
8the lookup type (e.g. lsearch, dbm, or whatever).
9
10The xxx_check(), xxx_close(), xxx_tidy(), and xxx_quote() functions need not
11exist. There is a table in drtables.c which links the lookup names to the
12various sets of functions, with NULL entries for any that don't exist. When
13the code for a lookup type is omitted from the binary, all its entries are
14NULL.
15
16One of the fields in the table contains flags describing the kind of lookup.
17These are
18
19 lookup_querystyle
20
21This is a "query style" lookup without a file name, as opposed to the "single
22key" style, where the key is associated with a "file name".
23
24 lookup_absfile
25
26For single key lookups, this means that the file name must be an absolute path.
27It is set for lsearch and dbm, but not for NIS, for example.
28
13b685f9
PH
29 lookup_absfilequery
30
31This is a query-style lookup that must start with an absolute file name. For
32example, the sqlite lookup is of this type.
33
34When a single-key or absfilequery lookup file is opened, the handle returned by
35the xxx_open() function is saved, along with the file name and lookup type, in
36a tree. The xxx_close() function is not called when the first lookup is
37completed. If there are subsequent lookups of the same type that quote the same
38file name, xxx_open() isn't called; instead the cached handle is re-used.
0756eb3c
PH
39
40Exim calls the function search_tidyup() at strategic points in its processing
41(e.g. after all routing and directing has been done) and this function walks
42the tree and calls the xxx_close() functions for all the cached handles.
43
44Query-style lookups don't have the concept of an open file that can be cached
45this way. Of course, the local code for the lookup can manage its own caching
46information in any way it pleases. This means that the xxx_close()
47function, even it it exists, is never called. However, if an xxx_tidy()
48function exists, it is called once whenever Exim calls search_tidyup().
49
50A single-key lookup type may also have an xxx_tidy() function, which is called
51by search_tidyup() after all cached handles have been closed via the
52xxx_close() function.
53
54The lookup functions are wrapped into a special store pool (POOL_SEARCH). You
55can safely use store_get to allocate store for your handle caching. The store
56will be reset after all xxx_tidy() functions are called.
57
58The function interfaces are as follows:
59
60
61xxx_open()
62----------
63
64This function is called to initiate the lookup. For things that involve files
65it should do a real open; for other kinds of lookup it may do nothing at all.
66The arguments are:
67
68 uschar *filename the name of the "file" to open, for non-query-style
69 lookups; NULL for query-style lookups
70 uschar **errmsg where to put an error message if there is a problem
71
72The yield of xxx_open() is a void * value representing the open file or
73database. For real files is is normally the FILE or DBM value. For other
74kinds of lookup, if there is no natural value to use, (-1) is recommended.
75The value should not be NULL (or 0) as that is taken to indicate failure of
76the xxx_open() function. For single-key lookups, the handle is cached along
77with the filename and type, and may be used for several lookups.
78
79
80xxx_check()
81-----------
82
83If this function exists, it is called after a successful open to check on the
84ownership and mode of the file(s). The arguments are:
85
86 void *handle the handle passed back from xxx_open()
87 uschar *filename the filename passed to xxx_open()
88 int modemask mode bits that must not be set
89 int *owners permitted owners of the file(s)
90 int *owngroups permitted group owners of the file(s)
91 uschar **errmsg where to put an error message if there is a problem
92
93In the owners and owngroups vectors, the first element is the count of the
94remaining elements. There is a common function that can be called to check
95a file:
96
97int search_check_file(int fd, char *filename, int modemask, int *owners,
98 int *owngroups, char *type, char **errmsg);
99
100If fd is >= 0, it is checked using fstat(), and filename is used only in
101error messages. If fd is < 0 then filename is checked using stat(). The yield
102is zero if all is well, +1 if the mode or uid or gid is wrong, or -1 if the
103stat() fails.
104
105The yield of xxx_check() is TRUE if all is well, FALSE otherwise. The
106function should not close the file(s) on failure. That is done from outside
107by calling the xxx_close() function.
108
109
110xxx_find()
111----------
112
113This is called to search an open file/database. The result is OK, FAIL, or
114DEFER. The arguments are:
115
116 void *handle the handle passed back from xxx_open()
117 uschar *filename the filename passed to xxx_open() (NULL for querystyle)
118 uschar *keyquery the key to look up, or query to process, zero-terminated
119 int length the length of the key
120 uschar **result point to the yield, in dynamic store, on success
121 uschar **errmsg where to put an error message on failure;
122 this is initially set to "", and should be left
123 as that for a standard "entry not found" error
124 BOOL *do_cache the lookup should set this to FALSE when it changes data.
125 This is TRUE by default. When set to FALSE the cache tree
126 of the current search handle will be cleaned and the
127 current result will NOT be cached. Currently the mysql
128 and pgsql lookups use this when UPDATE/INSERT queries are
129 executed.
130
131Even though the key is zero-terminated, the length is passed because in the
132common case it has been computed already and is often needed.
133
134
135xxx_close()
136-----------
137
138This is called for single-key lookups when a file is finished with. There is no
139yield, and the only argument is the handle that was passed back from
140xxx_open(). It is not called for query style lookups.
141
142
143xxx_tidy()
144----------
145
146This function is called once at the end of search_tidyup() for every lookup
147type for which it exists.
148
149
150xxx_quote()
151-----------
152
153This is called by the string expansion code for expansions of the form
154${quote_xxx:<string>}, if it exists. If not, the expansion code makes no change
155to the string. The function must apply any quoting rules that are specific to
156the lookup, and return a pointer to the revised string. If quoting is not
157needed, it can return its single argument, which is a uschar *. This function
158does NOT use the POOL_SEARCH store, because it's usually never called from any
159lookup code.
160
161****