NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Здесь можно обсудить ваш любимый плагин.
User avatar
Michael Lukashov
Posts: 516
Joined: Mon 23 Jan, 2006 09:38
Has thanked: 6 times
Been thanked: 21 times
Contact:

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by Michael Lukashov »

C 2013/02/28 плагин входит в дистрибутив FAR 3, заменяя собой FarFTP.

Полезные ссылки:

При возникновении проблем:
Last edited by Michael Lukashov on Sat 19 Sep, 2015 10:22, edited 2 times in total.
Maximus
Posts: 31
Joined: Thu 08 Oct, 2009 15:20

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by Maximus »

Latest post of the previous page:

Maximus wrote: Thu 26 Dec, 2019 10:54 Есть проблема с синхронизацией...
.....
ВЕРСИЯ
Пока писал, вдруг возникла версия причины. Если посмотреть на большие списки, когда сравниваю выше по дереву, то бросается в глаза, что очень много файлов с подчеркиваниями в названиях (процентов 95).....
По своему посту чуть ранее я делал в багтреккере запись (английский), но там пока тоже тишина. Решил все-таки изучить вопрос поподробнее. То есть кратко, проблема в том, что для определенного сочетания файлов в папке, имеющих подчеркивание в названии, процесс синхронизации показывает файлы, которые гарантированно есть и по аттрибутам совпадают.

**** Этап 1. Сравнение родственников (текущий WinSCP и FAR/NetBox)
Для большого бэкапа на bsd (куча php файлов) сделал синхронизацию (Зеркало на локал) через gui WinSCP 5.17.8 (Build 10803) и после этого повторно, которая сообщила, что разницы не найдено. То есть текущий WinSCP все корректно отрабатывает. Пошел в Far 3.0.5700.0 - для тех же папок куча файлов с подчеркиваниями.
Включил лог, увидел там для этих файлов Local File .. is new, Remote file ... is new, то есть по каким-то причинам NetBox именно считает их новыми.

**** Этап 2. Изучение исходников
Грузим исходники обоих, индексируем полнотекст, роемся
Код конечно сходный по понятными причинам, но есть одна важная разница. В исходниках класс TStringList, реализация которого исторически была повторена, так как все съехали со специфической компиляции под C++ Builder (Borland, VCL) на универсальную. Но Мартин судя по всему не съехал. Поэтому где-то здесь разница.
Сортировка выглядит так, как будто отсортировали по UPPERCASE-у (не лингвиситически), а ищем по CompareString (лингвистически). Я даже пару тестов сделал, скопировав из FAR-а по ordinal сортировке проблемные папки и ища в них бинарно по CompareString. Результат ровно такой как у текущего NetBox-а, то есть если остортировать ordinal по UpperCase-у (как виндовая CompareStringOrdinal делает),а искать CompareString, то не находятся ровно те же файлы.

Глядя в TStringList вроде бы все нормально, список создается отсортированный AddObject должен добавлять файл через бинарный поиск, а потом, когда идет сравнение, IndexOf тоже должен пользоваться им же.
Но вспомнилось, что в NTFS Unsorted mode в far-е выглядит очень похожим на обычный алфавитный порчдок, но чуть-чуть меняется. Соответственно мировой разум подсказывает, что для NTFS это связано как-то тем, что там используется B-TREE для расположения файлов, а для FAT-а по старинке определяется порядком появление файлов в папке. Соответственно, решил проверить на фате, как нетбокс синхронизирует. Заводим том в FAT32 (например TrueCrypt-ом), копируем туда файлы в обратном алфавитном порядке (чтобы нарушить напрочь сортировку) и запрашиваем синхронизацию в NetBox, и тут мы получаем почти полный список файлов. Из чего делаем вывод, что AddObject добавляет не бинарно-сортированно, а подряд, соответственно идем в исходный код и видим
(src\base\Classes.cpp)

Code: Select all

intptr_t TStringList::AddObject(UnicodeString S, TObject *AObject)
{
  intptr_t Result = 0;
  if (!GetSorted())
  {
    Result = GetCount();
  }
  else
  {
    if (Find(S, Result))
    {
      ....
    }
    else
    {
      Result = GetCount();
    }
  }
  InsertItem(Result, S, AObject);
  return Result;
}

