View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001172 | Far Manager | Copy/Move | public | 2009-11-22 11:46 | 2009-11-22 17:13 |
Reporter | pm_kan | Assigned To | DrKnS | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | x86 | OS | Windows | OS Version | XP SP3 |
Fixed in Version | 2.0 | ||||
Summary | 0001172: Ошибка наследования прав доступа при переносе с использованием относительных путей | ||||
Description | Если при переносе установлен флаг наследования прав доступа, и в качестве пути назначения указан относительный путь (напр. ..\1), для каждого файла выводится сообщение вида ╔═══════════════ Ошибка ════════════════╗ ║ Путь не найден ║ ║ Ошибка установки прав доступа к файлу ║ ║ ..\1\qq ║ ║ Продолжить Отменить ║ ╚═══════════════════════════════════════╝ и установка прав не производится (сами файлы переносятся нормально). Воспроизводится на Far 2.0 build 1230 | ||||
Steps To Reproduce | mkdir 1 mkdir 2 cd 2 echo 1 > qq выполнить перенос файла qq в путь ..\1, права доступа: "Наследовать" | ||||
Additional Information | Проблема связана с разделением пути на панели и текущего каталога. Для исправления можно провести преобразование пути в Get/SetSecurity (см. патч, использование NTPath в этом случае вроде не должно ничего сломать) или использовать полные пути к источнику в ShellCopyOneFile (есть подозрения, что в этом случае одной замены strDestPath = strDest на ConvertNameToFull(strDest, strDestPath) будет недостаточно, т.к. в ф-ии присутствуют места, где проверяется, уж не со слэша ли начинается указанный пользователем путь и т.п.) | ||||
Tags | No tags attached. | ||||
Build | 1232 | ||||
|
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(); |
|
промахнулся с проектом, д.б. Far Manager Unicode |
|
1232. |
|
fixed |
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 |