1 /*
2 **  Copyright (c) 2005-2009 Sendmail, Inc. and its suppliers.
3 **	All rights reserved.
4 **
5 **  Copyright (c) 2009-2014, The Trusted Domain Project.  All rights reserved.
6 */
7 
8 #ifndef _OPENDKIM_H_
9 #define _OPENDKIM_H_
10 
11 #define	DKIMF_PRODUCT	"OpenDKIM Filter"
12 #define	DKIMF_PRODUCTNS	"OpenDKIM-Filter"
13 
14 #include "build-config.h"
15 
16 /* system includes */
17 #include <sys/types.h>
18 #ifdef HAVE_STDBOOL_H
19 # include <stdbool.h>
20 #endif /* HAVE_STDBOOL_H */
21 
22 /* libmilter */
23 #ifdef DKIMF_MILTER_PROTOTYPES
24 # include <libmilter/mfapi.h>
25 #endif /* DKIMF_MILTER_PROTOTYPES */
26 
27 /* libopendkim */
28 #include "dkim.h"
29 
30 #ifdef USE_LUA
31 # ifdef DKIMF_LUA_PROTOTYPES
32 /* LUA */
33 # include <lua.h>
34 # endif /* DKIMF_LUA_PROTOTYPES */
35 #endif /* USE_LUA */
36 
37 /* make sure we have TRUE and FALSE */
38 #ifndef FALSE
39 # define FALSE		0
40 #endif /* !FALSE */
41 #ifndef TRUE
42 # define TRUE		1
43 #endif /* !TRUE */
44 
45 /* defaults, limits, etc. */
46 #define	BUFRSZ		1024
47 #define	CACHESTATSINT	300
48 #define	CBINTERVAL	3
49 #define	DEFCONFFILE	CONFIG_BASE "/opendkim.conf"
50 #define	DEFFLOWDATATTL	86400
51 #define	DEFINTERNAL	"csl:127.0.0.1,::1"
52 #define	DEFMAXHDRSZ	65536
53 #define	DEFMAXVERIFY	3
54 #define	DEFTIMEOUT	5
55 #define	HOSTUNKNOWN	"unknown-host"
56 #define	JOBIDUNKNOWN	"(unknown-jobid)"
57 #define	LOCALHOST	"127.0.0.1"
58 #define	MAXADDRESS	256
59 #define	MAXARGV		65536
60 #define	MAXBUFRSZ	65536
61 #define	MAXHDRCNT	64
62 #define	MAXHDRLEN	78
63 #define	MAXSIGNATURE	1024
64 #define	MTAMARGIN	78
65 #define	NULLDOMAIN	"(invalid)"
66 #define	SUPERUSER	"root"
67 #define	UNKNOWN		"unknown"
68 
69 #define	DB_DOMAINS	1
70 #define DB_THIRDPARTY	2
71 #define	DB_DONTSIGNTO	3
72 #define	DB_MTAS		4
73 #define	DB_MACROS	5
74 #define	DB_SIGNINGTABLE	6
75 
76 #define AUTHRESULTSHDR	"Authentication-Results"
77 #define ORCPTHEADER	"Original-Recipient"
78 
79 #define	SWHEADERNAME	"DKIM-Filter"
80 #define	SELECTCANONHDR	"Canonicalization"
81 
82 #ifdef _FFR_VBR
83 # define VBRTYPEHEADER	"VBR-Type"
84 # define VBRCERTHEADER	"VBR-Certifiers"
85 #endif /* _FFR_VBR */
86 
87 #ifdef _FFR_ADSP_LISTS
88 # define ADSP_DISCARDABLE_SMTP	"550"
89 # define ADSP_DISCARDABLE_ESC	"5.7.1"
90 # define ADSP_DISCARDABLE_TEXT	"ADSP discardable mail may not be sent to this address"
91 #endif /* _FFR_ADSP_LISTS */
92 
93 /* POPAUTH db */
94 #if POPAUTH
95 # define POPAUTHDB	"/etc/mail/popip.db"
96 #endif /* POPAUTH */
97 
98 /*
99 **  HEADER -- a handle referring to a header
100 */
101 
102 typedef struct Header * Header;
103 struct Header
104 {
105 	char *		hdr_hdr;
106 	char *		hdr_val;
107 	struct Header *	hdr_next;
108 	struct Header *	hdr_prev;
109 };
110 
111 /*
112 **  SIGNREQ -- signing request (for multiple signature requests)
113 */
114 
115 typedef struct signreq * SIGNREQ;
116 struct signreq
117 {
118 	ssize_t			srq_signlen;
119 	void *			srq_keydata;
120 	u_char *		srq_domain;
121 	u_char *		srq_selector;
122 	u_char *		srq_signer;
123 	DKIM *			srq_dkim;
124 	struct signreq *	srq_next;
125 };
126 
127 #ifdef _FFR_STATSEXT
128 /*
129 **  STATSEXT -- statistics extension data
130 */
131 
132 typedef struct statsext * statsext;
133 struct statsext
134 {
135 	char			se_name[BUFRSZ];
136 	char			se_value[BUFRSZ];
137 	struct statsext * 	se_next;
138 };
139 #endif /* _FFR_STATSEXT */
140 
141 /* externs */
142 extern _Bool dolog;
143 extern char *progname;
144 
145 /* prototypes, exported for test.c */
146 #ifdef DKIMF_MILTER_PROTOTYPES
147 extern sfsistat mlfi_connect __P((SMFICTX *, char *, _SOCK_ADDR *));
148 extern sfsistat mlfi_envfrom __P((SMFICTX *, char **));
149 extern sfsistat mlfi_envrcpt __P((SMFICTX *, char **));
150 extern sfsistat mlfi_header __P((SMFICTX *, char *, char *));
151 extern sfsistat mlfi_eoh __P((SMFICTX *));
152 extern sfsistat mlfi_body __P((SMFICTX *, u_char *, size_t));
153 extern sfsistat mlfi_eom __P((SMFICTX *));
154 extern sfsistat mlfi_abort __P((SMFICTX *));
155 extern sfsistat mlfi_close __P((SMFICTX *));
156 #endif /* DKIMF_MILTER_PROTOTYPES */
157 
158 extern DKIM *dkimf_getdkim __P((void *));
159 extern struct signreq *dkimf_getsrlist __P((void *));
160 
161 #ifdef USE_LDAP
162 extern char *dkimf_get_ldap_param __P((int));
163 #endif /* USE_LDAP */
164 
165 #ifdef USE_LUA
166 # ifdef DKIMF_LUA_PROTOTYPES
167 extern void dkimf_import_globals __P((void *, lua_State *));
168 extern int dkimf_xs_addheader __P((lua_State *));
169 extern int dkimf_xs_addrcpt __P((lua_State *));
170 extern int dkimf_xs_bodylength __P((lua_State *));
171 extern int dkimf_xs_canonlength __P((lua_State *));
172 extern int dkimf_xs_clienthost __P((lua_State *));
173 extern int dkimf_xs_clientip __P((lua_State *));
174 extern int dkimf_xs_dbclose __P((lua_State *));
175 extern int dkimf_xs_dbhandle __P((lua_State *));
176 extern int dkimf_xs_dbopen __P((lua_State *));
177 extern int dkimf_xs_dbquery __P((lua_State *));
178 extern int dkimf_xs_delheader __P((lua_State *));
179 extern int dkimf_xs_delrcpt __P((lua_State *));
180 extern int dkimf_xs_export __P((lua_State *));
181 extern int dkimf_xs_fromdomain __P((lua_State *));
182 extern int dkimf_xs_getenvfrom __P((lua_State *));
183 extern int dkimf_xs_getheader __P((lua_State *));
184 extern int dkimf_xs_getreputation __P((lua_State *));
185 extern int dkimf_xs_getsigarray __P((lua_State *));
186 extern int dkimf_xs_getsigcount __P((lua_State *));
187 extern int dkimf_xs_getsigdomain __P((lua_State *));
188 extern int dkimf_xs_getsighandle __P((lua_State *));
189 extern int dkimf_xs_getsigidentity __P((lua_State *));
190 extern int dkimf_xs_getsymval __P((lua_State *));
191 extern int dkimf_xs_internalip __P((lua_State *));
192 extern int dkimf_xs_log __P((lua_State *));
193 extern int dkimf_xs_parsefield __P((lua_State *));
194 extern int dkimf_xs_popauth __P((lua_State *));
195 extern int dkimf_xs_quarantine __P((lua_State *));
196 extern int dkimf_xs_rblcheck __P((lua_State *));
197 extern int dkimf_xs_rcpt __P((lua_State *));
198 extern int dkimf_xs_rcptarray __P((lua_State *));
199 extern int dkimf_xs_rcptcount __P((lua_State *));
200 extern int dkimf_xs_replaceheader __P((lua_State *));
201 extern int dkimf_xs_resign __P((lua_State *));
202 extern int dkimf_xs_requestsig __P((lua_State *));
203 extern int dkimf_xs_setpartial __P((lua_State *));
204 extern int dkimf_xs_setreply __P((lua_State *));
205 extern int dkimf_xs_setresult __P((lua_State *));
206 extern int dkimf_xs_sigbhresult __P((lua_State *));
207 extern int dkimf_xs_sigignore __P((lua_State *));
208 extern int dkimf_xs_signfor __P((lua_State *));
209 extern int dkimf_xs_sigresult __P((lua_State *));
210 #  ifdef _FFR_REPUTATION
211 extern int dkimf_xs_spam __P((lua_State *));
212 #  endif /* _FFR_REPUTATION */
213 #  ifdef _FFR_STATSEXT
214 extern int dkimf_xs_statsext __P((lua_State *));
215 #  endif /* _FFR_STATSEXT */
216 extern int dkimf_xs_verify __P((lua_State *));
217 extern int dkimf_xs_xtag __P((lua_State *));
218 # endif /* DKIMF_LUA_PROTOTYPES */
219 #endif /* USE_LUA */
220 
221 #endif /* _OPENDKIM_H_ */
222