michaellukashov / Far-NetBox

SFTP/SCP/FTP/FTPS/WebDAV/S3 client for Far Manager 3 (http://farmanager.com/)
https://forum.farmanager.com/viewtopic.php?t=6317
GNU General Public License v2.0
158 stars 52 forks source link

Теряются права на файле при редактировании #265

Open viccpp opened 6 years ago

viccpp commented 6 years ago

Имеем подключение по SCP. Файл:

-rwxrwxr-x 1 vdxxxxxxxxx vdxxxxxxxxx     0 Feb 27 10:47 1.sh

Редактируем, жмём F2. Теперь:

-rw-r--r-- 1 vdxxxxxxxxx vdxxxxxxxxx     1 Feb 27 10:48 1.sh

x пропали!

VictorVG commented 6 years ago

При редактировании пакетный файл 1.sh с mod=775 был скачан на клиентскую машину, затем удалён на сервере, и с клиентской машины была передана его новая копия которой по умолчанию устанавливаются права доступа mod=644. А поскольку команды cmod -fh 775 1.sh на установку новых прав доступа mod=775 с клиентской системы на сервер не поступало, то ошибки нет.

Kamareka commented 6 years ago

Т.е. "формально ошибки нет"? Ситуация выглядит нелогичной, т.к. через F4-F2 мы редактируем файл "как бы на сервере", не подразумевая его передачу туда-сюда и выставление прав доступа 644. Ну даже если имеет место передача файла, то почему бы не выставить ему права доступа такими же, как были у оригинала до его удаления после копирования? Причем в каких-то старых версиях плагина таких вопросов точно не возникало.

VictorVG commented 6 years ago

С точки зрения сетевых протоколов ошибки нет. Понятие "изменение файла на сервере" подразумевает один из двух сценариев:

первый: мы локально залогонены на данную машину или подмонтировали её файловую систему через NFS (Network File System - протокол монтирования удалённых ФС созданный Sun Microsystems для SunOS и активно используемый в ОС семейства UNIX) либо используем механизмы RPC (Remote Procedure Call) - осуществляются обычные файловые операции;

второй: сетевое взаимодействие - вот тут всё определяется свойствами протокола. FTP, HTTP, SSH, gopher, WebDAV, SCP в случае внесения изменений в файл скачивают его машину клиента, а после передают на сервер команду удаления старой копии и записывают на сервер новую и тут понятно ставятся права доступа по умолчанию т.е. по настройкам сервера.

А т.к. у нас нет NFS сервера и смонтированной удалённой ФС, а так же мы не можем воспользоваться RPC так как нам не известно какая именно реальная ОС установлена сервере (клиенту сервер может эмулировать любую ОС), то набор команд и прикладной ABI/API удалённого RPC сервера и включён ли он в данный момент заранее мы не знаем что делает его использованием игрой в угадайку , а значит механизмы RPC в общем случае для нас не применимы.

Мы же не завравшийся 7sh3 для которого нет разницы между графической подсистемой и ОС - у него пароли пользователя вводятся в графической подсистеме "по каждому системному чиху", а так же программы разных разработчиков и для разных ОС одинаковы, а потому для него скриншот снятый в Pot Player под виндой годится для демонстрации наличия "бага" в The KMPlayer на MacOS ибо "Баг есть и он на скриншоте в ... виден!" или в GIMP а что на картинке совсем иная программа и ОС, ему это без разницы ибо истина это то что он хочет за неё выдать.:)

Kamareka commented 6 years ago

А почему нельзя выставить новому файлу после редактирования локально и передачи на сервер права доступа аналогичные старому? Скопировали к себе, запомнили права доступа у оригинала на сервере, отредактировали локально, сохранили, удалили оригинал с сервера, передали новую копию на сервер, выставили ей запомненные права доступа. Речь про SCP в данном случае.

VictorVG commented 6 years ago

Скопировали к себе, запомнили права доступа у оригинала на сервере, отредактировали локально, сохранили, удалили оригинал с сервера, передали новую копию на сервер, выставили ей запомненные права доступа.

Это разумная идея, но не всегда нам удастся получить результат UNIX команды cmod с удалённого сервера, хотя такой механизм позволил бы снять часть вопросов. Просто ранее когда создавался плагин такой задачи не возникало и её решения никто не искал. Но учитывая, что сохранение прав доступа в ряде случаев не требуется его включение можно сделать опциональным для конкретной операции- смысл этого будет в том, что решение будет принимать человек в зависимости от решаемой задачи. Правда наверняка мы встретимся с "праведной критикой" со стороны "рассеянных с улицы Басеинной" которые будут забывать ставить флажок в нужных им операциях и утверждать что им как котам на хвост наступили.:)

Kamareka commented 6 years ago

Есть четкое ощущение, что в прошлых версиях плагина такой проблемы не было. Насколько "прошлые" это были версии - сложно вспомнить, но, 1-2 года прошло уже точно. Могу ошибаться, конечно.

Kamareka commented 6 years ago

Так и есть. Скачал фар билд 4787, в его составе NetBox версии 2.3.0 билд 436. После редактирования и сохранения файла по scp права доступа не изменяются. Редактируем тот же файл в свежем фаре - права выставляются в 644.

Kamareka commented 6 years ago

Если еще точнее, то где-то между билдами фара 4972 (NetBox 2.4.3 build 502) и 5019 (NetBox 2.4.5 build 527) поведение изменилось.

VictorVG commented 6 years ago

Значит это в WinSCP что-то поменялось (?) так как алгоритмы пользовательской оболочки плагина за это время не менялись, а в WinSCP и без этого хватает "жизненно важных изменений" в реализации её авторами стандартов IETF (RFC) и ISO/IEC в части соблюдения спецификаций сетевых протоколов ибо стандарты пишутся для того, чтобы их игнорировать.:) Для примера посмотрите тот список багов что породила WinSCP 5.10 beta 3 - разработчики WinSCP утверждают что стандарты должны быть переписаны под их понимание, а посему для них их соблюдение не обязательно.:)

Kamareka commented 6 years ago

Возможно так, но тогда эти изменения в версии WinSCP не видны из фара в "About". Билд 5000 (NetBox 2.4.4 build 522 Based on WinSCP version 5.9.5) - права сохраняются. Билд 5003 (NetBox 2.4.4 build 524 Based on WinSCP version 5.9.5) - сброс в 644.

viccpp commented 6 years ago

Есть четкое ощущение, что в прошлых версиях плагина такой проблемы не было. Насколько "прошлые" это были версии - сложно вспомнить, но, 1-2 года прошло уже точно. Могу ошибаться, конечно.

Подтверждаю. Относительно недавно такое началось

Kamareka commented 6 years ago

Сломалось это в билде фара 5003 (от 9 августа 2017) и билде плагина 2.4.4 523 или 524 .

Kamareka commented 6 years ago

Проверил сейчас в последней версии WinSCP 5.13.1, а также в версиях 5.9.4, 5.9.5, 5.9.6 при соединении по SCP. После редактирования удаленного файла во всех этих версиях права доступа не сбрасываются в 644, а остаются оригинальными.

9-11 commented 6 years ago

Как мне кажется, вот этот патч исправляет проблему с сохранением прав файлов, а также исправляет проблему с запоминанием настроек по галке "Использовать эти настройки в следующий раз"

patch.txt

VictorVG commented 6 years ago

что бы вручную не возится команда path -i patch.txt использующая GNU patch. А тот сам исходники поправит.