summaryrefslogtreecommitdiff
path: root/www/publicfile
diff options
context:
space:
mode:
Diffstat (limited to 'www/publicfile')
-rw-r--r--www/publicfile/Makefile93
-rw-r--r--www/publicfile/distinfo2
-rw-r--r--www/publicfile/files/patch-Makefile49
-rw-r--r--www/publicfile/files/patch-auto_home_stage.h9
-rw-r--r--www/publicfile/files/patch-error.h11
-rw-r--r--www/publicfile/files/patch-fetch.c20
-rw-r--r--www/publicfile/files/patch-hier.c14
-rw-r--r--www/publicfile/files/publicfile-0.52-commonlog-2.patch463
-rw-r--r--www/publicfile/files/publicfile-0.52-filetype-diff34
-rw-r--r--www/publicfile/files/publicfile-0.52_basicauth.patch629
-rw-r--r--www/publicfile/files/publicfile.sslserver36
-rw-r--r--www/publicfile/files/redirect-slash-patch217
-rw-r--r--www/publicfile/pkg-descr20
-rw-r--r--www/publicfile/pkg-plist4
14 files changed, 0 insertions, 1601 deletions
diff --git a/www/publicfile/Makefile b/www/publicfile/Makefile
deleted file mode 100644
index fdc0cb24d936..000000000000
--- a/www/publicfile/Makefile
+++ /dev/null
@@ -1,93 +0,0 @@
-PORTNAME= publicfile
-PORTVERSION= 0.52
-PORTREVISION= 3
-CATEGORIES= www ftp
-MASTER_SITES= http://cr.yp.to/publicfile/
-
-MAINTAINER= ports@FreeBSD.org
-COMMENT= Secure, read-only, anonymous HTTP/FTP server
-WWW= https://cr.yp.to/publicfile.html
-
-# Converted from LEGAL_TEXT
-LICENSE= djb
-LICENSE_NAME= djb
-LICENSE_TEXT= No license -- see http://cr.yp.to/softwarelaw.html
-LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
-
-DEPRECATED= Unmaintained for years upstream and in tree, consider using www/darkhttpd , www/miniserve and/or ftp/tnftpd , ftp/unftp
-EXPIRATION_DATE=2025-04-30
-
-RUN_DEPENDS= setuidgid:sysutils/daemontools \
- tcpserver:sysutils/ucspi-tcp
-
-OPTIONS_DEFINE= BASICAUTH COMMONLOG REDIRECT_SLASH ENV_FILETYPES SSL
-BASICAUTH_DESC= basic HTTP authentication support
-COMMONLOG_DESC= support for Apache common log format
-REDIRECT_SLASH_DESC= do not require trailing slash on directories
-ENV_FILETYPES_DESC= get mime types from the environment
-SSL_DESC= provide SSL support through ucspi-ssl
-
-CONFLICTS= xshttpd-3*
-
-.include <bsd.port.options.mk>
-
-.if ${PORT_OPTIONS:MBASICAUTH} && ${PORT_OPTIONS:MCOMMONLOG}
-BROKEN= common log and auth patches are currently in conflict
-.endif
-
-.if ${PORT_OPTIONS:MBASICAUTH} && ${PORT_OPTIONS:MREDIRECT_SLASH}
-BROKEN= redirect slash and auth patches are currently in conflict
-.endif
-
-.if ${PORT_OPTIONS:MREDIRECT_SLASH}
-pre-configure::
- @${PATCH} -d ${PATCH_WRKSRC} ${PATCH_ARGS} < ${PATCHDIR}/redirect-slash-patch
-.endif
-
-.if ${PORT_OPTIONS:MENV_FILETYPES}
-pre-configure::
- @${PATCH} -d ${PATCH_WRKSRC} ${PATCH_ARGS} < ${PATCHDIR}/publicfile-0.52-filetype-diff
-.endif
-
-.if ${PORT_OPTIONS:MSSL}
-pre-configure::
- @${PATCH} -d ${PATCH_WRKSRC} ${PATCH_ARGS} < ${PATCHDIR}/publicfile.sslserver
-RUN_DEPENDS+= sslserver:sysutils/ucspi-ssl
-.endif
-
-.if ${PORT_OPTIONS:MBASICAUTH}
-pre-configure::
- @${PATCH} -d ${PATCH_WRKSRC} ${PATCH_ARGS} -p1 < \
- ${PATCHDIR}/publicfile-0.52_basicauth.patch
-PATCH_DEPENDS+= ${NONEXISTENT}:databases/cdb:extract
-PLIST_SUB+= BASICAUTH=""
-.else
-PLIST_SUB+= BASICAUTH="@comment "
-.endif
-
-.if ${PORT_OPTIONS:MCOMMONLOG}
-pre-configure::
- @${PATCH} -d ${PATCH_WRKSRC} ${PATCH_ARGS} -p1 < \
- ${PATCHDIR}/publicfile-0.52-commonlog-2.patch
-.endif
-
-ALL_TARGET= it
-INSTALL_TARGET= setup check
-
-post-extract:
-.if ${PORT_OPTIONS:MBASICAUTH}
- @${LN} -s $$(${MAKE} -C ${PORTSDIR}/databases/cdb -V WRKSRC) ${WRKSRC}/cdb
-.endif
-
-post-patch:
- @${ECHO_CMD} "${CC} ${CFLAGS}" > ${WRKSRC}/conf-cc
- @${ECHO_CMD} "${CC} -s" > ${WRKSRC}/conf-ld
- @${ECHO_CMD} "${PREFIX}" > ${WRKSRC}/conf-home
- @${ECHO_CMD} "${STAGEDIR}${PREFIX}" > ${WRKSRC}/conf-stage
-.if ${PORT_OPTIONS:MBASICAUTH}
- @${ECHO_CMD} "${CC} ${CFLAGS}" > ${WRKSRC}/cdb/conf-cc
- @${ECHO_CMD} "${CC} -s" > ${WRKSRC}/cdb/conf-ld
- @${ECHO_CMD} "${PREFIX}" > ${WRKSRC}/cdb/conf-home
-.endif
-
-.include <bsd.port.mk>
diff --git a/www/publicfile/distinfo b/www/publicfile/distinfo
deleted file mode 100644
index 061006887c05..000000000000
--- a/www/publicfile/distinfo
+++ /dev/null
@@ -1,2 +0,0 @@
-SHA256 (publicfile-0.52.tar.gz) = 3f9fcf737bfe48910812cc357a31bf1f2e3da2490dbd175ce535830f251c08ef
-SIZE (publicfile-0.52.tar.gz) = 34892
diff --git a/www/publicfile/files/patch-Makefile b/www/publicfile/files/patch-Makefile
deleted file mode 100644
index 35ce26a1214b..000000000000
--- a/www/publicfile/files/patch-Makefile
+++ /dev/null
@@ -1,49 +0,0 @@
---- Makefile.orig 1999-11-09 07:23:46 UTC
-+++ Makefile
-@@ -32,6 +32,14 @@ compile auto_home.c
- compile auto_home.c
- ./compile auto_home.c
-
-+auto_home_stage.c: \
-+auto-str conf-stage
-+ ./auto-str auto_home `head -1 conf-stage` > auto_home_stage.c
-+
-+auto_home_stage.o: \
-+compile auto_home_stage.c
-+ ./compile auto_home_stage.c
-+
- byte_chr.o: \
- compile byte_chr.c byte.h
- ./compile byte_chr.c
-@@ -231,7 +239,7 @@ hier.o: \
- ./choose clr tryshsgr hasshsgr.h1 hasshsgr.h2 > hasshsgr.h
-
- hier.o: \
--compile hier.c auto_home.h
-+compile hier.c auto_home_stage.h
- ./compile hier.c
-
- httpd: \
-@@ -257,9 +265,9 @@ install: \
- ./compile httpdate.c
-
- install: \
--load install.o hier.o auto_home.o strerr.a substdio.a open.a error.a \
-+load install.o hier.o auto_home_stage.o strerr.a substdio.a open.a error.a \
- str.a
-- ./load install hier.o auto_home.o strerr.a substdio.a \
-+ ./load install hier.o auto_home_stage.o strerr.a substdio.a \
- open.a error.a str.a
-
- install.o: \
-@@ -268,8 +276,8 @@ instcheck: \
- ./compile install.c
-
- instcheck: \
--load instcheck.o hier.o auto_home.o strerr.a substdio.a error.a str.a
-- ./load instcheck hier.o auto_home.o strerr.a substdio.a \
-+load instcheck.o hier.o auto_home_stage.o strerr.a substdio.a error.a str.a
-+ ./load instcheck hier.o auto_home_stage.o strerr.a substdio.a \
- error.a str.a
-
- instcheck.o: \
diff --git a/www/publicfile/files/patch-auto_home_stage.h b/www/publicfile/files/patch-auto_home_stage.h
deleted file mode 100644
index 35880e55a9a9..000000000000
--- a/www/publicfile/files/patch-auto_home_stage.h
+++ /dev/null
@@ -1,9 +0,0 @@
---- auto_home_stage.h.orig 2024-10-25 11:20:18 UTC
-+++ auto_home_stage.h
-@@ -0,0 +1,6 @@
-+#ifndef AUTO_HOME_STAGE_H_
-+#define AUTO_HOME_STAGE_H_
-+
-+extern char auto_home[];
-+
-+#endif
diff --git a/www/publicfile/files/patch-error.h b/www/publicfile/files/patch-error.h
deleted file mode 100644
index e466f6122d08..000000000000
--- a/www/publicfile/files/patch-error.h
+++ /dev/null
@@ -1,11 +0,0 @@
---- error.h.orig 2024-10-25 11:21:26 UTC
-+++ error.h
-@@ -1,7 +1,7 @@
- #ifndef ERROR_H
- #define ERROR_H
-
--extern int errno;
-+#include <errno.h>
-
- extern int error_intr;
- extern int error_nomem;
diff --git a/www/publicfile/files/patch-fetch.c b/www/publicfile/files/patch-fetch.c
deleted file mode 100644
index be6f256cba76..000000000000
--- a/www/publicfile/files/patch-fetch.c
+++ /dev/null
@@ -1,20 +0,0 @@
---- fetch.c.orig 1999-11-09 07:23:46 UTC
-+++ fetch.c
-@@ -82,7 +82,7 @@ static void list(char *fn,int flaglong)
- substdio_puts(&ss,"\r\n");
- }
-
--static int doit(char *fn,int fddata,int fdfile,int how)
-+static void doit(char *fn,int fddata,int fdfile,int how)
- {
- DIR *dir;
- direntry *d;
-@@ -122,7 +122,7 @@ static int doit(char *fn,int fddata,int fdfile,int how
- for (;;) {
- r = read(fdfile,inbuf,sizeof inbuf);
- if (r == -1) {
-- if (errno = error_intr) continue;
-+ if (errno == error_intr) continue;
- _exit(23);
- }
- if (r == 0)
diff --git a/www/publicfile/files/patch-hier.c b/www/publicfile/files/patch-hier.c
deleted file mode 100644
index be93922dd715..000000000000
--- a/www/publicfile/files/patch-hier.c
+++ /dev/null
@@ -1,14 +0,0 @@
---- hier.c.orig 1999-11-09 07:23:46 UTC
-+++ hier.c
-@@ -2,9 +2,9 @@ void hier()
-
- void hier()
- {
-- h(auto_home,-1,-1,02755);
-+ h(auto_home,-1,-1,0755);
-
-- d(auto_home,"bin",-1,-1,02755);
-+ d(auto_home,"bin",-1,-1,0755);
-
- c(auto_home,"bin","configure",-1,-1,0755);
- c(auto_home,"bin","httpd",-1,-1,0755);
diff --git a/www/publicfile/files/publicfile-0.52-commonlog-2.patch b/www/publicfile/files/publicfile-0.52-commonlog-2.patch
deleted file mode 100644
index ed14642b22e7..000000000000
--- a/www/publicfile/files/publicfile-0.52-commonlog-2.patch
+++ /dev/null
@@ -1,463 +0,0 @@
-diff -rNC3 publicfile-0.52.orig/Makefile publicfile-0.52/Makefile
-*** publicfile-0.52.orig/Makefile Tue Nov 9 08:23:46 1999
---- publicfile-0.52/Makefile Fri Nov 9 10:09:45 2001
-***************
-*** 450,460 ****
- stralloc.a: \
- makelib stralloc_cat.o stralloc_catb.o stralloc_cats.o \
- stralloc_copy.o stralloc_eady.o stralloc_opyb.o stralloc_opys.o \
-! stralloc_pend.o stralloc_num.o
- ./makelib stralloc.a stralloc_cat.o stralloc_catb.o \
- stralloc_cats.o stralloc_copy.o stralloc_eady.o \
- stralloc_opyb.o stralloc_opys.o stralloc_pend.o \
-! stralloc_num.o
-
- stralloc_cat.o: \
- compile stralloc_cat.c byte.h stralloc.h gen_alloc.h
---- 450,460 ----
- stralloc.a: \
- makelib stralloc_cat.o stralloc_catb.o stralloc_cats.o \
- stralloc_copy.o stralloc_eady.o stralloc_opyb.o stralloc_opys.o \
-! stralloc_pend.o stralloc_num.o stralloc_opytrim.o
- ./makelib stralloc.a stralloc_cat.o stralloc_catb.o \
- stralloc_cats.o stralloc_copy.o stralloc_eady.o \
- stralloc_opyb.o stralloc_opys.o stralloc_pend.o \
-! stralloc_num.o stralloc_opytrim.o
-
- stralloc_cat.o: \
- compile stralloc_cat.c byte.h stralloc.h gen_alloc.h
-***************
-*** 484,489 ****
---- 484,493 ----
- stralloc_opyb.o: \
- compile stralloc_opyb.c stralloc.h gen_alloc.h byte.h
- ./compile stralloc_opyb.c
-+
-+ stralloc_opytrim.o: \
-+ compile stralloc_opytrim.c stralloc.h
-+ ./compile stralloc_opytrim.c
-
- stralloc_opys.o: \
- compile stralloc_opys.c byte.h str.h stralloc.h gen_alloc.h
-diff -rNC3 publicfile-0.52.orig/README.log_combined publicfile-0.52/README.log_combined
-*** publicfile-0.52.orig/README.log_combined Thu Jan 1 01:00:00 1970
---- publicfile-0.52/README.log_combined Fri Nov 9 10:09:45 2001
-***************
-*** 0 ****
---- 1,36 ----
-+ This version of publicfile has been patched to write *additional* log
-+ information to STDERR. This additional information conforms to Apache's
-+ and Netscape's "common" or "combined" log formats, i. e. a line may look
-+ like this (common log format):
-+
-+ 127.0.0.1 - - [23/Oct/2001:14:04:56 +0200] "HEAD /~conrad/hello_world_gen.swf HTTP/1.0" 200 0
-+
-+ or like this (combined log format):
-+
-+ 127.0.0.1 - - [23/Oct/2001:14:04:56 +0200] "HEAD /~conrad/hello_world_gen.swf HTTP/1.0" 200 0 "http://localhost/~conrad/hello_world.html" "Mozilla 4"
-+
-+ The meaning of the (space-separated) fields is as follows:
-+
-+ 1. Client IP-address
-+ 2. Remote logname (from ident (RFC-...) lookup - always "-" in publicfile)
-+ 3. Authenticated username (from Basic-Auth - always "-" in publicfile)
-+ 4. Human-readable timestamp enclosed in []
-+ 5. The request line enclosed in ""
-+ 6. HTTP status code
-+ 7. Number of bytes sent excluding HTTP headers
-+ 8. Referrer information sent by the browser
-+ 9. User-Agent information sent by the browser
-+
-+ These log lines can easily be distinguished from other log lines using the
-+ second field: this will always be "-" for common and combined log lines,
-+ and "read" or "dir" for publicfile standard log lines (see
-+ http://cr.yp.to/publicfile/log.html). The script "splitPublicfileLog.pl"
-+ may serve as an example how to split the log into interesting parts.
-+
-+ The logformat to be used can be selected via environment variables:
-+
-+ - HTTPD_LOG_COMMON selects common log format
-+ - HTTPD_LOG_COMBINED selects combined log format
-+
-+ The latter takes precedence over the former.
-+
-diff -rNC3 publicfile-0.52.orig/httpd.c publicfile-0.52/httpd.c
-*** publicfile-0.52.orig/httpd.c Tue Nov 9 08:23:46 1999
---- publicfile-0.52/httpd.c Fri Nov 9 10:10:51 2001
-***************
-*** 15,20 ****
---- 15,102 ----
- #include "substdio.h"
- #include "error.h"
- #include "getln.h"
-+ #include "caltime.h"
-+ #include "subfd.h"
-+ #include "env.h"
-+
-+ char logformat = 0;
-+ char *remoteip;
-+ char *months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
-+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
-+ stralloc referer = {0};
-+ stralloc agent = {0};
-+
-+ char strnum[FMT_ULONG];
-+ stralloc method = {0};
-+ stralloc url = {0};
-+ stralloc protocol = {0};
-+ stralloc host = {0};
-+
-+ void log(char *code, unsigned long length) {
-+ struct caltime ct;
-+ int dummy1, dummy2;
-+ struct tai now;
-+
-+ if (!logformat) return;
-+
-+ substdio_puts(subfderr,remoteip);
-+ substdio_puts(subfderr," - - [");
-+ tai_now(&now);
-+ caltime_utc(&ct, &now, &dummy1, &dummy2);
-+ if (ct.date.day < 10)
-+ substdio_puts(subfderr,"0");
-+ dummy1 = fmt_ulong(strnum,ct.date.day);
-+ substdio_put(subfderr,strnum,dummy1);
-+ substdio_puts(subfderr,"/");
-+ if (ct.date.month > 0 && ct.date.month < 13)
-+ substdio_puts(subfderr,months[ct.date.month-1]);
-+ substdio_puts(subfderr,"/");
-+ dummy1 = fmt_ulong(strnum,ct.date.year);
-+ substdio_put(subfderr,strnum,dummy1);
-+ substdio_puts(subfderr,":");
-+ if (ct.hour < 10)
-+ substdio_puts(subfderr,"0");
-+ dummy1 = fmt_ulong(strnum,ct.hour);
-+ substdio_put(subfderr,strnum,dummy1);
-+ substdio_puts(subfderr,":");
-+ if (ct.minute < 10)
-+ substdio_puts(subfderr,"0");
-+ dummy1 = fmt_ulong(strnum,ct.minute);
-+ substdio_put(subfderr,strnum,dummy1);
-+ substdio_puts(subfderr,":");
-+ if (ct.second < 10)
-+ substdio_puts(subfderr,"0");
-+ dummy1 = fmt_ulong(strnum,ct.second);
-+ substdio_put(subfderr,strnum,dummy1);
-+ substdio_puts(subfderr," +0000] \"");
-+ substdio_put(subfderr,method.s,method.len - 1); /* len includes \0 */
-+ substdio_puts(subfderr," ");
-+ substdio_put(subfderr,url.s,url.len);
-+ substdio_puts(subfderr," ");
-+ substdio_put(subfderr,protocol.s,protocol.len > 0 ? protocol.len - 1 : 0); /* len includes \0 */
-+ substdio_puts(subfderr,"\" ");
-+ substdio_put(subfderr,code,str_len(code) < 3 ? str_len(code) : 3);
-+ substdio_puts(subfderr," ");
-+ if (length > 0) {
-+ dummy1 = fmt_ulong(strnum,length);
-+ substdio_put(subfderr,strnum,dummy1);
-+ } else {
-+ substdio_puts(subfderr,"-");
-+ }
-+
-+ if (logformat > 1) {
-+ substdio_puts(subfderr," \"");
-+ substdio_put(subfderr,referer.s,referer.len);
-+ substdio_puts(subfderr,"\" \"");
-+ substdio_put(subfderr,agent.s,agent.len);
-+ substdio_puts(subfderr,"\"");
-+ }
-+
-+ substdio_puts(subfderr," \"");
-+ substdio_put(subfderr,host.s,host.len);
-+ substdio_puts(subfderr,"\"\n");
-+ substdio_flush(subfderr);
-+ }
-
- int safewrite(int fd,char *buf,int len)
- {
-***************
-*** 42,54 ****
- substdio_flush(&out);
- }
-
-- char strnum[FMT_ULONG];
--
-- stralloc protocol = {0};
- int protocolnum = 0;
-- stralloc method = {0};
-- stralloc url = {0};
-- stralloc host = {0};
- stralloc path = {0};
- stralloc ims = {0};
- int flagbody = 1;
---- 124,130 ----
-***************
-*** 93,98 ****
---- 169,175 ----
- out_puts("</body></html>\r\n");
- }
- out_flush();
-+ log(code, str_len(message) + 28);
- if (protocolnum >= 2) {
- shutdown(1,1);
- sleep(1); /* XXX */
-***************
-*** 105,108 ****
---- 182,186 ----
-
- void get(void)
- {
-+ char *code;
- unsigned long length;
-***************
-*** 133,143 ****
- tai_now(&now);
- if (!httpdate(&mtimestr,&mtime)) _exit(21);
- if ((ims.len < mtimestr.len) || byte_diff(mtimestr.s,mtimestr.len,ims.s))
-! header("200 ","OK");
- else {
-! header("304 ","OK");
- flagbody = 0;
- }
- if (tai_less(&mtime,&now)) {
- tai_sub(&mtimeage,&now,&mtime);
- if (tai_approx(&mtimeage) >= 60.0) {
---- 211,222 ----
- tai_now(&now);
- if (!httpdate(&mtimestr,&mtime)) _exit(21);
- if ((ims.len < mtimestr.len) || byte_diff(mtimestr.s,mtimestr.len,ims.s))
-! code = "200 ";
- else {
-! code = "304 ";
- flagbody = 0;
- }
-+ header(code,"OK");
- if (tai_less(&mtime,&now)) {
- tai_sub(&mtimeage,&now,&mtime);
- if (tai_approx(&mtimeage) >= 60.0) {
-***************
-*** 166,171 ****
---- 245,253 ----
- if (r == 0) break;
- out_put(filebuf,r);
- }
-+ else
-+ length = 0;
-+ log(code,length);
- out_flush();
- _exit(0);
- }
-***************
-*** 180,185 ****
---- 262,270 ----
- out_put(filebuf,r);
- out_puts("\r\n");
- }
-+ else
-+ length = 0;
-+ log(code,length);
-
- close(fd);
- }
-***************
-*** 216,221 ****
---- 301,314 ----
-
- sig_pipeignore();
-
-+ if (env_get("HTTPD_LOG_COMMON"))
-+ logformat = 1;
-+ if (env_get("HTTPD_LOG_COMBINED"))
-+ logformat = 2;
-+ remoteip = env_get("TCPREMOTEIP");
-+ if (!remoteip)
-+ remoteip = "0";
-+
- for (;;) {
- readline();
-
-***************
-*** 227,232 ****
---- 320,327 ----
- if (!stralloc_copys(&path,"")) _exit(21);
- if (!stralloc_copys(&protocol,"")) _exit(21);
- if (!stralloc_copys(&ims,"")) _exit(21);
-+ if (!stralloc_copys(&referer,"")) _exit(21);
-+ if (!stralloc_copys(&agent,"")) _exit(21);
- protocolnum = 2;
-
- spaces = 0;
-***************
-*** 294,299 ****
---- 389,398 ----
- barf("412 ","I do not accept If-None-Match");
- if (case_startb(field.s,field.len,"if-unmodified-since:"))
- barf("412 ","I do not accept If-Unmodified-Since");
-+ if (case_startb(field.s,field.len,"referer:"))
-+ if (!stralloc_copytrim(&referer,field.s + 8,field.len - 8)) _exit(21);
-+ if (case_startb(field.s,field.len,"user-agent:"))
-+ if (!stralloc_copytrim(&agent,field.s + 11,field.len - 11)) _exit(21);
- if (case_startb(field.s,field.len,"host:"))
- if (!host.len)
- for (i = 5;i < field.len;++i)
-diff -rNC3 publicfile-0.52.orig/splitPublicfileLog.pl publicfile-0.52/splitPublicfileLog.pl
-*** publicfile-0.52.orig/splitPublicfileLog.pl Thu Jan 1 01:00:00 1970
---- publicfile-0.52/splitPublicfileLog.pl Fri Nov 9 10:09:45 2001
-***************
-*** 0 ****
---- 1,119 ----
-+ #!/usr/bin/perl -w
-+
-+ # This script will read lines from stdin. All lines starting with
-+ # "a.b.c.d - " (for an IP-number a.b.c.d) will be written to the
-+ # "access logfile" given as the first argument. Anything else will be
-+ # prepended with a timestamp and
-+ # written to the "error logfile" given as the second argument.
-+ # Note that the messages usually are not really *error* messages, but
-+ # simply the standard publicfile output.
-+
-+ use strict;
-+ use Symbol;
-+
-+ if ($#ARGV < 0 || $#ARGV > 3) {
-+ &usage();
-+ }
-+
-+ local $main::logdir;
-+ local $main::accessfile;
-+ local $main::errorfile;
-+ local $main::multilog;
-+ local %main::handles = ();
-+
-+ if ($ARGV[0] eq "-m") {
-+ $main::multilog = 1;
-+ if ($#ARGV != 3) { &usage(); }
-+ $main::logdir = $ARGV[1]."/";
-+ $main::accessfile = $main::logdir.$ARGV[2];
-+ $main::errorfile = $main::logdir.$ARGV[3];
-+ } else {
-+ $main::multilog = 0;
-+ if ($#ARGV != 1) { &usage(); }
-+ $main::accessfile = $ARGV[0];
-+ $main::errorfile = $ARGV[1];
-+ }
-+
-+ #open(ACCESS, ">>".$ARGV[0]) || die("Can't open access logfile!");
-+ #open(ERROR, ">>".$ARGV[1]) || die("Can't open error logfile!");
-+ $SIG{PIPE} = \&closeAndExit;
-+ $SIG{TERM} = \&closeAndExit;
-+ $SIG{QUIT} = \&closeAndExit;
-+ $SIG{INT} = \&closeAndExit;
-+ $SIG{HUP} = \&closeAll;
-+
-+ while($_ = <STDIN>) {
-+ if (/^\d+\.\d+\.\d+\.\d+ - /) {
-+ my $host = "";
-+ if ($main::multilog && / \"([^\"\/]*)\"[\r\n]*$/) {
-+ $_ = $`."\n";
-+ $host = $1;
-+ }
-+ my $fh = &getHandle($host);
-+ print $fh $_;
-+ } else {
-+ my $fh = &getHandle($main::errorfile);
-+ print $fh time()." $_";
-+ }
-+ }
-+
-+ closeAndExit("End of input");
-+
-+ sub closeAll {
-+ foreach my $key (keys %main::handles) {
-+ my $fh = $main::handles{$key};
-+ close $fh;
-+ delete $main::handles{$key};
-+ }
-+ }
-+
-+ sub closeAndExit {
-+ my $reason = shift;
-+ my $now = time();
-+
-+ my $fh = &getHandle($main::errorfile);
-+ print $fh "$now $reason received\n";
-+ print STDERR "$now $reason received\n";
-+ &closeAll();
-+ exit 0;
-+ }
-+
-+ sub getHandle {
-+ my $key = shift;
-+ my $res = 0;
-+
-+ if (defined($main::handles{$key})) {
-+ return $main::handles{$key};
-+ }
-+
-+ my $fh = Symbol::gensym();
-+ if ($key eq $main::errorfile) {
-+ open($fh, ">>".$main::errorfile) || die("Can't open error logfile!");
-+ } else {
-+ if ($main::multilog) {
-+ my $fn = $main::logdir.$key;
-+ if (-f $fn && -w $fn) {
-+ $res = open($fh, ">>$fn");
-+ }
-+ }
-+ if (!$res) {
-+ open($fh, ">>".$main::accessfile) || die("Can't open error logfile!");
-+ }
-+ }
-+
-+ $main::handles{$key} = $fh;
-+ return $fh;
-+ }
-+
-+ sub usage {
-+ print STDERR "Usage: $0 <access-path> <error-path>\n";
-+ print STDERR " or: $0 -m <logdir> <access-file> <error-file>\n";
-+ print STDERR "The first form will separate publicfile standard messages from \"common\" log\n";
-+ print STDERR "lines. The second form will write \"common\" lines to <logdir>/<hostname>\n";
-+ print STDERR "where <hostname> is the host given in the request. The file <logdir>/<hostname>\n";
-+ print STDERR "must exist before it will be used. Anything for which no suitable logfile can\n";
-+ print STDERR "be found will be logged to <logdir>/<access-path>.\n";
-+
-+ exit 1;
-+ }
-+
-diff -rNC3 publicfile-0.52.orig/stralloc.h publicfile-0.52/stralloc.h
-*** publicfile-0.52.orig/stralloc.h Tue Nov 9 08:23:46 1999
---- publicfile-0.52/stralloc.h Fri Nov 9 10:09:45 2001
-***************
-*** 12,17 ****
---- 12,18 ----
- extern int stralloc_copys();
- extern int stralloc_cats();
- extern int stralloc_copyb();
-+ extern int stralloc_copytrim();
- extern int stralloc_catb();
- extern int stralloc_append(); /* beware: this takes a pointer to 1 char */
- extern int stralloc_starts();
-diff -rNC3 publicfile-0.52.orig/stralloc_opytrim.c publicfile-0.52/stralloc_opytrim.c
-*** publicfile-0.52.orig/stralloc_opytrim.c Thu Jan 1 01:00:00 1970
---- publicfile-0.52/stralloc_opytrim.c Fri Nov 9 10:09:45 2001
-***************
-*** 0 ****
---- 1,17 ----
-+ #include "stralloc.h"
-+
-+ int stralloc_copytrim(sa,s,n)
-+ stralloc *sa;
-+ char *s;
-+ unsigned int n;
-+ {
-+ while (n > 0 &&
-+ (s[n] == ' ' || s[n] == '\t' || s[n] == '\n' || s[n] == '\r')) n--;
-+ while (n > 0 &&
-+ (s[0] == ' ' || s[0] == '\t' || s[0] == '\n' || s[0] == '\r')) {
-+ n--;
-+ s++;
-+ }
-+
-+ return stralloc_copyb(sa,s,n);
-+ }
diff --git a/www/publicfile/files/publicfile-0.52-filetype-diff b/www/publicfile/files/publicfile-0.52-filetype-diff
deleted file mode 100644
index 3c963feca229..000000000000
--- a/www/publicfile/files/publicfile-0.52-filetype-diff
+++ /dev/null
@@ -1,34 +0,0 @@
---- filetype.c.old Mon Dec 6 10:43:36 1999
-+++ filetype.c Mon Dec 6 10:50:36 1999
-@@ -1,5 +1,6 @@
- #include "filetype.h"
- #include "str.h"
-+#include "env.h"
-
- void filetype(char *fn,stralloc *contenttype)
- {
-@@ -22,7 +23,7 @@
- if (!stralloc_append(contenttype,&ch)) _exit(21);
- }
- else {
-- result = "text/plain";
-+ result = 0;
- if (str_equal(x,".html")) result = "text/html";
- else if (str_equal(x,".gz")) result = "application/x-gzip";
- else if (str_equal(x,".dvi")) result = "application/x-dvi";
-@@ -32,6 +33,15 @@
- else if (str_equal(x,".jpeg")) result = "image/jpeg";
- else if (str_equal(x,".png")) result = "image/png";
- else if (str_equal(x,".mpeg")) result = "video/mpeg";
-+ if (!result) {
-+ stralloc envname = {0};
-+ if (!stralloc_copys(&envname,"CT_")) _exit(21);
-+ if (!stralloc_cats(&envname,x+1)) _exit(21);
-+ if (!stralloc_0(&envname)) _exit(21);
-+ result=env_get(envname.s);
-+ alloc_free(envname.s); /* is this the right function */
-+ }
-+ if (!result) result="text/plain";
-
- if (!stralloc_cats(contenttype,result)) _exit(21);
- }
diff --git a/www/publicfile/files/publicfile-0.52_basicauth.patch b/www/publicfile/files/publicfile-0.52_basicauth.patch
deleted file mode 100644
index 65bcc3a425c6..000000000000
--- a/www/publicfile/files/publicfile-0.52_basicauth.patch
+++ /dev/null
@@ -1,629 +0,0 @@
-diff -N -u -r publicfile-0.52.orig/Makefile publicfile-0.52/Makefile
---- publicfile-0.52.orig/Makefile Mon Nov 8 23:23:46 1999
-+++ publicfile-0.52/Makefile Wed Aug 29 20:27:09 2001
-@@ -234,21 +234,44 @@
- compile hier.c auto_home.h
- ./compile hier.c
-
-+htrules: \
-+load htrules.o base64.o
-+ ./load htrules cdb.a base64.o byte.a getln.a stralloc.a alloc.a \
-+ substdio.a str.a buffer.a unix.a
-+
-+htrules.o: \
-+compile htrules.c strerr.h stralloc.h gen_alloc.h getln.h buffer.h \
-+stralloc.h buffer.h exit.h fmt.h byte.h cdb_make.h buffer.h uint32.h \
-+base64.h
-+ ./compile htrules.c
-+
-+base64.o: \
-+compile base64.c base64.h
-+ ./compile base64.c
-+
- httpd: \
- load httpd.o main.o pathdecode.o file.o filetype.o httpdate.o \
- percent.o prot.o timeoutread.o timeoutwrite.o libtai.a case.a getln.a \
- stralloc.a alloc.a substdio.a error.a open.a sig.a env.a str.a fs.a \
--socket.lib
-+socket.lib readclose.o openreadclose.o
- ./load httpd main.o pathdecode.o file.o filetype.o \
- httpdate.o percent.o prot.o timeoutread.o timeoutwrite.o \
- libtai.a case.a getln.a stralloc.a alloc.a substdio.a \
-- error.a open.a sig.a env.a str.a fs.a `cat socket.lib`
-+ error.a open.a sig.a env.a str.a fs.a cdb.a byte.a seek_set.o \
-+ readclose.o openreadclose.o `cat socket.lib`
-+
-+.cdb:
-+ (cd cdb && \
-+ ${MAKE} && \
-+ cp -vp cdb_make.h buffer.h cdb.h uint32.h cdb.a byte.a seek_set.o \
-+ cdb_make.o error.c buffer.a unix.a ${PWD}/ && touch ${PWD}/.cdb)
-+cdb buffer.h cdb_make.h cdb.h uint32.h cdb.a byte.a seek_set.o cdb_make.o error.c buffer.a unix.a: .cdb
-
- httpd.o: \
- compile httpd.c pathdecode.h stralloc.h gen_alloc.h file.h tai.h \
- uint64.h filetype.h stralloc.h percent.h stralloc.h stralloc.h sig.h \
- exit.h fmt.h case.h str.h tai.h httpdate.h stralloc.h tai.h \
--timeoutread.h timeoutwrite.h substdio.h error.h getln.h
-+timeoutread.h timeoutwrite.h substdio.h error.h getln.h byte.h cdb.h
- ./compile httpd.c
-
- httpdate.o: \
-@@ -358,6 +381,11 @@
- compile open_trunc.c open.h
- ./compile open_trunc.c
-
-+openreadclose.o: \
-+compile openreadclose.c error.h open.h readclose.h stralloc.h \
-+gen_alloc.h openreadclose.h stralloc.h
-+ ./compile openreadclose.c
-+
- pathdecode.o: \
- compile pathdecode.c pathdecode.h stralloc.h gen_alloc.h
- ./compile pathdecode.c
-@@ -367,7 +395,7 @@
- ./compile percent.c
-
- prog: \
--configure httpd ftpd rts utime
-+cdb configure httpd ftpd rts utime htrules
-
- prot.o: \
- compile prot.c hasshsgr.h prot.h
---- publicfile-0.52.orig/README.basicauth Wed Dec 31 16:00:00 1969
-+++ publicfile-0.52/README.basicauth Wed Aug 29 22:16:02 2001
-@@ -0,0 +1,100 @@
-+Here is a patch for publicfile to allow for Basic Auth.
-+
-+Building Instructions:
-+
-+Save this patch as publicfile-0.52.basicauth.patch
-+Download publicfile-0.52
-+Download cdb-0.75
-+
-+gunzip publicfile-0.52.tar
-+gunzip cdb-0.75.tar
-+tar -xf publicfile-0.52.tar
-+cd publicfile-0.52
-+tar -xf ../cdb-0.75.tar
-+patch -p1 < publicfile-0.52.basicauth.patch
-+
-+Follow normal installation instructions for publicfile beginning with
-+'make setup check'
-+
-+Usage Instructions:
-+
-+Once this patch has been applied, httpd will check for a file
-+called '.access' in the current directory of any requested
-+file. e.g, if /public/file/0/path/to/file.html is requested, httpd
-+will first check for /public/file/0/path/to/.access.
-+
-+.access should have the format:
-+ realm_id:realm_txt
-+
-+realm_id is used as documented below. realm_txt is typically
-+presented by the user's browser. .access must be readable by httpd
-+and only protects a specific directory. Sub-directories are not
-+protected unless they also contain a .access file.
-+
-+An additional program will be installed in /usr/local/publicfile (or
-+whatever conf-home is) called htrules. Use this like tcprules:
-+
-+cd /public/file
-+htrules access.cdb access.tmp < access
-+
-+This may safely be run at any time.
-+
-+access should have the format:
-+
-+ # this is a comment. blank lines are allowed too.
-+ # the next line authorizes a user to a specific realm_id
-+ realm_id:username:password
-+ # the next line authorizes host class.
-+ realm_id:LOCALHOST
-+
-+access.cdb must be readable by httpd.
-+
-+realm_id corresponds to the realm_id in the .access file(s).
-+
-+Each realm_id line specifies either a username:password combination
-+or a host class. Note that the same username may have different
-+passwords in different realm_id's.
-+
-+A host is mapped into a host class via the environment
-+variable HTTPCLIENT. This environment variable should be
-+set in tcpserver's rules.cdb.
-+
-+Here is an example:
-+
-+ === /public/file/0/private1/.access ===
-+ realm1:Dr. Suess
-+
-+ === /public/file/0/private2/.access ===
-+ realm2:Sesame Street
-+
-+ === /public/file/access ===
-+ # realm1 are Dr Suess users/clients
-+ realm1:john:catinthehat
-+ realm1:mary:greeneggswithham
-+ realm1:LOCALHOST
-+ realm1:DR SUESS
-+ # realm1 are Sesame Street users/clients
-+ realm2:tom:bigbird
-+ realm2:abi:cookiemonster
-+ realm2:mary:earnie
-+ realm2:LOCALHOST
-+ realm2:SESAME STREET
-+
-+ === /etc/rules ===
-+ 127.0.0.1:allow,HTTPCLIENT="LOCALHOST"
-+ 10.0.0.:allow,HTTPCLIENT="DR SUESS"
-+ 10.1.0.:allow,HTTPCLIENT="SESAME STREET"
-+ :allow
-+
-+The changes to the Makefile aren't very clean, but everything compiles
-+correctly.
-+
-+Thanks to Eric M. Johnston's for base64.{c,h} from YAQSAP
-+(Yet Another qmail SMTP AUTH Patch) -
-+http://qmail.goof.com/qmail-auth-20010105.tar.gz
-+
-+This patch available at
-+http://www.soffian.org/downloads/publicfile-0.52_basicauth.patch
-+
-+Jay Soffian <jay@soffian.org> 29 Aug 2001
-+
---- publicfile-0.52.orig/base64.c Wed Dec 31 16:00:00 1969
-+++ publicfile-0.52/base64.c Wed Aug 22 22:17:39 2001
-@@ -0,0 +1,90 @@
-+#include "base64.h"
-+#include "stralloc.h"
-+#include "substdio.h"
-+#include "str.h"
-+
-+static char *b64alpha =
-+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-+#define B64PAD '='
-+
-+/* returns 0 ok, 1 illegal, -1 problem */
-+
-+int b64decode(in,l,out)
-+const unsigned char *in;
-+int l;
-+stralloc *out; /* not null terminated */
-+{
-+ int i, j;
-+ unsigned char a[4];
-+ unsigned char b[3];
-+ char *s;
-+
-+ if (l == 0)
-+ {
-+ if (!stralloc_copys(out,"")) return -1;
-+ return 0;
-+ }
-+
-+ if (!stralloc_ready(out,l + 2)) return -1; /* XXX generous */
-+ s = out->s;
-+
-+ for (i = 0;i < l;i += 4) {
-+ for (j = 0;j < 4;j++)
-+ if ((i + j) < l && in[i + j] != B64PAD)
-+ {
-+ a[j] = str_chr(b64alpha,in[i + j]);
-+ if (a[j] > 63) return 1;
-+ }
-+ else a[j] = 0;
-+
-+ b[0] = (a[0] << 2) | (a[1] >> 4);
-+ b[1] = (a[1] << 4) | (a[2] >> 2);
-+ b[2] = (a[2] << 6) | (a[3]);
-+
-+ *s++ = b[0];
-+
-+ if (in[i + 1] == B64PAD) break;
-+ *s++ = b[1];
-+
-+ if (in[i + 2] == B64PAD) break;
-+ *s++ = b[2];
-+ }
-+ out->len = s - out->s;
-+ while (out->len && !out->s[out->len - 1]) --out->len; /* XXX avoid? */
-+ return 0;
-+}
-+
-+int b64encode(in,out)
-+stralloc *in;
-+stralloc *out; /* not null terminated */
-+{
-+ unsigned char a, b, c;
-+ int i;
-+ char *s;
-+
-+ if (in->len == 0)
-+ {
-+ if (!stralloc_copys(out,"")) return -1;
-+ return 0;
-+ }
-+
-+ if (!stralloc_ready(out,in->len / 3 * 4 + 4)) return -1;
-+ s = out->s;
-+
-+ for (i = 0;i < in->len;i += 3) {
-+ a = in->s[i];
-+ b = i + 1 < in->len ? in->s[i + 1] : 0;
-+ c = i + 2 < in->len ? in->s[i + 2] : 0;
-+
-+ *s++ = b64alpha[a >> 2];
-+ *s++ = b64alpha[((a & 3 ) << 4) | (b >> 4)];
-+
-+ if (i + 1 >= in->len) *s++ = B64PAD;
-+ else *s++ = b64alpha[((b & 15) << 2) | (c >> 6)];
-+
-+ if (i + 2 >= in->len) *s++ = B64PAD;
-+ else *s++ = b64alpha[c & 63];
-+ }
-+ out->len = s - out->s;
-+ return 0;
-+}
---- publicfile-0.52.orig/base64.h Wed Dec 31 16:00:00 1969
-+++ publicfile-0.52/base64.h Wed Aug 22 22:17:39 2001
-@@ -0,0 +1,7 @@
-+#ifndef BASE64_H
-+#define BASE64_H
-+
-+extern int b64decode();
-+extern int b64encode();
-+
-+#endif
---- publicfile-0.52.orig/hier.c Mon Nov 8 23:23:46 1999
-+++ publicfile-0.52/hier.c Wed Aug 22 22:17:39 2001
-@@ -7,6 +7,7 @@
- d(auto_home,"bin",-1,-1,02755);
-
- c(auto_home,"bin","configure",-1,-1,0755);
-+ c(auto_home,"bin","htrules",-1,-1,0755);
- c(auto_home,"bin","httpd",-1,-1,0755);
- c(auto_home,"bin","ftpd",-1,-1,0755);
- }
---- publicfile-0.52.orig/htrules.c Wed Dec 31 16:00:00 1969
-+++ publicfile-0.52/htrules.c Wed Aug 29 21:27:42 2001
-@@ -0,0 +1,117 @@
-+#include "strerr.h"
-+#include "stralloc.h"
-+#include "getln.h"
-+#include "buffer.h"
-+#include "exit.h"
-+#include "fmt.h"
-+#include "byte.h"
-+#include "base64.h"
-+#include "cdb_make.h"
-+
-+#define FATAL "htrules: fatal: "
-+
-+unsigned long linenum = 0;
-+char *fntemp;
-+char *fn;
-+
-+stralloc line = {0};
-+int match = 1;
-+
-+stralloc base64 = {0};
-+stralloc key = {0};
-+stralloc realm = {0};
-+stralloc userpass = {0};
-+
-+struct cdb_make c;
-+
-+void nomem(void)
-+{
-+ strerr_die2x(111,FATAL,"out of memory");
-+}
-+void usage(void)
-+{
-+ strerr_die1x(100,"htrules: usage: htrules access.cdb access.tmp");
-+}
-+void die_bad(void)
-+{
-+ if (!stralloc_0(&line)) nomem();
-+ strerr_die3x(100,FATAL,"unable to parse this line: ",line.s);
-+}
-+void die_write(void)
-+{
-+ strerr_die4sys(111,FATAL,"unable to write to ",fntemp,": ");
-+}
-+
-+main(int argc,char **argv)
-+{
-+ int colon;
-+ char *x;
-+ int len;
-+ int fd;
-+ int i;
-+ char ch;
-+
-+ fn = argv[1];
-+ if (!fn) usage();
-+ fntemp = argv[2];
-+ if (!fntemp) usage();
-+
-+ fd = open_trunc(fntemp);
-+ if (fd == -1)
-+ strerr_die4sys(111,FATAL,"unable to create ",fntemp,": ");
-+ if (cdb_make_start(&c,fd) == -1) die_write();
-+
-+ while (match) {
-+ if (getln(buffer_0,&line,&match,'\n') == -1)
-+ strerr_die2sys(111,FATAL,"unable to read input: ");
-+
-+ x = line.s; len = line.len;
-+
-+ if (!len) break;
-+ if (x[0] == '#') continue;
-+ if (x[0] == '\n') continue;
-+
-+ while (len) {
-+ ch = x[len - 1];
-+ if (ch != '\n') if (ch != ' ') if (ch != '\t') break;
-+ --len;
-+ }
-+ line.len = len; /* for die_bad() */
-+ if (!len) continue;
-+
-+ colon = byte_chr(x,len,':');
-+ if (!colon || colon == len) die_bad();
-+ if (!stralloc_copyb(&realm,x,colon)) nomem();
-+ x += colon + 1; len -= colon + 1;
-+
-+ colon = byte_chr(x,len,':');
-+ if (colon == len) {
-+ if (!stralloc_copyb(&key,"C",1)) nomem();
-+ if (!stralloc_cat(&key,&realm)) nomem();
-+ if (!stralloc_catb(&key,":",1)) nomem();
-+ if (!stralloc_catb(&key,x,len)) nomem();
-+ if (cdb_make_add(&c,key.s,key.len,"",0) == -1) die_write();
-+ } else {
-+ if (!stralloc_copyb(&userpass,x,len)) nomem();
-+ if (b64encode(&userpass,&base64) == -1) nomem();
-+
-+ if (!stralloc_copyb(&key,"U",1)) nomem();
-+ if (!stralloc_cat(&key,&base64)) nomem();
-+ if (cdb_make_add(&c,key.s,key.len,"",0) == -1) die_write();
-+
-+ if (!stralloc_copyb(&key,"R",1)) nomem();
-+ if (!stralloc_cat(&key,&realm)) nomem();
-+ if (!stralloc_catb(&key,":",1)) nomem();
-+ if (!stralloc_cat(&key,&base64)) nomem();
-+ if (cdb_make_add(&c,key.s,key.len,"",0) == -1) die_write();
-+ }
-+ }
-+
-+ if (cdb_make_finish(&c) == -1) die_write();
-+ if (fsync(fd) == -1) die_write();
-+ if (close(fd) == -1) die_write(); /* NFS stupidity */
-+ if (rename(fntemp,fn))
-+ strerr_die6sys(111,FATAL,"unable to move ",fntemp," to ",fn,": ");
-+
-+ _exit(0);
-+}
---- publicfile-0.52.orig/httpd.c Mon Nov 8 23:23:46 1999
-+++ publicfile-0.52/httpd.c Wed Aug 29 21:30:34 2001
-@@ -15,6 +15,10 @@
- #include "substdio.h"
- #include "error.h"
- #include "getln.h"
-+#include "byte.h"
-+#include "cdb.h"
-+#include "openreadclose.h"
-+#include "env.h"
-
- int safewrite(int fd,char *buf,int len)
- {
-@@ -51,6 +55,7 @@
- stralloc host = {0};
- stralloc path = {0};
- stralloc ims = {0};
-+stralloc basic_auth = {0};
- int flagbody = 1;
-
- char filebuf[1024];
-@@ -75,11 +80,16 @@
- out_puts("\r\n");
- }
-
--void barf(char *code,char *message)
-+void barf2(char *code,char *message,char *realm)
- {
- if (protocolnum > 0) {
- tai_now(&now);
- header(code,message);
-+ if(realm) {
-+ out_puts("WWW-Authenticate: Basic realm=\"");
-+ out_puts(realm);
-+ out_puts("\"\r\n");
-+ }
- out_puts("Content-Length: ");
- out_put(strnum,fmt_ulong(strnum,str_len(message) + 28));
- out_puts("\r\n");
-@@ -100,8 +110,81 @@
- _exit(0);
- }
-
-+void barf(char *code,char *message)
-+{
-+ barf2(code,message,(char *)0);
-+}
-+
- stralloc fn = {0};
-+stralloc accessfn = {0};
- stralloc contenttype = {0};
-+stralloc realm = {0};
-+stralloc realmtxt = {0};
-+stralloc key = {0};
-+
-+void checkauth(void)
-+{
-+ int len;
-+ int fd;
-+ int colon;
-+ static struct cdb c;
-+ char *x;
-+
-+ len = byte_rchr(fn.s,fn.len,'/');
-+ if (!stralloc_copyb(&accessfn,fn.s,len)) _exit(21);
-+ if (!stralloc_cats(&accessfn,"/.access")) _exit(21);
-+ if (!stralloc_0(&accessfn)) _exit(21);
-+
-+ if (openreadclose(accessfn.s,&realm,256) == 0) return;
-+ if (!realm.len) _exit(23); /* no realm */
-+ realm.len = byte_chr(realm.s,realm.len,'\n');
-+ while (realm.len) {
-+ if (realm.s[realm.len - 1] != ' ')
-+ if (realm.s[realm.len - 1] != '\t')
-+ break;
-+ --realm.len;
-+ }
-+ colon = byte_chr(realm.s,realm.len,':');
-+ if (!colon) _exit(23); /* no realm */
-+ if (colon == realm.len) {
-+ if (!stralloc_copys(&realmtxt,"restricted access")) _exit(21);
-+ } else {
-+ if (!stralloc_copyb(&realmtxt,realm.s+colon+1,realm.len-(colon+1))) _exit(21);
-+ realm.len = colon;
-+ }
-+ if (!stralloc_0(&realmtxt)) _exit(21);
-+
-+ fd = open_read("/access.cdb");
-+ if (fd == -1) _exit(23);
-+ cdb_init(&c,fd);
-+
-+ x = env_get("HTTPCLIENT");
-+ if (x) {
-+ if (!stralloc_copyb(&key,"C",1)) _exit(21);
-+ if (!stralloc_cat(&key,&realm)) _exit(21);
-+ if (!stralloc_catb(&key,":",1)) _exit(21);
-+ if (!stralloc_cats(&key,x)) _exit(21);
-+ if (cdb_find(&c,key.s,key.len) == 1) goto AUTH_OK;
-+ }
-+
-+ if (!basic_auth.len) barf2("401 ","Authorization Required", realmtxt.s);
-+
-+ if (!stralloc_copyb(&key,"U",1)) _exit(21);
-+ if (!stralloc_cat(&key,&basic_auth)) _exit(21);
-+ if (cdb_find(&c,key.s,key.len) != 1)
-+ barf2("401 ","Authorization Required",realmtxt.s);
-+
-+ if (!stralloc_copyb(&key,"R",1)) _exit(21);
-+ if (!stralloc_cat(&key,&realm)) _exit(21);
-+ if (!stralloc_catb(&key,":",1)) _exit(21);
-+ if (!stralloc_cat(&key,&basic_auth)) _exit(21);
-+ if (cdb_find(&c,key.s,key.len) != 1) barf("403 ","Forbidden");
-+
-+ AUTH_OK:
-+ alloc_free(key);
-+ cdb_free(&c);
-+ close(fd);
-+}
-
- void get(void)
- {
-@@ -124,6 +207,8 @@
- if (!stralloc_cat(&fn,&path)) _exit(21);
- pathdecode(&fn);
- if (!stralloc_0(&fn)) _exit(21);
-+
-+ checkauth();
-
- fd = file_open(fn.s,&mtime,&length,1);
- if (fd == -1)
-@@ -227,6 +312,7 @@
- if (!stralloc_copys(&path,"")) _exit(21);
- if (!stralloc_copys(&protocol,"")) _exit(21);
- if (!stralloc_copys(&ims,"")) _exit(21);
-+ if (!stralloc_copys(&basic_auth,"")) _exit(21);
- protocolnum = 2;
-
- spaces = 0;
-@@ -302,6 +388,8 @@
- if (!stralloc_append(&host,&field.s[i])) _exit(21);
- if (case_startb(field.s,field.len,"if-modified-since:"))
- if (!stralloc_copyb(&ims,field.s + 18,field.len - 18)) _exit(21);
-+ if (case_startb(field.s,field.len,"authorization: basic "))
-+ if (!stralloc_copyb(&basic_auth,field.s + 21,field.len - 21)) _exit(21);
- field.len = 0;
- }
- if (!line.len) break;
---- publicfile-0.52.orig/openreadclose.c Wed Dec 31 16:00:00 1969
-+++ publicfile-0.52/openreadclose.c Wed Aug 29 14:24:21 2001
-@@ -0,0 +1,18 @@
-+/* Public domain. */
-+
-+#include "error.h"
-+#include "open.h"
-+#include "readclose.h"
-+#include "openreadclose.h"
-+
-+int openreadclose(const char *fn,stralloc *sa,unsigned int bufsize)
-+{
-+ int fd;
-+ fd = open_read(fn);
-+ if (fd == -1) {
-+ if (errno == error_noent) return 0;
-+ return -1;
-+ }
-+ if (readclose(fd,sa,bufsize) == -1) return -1;
-+ return 1;
-+}
---- publicfile-0.52.orig/openreadclose.h Wed Dec 31 16:00:00 1969
-+++ publicfile-0.52/openreadclose.h Wed Aug 29 14:24:21 2001
-@@ -0,0 +1,10 @@
-+/* Public domain. */
-+
-+#ifndef OPENREADCLOSE_H
-+#define OPENREADCLOSE_H
-+
-+#include "stralloc.h"
-+
-+extern int openreadclose(const char *,stralloc *,unsigned int);
-+
-+#endif
---- publicfile-0.52.orig/readclose.c Wed Dec 31 16:00:00 1969
-+++ publicfile-0.52/readclose.c Wed Aug 29 14:30:52 2001
-@@ -0,0 +1,23 @@
-+/* Public domain. */
-+
-+#include <unistd.h>
-+#include "error.h"
-+#include "readclose.h"
-+
-+int readclose_append(int fd,stralloc *sa,unsigned int bufsize)
-+{
-+ int r;
-+ for (;;) {
-+ if (!stralloc_readyplus(sa,bufsize)) { close(fd); return -1; }
-+ r = read(fd,sa->s + sa->len,bufsize);
-+ if (r == -1) if (errno == error_intr) continue;
-+ if (r <= 0) { close(fd); return r; }
-+ sa->len += r;
-+ }
-+}
-+
-+int readclose(int fd,stralloc *sa,unsigned int bufsize)
-+{
-+ if (!stralloc_copys(sa,"")) { close(fd); return -1; }
-+ return readclose_append(fd,sa,bufsize);
-+}
---- publicfile-0.52.orig/readclose.h Wed Dec 31 16:00:00 1969
-+++ publicfile-0.52/readclose.h Wed Aug 29 14:30:52 2001
-@@ -0,0 +1,11 @@
-+/* Public domain. */
-+
-+#ifndef READCLOSE_H
-+#define READCLOSE_H
-+
-+#include "stralloc.h"
-+
-+extern int readclose_append(int,stralloc *,unsigned int);
-+extern int readclose(int,stralloc *,unsigned int);
-+
-+#endif
diff --git a/www/publicfile/files/publicfile.sslserver b/www/publicfile/files/publicfile.sslserver
deleted file mode 100644
index 23b3c8778141..000000000000
--- a/www/publicfile/files/publicfile.sslserver
+++ /dev/null
@@ -1,36 +0,0 @@
---- httpd.c.orig Tue Nov 9 02:23:46 1999
-+++ httpd.c Sun Dec 9 21:30:59 2001
-@@ -271,8 +271,16 @@
- if (!stralloc_copyb(&path,host.s + i,host.len - i)) _exit(21);
- host.len = i;
- }
-- else
-- if (!stralloc_copy(&path,&url)) _exit(21);
-+ else {
-+ if (case_startb(url.s,url.len,"https://")) {
-+ if (!stralloc_copyb(&host,url.s + 8,url.len - 8)) _exit(21);
-+ i = byte_chr(host.s,host.len,'/');
-+ if (!stralloc_copyb(&path,host.s + i,host.len - i)) _exit(21);
-+ host.len = i;
-+ }
-+ else
-+ if (!stralloc_copy(&path,&url)) _exit(21);
-+ }
-
- if (!path.len || (path.s[path.len - 1] == '/'))
- if (!stralloc_cats(&path,"index.html")) _exit(21);
---- file.c.orig Wed Dec 12 07:09:57 2001
-+++ file.c Wed Dec 12 07:09:33 2001
-@@ -15,7 +15,11 @@
- char *x;
-
- x = env_get("TCPREMOTEIP");
-- if (!x) x = "0";
-+ if (!x) {
-+ x = env_get("SSLREMOTEIP");
-+ if (!x)
-+ x = "0";
-+ }
- substdio_puts(subfderr,x);
- substdio_puts(subfderr,flagread ? " read ": " dir ");
-
diff --git a/www/publicfile/files/redirect-slash-patch b/www/publicfile/files/redirect-slash-patch
deleted file mode 100644
index 38c936cae8e6..000000000000
--- a/www/publicfile/files/redirect-slash-patch
+++ /dev/null
@@ -1,217 +0,0 @@
-From: Giles Lean <giles@nemeton.com.au>
-To: publicfile@list.cr.yp.to
-Subject: redirect patch for publicfile-0.52
-Date: Sun, 05 Dec 1999 08:43:14 +1100
-
-------- =_aaaaaaaaaa0
-Content-Type: text/plain; charset="us-ascii"
-Content-ID: <23894.944342900.1@nemeton.com.au>
-
-I have a patch for publicfile-0.52 that will make it send redirects
-instead of "404 access denied" when directories are requested
-without a trailing slash.
-
-Comments and suggestions are welcome, particularly if someone can
-see where I've either done something wrong protocol-wise or if the
-integration with Dan's code can be improved.
-
-This patch is only appropriate for publicfile installations where
-an existing server is being replaced or where lots of third party
-HTML is installed without editing. This is not the target market
-Dan Bernstein claims for publicfile, but some of us will use it
-anyway. (My #1 reason? The low memory requirement.)
-
-After this patch is applied log messages about "is a directory"
-will show up if the redirect code is used:
-
-@4000000038490b1f26a03cac 127.0.0.1 read ./localhost.nemeton.com.au/cr.yp.to/publicfile: is a directory
-@40000000384973483712ee2c 127.0.0.1 read ./localhost.nemeton.com.au/susv2: is a directory
-
-Regards,
-
-Giles
-
-
-------- =_aaaaaaaaaa0
-Content-Type: text/plain; name="diff"; charset="us-ascii"
-Content-ID: <23894.944342900.2@nemeton.com.au>
-
-Index: error.c
-===================================================================
-RCS file: /a/CVS/net/publicfile/error.c,v
-retrieving revision 1.1.1.1
-retrieving revision 1.1.1.1.2.1
-diff -c -r1.1.1.1 -r1.1.1.1.2.1
-*** error.c 1999/12/01 19:38:15 1.1.1.1
---- error.c 1999/12/04 21:15:37 1.1.1.1.2.1
-***************
-*** 100,102 ****
---- 100,109 ----
- #else
- -14;
- #endif
-+
-+ int error_isdir =
-+ #ifdef EISDIR
-+ EISDIR;
-+ #else
-+ -15;
-+ #endif
-Index: error.h
-===================================================================
-RCS file: /a/CVS/net/publicfile/error.h,v
-retrieving revision 1.1.1.1
-retrieving revision 1.1.1.1.2.1
-diff -c -r1.1.1.1 -r1.1.1.1.2.1
-*** error.h 1999/12/01 19:38:15 1.1.1.1
---- error.h 1999/12/04 21:15:37 1.1.1.1.2.1
-***************
-*** 17,22 ****
---- 17,23 ----
- extern int error_perm;
- extern int error_acces;
- extern int error_nodevice;
-+ extern int error_isdir;
-
- extern char *error_str();
- extern int error_temp();
-Index: error_str.c
-===================================================================
-RCS file: /a/CVS/net/publicfile/error_str.c,v
-retrieving revision 1.1.1.1
-retrieving revision 1.1.1.1.2.1
-diff -c -r1.1.1.1 -r1.1.1.1.2.1
-*** error_str.c 1999/12/01 19:38:15 1.1.1.1
---- error_str.c 1999/12/04 21:15:38 1.1.1.1.2.1
-***************
-*** 21,26 ****
---- 21,27 ----
- X(error_perm,"permission denied")
- X(error_acces,"access denied")
- X(error_nodevice,"device not configured")
-+ X(error_isdir,"is a directory")
- #ifdef ESRCH
- X(ESRCH,"no such process")
- #endif
-Index: file.c
-===================================================================
-RCS file: /a/CVS/net/publicfile/file.c,v
-retrieving revision 1.1.1.1
-retrieving revision 1.1.1.1.2.1
-diff -c -r1.1.1.1 -r1.1.1.1.2.1
-*** file.c 1999/12/01 19:38:14 1.1.1.1
---- file.c 1999/12/04 21:15:38 1.1.1.1.2.1
-***************
-*** 65,77 ****
- errno = error_acces;
- return -1;
- }
-! if (flagread)
-! if ((st.st_mode & S_IFMT) != S_IFREG) {
- log(fn,": ","not a regular file",flagread);
- close(fd);
- errno = error_acces;
-- return -1;
- }
-
- log(fn,": ","success",flagread);
-
---- 65,83 ----
- errno = error_acces;
- return -1;
- }
-! if (flagread && (st.st_mode & S_IFMT) != S_IFREG) {
-! if ((st.st_mode & S_IFMT) == S_IFDIR) {
-! log(fn,": ",error_str(error_isdir),flagread);
-! close(fd);
-! errno = error_isdir;
-! }
-! else {
- log(fn,": ","not a regular file",flagread);
- close(fd);
- errno = error_acces;
- }
-+ return -1;
-+ }
-
- log(fn,": ","success",flagread);
-
-Index: httpd.c
-===================================================================
-RCS file: /a/CVS/net/publicfile/httpd.c,v
-retrieving revision 1.1.1.1
-retrieving revision 1.1.1.1.2.1
-diff -c -r1.1.1.1 -r1.1.1.1.2.1
-*** httpd.c 1999/12/01 19:38:14 1.1.1.1
---- httpd.c 1999/12/04 21:15:38 1.1.1.1.2.1
-***************
-*** 103,114 ****
---- 103,142 ----
- stralloc fn = {0};
- stralloc contenttype = {0};
-
-+ void redirect(void)
-+ {
-+ if (!stralloc_cats(&url, "/")) _exit(21);
-+ if (protocolnum > 0) {
-+ tai_now(&now);
-+ header("301 ", "Moved Permanently");
-+ out_puts("Content-Length: ");
-+ out_put(strnum,fmt_ulong(strnum,url.len * 2 + 127));
-+ out_puts("\r\nLocation: ");
-+ out_put(url.s, url.len);
-+ out_puts("\r\nContent-Type: text/html\r\n\r\n");
-+ }
-+ if (flagbody) {
-+ out_puts("<html><body>The document you requested is a directory. Try adding a trailing slash to the URL: <A HREF=\"");
-+ out_put(url.s,url.len);
-+ out_puts("\">");
-+ out_put(url.s,url.len);
-+ out_puts("</A></body></html>\r\n");
-+ }
-+ out_flush();
-+ }
-+
- void get(void)
- {
- unsigned long length;
- int fd;
- int r;
-
-+ if (!case_startb(url.s,url.len,"http://")) {
-+ if (!stralloc_copys(&url,"http://")) _exit(21);
-+ if (!stralloc_cat(&url,&host)) _exit(21);
-+ if (!stralloc_cat(&url,&path)) _exit(21);
-+ }
-+
- host.len = byte_chr(host.s,host.len,':');
- if (!host.len) {
- if (protocolnum > 1)
-***************
-*** 126,133 ****
- if (!stralloc_0(&fn)) _exit(21);
-
- fd = file_open(fn.s,&mtime,&length,1);
-! if (fd == -1)
- barf("404 ",error_str(errno));
-
- if (protocolnum > 0) {
- tai_now(&now);
---- 154,167 ----
- if (!stralloc_0(&fn)) _exit(21);
-
- fd = file_open(fn.s,&mtime,&length,1);
-! if (fd == -1) {
-! if (errno == error_isdir) {
-! redirect();
-! if (protocolnum < 2) _exit(0);
-! return;
-! }
- barf("404 ",error_str(errno));
-+ }
-
- if (protocolnum > 0) {
- tai_now(&now);
-
-------- =_aaaaaaaaaa0--
-
diff --git a/www/publicfile/pkg-descr b/www/publicfile/pkg-descr
deleted file mode 100644
index cbbfd9d8220b..000000000000
--- a/www/publicfile/pkg-descr
+++ /dev/null
@@ -1,20 +0,0 @@
-publicfile supplies files to the public through HTTP and FTP.
-
-Security features:
- publicfile chroot()s to the public file area and sheds root privileges.
- publicfile never attempts to modify the public file area.
- publicfile never runs any other programs.
-
-HTTP features:
- publicfile supports virtual hosts through the Host field.
- publicfile supports virtual hosts through absolute URLs.
- publicfile supports HTTP/1.1 persistent connections.
- publicfile supports HTTP/1.1 chunked responses.
- publicfile supports user-controlled content types.
- publicfile supports exact-prefix If-Modified-Since.
-
-FTP features:
- publicfile has built-in LIST and NLST commands.
- publicfile provides EPLF LIST responses.
- publicfile supports restarted transfers.
- publicfile supports pipelining.
diff --git a/www/publicfile/pkg-plist b/www/publicfile/pkg-plist
deleted file mode 100644
index 8b7b66177460..000000000000
--- a/www/publicfile/pkg-plist
+++ /dev/null
@@ -1,4 +0,0 @@
-bin/configure
-bin/httpd
-bin/ftpd
-%%BASICAUTH%%bin/htrules