INN commit: trunk/backends (innxbatch.c innxmit.c nntpget.c)

INN Commit rra at isc.org
Sun Nov 8 19:53:07 UTC 2009


    Date: Sunday, November 8, 2009 @ 11:53:07
  Author: iulius
Revision: 8728

RFC 3977 compliance:

* innxbatch and innxmit now recognize 403 for a problem
preventing the action from being taken.

* innxmit now also recognizes 501 when there is a syntax
error and considers it as a reject (IHAVE/CHECK/TAKETHIS).

Modified:
  trunk/backends/innxbatch.c
  trunk/backends/innxmit.c
  trunk/backends/nntpget.c

-------------+
 innxbatch.c |    4 +++-
 innxmit.c   |   49 ++++++++++++++++++++++++++++++++-----------------
 nntpget.c   |    8 ++++----
 3 files changed, 39 insertions(+), 22 deletions(-)

Modified: innxbatch.c
===================================================================
--- innxbatch.c	2009-11-08 18:38:36 UTC (rev 8727)
+++ innxbatch.c	2009-11-08 19:53:07 UTC (rev 8728)
@@ -248,6 +248,7 @@
     break;
   case NNTP_FAIL_XBATCH:
   case NNTP_FAIL_TERMINATING:
+  case NNTP_FAIL_ACTION:
     notice("%s xbatch failed %s", REMhost, buf);
     STATrejected++;
     return false;
@@ -495,7 +496,7 @@
     if (GotInterrupt) Interrupted();
 
     /* Offer the xbatch. */
-    snprintf(buff, sizeof(buff), "xbatch %d", XBATCHsize);
+    snprintf(buff, sizeof(buff), "XBATCH %d", XBATCHsize);
     if (!REMwrite(ToServer, buff)) {
       syswarn("cannot offer xbatch to %s", REMhost);
       ExitWithStats(1);
@@ -519,6 +520,7 @@
       break;
     case NNTP_FAIL_XBATCH:
     case NNTP_FAIL_TERMINATING:
+    case NNTP_FAIL_ACTION:
       /* Most likely out of space -- no point in continuing. */
       notice("%s xbatch failed %s", REMhost, buff);
       ExitWithStats(1);

Modified: innxmit.c
===================================================================
--- innxmit.c	2009-11-08 18:38:36 UTC (rev 8727)
+++ innxmit.c	2009-11-08 19:53:07 UTC (rev 8728)
@@ -297,7 +297,7 @@
 static void
 ExitWithStats(int x)
 {
-    static char		QUIT[] = "quit";
+    static char		QUIT[] = "QUIT";
     double		usertime;
     double		systime;
 
@@ -644,14 +644,14 @@
 	    Requeue(Article, MessageID);
 	break;
     case NNTP_ERR_COMMAND:
-    case NNTP_ERR_SYNTAX:
     case NNTP_ERR_ACCESS:
-	/* The receiving server is likely confused...no point in continuing */
+        /* The receiving server is likely confused... no point in continuing! */
         syslog(L_FATAL, GOT_BADCOMMAND, REMhost, MessageID, REMclean(buff));
         RequeueRestAndExit(Article, MessageID);
         /* NOTREACHED */
     case NNTP_FAIL_IHAVE_DEFER:
     case NNTP_FAIL_TERMINATING:
+    case NNTP_FAIL_ACTION:
 	Requeue(Article, MessageID);
 	break;
     case NNTP_OK_IHAVE:
@@ -659,6 +659,7 @@
 	STATacceptedsize += (double)art->len;
 	break;
     case NNTP_FAIL_IHAVE_REJECT:
+    case NNTP_ERR_SYNTAX:
         if (logRejects)
             syslog(L_NOTICE, REJECTED, REMhost,
                    MessageID, Article, REMclean(buff));
@@ -733,8 +734,8 @@
 check(int i) {
     char	buff[NNTP_MAXLEN_COMMAND];
 
-    /* send "check <ID>" to the other system */
-    snprintf(buff, sizeof(buff), "check %s", stbuf[i].st_id);
+    /* Send "CHECK <mid>" to the other system. */
+    snprintf(buff, sizeof(buff), "CHECK %s", stbuf[i].st_id);
     if (!REMwrite(buff, (int)strlen(buff), false)) {
         syswarn("cannot check article");
 	return true;
@@ -765,10 +766,10 @@
              stbuf[i].st_fname);
         return true;
     }
-    /* send "takethis <ID>" to the other system */
-    snprintf(buff, sizeof(buff), "takethis %s", stbuf[i].st_id);
+    /* Send "TAKETHIS <mid>" to the other system. */
+    snprintf(buff, sizeof(buff), "TAKETHIS %s", stbuf[i].st_id);
     if (!REMwrite(buff, (int)strlen(buff), false)) {
-        syswarn("cannot send takethis");
+        syswarn("cannot send TAKETHIS");
         return true;
     }
     if (Debug)
@@ -801,7 +802,7 @@
 
     while(true) {
 	if (!REMread(buff, (int)sizeof buff)) {
-            syswarn("no reply to check");
+            syswarn("no reply to CHECK");
 	    return true;
 	}
 	if (GotInterrupt)
@@ -811,9 +812,15 @@
 
 	/* Parse the reply. */
 	resp =  atoi(buff);
-	/* Skip the 1XX informational messages */
-	if ((resp >= 100) && (resp < 200)) continue;
+
+	/* Skip the 1XX informational messages. */
+	if ((resp >= 100) && (resp < 200))
+            continue;
+
 	switch (resp) { /* first time is to verify it */
+        case NNTP_ERR_SYNTAX:
+            /* Nothing we can check here. */
+            break;
 	case NNTP_FAIL_CHECK_REFUSE:
 	case NNTP_OK_CHECK:
 	case NNTP_OK_TAKETHIS:
@@ -834,6 +841,7 @@
 	    }
 	    break;
 	case NNTP_FAIL_TERMINATING:
+        case NNTP_FAIL_ACTION:
 	    /* Most likely out of space -- no point in continuing. */
 	    syslog(L_NOTICE, IHAVE_FAIL, REMhost, REMclean(buff));
 	    return true;
@@ -845,6 +853,7 @@
 						    buff);
 	    return (true);
 	}
+
 	switch (resp) { /* now we take some action */
 	case NNTP_FAIL_CHECK_DEFER:	/* remote wants it later */
 	    /* try again now because time has passed */
@@ -857,6 +866,8 @@
 		strel(i); /* release entry */
 	    }
 	    break;
+
+        case NNTP_ERR_SYNTAX:
 	case NNTP_FAIL_CHECK_REFUSE:	/* remote doesn't want it */
 	    strel(i); /* release entry */
 	    STATrefused++;
@@ -1184,7 +1195,8 @@
 		    CanStream = true;
 		    break;
                 case NNTP_FAIL_AUTH_NEEDED: /* authentication refusal */
-		case NNTP_ERR_COMMAND: /* normal refusal */
+		case NNTP_ERR_COMMAND: /* unknown MODE command */
+                case NNTP_ERR_SYNTAX:  /* unknown STREAM keyword */
 		    CanStream = false;
 		    break;
 		}
