Kedves János.

Szeretném használni az ön által írt Clapf program 0.4.2-es verzióját.

Az alábbi konfigurációs paraméterekkel fordítom:

./configure --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib \
            --libdir=/usr/lib --localstatedir=/var --sysconfdir=/etc \
            --includedir=/usr/include --datarootdir=/usr/share \
            --with-tokendb=sqlite3 --with-userdb=sqlite3 \
            --with-clapf-user=avclient --enable-spamdrop-helper \
            --enable-whitelist --enable-blacklist --enable-language-detection

make all
su -c 'make install'

Olyan megoldásban szeretném használni, hogy a felhasználóknak saját token
adatbázisuk van.

A clapf.conf állományban ezt állitottam be az "sqlite3 stuff" résznél:
---
;sqlite3=/var/lib/clapf/data/tokens.sdb

sqlite3_pragma=PRAGMA synchronous = OFF
---

Így a felhasználónkénti adatbázist kellene megnyitnia a spamdrop programnak.
Sajnos a program hamarabb nyitja meg az adatbázist a konfigurációs fájl
alapján, mint ahogyan a felhasználói névből előállítaná az adatbázis
elérésének útvonalát. Ez az egyik hiba amit felfedeztem.

A másik hiba, hogy a levél fejlécében kiszűrné a cfg->clapf_header_field változó
értékét tartalmazó sort.

if(strncmp(buf, cfg->clapf_header_field, strlen(cfg->clapf_header_field)))

Sajnos nem csak a levél fejlécében szűri ki ezt az értéket, hanem a teljes
levélben.

Ezeket kijavítva már működik a spamdrop program, igaz, még vannak problémák.
Az install (make install) a --localstatedir=/var -ban megadott helyre hozza
létre a könyvtár szerkezetét, ahol tárolja majd a clapf.sdb fájlt (proba
felhasználóval -> /var/lib/clapf/data/p/proba/clapf.sdb), de a
--enable-spamdrop-helper szkript nem tudja létrehozni a könyvtárakat, mert
nincs joga. Szintén nincs joga a /var/lib/clapf/queue és a
/var/lib/clapf/tmp könyvtárakhoz sem.

Javítottam a spamdrop_helper programon is, hogy a megfelelő jogokkal hozza
létre a könyvtárakat.

A spamdrop programot a felhasználó nevében futó MAILDROP program hívja
xfilter segítségével.

Ha a könyvtáraknak adtam 777-es jogot, akkor már jól létrehozta a
felhasználóhoz tartozó könyvtárakat.

Itt módosítottam a Makefile.in-t, hogy milyen jogokkal hozza létre az alap
könyvtárakat.

A spamdrop működik, detektál és tanítani is lehet. Találtam viszont egy
levelet, ahol a spamdrop hibás fejlécet állít be.

Egy üres sor a program által betett információban:
-------
X-Clapf-spamicity: en
X-Clapf-spamicity: 4b274bf405fb1ec72c218c85d6575a

X-Clapf-spamicity: 1.0000
X-Clapf-spamicity: 4 ms
X-Clapf-spamicity: message is absolutely spam
X-Clapf-spamicity: Yes
-------

Megkerestem a programban, mi okozhatja ezt, és meg is megtaláltam:

snprintf(buf, MAXBUFSIZE-1, "%s%s\r\n%s%s%.4f\r\n%s%ld ms\r\n",
   cfg.clapf_header_field, sdata.ttmpfile, trainbuf, cfg.clapf_header_field, 
spaminess, cfg.clapf_header_field, tvdiff(tv_stop, tv_start)/1000);

Ennél a kiírásnál a trainbuf értéke egy '<CR><LF>', ami szerintem nem kell.
Így a kiírás előtt van egy feltételes értékadás a trainbuf-nak

if(!(strlen(trainbuf) > 3)) trainbuf[0] = 0;
Máshol is így vizsgáltad a trainbuf értékét.

A cfg.clapf_header_field-es fejléc kiírásnál nem kell <CR><LF> csak <LF>, így
ezeket is javítottam (nem DOS-os formátumú a csővezetéken keresztül kapott
levél).

Letöltöttem az aktuális programokat a weboldaladról és megnéztem azokban, hátha
ezeket kijavítottad, de sajnos nem lett javítva.

Download
Latest stable: 0.4.2, 2009.09.28 10:18:00 CET, MD5: 
58a8755caf14dea6f0d501fdcb46cc2b
Latest development: 0.4.3-rc1, 2009.11.04 11:03:00 CET, MD5: 
bc7a577e1c0b475f8435aec8b59d36ff
Nightly build, 2009.12.11, MD5: 5465e15d048664c49c6043b70299fb1f

Egy összefoglaló hibajavítást küldenék (vg1.diff). De készítettem egy másik
javítást is (vg2.diff), de az nem a hibákra vonatkozna, hanem egy kis saját
módosítás lenne a spamdrop programhoz. Megköszönném, ha ezek is részévé
válnának a programnak.

Ezekről írnék egy keveset.

- kikapcsolható lenne a syslog-ba való írás a konfigurációs fájl alapján.

- lehetne egy rövidített fejléc, ami csak a Yes/No-t és a hozzátartozó
  spamlevel értékét tartalmazná.

-- 
    [Varadi Gabor]
diff -ruN clapf-0.4.2.eta/configure.in clapf-0.4.2.vg1/configure.in
--- clapf-0.4.2.eta/configure.in	2009-09-21 10:24:10.000000000 +0200
+++ clapf-0.4.2.vg1/configure.in	2009-12-15 11:13:58.000000000 +0100
@@ -490,15 +490,26 @@
     if test "$prefix" = "NONE"
     then
         cfg_dir="$ac_default_prefix/etc"
-        my_prefix=$ac_default_prefix
     else
         cfg_dir="$prefix/etc"
-        my_prefix=$prefix
     fi
 else
     cfg_dir="$sysconfdir"
 fi
 
+my_prefix=`echo $libexecdir | grep prefix`
+
+if test -n "$my_prefix"; then
+    if test "$prefix" = "NONE"
+    then
+        my_prefix=$ac_default_prefix/usr/lib
+    else
+        my_prefix=$prefix/usr/lib
+    fi
+else
+    my_prefix="$libexecdir"
+fi
+
 CFGDIR=$cfg_dir
 AC_SUBST(CFGDIR)
 AC_DEFINE_UNQUOTED(CONFDIR,"$cfg_dir",[where to look for the config file])
