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