Update copyright year in (most) files (those that my script finds).
[exim.git] / src / src / drtables.c
CommitLineData
d7d7b7b9 1/* $Cambridge: exim/src/src/drtables.c,v 1.6 2006/02/07 11:19:00 ph10 Exp $ */
059ec3d9
PH
2
3/*************************************************
4* Exim - an Internet mail transport agent *
5*************************************************/
6
d7d7b7b9 7/* Copyright (c) University of Cambridge 1995 - 2006 */
059ec3d9
PH
8/* See the file NOTICE for conditions of use and distribution. */
9
10
11#include "exim.h"
12
13
14/* This module contains tables that define the lookup methods and drivers
15that are actually included in the binary. Its contents are controlled by
16various macros in config.h that ultimately come from Local/Makefile. They are
17all described in src/EDITME. */
18
19
20/* The OSF1 (Digital Unix) linker puts out a worrying warning if any sections
21contain no executable code. It says
22
23Warning: Linking some objects which contain exception information sections
24 and some which do not. This may cause fatal runtime exception handling
25 problems.
26
27As this may cause people to worry needlessly, include a dummy function here
28to stop the message from appearing. Make it call itself to stop picky compilers
29compilers complaining that it is unused, and put in a dummy argument to stop
30even pickier compilers complaining about infinite loops. */
31
32static void dummy(int x) { dummy(x-1); }
33
34
35/* Table of information about all possible lookup methods. The entries are
36always present, but the "open" and "find" functions are set to NULL for those
37that are not compiled into the binary. The "check" and "close" functions can
38be NULL for methods that don't need them. */
39
40#ifdef LOOKUP_CDB
41#include "lookups/cdb.h"
42#endif
43
44#ifdef LOOKUP_DBM
45#include "lookups/dbmdb.h"
46#endif
47
48#ifdef LOOKUP_DNSDB
49#include "lookups/dnsdb.h"
50#endif
51
52#ifdef LOOKUP_DSEARCH
53#include "lookups/dsearch.h"
54#endif
55
56#ifdef LOOKUP_IBASE
57#include "lookups/ibase.h"
58#endif
59
60#ifdef LOOKUP_LDAP
61#include "lookups/ldap.h"
62#endif
63
64#ifdef LOOKUP_LSEARCH
65#include "lookups/lsearch.h"
66#endif
67
68#ifdef LOOKUP_MYSQL
69#include "lookups/mysql.h"
70#endif
71
72#ifdef LOOKUP_NIS
73#include "lookups/nis.h"
74#endif
75
76#ifdef LOOKUP_NISPLUS
77#include "lookups/nisplus.h"
78#endif
79
80#ifdef LOOKUP_ORACLE
81#include "lookups/oracle.h"
82#endif
83
84#ifdef LOOKUP_PASSWD
85#include "lookups/passwd.h"
86#endif
87
88#ifdef LOOKUP_PGSQL
89#include "lookups/pgsql.h"
90#endif
91
92f1b170
TK
92#ifdef EXPERIMENTAL_SPF
93#include "lookups/spf.h"
94#endif
95
13b685f9
PH
96#ifdef LOOKUP_SQLITE
97#include "lookups/sqlite.h"
98#endif
99
059ec3d9
PH
100#ifdef LOOKUP_TESTDB
101#include "lookups/testdb.h"
102#endif
103
104#ifdef LOOKUP_WHOSON
105#include "lookups/whoson.h"
106#endif
107
108/* The second field in each item below is a set of bit flags:
109
110 lookup_querystyle => this is a query-style lookup,
111 else single-key (+ file) style
112 lookup_absfile => an absolute file name is required,
113 (for single-key style only)
114
115This list must be in alphabetical order of lookup name because it is
116searched by binary chop, having got rather large for the original linear
117searching. */
118
119lookup_info lookup_list[] = {
120
121/* cdb lookup in single file */
122
123 {
124 US"cdb", /* lookup name */
125 lookup_absfile, /* uses absolute file name */
126#ifdef LOOKUP_CDB
127 cdb_open, /* open function */
128 cdb_check, /* check function */
129 cdb_find, /* find function */
130 cdb_close, /* close function */
131 NULL, /* no tidy function */
132 NULL /* no quoting function */
133#else
134 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
135#endif
136 },
137
138/* DBM file lookup; called "dbm" because that is the name in Exim,
139but the code is called dbmdb to avoid name clashes. */
140
141 {
142 US"dbm", /* lookup name */
143 lookup_absfile, /* uses absolute file name */
144#ifdef LOOKUP_DBM
145 dbmdb_open, /* open function */
146 dbmdb_check, /* check function */
147 dbmdb_find, /* find function */
148 dbmdb_close, /* close function */
149 NULL, /* no tidy function */
150 NULL /* no quoting function */
151#else
152 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
153#endif
154 },
155
156/* This variant of DBM does not include the binary zero on the end
157of the key strings. */
158
159 {
160 US"dbmnz", /* lookup name */
161 lookup_absfile, /* uses absolute file name */
162#ifdef LOOKUP_DBM
163 dbmdb_open, /* sic */ /* open function */
164 dbmdb_check, /* sic */ /* check function */
165 dbmnz_find, /* find function */
166 dbmdb_close, /* sic */ /* close function */
167 NULL, /* no tidy function */
168 NULL /* no quoting function */
169#else
170 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
171#endif
172 },
173
174/* Using DNS TXT records as a database */
175
176 {
177 US"dnsdb", /* lookup name */
178 lookup_querystyle, /* query style */
179#ifdef LOOKUP_DNSDB
180 dnsdb_open, /* open function */
181 NULL, /* check function */
182 dnsdb_find, /* find function */
183 NULL, /* no close function */
184 NULL, /* no tidy function */
185 NULL /* no quoting function */
186#else
187 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
188#endif
189 },
190
191/* Search of files in a directory */
192
193 {
194 US"dsearch", /* lookup name */
195 lookup_absfile, /* uses absolute file name */
196#ifdef LOOKUP_DSEARCH
197 dsearch_open, /* open function */
198 dsearch_check, /* check function */
199 dsearch_find, /* find function */
200 dsearch_close, /* close function */
201 NULL, /* no tidy function */
202 NULL /* no quoting function */
203#else
204 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
205#endif
206 },
207
208/* Interbase lookup */
209
210 {
211 US"ibase", /* lookup name */
212 lookup_querystyle, /* query-style lookup */
213#ifdef LOOKUP_IBASE
214 ibase_open, /* open function */
215 NULL, /* no check function */
216 ibase_find, /* find function */
217 NULL, /* no close function */
218 ibase_tidy, /* tidy function */
219 ibase_quote /* quoting function */
220#else
221 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
222#endif
223 },
224
225/* Linear search of single file with ip-addresses and networks; shares many
226functions with lsearch. */
227
228 {
229 US"iplsearch", /* lookup name */
230 lookup_absfile, /* uses absolute file name */
231#ifdef LOOKUP_LSEARCH
232 lsearch_open, /* open function */
233 lsearch_check, /* check function */
234 iplsearch_find, /* find function */
235 lsearch_close, /* close function */
236 NULL, /* no tidy function */
237 NULL /* no quoting function */
238#else
239 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
240#endif
241 },
242
243/* LDAP lookup, allowing data from only one entry to be returned */
244
245 {
246 US"ldap", /* lookup name */
247 lookup_querystyle, /* query-style lookup */
248#ifdef LOOKUP_LDAP
249 eldap_open, /* open function */
250 NULL, /* check function */
251 eldap_find, /* find function */
252 NULL, /* no close function */
253 eldap_tidy, /* tidy function */
254 eldap_quote /* quoting function */
255#else
256 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
257#endif
258 },
259
260/* LDAP lookup, allowing the DN from more one entry to be returned */
261
262 {
263 US"ldapdn", /* lookup name */
264 lookup_querystyle, /* query-style lookup */
265#ifdef LOOKUP_LDAP
266 eldap_open, /* sic */ /* open function */
267 NULL, /* check function */
268 eldapdn_find, /* find function */
269 NULL, /* no close function */
270 eldap_tidy, /* sic */ /* tidy function */
271 eldap_quote /* sic */ /* quoting function */
272#else
273 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
274#endif
275 },
276
277/* LDAP lookup, allowing data from more than one entry to be returned */
278
279 {
280 US"ldapm", /* lookup name */
281 lookup_querystyle, /* query-style lookup */
282#ifdef LOOKUP_LDAP
283 eldap_open, /* sic */ /* open function */
284 NULL, /* check function */
285 eldapm_find, /* find function */
286 NULL, /* no close function */
287 eldap_tidy, /* sic */ /* tidy function */
288 eldap_quote /* sic */ /* quoting function */
289#else
290 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
291#endif
292 },
293
294/* Linear search of single file */
295
296 {
297 US"lsearch", /* lookup name */
298 lookup_absfile, /* uses absolute file name */
299#ifdef LOOKUP_LSEARCH
300 lsearch_open, /* open function */
301 lsearch_check, /* check function */
302 lsearch_find, /* find function */
303 lsearch_close, /* close function */
304 NULL, /* no tidy function */
305 NULL /* no quoting function */
306#else
307 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
308#endif
309 },
310
311/* MYSQL lookup */
312
313 {
314 US"mysql", /* lookup name */
315 lookup_querystyle, /* query-style lookup */
316#ifdef LOOKUP_MYSQL
317 mysql_open, /* open function */
318 NULL, /* no check function */
319 mysql_find, /* find function */
320 NULL, /* no close function */
321 mysql_tidy, /* tidy function */
322 mysql_quote /* quoting function */
323#else
324 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
325#endif
326 },
327
328/* NIS lookup, excluding trailing 0 from key */
329
330 {
331 US"nis", /* lookup name */
332 0, /* not abs file, not query style*/
333#ifdef LOOKUP_NIS
334 nis_open, /* open function */
335 NULL, /* check function */
336 nis_find, /* find function */
337 NULL, /* no close function */
338 NULL, /* no tidy function */
339 NULL /* no quoting function */
340#else
341 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
342#endif
343 },
344
345/* NIS lookup, including trailing 0 in key */
346
347 {
348 US"nis0", /* lookup name */
349 0, /* not absfile, not query style */
350#ifdef LOOKUP_NIS
351 nis_open, /* sic */ /* open function */
352 NULL, /* check function */
353 nis0_find, /* find function */
354 NULL, /* no close function */
355 NULL, /* no tidy function */
356 NULL /* no quoting function */
357#else
358 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
359#endif
360 },
361
362/* NIS+ lookup */
363
364 {
365 US"nisplus", /* lookup name */
366 lookup_querystyle, /* query-style lookup */
367#ifdef LOOKUP_NISPLUS
368 nisplus_open, /* open function */
369 NULL, /* check function */
370 nisplus_find, /* find function */
371 NULL, /* no close function */
372 NULL, /* no tidy function */
373 nisplus_quote /* quoting function */
374#else
375 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
376#endif
377 },
378
379/* Linear search of single file, with wildcarding but no pattern expansion.
380Shares many functions with lsearch. */
381
382 {
383 US"nwildlsearch", /* lookup name */
384 lookup_absfile, /* uses absolute file name */
385#ifdef LOOKUP_LSEARCH
386 lsearch_open, /* open function */
387 lsearch_check, /* check function */
388 nwildlsearch_find, /* find function */
389 lsearch_close, /* close function */
390 NULL, /* no tidy function */
391 NULL /* no quoting function */
392#else
393 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
394#endif
395 },
396
397/* Oracle lookup */
398
399 {
400 US"oracle", /* lookup name */
401 lookup_querystyle, /* query-style lookup */
402#ifdef LOOKUP_ORACLE
403 oracle_open, /* open function */
404 NULL, /* check function */
405 oracle_find, /* find function */
406 NULL, /* no close function */
407 oracle_tidy, /* tidy function */
408 oracle_quote /* quoting function */
409#else
410 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
411#endif
412 },
413
414/* passwd lookup */
415
416 {
417 US"passwd", /* lookup name */
418 lookup_querystyle, /* query-style lookup */
419#ifdef LOOKUP_PASSWD
420 passwd_open, /* open function */
421 NULL, /* no check function */
422 passwd_find, /* find function */
423 NULL, /* no close function */
424 NULL, /* no tidy function */
425 NULL /* no quoting function */
426#else
427 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
428#endif
429 },
430
431/* PGSQL lookup */
432
433 {
434 US"pgsql", /* lookup name */
435 lookup_querystyle, /* query-style lookup */
436#ifdef LOOKUP_PGSQL
437 pgsql_open, /* open function */
438 NULL, /* no check function */
439 pgsql_find, /* find function */
440 NULL, /* no close function */
441 pgsql_tidy, /* tidy function */
442 pgsql_quote /* quoting function */
443#else
444 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
445#endif
446 },
447
92f1b170
TK
448/* SPF lookup */
449
450 {
451 US"spf", /* lookup name */
452 0, /* not absfile, not query style */
453#ifdef EXPERIMENTAL_SPF
454 spf_open, /* open function */
455 NULL, /* no check function */
456 spf_find, /* find function */
457 spf_close, /* close function */
458 NULL, /* no tidy function */
459 NULL /* no quoting function */
460#else
461 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
462#endif
463 },
464
13b685f9
PH
465/* sqlite lookup */
466
467 {
468 US"sqlite", /* lookup name */
469 lookup_absfilequery, /* query-style lookup, starts with file name */
470#ifdef LOOKUP_SQLITE
471 sqlite_open, /* open function */
472 NULL, /* no check function */
473 sqlite_find, /* find function */
474 sqlite_close, /* close function */
475 NULL, /* no tidy function */
476 sqlite_quote /* quoting function */
477#else
478 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
479#endif
480 },
481
059ec3d9
PH
482/* Testdb lookup is for testing Exim, not useful for normal running.
483For that reason, we omit the entry entirely when not building it into
484the binary, so that attempts to use it give "unknown lookup type" instead
485of "lookup type not available". */
486
487#ifdef LOOKUP_TESTDB
488 {
489 US"testdb", /* lookup name */
490 lookup_querystyle, /* query-style lookup */
491 testdb_open, /* open function */
492 NULL, /* check function */
493 testdb_find, /* find function */
494 NULL, /* no close function */
495 NULL, /* no tidy function */
496 NULL /* no quoting function */
497 },
498#endif
499
500/* "Whoson" lookup */
501
502 {
503 US"whoson", /* lookup name */
504 lookup_querystyle, /* query-style lookup */
505#ifdef LOOKUP_WHOSON
506 whoson_open, /* open function */
507 NULL, /* check function */
508 whoson_find, /* find function */
509 NULL, /* no close function */
510 NULL, /* no tidy function */
511 NULL /* no quoting function */
512#else
513 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
514#endif
515 },
516
517/* Linear search of single file, with wildcarding and pattern expansion. Shares
518many functions with lsearch. */
519
520 {
521 US"wildlsearch", /* lookup name */
522 lookup_absfile, /* uses absolute file name */
523#ifdef LOOKUP_LSEARCH
524 lsearch_open, /* open function */
525 lsearch_check, /* check function */
526 wildlsearch_find, /* find function */
527 lsearch_close, /* close function */
528 NULL, /* no tidy function */
529 NULL /* no quoting function */
530#else
531 NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
532#endif
533 }
534};
535
536/* Number of entries in the list */
537
538int lookup_list_count = sizeof(lookup_list)/sizeof(lookup_info);
539
540
541
542/* Table of information about all possible authentication mechamisms. All
543entries are always present if any mechanism is declared, but the functions are
544set to NULL for those that are not compiled into the binary. */
545
546#ifdef AUTH_CRAM_MD5
547#include "auths/cram_md5.h"
548#endif
549
550#ifdef AUTH_CYRUS_SASL
551#include "auths/cyrus_sasl.h"
552#endif
553
554#ifdef AUTH_PLAINTEXT
555#include "auths/plaintext.h"
556#endif
557
558#ifdef AUTH_SPA
559#include "auths/spa.h"
560#endif
561
562auth_info auths_available[] = {
563
564/* Checking by an expansion condition on plain text */
565
566#ifdef AUTH_CRAM_MD5
567 {
568 US"cram_md5", /* lookup name */
569 auth_cram_md5_options,
570 &auth_cram_md5_options_count,
571 &auth_cram_md5_option_defaults,
572 sizeof(auth_cram_md5_options_block),
573 auth_cram_md5_init, /* init function */
574 auth_cram_md5_server, /* server function */
575 auth_cram_md5_client /* client function */
576 },
577#endif
578
579#ifdef AUTH_CYRUS_SASL
580 {
384152a6 581 US"cyrus_sasl", /* lookup name */
059ec3d9
PH
582 auth_cyrus_sasl_options,
583 &auth_cyrus_sasl_options_count,
584 &auth_cyrus_sasl_option_defaults,
585 sizeof(auth_cyrus_sasl_options_block),
586 auth_cyrus_sasl_init, /* init function */
587 auth_cyrus_sasl_server, /* server function */
588 NULL /* client function */
589 },
590#endif
591
592#ifdef AUTH_PLAINTEXT
593 {
594 US"plaintext", /* lookup name */
595 auth_plaintext_options,
596 &auth_plaintext_options_count,
597 &auth_plaintext_option_defaults,
598 sizeof(auth_plaintext_options_block),
599 auth_plaintext_init, /* init function */
600 auth_plaintext_server, /* server function */
601 auth_plaintext_client /* client function */
602 },
603#endif
604
605#ifdef AUTH_SPA
606 {
607 US"spa", /* lookup name */
608 auth_spa_options,
609 &auth_spa_options_count,
610 &auth_spa_option_defaults,
611 sizeof(auth_spa_options_block),
612 auth_spa_init, /* init function */
613 auth_spa_server, /* server function */
614 auth_spa_client /* client function */
615 },
616#endif
617
618{ US"", NULL, NULL, NULL, 0, NULL, NULL, NULL }
619};
620
621
622/* Tables of information about which routers and transports are included in the
623exim binary. */
624
625/* Pull in the necessary header files */
626
627#include "routers/rf_functions.h"
628
629#ifdef ROUTER_ACCEPT
630#include "routers/accept.h"
631#endif
632
633#ifdef ROUTER_DNSLOOKUP
634#include "routers/dnslookup.h"
635#endif
636
637#ifdef ROUTER_MANUALROUTE
638#include "routers/manualroute.h"
639#endif
640
641#ifdef ROUTER_IPLITERAL
642#include "routers/ipliteral.h"
643#endif
644
645#ifdef ROUTER_IPLOOKUP
646#include "routers/iplookup.h"
647#endif
648
649#ifdef ROUTER_QUERYPROGRAM
650#include "routers/queryprogram.h"
651#endif
652
653#ifdef ROUTER_REDIRECT
654#include "routers/redirect.h"
655#endif
656
657#ifdef TRANSPORT_APPENDFILE
658#include "transports/appendfile.h"
659#endif
660
661#ifdef TRANSPORT_AUTOREPLY
662#include "transports/autoreply.h"
663#endif
664
665#ifdef TRANSPORT_LMTP
666#include "transports/lmtp.h"
667#endif
668
669#ifdef TRANSPORT_PIPE
670#include "transports/pipe.h"
671#endif
672
673#ifdef TRANSPORT_SMTP
674#include "transports/smtp.h"
675#endif
676
677
678/* Now set up the structures, terminated by an entry with a null name. */
679
680router_info routers_available[] = {
681#ifdef ROUTER_ACCEPT
682 {
683 US"accept",
684 accept_router_options,
685 &accept_router_options_count,
686 &accept_router_option_defaults,
687 sizeof(accept_router_options_block),
688 accept_router_init,
689 accept_router_entry,
690 NULL, /* no tidyup entry */
691 ri_yestransport
692 },
693#endif
694#ifdef ROUTER_DNSLOOKUP
695 {
696 US"dnslookup",
697 dnslookup_router_options,
698 &dnslookup_router_options_count,
699 &dnslookup_router_option_defaults,
700 sizeof(dnslookup_router_options_block),
701 dnslookup_router_init,
702 dnslookup_router_entry,
703 NULL, /* no tidyup entry */
704 ri_yestransport
705 },
706#endif
707#ifdef ROUTER_IPLITERAL
708 {
709 US"ipliteral",
710 ipliteral_router_options,
711 &ipliteral_router_options_count,
712 &ipliteral_router_option_defaults,
713 sizeof(ipliteral_router_options_block),
714 ipliteral_router_init,
715 ipliteral_router_entry,
716 NULL, /* no tidyup entry */
717 ri_yestransport
718 },
719#endif
720#ifdef ROUTER_IPLOOKUP
721 {
722 US"iplookup",
723 iplookup_router_options,
724 &iplookup_router_options_count,
725 &iplookup_router_option_defaults,
726 sizeof(iplookup_router_options_block),
727 iplookup_router_init,
728 iplookup_router_entry,
729 NULL, /* no tidyup entry */
730 ri_notransport
731 },
732#endif
733#ifdef ROUTER_MANUALROUTE
734 {
735 US"manualroute",
736 manualroute_router_options,
737 &manualroute_router_options_count,
738 &manualroute_router_option_defaults,
739 sizeof(manualroute_router_options_block),
740 manualroute_router_init,
741 manualroute_router_entry,
742 NULL, /* no tidyup entry */
743 0
744 },
745#endif
746#ifdef ROUTER_QUERYPROGRAM
747 {
748 US"queryprogram",
749 queryprogram_router_options,
750 &queryprogram_router_options_count,
751 &queryprogram_router_option_defaults,
752 sizeof(queryprogram_router_options_block),
753 queryprogram_router_init,
754 queryprogram_router_entry,
755 NULL, /* no tidyup entry */
756 0
757 },
758#endif
759#ifdef ROUTER_REDIRECT
760 {
761 US"redirect",
762 redirect_router_options,
763 &redirect_router_options_count,
764 &redirect_router_option_defaults,
765 sizeof(redirect_router_options_block),
766 redirect_router_init,
767 redirect_router_entry,
768 NULL, /* no tidyup entry */
769 ri_notransport
770 },
771#endif
772{ US"", NULL, NULL, NULL, 0, NULL, NULL, NULL, 0 }
773};
774
775
776
777transport_info transports_available[] = {
778#ifdef TRANSPORT_APPENDFILE
779 {
780 US"appendfile", /* driver name */
781 appendfile_transport_options, /* local options table */
782 &appendfile_transport_options_count, /* number of entries */
783 &appendfile_transport_option_defaults, /* private options defaults */
784 sizeof(appendfile_transport_options_block), /* size of private block */
785 appendfile_transport_init, /* init entry point */
786 appendfile_transport_entry, /* main entry point */
787 NULL, /* no tidyup entry */
788 NULL, /* no closedown entry */
789 TRUE, /* local flag */
790 },
791#endif
792#ifdef TRANSPORT_AUTOREPLY
793 {
794 US"autoreply", /* driver name */
795 autoreply_transport_options, /* local options table */
796 &autoreply_transport_options_count, /* number of entries */
797 &autoreply_transport_option_defaults, /* private options defaults */
798 sizeof(autoreply_transport_options_block), /* size of private block */
799 autoreply_transport_init, /* init entry point */
800 autoreply_transport_entry, /* main entry point */
801 NULL, /* no tidyup entry */
802 NULL, /* no closedown entry */
803 TRUE /* local flag */
804 },
805#endif
806#ifdef TRANSPORT_LMTP
807 {
808 US"lmtp", /* driver name */
809 lmtp_transport_options, /* local options table */
810 &lmtp_transport_options_count, /* number of entries */
811 &lmtp_transport_option_defaults, /* private options defaults */
812 sizeof(lmtp_transport_options_block), /* size of private block */
813 lmtp_transport_init, /* init entry point */
814 lmtp_transport_entry, /* main entry point */
815 NULL, /* no tidyup entry */
816 NULL, /* no closedown entry */
817 TRUE /* local flag */
818 },
819#endif
820#ifdef TRANSPORT_PIPE
821 {
822 US"pipe", /* driver name */
823 pipe_transport_options, /* local options table */
824 &pipe_transport_options_count, /* number of entries */
825 &pipe_transport_option_defaults, /* private options defaults */
826 sizeof(pipe_transport_options_block), /* size of private block */
827 pipe_transport_init, /* init entry point */
828 pipe_transport_entry, /* main entry point */
829 NULL, /* no tidyup entry */
830 NULL, /* no closedown entry */
831 TRUE /* local flag */
832 },
833#endif
834#ifdef TRANSPORT_SMTP
835 {
836 US"smtp", /* driver name */
837 smtp_transport_options, /* local options table */
838 &smtp_transport_options_count, /* number of entries */
839 &smtp_transport_option_defaults, /* private options defaults */
840 sizeof(smtp_transport_options_block), /* size of private block */
841 smtp_transport_init, /* init entry point */
842 smtp_transport_entry, /* main entry point */
843 NULL, /* no tidyup entry */
844 smtp_transport_closedown, /* close down passed channel */
845 FALSE /* local flag */
846 },
847#endif
848{ US"", NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, FALSE }
849};
850
851/* End of drtables.c */