+/**************************************************************************
+** (c) Copyright 2007, Andromeda Technology & Automation
+** This is free software; you can redistribute it and/or modify it under the
+** terms of the GNU General Public License, see the file COPYING.
+***************************************************************************
+** MODULE INFORMATION *
+***********************
+** FILE NAME : spamdetect.cpp
+** SYSTEM NAME : Gnucomo - Gnu Computer Monitoring
+** VERSION NUMBER : $Revision: 1.1 $
+**
+** DESCRIPTION :
+**
+** EXPORTED OBJECTS :
+** LOCAL OBJECTS :
+** MODULES USED :
+***************************************************************************
+** ADMINISTRATIVE INFORMATION *
+********************************
+** ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
+** CREATION DATE : Nov 14, 2007
+** LAST UPDATE : Nov Nov 14, 2007
+** MODIFICATIONS :
+**************************************************************************/
+
+/*****************************
+ $Log: spamdetect.cpp,v $
+ Revision 1.1 2007-11-14 16:20:05 arjen
+ New program: spamdetect.
+ Expirimental utility to log manually reported spam and have
+ Gnucomo detect the spammer's IP address.
+
+*****************************/
+
+static const char *RCSID = "$Id: spamdetect.cpp,v 1.1 2007-11-14 16:20:05 arjen Exp $";
+
+#include <fstream>
+#include <AXE/String.h>
+
+#include <syslog.h>
+#include <getopt.h>
+
+int main(int argc, char *argv[])
+{
+ const char *usage = "Usage: spamdetect\n";
+
+ String line;
+ String header;
+ int state = 0;
+
+ regex fwd_header("---- Original Message -----");
+ regex received("^Received:");
+ regex from("^From:");
+ regex returnpath("^Return-Path:");
+
+ openlog("gnucomo", 0, LOG_MAIL);
+
+
+ while (std::cin >> line)
+ {
+ std::cout << line << "\n";
+ switch (state)
+ {
+ case 0:
+ if (line == fwd_header)
+ {
+ state = 1;
+ std::cout << "Forward header detected.\n";
+ }
+ break;
+
+ case 1:
+ // Inside the forwarded header
+ if (line == received || line == from || line == returnpath)
+ {
+ header = line;
+ state = 2;
+ std::cout << "(1)Header = " << header << "\n";
+ }
+ break;
+ case 2:
+ if (line == regex("^[^ ]+: "))
+ {
+ std::cout << "Logging " << header << "\n";
+ syslog(LOG_WARNING, "%s", (char *)header);
+ header = "";
+ state = 1;
+ std::cout << "Next header.\n";
+ if (line == received || line == from || line == returnpath)
+ {
+ header = line;
+ state = 2;
+ std::cout << "(1)Header = " << header << "\n";
+ }
+ }
+ else if (line == String(""))
+ {
+ std::cout << "End of headers detected.\n";
+ state = 3;
+ }
+ else
+ {
+ header += " ";
+ header += line;
+ std::cout << "(2)Header = " << header << "\n";
+ }
+ }
+ }
+
+ closelog();
+}
+