* More license declarations
[citadel.git] / citadel / modules / dspam / serv_dspam.c
index a48a52260d62536e8f14a68efb69ab770e5e32be..cd96e61352ba4b56e39aa18a2e56a1fbc3c412f3 100644 (file)
@@ -1,10 +1,24 @@
 /*
- * $Id: serv_dspam.c 5876 2007-12-10 23:22:03Z dothebart $
+ * $Id$
  *
  * This module glues libDSpam to the Citadel server in order to implement
  * DSPAM Spamchecking 
  *
- * This code is released under the terms of the GNU General Public License. 
+ * Copyright (c) 2009 by the citadel.org team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU 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 General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
 #include "sysdep.h"
 
 
 #ifdef HAVE_LIBDSPAM
+#define CONFIG_DEFAULT file_dpsam_conf
+#define LOGDIR file_dspam_log
 
-#undef HAVE_CONFIG_H
+
+//#define HAVE_CONFIG_H
 #include <dspam/libdspam.h>
-#define HAVE_CONFIG_H
+//#define HAVE_CONFIG_H
 
 typedef struct stringlist stringlist;
 
@@ -133,7 +150,7 @@ void dspam_do_msg(long msgnum, void *userdata)
        CC->redirect_buffer = malloc(SIZ);
        CC->redirect_len = 0;
        CC->redirect_alloc = SIZ;
-       CtdlOutputPreLoadedMsg(msg, MT_RFC822, HEADERS_ALL, 0, 1);
+       CtdlOutputPreLoadedMsg(msg, MT_RFC822, HEADERS_ALL, 0, 1, 0);
        msgtext = CC->redirect_buffer;
 // don't need? msglen = CC->redirect_len;
        CC->redirect_buffer = NULL;
@@ -144,26 +161,25 @@ void dspam_do_msg(long msgnum, void *userdata)
        if (dspam_process (CTX, msgtext) != 0)
        {
                free(msgtext);
-               lprintf(CTDL_CRIT, "ERROR: dspam_process failed");
+               CtdlLogPrintf(CTDL_CRIT, "ERROR: dspam_process failed");
                return;
        }
        if (CTX->signature == NULL)
        {
-               lprintf(CTDL_CRIT,"No signature provided\n");
+               CtdlLogPrintf(CTDL_CRIT,"No signature provided\n");
        }
        else
        {
 /* Copy to a safe place */
 
-               SIG.data = malloc (CTX->signature->length);
-               if (SIG.data != NULL)
-                       memcpy (SIG.data, CTX->signature->data, CTX->signature->length);
+               msg->cm_fields['G'] = malloc (CTX->signature->length * 2);
+               CtdlEncodeBase64(msg->cm_fields['G'], CTX->signature->data, CTX->signature->length, 0);
        }
        free(msgtext);
 
        SIG.length = CTX->signature->length;
        /* Print processing results */
-       lprintf (CTDL_DEBUG, "Probability: %2.4f Confidence: %2.4f, Result: %s\n",
+       CtdlLogPrintf (CTDL_DEBUG, "Probability: %2.4f Confidence: %2.4f, Result: %s\n",
                CTX->probability,
                CTX->confidence,
                (CTX->result == DSR_ISSPAM) ? "Spam" : "Innocent");
@@ -184,22 +200,25 @@ int serv_dspam_room(struct ctdlroom *room)
 // dspam_init (cc->username, NULL, ctdl_dspam_home, DSM_PROCESS,
        //                  DSF_SIGNATURE | DSF_NOISE);
        /// todo: if roomname = spam / ham -> learn!
-       if (room->QRflags & QR_PRIVATE) /* Are we sending to a private mailbox? */
+       if ((room->QRflags & QR_PRIVATE) &&/* Are we sending to a private mailbox? */
+           (strstr(room->QRname, ".Mail")!=NULL))
+
        {
                char User[64];
                // maybe we should better get our realname here?
                snprintf(User, 64, "%ld", room->QRroomaide);
-
+               extract_token(User, room->QRname, 0, '.', sizeof(User));
                CTX = dspam_init(User, 
                                 NULL,
                                 ctdl_dspam_dir, 
                                 DSM_PROCESS, 
                                 DSF_SIGNATURE | DSF_NOISE);
        }
+       else return 0;//// 
        /// else -> todo: global user for public rooms etc.
        if (CTX == NULL)
        {
-               lprintf(CTDL_CRIT, "ERROR: dspam_init failed!\n");
+               CtdlLogPrintf(CTDL_CRIT, "ERROR: dspam_init failed!\n");
                return ERROR + INTERNAL_ERROR;
        }
        /* Use graham and robinson algorithms, graham's p-values */
@@ -223,7 +242,7 @@ void serv_dspam_shutdown (void)
 
 CTDL_MODULE_INIT(dspam)
 {
-       return "$Id: serv_dspam.c 5876 2007-12-10 23:22:03Z dothebart $" "disabled.";
+       return "$Id$" "disabled.";
        if (!threading)
        {
 #ifdef HAVE_LIBDSPAM
@@ -238,12 +257,12 @@ CTDL_MODULE_INIT(dspam)
 
 #else  /* HAVE_LIBDSPAM */
 
-               lprintf(CTDL_INFO, "This server is missing libdspam Spam filtering will be disabled.\n");
+               CtdlLogPrintf(CTDL_INFO, "This server is missing libdspam Spam filtering will be disabled.\n");
 
 #endif /* HAVE_LIBDSPAM */
        }
        
         /* return our Subversion id for the Log */
-       return "$Id: serv_dspam.c 5876 2007-12-10 23:22:03Z dothebart $";
+       return "$Id$";
 }