tony2001                Tue Dec 12 07:38:04 2006 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src    NEWS configure.in acinclude.m4 
    /php-src/ext/standard       crypt.c 
  Log:
  MFH: fix #39795 (build fails on AIX because crypt_r() uses different data 
struct)
  
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.425&r2=1.2027.2.547.2.426&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.425 php-src/NEWS:1.2027.2.547.2.426
--- php-src/NEWS:1.2027.2.547.2.425     Mon Dec 11 21:04:40 2006
+++ php-src/NEWS        Tue Dec 12 07:38:04 2006
@@ -50,6 +50,8 @@
 - 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
http://cvs.php.net/viewvc.cgi/php-src/configure.in?r1=1.579.2.52.2.29&r2=1.579.2.52.2.30&diff_format=u
Index: php-src/configure.in
diff -u php-src/configure.in:1.579.2.52.2.29 
php-src/configure.in:1.579.2.52.2.30
--- php-src/configure.in:1.579.2.52.2.29        Tue Dec  5 08:07:56 2006
+++ php-src/configure.in        Tue Dec 12 07:38:04 2006
@@ -1,4 +1,4 @@
- ## $Id: configure.in,v 1.579.2.52.2.29 2006/12/05 08:07:56 dmitry Exp $ -*- 
autoconf -*-
+ ## $Id: configure.in,v 1.579.2.52.2.30 2006/12/12 07:38:04 tony2001 Exp $ -*- 
autoconf -*-
 dnl ## Process this file with autoconf to produce a configure script.
 
 divert(1)
@@ -467,7 +467,6 @@
 ctime_r \
 cuserid \
 crypt \
-crypt_r \
 flock \
 ftok \
 funopen \
@@ -600,6 +599,11 @@
 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.
http://cvs.php.net/viewvc.cgi/php-src/acinclude.m4?r1=1.332.2.14.2.6&r2=1.332.2.14.2.7&diff_format=u
Index: php-src/acinclude.m4
diff -u php-src/acinclude.m4:1.332.2.14.2.6 php-src/acinclude.m4:1.332.2.14.2.7
--- php-src/acinclude.m4:1.332.2.14.2.6 Mon Dec  4 18:28:49 2006
+++ php-src/acinclude.m4        Tue Dec 12 07:38:04 2006
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: acinclude.m4,v 1.332.2.14.2.6 2006/12/04 18:28:49 tony2001 Exp $
+dnl $Id: acinclude.m4,v 1.332.2.14.2.7 2006/12/12 07:38:04 tony2001 Exp $
 dnl
 dnl This file contains local autoconf functions.
 dnl
@@ -2590,3 +2590,55 @@
   )
 ])
 
+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
+])
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/crypt.c?r1=1.62.2.1.2.2&r2=1.62.2.1.2.3&diff_format=u
Index: php-src/ext/standard/crypt.c
diff -u php-src/ext/standard/crypt.c:1.62.2.1.2.2 
php-src/ext/standard/crypt.c:1.62.2.1.2.3
--- php-src/ext/standard/crypt.c:1.62.2.1.2.2   Sun Dec  3 13:46:37 2006
+++ php-src/ext/standard/crypt.c        Tue Dec 12 07:38:04 2006
@@ -17,7 +17,7 @@
    |          Rasmus Lerdorf <[EMAIL PROTECTED]>                             |
    +----------------------------------------------------------------------+
  */
-/* $Id: crypt.c,v 1.62.2.1.2.2 2006/12/03 13:46:37 tony2001 Exp $ */
+/* $Id: crypt.c,v 1.62.2.1.2.3 2006/12/12 07:38:04 tony2001 Exp $ */
 #include <stdlib.h>
 
 #include "php.h"
@@ -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 @@
        }
 #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

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to