/* $Id: agent_shared.h,v 1.35 2011/07/11 21:27:15 sbajic Exp $ */ /* DSPAM COPYRIGHT (C) 2002-2012 DSPAM PROJECT This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ #include #ifndef _WIN32 #include #endif #include "buffer.h" #ifdef HAVE_CONFIG_H #include #endif #include "libdspam.h" #ifndef _AGENT_SHARED_H # define _AGENT_SHARED_H extern char *__pw_name; extern uid_t __pw_uid; #define STATUS( ... ) snprintf(ATX->status, sizeof(ATX->status), __VA_ARGS__); #define SYNTAX "Syntax: dspam [--help|--version|[--client|--daemon [--nofork]] [--debug] --mode=[toe|tum|teft|notrain|unlearn] --user [user1 user2 ... userN] [--feature=[no,wh,tb=N]] [--class=[spam|innocent]] [--source=[error|corpus|inoculation]] [--profile=[PROFILE]] [--deliver=[spam,[innocent|nonspam],summary,stdout]] [--process|--classify] [--stdout] [--mail-from=sender-address] [--rcpt-to recipient-address(es)] [--signature=DSPAM-Signature] [passthru-arguments]]" #define SIGNATURE_BEGIN "!DSPAM:" #define SIGNATURE_END "!" #define LOOSE_SIGNATURE_BEGIN "X-DSPAM-Signature:" #define SIGNATURE_DELIMITER ": " /* AGENT_CTX: Agent context. Defines the behavior of the agent */ typedef struct { int operating_mode; /* Processing Mode IN DSM_ */ int fork; /* Fork daemon: IN 1:0 */ int client_mode; /* Client Mode: IN 1:0 */ int training_mode; /* Training Mode IN DST_ */ int classification; /* Classification IN DSR_ */ int source; /* Classification Source IN DSS_ */ int spam_action; /* Action on Spam IN DSA_ */ #ifdef TRUSTED_USER_SECURITY int trusted; /* Trusted User? IN */ #endif int feature; /* Feature Overridden? IN */ int train_pristine; /* Train Pristine? IN */ int tokenizer; /* Tokenizer IN */ void *dbh; /* Database Handle IN */ u_int64_t flags; /* Flags DAF_ IN */ int training_buffer; /* Sedation Level 0-10 IN */ char *recipient; /* Current Recipient */ char mailer_args[256]; /* Delivery Args IN */ char spam_args[256]; /* Quarantine Args IN */ char managed_group[256]; /* Managed Groupname IN */ char profile[32]; /* Storage Profile IN */ char signature[128]; /* Signature Serial IN/OUT */ char mailfrom[256]; /* For LMTP or SMTP */ struct nt *users; /* Destination Users IN */ struct nt *inoc_users; /* Inoculate list OUT */ struct nt *classify_users; /* Classify list OUT */ struct nt *recipients; /* Recipients IN */ struct nt *results; /* Process Results OUT */ struct _ds_spam_signature SIG; /* Signature object OUT */ int learned; /* Message learned? OUT */ FILE *sockfd; /* Socket FD if not STDOUT */ int sockfd_output; /* Output sent to sockfd? */ char client_args[1024]; /* Args for client connection */ double timestart; agent_pref_t PTX; char status[256]; #ifdef DEBUG char debug_args[1024]; #endif #ifndef _WIN32 #ifdef TRUSTED_USER_SECURITY struct passwd *p; #if defined(_REENTRANT) && defined(HAVE_GETPWUID_R) struct passwd pwbuf; #endif #endif #endif } AGENT_CTX; int process_features (AGENT_CTX *ATX, const char *features); int process_mode (AGENT_CTX *ATX, const char *mode); int check_configuration (AGENT_CTX *ATX); int apply_defaults (AGENT_CTX *ATX); int process_arguments (AGENT_CTX *ATX, int argc, char **argv); int initialize_atx (AGENT_CTX *ATX); int process_parseto (AGENT_CTX *ATX, const char *buf); buffer *read_stdin (AGENT_CTX *ATX); int init_pwent_cache(void); #ifndef MIN # define MAX(a,b) ((a)>(b)?(a):(b)) # define MIN(a,b) ((a)<(b)?(a):(b)) #endif /* !MIN */ /* * Agent context flag (DAF) * Do not confuse with libdspam's classification context flags (DSF) * */ #define DAF_STDOUT 0x01 #define DAF_DELIVER_SPAM 0x02 #define DAF_DELIVER_INNOCENT 0x04 #define DAF_WHITELIST 0x08 #define DAF_GLOBAL 0x10 #define DAF_INOCULATE 0x20 #define DAF_NOISE 0x40 #define DAF_MERGED 0x80 #define DAF_SUMMARY 0x100 #define DAF_UNLEARN 0x200 #define DAF_FIXED_TR_MODE 0x400 #define DAZ_WORD 0x01 #define DAZ_CHAIN 0x02 #define DAZ_SBPH 0x03 #define DAZ_OSB 0x04 #endif /* _AGENT_SHARED_H */