X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=inn-innduct.git;a=blobdiff_plain;f=nnrpd%2Farticle.c;h=5b9160edfa9b2896747482c03efd213c63760afe;hp=e0f5b05d12ceed66ad29862c16420afc1f81452c;hb=8f96ca50aa0f9edfd4cd9597dedeeaea07134f7f;hpb=d5b3cbfbd8f26b8b77ce3ce100a9c13c5a71c8f3 diff --git a/nnrpd/article.c b/nnrpd/article.c index e0f5b05..5b9160e 100644 --- a/nnrpd/article.c +++ b/nnrpd/article.c @@ -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();