]> git.saurik.com Git - apt.git/commitdiff
webserver: add directoryIndex support defaulting to index.html
authorDavid Kalnischkies <kalnischkies@gmail.com>
Wed, 16 Oct 2013 16:43:21 +0000 (18:43 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Sat, 30 Nov 2013 11:38:26 +0000 (12:38 +0100)
Git-Dch: Ignore

test/interactive-helper/aptwebserver.cc

index 4ea1794bb3d6f9505d4a03dfcb95446223c5ab80..0e04826c513338a46641bd8f7a0791f0cb02b592 100644 (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;
           << "</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;
       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)
    // 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] == '~')
    {
    // 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/";
    }
       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;
 }
                                                                        /*}}}*/
    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::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;
 
    std::vector<std::string> messages;
    int client;
@@ -693,7 +705,7 @@ int main(int const argc, const char * argv[])
            }
            else if (DirectoryExists(filename) == true)
            {
            }
            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);
                  sendDirectoryListing(client, filename, *m, sendContent);
               else
                  sendRedirect(client, 301, filename.append("/"), *m, sendContent);