.. что она некорректно написана. Если строка не найдена (отрицательный результат Find), то она добавляется в конец списка.

Для сравнения часть кода Find из Delphi/VCL

Code: Select all

function TStringList.Add(const S: string): Integer;
begin
  if not Sorted then
    Result := FCount
  else
    if Find(S, Result) then
      case Duplicates of
        ..... 
      end;
  InsertItem(Result, S);
end;
Из-за этого получается такой недо баг, который в силу того, что никто почти не использует FAT, а NTFS почти всегда дает алфавитный порядок файлов, по настоящему нигде не проявлялся.

Может быть это надо было написать в треккере, но я везде какая-то тишина по этой информации, поэтому не думаю, что это принципиально.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by DrKnS »

Maximus wrote: Sun 22 Nov, 2020 16:48 Может быть это надо было написать в треккере
Лучше сразу сюда - https://github.com/FarGroup/Far-NetBox/pulls
Maximus
Posts: 31
Joined: Thu 08 Oct, 2009 15:20

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by Maximus »

DrKnS wrote: Sun 22 Nov, 2020 16:55 Лучше сразу сюда - https://github.com/FarGroup/Far-NetBox/pulls
Спасибо за оперативное внесение pull request-а. Сейчас проверил Far Manager v3.0 build 5709
  • NTFS проблемные папки: ok, No Differences found
  • FAT, файлы, скопированные в обратной сортировке: ok , No Differences found
У меня только пожелание что-то делать с версиями текущих сборок. для build 5700 и 5709 одинаковая версия netbox-а ( 2.4.5.534 ) и неизменный с 2017 года changelog. Я так понимаю, что здесь человеческий фактор, кто-то должен руками инкремент сделать, но хоть что-то, тот же log, мог бы на автомате какие-то id тикетов содержать что ли. Ну или просьба поделиться каким-то знанием, как определить по бинарной загрузке соответствие github-таймлайну.
Maximus
Posts: 31
Joined: Thu 08 Oct, 2009 15:20

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by Maximus »

С релизами 5709 есть проблемы, возможно regression. Сравнение более или менее глубоких папок вызывает access violation
Exception: 0xC0000005 - EXCEPTION_ACCESS_VIOLATION
Details: Memory at FFFFFFF4 could not be read
errno: 0x00000000 - No error
LastError: 0x00000000 - Операция успешно завершена.
NTSTATUS: 0x80000006 - {Больше нет файлов} Не найдены другие файлы, соответствующие заданному шаблону.
Address: 0x00012B75 - NetBox.dll!tinylog::TinyLog::operator delete
Function: OpenW
Source:
File: C:\Temp\Far Manager v3.0 build 5709\Plugins\NetBox\NetBox.dll
Plugin: NetBox 2.4.534.5 (SFTP/FTP(S)/SCP/WebDAV client for FAR 3.0 x86/x64, Michael Lukashov)
Far: 3.0.5709.0 x86 (689c635)
OS: 6.1.7601.2.1.0.256.1
Kernel: 6.1.7601.24545 (win7sp1_ldr_escrow.200102-1707)
igor_20
Posts: 2
Joined: Wed 25 Nov, 2020 10:25

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by igor_20 »

Проблема, которая вроде бы еще не обсуждалась.
Исторически так сложилось, что у нас на FTP появляются битые символические ссылки.

При перемещении по дереву каталогов NetBox преждевременно завершает работу, если перейти в каталог, где присутствует битая символическая ссылка (достаточно только перейти в такой каталог, без попытки перейти по битой ссылке).

Это происходит из-за того, что после команды LIST плагин дополнительно читает все симлинки каталога:

igor_20
Posts: 2
Joined: Wed 25 Nov, 2020 10:25

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by igor_20 »

Забыл добавить, что если убрать галочку с "Разрешать символьные ссылки", проблема исчезает.
Maximus
Posts: 31
Joined: Thu 08 Oct, 2009 15:20

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by Maximus »

Maximus wrote: Wed 25 Nov, 2020 10:31 С релизами 5709 есть проблемы, возможно regression. Сравнение более или менее глубоких папок вызывает access violation
Exception: 0xC0000005 - EXCEPTION_ACCESS_VIOLATION

