mirror of
https://github.com/php/php-src.git
synced 2024-11-23 09:54:15 +08:00
MFH: fix #39795 (build fails on AIX because crypt_r() uses different data struct)
This commit is contained in:
parent
2f291233e6
commit
a74c36a335
2
NEWS
2
NEWS
@ -50,6 +50,8 @@ PHP NEWS
|
||||
- Fixed FastCGI impersonation for persistent connections on Windows. (Dmitry)
|
||||
- Fixed wrong signature initialization in imagepng (Takeshi Abe)
|
||||
- Added optimization for imageline with horizontal and vertial lines (Pierre)
|
||||
- Fixed bug #39795 (build fails on AIX because crypt_r() uses different data
|
||||
struct). (Tony)
|
||||
- Fixed bug #39791 (Crash in strtotime() on overly long relative date
|
||||
multipliers). (Ilia)
|
||||
- Fixed bug #39787 (PHP doesn't work with Apache 2.3). (mv at binarysec dot
|
||||
|
52
acinclude.m4
52
acinclude.m4
@ -2590,3 +2590,55 @@ AC_DEFUN([PHP_DETECT_ICC],
|
||||
)
|
||||
])
|
||||
|
||||
dnl
|
||||
dnl PHP_CRYPT_R_STYLE
|
||||
dnl detect the style of crypt_r() is any is available
|
||||
dnl see APR_CHECK_CRYPT_R_STYLE() for original version
|
||||
dnl
|
||||
AC_DEFUN([PHP_CRYPT_R_STYLE],
|
||||
[
|
||||
AC_CACHE_CHECK([which data struct is used by crypt_r], php_cv_crypt_r_style,[
|
||||
php_cv_crypt_r_style=none
|
||||
AC_TRY_COMPILE([
|
||||
#include <crypt.h>
|
||||
],[
|
||||
CRYPTD buffer;
|
||||
crypt_r("passwd", "hash", &buffer);
|
||||
],
|
||||
php_cv_crypt_r_style=cryptd)
|
||||
|
||||
if test "$php_cv_crypt_r_style" = "none"; then
|
||||
AC_TRY_COMPILE([
|
||||
#include <crypt.h>
|
||||
],[
|
||||
struct crypt_data buffer;
|
||||
crypt_r("passwd", "hash", &buffer);
|
||||
],
|
||||
php_cv_crypt_r_style=struct_crypt_data)
|
||||
fi
|
||||
|
||||
if test "$php_cv_crypt_r_style" = "none"; then
|
||||
AC_TRY_COMPILE([
|
||||
#define _GNU_SOURCE
|
||||
#include <crypt.h>
|
||||
],[
|
||||
struct crypt_data buffer;
|
||||
crypt_r("passwd", "hash", &buffer);
|
||||
],
|
||||
php_cv_crypt_r_style=struct_crypt_data_gnu_source)
|
||||
fi
|
||||
])
|
||||
|
||||
if test "$php_cv_crypt_r_style" = "cryptd"; then
|
||||
AC_DEFINE(CRYPT_R_CRYPTD, 1, [Define if crypt_r has uses CRYPTD])
|
||||
fi
|
||||
if test "$php_cv_crypt_r_style" = "struct_crypt_data" -o "$php_cv_crypt_r_style" = "struct_crypt_data_gnu_source"; then
|
||||
AC_DEFINE(CRYPT_R_STRUCT_CRYPT_DATA, 1, [Define if crypt_r uses struct crypt_data])
|
||||
fi
|
||||
if test "$php_cv_crypt_r_style" = "struct_crypt_data_gnu_source"; then
|
||||
AC_DEFINE(CRYPT_R_GNU_SOURCE, 1, [Define if struct crypt_data requires _GNU_SOURCE])
|
||||
fi
|
||||
if test "$php_cv_crypt_r_style" = "none"; then
|
||||
AC_MSG_ERROR([Unable to detect data struct is used by crypt_r])
|
||||
fi
|
||||
])
|
||||
|
@ -467,7 +467,6 @@ chroot \
|
||||
ctime_r \
|
||||
cuserid \
|
||||
crypt \
|
||||
crypt_r \
|
||||
flock \
|
||||
ftok \
|
||||
funopen \
|
||||
@ -600,6 +599,11 @@ PHP_TIME_R_TYPE
|
||||
PHP_READDIR_R_TYPE
|
||||
PHP_CHECK_IN_ADDR_T
|
||||
|
||||
AC_CHECK_FUNCS(crypt_r, [ php_crypt_r="1" ], [ php_crypt_r="0" ])
|
||||
if test "x$php_crypt_r" = "x1"; then
|
||||
PHP_CRYPT_R_STYLE
|
||||
fi
|
||||
|
||||
divert(4)
|
||||
|
||||
dnl ## In diversion 4 we check user-configurable general settings.
|
||||
|
@ -28,6 +28,9 @@
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#if HAVE_CRYPT_H
|
||||
#if defined(CRYPT_R_GNU_SOURCE) && !defined(_GNU_SOURCE)
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#include <crypt.h>
|
||||
#endif
|
||||
#if TM_IN_SYS_TIME
|
||||
@ -147,8 +150,15 @@ PHP_FUNCTION(crypt)
|
||||
}
|
||||
#ifdef HAVE_CRYPT_R
|
||||
{
|
||||
#if defined(CRYPT_R_STRUCT_CRYPT_DATA)
|
||||
struct crypt_data buffer;
|
||||
memset(&buffer, 0, sizeof(buffer));
|
||||
#elif defined(CRYPT_R_CRYPTD)
|
||||
CRYPTD buffer;
|
||||
#else
|
||||
#error Data struct used by crypt_r() is unknown. Please report.
|
||||
#endif
|
||||
|
||||
RETURN_STRING(crypt_r(str, salt, &buffer), 1);
|
||||
}
|
||||
#else
|
||||
|
Loading…
Reference in New Issue
Block a user