Module Name: src Committed By: martin Date: Mon Jan 12 10:02:30 UTC 2015
Modified Files: src/libexec/httpd [netbsd-7]: auth-bozo.c bozohttpd.8 bozohttpd.c bozohttpd.h content-bozo.c dir-index-bozo.c lua-bozo.c Log Message: Pull up following revision(s) (requested by mrg in ticket #408): libexec/httpd/content-bozo.c: revision 1.11 libexec/httpd/dir-index-bozo.c: revision 1.20 libexec/httpd/bozohttpd.h: revision 1.34 libexec/httpd/bozohttpd.c: revision 1.57 libexec/httpd/bozohttpd.8: revision 1.47 libexec/httpd/bozohttpd.c: revision 1.58 libexec/httpd/bozohttpd.8: revision 1.48 libexec/httpd/bozohttpd.c: revision 1.59 libexec/httpd/lua-bozo.c: revision 1.11 libexec/httpd/bozohttpd.c: revision 1.60 libexec/httpd/auth-bozo.c: revision 1.14 libexec/httpd/auth-bozo.c: revision 1.15 libexec/httpd/auth-bozo.c: revision 1.16 Update bozohttpd to 20141225: - NUL terminate a string. - don't truncate file sizes to 32 bits for directory indexes. - Fixed off-by-one in virtualhost processing. Previous code was checking if Host header is a prefix of any existing vhost. This behaviour might be used to uncover existing vitual hosts from the remote. - Fixed memory leak in case of multiple authentication headers sent by the client. - Avoid array access out of bounds. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.13.2.1 src/libexec/httpd/auth-bozo.c cvs rdiff -u -r1.46 -r1.46.4.1 src/libexec/httpd/bozohttpd.8 cvs rdiff -u -r1.56 -r1.56.2.1 src/libexec/httpd/bozohttpd.c cvs rdiff -u -r1.33 -r1.33.2.1 src/libexec/httpd/bozohttpd.h cvs rdiff -u -r1.10 -r1.10.2.1 src/libexec/httpd/content-bozo.c \ src/libexec/httpd/lua-bozo.c cvs rdiff -u -r1.19 -r1.19.4.1 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/auth-bozo.c diff -u src/libexec/httpd/auth-bozo.c:1.13 src/libexec/httpd/auth-bozo.c:1.13.2.1 --- src/libexec/httpd/auth-bozo.c:1.13 Tue Jul 8 14:01:21 2014 +++ src/libexec/httpd/auth-bozo.c Mon Jan 12 10:02:29 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: auth-bozo.c,v 1.13 2014/07/08 14:01:21 mrg Exp $ */ +/* $NetBSD: auth-bozo.c,v 1.13.2.1 2015/01/12 10:02:29 martin Exp $ */ /* $eterna: auth-bozo.c,v 1.17 2011/11/18 09:21:15 mrg Exp $ */ @@ -118,6 +118,13 @@ bozo_auth_check(bozo_httpreq_t *request, } void +bozo_auth_init(bozo_httpreq_t *request) +{ + request->hr_authuser = NULL; + request->hr_authpass = NULL; +} + +void bozo_auth_cleanup(bozo_httpreq_t *request) { @@ -150,6 +157,8 @@ bozo_auth_check_headers(bozo_httpreq_t * return bozo_http_error(httpd, 400, request, "bad authorization field"); *pass++ = '\0'; + free(request->hr_authuser); + free(request->hr_authpass); request->hr_authuser = bozostrdup(httpd, authbuf); request->hr_authpass = bozostrdup(httpd, pass); debug((httpd, DEBUG_FAT, @@ -229,6 +238,12 @@ base64_decode(const unsigned char *in, s unsigned char *cp; size_t i; + if (ilen == 0) { + if (olen) + *out = '\0'; + return 0; + } + cp = out; for (i = 0; i < ilen; i += 4) { if (cp + 3 > out + olen) @@ -250,7 +265,7 @@ base64_decode(const unsigned char *in, s | decodetable[in[i + 3]]; #undef IN_CHECK } - while (in[i - 1] == '=') + while (i > 0 && in[i - 1] == '=') cp--,i--; return (cp - out); } Index: src/libexec/httpd/bozohttpd.8 diff -u src/libexec/httpd/bozohttpd.8:1.46 src/libexec/httpd/bozohttpd.8:1.46.4.1 --- src/libexec/httpd/bozohttpd.8:1.46 Sun Feb 9 12:32:32 2014 +++ src/libexec/httpd/bozohttpd.8 Mon Jan 12 10:02:29 2015 @@ -1,4 +1,4 @@ -.\" $NetBSD: bozohttpd.8,v 1.46 2014/02/09 12:32:32 mrg Exp $ +.\" $NetBSD: bozohttpd.8,v 1.46.4.1 2015/01/12 10:02:29 martin 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 February 9, 2014 +.Dd December 25, 2014 .Dt HTTPD 8 .Os .Sh NAME @@ -513,7 +513,7 @@ The focus has always been simplicity and and regular code audits. This manual documents .Nm -version 20140201. +version 20141225. .Sh AUTHORS .An -nosplit .Nm Index: src/libexec/httpd/bozohttpd.c diff -u src/libexec/httpd/bozohttpd.c:1.56 src/libexec/httpd/bozohttpd.c:1.56.2.1 --- src/libexec/httpd/bozohttpd.c:1.56 Thu Jul 17 10:21:51 2014 +++ src/libexec/httpd/bozohttpd.c Mon Jan 12 10:02:29 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bozohttpd.c,v 1.56 2014/07/17 10:21:51 mrg Exp $ */ +/* $NetBSD: bozohttpd.c,v 1.56.2.1 2015/01/12 10:02:29 martin Exp $ */ /* $eterna: bozohttpd.c,v 1.178 2011/11/18 09:21:15 mrg Exp $ */ @@ -109,7 +109,7 @@ #define INDEX_HTML "index.html" #endif #ifndef SERVER_SOFTWARE -#define SERVER_SOFTWARE "bozohttpd/20140717" +#define SERVER_SOFTWARE "bozohttpd/20141225" #endif #ifndef DIRECT_ACCESS_FILE #define DIRECT_ACCESS_FILE ".bzdirect" @@ -541,6 +541,7 @@ bozo_read_request(bozohttpd_t *httpd) request->hr_virthostname = NULL; request->hr_file = NULL; request->hr_oldfile = NULL; + bozo_auth_init(request); slen = sizeof(ss); if (getpeername(0, (struct sockaddr *)(void *)&ss, &slen) < 0) @@ -1093,8 +1094,8 @@ check_virtual(bozo_httpreq_t *request) } debug((httpd, DEBUG_OBESE, "looking at dir``%s''", d->d_name)); - if (strncasecmp(d->d_name, request->hr_host, - len) == 0) { + if (d->d_namlen == len && strcmp(d->d_name, + request->hr_host) == 0) { /* found it, punch it */ debug((httpd, DEBUG_OBESE, "found it punch it")); request->hr_virthostname = Index: src/libexec/httpd/bozohttpd.h diff -u src/libexec/httpd/bozohttpd.h:1.33 src/libexec/httpd/bozohttpd.h:1.33.2.1 --- src/libexec/httpd/bozohttpd.h:1.33 Thu Jul 17 06:27:52 2014 +++ src/libexec/httpd/bozohttpd.h Mon Jan 12 10:02:29 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bozohttpd.h,v 1.33 2014/07/17 06:27:52 mrg Exp $ */ +/* $NetBSD: bozohttpd.h,v 1.33.2.1 2015/01/12 10:02:29 martin Exp $ */ /* $eterna: bozohttpd.h,v 1.39 2011/11/18 09:21:15 mrg Exp $ */ @@ -247,6 +247,7 @@ void bozo_ssl_destroy(bozohttpd_t *); /* auth-bozo.c */ #ifdef DO_HTPASSWD +void bozo_auth_init(bozo_httpreq_t *); int bozo_auth_check(bozo_httpreq_t *, const char *); void bozo_auth_cleanup(bozo_httpreq_t *); int bozo_auth_check_headers(bozo_httpreq_t *, char *, char *, ssize_t); @@ -255,6 +256,7 @@ void bozo_auth_check_401(bozo_httpreq_t void bozo_auth_cgi_setenv(bozo_httpreq_t *, char ***); int bozo_auth_cgi_count(bozo_httpreq_t *); #else +#define bozo_auth_init(x) do { /* nothing */ } while (0) #define bozo_auth_check(x, y) 0 #define bozo_auth_cleanup(x) do { /* nothing */ } while (0) #define bozo_auth_check_headers(y, z, a, b) 0 Index: src/libexec/httpd/content-bozo.c diff -u src/libexec/httpd/content-bozo.c:1.10 src/libexec/httpd/content-bozo.c:1.10.2.1 --- src/libexec/httpd/content-bozo.c:1.10 Sat May 17 05:50:01 2014 +++ src/libexec/httpd/content-bozo.c Mon Jan 12 10:02:29 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: content-bozo.c,v 1.10 2014/05/17 05:50:01 mrg Exp $ */ +/* $NetBSD: content-bozo.c,v 1.10.2.1 2015/01/12 10:02:29 martin Exp $ */ /* $eterna: content-bozo.c,v 1.17 2011/11/18 09:21:15 mrg Exp $ */ @@ -164,6 +164,8 @@ static bozo_content_map_t static_content { ".mpeg", 5, "video/mpeg", "", "", NULL }, { ".mpg", 4, "video/mpeg", "", "", NULL }, { ".mpe", 4, "video/mpeg", "", "", NULL }, + { ".ts", 4, "video/mpeg", "", "", NULL }, + { ".vob", 4, "video/mpeg", "", "", NULL }, { ".mp4", 4, "video/mp4", "", "", NULL }, { ".qt", 3, "video/quicktime", "", "", NULL }, { ".mov", 4, "video/quicktime", "", "", NULL }, Index: src/libexec/httpd/lua-bozo.c diff -u src/libexec/httpd/lua-bozo.c:1.10 src/libexec/httpd/lua-bozo.c:1.10.2.1 --- src/libexec/httpd/lua-bozo.c:1.10 Sat Jul 19 18:38:34 2014 +++ src/libexec/httpd/lua-bozo.c Mon Jan 12 10:02:29 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: lua-bozo.c,v 1.10 2014/07/19 18:38:34 lneto Exp $ */ +/* $NetBSD: lua-bozo.c,v 1.10.2.1 2015/01/12 10:02:29 martin Exp $ */ /* * Copyright (c) 2013 Marc Balmer <m...@msys.ch> @@ -276,6 +276,7 @@ lua_url_decode(lua_State *L, char *s) *q++ = *p; } } + *q = '\0'; lua_pushstring(L, val); lua_setfield(L, -2, s); free(val); Index: src/libexec/httpd/dir-index-bozo.c diff -u src/libexec/httpd/dir-index-bozo.c:1.19 src/libexec/httpd/dir-index-bozo.c:1.19.4.1 --- src/libexec/httpd/dir-index-bozo.c:1.19 Thu Jan 2 08:21:38 2014 +++ src/libexec/httpd/dir-index-bozo.c Mon Jan 12 10:02:29 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: dir-index-bozo.c,v 1.19 2014/01/02 08:21:38 mrg Exp $ */ +/* $NetBSD: dir-index-bozo.c,v 1.19.4.1 2015/01/12 10:02:29 martin Exp $ */ /* $eterna: dir-index-bozo.c,v 1.20 2011/11/18 09:21:15 mrg Exp $ */ @@ -189,8 +189,8 @@ bozo_dir_index(bozo_httpreq_t *request, spacebuf[i] = '\0'; bozo_printf(httpd, "%s", spacebuf); - bozo_printf(httpd, "%7ukB", - ((unsigned)((unsigned)(sb.st_size) >> 10))); + bozo_printf(httpd, "%12llukB", + (unsigned long long)sb.st_size >> 10); } bozo_printf(httpd, "\r\n"); }