If the training mode has been specified on the command line, it should not be overruled by the user's (or default) preferences. Also, this patch removes the DST_DEFAULT constant from the libdspam interface since it has only been (ab)used by the agent and never really belonged to the library in the first place. --- src/agent_shared.c | 18 ++++++++---------- src/agent_shared.h | 1 + src/dspam.c | 4 +++- src/libdspam_objects.h | 1 - 4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/agent_shared.c b/src/agent_shared.c index 7e09169..14088c9 100644 --- a/src/agent_shared.c +++ b/src/agent_shared.c @@ -94,7 +94,6 @@ uid_t __pw_uid; int initialize_atx(AGENT_CTX *ATX) { memset(ATX, 0, sizeof(AGENT_CTX)); - ATX->training_mode = DST_DEFAULT; ATX->training_buffer = 0; ATX->train_pristine = 0; ATX->classification = DSR_NONE; @@ -237,7 +236,9 @@ int process_arguments(AGENT_CTX *ATX, int argc, char **argv) { if (!strncmp (argv[i], "--mode=", 7)) { char *mode = strchr(argv[i], '=')+1; - process_mode(ATX, mode); + if (process_mode(ATX, mode)) + return EINVAL; + ATX->flags |= DAF_FIXED_TR_MODE; continue; } @@ -590,9 +591,12 @@ int apply_defaults(AGENT_CTX *ATX) { /* Training mode */ - if (ATX->training_mode == DST_DEFAULT) { + if (!(ATX->flags & DAF_FIXED_TR_MODE)) { char *v = _ds_read_attribute(agent_config, "TrainingMode"); - process_mode(ATX, v); + if (process_mode(ATX, v)) { + LOG(LOG_ERR, ERR_AGENT_NO_TR_MODE); + return EINVAL; + } } /* Default delivery agent */ @@ -695,12 +699,6 @@ int check_configuration(AGENT_CTX *ATX) { return EINVAL; } - if (ATX->training_mode == DST_DEFAULT) - { - LOG(LOG_ERR, ERR_AGENT_NO_TR_MODE); - return EINVAL; - } - if (!_ds_match_attribute(agent_config, "ParseToHeaders", "on")) { if (ATX->users->items == 0) diff --git a/src/agent_shared.h b/src/agent_shared.h index d74534c..3fc6a31 100644 --- a/src/agent_shared.h +++ b/src/agent_shared.h @@ -131,6 +131,7 @@ int init_pwent_cache(void); #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 diff --git a/src/dspam.c b/src/dspam.c index 3680ba8..e8771e5 100644 --- a/src/dspam.c +++ b/src/dspam.c @@ -2740,7 +2740,9 @@ DSPAM_CTX *ctx_init(AGENT_CTX *ATX, const char *username) { CTX->source = ATX->source; } - if (ATX->PTX != NULL && strcmp(_ds_pref_val(ATX->PTX, "trainingMode"), "")) { + if (!( ATX->flags & DAF_FIXED_TR_MODE) + && ATX->PTX != NULL + && strcmp(_ds_pref_val(ATX->PTX, "trainingMode"), "")) { if (!strcasecmp(_ds_pref_val(ATX->PTX, "trainingMode"), "TEFT")) CTX->training_mode = DST_TEFT; else if (!strcasecmp(_ds_pref_val(ATX->PTX, "trainingMode"), "TOE")) diff --git a/src/libdspam_objects.h b/src/libdspam_objects.h index ecb0dce..308e045 100644 --- a/src/libdspam_objects.h +++ b/src/libdspam_objects.h @@ -370,7 +370,6 @@ typedef struct #define DST_TOE 0x01 #define DST_TUM 0x02 #define DST_NOTRAIN 0xFE -#define DST_DEFAULT 0xFF /* Classification Results */ -- 1.6.3.3 ------------------------------------------------------------------------------ All of the data generated in your IT infrastructure is seriously valuable. Why? It contains a definitive record of application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-d2d-c2 _______________________________________________ Dspam-devel mailing list Dspam-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dspam-devel