INN 2.3.1 and X-Trace
Katsuhiro Kondou
Katsuhiro_Kondou at isc.org
Sat Oct 20 16:52:21 UTC 2001
In article <20011018.184650.59650912.kondou at isc.org>,
Katsuhiro Kondou <Katsuhiro_Kondou at isc.org> wrote;
} } Article sent through my server has doubled Path on my server but not on the
} } other servers.
}
} Aha, I've got it. The path is modified by nnrpd in that case.
} I'll try to fix.
Try attached which works for me. Tell me if it works for you also.
I'll commit if it's ok.
--
Katsuhiro Kondou
--- nnrpd/article.c 2001/04/23 06:29:38 1.86.2.12
+++ nnrpd/article.c 2001/10/20 16:50:11
@@ -377,7 +377,7 @@
*/
STATIC void ARTsendmmap(SENDTYPE what)
{
- char *p, *q, *r, *s, *path, *xref, *virtualpath;
+ char *p, *q, *r, *s, *path, *xref;
struct timeval stv, etv;
long bytecount;
char lastchar;
@@ -455,24 +455,28 @@
return;
}
}
- virtualpath = NEW(char, VirtualPathlen + 2);
- sprintf(virtualpath, "!%s", VirtualPath);
- for (s = path ; s + VirtualPathlen + 1 < ARThandle->data + ARThandle->len ; s++) {
- if (*s != *virtualpath || !EQn(s, virtualpath, VirtualPathlen + 1))
+ for (s = path, lastchar = '\0';
+ s + VirtualPathlen + 1 < ARThandle->data + ARThandle->len;
+ lastchar = *s++) {
+ if ((lastchar != '\0' && lastchar != '!') || *s != *VirtualPath ||
+ !EQn(s, VirtualPath, VirtualPathlen - 1))
continue;
+ if (*(s + VirtualPathlen - 1) != '\0' &&
+ *(s + VirtualPathlen - 1) != '!')
+ continue;
break;
}
if (s + VirtualPathlen + 1 < ARThandle->data + ARThandle->len) {
if (xref > path) {
SendIOv(q, path - q);
- SendIOv(s + 1, xref - (s + 1));
+ SendIOv(s, xref - s);
SendIOv(VirtualPath, VirtualPathlen - 1);
SendIOv(r, p - r);
} else {
SendIOv(q, xref - q);
SendIOv(VirtualPath, VirtualPathlen - 1);
SendIOv(xref, path - xref);
- SendIOv(s + VirtualPathlen, p - (s + VirtualPathlen));
+ SendIOv(s, p - s);
}
} else {
if (xref > path) {
@@ -489,7 +493,6 @@
SendIOv(path, p - path);
}
}
- DISPOSE(virtualpath);
} else
SendIOv(q, p - q);
ARTgetsize += p - q;
@@ -520,7 +523,7 @@
char *GetHeader(char *header, BOOL IsLines)
{
static char buff[40];
- char *p, *q, *r, *s, *t, *virtualpath;
+ char *p, *q, *r, *s, *t, prevchar;
/* Bogus value here to make sure that it isn't initialized to \n */
char lastchar = ' ';
char *limit;
@@ -578,21 +581,26 @@
}
}
if (pathheader && (VirtualPathlen > 0)) {
- virtualpath = NEW(char, VirtualPathlen + 1);
- sprintf(virtualpath, "!%s", VirtualPath);
- for (s = p ; s + VirtualPathlen + 1 < ARThandle->data + ARThandle->len ; s++) {
- if (*s != *virtualpath || !EQn(s, virtualpath, VirtualPathlen + 1))
+ for (s = p, prevchar = '\0';
+ s + VirtualPathlen + 1 < ARThandle->data + ARThandle->len;
+ prevchar = *s++) {
+ if ((prevchar != '\0' && prevchar != '!') ||
+ *s != *VirtualPath ||
+ !EQn(s, VirtualPath, VirtualPathlen - 1))
+ continue;
+ if (*(s + VirtualPathlen - 1) != '\0' &&
+ *(s + VirtualPathlen - 1) != '!')
continue;
break;
}
if (s + VirtualPathlen + 1 < ARThandle->data + ARThandle->len) {
- memcpy(retval, s + 1, q - (s + 1));
+ memcpy(retval, s, q - s);
+ *(retval + (int)(q - s)) = '\0';
} else {
memcpy(retval, VirtualPath, VirtualPathlen);
memcpy(retval + VirtualPathlen, p, q - p);
*(retval + (int)(q - p) + VirtualPathlen) = '\0';
}
- DISPOSE(virtualpath);
} else if (xrefheader && (VirtualPathlen > 0)) {
if ((r = memchr(p, ' ', q - p)) == NULL)
return NULL;
More information about the inn-workers
mailing list