summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2018-03-05 15:16:55 +0100
committerAnatol Belski <ab@php.net>2018-03-05 15:16:55 +0100
commit27a603e8116b9efb36f55bb5c9327dc23183ab7c (patch)
tree7c5223ebcf5f933348fa44a9d1c33335dc2d6e18
parent350082ed7146fd889d04c8864d8d649bea73dd01 (diff)
downloadphp-git-27a603e8116b9efb36f55bb5c9327dc23183ab7c.tar.gz
Include username into the file cache path
-rw-r--r--ext/opcache/zend_file_cache.c33
1 files changed, 32 insertions, 1 deletions
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;