]> code.citadel.org Git - citadel.git/blobdiff - webcit/static.c
Don't leak FD's while serving static files if they're not there
[citadel.git] / webcit / static.c
index 1bac24a745886a1bd6255302613009a26a2cf254..145014bc932b821ab315ed88e80811f644f28201 100644 (file)
@@ -60,6 +60,7 @@ void output_static(const char *what)
                        begin_burst();
                        wc_printf("Cannot fstat %s: %s\n", what, strerror(errno));
                        end_burst();
+                       if (fd > 0) close(fd);
                        return;
                }
 
@@ -223,6 +224,8 @@ void output_flat_static(void)
        void *vFile;
        StrBuf *File;
 
+       if (WCC->Hdr->HR.Handler == NULL)
+               return;
        if (GetHash(StaticFilemappings[0], SKEY(WCC->Hdr->HR.Handler->Name), &vFile) &&
            (vFile != NULL))
        {
@@ -269,6 +272,31 @@ void output_static_3(void)
        output_static_safe(StaticFilemappings[3]);
 }
 
+
+/*
+ * robots.txt
+ */
+void robots_txt(void) {
+       output_headers(0, 0, 0, 0, 0, 0);
+
+       hprintf("Content-type: text/plain\r\n"
+               "Server: %s\r\n"
+               "Connection: close\r\n",
+               PACKAGE_STRING);
+       begin_burst();
+
+       wc_printf("User-agent: *\r\n"
+               "Disallow:\r\n"
+               "Sitemap: %s/sitemap.xml\r\n"
+               "\r\n"
+               ,
+               ChrPtr(site_prefix)
+       );
+
+       wDumpContent(0);
+}
+
+
 void 
 ServerStartModule_STATIC
 (void)
@@ -298,7 +326,7 @@ InitModule_STATIC
        LoadStaticDir(static_dirs[2], StaticFilemappings[2], "");
        LoadStaticDir(static_dirs[3], StaticFilemappings[3], "");
 
-       WebcitAddUrlHandler(HKEY("robots.txt"), "", 0, output_flat_static, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC|LOGCHATTY);
+       WebcitAddUrlHandler(HKEY("robots.txt"), "", 0, robots_txt, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC|LOGCHATTY);
        WebcitAddUrlHandler(HKEY("favicon.ico"), "", 0, output_flat_static, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC|LOGCHATTY);
        WebcitAddUrlHandler(HKEY("static"), "", 0, output_static_0, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC|LOGCHATTY);
        WebcitAddUrlHandler(HKEY("static.local"), "", 0, output_static_1, ANONYMOUS|COOKIEUNNEEDED|ISSTATIC|LOGCHATTY);