Michel Pelletier wrote:
Jens Vagelpohl wrote:
[Log snipped] 10.1.1.1 - - [28/Sep/1999:01:57:43 +0000] "POST /Zope/. HTTP/1.0" 404 247 0.550 </snippers>
This is because Netscape, incorrectly, prevents a request from acessing the '.' "document" in a folder (which should be the folder itself).
Using '.' is not a violation of the HTTP spec, and every other web server i've used handles it properly.
You can fix this by changing all ocurances of '.' in Zope's DTML source with URL1
Since that sounds so extreme, here's a patch to nscgi-auth.c instead which strips /. from the end of URLs. Add the parameter stripdot=1 to the NameTrans fn="cgiauth-nametrans" function, e.g. NameTrans fn="cgiauth-nametrans" stripdot=1 I hereby assign all rights to this patch to Digitial Creations provided I am waived of all warranty requirements, requirements of fitness for a particular purpose, etc. (For what it's worth...) --- /home/matt/ftp/nscgi/nscgi-auth.c Mon Aug 11 17:37:58 1997 +++ nscgi-auth.c Tue Sep 28 08:17:07 1999 @@ -187,6 +187,32 @@ NSAPI_PUBLIC int cgiauth_nametrans(pblock *pb, Session *sn, Request *rq) { char *aheader = pblock_findval("authorization", rq->headers); + char *stripdot = pblock_findval("stripdot", pb); + + if (stripdot) + { /* Lets clean up the reference to /. (not Malda!) */ + char *ppath = pblock_findval("ppath", rq->vars); + if (ppath) + { /* Zip to the end of the string and look for . */ + char *c = ppath; + + while (*c) c++; c--; + if (*c == '.' && ((*(c - 1) == '/') || *(c - 1) == '\\')) + { /* I don't know if pblock_findval returns a copy or the + ** original pointer, but let's be safe + */ + pb_param *pp = pblock_find("ppath", rq->vars); + char *oldp; + + c--; /* Strip off the /., not just the . */ + *c = '\0'; + + oldp = pp->value; + pp->value = STRDUP(ppath); + FREE(oldp); + } + } + } if (aheader) { /* There was a header, so see if it matches any of our allow entries.*/ -- Matt Kromer "Where are we going?" "Planet 10!" matt@bane.mi.org "When?" "Real soon!" http://bane.mi.org/~matt