2011-11-14 15:57:52 +01:00
|
|
|
/*
|
|
|
|
* defs.h, SJ
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _DEFS_H
|
|
|
|
#define _DEFS_H
|
|
|
|
|
|
|
|
#ifdef NEED_MYSQL
|
|
|
|
#include <mysql.h>
|
|
|
|
#endif
|
|
|
|
#ifdef NEED_SQLITE3
|
|
|
|
#include <sqlite3.h>
|
|
|
|
|
|
|
|
/* for older versions of sqlite3 do not have the sqlite3_prepare_v2() function, 2009.12.30, SJ */
|
|
|
|
|
|
|
|
#if SQLITE_VERSION_NUMBER < 3006000
|
|
|
|
#define sqlite3_prepare_v2 sqlite3_prepare
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_TRE
|
|
|
|
#include <tre/tre.h>
|
|
|
|
#include <tre/regex.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <openssl/sha.h>
|
|
|
|
#include "config.h"
|
|
|
|
|
|
|
|
#define MSG_UNDEF -1
|
|
|
|
#define MSG_BODY 0
|
|
|
|
#define MSG_RECEIVED 1
|
|
|
|
#define MSG_FROM 2
|
|
|
|
#define MSG_TO 3
|
|
|
|
#define MSG_CC 4
|
|
|
|
#define MSG_SUBJECT 5
|
|
|
|
#define MSG_CONTENT_TYPE 6
|
|
|
|
#define MSG_CONTENT_TRANSFER_ENCODING 7
|
|
|
|
#define MSG_CONTENT_DISPOSITION 8
|
|
|
|
#define MSG_MESSAGE_ID 9
|
|
|
|
|
|
|
|
#define MAXHASH 8171
|
|
|
|
|
|
|
|
#define BASE64_RATIO 1.33333333
|
|
|
|
|
|
|
|
#define DIGEST_LENGTH SHA256_DIGEST_LENGTH
|
|
|
|
|
|
|
|
#define UNDEF 0
|
|
|
|
#define READY 1
|
|
|
|
#define BUSY 2
|
|
|
|
#define PROCESSED 3
|
|
|
|
|
|
|
|
|
|
|
|
struct attachment {
|
|
|
|
int size;
|
2011-11-16 14:47:47 +01:00
|
|
|
char type[TINYBUFSIZE];
|
|
|
|
char filename[TINYBUFSIZE];
|
2011-11-19 21:25:44 +01:00
|
|
|
char internalname[TINYBUFSIZE];
|
|
|
|
char digest[2*DIGEST_LENGTH+1];
|
2011-11-14 15:57:52 +01:00
|
|
|
};
|
|
|
|
|
2011-11-19 21:25:44 +01:00
|
|
|
|
2011-11-16 14:47:47 +01:00
|
|
|
struct list {
|
|
|
|
char s[SMALLBUFSIZE];
|
|
|
|
struct list *r;
|
2011-11-14 15:57:52 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2011-11-19 21:25:44 +01:00
|
|
|
struct rule {
|
|
|
|
#ifdef HAVE_TRE
|
|
|
|
regex_t from;
|
|
|
|
regex_t to;
|
|
|
|
regex_t subject;
|
2011-11-23 12:24:21 +01:00
|
|
|
regex_t attachment_type;
|
2011-11-19 21:25:44 +01:00
|
|
|
#endif
|
|
|
|
int size;
|
|
|
|
char _size[4];
|
2011-11-23 12:24:21 +01:00
|
|
|
int attachment_size;
|
|
|
|
char _attachment_size[4];
|
|
|
|
|
2011-11-19 21:25:44 +01:00
|
|
|
char *rulestr;
|
|
|
|
char compiled;
|
|
|
|
struct rule *r;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2011-11-14 15:57:52 +01:00
|
|
|
struct _state {
|
2011-11-16 14:47:47 +01:00
|
|
|
int line_num;
|
2011-11-14 15:57:52 +01:00
|
|
|
int message_state;
|
|
|
|
int is_header;
|
2011-11-22 12:31:54 +01:00
|
|
|
int is_1st_header;
|
2011-11-14 15:57:52 +01:00
|
|
|
int textplain;
|
|
|
|
int texthtml;
|
|
|
|
int message_rfc822;
|
|
|
|
int base64;
|
|
|
|
int utf8;
|
|
|
|
int qp;
|
|
|
|
int htmltag;
|
|
|
|
int style;
|
|
|
|
int skip_html;
|
|
|
|
int has_to_dump;
|
|
|
|
int fd;
|
2011-11-19 21:25:44 +01:00
|
|
|
int mfd;
|
2011-11-16 14:47:47 +01:00
|
|
|
int octetstream;
|
2011-11-14 15:57:52 +01:00
|
|
|
int realbinary;
|
|
|
|
int content_type_is_set;
|
2011-11-19 21:25:44 +01:00
|
|
|
int pushed_pointer;
|
|
|
|
int saved_size;
|
2011-11-14 15:57:52 +01:00
|
|
|
char attachedfile[RND_STR_LEN+SMALLBUFSIZE];
|
|
|
|
char message_id[SMALLBUFSIZE];
|
2011-11-16 14:47:47 +01:00
|
|
|
char miscbuf[MAX_TOKEN_LEN];
|
2011-12-07 15:24:52 +01:00
|
|
|
char qpbuf[MAX_TOKEN_LEN];
|
2011-11-14 15:57:52 +01:00
|
|
|
unsigned long n_token;
|
|
|
|
unsigned long n_subject_token;
|
|
|
|
unsigned long n_body_token;
|
|
|
|
unsigned long n_chain_token;
|
|
|
|
|
2011-11-22 12:31:54 +01:00
|
|
|
char filename[TINYBUFSIZE];
|
|
|
|
char type[TINYBUFSIZE];
|
|
|
|
|
2011-11-16 14:47:47 +01:00
|
|
|
struct list *boundaries;
|
2011-11-28 14:21:14 +01:00
|
|
|
struct list *rcpt;
|
2011-11-14 15:57:52 +01:00
|
|
|
|
|
|
|
int n_attachments;
|
|
|
|
struct attachment attachments[MAX_ATTACHMENTS];
|
|
|
|
|
|
|
|
char b_from[SMALLBUFSIZE], b_to[SMALLBUFSIZE], b_subject[MAXBUFSIZE], b_body[BIGBUFSIZE];
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct session_data {
|
2011-11-19 21:25:44 +01:00
|
|
|
char ttmpfile[SMALLBUFSIZE], tmpframe[SMALLBUFSIZE], tre;
|
2011-11-14 15:57:52 +01:00
|
|
|
char mailfrom[SMALLBUFSIZE], rcptto[MAX_RCPT_TO][SMALLBUFSIZE], client_addr[SMALLBUFSIZE];
|
|
|
|
char acceptbuf[SMALLBUFSIZE];
|
|
|
|
char whitelist[MAXBUFSIZE], blacklist[MAXBUFSIZE];
|
|
|
|
int fd, hdr_len, tot_len, num_of_rcpt_to, rav;
|
|
|
|
int need_scan;
|
|
|
|
float __acquire, __parsed, __av, __store, __compress, __encrypt;
|
|
|
|
char bodydigest[2*DIGEST_LENGTH+1];
|
2011-11-22 12:31:54 +01:00
|
|
|
char digest[2*DIGEST_LENGTH+1];
|
2011-11-14 15:57:52 +01:00
|
|
|
time_t now, sent;
|
|
|
|
#ifdef NEED_MYSQL
|
|
|
|
MYSQL mysql;
|
|
|
|
#endif
|
|
|
|
#ifdef NEED_SQLITE3
|
|
|
|
sqlite3 *db;
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef HAVE_MEMCACHED
|
|
|
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include <netinet/in.h>
|
|
|
|
|
|
|
|
struct flags {
|
|
|
|
bool no_block:1;
|
|
|
|
bool no_reply:1;
|
|
|
|
bool tcp_nodelay:1;
|
|
|
|
bool tcp_keepalive:1;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct memcached_server {
|
|
|
|
|
|
|
|
struct flags flags;
|
|
|
|
|
|
|
|
int fd;
|
|
|
|
unsigned int snd_timeout;
|
|
|
|
unsigned int rcv_timeout;
|
|
|
|
|
|
|
|
int send_size;
|
|
|
|
int recv_size;
|
|
|
|
unsigned int tcp_keepidle;
|
|
|
|
|
|
|
|
int last_read_bytes;
|
|
|
|
|
|
|
|
char *result;
|
|
|
|
char buf[MAXBUFSIZE];
|
|
|
|
|
|
|
|
struct sockaddr_in addr;
|
|
|
|
|
|
|
|
char server_ip[16];
|
|
|
|
int server_port;
|
|
|
|
|
|
|
|
char initialised;
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
struct __data {
|
|
|
|
#ifdef HAVE_TRE
|
2011-11-19 21:25:44 +01:00
|
|
|
struct rule *rules;
|
2011-11-14 15:57:52 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef HAVE_MEMCACHED
|
|
|
|
struct memcached_server memc;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct __counters {
|
|
|
|
unsigned long long c_rcvd;
|
|
|
|
unsigned long long c_virus;
|
|
|
|
unsigned long long c_duplicate;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* _DEFS_H */
|
|
|
|
|