@@ -533,8 +544,8 @@
     fi
 
 
-AC_DEFINE_UNQUOTED(SPAMDROP_HELPER_PROGRAM,"$my_prefix/libexec/clapf/spamdrop_helper",[where to look for the spamdrop helper file])
-AC_DEFINE_UNQUOTED(VIRUS_TEMPLATE, "$my_prefix/share/clapf/template.virus", [where the virus template is])
+AC_DEFINE_UNQUOTED(SPAMDROP_HELPER_PROGRAM,"$my_prefix/clapf/spamdrop_helper",[where to look for the spamdrop helper file])
+AC_DEFINE_UNQUOTED(VIRUS_TEMPLATE, "$my_prefix/clapf/template.virus", [where the virus template is])
 
 
 
diff -ruN clapf-0.4.2.eta/Makefile.in clapf-0.4.2.vg1/Makefile.in
--- clapf-0.4.2.eta/Makefile.in	2009-09-21 10:24:10.000000000 +0200
+++ clapf-0.4.2.vg1/Makefile.in	2009-12-15 11:13:58.000000000 +0100
@@ -40,10 +40,10 @@
 
 
 clapf.conf:
-	sed -e 's%pidfile=.*%pidfile=$(localstatedir)/lib/clapf/clapf.pid%' \
-	-e 's%sqlite3=.*%sqlite3=$(localstatedir)/lib/clapf/data/tokens.sdb%' \
-	-e 's%workdir=.*%workdir=$(localstatedir)/lib/clapf/tmp%' \
-	-e 's%mydbfile=.*%mydbfile=$(localstatedir)/lib/clapf/tokens.mydb%' < $(srcdir)/example.conf >$@
+	sed -e 's%pidfile=.*%pidfile=$(localstatedir)/lib/clapf/clapf.pid%g' \
+	-e 's%sqlite3=.*%sqlite3=$(localstatedir)/lib/clapf/data/tokens.sdb%g' \
+	-e 's%workdir=.*%workdir=$(localstatedir)/lib/clapf/tmp%g' \
+	-e 's%mydbfile=.*%mydbfile=$(localstatedir)/lib/clapf/tokens.mydb%g' < $(srcdir)/example.conf >$@
 
 clapf: % : %.o
 	$(CC) $(CFLAGS) $(INCDIR) $(DEFS) -o $@ $^ -lclapf $(LIBS) $(LDAP_LIBS) $(LIBDIR) @LDFLAGS@ @libclamav_extra_libs@
@@ -101,9 +101,9 @@
 	$(INSTALL) -m 0644 $(srcdir)/db-sqlite3.sql $(DESTDIR)$(datarootdir)/clapf/db.sql
 	$(INSTALL) -d $(DESTDIR)$(libexecdir)/clapf
 	$(INSTALL) -m 0755 $(srcdir)/util/purge-sqlite3.sh $(DESTDIR)$(libexecdir)/clapf
-	$(INSTALL) -d $(DESTDIR)$(localstatedir)/lib/clapf/data
+	$(INSTALL) -d -m 0777 $(DESTDIR)$(localstatedir)/lib/clapf/data
 	if [ ! -f "$(DESTDIR)/$(localstatedir)/lib/clapf/data/tokens.sdb" ]; then sqlite3 -batch $(DESTDIR)/$(localstatedir)/lib/clapf/data/tokens.sdb <$(srcdir)/db-sqlite3.sql; \
-		chown -R $(CLAPF_USER):$(CLAPF_GROUP) $(DESTDIR)$(localstatedir)/lib/clapf/data/tokens.sdb; fi
+		chown $(CLAPF_USER):$(CLAPF_GROUP) $(DESTDIR)$(localstatedir)/lib/clapf/data/tokens.sdb; fi
 
 install-clapf: clapf
 	$(INSTALL) -d $(DESTDIR)$(includedir)
@@ -146,20 +146,21 @@
 	$(INSTALL) -m 0755 $(srcdir)/stat/clapf-rrd-update.sh $(DESTDIR)$(libexecdir)/clapf
 	if [ -f "$(srcdir)/spamstat" ]; then $(INSTALL) -m 0755 $(srcdir)/spamstat $(DESTDIR)$(libexecdir)/clapf; fi
 
-	$(INSTALL) -d $(DESTDIR)$(localstatedir)/lib/clapf/data
-	$(INSTALL) -d -m 755 $(DESTDIR)$(localstatedir)/lib/clapf/queue
-	$(INSTALL) -d -m 711 $(DESTDIR)$(localstatedir)/lib/clapf/tmp
-	$(INSTALL) -d $(DESTDIR)$(localstatedir)/lib/clapf/stat
-	$(INSTALL) -d $(DESTDIR)$(localstatedir)/lib/clapf/hold
+	$(INSTALL) -d -m 0777 $(DESTDIR)$(localstatedir)/lib/clapf/data
+	$(INSTALL) -d -m 0777 $(DESTDIR)$(localstatedir)/lib/clapf/queue
+	$(INSTALL) -d -m 0777 $(DESTDIR)$(localstatedir)/lib/clapf/tmp
+	$(INSTALL) -d -m 0755 $(DESTDIR)$(localstatedir)/lib/clapf/stat
+	$(INSTALL) -d -m 0755 $(DESTDIR)$(localstatedir)/lib/clapf/hold
 
 	$(INSTALL) -d $(DESTDIR)$(datarootdir)/clapf
 	$(INSTALL) -m 0644 $(srcdir)/templates/template.virus $(DESTDIR)$(datarootdir)/clapf
 	$(INSTALL) -m 0644 $(srcdir)/history/mail.sql $(DESTDIR)$(datarootdir)/clapf
 
-	chown -R $(CLAPF_USER):$(CLAPF_GROUP) $(DESTDIR)$(localstatedir)/lib/clapf
-	cat $(srcdir)/util/check_clapf.sh.in | sed -e "s%YOUR_PATH%$(sbindir)%" -e "s%YOUR_QUEUE%$(localstatedir)/lib/clapf/queue%" -e "s%USER%$(CLAPF_USER)%g" > $(srcdir)/util/check_clapf.sh
+	chown $(CLAPF_USER):$(CLAPF_GROUP) $(DESTDIR)$(localstatedir)/lib/clapf
+	chown $(CLAPF_USER):$(CLAPF_GROUP) $(DESTDIR)$(localstatedir)/lib/clapf/{data,hold,queue,stat,tmp}
+	cat $(srcdir)/util/check_clapf.sh.in | sed -e "s%YOUR_PATH%$(sbindir)%g" -e "s%YOUR_QUEUE%$(localstatedir)/lib/clapf/queue%g" -e "s%USER%$(CLAPF_USER)%g" > $(srcdir)/util/check_clapf.sh
 	$(INSTALL) -m 0755 util/check_clapf.sh $(DESTDIR)$(libexecdir)/clapf
