lprintf(9, "output_static('%s') [%s] -- NOT FOUND --\n", what, ChrPtr(WC->Hdr->this_page));
hprintf("HTTP/1.1 404 %s\r\n", strerror(errno));
hprintf("Content-Type: text/plain\r\n");
+ begin_burst();
wprintf("Cannot open %s: %s\r\n", what, strerror(errno));
end_burst();
} else {
lprintf(9, "output_static('%s') -- FSTAT FAILED --\n", what);
hprintf("HTTP/1.1 404 %s\r\n", strerror(errno));
hprintf("Content-Type: text/plain\r\n");
+ begin_burst();
wprintf("Cannot fstat %s: %s\n", what, strerror(errno));
end_burst();
return;
struct dirent *filedir_entry;
int d_namelen;
int d_without_ext;
+ int istoplevel;
filedir = opendir (DirName);
if (filedir == NULL) {
Dir = NewStrBufPlain(DirName, -1);
WebDir = NewStrBufPlain(RelDir, -1);
+ istoplevel = IsEmptyStr(RelDir);
OneWebName = NewStrBuf();
while ((readdir_r(filedir, &d, &filedir_entry) == 0) &&
#endif
d_without_ext = d_namelen;
+ if (filedir_entry->d_type == DT_UNKNOWN) {
+ struct stat s;
+ char path[PATH_MAX];
+ snprintf(path, PATH_MAX, "%s/%s",
+ DirName, filedir_entry->d_name);
+ if (stat(path, &s) == 0) {
+ filedir_entry->d_type = IFTODT(s.st_mode);
+ }
+ }
+
if ((d_namelen > 1) && filedir_entry->d_name[d_namelen - 1] == '~')
continue; /* Ignore backup files... */
if ((strcmp(filedir_entry->d_name, ".svn") == 0) ||
(strcmp(filedir_entry->d_name, "t") == 0))
break;
- snprintf(dirname, PATH_MAX, "%s/%s",
+ snprintf(dirname, PATH_MAX, "%s/%s/",
DirName, filedir_entry->d_name);
- snprintf(reldir, PATH_MAX, "%s/%s",
- RelDir, filedir_entry->d_name);
+ if (istoplevel)
+ snprintf(reldir, PATH_MAX, "%s/",
+ filedir_entry->d_name);
+ else
+ snprintf(reldir, PATH_MAX, "%s/%s/",
+ RelDir, filedir_entry->d_name);
+ StripSlashes(dirname, 1);
+ StripSlashes(reldir, 1);
LoadStaticDir(dirname, DirList, reldir);
break;
case DT_LNK: /* TODO: check whether its a file or a directory */
FlushStrBuf(OneWebName);
StrBufAppendBuf(OneWebName, WebDir, 0);
if ((StrLength(OneWebName) != 0) &&
- (ChrPtr(OneWebName) [ StrLength(OneWebName)] != '/'))
+ (ChrPtr(OneWebName) [ StrLength(OneWebName) - 1] != '/'))
StrBufAppendBufPlain(OneWebName, "/", 1, 0);
StrBufAppendBufPlain(OneWebName, filedir_entry->d_name, d_namelen, 0);
Put(DirList, SKEY(OneWebName), FileName, HFreeStrBuf);
-/* printf("[%s | %s] \n", ChrPtr(OneWebName), ChrPtr(FileName));*/
+ /* lprintf(9, "[%s | %s]\n", ChrPtr(OneWebName), ChrPtr(FileName)); */
break;
default:
break;
void *vFile;
StrBuf *File;
- if (GetHash(StaticFilemappings[0], SKEY(WCC->Hdr->Handler->Name), &vFile) &&
+ if (GetHash(StaticFilemappings[0], SKEY(WCC->Hdr->HR.Handler->Name), &vFile) &&
(vFile != NULL))
{
File = (StrBuf*) vFile;
}
}
-
+extern void do_404(void);
void output_static_safe(HashList *DirList)
{
void *vFile;
StrBuf *File;
- if (GetHash(DirList, SKEY(WCC->Hdr->ReqLine), &vFile) &&
+ if (GetHash(DirList, SKEY(WCC->Hdr->HR.ReqLine), &vFile) &&
(vFile != NULL))
{
File = (StrBuf*) vFile;
output_static(ChrPtr(vFile));
}
else {
+ lprintf(1, "output_static_safe() file %s not found. \n",
+ ChrPtr(WCC->Hdr->HR.ReqLine));
///TODO: detect image & output blank image
+ do_404();
}
}
void output_static_0(void)
LoadStaticDir(static_dirs[2], StaticFilemappings[2], "");
LoadStaticDir(static_dirs[3], StaticFilemappings[3], "");
- WebcitAddUrlHandler(HKEY("robots.txt"), output_flat_static, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC);
- WebcitAddUrlHandler(HKEY("favicon.ico"), output_flat_static, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC);
- WebcitAddUrlHandler(HKEY("static"), output_static_0, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC);
- WebcitAddUrlHandler(HKEY("static.local"), output_static_1, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC);
- WebcitAddUrlHandler(HKEY("tinymce"), output_static_2, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC);
+ WebcitAddUrlHandler(HKEY("robots.txt"), output_flat_static, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC|LOGCHATTY);
+ WebcitAddUrlHandler(HKEY("favicon.ico"), output_flat_static, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC|LOGCHATTY);
+ WebcitAddUrlHandler(HKEY("static"), output_static_0, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC|LOGCHATTY);
+ WebcitAddUrlHandler(HKEY("static.local"), output_static_1, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC|LOGCHATTY);
+ WebcitAddUrlHandler(HKEY("tinymce"), output_static_2, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC|LOGCHATTY);
+ WebcitAddUrlHandler(HKEY("tiny_mce"), output_static_2, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC|LOGCHATTY);
}