|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : damir bikmuhametov 2:5020/400 09 Nov 2005 16:49:28 To : damir bikmuhametov Subject : Re: crypt() в php -------------------------------------------------------------------------------- Hello, damir! You wrote to Dmitry Miloserdov on Wed, 9 Nov 2005 11:13:23 +0000 (UTC): db> придется таки подхачить crypt.c из php, чтобы в случае, когда db> длина входящей соли равна 2, передавал crypt(3) соль именно db> такой длины, а не дополненную символами '$' до PHP_MAX_SALT_LEN. уфф... ничего не понимаю. сделал как хотел, руками развернул макрос RETURN_STRING, навтыкал отладочной печати: === cut === PHP_FUNCTION(crypt) { char salt[PHP_MAX_SALT_LEN+1]; char *str, *salt_in = NULL; int str_len, salt_in_len; salt[0]=salt[PHP_MAX_SALT_LEN]='\0'; /* This will produce suitable results if people depend on DES-encryption available (passing always 2-character salt). At least for glibc6.1 */ memset(&salt[1], '$', PHP_MAX_SALT_LEN-1); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &str, &str_len, &salt_in, &salt_in_len) == FAILURE) { return; } if (salt_in) { memcpy(salt, salt_in, MIN(PHP_MAX_SALT_LEN, salt_in_len)); /* XXX */ if (MIN(PHP_MAX_SALT_LEN, salt_in_len) == 2) salt[2] = '\0'; } /* The automatic salt generation only covers standard DES and md5-crypt */ if(!*salt) { #if PHP_MD5_CRYPT strcpy(salt, "$1$"); php_to64(&salt[3], PHP_CRYPT_RAND, 4); php_to64(&salt[7], PHP_CRYPT_RAND, 4); strcpy(&salt[11], "$"); #elif PHP_STD_DES_CRYPT php_to64(&salt[0], PHP_CRYPT_RAND, 2); salt[2] = '\0'; #endif } printf("str = '%s', salt = '%s'\n", str, salt); printf("crypt() = '%s'\n", crypt(str, salt)); char *__s = crypt(str, salt); printf("__s = '%s'\n", __s); return_value->value.str.len = strlen(__s); return_value->value.str.val = estrndup(__s, return_value->value.str.len); return_value->type = IS_STRING; } /* }}} */ === cut === вот результат: # ./php -n /root/1.php str = '123456', salt = '__' crypt() = '(null)' __s = '(null)' Segmentation fault (core dumped) # gdb ./php ./php.core ... #0 0x0808a8a4 in zif_crypt (ht=0, return_value=0x820d3a4, this_ptr=0x0, return_value_used=1) at /usr/ports/lang/php5/work/php-5.0.5/ext/standard/crypt.c:160 160 return_value->value.str.len = strlen(__s); (gdb) написал простейшую программку: === cut === #include <unistd.h> int main() { printf("%s\n", crypt("123456", "__")); } === cut === # ./test __LOg./3jE1/M хелп ми! With best regards, damir bikmuhametov. --- ifmail v.2.15dev5.3 * Origin: OOO BIS (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/7795b153a0d7.html, оценка из 5, голосов 10
|