|
|
@@ -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);
|