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