Немного побродил под дебаггером, как пример, это возникает на каком-то этапе в вызове CMStringData->IsLocked когда FStrings, созданные на основе векторного расширяются (grow) с 16 до 32 и перемещают с позиции 14 два элемента для того, чтобы сюда вставить, но там столько всего реализовано, чтобы повторить функциональность VCL-льных классов, что въехать очень сложно. Мое ощущение, что где-то не обнуляется буфер при появлении новых элементов и поэтому доступ к грязным данным происходит. При этом судя по логу, TStringList в новом режиме довольно много успешно добавляет. То есть AddObject-то по логике правильно работает, но какой-то менеджмент памяти подводит. Автора бы реализации этих классов сюда бы...
Last edited by Maximus on Wed 25 Nov, 2020 16:31, edited 1 time in total.
qwerty
Posts: 16
Joined: Fri 03 Apr, 2009 13:23

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by qwerty »

Dzirt2005 wrote: Thu 02 Jun, 2016 19:25
zone51 wrote:А никто не знает, можно ли, чтобы плагин до начала работы автоматически после логина выполнял команду "sudo su"? Или требуется доимплемент?
Это разве не оно?
Тоже хотелось бы поиметь данную опцию для SFTP
Maximus
Posts: 31
Joined: Thu 08 Oct, 2009 15:20

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by Maximus »

В борьбе с exception-ами кое-что выяснилось. Но я не знаю где лучше обсуждать до предложения pull-а и видимо по-русски для оперативности, дайте знать.

В методе TStringList::InsertItem заменил вызов

Code: Select all

  FStrings.insert(FStrings.begin() + Index, S);
на альтернативный по смыслу

Code: Select all

  FStrings.insert(FStrings.begin() + Index, 1, S);
но который использует другу реализацию из vector.h

Code: Select all

  void insert(iterator it, size_type n, const T& val)
AV исчез, список на синхронизацию показывается. То есть некорректный код был в реализации вставки через итератор. С момента передачи в 2013- году было серьзеное изменение, где могла появится ошибка (коммит, где менялся код в реализации с итератором без количества).

Я так понимаю Michael Lukashov не пишет здесь уже три года и не вовлечен в проект все это время. Я бы предложил pull этот на изменение, потому что не хочется темплейт вектора трогать, если там этот метод с ошибкой. Но хотелось бы еще чье-нибудь мнение.
Last edited by Maximus on Fri 27 Nov, 2020 11:05, edited 1 time in total.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by DrKnS »

Maximus wrote: Fri 27 Nov, 2020 11:05 не хочется темплейт вектора трогать, если там этот метод с ошибкой
Учитывая, что "RDESTL is library providing small subset of STL functionality" и то, что оно не обновлялось уже лет 5, я бы предложил закопать стюардессу глобально заменить rde:: на std::. Возможно, проблема на этом и уйдет, вместе с библиотекой.
Maximus
Posts: 31
Joined: Thu 08 Oct, 2009 15:20

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by Maximus »

DrKnS wrote: Fri 27 Nov, 2020 19:04
Maximus wrote: Fri 27 Nov, 2020 11:05 не хочется темплейт вектора трогать, если там этот метод с ошибкой
Учитывая, что "RDESTL is library providing small subset of STL functionality" и то, что оно не обновлялось уже лет 5, я бы предложил закопать стюардессу глобально заменить rde:: на std::. Возможно, проблема на этом и уйдет, вместе с библиотекой.
Предложение интересное. Я даже и не сразу понял, что это производная проекта rdestl. Как первый чек я сделал diff vector.h в нем и в NetBox, разница по мелочи, но похоже включения типа algorithm.h все-таки значительно отличаются. Это я к тому, что оригинальный может не содержать ошибку (или иметь уже исправление), но это снова выкапывать стюардессу...

По поводу замены на std, у меня были сомнения, нет ли там чего-то более позднего, что потребует повысить минимальные требования VS 2010. Но сегодня попробовал под VS Express 2010

Code: Select all

#include <vector> 
....
std::vector<UnicodeString> FStrings;
и по старому вернуть

Code: Select all

FStrings.insert(FStrings.begin() + Index, S);
все скомпилялось и работает похоже без ошибок. Но там еще rde классы и в classes, где надо заменять и проверять. То есть путь-то, в общем-то, правильный, но, возможно, муторный

