!C99Shell v. 1.0 pre-release build #13!

Software: Apache. PHP/5.5.15 

uname -a: Windows NT SVR-DMZ 6.1 build 7600 (Windows Server 2008 R2 Enterprise Edition) i586 

SYSTEM 

Safe-mode: OFF (not secure)

C:\dmz\FileZillaFTP\source\interface\   drwxrwxrwx
Free 4.1 GB of 39.52 GB (10.37%)
Detected drives: [ a ] [ c ] [ d ] [ e ] [ f ]
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     OptionsDlg.cpp (10.44 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// FileZilla Server - a Windows ftp server

// Copyright (C) 2002-2004 - Tim Kosse <tim.kosse@gmx.de>

// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

// Options.cpp: Implementierungsdatei
//

#include "stdafx.h"
#include "../version.h"
#include "filezilla server.h"
#include "OptionsDlg.h"
#include "..\OptionTypes.h"
#include "Options.h"

#if defined(_DEBUG) && !defined(MMGR)
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#include "OptionsPage.h"
#include "OptionsGeneralPage.h"
#include "OptionsGeneralWelcomemessagePage.h"
#include "OptionsPasvPage.h"
#include "OptionsSecurityPage.h"
#include "OptionsMiscPage.h"
#include "OptionsAdminInterfacePage.h"
#include "OptionsLoggingPage.h"
#include "OptionsGSSPage.h"
#include "OptionsSpeedLimitPage.h"
#include "OptionsCompressionPage.h"
#include "OptionsGeneralIpbindingsPage.h"
#include "OptionsIpFilterPage.h"
#include "OptionsSslPage.h"
#include "OptionsAutobanPage.h"

/////////////////////////////////////////////////////////////////////////////
// Dialogfeld COptionsDlg 

COptionsDlg::COptionsDlg(COptions *pInterfaceOptions, bool localConnection)
    : m_localConnection(localConnection)
{
    ASSERT(pInterfaceOptions);
    m_pInterfaceOptions = pInterfaceOptions;

    //Add options pages
    COptionsPage *page;

    page = new COptionsGeneralPage(this);
    AddPage(*page, IDS_OPTIONSPAGE_GENERAL);
    m_PageList.push_back(page);

        page = new COptionsGeneralWelcomemessagePage(this);
        AddPage(*page, IDS_OPTIONSPAGE_GENERAL_WELCOMEMESSAGE, m_PageList.back());
        m_PageList.push_back(page);

        page = new COptionsGeneralIpbindingsPage(this);
        AddPage(*page, IDS_OPTIONSPAGE_GENERAL_IPBINDINGS, *--(--m_PageList.end()));
        m_PageList.push_back(page);

        page = new COptionsIpFilterPage(this);
        AddPage(*page, IDS_OPTIONSPAGE_GENERAL_IPFILTER, m_PageList.front());
        m_PageList.push_back(page);

    page = new COptionsPasvPage(this);
    AddPage(*page, IDS_OPTIONSPAGE_PASV);
    m_PageList.push_back(page);

    page = new COptionsSecurityPage(this);
    AddPage(*page, IDS_OPTIONSPAGE_SECURITY);
    m_PageList.push_back(page);

    page = new COptionsMiscPage(this);
    AddPage(*page, IDS_OPTIONSPAGE_MISC);
    m_PageList.push_back(page);

    page = new COptionsAdminInterfacePage(this);
    AddPage(*page, IDS_OPTIONSPAGE_ADMININTERFACE);
    m_PageList.push_back(page);

    page = new COptionsLoggingPage(this);
    AddPage(*page, IDS_OPTIONSPAGE_LOGGING);
    m_PageList.push_back(page);

    page = new COptionsGSSPage(this);
    AddPage(*page, IDS_OPTIONSPAGE_GSS);
    m_PageList.push_back(page);

    m_pOptionsSpeedLimitPage = new COptionsSpeedLimitPage(this);
    AddPage(*m_pOptionsSpeedLimitPage, IDS_OPTIONSPAGE_SPEEDLIMIT);
    m_PageList.push_back(m_pOptionsSpeedLimitPage);

    page = new COptionsCompressionPage(this);
    AddPage(*page, IDS_OPTIONSPAGE_COMPRESSION);
    m_PageList.push_back(page);

    page = new COptionsSslPage(this);
    AddPage(*page, IDS_OPTIONSPAGE_SSL);
    m_PageList.push_back(page);

    page = new COptionsAutobanPage(this);
    AddPage(*page, IDS_OPTIONSPAGE_AUTOBAN);
    m_PageList.push_back(page);
}

COptionsDlg::~COptionsDlg()
{
    for (std::list<COptionsPage *>::iterator iter = m_PageList.begin(); iter != m_PageList.end(); iter++)
        delete *iter;
}

void COptionsDlg::DoDataExchange(CDataExchange* pDX)
{
    CSAPrefsDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(COptionsDlg)
        // HINWEIS: Der Klassen-Assistent fügt hier DDX- und DDV-Aufrufe ein
    //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(COptionsDlg, CSAPrefsDialog)
    //{{AFX_MSG_MAP(COptionsDlg)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten COptionsDlg 

BOOL COptionsDlg::Show()
{
    SetConstantText("FileZilla Server");

    std::list<COptionsPage *>::iterator iter;
    for (iter = m_PageList.begin(); iter != m_PageList.end(); iter++)
        (*iter)->LoadData();

    if (DoModal()!=IDOK)
        return FALSE;

    for (iter = m_PageList.begin(); iter != m_PageList.end(); iter++)
        (*iter)->SaveData();

    return TRUE;
}

BOOL COptionsDlg::OnInitDialog() 
{
    CSAPrefsDialog::OnInitDialog();
        
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}

void COptionsDlg::SetOption(int nOptionID, __int64 value)
{
    m_OptionsCache[nOptionID-1].nType = 1;
    m_OptionsCache[nOptionID-1].value = value;
}

void COptionsDlg::SetOption(int nOptionID, CString value)
{
    m_OptionsCache[nOptionID-1].nType = 0;
    m_OptionsCache[nOptionID-1].str = value;
}

CString COptionsDlg::GetOption(int nOptionID)
{
    ASSERT(nOptionID>0 && nOptionID<=OPTIONS_NUM);
    ASSERT(!m_Options[nOptionID-1].nType);

    return m_OptionsCache[nOptionID-1].str;
}

__int64 COptionsDlg::GetOptionVal(int nOptionID)
{
    ASSERT(nOptionID>0 && nOptionID<=OPTIONS_NUM);
    ASSERT(m_Options[nOptionID-1].nType == 1);
    
    return m_OptionsCache[nOptionID-1].value;
}

void COptionsDlg::OnOK() 
{
    if (!UpdateData(true))
        return;
    if (!GetCurPage()->UpdateData(TRUE))
        return;

    for (std::list<COptionsPage *>::iterator iter = m_PageList.begin(); iter != m_PageList.end(); iter++)
        if (!(*iter)->IsDataValid())
            return;
        
    CSAPrefsDialog::OnOK();
}

CSAPrefsSubDlg* COptionsDlg::GetCurPage()
{
    int iPage = m_iCurPage;
    // show the new one
    if ((iPage >= 0) && (iPage < (int)m_pages.size()))
    {
        pageStruct *pPS = m_pages[iPage];
        ASSERT(pPS);

        if (pPS)
        {
            ASSERT(pPS->pDlg);
            if (pPS->pDlg)
            {
                return pPS->pDlg;
            }
        }
    }
    return NULL;
}

bool COptionsDlg::AddPage(CSAPrefsSubDlg &page, UINT nCaptionID, CSAPrefsSubDlg *pDlgParent /*= NULL*/)
{
    CString str;
    str.LoadString(nCaptionID);
    return CSAPrefsDialog::AddPage(page, str, pDlgParent);
}

bool COptionsDlg::IsNumeric(LPCTSTR str)
{
    if (!str)
        return false;
    LPCTSTR p=str;
    while(*p)
    {
        if (*p<'0' || *p>'9')
        {
            return false;
        }
        p++;
    }
    return true;
}

BOOL COptionsDlg::Init(unsigned char *pData, DWORD dwDataLength)
{
    unsigned char *p = pData;
    int i;
    int num = *p * 256 + p[1];
    p+=2;
    if (num!=OPTIONS_NUM)
        return FALSE;
    
    for (i=0; i<num; i++)
    {
        if (static_cast<DWORD>(p-pData) >= dwDataLength)
            return FALSE;
        int nType = *p++;
        if (!nType)
        {
            if (static_cast<DWORD>(p-pData+3) >= dwDataLength)
                return 2;
            int len= *p * 256 * 256 + p[1] * 256 + p[2];
            p+=3;
            if (static_cast<DWORD>(p-pData+len)>dwDataLength)
                return FALSE;
            m_OptionsCache[i].nType = 0;

            char* tmp = new char[len + 1];
            memcpy(tmp, p, len);
            tmp[len] = 0;
#if _UNICODE
            m_OptionsCache[i].str = ConvFromNetwork(tmp);
#else
            m_OptionsCache[i].str = ConvToLocal(ConvFromNetwork(tmp));
#endif
            p += len;

            delete [] tmp;
        }
        else if (nType == 1)
        {
            if (static_cast<DWORD>(p-pData+8)>dwDataLength)
                return FALSE;
            m_OptionsCache[i].nType = 1;
            memcpy(&m_OptionsCache[i].value, p, 8);
            p+=8;
        }
        else
            return FALSE;
    }

    if (static_cast<DWORD>(p-pData+2) > dwDataLength)
        return FALSE;
    num = *p++ << 8;
    num |= *p++;
    for (i=0; i<num; i++)
    {
        CSpeedLimit limit;
        p = limit.ParseBuffer(p, dwDataLength - (p - pData));
        if (!p)
            return FALSE;
        m_pOptionsSpeedLimitPage->m_DownloadSpeedLimits.push_back(limit);
    }
    
    if (static_cast<DWORD>(p-pData+2) > dwDataLength)
        return FALSE;
    num = *p++ << 8;
    num |= *p++;
    for (i=0; i<num; i++)
    {
        CSpeedLimit limit;
        p = limit.ParseBuffer(p, dwDataLength - (p - pData));
        if (!p)
            return FALSE;
        m_pOptionsSpeedLimitPage->m_UploadSpeedLimits.push_back(limit);
    }
    return TRUE;
}

BOOL COptionsDlg::GetAsCommand(char **pBuffer, DWORD *nBufferLength)
{
    DWORD len = 2;
    int i;
    for (i = 0; i < OPTIONS_NUM; i++)
    {
        len+=1;
        if (!m_Options[i].nType)
        {
            char* utf8 = ConvToNetwork(GetOption(i+1));
            if (utf8)
            {
                int l = strlen(utf8);
                delete [] utf8;

                if (l > 0xFFFFFF)
                    return FALSE;

                len += l;
            }
            len += 3;
        }
        else
            len+=8;
    }
    len += 4; //Number of rules
    SPEEDLIMITSLIST::const_iterator iter;
    for (iter = m_pOptionsSpeedLimitPage->m_DownloadSpeedLimits.begin(); iter != m_pOptionsSpeedLimitPage->m_DownloadSpeedLimits.end(); iter++)
        len += iter->GetRequiredBufferLen();
    for (iter = m_pOptionsSpeedLimitPage->m_UploadSpeedLimits.begin(); iter != m_pOptionsSpeedLimitPage->m_UploadSpeedLimits.end(); iter++)
        len += iter->GetRequiredBufferLen();

    *pBuffer = new char[len];
    char *p=*pBuffer;
    *p++ = OPTIONS_NUM/256;
    *p++ = OPTIONS_NUM%256;
    for (i=0; i<OPTIONS_NUM; i++)
    {
        *p++ = m_Options[i].nType;
        switch(m_Options[i].nType) {
        case 0:
            {
                char* utf8 = ConvToNetwork(GetOption(i+1));
                if (utf8)
                {
                    int slen = strlen(utf8);
                    *p++ = (slen / 256) / 256;
                    *p++ = slen / 256;
                    *p++ = slen % 256;
                    memcpy(p, utf8, slen);
                    p += slen;
                    delete [] utf8;
                }
                else
                {
                    *p++ = 0;
                    *p++ = 0;
                }
            }
            break;
        case 1:
            {
                _int64 value = GetOptionVal(i+1);
                memcpy(p, &value, 8);
                p+=8;
            }
            break;
        default:
            ASSERT(FALSE);
        }
    }

    *p++ = m_pOptionsSpeedLimitPage->m_DownloadSpeedLimits.size() >> 8;
    *p++ = m_pOptionsSpeedLimitPage->m_DownloadSpeedLimits.size() % 256;
    for (iter = m_pOptionsSpeedLimitPage->m_DownloadSpeedLimits.begin(); iter != m_pOptionsSpeedLimitPage->m_DownloadSpeedLimits.end(); iter++)
        p = iter->FillBuffer(p);
    
    *p++ = m_pOptionsSpeedLimitPage->m_UploadSpeedLimits.size() >> 8;
    *p++ = m_pOptionsSpeedLimitPage->m_UploadSpeedLimits.size() % 256;
    for (iter = m_pOptionsSpeedLimitPage->m_UploadSpeedLimits.begin(); iter != m_pOptionsSpeedLimitPage->m_UploadSpeedLimits.end(); iter++)
        p = iter->FillBuffer(p);

    *nBufferLength = len;

    return TRUE;
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0312 ]--