From 61e90440cec6d4f9b90307ca8bc0c7b3bec940ed Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Wed, 27 Oct 2004 11:59:48 +0000 Subject: [PATCH] MFH: fix bug #30388 (rename across filesystems loses ownership and permission info) --- main/streams/plain_wrapper.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c index 1f48ea4469..a7f7088fc1 100644 --- a/main/streams/plain_wrapper.c +++ b/main/streams/plain_wrapper.c @@ -1021,10 +1021,33 @@ static int php_plain_files_rename(php_stream_wrapper *wrapper, char *url_from, c if (ret == -1) { #ifdef EXDEV if (errno == EXDEV) { + struct stat sb; if (php_copy_file(url_from, url_to TSRMLS_CC) == SUCCESS) { - VCWD_UNLINK(url_from); - return 1; + if (VCWD_STAT(url_from, &sb) == 0) { + if (VCWD_CHMOD(url_to, sb.st_mode)) { + if (errno == EPERM) { + php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno)); + VCWD_UNLINK(url_from); + return 1; + } + php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno)); + return 0; + } + if (VCWD_CHOWN(url_to, sb.st_uid, sb.st_gid)) { + if (errno == EPERM) { + php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno)); + VCWD_UNLINK(url_from); + return 1; + } + php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno)); + return 0; + } + VCWD_UNLINK(url_from); + return 1; + } } + php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno)); + return 0; } #endif php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno)); -- 2.40.0