View Issue Details

IDProjectCategoryView StatusLast Update
0001172Far ManagerCopy/Movepublic2009-11-22 17:13
Reporterpm_kan Assigned ToDrKnS  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Platformx86OSWindowsOS VersionXP SP3
Fixed in Version2.0 
Summary0001172: Ошибка наследования прав доступа при переносе с использованием относительных путей
DescriptionЕсли при переносе установлен флаг наследования прав доступа, и в качестве пути назначения указан относительный путь (напр. ..\1), для каждого файла выводится сообщение вида
 ╔═══════════════ Ошибка ════════════════╗
 ║ Путь не найден ║
 ║ Ошибка установки прав доступа к файлу ║
 ║ ..\1\qq ║
 ║ Продолжить Отменить ║
 ╚═══════════════════════════════════════╝
и установка прав не производится (сами файлы переносятся нормально).
Воспроизводится на Far 2.0 build 1230
Steps To Reproducemkdir 1
mkdir 2
cd 2
echo 1 > qq
выполнить перенос файла qq в путь ..\1, права доступа: "Наследовать"
Additional InformationПроблема связана с разделением пути на панели и текущего каталога. Для исправления можно провести преобразование пути в Get/SetSecurity (см. патч, использование NTPath в этом случае вроде не должно ничего сломать) или использовать полные пути к источнику в ShellCopyOneFile (есть подозрения, что в этом случае одной замены strDestPath = strDest на ConvertNameToFull(strDest, strDestPath) будет недостаточно, т.к. в ф-ии присутствуют места, где проверяется, уж не со слэша ли начинается указанный пользователем путь и т.п.)
TagsNo tags attached.
Build1232

Activities

pm_kan

2009-11-22 11:46

reporter  

rights.diff (933 bytes)   
Index: unicode_far/copy.cpp
===================================================================
--- unicode_far/copy.cpp	(revision 3751)
+++ unicode_far/copy.cpp	(working copy)
@@ -4025,7 +4025,7 @@
   SECURITY_INFORMATION si=DACL_SECURITY_INFORMATION;
   SECURITY_DESCRIPTOR *sd=(SECURITY_DESCRIPTOR *)sddata;
   DWORD Needed;
-	BOOL RetSec=GetFileSecurity(FileName,si,sd,SDDATA_SIZE,&Needed);
+	BOOL RetSec=GetFileSecurity(NTPath(FileName),si,sd,SDDATA_SIZE,&Needed);
   int LastError=GetLastError();
   if (!RetSec)
   {
@@ -4047,7 +4047,7 @@
 int ShellCopy::SetSecurity(const wchar_t *FileName,const SECURITY_ATTRIBUTES &sa)
 {
   SECURITY_INFORMATION si=DACL_SECURITY_INFORMATION;
-	BOOL RetSec=SetFileSecurity(FileName,si,(PSECURITY_DESCRIPTOR)sa.lpSecurityDescriptor);
+	BOOL RetSec=SetFileSecurity(NTPath(FileName),si,(PSECURITY_DESCRIPTOR)sa.lpSecurityDescriptor);
 
   int LastError=GetLastError();
 
rights.diff (933 bytes)   

pm_kan

2009-11-22 14:41

reporter   bugnote:0004572

промахнулся с проектом, д.б. Far Manager Unicode

DrKnS

2009-11-22 15:14

administrator   bugnote:0004573

1232.

pm_kan

2009-11-22 16:33

reporter   bugnote:0004574

fixed

Issue History

Date Modified Username Field Change
2009-11-22 11:46 pm_kan New Issue
2009-11-22 11:46 pm_kan File Added: rights.diff
2009-11-22 14:41 pm_kan Note Added: 0004572
2009-11-22 14:51 DrKnS Project Far Manager 1.7x => Far Manager
2009-11-22 15:11 DrKnS Status new => assigned
2009-11-22 15:11 DrKnS Assigned To => DrKnS
2009-11-22 15:14 DrKnS Note Added: 0004573
2009-11-22 15:14 DrKnS Status assigned => feedback
2009-11-22 16:33 pm_kan Note Added: 0004574
2009-11-22 16:33 pm_kan Status feedback => resolved
2009-11-22 17:13 DrKnS Build => 1232
2009-11-22 17:13 DrKnS Status resolved => closed
2009-11-22 17:13 DrKnS Fixed in Version => 2.0
2009-11-22 17:13 DrKnS Resolution open => fixed