-	cat $(srcdir)/util/spamdrop_helper.in | sed -e "s%YOUR_STATE_DIR%$(localstatedir)%" > $(srcdir)/util/spamdrop_helper
+	cat $(srcdir)/util/spamdrop_helper.in | sed -e "s%YOUR_STATE_DIR%$(localstatedir)%g" > $(srcdir)/util/spamdrop_helper
 	$(INSTALL) -m 0755 util/spamdrop_helper $(DESTDIR)$(libexecdir)/clapf
 	$(INSTALL) -m 0755 clapf $(DESTDIR)$(sbindir)
 	$(INSTALL) -d $(DESTDIR)$(sysconfdir)
@@ -187,10 +188,10 @@
 	$(INSTALL) -m 0755 $(srcdir)/perl/shrink.pl $(DESTDIR)$(libexecdir)/clapf
 	$(INSTALL) -m 0755 $(srcdir)/perl/uribl.pl $(DESTDIR)$(libexecdir)/clapf
 	$(INSTALL) -m 0755 $(srcdir)/stat/process_syslog.pl $(DESTDIR)$(libexecdir)/clapf
-	cat $(srcdir)/util/db_init_mydb.sh.in | sed -e "s%YOUR_LIBEXECDIR%$(libexecdir)/clapf%" -e "s%YOUR_BINDIR%$(bindir)%" -e "s%YOUR_SHAREDIR%$(datarootdir)/clapf%" > $(srcdir)/util/db_init_mydb.sh
-	cat $(srcdir)/util/db_init_mysql.sh.in | sed -e "s%YOUR_LIBEXECDIR%$(libexecdir)/clapf%" -e "s%YOUR_BINDIR%$(bindir)%" -e "s%YOUR_SHAREDIR%$(datarootdir)/clapf%" > $(srcdir)/util/db_init_mysql.sh
-	cat $(srcdir)/util/db_init_sqlite3.sh.in | sed -e "s%YOUR_LIBEXECDIR%$(libexecdir)/clapf%" -e "s%YOUR_BINDIR%$(bindir)%" -e "s%YOUR_SHAREDIR%$(datarootdir)/clapf%" > $(srcdir)/util/db_init_sqlite3.sh
-	if test `echo $(DEFS) | grep -c USERS_IN_LDAP ` -eq 1 ; then cat $(srcdir)/util/clapf_admin-ldap.sh.in > $(srcdir)/util/clapf_admin.sh; else cat $(srcdir)/util/clapf_admin-sql.sh.in | sed -e "s%MYSQLBINPROG%`which mysql`%" -e "s%YOUR_DATAROOTDIR%$(datarootdir)/clapf%" > $(srcdir)/util/clapf_admin.sh; fi
+	cat $(srcdir)/util/db_init_mydb.sh.in | sed -e "s%YOUR_LIBEXECDIR%$(libexecdir)/clapf%g" -e "s%YOUR_BINDIR%$(bindir)%g" -e "s%YOUR_SHAREDIR%$(datarootdir)/clapf%g" > $(srcdir)/util/db_init_mydb.sh
+	cat $(srcdir)/util/db_init_mysql.sh.in | sed -e "s%YOUR_LIBEXECDIR%$(libexecdir)/clapf%g" -e "s%YOUR_BINDIR%$(bindir)%g" -e "s%YOUR_SHAREDIR%$(datarootdir)/clapf%g" > $(srcdir)/util/db_init_mysql.sh
+	cat $(srcdir)/util/db_init_sqlite3.sh.in | sed -e "s%YOUR_LIBEXECDIR%$(libexecdir)/clapf%g" -e "s%YOUR_BINDIR%$(bindir)%g" -e "s%YOUR_SHAREDIR%$(datarootdir)/clapf%g" > $(srcdir)/util/db_init_sqlite3.sh
+	if test `echo $(DEFS) | grep -c USERS_IN_LDAP ` -eq 1 ; then cat $(srcdir)/util/clapf_admin-ldap.sh.in > $(srcdir)/util/clapf_admin.sh; else cat $(srcdir)/util/clapf_admin-sql.sh.in | sed -e "s%MYSQLBINPROG%`which mysql`%g" -e "s%YOUR_DATAROOTDIR%$(datarootdir)/clapf%g" > $(srcdir)/util/clapf_admin.sh; fi
 	$(INSTALL) -m 0755 $(srcdir)/util/db_init_mydb.sh $(DESTDIR)$(libexecdir)/clapf
 	$(INSTALL) -m 0755 $(srcdir)/util/db_init_mysql.sh $(DESTDIR)$(libexecdir)/clapf
 	$(INSTALL) -m 0755 $(srcdir)/util/db_init_sqlite3.sh $(DESTDIR)$(libexecdir)/clapf
diff -ruN clapf-0.4.2.eta/spamdrop.c clapf-0.4.2.vg1/spamdrop.c
--- clapf-0.4.2.eta/spamdrop.c	2009-09-21 10:24:10.000000000 +0200
+++ clapf-0.4.2.vg1/spamdrop.c	2009-12-15 11:13:58.000000000 +0100
@@ -114,8 +114,6 @@
       ofile = popen(buf, "w");
    }
 
-   if(clapf_info) fprintf(ofile, "%s", clapf_info);
-
 
    while(fgets(buf, MAXBUFSIZE-1, f)){
 
@@ -136,12 +134,19 @@
          /* if we did not find a Subject line, add one - if we have to */
 
          if(sent_subject_spam_prefix == 0 && put_subject_spam_prefix == 1 && spaminess >= cfg->spam_overall_limit && spaminess < 1.01)
-            fprintf(ofile, "Subject: %s\r\n", cfg->spam_subject_prefix);
+            fprintf(ofile, "Subject: %s\n", cfg->spam_subject_prefix);
+
+         if(clapf_info) fprintf(ofile, "%s", clapf_info);
 
       }
 