Из другого.
заметил, что когда в тестах моих было включено удалять в корзину и какой-то странный результат был под Windows 7, неполное исполнение списка синхронизации, потом увидел в дебаггере, что для семерки при удалении в корзину применяется нотация \\?\ которая судя по докам SHFileOperation вообще не поддерживается. Результат странный, честно говоря, вроде такое должны были раньше заметить, семерка уходящая натура, но не совсем еще ушла.
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by Wave »

https://github.com/FarGroup/Far-NetBox/ ... /ChangeLog — вот здесь последняя запись датирована трёхлетней давностью. При этом в самом https://github.com/FarGroup/Far-NetBox вроде как что-то делают. Возникают и правятся баги. Нельзя ли в чейнджлоге писать, что именно делается? Чисто чтобы ориентироваться на минном поле.
Пользуюсь ФАРом больше 20 лет © собирательный.
fps
Posts: 267
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 27 times
Been thanked: 14 times

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by fps »

При копировании файла с WebDAV на локальный диск не работает перезапись.
После ответа Yes на запрос **Overwrite local file 'file.txt'?** ничего не происходит. Ошибок не выводится и создается впечатление, что перезапись файла произошла.
В логе видно Copying finished: Transferred: 0

Копирование без перезаписи этого же файла в тот же каталог работает нормально.
Перезапись при подключении к серверу по FTP, SCP работает нормально.
v3.0.5730.0 x64 Win7
Last edited by fps on Thu 21 Jan, 2021 07:02, edited 2 times in total.
ramzes_III
Posts: 10
Joined: Sun 03 Nov, 2013 08:44
Been thanked: 1 time

SSH подключение (NetBox) регулярно спрашивает пароль

Post by ramzes_III »

SSH подключение (NetBox) регулярно спрашивает пароль

В Far через плагин NetBox настроено SSH (SCP) подключение к серверу. Указан ключ. И даже пароль сохранён на всякий случай.
2021-02-23_161657 ssh.jpg
Но всё равно постоянно при попытке зайти FAR запрашивает пароль.
2021-02-23_161553 far netbox password.jpg
Проблема наблюдается при входе через Folder Shortcut, сохранённый по CTRL+цифра
2021-02-23_162010 folder shortcut.jpg
А вот при входе через настройки подключения и нажатия оттуда Connect - заходит без проблем, пароль не спросив.

Как сделать чтобы FAR не спрашивал пароль при входе через Folder Shortcut?
Last edited by HaRT on Tue 07 Feb, 2023 20:29, edited 1 time in total.
Reason: Тема подклеена, заголовок продублирован в сообщение.
DKKK
Posts: 2
Joined: Tue 02 Mar, 2021 13:45

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by DKKK »

PaperbackWriter wrote: Wed 04 Sep, 2019 10:07 Far 3.0.5445 x64 (NetBox 2.4.5.531)

Не могу импортировать в NetBox фтп-аккаунты.
С него можно скопировать, в него - нельзя. Нажимаю F5, появляется красная табличка
"Import session(s) from selected file(s)?"
Нажимаю "Да" - ничего не происходит.

Переименование папок (shift-F6) также не срабатывает, переименовываются только фтп-аккаунты.

Дополнение:
Файл 42E4AEB1-A230-44F4-B33C-F195BB654931.db удалил
Файл 42E4AEB1-A230-44F4-B33C-F195BB654931.db удалил как и PaperbackWriter, но в отличие от него - у меня ничего копироваться не начало. Этот файл просто пересоздается, результат нулевой.

Господа-товарищи, эта проблема таки решена или нет?
Ответ от автора плагина двухлетней давности в гитхабе "у меня все работает" видел, но от этого не легче.

Версия Far30b5700.x86.20201112, т.е. заведомо новее чем в обсуждавшейся 2 года назад ситуации
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

NetBox — SFTP/SCP/FTP/FTPS/WebDAV client

Post by John Doe »

DKKK wrote: Tue 02 Mar, 2021 13:52 Господа-товарищи, эта проблема таки решена или нет?
Проверьте.
Я не помню чтобы сталкивался, но подозреваю что большинство участников форума (даже столкнувшись) уже давно решили вопрос тем или иным образом, и про баг благополучно забыли. Это ж одноразовое действие.
https://t.me/FarManager — Telegram чат
Post Reply

Return to “Обсуждение плагинов”