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

NetBox v2.4.5.527: FTP URL:22 в БД не пишется поле PortNumber и при перезапуске сессии порт сбрасывается на умолчания протокола. #252

Open VictorVG opened 7 years ago

VictorVG commented 7 years ago

Логика формирования URL удалённого хоста формирует его как конкатенацию полей БД

              _FSProtocol  :// HostName / RemoteDirectory : PortNumber /_

но, для протокола FTP поле PortNumber пишется в БД не во всех случаях например порт 79 запишется в БД, а если оператор задал порт 22, то в БД не запишется PortNumber. Проверить оказалось легко:

задаём хост ftp5.gwdg.de/pub/tdf/libreoffice:22, сохраняем, far /export netbox.farconfig ви видим (специально привожу весь блок NetBox):

<?xml version="1.0" encoding="UTF-8"?>
<farconfig version="3.0.5011">
    <pluginsconfig>
        <plugin guid="42E4AEB1-A230-44F4-B33C-F195BB654931">
            <hierarchicalconfig>
                <key name="42E4AEB1-A230-44F4-B33C-F195BB654931" description="NetBox">
                    <key name="Configuration">
                        <value name="Version" type="text" value="2.4.5"/>
                        <key name="CDCache">
                            <value name="anonymous@192.168.1.1" type="hex" value="41,2F,3D,2F,2F,0D,0A,2F,73,77,61,70,3D,2F,2F,0D,0A,2F,46,54,50,3D,2F,2F,0D,0A,2F,46,54,50,2F,50,6F,77,65,72,20,53,68,65,6C,6C,3D,2F,2F,0D,0A,2F,46,54,50,2F,46,61,72,33,3D,2F,2F,0D,0A"/>
                            <value name="vic4935@webdav.yandex.ru" type="hex" value="41,2F,41,6C,65,6B,73,61,6E,64,72,3D,2F,2F,0D,0A,2F,42,65,74,61,3D,2F,2F,0D,0A,2F,44,6F,63,75,6D,65,6E,74,73,3D,2F,2F,0D,0A,2F,3D,2F,2F,0D,0A,00"/>
                        </key>
                        <key name="Interface">
                            <value name="AutoReadDirectoryAfterOp" type="qword" value="0000000000000001"/>
                            <value name="BeepOnFinish" type="qword" value="0000000000000000"/>
                            <value name="BeepOnFinishAfter" type="hex" value="17,6C,C1,16,6C,C1,36,3F"/>
                            <value name="CacheDirectoryChangesMaxSize" type="qword" value="0000000000000064"/>
                            <value name="ChecksumAlg" type="text" value="sha1"/>
                            <value name="CollectUsage" type="qword" value="0000000000000000"/>
                            <value name="ConfirmCommandSession" type="qword" value="0000000000000001"/>
                            <value name="ConfirmOverwriting" type="qword" value="0000000000000001"/>
                            <value name="ConfirmResume" type="qword" value="0000000000000001"/>
                            <value name="ContinueOnError" type="qword" value="0000000000000000"/>
                            <value name="ExternalIpAddress" type="text" value=""/>
                            <value name="IgnoreCancelBeforeFinish" type="hex" value="DF,BC,9A,78,56,34,02,3F"/>
                            <value name="KeepUpToDateChangeDelay" type="qword" value="00000000000001F4"/>
                            <value name="MaxWatchDirectories" type="qword" value="00000000000001F4"/>
                            <value name="PuttyPassword" type="qword" value="0000000000000000"/>
                            <value name="PuttyPath" type="text" value="%25PROGRAMFILES%25%5CPuTTY%5Cputty.exe"/>
                            <value name="PuttyRegistryStorageKey" type="text" value="Software%5CSimonTatham%5CPuTTY"/>
                            <value name="PuttySession" type="text" value="WinSCP%20temporary%20session"/>
                            <value name="QueueAutoPopup" type="qword" value="0000000000000001"/>
                            <value name="QueueKeepDoneItems" type="qword" value="0000000000000001"/>
                            <value name="QueueKeepDoneItemsFor" type="qword" value="000000000000000F"/>
                            <value name="QueueRememberPassword" type="qword" value="0000000000000000"/>
                            <value name="QueueTransfersLimit" type="qword" value="0000000000000002"/>
                            <value name="RandomSeedFile" type="text" value="%25APPDATA%25%5Cwinscp.rnd"/>
                            <value name="SessionReopenAuto" type="qword" value="0000000000001388"/>
                            <value name="SessionReopenAutoIdle" type="qword" value="0000000000002328"/>
                            <value name="SessionReopenAutoMaximumNumberOfRetries" type="qword" value="0000000000000002"/>
                            <value name="SessionReopenAutoStall" type="qword" value="000000000000EA60"/>
                            <value name="SessionReopenBackground" type="qword" value="00000000000007D0"/>
                            <value name="SessionReopenTimeout" type="qword" value="0000000000000000"/>
                            <value name="ShowFtpWelcomeMessage" type="qword" value="0000000000000000"/>
                            <value name="SynchronizeMode" type="qword" value="0000000000000000"/>
                            <value name="SynchronizeModeAuto" type="qword" value="FFFFFFFFFFFFFFFF"/>
                            <value name="SynchronizeOptions" type="qword" value="0000000000000005"/>
                            <value name="SynchronizeParams" type="qword" value="0000000000000042"/>
                            <value name="TelnetForFtpInPutty" type="qword" value="0000000000000001"/>
                            <value name="TryFtpWhenSshFails" type="qword" value="0000000000000001"/>
                            <value name="TunnelLocalPortNumberHigh" type="qword" value="000000000000C3B3"/>
                            <value name="TunnelLocalPortNumberLow" type="qword" value="000000000000C350"/>
                            <key name="Interface">
                                <key name="Bookmarks">
                                    <key name="Local"/>
                                    <key name="Options"/>
                                    <key name="Remote"/>
                                    <key name="ShortCuts"/>
                                </key>
                                <key name="CopyParam">
                                    <value name="AddXToDirectories" type="qword" value="0000000000000001"/>
                                    <value name="CPSLimit" type="qword" value="0000000000000000"/>
                                    <value name="CalculateSize" type="qword" value="0000000000000001"/>
                                    <value name="ClearArchive" type="qword" value="0000000000000000"/>
                                    <value name="CopyParamList" type="qword" value="FFFFFFFFFFFFFFFF"/>
                                    <value name="FileNameCase" type="qword" value="0000000000000000"/>
                                    <value name="IgnorePermErrors" type="qword" value="0000000000000000"/>
                                    <value name="IncludeFileMask" type="text" value=""/>
                                    <value name="LocalInvalidChars" type="text" value="/%5C:%2A%3F&quot;&lt;&gt;|"/>
                                    <value name="Masks" type="text" value="%2A.%2Ahtml;%20%2A.htm;%20%2A.txt;%20%2A.php;%20%2A.php3;%20%2A.cgi;%20%2A.c;%20%2A.cpp;%20%2A.h;%20%2A.pas;%20%2A.bas;%20%2A.tex;%20%2A.pl;%20%2A.js;%20.htaccess;%20%2A.xtml;%20%2A.css;%20%2A.cfg;%20%2A.ini;%20%2A.sh;%20%2A.xml"/>
                                    <value name="NewerOnly" type="qword" value="0000000000000000"/>
                                    <value name="PreserveReadOnly" type="qword" value="0000000000000000"/>
                                    <value name="PreserveRights" type="qword" value="0000000000000000"/>
                                    <value name="PreserveTime" type="qword" value="0000000000000001"/>
                                    <value name="PreserveTimeDirs" type="qword" value="0000000000000000"/>
                                    <value name="Queue" type="qword" value="0000000000000000"/>
                                    <value name="QueueIndividually" type="qword" value="0000000000000000"/>
                                    <value name="QueueNoConfirmation" type="qword" value="0000000000000001"/>
                                    <value name="RemoveBOM" type="qword" value="0000000000000000"/>
                                    <value name="RemoveCtrlZ" type="qword" value="0000000000000000"/>
                                    <value name="ReplaceInvalidChars" type="qword" value="0000000000000001"/>
                                    <value name="ResumeSupport" type="qword" value="0000000000000001"/>
                                    <value name="ResumeThreshold" type="qword" value="0000000000019000"/>
                                    <value name="Text" type="text" value="rw-r--r--"/>
                                    <value name="TransferMode" type="qword" value="0000000000000000"/>
                                </key>
                                <key name="Far">
                                    <value name="ApplyCommandCommand" type="text" value=""/>
                                    <value name="ApplyCommandParams" type="qword" value="0000000000000000"/>
                                    <value name="ColumnTypesDetailed" type="text" value="N,S,DM,O,G,R"/>
                                    <value name="ColumnWidthsDetailed" type="text" value="0,8,14,0,0,9"/>
                                    <value name="CommandPrefixes" type="text" value="netbox,ftp,scp,sftp,ftps,http,https,webdav"/>
                                    <value name="ConfirmOverwritingOverride" type="qword" value="0000000000000000"/>
                                    <value name="ConfirmSynchronizedBrowsing" type="qword" value="0000000000000001"/>
                                    <value name="CustomPanelModeDetailed" type="qword" value="0000000000000001"/>
                                    <value name="DisksMenu" type="qword" value="0000000000000001"/>
                                    <value name="DisksMenuHotKey" type="qword" value="0000000000000000"/>
                                    <value name="EditorDownloadDefaultMode" type="qword" value="0000000000000001"/>
                                    <value name="EditorMultiple" type="qword" value="0000000000000000"/>
                                    <value name="EditorUploadOnSave" type="qword" value="0000000000000001"/>
                                    <value name="EditorUploadSameOptions" type="qword" value="0000000000000001"/>
                                    <value name="FullScreenDetailed" type="qword" value="0000000000000001"/>
                                    <value name="HostNameInTitle" type="qword" value="0000000000000001"/>
                                    <value name="PageantPath" type="text" value="G:%5Cdev%5Cfar3%5C15%5CFar%5Cplugins%5Cnetbox%5Cputty%5Cpageant.exe"/>
                                    <value name="PluginsMenu" type="qword" value="0000000000000001"/>
                                    <value name="PluginsMenuCommands" type="qword" value="0000000000000001"/>
                                    <value name="PuttygenPath" type="text" value="G:%5Cdev%5Cfar3%5C15%5CFar%5Cplugins%5Cnetbox%5Cputty%5Cputtygen.exe"/>
                                    <value name="QueueBeep" type="qword" value="0000000000000001"/>
                                    <value name="StatusColumnTypesDetailed" type="text" value="NR"/>
                                    <value name="StatusColumnWidthsDetailed" type="text" value="0"/>
                                </key>
                                <key name="Interface">
                                    <key name="NewDirectory">
                                        <value name="Valid" type="hex" value="00,00,00,00,00,00,00,00"/>
                                    </key>
                                </key>
                            </key>
                        </key>
                        <key name="LastFingerprints">
                            <value name="webdav.yandex.ru:443:tls" type="text" value="b4:5b:34:67:a0:8b:ae:ac:9a:6d:5e:2b:19:74:20:d6:2c:1a:ef:8f"/>
                        </key>
                        <key name="Logging">
                            <value name="LogFileAppend" type="qword" value="0000000000000001"/>
                            <value name="LogWindowLines" type="qword" value="0000000000000064"/>
                            <value name="PermanentActionsLogFileName" type="text" value="%25TEMP%25%5C&amp;S.xml"/>
                            <value name="PermanentLogActions" type="qword" value="0000000000000000"/>
                            <value name="PermanentLogFileName" type="text" value="%25TEMP%25%5C&amp;S.log"/>
                            <value name="PermanentLogProtocol" type="qword" value="0000000000000002"/>
                            <value name="PermanentLogSensitive" type="qword" value="0000000000000000"/>
                            <value name="PermanentLogging" type="qword" value="0000000000000000"/>
                        </key>
                        <key name="Usage"/>
                    </key>
                    <key name="HttpsCertificates">
                        <value name="webdav.yandex.ru:443" type="text" value="b4:5b:34:67:a0:8b:ae:ac:9a:6d:5e:2b:19:74:20:d6:2c:1a:ef:8f;08"/>
                    </key>
                    <key name="Sessions">
                        <key name="Default%20Settings">
                            <value name="FSProtocol" type="text" value="SFTP%20(SCP)"/>
                            <value name="Version" type="text" value="2.3.0"/>
                        </key>
                        <key name="Far%20sources%20(SVN%20repository)">
                            <value name="CacheDirectories" type="qword" value="0000000000000000"/>
                            <value name="CacheDirectoryChanges" type="qword" value="0000000000000000"/>
                            <value name="Compression" type="qword" value="0000000000000001"/>
                            <value name="FSProtocol" type="text" value="WebDAV"/>
                            <value name="HostName" type="text" value="svn.code.sf.net"/>
                            <value name="PortNumber" type="qword" value="0000000000000050"/>
                            <value name="RemoteDirectory" type="text" value="/p/farmanager/code/trunk"/>
                            <value name="SFTPMaxVersion" type="qword" value="0000000000000000"/>
                            <value name="UpdateDirectories" type="qword" value="0000000000000000"/>
                            <value name="Version" type="text" value="2.3.0"/>
                        </key>
                        <key name="LiBO%20(FTP)">
                            <value name="CodePage" type="text" value=""/>
                            <value name="FSProtocol" type="text" value="FTP"/>
                            <value name="FtpAllowEmptyPassword" type="qword" value="0000000000000001"/>
                            <value name="HostName" type="text" value="ftp5.gwdg.de"/>
                            <value name="KEX" type="text" value="ecdh,ecdh,ecdh,ecdh,ecdh,ecdh"/>
                            <value name="LoginType" type="qword" value="0000000000000000"/>
                            <value name="LookupUserGroups2" type="qword" value="0000000000000000"/>
                            <value name="PingType" type="qword" value="0000000000000002"/>
                            <value name="RemoteDirectory" type="text" value="/pub/tdf/libreoffice/"/>
                            <value name="SFTPMaxVersion" type="qword" value="0000000000000000"/>
                            <value name="TimeDifferenceAuto" type="qword" value="0000000000000000"/>
                            <value name="Timeout" type="qword" value="000000000000005A"/>
                            <value name="UpdateDirectories" type="qword" value="0000000000000000"/>
                            <value name="UserName" type="text" value="anonymous"/>
                            <value name="Version" type="text" value="2.4.5"/>
                        </key>
                        <key name="YD%20(WebDAV)">
                            <value name="CodePage" type="text" value=""/>
                            <value name="FSProtocol" type="text" value="WebDAV"/>
                            <value name="Ftps" type="qword" value="0000000000000002"/>
                            <value name="HostName" type="text" value="webdav.yandex.ru"/>
                            <value name="KEX" type="text" value="ecdh,ecdh,ecdh,ecdh,ecdh,ecdh"/>
                            <value name="LookupUserGroups2" type="qword" value="0000000000000000"/>
                            <value name="PortNumber" type="qword" value="00000000000001BB"/>
                            <value name="RemoteDirectory" type="text" value="/"/>
                            <value name="SFTPMaxVersion" type="qword" value="0000000000000000"/>
                            <value name="UpdateDirectories" type="qword" value="0000000000000000"/>
                            <value name="Version" type="text" value="2.4.5"/>
                        </key>
                    </key>
                </key>
            </hierarchicalconfig>
        </plugin>
    </pluginsconfig>
</farconfig>

и видим, что для случая указания FSProtocol : FTP & RemoutPort : 22 поле RemoutPort в БД 42E4AEB1-A230-44F4-B33C-F195BB654931.db не создаётся, а если есть удаляется, что приводит к возникновению проблемы описанной в #251.

Предлагаемое решение для устранения подобной проблемы простое -

1) убираем ИИ решающий что поле RemoutPort в БД можно/нужно удалить и пишем поле RemoutPort в 42E4AEB1-A230-44F4-B33C-F195BB654931.db всегда;

2) изменяем логику обработки источника значения записи RemourPort на:

If find(url,pos) = ":" then PortNumber = Subst(url, pos+1) Else PortNumber = UI.Port End

выбираем направление поиска от конца строки для упрощения выделения (понятно, что это и регуляркой решаемо, но?) , при этом исходим из логики приоритета что указанный в URL порт переопределяет любые дефолтные значения опеределяемые через поле Port.