Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

245 lines
6.7 KiB

// LogODBC.cpp : implementation file
//
#include "stdafx.h"
#include <iadmw.h>
#include "logui.h"
#include "LogODBC.h"
#include "CnfrmPsD.h"
#include "wrapmb.h"
#include "metatool.h"
#include <iiscnfg.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLogODBC property page
IMPLEMENT_DYNCREATE(CLogODBC, CPropertyPage)
//--------------------------------------------------------------------------
CLogODBC::CLogODBC() : CPropertyPage(CLogODBC::IDD),
m_fInitialized( FALSE )
{
//{{AFX_DATA_INIT(CLogODBC)
m_sz_datasource = _T("");
m_sz_password = _T("");
m_sz_table = _T("");
m_sz_username = _T("");
//}}AFX_DATA_INIT
m_szOrigPass.Empty();
m_bPassTyped = FALSE;
}
//--------------------------------------------------------------------------
CLogODBC::~CLogODBC()
{
}
//--------------------------------------------------------------------------
void CLogODBC::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLogODBC)
DDX_Control(pDX, IDC_ODBC_PASSWORD, m_cedit_password);
DDX_Text(pDX, IDC_ODBC_DATASOURCE, m_sz_datasource);
DDX_Text(pDX, IDC_ODBC_PASSWORD, m_sz_password);
DDX_Text(pDX, IDC_ODBC_TABLE, m_sz_table);
DDX_Text(pDX, IDC_ODBC_USERNAME, m_sz_username);
//}}AFX_DATA_MAP
}
//--------------------------------------------------------------------------
BEGIN_MESSAGE_MAP(CLogODBC, CPropertyPage)
//{{AFX_MSG_MAP(CLogODBC)
ON_EN_CHANGE(IDC_ODBC_DATASOURCE, OnChangeOdbcDatasource)
ON_EN_CHANGE(IDC_ODBC_PASSWORD, OnChangeOdbcPassword)
ON_EN_CHANGE(IDC_ODBC_TABLE, OnChangeOdbcTable)
ON_EN_CHANGE(IDC_ODBC_USERNAME, OnChangeOdbcUsername)
//}}AFX_MSG_MAP
ON_COMMAND(ID_HELP_FINDER, DoHelp)
ON_COMMAND(ID_HELP, DoHelp)
ON_COMMAND(ID_CONTEXT_HELP, DoHelp)
ON_COMMAND(ID_DEFAULT_HELP, DoHelp)
END_MESSAGE_MAP()
//---------------------------------------------------------------------------
void CLogODBC::DoHelp()
{
WinHelp( HIDD_LOGUI_ODBC );
}
//--------------------------------------------------------------------------
void CLogODBC::Init()
{
UpdateData( TRUE );
DWORD dw;
LPCTSTR pstr;
// we will just be pulling stuff out of the metabase here
// prepare the metabase wrapper
CWrapMetaBase mbWrap;
if ( !mbWrap.FInit(m_pMB) ) return;
// open the target
if ( mbWrap.Open( m_szMeta, METADATA_PERMISSION_READ ) )
{
// datasources
pstr = (LPCTSTR)mbWrap.GetData( _T(""), MD_LOGSQL_DATA_SOURCES, IIS_MD_UT_SERVER, STRING_METADATA, &dw, METADATA_INHERIT );
if ( pstr )
{
m_sz_datasource = pstr;
// free it
mbWrap.FreeWrapData( (PVOID)pstr );
}
// password
pstr = (LPCTSTR)mbWrap.GetData( _T(""), MD_LOGSQL_PASSWORD, IIS_MD_UT_SERVER, STRING_METADATA, &dw, METADATA_INHERIT );
if ( pstr )
{
m_sz_password = pstr;
// free it
mbWrap.FreeWrapData( (PVOID)pstr );
m_szOrigPass = m_sz_password;
if ( !m_sz_password.IsEmpty() )
m_sz_password.LoadString( IDS_SHOWN_PASSWORD );
}
// table name
pstr = (LPCTSTR)mbWrap.GetData( _T(""), MD_LOGSQL_TABLE_NAME, IIS_MD_UT_SERVER, STRING_METADATA, &dw, METADATA_INHERIT );
if ( pstr )
{
m_sz_table = pstr;
// free it
mbWrap.FreeWrapData( (PVOID)pstr );
}
// user name
pstr = (LPCTSTR)mbWrap.GetData( _T(""), MD_LOGSQL_USER_NAME, IIS_MD_UT_SERVER, STRING_METADATA, &dw, METADATA_INHERIT );
if ( pstr )
{
m_sz_username = pstr;
// free it
mbWrap.FreeWrapData( (PVOID)pstr );
}
// close the metabase
mbWrap.Close();
}
// put the data into place
UpdateData( FALSE );
}
/////////////////////////////////////////////////////////////////////////////
// CLogODBC message handlers
//--------------------------------------------------------------------------
BOOL CLogODBC::OnApply()
{
BOOL f;
UpdateData( TRUE );
// confirm the password
if ( m_bPassTyped )
{
CConfirmPassDlg dlgPass;
dlgPass.m_szOrigPass = m_sz_password;
if ( dlgPass.DoModal() != IDOK )
{
m_cedit_password.SetFocus();
m_cedit_password.SetSel(0, -1);
return FALSE;
}
}
// prepare and open the metabase object
CWrapMetaBase mb;
if ( !mb.FInit(m_pMB) ) return FALSE;
// open the target
if ( OpenAndCreate( &mb, m_szMeta,
METADATA_PERMISSION_WRITE | METADATA_PERMISSION_READ, TRUE ) )
{
// prepare for the inheritence checks
CCheckInheritList listInherit;
f = SetMBString(&mb, &listInherit, _T(""), MD_LOGSQL_DATA_SOURCES,
IIS_MD_UT_SERVER, m_sz_datasource, FALSE);
if ( m_bPassTyped )
{
f = SetMBString(&mb, &listInherit, _T(""), MD_LOGSQL_PASSWORD,
IIS_MD_UT_SERVER, m_sz_password, TRUE);
}
f = SetMBString(&mb, &listInherit, _T(""), MD_LOGSQL_TABLE_NAME,
IIS_MD_UT_SERVER, m_sz_table, FALSE);
f = SetMBString(&mb, &listInherit, _T(""), MD_LOGSQL_USER_NAME,
IIS_MD_UT_SERVER, m_sz_username, FALSE);
// close the metabase
mb.Close();
// do all the inheritence checks
listInherit.CheckInheritence( m_szServer, m_szMeta );
}
// clear the modified flag
SetModified( FALSE );
// reset the internal password-typed flag
m_szOrigPass = m_sz_password;
m_bPassTyped = FALSE;
return CPropertyPage::OnApply();
}
//--------------------------------------------------------------------------
BOOL CLogODBC::OnSetActive()
{
if ( !m_fInitialized )
{
Init();
m_fInitialized = TRUE;
}
return CPropertyPage::OnSetActive();
}
//--------------------------------------------------------------------------
void CLogODBC::OnChangeOdbcDatasource()
{
SetModified();
}
//--------------------------------------------------------------------------
void CLogODBC::OnChangeOdbcPassword()
{
m_bPassTyped = TRUE;
SetModified();
}
//--------------------------------------------------------------------------
void CLogODBC::OnChangeOdbcTable()
{
SetModified();
}
//--------------------------------------------------------------------------
void CLogODBC::OnChangeOdbcUsername()
{
SetModified();
}