03de8f6756ffaf071dc0a07ba7436c82c922c54a
[exim.git] / src / src / lookupapi.h
1 /*************************************************
2 *     Exim - an Internet mail transport agent    *
3 *************************************************/
4
5 /* Copyright (c) University of Cambridge 1995 - 2015 */
6 /* See the file NOTICE for conditions of use and distribution. */
7
8
9 /* The "type" field in each item is a set of bit flags:
10
11   lookup_querystyle     => this is a query-style lookup,
12                              else single-key (+ file) style
13   lookup_absfile        => an absolute file name is required,
14                              (for single-key style only)
15 */
16
17 typedef struct lookup_info {
18   uschar *name;                   /* e.g. "lsearch" */
19   int type;                       /* query/singlekey/abs-file */
20   void *(*open)(                  /* open function */
21     uschar *,                     /* file name for those that have one */
22     uschar **);                   /* for error message */
23   BOOL (*check)(                  /* file checking function */
24     void *,                       /* handle */
25     uschar *,                     /* file name */
26     int,                          /* modemask for file checking */
27     uid_t *,                      /* owners for file checking */
28     gid_t *,                      /* owngroups for file checking */
29     uschar **);                   /* for error messages */
30   int (*find)(                    /* find function */
31     void *,                       /* handle */
32     uschar *,                     /* file name or NULL */
33     const uschar *,               /* key or query */
34     int,                          /* length of key or query */
35     uschar **,                    /* for returning answer */
36     uschar **,                    /* for error message */
37     uint *);                      /* cache TTL, sconds */
38   void (*close)(                  /* close function */
39     void *);                      /* handle */
40   void (*tidy)(void);             /* tidy function */
41   uschar *(*quote)(               /* quoting function */
42     uschar *,                     /* string to quote */
43     uschar *);                    /* additional data from quote name */
44   void (*version_report)(         /* diagnostic function */
45     FILE *);                      /* fh to write to */
46 } lookup_info;
47
48 /* This magic number is used by the following lookup_module_info structure
49    for checking API compatibility. It used to be equivalent to the string"LMM3" */
50 #define LOOKUP_MODULE_INFO_MAGIC 0x4c4d4933
51 /* Version 2 adds: version_report */
52 /* Version 3 change: non/cache becomes TTL in seconds */
53
54 typedef struct lookup_module_info {
55   uint magic;
56   lookup_info **lookups;
57   uint lookupcount;
58 } lookup_module_info;
59
60 /* End of lookupapi.h */