Skip to content

Commit

Permalink
Autotools: Refactor crypt check in ext/standard (php#14856)
Browse files Browse the repository at this point in the history
- AH_TEMPLATE sets the CPP macro help text on a single place
- AC_DEFINE can be used instead of AC_DEFINE_UNQUOTED
- AS_VAR_IF used and CS synced
- crypt() function is at this point required as all required algorithm
  checks are depending on it and error is thrown if not found when using
  external crypt library
  • Loading branch information
petk authored Jul 7, 2024
1 parent 2acd4c2 commit 9def76e
Showing 1 changed file with 13 additions and 31 deletions.
44 changes: 13 additions & 31 deletions ext/standard/config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,20 @@ PHP_ARG_WITH([external-libcrypt],
[no],
[no])

if test "$PHP_EXTERNAL_LIBCRYPT" != "no"; then
AH_TEMPLATE([PHP_USE_PHP_CRYPT_R],
[Define to 1 if PHP uses its own crypt_r, and to 0 if using the external crypt
library.])

AS_VAR_IF([PHP_EXTERNAL_LIBCRYPT], [no], [
AC_DEFINE([PHP_USE_PHP_CRYPT_R], [1])
PHP_ADD_SOURCES([PHP_EXT_DIR([standard])],
[crypt_freesec.c crypt_blowfish.c crypt_sha512.c crypt_sha256.c php_crypt_r.c])
], [
PHP_CHECK_FUNC(crypt, crypt)
PHP_CHECK_FUNC(crypt_r, crypt)
AC_CHECK_HEADERS([crypt.h])
AS_VAR_IF([ac_cv_func_crypt], [yes],,
[AC_MSG_ERROR([Cannot use external libcrypt as crypt() is missing.])])
AS_VAR_IF([ac_cv_func_crypt_r], [yes],
[PHP_CRYPT_R_STYLE],
[AC_MSG_ERROR([Cannot use external libcrypt as crypt_r() is missing.])])
Expand All @@ -78,12 +88,8 @@ if test "$PHP_EXTERNAL_LIBCRYPT" != "no"; then
#include <string.h>
int main(void) {
#ifdef HAVE_CRYPT
char *encrypted = crypt("rasmuslerdorf","rl");
return !encrypted || strcmp(encrypted,"rl.3StKT.4T8M");
#else
return 1;
#endif
}]])],[
ac_cv_crypt_des=yes
],[
Expand All @@ -106,12 +112,8 @@ int main(void) {
#include <string.h>
int main(void) {
#ifdef HAVE_CRYPT
char *encrypted = crypt("rasmuslerdorf","_J9..rasm");
return !encrypted || strcmp(encrypted,"_J9..rasmBYk8r9AiWNc");
#else
return 1;
#endif
}]])],[
ac_cv_crypt_ext_des=yes
],[
Expand All @@ -134,7 +136,6 @@ int main(void) {
#include <string.h>
int main(void) {
#ifdef HAVE_CRYPT
char salt[15], answer[40];
char *encrypted;
Expand All @@ -147,9 +148,6 @@ int main(void) {
strcat(answer,"rISCgZzpwk3UhDidwXvin0");
encrypted = crypt("rasmuslerdorf",salt);
return !encrypted || strcmp(encrypted,answer);
#else
return 1;
#endif
}]])],[
ac_cv_crypt_md5=yes
],[
Expand All @@ -172,7 +170,6 @@ int main(void) {
#include <string.h>
int main(void) {
#ifdef HAVE_CRYPT
char salt[30], answer[70];
char *encrypted;
Expand All @@ -182,9 +179,6 @@ int main(void) {
strcpy(&answer[29],"nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra");
encrypted = crypt("rasmuslerdorf",salt);
return !encrypted || strcmp(encrypted,answer);
#else
return 1;
#endif
}]])],[
ac_cv_crypt_blowfish=yes
],[
Expand All @@ -207,7 +201,6 @@ int main(void) {
#include <string.h>
int main(void) {
#ifdef HAVE_CRYPT
char salt[21], answer[21+86];
char *encrypted;
Expand All @@ -216,9 +209,6 @@ int main(void) {
strcat(answer, "EeHCRjm0bljalWuALHSTs1NB9ipEiLEXLhYeXdOpx22gmlmVejnVXFhd84cEKbYxCo.XuUTrW.RLraeEnsvWs/");
encrypted = crypt("rasmuslerdorf",salt);
return !encrypted || strcmp(encrypted,answer);
#else
return 1;
#endif
}]])],[
ac_cv_crypt_sha512=yes
],[
Expand All @@ -241,7 +231,6 @@ int main(void) {
#include <string.h>
int main(void) {
#ifdef HAVE_CRYPT
char salt[21], answer[21+43];
char *encrypted;
Expand All @@ -250,9 +239,6 @@ int main(void) {
strcat(answer, "cFAm2puLCujQ9t.0CxiFIIvFi4JyQx5UncCt/xRIX23");
encrypted = crypt("rasmuslerdorf",salt);
return !encrypted || strcmp(encrypted,answer);
#else
return 1;
#endif
}]])],[
ac_cv_crypt_sha256=yes
],[
Expand All @@ -266,12 +252,8 @@ int main(void) {
AC_MSG_ERROR([Cannot use external libcrypt as some algo are missing])
fi
AC_DEFINE_UNQUOTED(PHP_USE_PHP_CRYPT_R, 0, [Whether PHP has to use its own crypt_r])
else
AC_DEFINE_UNQUOTED(PHP_USE_PHP_CRYPT_R, 1, [Whether PHP has to use its own crypt_r])

PHP_ADD_SOURCES(PHP_EXT_DIR(standard), crypt_freesec.c crypt_blowfish.c crypt_sha512.c crypt_sha256.c php_crypt_r.c)
fi
AC_DEFINE([PHP_USE_PHP_CRYPT_R], [0])
])

AS_VAR_IF([cross_compiling], [no], [AC_FUNC_FNMATCH],
[AS_CASE([$host_alias], [*linux*],
Expand Down

0 comments on commit 9def76e

Please sign in to comment.