Commit:    7e41980fe4972e097e178c034f92920c9c63086c
Author:    Anthony Ferrara <ircmax...@ircmaxell.com>         Sun, 24 Jun 2012 
23:25:18 -0400
Parents:   c77f2c29585f97bd9dad533b9d2bc8334de34f1b
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=7e41980fe4972e097e178c034f92920c9c63086c

Log:
Actually complete password_create()

Changed paths:
  M  ext/standard/password.c
  M  ext/standard/php_password.h


Diff:
diff --git a/ext/standard/password.c b/ext/standard/password.c
index 677f132..9201ff3 100644
--- a/ext/standard/password.c
+++ b/ext/standard/password.c
@@ -28,7 +28,7 @@
 #include "php_password.h"
 #include "php_rand.h"
 #include "base64.h"
-
+#include "zend_interfaces.h"
 
 PHP_MINIT_FUNCTION(password) /* {{{ */
 {
@@ -139,15 +139,20 @@ PHP_FUNCTION(password_make_salt)
 Hash a password */
 PHP_FUNCTION(password_create)
 {
-        char *password, *algo = 0, *hash_format, *hash, *salt;
-        int password_len, algo_len = 0, salt_len = 0, required_salt_len = 0, 
hash_format_len;
+        char *algo = 0, *hash_format, *hash, *salt;
+        int algo_len = 0, salt_len = 0, required_salt_len = 0, hash_format_len;
         HashTable *options = 0;
-        zval **option_buffer;
+        zval **option_buffer, *ret, *password, *hash_zval;
 
-        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|sH", 
&password, &password_len, &algo, &algo_len, &options) == FAILURE) {
+        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|sH", 
&password, &algo, &algo_len, &options) == FAILURE) {
                 RETURN_FALSE;
         }
 
+       if (Z_TYPE_P(password) != IS_STRING) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Password must be a 
string");
+               RETURN_FALSE;
+       }
+
         if (algo_len == 0) {
                algo = PHP_PASSWORD_DEFAULT;
                 algo_len = strlen(PHP_PASSWORD_DEFAULT);
@@ -240,10 +245,26 @@ PHP_FUNCTION(password_create)
        hash = emalloc(salt_len + hash_format_len + 1);
        sprintf(hash, "%s%s", hash_format, salt);
        hash[hash_format_len + salt_len] = 0;
+
+       ALLOC_INIT_ZVAL(hash_zval);
+       ZVAL_STRINGL(hash_zval, hash, hash_format_len + salt_len, 0);
+
        efree(hash_format);
        efree(salt);
 
-        RETURN_STRINGL(hash, hash_format_len + salt_len, 0);
+       zend_call_method_with_2_params(NULL, NULL, NULL, "crypt", &ret, 
password, hash_zval);
+
+       zval_ptr_dtor(&hash_zval);
+
+       if (Z_TYPE_P(ret) != IS_STRING) {
+               zval_ptr_dtor(&ret);
+               RETURN_FALSE;
+       } else if(Z_STRLEN_P(ret) < 13) {
+               zval_ptr_dtor(&ret);
+               RETURN_FALSE;
+       }
+
+       RETURN_ZVAL(ret, 0, 1);
 }
 /* }}} */
 
diff --git a/ext/standard/php_password.h b/ext/standard/php_password.h
index f813189..5967840 100644
--- a/ext/standard/php_password.h
+++ b/ext/standard/php_password.h
@@ -33,7 +33,7 @@ PHP_MINIT_FUNCTION(password);
 #define PHP_PASSWORD_SHA256    "5"
 #define PHP_PASSWORD_SHA512    "6"
 
-#define PHP_PASSWORD_BCRYPT_DEFAULT_COST 14;
+#define PHP_PASSWORD_BCRYPT_DEFAULT_COST 12;
 #define PHP_PASSWORD_SHA_DEFAULT_ROUNDS 5000;


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

Reply via email to