You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by si...@apache.org on 2005/10/22 11:51:37 UTC

svn commit: r327648 - in /spamassassin/trunk/spamc: libspamc.c libspamc.h spamc.c

Author: sidney
Date: Sat Oct 22 02:51:31 2005
New Revision: 327648

URL: http://svn.apache.org/viewcvs?rev=327648&view=rev
Log:
Bug 4639. Add -K option to spamc to ping spamd

Modified:
    spamassassin/trunk/spamc/libspamc.c
    spamassassin/trunk/spamc/libspamc.h
    spamassassin/trunk/spamc/spamc.c

Modified: spamassassin/trunk/spamc/libspamc.c
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/spamc/libspamc.c?rev=327648&r1=327647&r2=327648&view=diff
==============================================================================
--- spamassassin/trunk/spamc/libspamc.c (original)
+++ spamassassin/trunk/spamc/libspamc.c Sat Oct 22 02:51:31 2005
@@ -600,6 +600,11 @@
     }
     m->priv->flags = flags;
 
+    if (flags & SPAMC_PING) {
+      _clear_message(m);
+      return EX_OK;
+    }
+
     switch (flags & SPAMC_MODE_MASK) {
     case SPAMC_RAW_MODE:
 	return _message_read_raw(fd, m);
@@ -623,7 +628,7 @@
 
     assert(m != NULL);
 
-    if (m->priv->flags & SPAMC_CHECK_ONLY) {
+    if (m->priv->flags & (SPAMC_CHECK_ONLY|SPAMC_PING)) {
 	if (m->is_spam == EX_ISSPAM || m->is_spam == EX_NOTSPAM) {
 	    return full_write(fd, 1, m->out, m->out_len);
 
@@ -924,6 +929,8 @@
 	strcpy(buf, "REPORT ");
     else if (flags & SPAMC_SYMBOLS)
 	strcpy(buf, "SYMBOLS ");
+    else if (flags & SPAMC_PING)
+	strcpy(buf, "PING ");
     else
 	strcpy(buf, "PROCESS ");
 
@@ -937,21 +944,23 @@
     strcat(buf, "\r\n");
     len = strlen(buf);
 
-    if (username != NULL) {
+    if (!(flags & SPAMC_PING)) {
+      if (username != NULL) {
 	if (strlen(username) + 8 >= (bufsiz - len)) {
-	    _use_msg_for_out(m);
-	    return EX_OSERR;
+          _use_msg_for_out(m);
+          return EX_OSERR;
 	}
 	strcpy(buf + len, "User: ");
 	strcat(buf + len, username);
 	strcat(buf + len, "\r\n");
 	len += strlen(buf + len);
-    }
-    if ((m->msg_len > 9999999) || ((len + 27) >= (bufsiz - len))) {
+      }
+      if ((m->msg_len > 9999999) || ((len + 27) >= (bufsiz - len))) {
 	_use_msg_for_out(m);
 	return EX_OSERR;
+      }
+      len += sprintf(buf + len, "Content-length: %d\r\n\r\n", m->msg_len);
     }
-    len += sprintf(buf + len, "Content-length: %d\r\n\r\n", m->msg_len);
 
     libspamc_timeout = m->timeout;
 
@@ -1006,6 +1015,14 @@
 	       versbuf);
 	failureval = EX_PROTOCOL;
 	goto failure;
+    }
+
+    if (flags & SPAMC_PING) {
+	closesocket(sock);
+	sock = -1;
+        m->out_len = sprintf(m->out, "SPAMD/%s %d\n", versbuf, response);
+        m->is_spam = EX_NOTSPAM;
+        return EX_OK;
     }
 
     m->score = 0;

Modified: spamassassin/trunk/spamc/libspamc.h
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/spamc/libspamc.h?rev=327648&r1=327647&r2=327648&view=diff
==============================================================================
--- spamassassin/trunk/spamc/libspamc.h (original)
+++ spamassassin/trunk/spamc/libspamc.h Sat Oct 22 02:51:31 2005
@@ -103,6 +103,9 @@
 /* May 5, 2005 NP: added list reporting support */
 #define SPAMC_REPORT_MSG      (1<<20)
 
+/* Oct 21, 2005 sidney: added ping test */
+#define SPAMC_PING      (1<<19)
+
 
 #define SPAMC_MESSAGE_CLASS_SPAM 1
 #define SPAMC_MESSAGE_CLASS_HAM  2

Modified: spamassassin/trunk/spamc/spamc.c
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/spamc/spamc.c?rev=327648&r1=327647&r2=327648&view=diff
==============================================================================
--- spamassassin/trunk/spamc/spamc.c (original)
+++ spamassassin/trunk/spamc/spamc.c Sat Oct 22 02:51:31 2005
@@ -180,6 +180,7 @@
 #endif
     usg("  -h                  Print this help message and exit.\n");
     usg("  -V                  Print spamc version and exit.\n");
+    usg("  -K                  Keepalive check of spamd.\n");
     usg("  -f                  (Now default, ignored.)\n");
     usg("\n");
 }
@@ -197,9 +198,9 @@
           struct transport *ptrn)
 {
 #ifndef _WIN32
-    const char *opts = "-BcrRd:e:fyp:t:s:u:L:C:xSHU:ElhVF:";
+    const char *opts = "-BcrRd:e:fyp:t:s:u:L:C:xSHU:ElhVKF:";
 #else
-    const char *opts = "-BcrRd:fyp:t:s:u:L:C:xSHElhVF:";
+    const char *opts = "-BcrRd:fyp:t:s:u:L:C:xSHElhVKF:";
 #endif
     int opt;
     int ret = EX_OK;
@@ -250,6 +251,11 @@
                 /* obsolete, backwards compat */
                 break;
             }
+            case 'K':
+            {
+                flags |= SPAMC_PING;
+                break;
+            }
             case 'l':
             {
                 flags |= SPAMC_LOG_TO_STDERR;
@@ -382,6 +388,10 @@
 	    libspamc_log(flags, LOG_ERR, "Learning excludes check only");
 	    ret = EX_USAGE;
 	}
+        if (flags & SPAMC_PING) {
+	    libspamc_log(flags, LOG_ERR, "Learning excludes ping");
+	    ret = EX_USAGE;
+	}
 	if (flags & SPAMC_REPORT_IFSPAM) {
 	    libspamc_log(flags, LOG_ERR, "Learning excludes report if spam");
 	    ret = EX_USAGE;
@@ -825,13 +835,12 @@
 	message_cleanup(&m);
 	ret = result;
     }
-    else if (flags & SPAMC_CHECK_ONLY || flags & SPAMC_REPORT
-	     || flags & SPAMC_REPORT_IFSPAM) {
+    else if (flags & (SPAMC_CHECK_ONLY | SPAMC_REPORT | SPAMC_REPORT_IFSPAM)) {
 	full_write(out_fd, 1, "0/0\n", 4);
 	message_cleanup(&m);
 	ret = EX_NOTSPAM;
     }
-    else if (flags & SPAMC_LEARN ) {
+    else if (flags & (SPAMC_LEARN|SPAMC_PING) ) {
         message_cleanup(&m);
     }
     else {