Ticket #1795: filezilla-3.3.2.1-proxy-password.patch

File filezilla-3.3.2.1-proxy-password.patch, 37.2 KB (added by Stefan G., 13 years ago)
  • docs/fzdefaults.xml.example

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/docs/fzdefaults.xml.example ./docs/fzdefaults.xml.example
    old new  
    5858      If the "Disable update check" setting is set to 1, the capability to
    5959      check for new FileZilla versions will be completely disabled.
    6060
     61    Always ask for proxy password
     62
     63      If the "Always ask for proxy password" setting is set to 1, the user will
     64      always be asked for a proxy password. It will never be saved in any file.
     65
    6166-->
    6267
    6368<FileZilla3>
     
    6570      <Setting name="Config Location">$SOMEDIR/filezilla/</Setting>
    6671      <Setting name="Kiosk mode">0</Setting>
    6772      <Setting name="Disable update check">0</Setting>
     73      <Setting name="Always ask for proxy password">0</Setting>
    6874    </Settings>
    6975    <Servers>
    7076        <Server>
  • locales/de.po

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/locales/de.po ./locales/de.po
    old new  
    14931493msgid "As tab in the transfer queue pane"
    14941494msgstr "Als Tab in der Warteschlangenansicht"
    14951495
     1496#: resources.h:762
     1497msgid "Ask for \"FTP proxy\" password"
     1498msgstr "Nach dem FTP-Proxy-Passwort fragen"
     1499
     1500#: resources.h:780
     1501msgid "Ask for \"Generic proxy\" password"
     1502msgstr "Nach dem allgemeinen Proxy-Passwort fragen"
     1503
    14961504#: resources.h:253 resources.h:263 resources.h:827 resources.h:836
    14971505msgid "Ask for action"
    14981506msgstr "Aktion erfragen"
     
    69476955msgid "Themes"
    69486956msgstr "Designs"
    69496957
     6958#: resources.h:129
     6959msgid ""
     6960"There was an error during the login process.\n"
     6961"Please retype the password(s) for the next try."
     6962msgstr ""
     6963"Ein Fehler ist während dem Loginvorgang aufgetreten.\n"
     6964"Bitte geben Sie das jeweilige Proxy-Passwort erneut ein."
     6965
    69506966#: ../../locales/../src/interface/filter.cpp:447
    69516967msgid "This filter set cannot be removed."
    69526968msgstr "Dieser Filtersatz kann nicht entfernt werden."
     
    76057621msgstr ""
    76067622"Verwenden Sie ein 'x', um die ursprünglichen Berechtigungen beizubehalten."
    76077623
     7624#: ../../locales/../src/interface/loginmanager.cpp:248
     7625msgid ""
     7626"You can't change the proxy settings while there are active connections!\n"
     7627"\n"
     7628"Should all connections be closed? (\"No\" discards the new settings!)"
     7629msgstr "Sie können die Proxy-Einstellungen nicht ändern, während Verbindungen aktiv sind!\n"
     7630"\n"
     7631"Sollen alle Verbindungen getrennt werden? (\"Nein\" verwirft die Änderungen!)"
     7632
    76087633#: ../../locales/../src/interface/import.cpp:29
    76097634msgid "You cannot import settings from FileZilla's own settings directory."
    76107635msgstr ""
  • src/engine/ControlSocket.cpp

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/engine/ControlSocket.cpp ./src/engine/ControlSocket.cpp
    old new  
    11711171        int res = m_pProxyBackend->Handshake((enum CProxySocket::ProxyType)proxy_type,
    11721172                                             m_pCurrentServer->GetHost(), m_pCurrentServer->GetPort(),
    11731173                                              m_pEngine->GetOptions()->GetOption(OPTION_PROXY_USER),
    1174                                               m_pEngine->GetOptions()->GetOption(OPTION_PROXY_PASS));
     1174                                              m_pEngine->GetOptions()->GetOption(OPTION_PROXY_ASKED_PASS));
    11751175
    11761176        if (res != EINPROGRESS)
    11771177        {
  • src/engine/ftpcontrolsocket.cpp

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/engine/ftpcontrolsocket.cpp ./src/engine/ftpcontrolsocket.cpp
    old new  
    526526            pData->loginSequence.push_back(cmd);
    527527            cmd.optional = true;
    528528            cmd.hide_arguments = true;
    529             cmd.command = _T("PASS ") + m_pEngine->GetOptions()->GetOption(OPTION_FTP_PROXY_PASS);
     529            cmd.command = _T("PASS ") + m_pEngine->GetOptions()->GetOption(OPTION_FTP_PROXY_ASKED_PASS);
    530530            pData->loginSequence.push_back(cmd);
    531531        }
    532532        // User@host
     
    558558            pData->loginSequence.push_back(cmd);
    559559            cmd.optional = true;
    560560            cmd.hide_arguments = true;
    561             cmd.command = _T("PASS ") + m_pEngine->GetOptions()->GetOption(OPTION_FTP_PROXY_PASS);
     561            cmd.command = _T("PASS ") + m_pEngine->GetOptions()->GetOption(OPTION_FTP_PROXY_ASKED_PASS);
    562562            pData->loginSequence.push_back(cmd);
    563563        }
    564564
     
    592592    else if (pData->ftp_proxy_type == 4)
    593593    {
    594594        wxString proxyUser = m_pEngine->GetOptions()->GetOption(OPTION_FTP_PROXY_USER);
    595         wxString proxyPass = m_pEngine->GetOptions()->GetOption(OPTION_FTP_PROXY_PASS);
     595        wxString proxyPass = m_pEngine->GetOptions()->GetOption(OPTION_FTP_PROXY_ASKED_PASS);
    596596        wxString host = server.FormatHost();
    597597        wxString user = server.GetUser();
    598598        wxString account = server.GetAccount();
  • src/engine/sftpcontrolsocket.cpp

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/engine/sftpcontrolsocket.cpp ./src/engine/sftpcontrolsocket.cpp
    old new  
    565565
    566566            wxString show = cmd;
    567567
    568             wxString pass = m_pEngine->GetOptions()->GetOption(OPTION_PROXY_PASS);
     568            wxString pass = m_pEngine->GetOptions()->GetOption(OPTION_PROXY_ASKED_PASS);
    569569            if (pass != _T(""))
    570570            {
    571571                cmd += _T(" \"") + pass + _T("\"");
  • src/include/optionsbase.h

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/include/optionsbase.h ./src/include/optionsbase.h
    old new  
    5353    OPTION_FTP_PROXY_TYPE,
    5454    OPTION_FTP_PROXY_HOST,
    5555    OPTION_FTP_PROXY_USER,
     56    OPTION_FTP_PROXY_ASK_PASS,
     57    OPTION_FTP_PROXY_ASKED_PASS,
    5658    OPTION_FTP_PROXY_PASS,
    5759    OPTION_FTP_PROXY_CUSTOMLOGINSEQUENCE,
    5860
     
    6264    OPTION_PROXY_HOST,
    6365    OPTION_PROXY_PORT,
    6466    OPTION_PROXY_USER,
     67    OPTION_PROXY_ASK_PASS,
     68    OPTION_PROXY_ASKED_PASS,
    6569    OPTION_PROXY_PASS,
    6670
    6771    OPTION_LOGGING_FILE,
  • src/interface/Mainfrm.cpp

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/interface/Mainfrm.cpp ./src/interface/Mainfrm.cpp
    old new  
    26902690    if (!pState)
    26912691        return false;
    26922692
     2693    if(!server.GetBypassProxy())
     2694        CLoginManager::Get().GetProxyPassword();
     2695
    26932696    if (pState->IsRemoteConnected() || !pState->IsRemoteIdle())
    26942697    {
    26952698        wxDialogEx dlg;
  • src/interface/Options.cpp

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/interface/Options.cpp ./src/interface/Options.cpp
    old new  
    6262    { "FTP Proxy type", number, _T("0"), false },
    6363    { "FTP Proxy host", string, _T(""), false },
    6464    { "FTP Proxy user", string, _T(""), false },
     65    { "FTP Proxy ask password", number, _T("1"), false },
     66    { "FTP Proxy asked password", string, _T(""), true },
    6567    { "FTP Proxy password", string, _T(""), false },
    6668    { "FTP Proxy login sequence", string, _T(""), false },
    6769    { "SFTP keyfiles", string, _T(""), false },
     
    6971    { "Proxy host", string, _T(""), false },
    7072    { "Proxy port", number, _T("0"), false },
    7173    { "Proxy user", string, _T(""), false },
     74    { "Proxy ask password", number, _T("1"), false },
     75    { "Proxy asked password", string, _T(""), true },
    7276    { "Proxy password", string, _T(""), false },
    7377    { "Logging file", string, _T(""), false },
    7478    { "Logging filesize limit", number, _T("10"), false },
     
    167171{
    168172    { _T("Config Location"), string, _T(""), 0 },
    169173    { _T("Kiosk mode"), number, _T(""), 0 },
    170     { _T("Disable update check"), number, _T(""), 0 }
     174    { _T("Disable update check"), number, _T(""), 0 },
     175    { _T("Always ask for proxy password"), number, _T(""), 0 }
    171176};
    172177
    173178BEGIN_EVENT_TABLE(COptions, wxEvtHandler)
  • src/interface/Options.h

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/interface/Options.h ./src/interface/Options.h
    old new  
    8888    DEFAULT_SETTINGSDIR,
    8989    DEFAULT_KIOSKMODE,
    9090    DEFAULT_DISABLEUPDATECHECK,
     91    DEFAULT_ASKPROXYPASS,
    9192
    9293    // Has to be last element
    9394    DEFAULTS_NUM
  • src/interface/loginmanager.cpp

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/interface/loginmanager.cpp ./src/interface/loginmanager.cpp
    old new  
    11#include <filezilla.h>
    22#include "loginmanager.h"
    33#include "filezillaapp.h"
     4#include "Options.h"
     5#include "state.h"
     6#include "wx/statline.h"
    47
    58CLoginManager CLoginManager::m_theLoginManager;
    69
     
    124127
    125128void CLoginManager::CachedPasswordFailed(const CServer& server)
    126129{
     130    readProxyPass = !ActiveProxyConnections(&server);
     131    readFtpProxyPass = readProxyPass;
     132    GetProxyPassword(true);
     133
    127134    if (server.GetLogonType() != ASK)
    128135        return;
    129136   
     
    140147        return;
    141148    }
    142149}
     150
     151bool CLoginManager::ActiveProxyConnections(const CServer *server)
     152{
     153    const std::vector<CState*> *allStates = CContextManager::Get()->GetAllStates();
     154    bool active = false;
     155    for (std::vector<CState*>::const_iterator iter = allStates->begin(); iter != allStates->end(); iter++)
     156    {
     157        if ((*iter)->GetServer() && !((*iter)->GetServer()->GetBypassProxy()))
     158        {
     159            if (server == NULL || (*iter)->GetServer() != server)
     160            {
     161                active = true;
     162                break;
     163            }
     164        }
     165    }
     166
     167    return active;
     168}
     169
     170void CLoginManager::GetProxyPassword(bool onError)
     171{
     172    if (readProxyPass || readFtpProxyPass)
     173    {
     174        bool askGenericProxyPass    = ( readProxyPass    && ( COptions::Get()->GetDefaultVal(DEFAULT_ASKPROXYPASS) != 0  || COptions::Get()->GetOptionVal(OPTION_PROXY_ASK_PASS    ) != 0 ) && COptions::Get()->GetOptionVal(OPTION_PROXY_TYPE    ) != 0);
     175        bool askFtpProxyPass        = ( readFtpProxyPass && ( COptions::Get()->GetDefaultVal(DEFAULT_ASKPROXYPASS) != 0  || COptions::Get()->GetOptionVal(OPTION_FTP_PROXY_ASK_PASS) != 0 ) && COptions::Get()->GetOptionVal(OPTION_FTP_PROXY_TYPE) != 0);
     176
     177        if (!askGenericProxyPass )
     178            COptions::Get()->SetOption(OPTION_PROXY_ASKED_PASS, COptions::Get()->GetOptionVal(OPTION_PROXY_PASS));
     179
     180        if (!askFtpProxyPass)
     181            COptions::Get()->SetOption(OPTION_FTP_PROXY_ASKED_PASS, COptions::Get()->GetOptionVal(OPTION_FTP_PROXY_PASS));
     182
     183
     184        if (!askGenericProxyPass && !askFtpProxyPass)
     185            return; // nothing to do for us - leave
     186       
     187        wxDialog pwdDlg;
     188        wxXmlResource::Get()->LoadDialog(&pwdDlg, wxGetApp().GetTopWindow(), _T("ID_ENTER_PROXY_PASSWORD"));
     189
     190        if (!askGenericProxyPass)
     191        {
     192            XRCCTRL(pwdDlg, "ID_GENERIC_LABEL", wxStaticText)->Hide();
     193            XRCCTRL(pwdDlg, "ID_GENERIC_PASSWORD_LABEL", wxStaticText)->Hide();
     194            XRCCTRL(pwdDlg, "ID_GENERIC_PASSWORD", wxTextCtrl)->Hide();
     195        }
     196
     197        if (!askFtpProxyPass)
     198        {
     199            XRCCTRL(pwdDlg, "ID_FTP_LABEL", wxStaticText)->Hide();
     200            XRCCTRL(pwdDlg, "ID_FTP_PASSWORD_LABEL", wxStaticText)->Hide();
     201            XRCCTRL(pwdDlg, "ID_FTP_PASSWORD", wxTextCtrl)->Hide();
     202        }
     203
     204        if (!onError)
     205        {
     206            XRCCTRL(pwdDlg, "ID_ERROR_MSG_LABEL", wxStaticText)->Hide();
     207            XRCCTRL(pwdDlg, "ID_ERROR_MSG_LINE", wxStaticLine)->Hide();
     208        }
     209
     210        XRCCTRL(pwdDlg, "wxID_OK", wxButton)->SetId(wxID_OK);
     211        XRCCTRL(pwdDlg, "wxID_CANCEL", wxButton)->SetId(wxID_CANCEL);
     212        pwdDlg.GetSizer()->Fit(&pwdDlg);
     213        pwdDlg.GetSizer()->SetSizeHints(&pwdDlg);
     214
     215        if (pwdDlg.ShowModal() == wxID_OK)
     216        {
     217            if (askGenericProxyPass)
     218            {
     219                wxString genericPass;
     220                genericPass = XRCCTRL(pwdDlg, "ID_GENERIC_PASSWORD", wxTextCtrl)->GetValue();
     221                COptions::Get()->SetOption(OPTION_PROXY_ASKED_PASS, genericPass);
     222            }
     223
     224            if (askFtpProxyPass)
     225            {
     226                wxString ftpPass;
     227                ftpPass = XRCCTRL(pwdDlg, "ID_FTP_PASSWORD", wxTextCtrl)->GetValue();
     228                COptions::Get()->SetOption(OPTION_FTP_PROXY_ASKED_PASS, ftpPass);
     229            }
     230        }
     231
     232        readProxyPass = false;
     233        readFtpProxyPass = false;
     234
     235    }
     236}
     237
     238bool CLoginManager::ResetProxyPassword(int type)
     239{
     240    if (ActiveProxyConnections())
     241    {
     242        int answer = wxMessageBox(_("You can't change the proxy settings while there are active connections!\n\nShould all connections be closed? (\"No\" discards the new settings!)"), _("Confirm"), wxYES_NO | wxICON_QUESTION, wxGetApp().GetTopWindow());
     243        if (answer == wxYES)
     244        {
     245            const std::vector<CState*> *allStates = CContextManager::Get()->GetAllStates();
     246            for (std::vector<CState*>::const_iterator iter = allStates->begin(); iter != allStates->end(); iter++)
     247            {
     248                if (*iter)
     249                    (*iter)->Disconnect();
     250            }
     251
     252            if (type == 0)
     253                readProxyPass = true;
     254            else if (type == 1)
     255                readFtpProxyPass = true;
     256            else
     257                return false;
     258
     259            GetProxyPassword();
     260            return true;
     261        }
     262    }
     263    else
     264    {
     265        if (type == 0)
     266            readProxyPass = true;
     267        else if (type == 1)
     268            readFtpProxyPass = true;
     269        else
     270            return false;
     271
     272        return true;
     273    }
     274
     275    return false;
     276}
     277 No newline at end of file
  • src/interface/loginmanager.h

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/interface/loginmanager.h ./src/interface/loginmanager.h
    old new  
    55// behaviour. These are:
    66// - Password dialog for servers with ASK or INTERACTIVE logontype
    77// - Storage of passwords for ASK servers for duration of current session
     8// - Password dialog for proxies with ASK logontype
    89
    910class CLoginManager
    1011{
     
    1213    static CLoginManager& Get() { return m_theLoginManager; }
    1314
    1415    bool GetPassword(CServer& server, bool silent, wxString name = _T(""), wxString challenge = _T(""));
     16    void GetProxyPassword(bool onError = false);
     17    bool ResetProxyPassword(int type);
    1518   
    1619    void CachedPasswordFailed(const CServer& server);
    1720
    1821protected:
     22    CLoginManager() { readProxyPass = true; readFtpProxyPass = true; }
     23    bool readProxyPass;
     24    bool readFtpProxyPass;
     25    bool ActiveProxyConnections(const CServer *server = NULL);
     26
    1927    bool DisplayDialog(CServer& server, wxString name, wxString challenge);
    2028
    2129    static CLoginManager m_theLoginManager;
  • src/interface/resources/dialogs.xrc

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/interface/resources/dialogs.xrc ./src/interface/resources/dialogs.xrc
    old new  
    14151415      </object>
    14161416    </object>
    14171417  </object>
     1418  <object class="wxDialog" name="ID_ENTER_PROXY_PASSWORD">
     1419    <title>Enter password</title>
     1420      <object class="wxBoxSizer">
     1421        <orient>wxVERTICAL</orient>
     1422          <object class="sizeritem">
     1423            <object class="wxStaticText" name="ID_ERROR_MSG_LABEL">
     1424              <label>There was an error during the login process.&#x0A;Please retype the password(s) for the next try.</label>
     1425            </object>
     1426            <flag>wxALL|wxALIGN_TOP|wxALIGN_CENTER_HORIZONTAL</flag>
     1427            <border>5</border>
     1428          </object>
     1429          <object class="sizeritem">
     1430          <object class="wxStaticLine" name="ID_ERROR_MSG_LINE">
     1431                <size>220,-1</size>
     1432          </object>
     1433          <flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
     1434          <border>2</border>
     1435        </object>
     1436        <object class="sizeritem">
     1437          <object class="wxStaticText" name="ID_INFO_CANCEL_LABEL">
     1438            <label>&quot;Cancel&quot; will keep the current password(s).</label>
     1439          </object>
     1440          <flag>wxALL|wxALIGN_TOP|wxALIGN_CENTER_HORIZONTAL</flag>
     1441          <border>5</border>
     1442        </object>
     1443        <object class="sizeritem">
     1444          <object class="wxStaticText" name="ID_GENERIC_LABEL">
     1445            <label>Generic proxy</label>
     1446          </object>
     1447          <flag>wxTOP|wxLEFT|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
     1448          <border>5</border>
     1449        </object>
     1450        <object class="sizeritem">
     1451          <object class="wxFlexGridSizer">
     1452            <cols>2</cols>
     1453            <vgap>5</vgap>
     1454            <hgap>5</hgap>
     1455            <object class="sizeritem">
     1456              <object class="wxStaticText" name="ID_GENERIC_PASSWORD_LABEL">
     1457                <label>Password:</label>
     1458              </object>
     1459              <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
     1460            </object>
     1461            <object class="sizeritem">
     1462              <object class="wxTextCtrl" name="ID_GENERIC_PASSWORD">
     1463                <size>170,-1</size>
     1464                <style>wxTE_PASSWORD</style>
     1465              </object>
     1466              <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
     1467            </object>
     1468          </object>
     1469          <flag>wxALL|wxALIGN_LEFT|wxALIGN_TOP</flag>
     1470          <border>5</border>
     1471        </object>
     1472        <object class="sizeritem">
     1473          <object class="wxStaticText" name="ID_FTP_LABEL">
     1474            <label>FTP Proxy</label>
     1475          </object>
     1476          <flag>wxTOP|wxLEFT|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
     1477          <border>5</border>
     1478        </object>
     1479        <object class="sizeritem">
     1480          <object class="wxFlexGridSizer">
     1481            <cols>2</cols>
     1482            <vgap>5</vgap>
     1483            <hgap>5</hgap>
     1484            <object class="sizeritem">
     1485              <object class="wxStaticText" name="ID_FTP_PASSWORD_LABEL">
     1486                <label>Password:</label>
     1487              </object>
     1488              <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
     1489            </object>
     1490            <object class="sizeritem">
     1491              <object class="wxTextCtrl" name="ID_FTP_PASSWORD">
     1492                <size>170,-1</size>
     1493                <style>wxTE_PASSWORD</style>
     1494              </object>
     1495              <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
     1496            </object>
     1497          </object>
     1498          <flag>wxALL|wxALIGN_LEFT|wxALIGN_TOP</flag>
     1499          <border>5</border>
     1500        </object>
     1501        <object class="sizeritem">
     1502          <object class="wxBoxSizer">
     1503            <object class="sizeritem">
     1504              <object class="wxButton" name="wxID_OK">
     1505                <label>&amp;OK</label>
     1506                <default>1</default>
     1507              </object>
     1508              <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
     1509              <border>5</border>
     1510            </object>
     1511            <object class="sizeritem">
     1512              <object class="wxButton" name="wxID_CANCEL">
     1513                <label>&amp;Cancel</label>
     1514            </object>
     1515            <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
     1516            <border>5</border>
     1517          </object>
     1518        </object>
     1519        <flag>wxALIGN_TOP|wxALIGN_CENTER_HORIZONTAL</flag>
     1520      </object>
     1521    </object>
     1522  </object>
    14181523  <object class="wxDialog" name="ID_INPUTDIALOG">
    14191524    <object class="wxBoxSizer">
    14201525      <orient>wxVERTICAL</orient>
  • src/interface/resources/settings.xrc

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/interface/resources/settings.xrc ./src/interface/resources/settings.xrc
    old new  
    444444      <object class="sizeritem">
    445445        <object class="wxStaticBoxSizer">
    446446          <label>FTP Proxy</label>
    447           <orient>wxHORIZONTAL</orient>
    448447          <object class="sizeritem">
    449448            <object class="wxFlexGridSizer">
    450449              <cols>1</cols>
    451450              <vgap>5</vgap>
     451              <growablecols>0</growablecols>
     452              <growablerows>6</growablerows>
    452453              <object class="sizeritem">
    453454                <object class="wxStaticText">
    454455                  <label>Type of FTP Proxy:</label>
     
    486487                    <object class="wxTextCtrl" name="ID_LOGINSEQUENCE">
    487488                      <style>wxTE_MULTILINE</style>
    488489                    </object>
     490                    <flag>wxEXPAND</flag>
    489491                    <option>1</option>
    490                     <flag>wxGROW</flag>
    491492                  </object>
    492493                  <object class="sizeritem">
    493494                    <object class="wxStaticText">
     
    496497                  </object>
    497498                  <object class="sizeritem">
    498499                    <object class="wxBoxSizer">
    499                       <orient>wxHORIZONTAL</orient>
    500500                      <object class="sizeritem">
    501501                        <object class="wxStaticText">
    502502                          <label>%h - Host</label>
     
    545545                  </object>
    546546                </object>
    547547                <option>1</option>
    548                 <flag>wxLEFT|wxGROW</flag>
     548                <flag>wxLEFT|wxEXPAND</flag>
    549549                <border>17</border>
    550550              </object>
    551551              <object class="sizeritem">
    552                 <object class="wxFlexGridSizer">
    553                   <cols>5</cols>
     552                <object class="wxBoxSizer">
    554553                  <object class="sizeritem">
    555554                    <object class="wxStaticText">
    556555                      <label>P&amp;roxy host:</label>
     
    567566                  <object class="sizeritem">
    568567                    <object class="wxStaticText">
    569568                      <label>Proxy &amp;user:</label>
     569                      <size>85,-1</size>
    570570                    </object>
    571571                    <flag>wxALIGN_CENTRE_VERTICAL</flag>
    572572                  </object>
     
    574574                    <object class="wxTextCtrl" name="ID_PROXY_USER"/>
    575575                    <flag>wxALIGN_CENTRE_VERTICAL</flag>
    576576                  </object>
     577                </object>
     578                <flag>wxALL</flag>
     579              </object>
     580              <object class="sizeritem">
     581                <object class="wxBoxSizer">
    577582                  <object class="sizeritem">
    578583                    <object class="wxStaticText">
    579584                      <label>Pro&amp;xy password:</label>
     585                      <size>85,-1</size>
    580586                    </object>
    581587                    <flag>wxALIGN_CENTRE_VERTICAL</flag>
    582588                  </object>
     
    586592                    </object>
    587593                    <flag>wxALIGN_CENTRE_VERTICAL</flag>
    588594                  </object>
    589                   <vgap>5</vgap>
    590                   <hgap>5</hgap>
     595                  <object class="spacer">
     596                    <flag>wxALIGN_BOTTOM</flag>
     597                    <size>10,0</size>
    591598                </object>
     599                  <object class="sizeritem">
     600                    <object class="wxCheckBox" name="ID_PROXY_ASK_PASS">
     601                      <label>Ask for &quot;FTP proxy&quot; password</label>
     602                    </object>
     603                    <flag>wxALL</flag>
     604                  </object>
     605                </object>
     606                <flag>wxALL</flag>
    592607              </object>
    593               <growablecols>0</growablecols>
    594608              <object class="sizeritem">
    595609                <object class="wxStaticText">
    596610                  <label>Note: This only works with plain, unencrypted FTP connections.</label>
    597611                </object>
    598612              </object>
    599               <growablerows>6</growablerows>
    600613            </object>
    601614            <option>1</option>
    602             <flag>wxBOTTOM|wxLEFT|wxRIGHT|wxGROW</flag>
     615            <flag>wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND</flag>
    603616            <border>5</border>
    604617          </object>
    605618        </object>
    606619        <option>1</option>
    607         <flag>wxGROW</flag>
     620        <flag>wxEXPAND</flag>
    608621      </object>
    609622    </object>
    610623  </object>
     
    691704            <object class="wxFlexGridSizer">
    692705              <cols>1</cols>
    693706              <vgap>5</vgap>
     707              <growablecols>0</growablecols>
    694708              <object class="sizeritem">
    695709                <object class="wxStaticText">
    696710                  <label>Type of generic proxy:</label>
     
    714728              <object class="sizeritem">
    715729                <object class="wxFlexGridSizer">
    716730                  <cols>2</cols>
     731                  <vgap>5</vgap>
     732                  <hgap>5</hgap>
     733                  <growablecols>1</growablecols>
    717734                  <object class="sizeritem">
    718735                    <object class="wxStaticText">
    719736                      <label>P&amp;roxy host:</label>
     
    722739                  </object>
    723740                  <object class="sizeritem">
    724741                    <object class="wxTextCtrl" name="ID_PROXY_HOST"/>
    725                     <flag>wxALIGN_CENTRE_VERTICAL|wxGROW</flag>
     742                    <flag>wxALIGN_CENTRE_VERTICAL|wxEXPAND</flag>
    726743                  </object>
    727744                  <object class="sizeritem">
    728745                    <object class="wxStaticText">
     
    744761                  </object>
    745762                  <object class="sizeritem">
    746763                    <object class="wxTextCtrl" name="ID_PROXY_USER"/>
    747                     <flag>wxALIGN_CENTRE_VERTICAL|wxGROW</flag>
     764                    <flag>wxALIGN_CENTRE_VERTICAL|wxEXPAND</flag>
    748765                  </object>
    749766                  <object class="sizeritem">
    750767                    <object class="wxStaticText">
     
    756773                    <object class="wxTextCtrl" name="ID_PROXY_PASS">
    757774                      <style>wxTE_PASSWORD</style>
    758775                    </object>
    759                     <flag>wxALIGN_CENTRE_VERTICAL|wxGROW</flag>
     776                    <flag>wxALIGN_CENTRE_VERTICAL|wxEXPAND</flag>
    760777                  </object>
    761                   <vgap>5</vgap>
    762                   <hgap>5</hgap>
    763                   <growablecols>1</growablecols>
     778                  <object class="sizeritem">
     779                    <object class="wxCheckBox" name="ID_PROXY_ASK_PASS">
     780                      <label>Ask for &quot;Generic proxy&quot; password</label>
    764781                </object>
    765                 <flag>wxGROW</flag>
     782                    <flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
     783                  </object>
     784                </object>
     785                <flag>wxEXPAND</flag>
    766786              </object>
    767               <growablecols>0</growablecols>
    768787              <object class="sizeritem">
    769788                <object class="wxStaticText">
    770789                  <label>Note: Using a generic proxy forces passive mode on FTP connections.</label>
     
    772791              </object>
    773792            </object>
    774793            <option>1</option>
    775             <flag>wxBOTTOM|wxLEFT|wxRIGHT|wxGROW</flag>
     794            <flag>wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND</flag>
    776795            <border>5</border>
    777796          </object>
    778797        </object>
    779798        <option>1</option>
    780         <flag>wxGROW</flag>
     799        <flag>wxEXPAND</flag>
    781800      </object>
    782801    </object>
    783802  </object>
  • src/interface/settings/optionspage_ftpproxy.cpp

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/interface/settings/optionspage_ftpproxy.cpp ./src/interface/settings/optionspage_ftpproxy.cpp
    old new  
    44#include "settingsdialog.h"
    55#include "optionspage.h"
    66#include "optionspage_ftpproxy.h"
     7#include "../loginmanager.h"
    78
    89BEGIN_EVENT_TABLE(COptionsPageFtpProxy, COptionsPageFtpProxy::COptionsPage)
    910EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_NONE"), COptionsPageFtpProxy::OnProxyTypeChanged)
     
    1112EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_SITE"), COptionsPageFtpProxy::OnProxyTypeChanged)
    1213EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_OPEN"), COptionsPageFtpProxy::OnProxyTypeChanged)
    1314EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_CUSTOM"), COptionsPageFtpProxy::OnProxyTypeChanged)
     15EVT_CHECKBOX(XRCID("ID_PROXY_ASK_PASS"), COptionsPageFtpProxy::OnProxyAskPassChanged)
    1416EVT_TEXT(XRCID("ID_LOGINSEQUENCE"), COptionsPageFtpProxy::OnLoginSequenceChanged)
    1517END_EVENT_TABLE()
    1618
    1719bool COptionsPageFtpProxy::LoadPage()
    1820{
    1921    bool failure = false;
     22    bool askPass = (m_pOptions->GetDefaultVal(DEFAULT_ASKPROXYPASS) || m_pOptions->GetOptionVal(OPTION_FTP_PROXY_ASK_PASS) != 0);
    2023
    2124    SetTextFromOption(XRCID("ID_PROXY_HOST"), OPTION_FTP_PROXY_HOST, failure);
    2225    SetTextFromOption(XRCID("ID_PROXY_USER"), OPTION_FTP_PROXY_USER, failure);
     26    SetCheck(XRCID("ID_PROXY_ASK_PASS"), askPass, failure);
     27    if(!askPass)
     28    {
    2329    SetTextFromOption(XRCID("ID_PROXY_PASS"), OPTION_FTP_PROXY_PASS, failure);
     30    }
    2431
    2532    int type = m_pOptions->GetOptionVal(OPTION_FTP_PROXY_TYPE);
    2633    switch (type)
     
    4552    }
    4653
    4754    if (!failure)
     55    {
    4856        SetCtrlState();
     57        SetAskPass();
     58    }
    4959
    5060    return !failure;
    5161}
    5262
    5363bool COptionsPageFtpProxy::SavePage()
    5464{
    55     SetOptionFromText(XRCID("ID_PROXY_HOST"), OPTION_FTP_PROXY_HOST);
    56     SetOptionFromText(XRCID("ID_PROXY_USER"), OPTION_FTP_PROXY_USER);
    57     SetOptionFromText(XRCID("ID_PROXY_PASS"), OPTION_FTP_PROXY_PASS);
     65    int askPass = (m_pOptions->GetDefaultVal(DEFAULT_ASKPROXYPASS) || GetCheck(XRCID("ID_PROXY_ASK_PASS")) ? 1 : 0);
    5866
    5967    int type = 0;
    6068    if (GetRCheck(XRCID("ID_PROXYTYPE_USER")))
     
    6472    else if (GetRCheck(XRCID("ID_PROXYTYPE_OPEN")))
    6573        type = 3;
    6674    else if (GetRCheck(XRCID("ID_PROXYTYPE_CUSTOM")))
    67     {
    68         SetOptionFromText(XRCID("ID_LOGINSEQUENCE"), OPTION_FTP_PROXY_CUSTOMLOGINSEQUENCE);
    6975        type = 4;
     76
     77    if (type != 0 && (
     78        GetText(XRCID("ID_PROXY_HOST")) != m_pOptions->GetOption(OPTION_FTP_PROXY_HOST) ||
     79        GetText(XRCID("ID_PROXY_USER")) != m_pOptions->GetOption(OPTION_FTP_PROXY_USER) ||
     80        ( type == 4 && GetText(XRCID("ID_LOGINSEQUENCE")) != m_pOptions->GetOption(OPTION_FTP_PROXY_CUSTOMLOGINSEQUENCE) ) ||
     81        askPass != m_pOptions->GetOptionVal(OPTION_FTP_PROXY_ASK_PASS) ||
     82        ( askPass == 0 && GetText(XRCID("ID_PROXY_PASS")) != m_pOptions->GetOption(OPTION_FTP_PROXY_PASS)))
     83       )
     84    {
     85        if (!CLoginManager::Get().ResetProxyPassword(1))
     86            return true;
    7087    }
     88
     89   
     90    SetOptionFromText(XRCID("ID_PROXY_HOST"), OPTION_FTP_PROXY_HOST);
     91    SetOptionFromText(XRCID("ID_PROXY_USER"), OPTION_FTP_PROXY_USER);
     92    m_pOptions->SetOption(OPTION_FTP_PROXY_ASK_PASS, askPass);
     93    if (!askPass)
     94    {
     95        SetOptionFromText(XRCID("ID_PROXY_PASS"), OPTION_FTP_PROXY_PASS);
     96    }
     97    else
     98    {
     99        m_pOptions->SetOption(OPTION_FTP_PROXY_PASS, _T(""));
     100    }
     101
     102    if (type == 4)
     103        SetOptionFromText(XRCID("ID_LOGINSEQUENCE"), OPTION_FTP_PROXY_CUSTOMLOGINSEQUENCE);
     104
    71105    m_pOptions->SetOption(OPTION_FTP_PROXY_TYPE, type);
    72106
    73107    return true;
     
    110144        XRCCTRL(*this, "ID_PROXY_HOST", wxTextCtrl)->Enable(false);
    111145        XRCCTRL(*this, "ID_PROXY_USER", wxTextCtrl)->Enable(false);
    112146        XRCCTRL(*this, "ID_PROXY_PASS", wxTextCtrl)->Enable(false);
     147        XRCCTRL(*this, "ID_PROXY_ASK_PASS", wxCheckBox)->Enable(false);
    113148        return;
    114149    }
    115150
     
    121156
    122157    XRCCTRL(*this, "ID_PROXY_HOST", wxTextCtrl)->Enable(true);
    123158    XRCCTRL(*this, "ID_PROXY_USER", wxTextCtrl)->Enable(true);
    124     XRCCTRL(*this, "ID_PROXY_PASS", wxTextCtrl)->Enable(true);
     159    //XRCCTRL(*this, "ID_PROXY_PASS", wxTextCtrl)->Enable(true);
     160    XRCCTRL(*this, "ID_PROXY_ASK_PASS", wxCheckBox)->Enable(true);
     161    SetAskPass();
    125162
    126163    if (XRCCTRL(*this, "ID_PROXYTYPE_CUSTOM", wxRadioButton)->GetValue())
    127164        return;
     
    144181    pTextCtrl->ChangeValue(loginSequence);
    145182}
    146183
     184void COptionsPageFtpProxy::SetAskPass()
     185{
     186    bool defaultAskPass = m_pOptions->GetDefaultVal(DEFAULT_ASKPROXYPASS);
     187    bool askPass = (defaultAskPass || GetCheck(XRCID("ID_PROXY_ASK_PASS")) ? true : false);
     188    XRCCTRL(*this, "ID_PROXY_PASS", wxTextCtrl)->Enable(!askPass);
     189    if (defaultAskPass)
     190        XRCCTRL(*this, "ID_PROXY_ASK_PASS", wxCheckBox)->Enable(false);
     191}
     192
    147193void COptionsPageFtpProxy::OnProxyTypeChanged(wxCommandEvent& event)
    148194{
    149195    SetCtrlState();
    150196}
    151197
     198void COptionsPageFtpProxy::OnProxyAskPassChanged(wxCommandEvent& event)
     199{
     200    SetAskPass();
     201}
     202
    152203void COptionsPageFtpProxy::OnLoginSequenceChanged(wxCommandEvent& event)
    153204{
    154205    XRCCTRL(*this, "ID_PROXYTYPE_CUSTOM", wxRadioButton)->SetValue(true);
  • src/interface/settings/optionspage_ftpproxy.h

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/interface/settings/optionspage_ftpproxy.h ./src/interface/settings/optionspage_ftpproxy.h
    old new  
    1212protected:
    1313
    1414    void SetCtrlState();
     15    void SetAskPass();
    1516
    1617    DECLARE_EVENT_TABLE();
    1718    void OnProxyTypeChanged(wxCommandEvent& event);
     19    void OnProxyAskPassChanged(wxCommandEvent& event);
    1820    void OnLoginSequenceChanged(wxCommandEvent& event);
    1921};
    2022
  • src/interface/settings/optionspage_proxy.cpp

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/interface/settings/optionspage_proxy.cpp ./src/interface/settings/optionspage_proxy.cpp
    old new  
    44#include "settingsdialog.h"
    55#include "optionspage.h"
    66#include "optionspage_proxy.h"
     7#include "../loginmanager.h"
    78
    89BEGIN_EVENT_TABLE(COptionsPageProxy, COptionsPageProxy::COptionsPage)
    910EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_NONE"), COptionsPageProxy::OnProxyTypeChanged)
    1011EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_HTTP"), COptionsPageProxy::OnProxyTypeChanged)
    1112EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_SOCKS5"), COptionsPageProxy::OnProxyTypeChanged)
     13EVT_CHECKBOX(XRCID("ID_PROXY_ASK_PASS"), COptionsPageProxy::OnProxyAskPassChanged)
    1214END_EVENT_TABLE()
    1315
    1416bool COptionsPageProxy::LoadPage()
    1517{
    1618    bool failure = false;
     19    bool askPass = (m_pOptions->GetDefaultVal(DEFAULT_ASKPROXYPASS) || m_pOptions->GetOptionVal(OPTION_PROXY_ASK_PASS) != 0);
    1720
    1821    SetTextFromOption(XRCID("ID_PROXY_HOST"), OPTION_PROXY_HOST, failure);
    1922    SetTextFromOption(XRCID("ID_PROXY_PORT"), OPTION_PROXY_PORT, failure);
    2023    SetTextFromOption(XRCID("ID_PROXY_USER"), OPTION_PROXY_USER, failure);
     24    SetCheck(XRCID("ID_PROXY_ASK_PASS"), askPass, failure);
     25    if(!askPass)
     26    {
    2127    SetTextFromOption(XRCID("ID_PROXY_PASS"), OPTION_PROXY_PASS, failure);
     28    }
    2229
    2330    int type = m_pOptions->GetOptionVal(OPTION_PROXY_TYPE);
    2431    switch (type)
     
    3643    }
    3744
    3845    if (!failure)
     46    {
    3947        SetCtrlState();
     48        SetAskPass();
     49    }
    4050
    4151    return !failure;
    4252}
    4353
    4454bool COptionsPageProxy::SavePage()
    4555{
    46     SetOptionFromText(XRCID("ID_PROXY_HOST"), OPTION_PROXY_HOST);
    47     SetOptionFromText(XRCID("ID_PROXY_PORT"), OPTION_PROXY_PORT);
    48     SetOptionFromText(XRCID("ID_PROXY_USER"), OPTION_PROXY_USER);
    49     SetOptionFromText(XRCID("ID_PROXY_PASS"), OPTION_PROXY_PASS);
     56    int askPass = (m_pOptions->GetDefaultVal(DEFAULT_ASKPROXYPASS) || GetCheck(XRCID("ID_PROXY_ASK_PASS")) ? 1 : 0);
     57
    5058
    5159    int type;
    5260    if (GetRCheck(XRCID("ID_PROXYTYPE_HTTP")))
     
    5563        type = 2;
    5664    else
    5765        type = 0;
     66
     67    if (type != 0 && (
     68        GetText(XRCID("ID_PROXY_HOST")) != m_pOptions->GetOption(OPTION_PROXY_HOST) ||
     69        GetText(XRCID("ID_PROXY_PORT")) != m_pOptions->GetOption(OPTION_PROXY_PORT) ||
     70        GetText(XRCID("ID_PROXY_USER")) != m_pOptions->GetOption(OPTION_PROXY_USER) ||
     71        askPass != m_pOptions->GetOption(OPTION_PROXY_ASK_PASS) ||
     72        ( askPass == 0 && GetText(XRCID("ID_PROXY_PASS")) != m_pOptions->GetOption(OPTION_PROXY_PASS)))
     73      )
     74    {
     75        if (!CLoginManager::Get().ResetProxyPassword(0))
     76            return true;
     77    }
     78
     79    SetOptionFromText(XRCID("ID_PROXY_HOST"), OPTION_PROXY_HOST);
     80    SetOptionFromText(XRCID("ID_PROXY_PORT"), OPTION_PROXY_PORT);
     81    SetOptionFromText(XRCID("ID_PROXY_USER"), OPTION_PROXY_USER);
     82    m_pOptions->SetOption(OPTION_PROXY_ASK_PASS, askPass);
     83    if(!askPass)
     84    {
     85        SetOptionFromText(XRCID("ID_PROXY_PASS"), OPTION_PROXY_PASS);
     86    }
     87    else
     88    {
     89        m_pOptions->SetOption(OPTION_PROXY_PASS, _T(""));
     90    }
     91
    5892    m_pOptions->SetOption(OPTION_PROXY_TYPE, type);
    5993
    6094    return true;
     
    84118    XRCCTRL(*this, "ID_PROXY_HOST", wxTextCtrl)->Enable(enabled);
    85119    XRCCTRL(*this, "ID_PROXY_PORT", wxTextCtrl)->Enable(enabled);
    86120    XRCCTRL(*this, "ID_PROXY_USER", wxTextCtrl)->Enable(enabled);
     121    //XRCCTRL(*this, "ID_PROXY_PASS", wxTextCtrl)->Enable(enabled);
     122    XRCCTRL(*this, "ID_PROXY_ASK_PASS", wxCheckBox)->Enable(enabled);
     123
     124    if(enabled)
     125    {
     126        SetAskPass();
     127    }
     128    else
     129    {
    87130    XRCCTRL(*this, "ID_PROXY_PASS", wxTextCtrl)->Enable(enabled);
     131    }
     132}
     133
     134void COptionsPageProxy::SetAskPass()
     135{
     136    bool defaultAskPass = m_pOptions->GetDefaultVal(DEFAULT_ASKPROXYPASS);
     137    bool askPass = (defaultAskPass || GetCheck(XRCID("ID_PROXY_ASK_PASS")) ? true : false);
     138    XRCCTRL(*this, "ID_PROXY_PASS", wxTextCtrl)->Enable(!askPass);
     139    if(defaultAskPass)
     140        XRCCTRL(*this, "ID_PROXY_ASK_PASS", wxCheckBox)->Enable(false);
    88141}
    89142
    90143void COptionsPageProxy::OnProxyTypeChanged(wxCommandEvent& event)
    91144{
    92145    SetCtrlState();
    93146}
     147
     148void COptionsPageProxy::OnProxyAskPassChanged(wxCommandEvent& event)
     149{
     150    SetAskPass();
     151}
  • src/interface/settings/optionspage_proxy.h

    diff -ub --recursive --new-file ../filezilla-3.3.2.1-org/src/interface/settings/optionspage_proxy.h ./src/interface/settings/optionspage_proxy.h
    old new  
    1212protected:
    1313
    1414    void SetCtrlState();
     15    void SetAskPass();
    1516
    1617    DECLARE_EVENT_TABLE();
    1718    void OnProxyTypeChanged(wxCommandEvent& event);
     19    void OnProxyAskPassChanged(wxCommandEvent& event);
    1820};
    1921
    2022#endif //__OPTIONSPAGE_PROXY_H__