Module Name: src
Committed By: shm
Date: Fri Nov 21 08:58:28 UTC 2014
Modified Files:
src/libexec/httpd: auth-bozo.c bozohttpd.c bozohttpd.h
Log Message:
Fixed memory leak in case of multiple authentication headers sent by the
client.
OK mrg@
To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/libexec/httpd/auth-bozo.c
cvs rdiff -u -r1.58 -r1.59 src/libexec/httpd/bozohttpd.c
cvs rdiff -u -r1.33 -r1.34 src/libexec/httpd/bozohttpd.h
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.14
--- src/libexec/httpd/auth-bozo.c:1.13 Tue Jul 8 14:01:21 2014
+++ src/libexec/httpd/auth-bozo.c Fri Nov 21 08:58:28 2014
@@ -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.14 2014/11/21 08:58:28 shm 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,
Index: src/libexec/httpd/bozohttpd.c
diff -u src/libexec/httpd/bozohttpd.c:1.58 src/libexec/httpd/bozohttpd.c:1.59
--- src/libexec/httpd/bozohttpd.c:1.58 Fri Nov 21 08:54:12 2014
+++ src/libexec/httpd/bozohttpd.c Fri Nov 21 08:58:28 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: bozohttpd.c,v 1.58 2014/11/21 08:54:12 shm Exp $ */
+/* $NetBSD: bozohttpd.c,v 1.59 2014/11/21 08:58:28 shm Exp $ */
/* $eterna: bozohttpd.c,v 1.178 2011/11/18 09:21:15 mrg Exp $ */
@@ -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)
Index: src/libexec/httpd/bozohttpd.h
diff -u src/libexec/httpd/bozohttpd.h:1.33 src/libexec/httpd/bozohttpd.h:1.34
--- src/libexec/httpd/bozohttpd.h:1.33 Thu Jul 17 06:27:52 2014
+++ src/libexec/httpd/bozohttpd.h Fri Nov 21 08:58:28 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: bozohttpd.h,v 1.33 2014/07/17 06:27:52 mrg Exp $ */
+/* $NetBSD: bozohttpd.h,v 1.34 2014/11/21 08:58:28 shm 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