Module Name: src
Committed By: mrg
Date: Tue Dec 4 02:52:42 UTC 2018
Modified Files:
src/libexec/httpd: CHANGES bozohttpd.8 bozohttpd.c dir-index-bozo.c
Log Message:
use html tables for directory index.
from "Rajeev V. Pillai" <[email protected]>
call this bozohttpd 20181204.
To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 src/libexec/httpd/CHANGES
cvs rdiff -u -r1.74 -r1.75 src/libexec/httpd/bozohttpd.8
cvs rdiff -u -r1.100 -r1.101 src/libexec/httpd/bozohttpd.c
cvs rdiff -u -r1.28 -r1.29 src/libexec/httpd/dir-index-bozo.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/libexec/httpd/CHANGES
diff -u src/libexec/httpd/CHANGES:1.30 src/libexec/httpd/CHANGES:1.31
--- src/libexec/httpd/CHANGES:1.30 Sun Nov 25 23:48:14 2018
+++ src/libexec/httpd/CHANGES Tue Dec 4 02:52:42 2018
@@ -1,4 +1,8 @@
-$NetBSD: CHANGES,v 1.30 2018/11/25 23:48:14 mrg Exp $
+$NetBSD: CHANGES,v 1.31 2018/12/04 02:52:42 mrg Exp $
+
+changes in bozohttpd 20181204:
+ o change directory indexing to use html tables. from
+ [email protected]
changes in bozohttpd 20181125:
o fixes for option parsing introduced in bozohttpd 20181123
Index: src/libexec/httpd/bozohttpd.8
diff -u src/libexec/httpd/bozohttpd.8:1.74 src/libexec/httpd/bozohttpd.8:1.75
--- src/libexec/httpd/bozohttpd.8:1.74 Fri Nov 23 08:11:20 2018
+++ src/libexec/httpd/bozohttpd.8 Tue Dec 4 02:52:42 2018
@@ -1,4 +1,4 @@
-.\" $NetBSD: bozohttpd.8,v 1.74 2018/11/23 08:11:20 mrg Exp $
+.\" $NetBSD: bozohttpd.8,v 1.75 2018/12/04 02:52:42 mrg Exp $
.\"
.\" $eterna: bozohttpd.8,v 1.101 2011/11/18 01:25:11 mrg Exp $
.\"
@@ -26,7 +26,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd November 19, 2018
+.Dd December 4, 2018
.Dt BOZOHTTPD 8
.Os
.Sh NAME
@@ -599,7 +599,7 @@ The focus has always been simplicity and
and regular code audits.
This manual documents
.Nm
-version 20181123.
+version 20181204.
.Sh AUTHORS
.An -nosplit
.Nm
@@ -717,7 +717,7 @@ HTTP basic authorization support and muc
.It
.An Rajeev V. Pillai
.Aq Mt [email protected]
-provided several fixes for virtual hosting
+provided several fixes for virtual hosting and directory indexing
.It
.An Jeremy C. Reed
.Aq Mt [email protected]
Index: src/libexec/httpd/bozohttpd.c
diff -u src/libexec/httpd/bozohttpd.c:1.100 src/libexec/httpd/bozohttpd.c:1.101
--- src/libexec/httpd/bozohttpd.c:1.100 Tue Dec 4 00:26:15 2018
+++ src/libexec/httpd/bozohttpd.c Tue Dec 4 02:52:42 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: bozohttpd.c,v 1.100 2018/12/04 00:26:15 mrg Exp $ */
+/* $NetBSD: bozohttpd.c,v 1.101 2018/12/04 02:52:42 mrg Exp $ */
/* $eterna: bozohttpd.c,v 1.178 2011/11/18 09:21:15 mrg Exp $ */
@@ -1441,7 +1441,7 @@ check_bzredirect(bozo_httpreq_t *request
bozohttpd_t *httpd = request->hr_httpd;
struct stat sb;
char dir[MAXPATHLEN], redir[MAXPATHLEN], redirpath[MAXPATHLEN + 1],
- path[MAXPATHLEN];
+ path[MAXPATHLEN + 1];
char *basename, *finalredir;
int rv, absolute;
@@ -2076,6 +2076,9 @@ bozo_escape_html(bozohttpd_t *httpd, con
case '&':
j += 5;
break;
+ case '"':
+ j += 6;
+ break;
}
}
@@ -2106,6 +2109,10 @@ bozo_escape_html(bozohttpd_t *httpd, con
memcpy(tmp + j, "&", 5);
j += 5;
break;
+ case '"':
+ memcpy(tmp + j, """, 6);
+ j += 6;
+ break;
default:
tmp[j++] = url[i];
}
Index: src/libexec/httpd/dir-index-bozo.c
diff -u src/libexec/httpd/dir-index-bozo.c:1.28 src/libexec/httpd/dir-index-bozo.c:1.29
--- src/libexec/httpd/dir-index-bozo.c:1.28 Thu Nov 22 08:54:08 2018
+++ src/libexec/httpd/dir-index-bozo.c Tue Dec 4 02:52:42 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: dir-index-bozo.c,v 1.28 2018/11/22 08:54:08 mrg Exp $ */
+/* $NetBSD: dir-index-bozo.c,v 1.29 2018/12/04 02:52:42 mrg Exp $ */
/* $eterna: dir-index-bozo.c,v 1.20 2011/11/18 09:21:15 mrg Exp $ */
@@ -45,14 +45,6 @@
#include "bozohttpd.h"
-static void
-directory_hr(bozohttpd_t *httpd)
-{
-
- bozo_printf(httpd,
- "<hr noshade align=\"left\" width=\"80%%\">\r\n\r\n");
-}
-
/*
* output a directory index. return 1 if it actually did something..
*/
@@ -62,12 +54,10 @@ bozo_dir_index(bozo_httpreq_t *request,
bozohttpd_t *httpd = request->hr_httpd;
struct stat sb;
struct dirent **de, **deo;
- struct tm *tm;
DIR *dp;
char buf[MAXPATHLEN];
- char spacebuf[48];
char *file = NULL, *printname = NULL;
- int l, k, j, i;
+ int k, j, i;
if (!isindex || !httpd->dir_indexing)
return 0;
@@ -117,23 +107,19 @@ bozo_dir_index(bozo_httpreq_t *request,
printname = bozostrdup(httpd, request, request->hr_file);
#endif /* !NO_USER_SUPPORT */
- bozo_printf(httpd,
- "<html><head><title>Index of %s</title></head>\r\n",
+ bozo_printf(httpd, "<!DOCTYPE html>\r\n");
+ bozo_printf(httpd, "<html><head><meta charset=\"utf-8\"/>\r\n");
+ bozo_printf(httpd, "<style type=\"text/css\">tr.o {background:#f4f4f4;}</style>\r\n");
+ bozo_printf(httpd, "<title>Index of %s</title></head>\r\n",
printname);
bozo_printf(httpd, "<body><h1>Index of %s</h1>\r\n",
printname);
- bozo_printf(httpd, "<pre>\r\n");
-#define NAMELEN 40
-#define LMODLEN 19
- bozo_printf(httpd, "Name "
- "Last modified "
- "Size\n");
- bozo_printf(httpd, "</pre>");
- directory_hr(httpd);
- bozo_printf(httpd, "<pre>");
+ bozo_printf(httpd, "<table>\r\n<thead>\r\n");
+ bozo_printf(httpd, "<tr class=\"o\"><th>Name<th>Last modified<th align=right>Size\r\n");
+ bozo_printf(httpd, "<tbody>\r\n");
- for (j = k = scandir(dirpath, &de, NULL, alphasort), deo = de;
- j--; de++) {
+ for (j = k = scandir(dirpath, &de, NULL, alphasort), deo = de, i = 1;
+ j--; de++, i++) {
int nostat = 0;
char *name = (*de)->d_name;
char *urlname, *htmlname;
@@ -147,62 +133,39 @@ bozo_dir_index(bozo_httpreq_t *request,
if (stat(buf, &sb))
nostat = 1;
- l = 0;
-
urlname = bozo_escape_rfc3986(httpd, name, 0);
htmlname = bozo_escape_html(httpd, name);
if (htmlname == NULL)
htmlname = name;
+ bozo_printf(httpd, "<tr class=\"%s\"><td>", (i & 1) ? "o" : "e");
if (strcmp(name, "..") == 0) {
bozo_printf(httpd, "<a href=\"../\">");
- l += bozo_printf(httpd, "Parent Directory");
+ bozo_printf(httpd, "Parent Directory");
} else if (!nostat && S_ISDIR(sb.st_mode)) {
bozo_printf(httpd, "<a href=\"%s/\">", urlname);
- l += bozo_printf(httpd, "%s/", htmlname);
+ bozo_printf(httpd, "%s/", htmlname);
} else if (strchr(name, ':') != NULL) {
/* RFC 3986 4.2 */
bozo_printf(httpd, "<a href=\"./%s\">", urlname);
- l += bozo_printf(httpd, "%s", htmlname);
+ bozo_printf(httpd, "%s", htmlname);
} else {
bozo_printf(httpd, "<a href=\"%s\">", urlname);
- l += bozo_printf(httpd, "%s", htmlname);
+ bozo_printf(httpd, "%s", htmlname);
}
if (htmlname != name)
free(htmlname);
bozo_printf(httpd, "</a>");
- /* NAMELEN spaces */
- /*LINTED*/
- assert(/*CONSTCOND*/sizeof(spacebuf) > NAMELEN);
- i = (l < NAMELEN) ? (NAMELEN - l) : 0;
- i++;
- memset(spacebuf, ' ', (size_t)i);
- spacebuf[i] = '\0';
- bozo_printf(httpd, "%s", spacebuf);
- l += i;
-
if (nostat)
- bozo_printf(httpd, "? ?");
+ bozo_printf(httpd, "<td>?<td>?\r\n");
else {
unsigned long long len;
- len = ((unsigned long long)sb.st_size + 1023) / 1024;
-
- tm = gmtime(&sb.st_mtime);
- strftime(buf, sizeof buf, "%d-%b-%Y %R", tm);
- l += bozo_printf(httpd, "%s", buf);
-
- /* LMODLEN spaces */
- /*LINTED*/
- assert(/*CONSTCOND*/sizeof(spacebuf) > LMODLEN);
- i = (l < (LMODLEN+NAMELEN+1)) ?
- ((LMODLEN+NAMELEN+1) - l) : 0;
- i++;
- memset(spacebuf, ' ', (size_t)i);
- spacebuf[i] = '\0';
- bozo_printf(httpd, "%s", spacebuf);
+ strftime(buf, sizeof buf, "%d-%b-%Y %R", gmtime(&sb.st_mtime));
+ bozo_printf(httpd, "<td>%s", buf);
- bozo_printf(httpd, "%12llukB", len);
+ len = ((unsigned long long)sb.st_size + 1023) / 1024;
+ bozo_printf(httpd, "<td align=right>%llukB", len);
}
bozo_printf(httpd, "\r\n");
}
@@ -211,8 +174,7 @@ bozo_dir_index(bozo_httpreq_t *request,
while (k--)
free(deo[k]);
free(deo);
- bozo_printf(httpd, "</pre>");
- directory_hr(httpd);
+ bozo_printf(httpd, "</table>\r\n");
bozo_printf(httpd, "</body></html>\r\n\r\n");
bozo_flush(httpd, stdout);
@@ -222,4 +184,3 @@ done:
return 1;
}
#endif /* NO_DIRINDEX_SUPPORT */
-