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