-      if(strncmp(buf, cfg->clapf_header_field, strlen(cfg->clapf_header_field)))
+      if(is_header == 1){
+         if(strncmp(buf, cfg->clapf_header_field, strlen(cfg->clapf_header_field)))
+            fprintf(ofile, "%s", buf);
+      }
+      else {
          fprintf(ofile, "%s", buf);
+      }
    }
 
    fclose(stdout);
@@ -385,18 +390,6 @@
    }
 
 
-   /* open database connection */
-
-   if(open_db(&sdata, &cfg) == 0){
-      rc = print_message_stdout(&sdata, NULL, spaminess, &cfg);
-      unlink(sdata.ttmpfile);
-      if(rc)
-         return EX_TEMPFAIL;
-      else
-         return 0;
-   }
-
-
    /* fix username and uid */
 
    if(recipient) get_user_from_email(&sdata, recipient, &cfg);
@@ -445,6 +438,17 @@
    }
 #endif
 
+   /* open database connection */
+
+   if(open_db(&sdata, &cfg) == 0){
+      rc = print_message_stdout(&sdata, NULL, spaminess, &cfg);
+      unlink(sdata.ttmpfile);
+      if(rc)
+         return EX_TEMPFAIL;
+      else
+         return 0;
+   }
+
 
 
 
