diff --git a/ext/standard/crypt.c b/ext/standard/crypt.c index 6bc90e2b07a..66b37eb79ea 100644 --- a/ext/standard/crypt.c +++ b/ext/standard/crypt.c @@ -246,6 +246,13 @@ PHPAPI zend_string *php_crypt(const char *password, const int pass_len, const ch } #else + if (salt[0] != '$' && salt[0] != '_' && (!IS_VALID_SALT_CHARACTER(salt[0]) || !IS_VALID_SALT_CHARACTER(salt[1]))) { + if (!quiet) { + /* error consistently about invalid DES fallbacks */ + php_error_docref(NULL, E_DEPRECATED, DES_INVALID_SALT_ERROR); + } + } + # if defined(HAVE_CRYPT_R) && (defined(_REENTRANT) || defined(_THREAD_SAFE)) { # if defined(CRYPT_R_STRUCT_CRYPT_DATA) @@ -254,24 +261,23 @@ PHPAPI zend_string *php_crypt(const char *password, const int pass_len, const ch # elif defined(CRYPT_R_CRYPTD) CRYPTD buffer; # else -# error Data struct used by crypt_r() is unknown. Please report. +# error Data struct used by crypt_r() is unknown. Please report. # endif - if (salt[0] != '$' && salt[0] != '_' && (!IS_VALID_SALT_CHARACTER(salt[0]) || !IS_VALID_SALT_CHARACTER(salt[1]))) { - if (!quiet) { - /* error consistently about invalid DES fallbacks */ - php_error_docref(NULL, E_DEPRECATED, DES_INVALID_SALT_ERROR); - } - } crypt_res = crypt_r(password, salt, &buffer); - if (!crypt_res || (salt[0] == '*' && salt[1] == '0')) { - return NULL; - } else { - result = zend_string_init(crypt_res, strlen(crypt_res), 0); - return result; - } } +# elif defined(HAVE_CRYPT) + crypt_res = crypt(password, salt); +# else +# error No crypt() implementation # endif #endif + + if (!crypt_res || (salt[0] == '*' && salt[1] == '0')) { + return NULL; + } else { + result = zend_string_init(crypt_res, strlen(crypt_res), 0); + return result; + } } /* }}} */