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