@@ -579,7 +583,7 @@
    #ifdef HAVE_WHITELIST
       if(is_sender_on_black_or_white_list(&sdata, from, SQL_WHITE_FIELD_NAME, SQL_WHITE_LIST, &cfg)){
          syslog(LOG_PRIORITY, "%s: sender (%s) found on whitelist", sdata.ttmpfile, from);
-         snprintf(whitelistbuf, SMALLBUFSIZE-1, "%sFound on whitelist\r\n", cfg.clapf_header_field);
+         snprintf(whitelistbuf, SMALLBUFSIZE-1, "%sFound on whitelist\n", cfg.clapf_header_field);
          strncat(clapf_info, whitelistbuf, MAXBUFSIZE-1);
          is_spam = 0;
          goto ENDE_SPAMDROP;
@@ -591,7 +595,7 @@
    #ifdef HAVE_BLACKLIST
       if(is_sender_on_black_or_white_list(&sdata, from, SQL_BLACK_FIELD_NAME, SQL_BLACK_LIST, &cfg) == 1){
          syslog(LOG_PRIORITY, "%s: sender (%s) found on blacklist", sdata.ttmpfile, from);
-         snprintf(whitelistbuf, SMALLBUFSIZE-1, "%sFound on blacklist\r\n", cfg.clapf_header_field);
+         snprintf(whitelistbuf, SMALLBUFSIZE-1, "%sFound on blacklist\n", cfg.clapf_header_field);
          is_spam = 1;
          unlink(sdata.ttmpfile);
          return 0;
@@ -622,7 +626,7 @@
 
       strncat(clapf_info, cfg.clapf_header_field, MAXBUFSIZE-1);
       strncat(clapf_info, lang, MAXBUFSIZE-1);
-      strncat(clapf_info, "\r\n", MAXBUFSIZE-1);
+      strncat(clapf_info, "\n", MAXBUFSIZE-1);
 
       if(cfg.debug == 1) printf("lang detected: %s\n", lang);
    #endif
@@ -636,7 +640,7 @@
          if(sum){
             spamsum_score = spamsum_match_db(cfg.sig_db, sum, 55);
             if(spamsum_score >= 50) spaminess = 0.9988;
-            snprintf(spamsum_buf, SMALLBUFSIZE-1, "%sspamsum=%d\r\n", cfg.clapf_header_field, spamsum_score);
+            snprintf(spamsum_buf, SMALLBUFSIZE-1, "%sspamsum=%d\n", cfg.clapf_header_field, spamsum_score);
             strncat(clapf_info, spamsum_buf, MAXBUFSIZE-1);
             free(sum);
          }
@@ -674,7 +678,7 @@
          else
             syslog(LOG_PRIORITY, "%s: TUM training a ham", sdata.ttmpfile);
 
-         snprintf(trainbuf, SMALLBUFSIZE-1, "%sTUM\r\n", cfg.clapf_header_field);
+         snprintf(trainbuf, SMALLBUFSIZE-1, "%sTUM\n", cfg.clapf_header_field);
 
          train_message(&sdata, &state, 1, is_spam, train_mode, &cfg);
       }
@@ -692,7 +696,7 @@
          rounds = MAX_ITERATIVE_TRAIN_LOOPS;
 
          syslog(LOG_PRIORITY, "%s: training on a blackhole message", sdata.ttmpfile);
-         snprintf(trainbuf, SMALLBUFSIZE-1, "%sTUM on blackhole\r\n", cfg.clapf_header_field);
+         snprintf(trainbuf, SMALLBUFSIZE-1, "%sTUM on blackhole\n", cfg.clapf_header_field);
 
          sdata.uid = 0;
          train_message(&sdata, &state, rounds, 1, T_TOE, &cfg);
@@ -741,7 +745,9 @@
 
    if(print_message == 1){
 
-      snprintf(buf, MAXBUFSIZE-1, "%s%s\r\n%s%s%.4f\r\n%s%ld ms\r\n",
+      if(!(strlen(trainbuf) > 3)) trainbuf[0] = 0;
+
+      snprintf(buf, MAXBUFSIZE-1, "%s%s\n%s%s%.4f\n%s%ld ms\n",
               cfg.clapf_header_field, sdata.ttmpfile, trainbuf, cfg.clapf_header_field, spaminess, cfg.clapf_header_field, tvdiff(tv_stop, tv_start)/1000);
 
       strncat(clapf_info, buf, MAXBUFSIZE-1);
@@ -749,12 +755,12 @@
       if(spaminess > 0.9999){
          strncat(clapf_info, cfg.clapf_header_field, MAXBUFSIZE-1);
          strncat(clapf_info, MSG_ABSOLUTELY_SPAM, MAXBUFSIZE-1);
-         strncat(clapf_info, "\r\n", MAXBUFSIZE-1);
+         strncat(clapf_info, "\n", MAXBUFSIZE-1);
       }
 
       if(spaminess >= cfg.spam_overall_limit && spaminess < 1.01){
          strncat(clapf_info, cfg.clapf_header_field, MAXBUFSIZE-1);
-         strncat(clapf_info, "Yes\r\n", MAXBUFSIZE-1);
+         strncat(clapf_info, "Yes\n", MAXBUFSIZE-1);
       }
 
    #ifdef MY_TEST
@@ -763,13 +769,14 @@
       memset(rblbuf, 0, SMALLBUFSIZE);
       reverse_ipv4_addr(state.ip);
       if(rbl_list_check("zen.spamhaus.org", state.ip, cfg.verbosity) == 1)
-         snprintf(rblbuf, SMALLBUFSIZE-1, "%sZEN=1\r\n", cfg.clapf_header_field);
+         snprintf(rblbuf, SMALLBUFSIZE-1, "%sZEN=1\n", cfg.clapf_header_field);
       else
-         snprintf(rblbuf, SMALLBUFSIZE-1, "%sZEN=0\r\n", cfg.clapf_header_field);
+         snprintf(rblbuf, SMALLBUFSIZE-1, "%sZEN=0\n", cfg.clapf_header_field);
 
       strncat(clapf_info, rblbuf, MAXBUFSIZE-1);
    #endif
 
+      }
       rc = print_message_stdout(&sdata, clapf_info, spaminess, &cfg);
       if(rc) return rc;
    }
diff -ruN clapf-0.4.2.eta/util/purge-sqlite3.sh clapf-0.4.2.vg1/util/purge-sqlite3.sh
--- clapf-0.4.2.eta/util/purge-sqlite3.sh	2009-09-21 10:24:10.000000000 +0200
+++ clapf-0.4.2.vg1/util/purge-sqlite3.sh	2009-12-15 11:14:39.000000000 +0100
@@ -22,7 +22,7 @@
 echo "DELETE FROM t_token WHERE timestamp < $_90_DAYS;" | $SQLITE3 $DB
 
 # purge aged entries from the t_minefield table
-echo "DELETE FROM t_minefield WHERE ts < (SELECT strftime('%s','now')-$MINEFIELD_TTL)" | $SQLITE3 $DB
+echo "DELETE FROM t_minefield WHERE ts < (SELECT strftime('%s','now')-$MINEFIELD_TTL);" | $SQLITE3 $DB
 
 # clean aged queue entries from the database 
 echo "DELETE FROM t_queue WHERE ts < $_7_DAYS;" | $SQLITE3 $DB
diff -ruN clapf-0.4.2.eta/util/spamdrop_helper.in clapf-0.4.2.vg1/util/spamdrop_helper.in
--- clapf-0.4.2.eta/util/spamdrop_helper.in	2009-09-21 10:24:10.000000000 +0200
+++ clapf-0.4.2.vg1/util/spamdrop_helper.in	2009-12-15 11:13:58.000000000 +0100
@@ -8,10 +8,17 @@
 ## database for the user, etc.
 ## You are encouraged to customise this script
 
-if [ "$YOURUSERNAME" = "" ]; then echo "please set the YOURUSERNAME environmnet variable"; exit 1; fi
-
-mkdir -p YOUR_STATE_DIR/lib/clapf/queue/${YOURUSERNAME:0:1}/$YOURUSERNAME
-mkdir -p YOUR_STATE_DIR/lib/clapf/data/${YOURUSERNAME:0:1}/$YOURUSERNAME
-
-#cp /usr/local/etc/defaults/clapf.sdb YOUR_STATE_DIR/lib/clapf/data/${YOURUSERNAME:0:1}/$YOURUSERNAME
+if [ -z "$YOURUSERNAME" ]; then
+  echo "please set the YOURUSERNAME environmnet variable"
+  exit 1
+fi
+mkdir -p  YOUR_STATE_DIR/lib/clapf/queue/${YOURUSERNAME:0:1}/$YOURUSERNAME 1>/dev/zero 2>&1
+chmod 777 YOUR_STATE_DIR/lib/clapf/queue/${YOURUSERNAME:0:1}/ 1>/dev/zero 2>&1
+chmod 700 YOUR_STATE_DIR/lib/clapf/queue/${YOURUSERNAME:0:1}/$YOURUSERNAME 1>/dev/zero 2>&1
+mkdir -p  YOUR_STATE_DIR/lib/clapf/data/${YOURUSERNAME:0:1}/$YOURUSERNAME 1>/dev/zero 2>&1
+chmod 777 YOUR_STATE_DIR/lib/clapf/data/${YOURUSERNAME:0:1}/ 1>/dev/zero 2>&1
+chmod 700 YOUR_STATE_DIR/lib/clapf/data/${YOURUSERNAME:0:1}/$YOURUSERNAME 1>/dev/zero 2>&1
 
+if [ ! -s YOUR_STATE_DIR/lib/clapf/data/${YOURUSERNAME:0:1}/$YOURUSERNAME/clapf.sdb ]; then
+  sqlite3 YOUR_STATE_DIR/lib/clapf/data/${YOURUSERNAME:0:1}/$YOURUSERNAME/clapf.sdb < /usr/share/clapf/db.sql 1>/dev/zero 2>&1 || true
+fi
diff -ruN clapf-0.4.2.vg1/cfg.c clapf-0.4.2.vg2/cfg.c
--- clapf-0.4.2.vg1/cfg.c	2009-09-21 10:24:10.000000000 +0200
+++ clapf-0.4.2.vg2/cfg.c	2009-12-15 11:28:31.000000000 +0100
@@ -132,6 +132,9 @@
 
    cfg.update_tokens = 1;
 
+   cfg.one_line_hdr = 0;
+   cfg.to_syslog = 1;
+
 
    /* parse the config file */
 
@@ -475,6 +478,11 @@
                   if(strcmp(key, "spamc_user") == 0)
                      memcpy(cfg.spamc_user, val, MAXVAL-1);
 
+                  if(strcmp(key, "one_line_hdr") == 0)
+                     cfg.one_line_hdr = atoi(val);
+                  if(strcmp(key, "to_syslog") == 0)
+                     cfg.to_syslog = atoi(val);
+
                }
 
             }
diff -ruN clapf-0.4.2.vg1/cfg.h clapf-0.4.2.vg2/cfg.h
--- clapf-0.4.2.vg1/cfg.h	2009-09-21 10:24:10.000000000 +0200
+++ clapf-0.4.2.vg2/cfg.h	2009-12-15 11:20:39.000000000 +0100
@@ -180,6 +180,12 @@
    int spamd_port;
    char spamc_user[MAXVAL];
 
