1/*++
2/* NAME
3/*	qmgr_bounce
4/* SUMMARY
5/*	deal with mail that will not be delivered
6/* SYNOPSIS
7/*	#include "qmgr.h"
8/*
9/*	QMGR_QUEUE *qmgr_bounce_recipient(message, recipient, dsn)
10/*	QMGR_MESSAGE *message;
11/*	RECIPIENT *recipient;
12/*	DSN	*dsn;
13/* DESCRIPTION
14/*	qmgr_bounce_recipient() produces a bounce log record.
15/*	Once the bounce record is written successfully, the recipient
16/*	is marked as done. When the bounce record cannot be written,
17/*	the message structure is updated to reflect that the mail is
18/*	deferred.
19/*
20/*	Arguments:
21/* .IP message
22/*	Open queue file with the message being bounced.
23/* .IP recipient
24/*	The recipient that will not be delivered.
25/* .IP dsn
26/*	Delivery status information. See dsn(3).
27/* DIAGNOSTICS
28/*	Panic: consistency check failure. Fatal: out of memory.
29/* LICENSE
30/* .ad
31/* .fi
32/*	The Secure Mailer license must be distributed with this software.
33/* AUTHOR(S)
34/*	Wietse Venema
35/*	IBM T.J. Watson Research
36/*	P.O. Box 704
37/*	Yorktown Heights, NY 10598, USA
38/*--*/
39
40/* System library. */
41
42#include <sys_defs.h>
43
44/* Utility library. */
45
46/* Global library. */
47
48#include <bounce.h>
49#include <deliver_completed.h>
50
51/* Application-specific. */
52
53#include "qmgr.h"
54
55/* qmgr_bounce_recipient - bounce one message recipient */
56
57void    qmgr_bounce_recipient(QMGR_MESSAGE *message, RECIPIENT *recipient,
58			              DSN *dsn)
59{
60    MSG_STATS stats;
61    int     status;
62
63    status = bounce_append(message->tflags, message->queue_id,
64			   QMGR_MSG_STATS(&stats, message), recipient,
65			   "none", dsn);
66
67    if (status == 0)
68	deliver_completed(message->fp, recipient->offset);
69    else
70	message->flags |= status;
71}
72