Sync usage with man page.
[netbsd-mini2440.git] / external / ibm-public / postfix / dist / src / global / verify.c
blob19fb5e7b5f238d3ec971f1e99e3fce8101ce91b6
1 /* $NetBSD$ */
3 /*++
4 /* NAME
5 /* verify 3
6 /* SUMMARY
7 /* update verify database
8 /* SYNOPSIS
9 /* #include <verify.h>
11 /* int verify_append(queue_id, stats, recipient, relay, dsn,
12 /* verify_status)
13 /* const char *queue_id;
14 /* MSG_STATS *stats;
15 /* RECIPIENT *recipient;
16 /* const char *relay;
17 /* DSN *dsn;
18 /* int verify_status;
19 /* DESCRIPTION
20 /* This module implements an impedance adaptor between the
21 /* verify_clnt interface and the interface expected by the
22 /* bounce/defer/sent modules.
24 /* verify_append() updates the address verification database
25 /* and logs the action to the mailer logfile.
27 /* Arguments:
28 /* .IP queue_id
29 /* The message queue id.
30 /* .IP stats
31 /* Time stamps from different message delivery stages
32 /* and session reuse count.
33 /* .IP recipient
34 /* Recipient information. See recipient_list(3).
35 /* .IP relay
36 /* Name of the host we're talking to.
37 /* .IP dsn
38 /* Delivery status information. See dsn(3).
39 /* The action is one of "deliverable" or "undeliverable".
40 /* .IP verify_status
41 /* One of the following recipient verification status codes:
42 /* .RS
43 /* .IP DEL_REQ_RCPT_STAT_OK
44 /* Successful delivery.
45 /* .IP DEL_REQ_RCPT_STAT_DEFER
46 /* Temporary delivery error.
47 /* .IP DEL_REQ_RCPT_STAT_BOUNCE
48 /* Hard delivery error.
49 /* .RE
50 /* DIAGNOSTICS
51 /* A non-zero result means the operation failed.
53 /* Fatal: out of memory.
54 /* BUGS
55 /* Should be replaced by routines with an attribute-value based
56 /* interface instead of an interface that uses a rigid argument list.
57 /* LICENSE
58 /* .ad
59 /* .fi
60 /* The Secure Mailer license must be distributed with this software.
61 /* AUTHOR(S)
62 /* Wietse Venema
63 /* IBM T.J. Watson Research
64 /* P.O. Box 704
65 /* Yorktown Heights, NY 10598, USA
66 /*--*/
68 /* System library. */
70 #include <sys_defs.h>
71 #include <string.h>
73 #ifdef STRCASECMP_IN_STRINGS_H
74 #include <strings.h>
75 #endif
77 /* Utility library. */
79 #include <msg.h>
80 #include <vstring.h>
82 /* Global library. */
84 #include <mail_params.h>
85 #include <mail_proto.h>
86 #include <verify_clnt.h>
87 #include <log_adhoc.h>
88 #include <verify.h>
90 /* verify_append - update address verification database */
92 int verify_append(const char *queue_id, MSG_STATS *stats,
93 RECIPIENT *recipient, const char *relay,
94 DSN *dsn, int vrfy_stat)
96 int req_stat;
97 DSN my_dsn = *dsn;
100 * Impedance adaptor between bounce/defer/sent and verify_clnt.
102 * XXX No DSN check; this routine is called from bounce/defer/sent, which
103 * know what the DSN initial digit should look like.
105 * XXX vrfy_stat is competely redundant because of dsn.
107 if (var_verify_neg_cache || vrfy_stat == DEL_RCPT_STAT_OK) {
108 req_stat = verify_clnt_update(recipient->orig_addr, vrfy_stat,
109 my_dsn.reason);
110 if (req_stat == VRFY_STAT_OK && strcasecmp(recipient->address,
111 recipient->orig_addr) != 0)
112 req_stat = verify_clnt_update(recipient->address, vrfy_stat,
113 my_dsn.reason);
114 } else {
115 my_dsn.action = "undeliverable-but-not-cached";
116 req_stat = VRFY_STAT_OK;
118 if (req_stat == VRFY_STAT_OK) {
119 log_adhoc(queue_id, stats, recipient, relay, dsn, my_dsn.action);
120 req_stat = 0;
121 } else {
122 msg_warn("%s: %s service failure", queue_id, var_verify_service);
123 req_stat = -1;
125 return (req_stat);