+   // One Line Header
+   int one_line_hdr;
+
+   // Syslog on/off
+   int to_syslog;
+
 };
 
 struct __config read_config(char *configfile);
diff -ruN clapf-0.4.2.vg1/example.conf clapf-0.4.2.vg2/example.conf
--- clapf-0.4.2.vg1/example.conf	2009-09-21 10:24:10.000000000 +0200
+++ clapf-0.4.2.vg2/example.conf	2009-12-15 11:36:03.000000000 +0100
@@ -7,6 +7,16 @@
 ; 5: debug
 verbosity=1
 
+; message to syslog
+; 0: off
+; 1: on
+to_syslog=1
+
+; One header line
+; 0: all info in header lines
+; 1: small info in header
+one_line_hdr=0
+
 ; if you are using an extended latin character set, eg. hu_HU, than
 ; set this variable. It will help to reassemble words.
 ;locale=
diff -ruN clapf-0.4.2.vg1/spamdrop.c clapf-0.4.2.vg2/spamdrop.c
--- clapf-0.4.2.vg1/spamdrop.c	2009-12-15 11:13:58.000000000 +0100
+++ clapf-0.4.2.vg2/spamdrop.c	2009-12-15 11:32:05.000000000 +0100
@@ -42,7 +42,8 @@
    mysql_init(&(sdata->mysql));
    mysql_options(&(sdata->mysql), MYSQL_OPT_CONNECT_TIMEOUT, (const char*)&cfg->mysql_connect_timeout);
    if(mysql_real_connect(&(sdata->mysql), cfg->mysqlhost, cfg->mysqluser, cfg->mysqlpwd, cfg->mysqldb, cfg->mysqlport, cfg->mysqlsocket, 0) == 0){
-      syslog(LOG_PRIORITY, "%s: %s", sdata->ttmpfile, ERR_MYSQL_CONNECT);
+      if(cfg->to_syslog == 1)
+         syslog(LOG_PRIORITY, "%s: %s", sdata->ttmpfile, ERR_MYSQL_CONNECT);
       return 0;
    }
 #endif
@@ -52,12 +53,13 @@
 
    rc = sqlite3_open(cfg->sqlite3, &(sdata->db));
    if(rc){
-      syslog(LOG_PRIORITY, "%s: %s: %s", sdata->ttmpfile, ERR_SQLITE3_OPEN, cfg->sqlite3);
+      if(cfg->to_syslog == 1)
+         syslog(LOG_PRIORITY, "%s: %s: %s", sdata->ttmpfile, ERR_SQLITE3_OPEN, cfg->sqlite3);
       return 0;
    }
    else {
       rc = sqlite3_exec(sdata->db, cfg->sqlite3_pragma, 0, 0, NULL);
-      if(rc != SQLITE_OK) syslog(LOG_PRIORITY, "%s: could not set pragma", sdata->ttmpfile);
+      if(rc != SQLITE_OK && cfg->to_syslog == 1) syslog(LOG_PRIORITY, "%s: could not set pragma", sdata->ttmpfile);
    }
 #endif
 
@@ -102,7 +104,8 @@
 
    f = fopen(sdata->ttmpfile, "r");
    if(!f){
-      syslog(LOG_PRIORITY, "cannot read: %s", sdata->ttmpfile);
+      if(cfg->to_syslog == 1)
+         syslog(LOG_PRIORITY, "cannot read: %s", sdata->ttmpfile);
       return EX_TEMPFAIL;
    }
 
@@ -310,7 +313,8 @@
    fd = open(sdata.ttmpfile, O_CREAT|O_EXCL|O_RDWR|O_TRUNC, S_IRUSR|S_IWUSR);
    if(fd == -1){
       close(fd);
-      syslog(LOG_PRIORITY, "cannot open: %s", sdata.ttmpfile);
+      if(cfg.to_syslog == 1)
+         syslog(LOG_PRIORITY, "cannot open: %s", sdata.ttmpfile);
       return EX_TEMPFAIL;
    }
 
@@ -323,7 +327,8 @@
    /* make sure we had a successful read */
 
    if(fsync(fd)){
-      syslog(LOG_PRIORITY, "failed writing data: %s", sdata.ttmpfile);
+      if(cfg.to_syslog == 1)
+         syslog(LOG_PRIORITY, "failed writing data: %s", sdata.ttmpfile);
       return EX_TEMPFAIL;
    }
 
@@ -338,7 +343,8 @@
 #ifdef HAVE_ANTIVIRUS
 #ifndef HAVE_LIBCLAMAV
    if(do_av_check(&sdata, recipient, from, &virusinfo[0], &cfg) == AVIR_VIRUS){
-      syslog(LOG_PRIORITY, "%s: dropping infected message", sdata.ttmpfile);
+      if(cfg.to_syslog == 1)
+         syslog(LOG_PRIORITY, "%s: dropping infected message", sdata.ttmpfile);
       unlink(sdata.ttmpfile);
       return 0;
    }
@@ -384,7 +390,8 @@
    /* we must have a FROM address for training */
 
    if(training_request == 1 && from == NULL){
-      syslog(LOG_PRIORITY, "%s: no FROM address detected for training", sdata.ttmpfile);
+      if(cfg.to_syslog == 1)
+         syslog(LOG_PRIORITY, "%s: no FROM address detected for training", sdata.ttmpfile);
       unlink(sdata.ttmpfile);
       return 0;
    }
@@ -423,7 +430,8 @@
    snprintf(buf, MAXBUFSIZE-1, "%s/%s/%c/%s", cfg.chrootdir, USER_QUEUE_DIR, sdata.name[0], sdata.name);
 
    if(stat(buf, &st) != 0){
-      syslog(LOG_PRIORITY, "%s: running spamdrop helper script: %s, for user: %s", sdata.ttmpfile, SPAMDROP_HELPER_PROGRAM, sdata.name);
+      if(cfg.to_syslog == 1)
+         syslog(LOG_PRIORITY, "%s: running spamdrop helper script: %s, for user: %s", sdata.ttmpfile, SPAMDROP_HELPER_PROGRAM, sdata.name);
 
       snprintf(envvar, SMALLBUFSIZE-1, "YOURUSERNAME=%s", sdata.name);
       putenv(envvar);
@@ -432,7 +440,8 @@
       execl(SPAMDROP_HELPER_PROGRAM, envvar, (char*)0);
 
       if(stat(buf, &st) != 0){
-         syslog(LOG_PRIORITY, "%s: missing user directory: %s", buf, sdata.ttmpfile);
+         if(cfg.to_syslog == 1)
+            syslog(LOG_PRIORITY, "%s: missing user directory: %s", buf, sdata.ttmpfile);
          return EX_TEMPFAIL;
       }
    }
