1/* $NetBSD: dsn_print.c,v 1.3 2022/10/08 16:12:45 christos Exp $ */ 2 3/*++ 4/* NAME 5/* dsn_print 6/* SUMMARY 7/* write DSN structure to stream 8/* SYNOPSIS 9/* #include <dsn_print.h> 10/* 11/* int dsn_print(print_fn, stream, flags, ptr) 12/* ATTR_PRINT_COMMON_FN print_fn; 13/* VSTREAM *stream; 14/* int flags; 15/* void *ptr; 16/* DESCRIPTION 17/* dsn_print() writes a DSN structure to the named stream using 18/* the specified attribute print routine. dsn_print() is meant 19/* to be passed as a call-back to attr_print(), thusly: 20/* 21/* ... SEND_ATTR_FUNC(dsn_print, (const void *) dsn), ... 22/* DIAGNOSTICS 23/* Fatal: out of memory. 24/* LICENSE 25/* .ad 26/* .fi 27/* The Secure Mailer license must be distributed with this software. 28/* AUTHOR(S) 29/* Wietse Venema 30/* IBM T.J. Watson Research 31/* P.O. Box 704 32/* Yorktown Heights, NY 10598, USA 33/* 34/* Wietse Venema 35/* Google, Inc. 36/* 111 8th Avenue 37/* New York, NY 10011, USA 38/*--*/ 39 40/* System library. */ 41 42#include <sys_defs.h> 43 44/* Utility library. */ 45 46#include <attr.h> 47 48/* Global library. */ 49 50#include <mail_proto.h> 51#include <dsn_print.h> 52 53/* dsn_print - write DSN to stream */ 54 55int dsn_print(ATTR_PRINT_COMMON_FN print_fn, VSTREAM *fp, 56 int flags, const void *ptr) 57{ 58 DSN *dsn = (DSN *) ptr; 59 int ret; 60 61 /* 62 * The attribute order is determined by backwards compatibility. It can 63 * be sanitized after all the ad-hoc DSN read/write code is replaced. 64 */ 65 ret = print_fn(fp, flags | ATTR_FLAG_MORE, 66 SEND_ATTR_STR(MAIL_ATTR_DSN_STATUS, dsn->status), 67 SEND_ATTR_STR(MAIL_ATTR_DSN_DTYPE, dsn->dtype), 68 SEND_ATTR_STR(MAIL_ATTR_DSN_DTEXT, dsn->dtext), 69 SEND_ATTR_STR(MAIL_ATTR_DSN_MTYPE, dsn->mtype), 70 SEND_ATTR_STR(MAIL_ATTR_DSN_MNAME, dsn->mname), 71 SEND_ATTR_STR(MAIL_ATTR_DSN_ACTION, dsn->action), 72 SEND_ATTR_STR(MAIL_ATTR_WHY, dsn->reason), 73 ATTR_TYPE_END); 74 return (ret); 75} 76