[2nd try] Re: [2.4 nnrpd] nntpext patch
greg andruk
supersede at india.com
Sat Jul 8 05:01:57 UTC 2000
[Looks like the first try may have been eaten when I attached rather
than included. Sigh.]
Plugging some leaklets I sprung in nnrpd/article.c. Sorry about that.
--- article.c.orig Thu Jul 6 22:25:09 2000
+++ article.c Fri Jul 7 00:55:57 2000
@@ -1084,91 +1084,96 @@
else
pattern = NULL;
- /* Message-ID specified? */
- if (ac > 2 && av[2][0] == '<') {
- p = av[2];
- if (!ARTopenbyid(p, &artnum)) {
- Printf("%d No such article.\r\n", NNTP_DONTHAVEIT_VAL);
+ do {
+ /* Message-ID specified? */
+ if (ac > 2 && av[2][0] == '<') {
+ p = av[2];
+ if (!ARTopenbyid(p, &artnum)) {
+ Printf("%d No such article.\r\n", NNTP_DONTHAVEIT_VAL);
+ return;
+ }
+ Printf("%d %s matches follow (ID)\r\n", NNTP_HEAD_FOLLOWS_VAL,
+ header);
+ if ((text = GetHeader(header, FALSE)) != NULL
+ && (!pattern || wildmat(text, pattern)))
+ Printf("%s %s\r\n", p, text);
+
+ ARTclose();
+ Printf(".\r\n");
return;
}
- Printf("%d %s matches follow (ID)\r\n", NNTP_HEAD_FOLLOWS_VAL, header);
- if ((text = GetHeader(header, FALSE)) != NULL
- && (!pattern || wildmat(text, pattern)))
- Printf("%s %s\r\n", p, text);
-
- ARTclose();
- Printf(".\r\n");
- if (pattern)
- DISPOSE(pattern);
- return;
- }
-
- if (GRPcount == 0) {
- Reply("%s\r\n", ARTnotingroup);
- return;
- }
-
- /* 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,
- av[1] ? av[1] : "\"\"");
- Printf(".\r\n");
+
+ if (GRPcount == 0) {
+ Reply("%s\r\n", ARTnotingroup);
return;
}
- }
- /* In overview? */
- for (Overview = -1, i = 0; i < ARTfieldsize; i++)
- if (caseEQ(ARTfields[i].Header, av[1])) {
- Overview = i;
- break;
+ /* 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");
+ return;
+ }
}
- /* Not in overview, we have to fish headers out from the articles */
- if (Overview < 0 ) {
- Reply("%d %s matches follow (art)\r\n", NNTP_HEAD_FOLLOWS_VAL, av[1]);
- for (i = range.Low; i <= range.High && range.High > 0; i++) {
- if (!ARTopen(i))
- continue;
- p = GetHeader(header, FALSE);
- if (p && (!pattern || wildmat(p, pattern))) {
- sprintf(buff, "%lu ", i);
- SendIOb(buff, strlen(buff));
- SendIOb(p, strlen(p));
- SendIOb("\r\n", 2);
- ARTclose();
+ /* In overview? */
+ for (Overview = -1, i = 0; i < ARTfieldsize; i++)
+ if (caseEQ(ARTfields[i].Header, header)) {
+ Overview = i;
+ break;
+ }
+
+ /* Not in overview, we have to fish headers out from the articles */
+ if (Overview < 0 ) {
+ Reply("%d %s matches follow (art)\r\n", NNTP_HEAD_FOLLOWS_VAL,
+ header);
+ for (i = range.Low; i <= range.High && range.High > 0; i++) {
+ if (!ARTopen(i))
+ continue;
+ p = GetHeader(header, FALSE);
+ if (p && (!pattern || wildmat(p, pattern))) {
+ sprintf(buff, "%lu ", i);
+ SendIOb(buff, strlen(buff));
+ SendIOb(p, strlen(p));
+ SendIOb("\r\n", 2);
+ ARTclose();
+ }
}
- }
- SendIOb(".\r\n", 3);
- PushIOb();
- if (pattern)
- DISPOSE(pattern);
- return;
- }
-
- /* Okay then, we can grab values from overview. */
- if ((handle = (void *)OVopensearch(GRPcur, range.Low, range.High)) == NULL) {
- Reply("%d %s no matches follow (NOV)\r\n.\r\n", NNTP_HEAD_FOLLOWS_VAL, av[1]);
- return;
- }
+ SendIOb(".\r\n", 3);
+ PushIOb();
+ return;
+ }
+
+ /* Okay then, we can grab values from overview. */
+ handle = (void *)OVopensearch(GRPcur, range.Low, range.High);
+ if (handle == NULL) {
+ Reply("%d %s no matches follow (NOV)\r\n.\r\n",
+ NNTP_HEAD_FOLLOWS_VAL, header);
+ return;
+ }
- Printf("%d %s matches follow (NOV)\r\n", NNTP_HEAD_FOLLOWS_VAL, header);
- while (OVsearch(handle, &artnum, &data, &len, &token, NULL)) {
- if (len == 0 || PERMaccessconf->nnrpdcheckart && !ARTinstorebytoken(token))
- continue;
- if ((p = OVERGetHeader(data, Overview)) != NULL) {
- if (!pattern || wildmat(p, pattern)) {
- sprintf(buff, "%lu ", artnum);
- SendIOb(buff, strlen(buff));
- SendIOb(p, strlen(p));
- SendIOb("\r\n", 2);
- }
+ Printf("%d %s matches follow (NOV)\r\n", NNTP_HEAD_FOLLOWS_VAL,
+ header);
+ while (OVsearch(handle, &artnum, &data, &len, &token, NULL)) {
+ if (len == 0 || PERMaccessconf->nnrpdcheckart
+ && !ARTinstorebytoken(token))
+ continue;
+ if ((p = OVERGetHeader(data, Overview)) != NULL) {
+ if (!pattern || wildmat(p, pattern)) {
+ sprintf(buff, "%lu ", artnum);
+ SendIOb(buff, strlen(buff));
+ SendIOb(p, strlen(p));
+ SendIOb("\r\n", 2);
+ }
+ }
}
- }
- SendIOb(".\r\n", 3);
- PushIOb();
- OVclosesearch(handle);
+ SendIOb(".\r\n", 3);
+ PushIOb();
+ OVclosesearch(handle);
+ } while (0);
+
if (pattern)
DISPOSE(pattern);
}
More information about the inn-patches
mailing list