1 /* $NetBSD: pipe_command.h,v 1.2 2017/02/14 01:16:45 christos Exp $ */ 2 3 #ifndef _PIPE_COMMAND_H_INCLUDED_ 4 #define _PIPE_COMMAND_H_INCLUDED_ 5 6 /*++ 7 /* NAME 8 /* pipe_command 3h 9 /* SUMMARY 10 /* deliver message to external command 11 /* SYNOPSIS 12 /* #include <pipe_command.h> 13 /* DESCRIPTION 14 /* .nf 15 16 /* 17 * Utility library. 18 */ 19 #include <vstream.h> 20 #include <vstring.h> 21 #include <check_arg.h> 22 23 /* 24 * Global library. 25 */ 26 #include <mail_copy.h> 27 #include <dsn_buf.h> 28 29 /* 30 * Legacy API: type-unchecked arguments, internal use. 31 */ 32 #define PIPE_CMD_END 0 /* terminator */ 33 #define PIPE_CMD_COMMAND 1 /* command is string */ 34 #define PIPE_CMD_ARGV 2 /* command is array */ 35 #define PIPE_CMD_COPY_FLAGS 3 /* mail_copy() flags */ 36 #define PIPE_CMD_SENDER 4 /* mail_copy() sender */ 37 #define PIPE_CMD_DELIVERED 5 /* mail_copy() recipient */ 38 #define PIPE_CMD_UID 6 /* privileges */ 39 #define PIPE_CMD_GID 7 /* privileges */ 40 #define PIPE_CMD_TIME_LIMIT 8 /* time limit */ 41 #define PIPE_CMD_ENV 9 /* extra environment */ 42 #define PIPE_CMD_SHELL 10 /* alternative shell */ 43 #define PIPE_CMD_EOL 11 /* record delimiter */ 44 #define PIPE_CMD_EXPORT 12 /* exportable environment */ 45 #define PIPE_CMD_ORIG_RCPT 13 /* mail_copy() original recipient */ 46 #define PIPE_CMD_CWD 14 /* working directory */ 47 #define PIPE_CMD_CHROOT 15 /* chroot() before exec() */ 48 49 /* 50 * Safer API: type-checked arguments, external use. 51 */ 52 #define CA_PIPE_CMD_END PIPE_CMD_END 53 #define CA_PIPE_CMD_COMMAND(v) PIPE_CMD_COMMAND, CHECK_CPTR(PIPE_CMD, char, (v)) 54 #define CA_PIPE_CMD_ARGV(v) PIPE_CMD_ARGV, CHECK_PPTR(PIPE_CMD, char, (v)) 55 #define CA_PIPE_CMD_COPY_FLAGS(v) PIPE_CMD_COPY_FLAGS, CHECK_VAL(PIPE_CMD, int, (v)) 56 #define CA_PIPE_CMD_SENDER(v) PIPE_CMD_SENDER, CHECK_CPTR(PIPE_CMD, char, (v)) 57 #define CA_PIPE_CMD_DELIVERED(v) PIPE_CMD_DELIVERED, CHECK_CPTR(PIPE_CMD, char, (v)) 58 #define CA_PIPE_CMD_UID(v) PIPE_CMD_UID, CHECK_VAL(PIPE_CMD, uid_t, (v)) 59 #define CA_PIPE_CMD_GID(v) PIPE_CMD_GID, CHECK_VAL(PIPE_CMD, gid_t, (v)) 60 #define CA_PIPE_CMD_TIME_LIMIT(v) PIPE_CMD_TIME_LIMIT, CHECK_VAL(PIPE_CMD, int, (v)) 61 #define CA_PIPE_CMD_ENV(v) PIPE_CMD_ENV, CHECK_PPTR(PIPE_CMD, char, (v)) 62 #define CA_PIPE_CMD_SHELL(v) PIPE_CMD_SHELL, CHECK_CPTR(PIPE_CMD, char, (v)) 63 #define CA_PIPE_CMD_EOL(v) PIPE_CMD_EOL, CHECK_CPTR(PIPE_CMD, char, (v)) 64 #define CA_PIPE_CMD_EXPORT(v) PIPE_CMD_EXPORT, CHECK_PPTR(PIPE_CMD, char, (v)) 65 #define CA_PIPE_CMD_ORIG_RCPT(v) PIPE_CMD_ORIG_RCPT, CHECK_CPTR(PIPE_CMD, char, (v)) 66 #define CA_PIPE_CMD_CWD(v) PIPE_CMD_CWD, CHECK_CPTR(PIPE_CMD, char, (v)) 67 #define CA_PIPE_CMD_CHROOT(v) PIPE_CMD_CHROOT, CHECK_CPTR(PIPE_CMD, char, (v)) 68 69 CHECK_VAL_HELPER_DCL(PIPE_CMD, uid_t); 70 CHECK_VAL_HELPER_DCL(PIPE_CMD, int); 71 CHECK_VAL_HELPER_DCL(PIPE_CMD, gid_t); 72 CHECK_PPTR_HELPER_DCL(PIPE_CMD, char); 73 CHECK_CPTR_HELPER_DCL(PIPE_CMD, char); 74 75 /* 76 * Command completion status. 77 */ 78 #define PIPE_STAT_OK 0 /* success */ 79 #define PIPE_STAT_DEFER 1 /* try again */ 80 #define PIPE_STAT_BOUNCE 2 /* failed */ 81 #define PIPE_STAT_CORRUPT 3 /* corrupted file */ 82 83 extern int pipe_command(VSTREAM *, DSN_BUF *,...); 84 85 /* LICENSE 86 /* .ad 87 /* .fi 88 /* The Secure Mailer license must be distributed with this software. 89 /* AUTHOR(S) 90 /* Wietse Venema 91 /* IBM T.J. Watson Research 92 /* P.O. Box 704 93 /* Yorktown Heights, NY 10598, USA 94 /*--*/ 95 96 #endif 97