@@ -1213,7 +1225,9 @@
 		switch (atoi(buff)) {
 		case 250:		/* YES! */
 		    break;
-		case NNTP_ERR_COMMAND: /* normal refusal */
+                case NNTP_FAIL_AUTH_NEEDED: /* authentication refusal */
+		case NNTP_ERR_COMMAND: /* unknown MODE command */
+                case NNTP_ERR_SYNTAX:  /* unknown STREAM keyword */
                     die("%s not allowed -- %s", modeheadfeed, buff);
 		default:
                     die("unknown reply to %s -- %s", modeheadfeed, buff);
@@ -1390,7 +1404,7 @@
 	    }
 	    continue; /* next article */
 	}
-	snprintf(buff, sizeof(buff), "ihave %s", MessageID);
+	snprintf(buff, sizeof(buff), "IHAVE %s", MessageID);
 	if (!REMwrite(buff, (int)strlen(buff), false)) {
             syswarn("cannot offer article");
             article_free(art);
@@ -1404,7 +1418,7 @@
 
 	/* Does he want it? */
 	if (!REMread(buff, (int)sizeof buff)) {
-            syswarn("no reply to ihave");
+            syswarn("no reply to IHAVE");
             article_free(art);
 	    RequeueRestAndExit(Article, MessageID);
 	}
@@ -1421,12 +1435,12 @@
 		Requeue(Article, MessageID);
 	    break;
         case NNTP_ERR_COMMAND:
-        case NNTP_ERR_SYNTAX:
         case NNTP_ERR_ACCESS:
-            /* The receiving server is likely confused...no point in continuing */
+            /* The receiving server is likely confused... no point in continuing! */
             syslog(L_FATAL, GOT_BADCOMMAND, REMhost, MessageID, REMclean(buff));
 	    RequeueRestAndExit(Article, MessageID);
 	    /* NOTREACHED */
+        case NNTP_FAIL_ACTION:
         case NNTP_FAIL_AUTH_NEEDED:
 	case NNTP_FAIL_IHAVE_DEFER:
 	case NNTP_FAIL_TERMINATING:
@@ -1439,6 +1453,7 @@
 		RequeueRestAndExit(Article, MessageID);
 	    break;
 	case NNTP_FAIL_IHAVE_REFUSE:
+        case NNTP_ERR_SYNTAX:
 	    STATrefused++;
 	    break;
 	}

Modified: nntpget.c
===================================================================
--- nntpget.c	2009-11-08 18:38:36 UTC (rev 8727)
+++ nntpget.c	2009-11-08 19:53:07 UTC (rev 8728)
@@ -43,7 +43,7 @@
 */
 static struct iovec	SITEvec[2];
 static char		SITEv1[] = "\r\n";
-static char		READER[] = "mode reader";
+static char		READER[] = "MODE READER";
 static unsigned long	STATgot;
 static unsigned long	STAToffered;
 static unsigned long	STATsent;
@@ -161,7 +161,7 @@
 {
     char	buff[NNTP_MAXLEN_COMMAND];
 
-    SITEwrite(sp, "quit", 4);
+    SITEwrite(sp, "QUIT", 4);
     SITEread(sp, buff);
 }
 
@@ -359,7 +359,7 @@
 	if (Offer) {
 	    /* See if the local server wants it. */
 	    STAToffered++;
-	    snprintf(buff, sizeof(buff), "ihave %s", mesgid);
+	    snprintf(buff, sizeof(buff), "IHAVE %s", mesgid);
 	    if (!SITEwrite(Local, buff, (int)strlen(buff))
 	     || !SITEread(Local, buff)) {
                 syswarn("cannot offer %s", mesgid);
@@ -370,7 +370,7 @@
 	}
 
 	/* Try to get the article. */
-	snprintf(buff, sizeof(buff), "article %s", mesgid);
+	snprintf(buff, sizeof(buff), "ARTICLE %s", mesgid);
 	if (!SITEwrite(Remote, buff, (int)strlen(buff))
 	 || !SITEread(Remote, buff)) {
             syswarn("cannot get %s", mesgid);




More information about the inn-committers mailing list