Browse Source

webserver: add directoryIndex support defaulting to index.html

Git-Dch: Ignore
tags/debian/0.9.14
David Kalnischkies 8 years ago
parent
commit
3c16b5fe79
1 changed files with 15 additions and 3 deletions
  1. +15
    -3
      test/interactive-helper/aptwebserver.cc

+ 15
- 3
test/interactive-helper/aptwebserver.cc View File

@@ -277,7 +277,7 @@ void sendDirectoryListing(int const client, std::string const &dir, /*{{{*/
<< "</head>" << std::endl
<< "<body><h1>Index of " << dir << "</h1>" << std::endl
<< "<table><tr><th>#</th><th>Name</th><th>Size</th><th>Last-Modified</th></tr>" << std::endl;
if (dir != ".")
if (dir != "./")
listing << "<tr><td>d</td><td><a href=\"..\">Parent Directory</a></td><td>-</td><td>-</td></tr>";
for (int i = 0; i < counter; ++i) {
struct stat fs;
@@ -390,7 +390,7 @@ bool parseFirstLine(int const client, std::string const &request, /*{{{*/
// nuke the first character which is a / as we assured above
filename.erase(0, 1);
if (filename.empty() == true)
filename = ".";
filename = "./";
// support ~user/ uris to refer to /home/user/public_html/ as a kind-of special directory
else if (filename[0] == '~')
{
@@ -405,6 +405,17 @@ bool parseFirstLine(int const client, std::string const &request, /*{{{*/
else
filename = "/home/" + filename.substr(1) + "/public_html/";
}

// if no filename is given, but a valid directory see if we can use an index or
// have to resort to a autogenerated directory listing later on
if (DirectoryExists(filename) == true)
{
std::string const directoryIndex = _config->Find("aptwebserver::directoryindex");
if (directoryIndex.empty() == false && directoryIndex == flNotDir(directoryIndex) &&
RealFileExists(filename + directoryIndex) == true)
filename += directoryIndex;
}

return true;
}
/*}}}*/
@@ -543,6 +554,7 @@ int main(int const argc, const char * argv[])

_config->CndSet("aptwebserver::response-header::Server", "APT webserver");
_config->CndSet("aptwebserver::response-header::Accept-Ranges", "bytes");
_config->CndSet("aptwebserver::directoryindex", "index.html");

std::vector<std::string> messages;
int client;
@@ -693,7 +705,7 @@ int main(int const argc, const char * argv[])
}
else if (DirectoryExists(filename) == true)
{
if (filename == "." || filename[filename.length()-1] == '/')
if (filename[filename.length()-1] == '/')
sendDirectoryListing(client, filename, *m, sendContent);
else
sendRedirect(client, 301, filename.append("/"), *m, sendContent);


Loading…
Cancel
Save