@@ -476,10 +485,12 @@
 
       if(!recipient) recipient = trainbuf;
 
-      syslog(LOG_PRIORITY, "%s: training request for %s (username: %s, uid: %ld), found id: %s", sdata.ttmpfile, recipient, sdata.name, sdata.uid, ID);
+      if(cfg.to_syslog == 1)
+         syslog(LOG_PRIORITY, "%s: training request for %s (username: %s, uid: %ld), found id: %s", sdata.ttmpfile, recipient, sdata.name, sdata.uid, ID);
 
       if(strlen(ID) < 5){
-         syslog(LOG_PRIORITY, "%s: not found a valid message id (%s)", sdata.ttmpfile, ID);
+         if(cfg.to_syslog == 1)
+            syslog(LOG_PRIORITY, "%s: not found a valid message id (%s)", sdata.ttmpfile, ID);
          return 0;
       }
 
@@ -518,7 +529,7 @@
 
    memset(trainbuf, 0, SMALLBUFSIZE);
 
-   if(cfg.verbosity >= _LOG_DEBUG && debug == 0) syslog(LOG_PRIORITY, "%s: username: %s, uid: %ld", sdata.ttmpfile, sdata.name, sdata.uid);
+   if(cfg.verbosity >= _LOG_DEBUG && debug == 0 && cfg.to_syslog == 1) syslog(LOG_PRIORITY, "%s: username: %s, uid: %ld", sdata.ttmpfile, sdata.name, sdata.uid);
 
 
    /* parse message */
@@ -573,7 +584,7 @@
       /* is this a bounce message? */
 
       if(from && (strcasecmp(from, "MAILER-DAEMON") == 0 || strcmp(from, "<>") == 0) && strlen(cfg.our_signo) > 3){
-         if(cfg.verbosity >= _LOG_DEBUG) syslog(LOG_PRIORITY, "%s: from: %s, we should really see our signo", sdata.ttmpfile, from);
+         if(cfg.verbosity >= _LOG_DEBUG && cfg.to_syslog == 1) syslog(LOG_PRIORITY, "%s: from: %s, we should really see our signo", sdata.ttmpfile, from);
          sdata.need_signo_check = 1;
       }
 
