NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
- Michael Lukashov
- Posts: 517
- Joined: Mon 23 Jan, 2006 09:38
- Has thanked: 6 times
- Been thanked: 21 times
- Contact:
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
C 2013/02/28 плагин входит в дистрибутив FAR 3, заменяя собой FarFTP.
Полезные ссылки:
При возникновении проблем:
Полезные ссылки:
При возникновении проблем:
Last edited by Michael Lukashov on Sat 19 Sep, 2015 10:22, edited 2 times in total.
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
Latest post of the previous page:
По своему посту чуть ранее я делал в багтреккере запись (английский), но там пока тоже тишина. Решил все-таки изучить вопрос поподробнее. То есть кратко, проблема в том, что для определенного сочетания файлов в папке, имеющих подчеркивание в названии, процесс синхронизации показывает файлы, которые гарантированно есть и по аттрибутам совпадают.
**** Этап 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 из 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;
Может быть это надо было написать в треккере, но я везде какая-то тишина по этой информации, поэтому не думаю, что это принципиально.
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
Спасибо за оперативное внесение pull request-а. Сейчас проверил Far Manager v3.0 build 5709DrKnS wrote: ↑Sun 22 Nov, 2020 16:55 Лучше сразу сюда - https://github.com/FarGroup/Far-NetBox/pulls
- NTFS проблемные папки: ok, No Differences found
- FAT, файлы, скопированные в обратной сортировке: ok , No Differences found
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
С релизами 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)
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
Проблема, которая вроде бы еще не обсуждалась.
Исторически так сложилось, что у нас на FTP появляются битые символические ссылки.
При перемещении по дереву каталогов NetBox преждевременно завершает работу, если перейти в каталог, где присутствует битая символическая ссылка (достаточно только перейти в такой каталог, без попытки перейти по битой ссылке).
Это происходит из-за того, что после команды LIST плагин дополнительно читает все симлинки каталога:
Исторически так сложилось, что у нас на FTP появляются битые символические ссылки.
При перемещении по дереву каталогов NetBox преждевременно завершает работу, если перейти в каталог, где присутствует битая символическая ссылка (достаточно только перейти в такой каталог, без попытки перейти по битой ссылке).
Это происходит из-за того, что после команды LIST плагин дополнительно читает все симлинки каталога:
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
Забыл добавить, что если убрать галочку с "Разрешать символьные ссылки", проблема исчезает.
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
Немного побродил под дебаггером, как пример, это возникает на каком-то этапе в вызове 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.
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
В борьбе с exception-ами кое-что выяснилось. Но я не знаю где лучше обсуждать до предложения pull-а и видимо по-русски для оперативности, дайте знать.
В методе TStringList::InsertItem заменил вызов
на альтернативный по смыслу
но который использует другу реализацию из vector.h
AV исчез, список на синхронизацию показывается. То есть некорректный код был в реализации вставки через итератор. С момента передачи в 2013- году было серьзеное изменение, где могла появится ошибка (коммит, где менялся код в реализации с итератором без количества).
Я так понимаю Michael Lukashov не пишет здесь уже три года и не вовлечен в проект все это время. Я бы предложил pull этот на изменение, потому что не хочется темплейт вектора трогать, если там этот метод с ошибкой. Но хотелось бы еще чье-нибудь мнение.
В методе TStringList::InsertItem заменил вызов
Code: Select all
FStrings.insert(FStrings.begin() + Index, S);
Code: Select all
FStrings.insert(FStrings.begin() + Index, 1, S);
Code: Select all
void insert(iterator it, size_type n, const T& val)
Я так понимаю Michael Lukashov не пишет здесь уже три года и не вовлечен в проект все это время. Я бы предложил pull этот на изменение, потому что не хочется темплейт вектора трогать, если там этот метод с ошибкой. Но хотелось бы еще чье-нибудь мнение.
Last edited by Maximus on Fri 27 Nov, 2020 11:05, edited 1 time in total.
- 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
Учитывая, что "RDESTL is library providing small subset of STL functionality" и то, что оно не обновлялось уже лет 5, я бы предложил закопать стюардессу глобально заменить
rde::
на std::
. Возможно, проблема на этом и уйдет, вместе с библиотекой.NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
Предложение интересное. Я даже и не сразу понял, что это производная проекта 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);
Из другого.
заметил, что когда в тестах моих было включено удалять в корзину и какой-то странный результат был под Windows 7, неполное исполнение списка синхронизации, потом увидел в дебаггере, что для семерки при удалении в корзину применяется нотация \\?\ которая судя по докам SHFileOperation вообще не поддерживается. Результат странный, честно говоря, вроде такое должны были раньше заметить, семерка уходящая натура, но не совсем еще ушла.
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
https://github.com/FarGroup/Far-NetBox/ ... /ChangeLog — вот здесь последняя запись датирована трёхлетней давностью. При этом в самом https://github.com/FarGroup/Far-NetBox вроде как что-то делают. Возникают и правятся баги. Нельзя ли в чейнджлоге писать, что именно делается? Чисто чтобы ориентироваться на минном поле.
Пользуюсь ФАРом больше 20 лет © собирательный.
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
При копировании файла с WebDAV на локальный диск не работает перезапись.
После ответа Yes на запрос **Overwrite local file 'file.txt'?** ничего не происходит. Ошибок не выводится и создается впечатление, что перезапись файла произошла.
В логе видно Copying finished: Transferred: 0
Копирование без перезаписи этого же файла в тот же каталог работает нормально.
Перезапись при подключении к серверу по FTP, SCP работает нормально.
v3.0.5730.0 x64 Win7
После ответа 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.
-
- Posts: 10
- Joined: Sun 03 Nov, 2013 08:44
- Been thanked: 1 time
SSH подключение (NetBox) регулярно спрашивает пароль
SSH подключение (NetBox) регулярно спрашивает пароль
В Far через плагин NetBox настроено SSH (SCP) подключение к серверу. Указан ключ. И даже пароль сохранён на всякий случай. Но всё равно постоянно при попытке зайти FAR запрашивает пароль. Проблема наблюдается при входе через Folder Shortcut, сохранённый по CTRL+цифра А вот при входе через настройки подключения и нажатия оттуда Connect - заходит без проблем, пароль не спросив.
Как сделать чтобы FAR не спрашивал пароль при входе через Folder Shortcut?
В Far через плагин NetBox настроено SSH (SCP) подключение к серверу. Указан ключ. И даже пароль сохранён на всякий случай. Но всё равно постоянно при попытке зайти FAR запрашивает пароль. Проблема наблюдается при входе через Folder Shortcut, сохранённый по CTRL+цифра А вот при входе через настройки подключения и нажатия оттуда Connect - заходит без проблем, пароль не спросив.
Как сделать чтобы FAR не спрашивал пароль при входе через Folder Shortcut?
Last edited by HaRT on Tue 07 Feb, 2023 20:29, edited 1 time in total.
Reason: Тема подклеена, заголовок продублирован в сообщение.
Reason: Тема подклеена, заголовок продублирован в сообщение.
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
Файл 42E4AEB1-A230-44F4-B33C-F195BB654931.db удалил как и PaperbackWriter, но в отличие от него - у меня ничего копироваться не начало. Этот файл просто пересоздается, результат нулевой.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 удалил
Господа-товарищи, эта проблема таки решена или нет?
Ответ от автора плагина двухлетней давности в гитхабе "у меня все работает" видел, но от этого не легче.
Версия Far30b5700.x86.20201112, т.е. заведомо новее чем в обсуждавшейся 2 года назад ситуации
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
NetBox — SFTP/SCP/FTP/FTPS/WebDAV client
Проверьте.
Я не помню чтобы сталкивался, но подозреваю что большинство участников форума (даже столкнувшись) уже давно решили вопрос тем или иным образом, и про баг благополучно забыли. Это ж одноразовое действие.
https://t.me/FarManager — Telegram чат