/*
- * $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;
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;
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");
// 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 */
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
#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$";
}