aboutsummaryrefslogtreecommitdiffstats
path: root/main/lighttpd/0026-mod_auth-use-crypt_r-instead-of-crypt-if-available.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/lighttpd/0026-mod_auth-use-crypt_r-instead-of-crypt-if-available.patch')
-rw-r--r--main/lighttpd/0026-mod_auth-use-crypt_r-instead-of-crypt-if-available.patch102
1 files changed, 102 insertions, 0 deletions
diff --git a/main/lighttpd/0026-mod_auth-use-crypt_r-instead-of-crypt-if-available.patch b/main/lighttpd/0026-mod_auth-use-crypt_r-instead-of-crypt-if-available.patch
new file mode 100644
index 0000000000..8fbefeb99e
--- /dev/null
+++ b/main/lighttpd/0026-mod_auth-use-crypt_r-instead-of-crypt-if-available.patch
@@ -0,0 +1,102 @@
+From c92496720d21ea7888187a8ae305c392d4fe824a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Stefan=20B=C3=BChler?= <stbuehler@web.de>
+Date: Thu, 12 Feb 2015 06:39:39 +0000
+Subject: [PATCH 26/29] [mod_auth] use crypt_r instead of crypt if available
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Stefan Bühler <stbuehler@web.de>
+
+git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2986 152afb58-edef-0310-8abb-c4023f1b3aa9
+---
+ NEWS | 1 +
+ configure.ac | 22 +++++++++++++++-------
+ src/CMakeLists.txt | 12 +++++++++---
+ src/config.h.cmake | 3 ++-
+ src/http_auth.c | 10 +++++++++-
+ 5 files changed, 36 insertions(+), 12 deletions(-)
+
+diff --git a/NEWS b/NEWS
+index ddb370d..59fd4f6 100644
+--- a/NEWS
++++ b/NEWS
+@@ -16,6 +16,7 @@ NEWS
+ * [connections] fix bug in connection state handling
+ * print backtrace in assert logging with libunwind
+ * major refactoring of internal buffer/chunk handling
++ * [mod_auth] use crypt_r instead of crypt if available
+
+ - 1.4.35 - 2014-03-12
+ * [network/ssl] fix build error if TLSEXT is disabled
+diff --git a/configure.ac b/configure.ac
+index c846d1a..16e66d6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -528,19 +528,27 @@ if test "$WITH_LUA" != "no"; then
+ AC_SUBST(LUA_LIBS)
+ fi
+
++dnl search for crypt_r and (fallback) for crypt
+ save_LIBS=$LIBS
+-AC_SEARCH_LIBS(crypt,crypt,[
++LIBS=
++AC_SEARCH_LIBS([crypt_r],[crypt],[
++ AC_DEFINE([HAVE_CRYPT_R], [1], [crypt_r])
+ AC_CHECK_HEADERS([crypt.h],[
+- AC_DEFINE([HAVE_CRYPT_H], [1])
++ AC_DEFINE([HAVE_CRYPT_H], [1], [crypt.h])
+ ])
+
+- AC_DEFINE([HAVE_LIBCRYPT], [1], [libcrypt])
+- if test "$ac_cv_search_crypt" != no; then
+- test "$ac_cv_search_crypt" = "none required" || CRYPT_LIB="$ac_cv_search_crypt"
+- fi
++ CRYPT_LIB=$LIBS
++],[
++ AC_SEARCH_LIBS([crypt],[crypt],[
++ AC_CHECK_HEADERS([crypt.h],[
++ AC_DEFINE([HAVE_CRYPT_H], [1], [crypt.h])
++ ])
++
++ CRYPT_LIB=$LIBS
++ ])
+ ])
+ LIBS=$save_LIBS
+-AC_SUBST(CRYPT_LIB)
++AC_SUBST([CRYPT_LIB])
+
+ save_LIBS=$LIBS
+ AC_SEARCH_LIBS(sendfilev,sendfile,[
+diff --git a/src/http_auth.c b/src/http_auth.c
+index a98ea62..dacf70a 100644
+--- a/src/http_auth.c
++++ b/src/http_auth.c
+@@ -669,15 +669,23 @@ static int http_auth_basic_password_compare(server *srv, mod_auth_plugin_data *p
+ return (strcmp(sample, password->ptr) == 0) ? 0 : 1;
+ #endif
+ } else {
+-#ifdef HAVE_CRYPT
++#if defined(HAVE_CRYPT_R) || defined(HAVE_CRYPT)
+ char *crypted;
++#if defined(HAVE_CRYPT_R)
++ struct crypt_data crypt_tmp_data;
++ crypt_tmp_data.initialized = 0;
++#endif
+
+ /* a simple DES password is 2 + 11 characters. everything else should be longer. */
+ if (buffer_string_length(password) < 13) {
+ return -1;
+ }
+
++#if defined(HAVE_CRYPT_R)
++ if (0 == (crypted = crypt_r(pw, password->ptr, &crypt_tmp_data))) {
++#else
+ if (0 == (crypted = crypt(pw, password->ptr))) {
++#endif
+ /* crypt failed. */
+ return -1;
+ }
+--
+2.4.5
+