From 27a603e8116b9efb36f55bb5c9327dc23183ab7c Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 5 Mar 2018 15:16:55 +0100 Subject: Include username into the file cache path --- ext/opcache/zend_file_cache.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'ext/opcache/zend_file_cache.c') diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c index 3be1318f98..02e4f36126 100644 --- a/ext/opcache/zend_file_cache.c +++ b/ext/opcache/zend_file_cache.c @@ -23,6 +23,9 @@ #include "zend_interfaces.h" #include "php.h" +#ifdef ZEND_WIN32 +#include "ext/standard/md5.h" +#endif #ifdef HAVE_OPCACHE_FILE_CACHE @@ -721,16 +724,43 @@ static char *zend_file_cache_get_bin_file_path(zend_string *script_path) size_t len; char *filename; +#ifndef ZEND_WIN32 len = strlen(ZCG(accel_directives).file_cache); filename = emalloc(len + 33 + ZSTR_LEN(script_path) + sizeof(SUFFIX)); memcpy(filename, ZCG(accel_directives).file_cache, len); -#ifndef ZEND_WIN32 filename[len] = '/'; memcpy(filename + len + 1, ZCG(system_id), 32); memcpy(filename + len + 33, ZSTR_VAL(script_path), ZSTR_LEN(script_path)); memcpy(filename + len + 33 + ZSTR_LEN(script_path), SUFFIX, sizeof(SUFFIX)); #else + PHP_MD5_CTX ctx; + char md5uname[32]; + unsigned char digest[16], c; + size_t i; + char *uname = php_win32_get_username(); + + PHP_MD5Init(&ctx); + PHP_MD5Update(&ctx, uname, strlen(uname)); + PHP_MD5Final(digest, &ctx); + for (i = 0; i < 16; i++) { + c = digest[i] >> 4; + c = (c <= 9) ? c + '0' : c - 10 + 'a'; + md5uname[i * 2] = c; + c = digest[i] & 0x0f; + c = (c <= 9) ? c + '0' : c - 10 + 'a'; + md5uname[(i * 2) + 1] = c; + } + + len = strlen(ZCG(accel_directives).file_cache); + + filename = emalloc(len + 33 + 33 + ZSTR_LEN(script_path) + sizeof(SUFFIX)); + + memcpy(filename, ZCG(accel_directives).file_cache, len); + filename[len] = '\\'; + memcpy(filename + 1 + len, md5uname, 32); + len += 32; filename[len] = '\\'; + memcpy(filename + len + 1, ZCG(system_id), 32); if (ZSTR_LEN(script_path) >= 2 && ':' == ZSTR_VAL(script_path)[1]) { /* local fs */ @@ -743,6 +773,7 @@ static char *zend_file_cache_get_bin_file_path(zend_string *script_path) memcpy(filename + len + 33, ZSTR_VAL(script_path), ZSTR_LEN(script_path)); memcpy(filename + len + 33 + ZSTR_LEN(script_path), SUFFIX, sizeof(SUFFIX)); } + free(uname); #endif return filename; -- cgit v1.2.1