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

Reply via email to