Initial version of new room sharing poller. I don't really like this because it...
[citadel.git] / citadel / modules / dspam / serv_dspam.c
diff --git a/citadel/modules/dspam/serv_dspam.c b/citadel/modules/dspam/serv_dspam.c
deleted file mode 100644 (file)
index 7454634..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * This module glues libDSpam to the Citadel server in order to implement
- * DSPAM Spamchecking 
- *
- * Copyright (c) 2012 by the citadel.org team
- *
- *  This program is open source software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License version 3.
- *  
- *  
- *
- *  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.
- *
- *  
- *  
- *  
- */
-
-#include "sysdep.h"
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <pwd.h>
-#include <errno.h>
-#include <sys/types.h>
-
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-
-#include <sys/wait.h>
-#include <string.h>
-#include <limits.h>
-#include <libcitadel.h>
-#include "citadel.h"
-#include "server.h"
-#include "citserver.h"
-#include "support.h"
-#include "config.h"
-#include "database.h"
-#include "msgbase.h"
-#include "internet_addressing.h"
-
-
-#include "ctdl_module.h"
-
-
-#ifdef HAVE_LIBDSPAM
-#define CONFIG_DEFAULT file_dpsam_conf
-#define LOGDIR file_dspam_log
-
-
-//#define HAVE_CONFIG_H
-#include <dspam/libdspam.h>
-//#define HAVE_CONFIG_H
-
-typedef struct stringlist stringlist;
-
-struct stringlist {
-       char *Str;
-       long len;
-       stringlist *Next;
-};
-       
-
-/*
- * Citadel protocol to manage sieve scripts.
- * This is basically a simplified (read: doesn't resemble IMAP) version
- * of the 'managesieve' protocol.
- */
-void cmd_tspam(char *argbuf) {
-       char buf[SIZ];
-       long len;
-       long count;
-       stringlist *Messages; 
-       stringlist *NextMsg; 
-
-       Messages = NULL;
-       NextMsg = NULL;
-       count = 0;
-       if (CtdlAccessCheck(ac_room_aide)) return;
-       if (atoi(argbuf) == 0) {
-               cprintf("%d Ok.\n", CIT_OK);
-               return;
-       }
-       cprintf("%d Send info...\n", SEND_LISTING);
-
-       do {
-               len = client_getln(buf, sizeof buf);
-               if (strcmp(buf, "000")) {
-                       if (Messages == NULL) {
-                               Messages = malloc (sizeof (stringlist));
-                               NextMsg = Messages;
-                       }
-                       else {
-                               Messages->Next = malloc (sizeof (stringlist));
-                               NextMsg = NextMsg->Next;
-                       }
-                       NextMsg->Next = NULL;
-                       NextMsg->Str = malloc (len+1);
-                       NextMsg->len = len;
-                       memcpy (NextMsg->Str, buf, len + 1);/// maybe split spam /ham per line?
-                       count++;
-               }
-       } while (strcmp(buf, "000"));
-/// is there a way to filter foreachmessage by a list?
-       /* tag mails as spam or Ham */
-       /* probably do: dspam_init(ctdl_dspam_dir); dspam_process dspam_addattribute; dspam_destroy*/
-       // extract DSS_ERROR or DSS_CORPUS from the commandline. error->ham; corpus -> spam?
-       /// todo: send answer listing...
-}
-
-
-
-void ctdl_dspam_init(void) {
-
-///    libdspam_init("bdb");/* <which database backend do we prefer? */
-
-}
-
-void dspam_do_msg(long msgnum, void *userdata) 
-{
-       char *msgtext;
-       DSPAM_CTX *CTX;                 /* DSPAM Context */
-       struct CtdlMessage *msg;
-       struct _ds_spam_signature SIG;        /* signature */
-
-       CTX = *(DSPAM_CTX**) userdata;
-       msg = CtdlFetchMessage(msgnum, 0);
-       if (msg == NULL) return;
-
-
-       /* Message */
-       CC->redirect_buffer = malloc(SIZ);
-       CC->redirect_len = 0;
-       CC->redirect_alloc = SIZ;
-       CtdlOutputPreLoadedMsg(msg, MT_RFC822, HEADERS_ALL, 0, 1, 0);
-       msgtext = CC->redirect_buffer;
-// don't need? msglen = CC->redirect_len;
-       CC->redirect_buffer = NULL;
-       CC->redirect_len = 0;
-       CC->redirect_alloc = 0;
-
-       /* Call DSPAM's processor with the message text */
-       if (dspam_process (CTX, msgtext) != 0)
-       {
-               free(msgtext);
-               syslog(LOG_CRIT, "ERROR: dspam_process failed");
-               return;
-       }
-       if (CTX->signature == NULL)
-       {
-               syslog(LOG_CRIT,"No signature provided\n");
-       }
-       else
-       {
-/* Copy to a safe place */
-               // TODO: len -> cm_fields?
-               msg->cm_fields[eErrorMsg] = malloc (CTX->signature->length * 2);
-               size_t len = CtdlEncodeBase64(msg->cm_fields[eErrorMsg], CTX->signature->data, CTX->signature->length, 0);
-
-               if (msg->cm_fields[eErrorMsg][len - 1] == '\n') {
-                       msg->cm_fields[eErrorMsg][len - 1] = '\0';
-               }
-       }
-       free(msgtext);
-
-       SIG.length = CTX->signature->length;
-       /* Print processing results */
-       syslog(LOG_DEBUG, "Probability: %2.4f Confidence: %2.4f, Result: %s\n",
-               CTX->probability,
-               CTX->confidence,
-               (CTX->result == DSR_ISSPAM) ? "Spam" : "Innocent");
-
-       //// todo: put signature into the citadel message
-       //// todo: save message; destroy message.
-}
-
-int serv_dspam_room(struct ctdlroom *room)
-{
-       DSPAM_CTX *CTX;                 /* DSPAM Context */
-
-       /* scan for spam; do */
-       /* probably do: dspam_init; dspam_process dspam_addattribute; dspam_destroy*/
-//DSS_NONE
-//#define      DSR_ISSPAM              0x01
-//#define DSR_ISINNOCENT               0x02
-// 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? */
-           (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)
-       {
-               syslog(LOG_CRIT, "ERROR: dspam_init failed!\n");
-               return ERROR + INTERNAL_ERROR;
-       }
-       /* Use graham and robinson algorithms, graham's p-values */
-       CTX->algorithms = DSA_GRAHAM | DSA_BURTON | DSP_GRAHAM;
-
-       /* Use CHAIN tokenizer */
-       CTX->tokenizer = DSZ_CHAIN;
-
-       CtdlForEachMessage(MSGS_GT, 1, NULL, NULL, NULL,
-                          dspam_do_msg,
-                          (void *) &CTX);
-
-       return 0;
-}
-
-void serv_dspam_shutdown (void)
-{
-       libdspam_shutdown ();
-}
-#endif /* HAVE_LIBDSPAM */
-
-CTDL_MODULE_INIT(dspam)
-{
-       return "disabled.";
-       if (!threading)
-       {
-#ifdef HAVE_LIBDSPAM
-
-               ctdl_dspam_init();
-               CtdlRegisterCleanupHook(serv_dspam_shutdown);
-               CtdlRegisterProtoHook(cmd_tspam, "SPAM", "Tag Message as Spam/Ham to learn DSPAM");
-
-               CtdlRegisterRoomHook(serv_dspam_room);
-
-               ///CtdlRegisterSessionHook(perform_dspam_processing, EVT_HOUSE);
-
-#else  /* HAVE_LIBDSPAM */
-
-               syslog(LOG_INFO, "This server is missing libdspam Spam filtering will be disabled.\n");
-
-#endif /* HAVE_LIBDSPAM */
-       }
-       
-        /* return our module name for the log */
-       return "dspam";
-}
-