milter.h revision 66494
1/*
2 * Copyright (c) 1999-2000 Sendmail, Inc. and its suppliers.
3 *	All rights reserved.
4 *
5 * By using this file, you agree to the terms and conditions set
6 * forth in the LICENSE file which can be found at the top level of
7 * the sendmail distribution.
8 *
9 *
10 *	$Id: milter.h,v 8.24.16.8 2000/09/17 17:04:24 gshapiro Exp $
11 */
12
13/*
14**  MILTER.H -- Global definitions for mail filter and MTA.
15*/
16
17#ifndef _LIBMILTER_MILTER_H
18# define _LIBMILTER_MILTER_H	1
19
20#include "libmilter/mfapi.h"
21#include "sendmail.h"
22
23/* Shared protocol constants */
24# define MILTER_LEN_BYTES	4	/* length of 32 bit integer in bytes */
25# define MILTER_OPTLEN	(MILTER_LEN_BYTES * 3) /* length of options */
26# define MILTER_CHUNK_SIZE	65535	/* body chunk size */
27
28/* address families */
29# define SMFIA_UNKNOWN		'U'	/* unknown */
30# define SMFIA_UNIX		'L'	/* unix/local */
31# define SMFIA_INET		'4'	/* inet */
32# define SMFIA_INET6		'6'	/* inet6 */
33
34/* commands: don't use anything smaller than ' ' */
35# define SMFIC_ABORT		'A'	/* Abort */
36# define SMFIC_BODY		'B'	/* Body chunk */
37# define SMFIC_CONNECT		'C'	/* Connection information */
38# define SMFIC_MACRO		'D'	/* Define macro */
39# define SMFIC_BODYEOB		'E'	/* final body chunk (End) */
40# define SMFIC_HELO		'H'	/* HELO/EHLO */
41# define SMFIC_HEADER		'L'	/* Header */
42# define SMFIC_MAIL		'M'	/* MAIL from */
43# define SMFIC_EOH		'N'	/* EOH */
44# define SMFIC_OPTNEG		'O'	/* Option negotiation */
45# define SMFIC_QUIT		'Q'	/* QUIT */
46# define SMFIC_RCPT		'R'	/* RCPT to */
47
48/* actions (replies) */
49# define SMFIR_ADDRCPT		'+'	/* add recipient */
50# define SMFIR_DELRCPT		'-'	/* remove recipient */
51# define SMFIR_ACCEPT		'a'	/* accept */
52# define SMFIR_REPLBODY		'b'	/* replace body (chunk) */
53# define SMFIR_CONTINUE		'c'	/* continue */
54# define SMFIR_DISCARD		'd'	/* discard */
55# define SMFIR_CHGHEADER	'm'	/* change header */
56# define SMFIR_PROGRESS		'p'	/* progress */
57# define SMFIR_REJECT		'r'	/* reject */
58# define SMFIR_TEMPFAIL		't'	/* tempfail */
59# define SMFIR_ADDHEADER	'h'	/* add header */
60# define SMFIR_REPLYCODE	'y'	/* reply code etc */
61
62/* What the MTA can send/filter wants in protocol */
63# define SMFIP_NOCONNECT 0x00000001L	/* MTA should not send connect info */
64# define SMFIP_NOHELO	0x00000002L	/* MTA should not send HELO info */
65# define SMFIP_NOMAIL	0x00000004L	/* MTA should not send MAIL info */
66# define SMFIP_NORCPT	0x00000008L	/* MTA should not send RCPT info */
67# define SMFIP_NOBODY	0x00000010L	/* MTA should not send body */
68# define SMFIP_NOHDRS	0x00000020L	/* MTA should not send headers */
69# define SMFIP_NOEOH	0x00000040L	/* MTA should not send EOH */
70
71# define SMFI_V1_PROT	0x0000003FL	/* The protocol of V1 filter */
72# define SMFI_V2_PROT	0x0000007FL	/* The protocol of V2 filter */
73# define SMFI_CURR_PROT	SMFI_V2_PROT	/* The current version */
74
75/* socket and thread portability */
76# include <pthread.h>
77typedef pthread_t	sthread_t;
78typedef int		socket_t;
79
80# define MAX_MACROS_ENTRIES	4	/* max size of macro pointer array */
81
82/*
83**  context for milter
84**  implementation hint:
85**  macros are stored in mac_buf[] as sequence of:
86**  macro_name \0 macro_value
87**  (just as read from the MTA)
88**  mac_ptr is a list of pointers into mac_buf to the beginning of each
89**  entry, i.e., macro_name, macro_value, ...
90*/
91
92struct smfi_str
93{
94	sthread_t	ctx_id;		/* thread id */
95	socket_t	ctx_sd;		/* socket descriptor */
96	int		ctx_dbg;	/* debug level */
97	time_t		ctx_timeout;	/* timeout */
98	int		ctx_state;	/* state */
99	smfiDesc_ptr	ctx_smfi;	/* filter description */
100	u_long		ctx_pflags;	/* protocol flags */
101	char		**ctx_mac_ptr[MAX_MACROS_ENTRIES];
102	char		*ctx_mac_buf[MAX_MACROS_ENTRIES];
103	char		*ctx_reply;	/* reply code */
104	void		*ctx_privdata;	/* private data */
105};
106
107#endif /* !_LIBMILTER_MILTER_H */
108