@@ -582,7 +593,8 @@
 
    #ifdef HAVE_WHITELIST
       if(is_sender_on_black_or_white_list(&sdata, from, SQL_WHITE_FIELD_NAME, SQL_WHITE_LIST, &cfg)){
-         syslog(LOG_PRIORITY, "%s: sender (%s) found on whitelist", sdata.ttmpfile, from);
+         if(cfg.to_syslog == 1)
+            syslog(LOG_PRIORITY, "%s: sender (%s) found on whitelist", sdata.ttmpfile, from);
          snprintf(whitelistbuf, SMALLBUFSIZE-1, "%sFound on whitelist\n", cfg.clapf_header_field);
          strncat(clapf_info, whitelistbuf, MAXBUFSIZE-1);
          is_spam = 0;
@@ -594,7 +606,8 @@
 
    #ifdef HAVE_BLACKLIST
       if(is_sender_on_black_or_white_list(&sdata, from, SQL_BLACK_FIELD_NAME, SQL_BLACK_LIST, &cfg) == 1){
-         syslog(LOG_PRIORITY, "%s: sender (%s) found on blacklist", sdata.ttmpfile, from);
+         if(cfg.to_syslog == 1)
+            syslog(LOG_PRIORITY, "%s: sender (%s) found on blacklist", sdata.ttmpfile, from);
          snprintf(whitelistbuf, SMALLBUFSIZE-1, "%sFound on blacklist\n", cfg.clapf_header_field);
          is_spam = 1;
          unlink(sdata.ttmpfile);
@@ -624,9 +637,11 @@
    #ifdef HAVE_LANG_DETECT
       lang = check_lang(state.token_hash);
 
-      strncat(clapf_info, cfg.clapf_header_field, MAXBUFSIZE-1);
-      strncat(clapf_info, lang, MAXBUFSIZE-1);
-      strncat(clapf_info, "\n", MAXBUFSIZE-1);
+      if(cfg.one_line_hdr == 0){
+         strncat(clapf_info, cfg.clapf_header_field, MAXBUFSIZE-1);
+         strncat(clapf_info, lang, MAXBUFSIZE-1);
+         strncat(clapf_info, "\n", MAXBUFSIZE-1);
+      }
 
       if(cfg.debug == 1) printf("lang detected: %s\n", lang);
    #endif
@@ -640,8 +655,10 @@
          if(sum){
             spamsum_score = spamsum_match_db(cfg.sig_db, sum, 55);
             if(spamsum_score >= 50) spaminess = 0.9988;
-            snprintf(spamsum_buf, SMALLBUFSIZE-1, "%sspamsum=%d\n", cfg.clapf_header_field, spamsum_score);
-            strncat(clapf_info, spamsum_buf, MAXBUFSIZE-1);
+            if(cfg.one_line_hdr == 0){
+               snprintf(spamsum_buf, SMALLBUFSIZE-1, "%sspamsum=%d\n", cfg.clapf_header_field, spamsum_score);
+               strncat(clapf_info, spamsum_buf, MAXBUFSIZE-1);
+            }
             free(sum);
          }
       }
@@ -649,10 +666,12 @@
 
       if(sdata.need_signo_check == 1){
          if(!state.found_our_signo){
-            syslog(LOG_PRIORITY, "%s: looks like a bounce, but our signo is missing", sdata.ttmpfile);
+            if(cfg.to_syslog == 1)
+               syslog(LOG_PRIORITY, "%s: looks like a bounce, but our signo is missing", sdata.ttmpfile);
          }
          else {
-            syslog(LOG_PRIORITY, "%s: found our signo, this should be a real bounce message", sdata.ttmpfile);
+            if(cfg.to_syslog == 1)
+               syslog(LOG_PRIORITY, "%s: found our signo, this should be a real bounce message", sdata.ttmpfile);
             spaminess = DEFAULT_SPAMICITY;
          }
       }
@@ -673,10 +692,12 @@
         )
       {
 
-         if(is_spam == 1)
-            syslog(LOG_PRIORITY, "%s: TUM training a spam", sdata.ttmpfile);
-         else
-            syslog(LOG_PRIORITY, "%s: TUM training a ham", sdata.ttmpfile);
+         if(cfg.to_syslog == 1){
+            if(is_spam == 1)
+               syslog(LOG_PRIORITY, "%s: TUM training a spam", sdata.ttmpfile);
+            else
+               syslog(LOG_PRIORITY, "%s: TUM training a ham", sdata.ttmpfile);
+         }
 
          snprintf(trainbuf, SMALLBUFSIZE-1, "%sTUM\n", cfg.clapf_header_field);
 
@@ -695,7 +716,8 @@
       if(spaminess < 0.99){
          rounds = MAX_ITERATIVE_TRAIN_LOOPS;
 
-         syslog(LOG_PRIORITY, "%s: training on a blackhole message", sdata.ttmpfile);
+         if(cfg.to_syslog == 1)
+            syslog(LOG_PRIORITY, "%s: training on a blackhole message", sdata.ttmpfile);
          snprintf(trainbuf, SMALLBUFSIZE-1, "%sTUM on blackhole\n", cfg.clapf_header_field);
 
          sdata.uid = 0;
@@ -736,7 +758,7 @@
 
 ENDE_SPAMDROP:
 
-   if(cfg.debug == 0) syslog(LOG_PRIORITY, "%s: %.4f %d in %ld [ms]", sdata.ttmpfile, spaminess, sdata.tot_len, tvdiff(tv_stop, tv_start)/1000);
+   if(cfg.debug == 0 && cfg.to_syslog == 1) syslog(LOG_PRIORITY, "%s: %.4f %d in %ld [ms]", sdata.ttmpfile, spaminess, sdata.tot_len, tvdiff(tv_stop, tv_start)/1000);
 
 
    /********************************/
@@ -747,36 +769,47 @@
 
       if(!(strlen(trainbuf) > 3)) trainbuf[0] = 0;
 
-      snprintf(buf, MAXBUFSIZE-1, "%s%s\n%s%s%.4f\n%s%ld ms\n",
-              cfg.clapf_header_field, sdata.ttmpfile, trainbuf, cfg.clapf_header_field, spaminess, cfg.clapf_header_field, tvdiff(tv_stop, tv_start)/1000);
-
-      strncat(clapf_info, buf, MAXBUFSIZE-1);
-
-      if(spaminess > 0.9999){
-         strncat(clapf_info, cfg.clapf_header_field, MAXBUFSIZE-1);
-         strncat(clapf_info, MSG_ABSOLUTELY_SPAM, MAXBUFSIZE-1);
-         strncat(clapf_info, "\n", MAXBUFSIZE-1);
-      }
+      if(cfg.one_line_hdr == 0){
+         snprintf(buf, MAXBUFSIZE-1, "%s%s\n%s%s%.4f\n%s%ld ms\n",
+                 cfg.clapf_header_field, sdata.ttmpfile, trainbuf, cfg.clapf_header_field, spaminess, cfg.clapf_header_field, tvdiff(tv_stop, tv_start)/1000);
+
+         strncat(clapf_info, buf, MAXBUFSIZE-1);
+
+         if(spaminess > 0.9999){
+            strncat(clapf_info, cfg.clapf_header_field, MAXBUFSIZE-1);
+            strncat(clapf_info, MSG_ABSOLUTELY_SPAM, MAXBUFSIZE-1);
+            strncat(clapf_info, "\n", MAXBUFSIZE-1);
+         }
 
-      if(spaminess >= cfg.spam_overall_limit && spaminess < 1.01){
-         strncat(clapf_info, cfg.clapf_header_field, MAXBUFSIZE-1);
-         strncat(clapf_info, "Yes\n", MAXBUFSIZE-1);
-      }
+         if(spaminess >= cfg.spam_overall_limit && spaminess < 1.01){
+            strncat(clapf_info, cfg.clapf_header_field, MAXBUFSIZE-1);
+            strncat(clapf_info, "Yes\n", MAXBUFSIZE-1);
+         }
 
-   #ifdef MY_TEST
-      char rblbuf[SMALLBUFSIZE];
+      #ifdef MY_TEST
+         char rblbuf[SMALLBUFSIZE];
 
-      memset(rblbuf, 0, SMALLBUFSIZE);
-      reverse_ipv4_addr(state.ip);
-      if(rbl_list_check("zen.spamhaus.org", state.ip, cfg.verbosity) == 1)
-         snprintf(rblbuf, SMALLBUFSIZE-1, "%sZEN=1\n", cfg.clapf_header_field);
-      else
-         snprintf(rblbuf, SMALLBUFSIZE-1, "%sZEN=0\n", cfg.clapf_header_field);
+         memset(rblbuf, 0, SMALLBUFSIZE);
+         reverse_ipv4_addr(state.ip);
+         if(rbl_list_check("zen.spamhaus.org", state.ip, cfg.verbosity) == 1)
+            snprintf(rblbuf, SMALLBUFSIZE-1, "%sZEN=1\n", cfg.clapf_header_field);
+         else
+            snprintf(rblbuf, SMALLBUFSIZE-1, "%sZEN=0\n", cfg.clapf_header_field);
 
-      strncat(clapf_info, rblbuf, MAXBUFSIZE-1);
-   #endif
+         strncat(clapf_info, rblbuf, MAXBUFSIZE-1);
+      #endif
 
       }
+      else {
+         if(spaminess >= cfg.spam_overall_limit && spaminess < 1.01){
+            snprintf(buf, MAXBUFSIZE-1, "%sYes, %.4f\n", cfg.clapf_header_field, spaminess);
+            strncat(clapf_info, buf, MAXBUFSIZE-1);
+         }
+         else {
+            snprintf(buf, MAXBUFSIZE-1, "%sNo, %.4f\n", cfg.clapf_header_field, spaminess);
+            strncat(clapf_info, buf, MAXBUFSIZE-1);
+         }
+      }
       rc = print_message_stdout(&sdata, clapf_info, spaminess, &cfg);
       if(rc) return rc;
    }
@@ -784,7 +817,7 @@
 
 
 
-   if(cfg.debug == 0){
+   if(cfg.debug == 0 && cfg.to_syslog == 1){
       snprintf(buf, MAXBUFSIZE-1, "%ld", sdata.uid);
 
       if(is_spam == 1)

Reply via email to