chiark / gitweb /
run debian/rules patch
[inn-innduct.git] / nnrpd / article.c
index e0f5b05d12ceed66ad29862c16420afc1f81452c..5b9160edfa9b2896747482c03efd213c63760afe 100644 (file)
@@ -688,6 +688,7 @@ void CMDfetch(int ac, char *av[])
     if (ac > 1)
        ARTnumber = tart;
     if ((msgid = GetHeader("Message-ID")) == NULL) {
+        ARTclose();
         Reply("%s\r\n", ARTnoartingroup);
        return;
     }
@@ -745,9 +746,9 @@ void CMDnextlast(int ac UNUSED, char *av[])
         if (!ARTopen(ARTnumber))
             continue;
         msgid = GetHeader("Message-ID");
+        ARTclose();
     } while (msgid == NULL);
 
-    ARTclose();
     Reply("%d %d %s Article retrieved; request text separately.\r\n",
           NNTP_NOTHING_FOLLOWS_VAL, ARTnumber, msgid);
 }
@@ -854,9 +855,7 @@ void CMDxover(int ac, char *av[])
 
     /* Parse range. */
     if (!CMDgetrange(ac, av, &range, &DidReply)) {
-       if (!DidReply) {
-           Reply("%d data follows\r\n", NNTP_OVERVIEW_FOLLOWS_VAL);
-           Printf(".\r\n");
+       if (DidReply) {
            return;
        }
     }
@@ -1010,6 +1009,12 @@ void CMDpat(int ac, char *av[])
                Printf("%d No such article.\r\n", NNTP_DONTHAVEIT_VAL);
                break;
            }
+            if (!PERMartok()) {
+                ARTclose();
+                Printf("%s\r\n", NOACCESS);
+                break;
+            }
+                
            Printf("%d %s matches follow (ID)\r\n", NNTP_HEAD_FOLLOWS_VAL,
                   header);
            if ((text = GetHeader(header)) != NULL
@@ -1028,10 +1033,7 @@ void CMDpat(int ac, char *av[])
 
        /* Range specified. */
        if (!CMDgetrange(ac - 1, av + 1, &range, &DidReply)) {
-           if (!DidReply) {
-               Reply("%d %s no matches follow (range)\r\n",
-                     NNTP_HEAD_FOLLOWS_VAL, header ? header : "\"\"");
-               Printf(".\r\n");
+           if (DidReply) {
                break;
            }
        }
@@ -1052,8 +1054,8 @@ void CMDpat(int ac, char *av[])
                    SendIOb(buff, strlen(buff));
                    SendIOb(p, strlen(p));
                    SendIOb("\r\n", 2);
-                   ARTclose();
                }
+                ARTclose();
            }
            SendIOb(".\r\n", 3);
            PushIOb();