diff options
author | Yasuo Ohgaki <yohgaki@php.net> | 2016-09-09 11:30:33 +0900 |
---|---|---|
committer | Yasuo Ohgaki <yohgaki@php.net> | 2016-09-09 11:31:54 +0900 |
commit | 38553e853b65eb84f919e4f5c5b9e702f1842b62 (patch) | |
tree | 488f824fe962ce7a5e8a8a70e3f0ecb46c2857d0 /ext/session | |
parent | b1f33db39f48c1254cc3661faf53890d213f07d0 (diff) | |
download | php-git-38553e853b65eb84f919e4f5c5b9e702f1842b62.tar.gz |
Fixed Bug #68015 Session does not report invalid uid for files save handler
Diffstat (limited to 'ext/session')
-rw-r--r-- | ext/session/mod_files.c | 4 | ||||
-rw-r--r-- | ext/session/tests/016.phpt | 8 |
2 files changed, 9 insertions, 3 deletions
diff --git a/ext/session/mod_files.c b/ext/session/mod_files.c index 7e373812d7..80eb658c11 100644 --- a/ext/session/mod_files.c +++ b/ext/session/mod_files.c @@ -138,6 +138,7 @@ static void ps_files_open(ps_files *data, const char *key TSRMLS_DC) } if (!ps_files_path_create(buf, sizeof(buf), data, key)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to create session data file path. Too short session ID, invalid save_path or path lentgth exceeds MAXPATHLEN(%d)", MAXPATHLEN); return; } @@ -147,7 +148,7 @@ static void ps_files_open(ps_files *data, const char *key TSRMLS_DC) #ifdef O_NOFOLLOW data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY | O_NOFOLLOW, data->filemode); #else - /* Check to make sure that the opened file is not outside of allowable dirs. + /* Check to make sure that the opened file is not outside of allowable dirs. This is not 100% safe but it's hard to do something better without O_NOFOLLOW */ if(PG(open_basedir) && lstat(buf, &sbuf) == 0 && S_ISLNK(sbuf.st_mode) && php_check_open_basedir(buf TSRMLS_CC)) { return; @@ -162,6 +163,7 @@ static void ps_files_open(ps_files *data, const char *key TSRMLS_DC) if (fstat(data->fd, &sbuf) || (sbuf.st_uid != 0 && sbuf.st_uid != getuid() && sbuf.st_uid != geteuid())) { close(data->fd); data->fd = -1; + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Session data file is not created by your uid"); return; } #endif diff --git a/ext/session/tests/016.phpt b/ext/session/tests/016.phpt index 82a85d2705..c1965df5cb 100644 --- a/ext/session/tests/016.phpt +++ b/ext/session/tests/016.phpt @@ -22,5 +22,9 @@ session_write_close(); print "I live\n"; ?> --EXPECTF-- -Warning: session_write_close(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (123;:/really%scompletely:::/invalid;;,23123;213) in %s on line %d -I live +Warning: session_start(): Failed to create session data file path. Too short session ID, invalid save_path or path lentgth exceeds MAXPATHLEN(%d) in %s on line 4 + +Warning: session_write_close(): Failed to create session data file path. Too short session ID, invalid save_path or path lentgth exceeds MAXPATHLEN(%d) in %s on line 6 + +Warning: session_write_close(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (123;:/really\completely:::/invalid;;,23123;213) in %s on line 6 +I live
\ No newline at end of file |