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

Reply via email to