Leaked source code of windows server 2003
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.
 
 
 
 
 
 

234 lines
6.9 KiB

// logui.cpp : Implementation of CLoguiApp and DLL registration.
#include "stdafx.h"
#include "logui.h"
#include <iiscnfg.h>
#include <iiscnfgp.h>
#include <inetinfo.h>
#include "initguid.h"
#include <logtype.h>
#include <ilogobj.hxx>
#include "uincsa.h"
#include "uiextnd.h"
#include "uimsft.h"
#include "uiodbc.h"
// the global factory objects
CFacNcsaLogUI facNcsa;
CFacMsftLogUI facMsft;
CFacOdbcLogUI facOdbc;
CFacExtndLogUI facExtnd;
const WORD _wVerMajor = 1;
const WORD _wVerMinor = 0;
// the key type strings for the metabaes keys
#define SZ_LOGGING_MAIN_TYPE _T("IIsLogModules")
#define SZ_LOGGING_TYPE _T("IIsLogModule")
static HRESULT RegisterInMetabase();
//int SetInfoAdminACL(CMetaKey& mk, LPCTSTR szSubKeyPath);
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CLoguiApp NEAR theApp;
HINSTANCE g_hInstance = NULL;
void CLoguiApp::PrepHelp( OLECHAR* pocMetabasePath )
{
CString szMetaPath = pocMetabasePath;
szMetaPath.MakeLower();
UINT iHelp = IDS_HELPLOC_W3SVCHELP;
if ( szMetaPath.Find(_T("msftpsvc")) >= 0 )
iHelp = IDS_HELPLOC_FTPHELP;
CString sz;
CString szHelpLocation;
sz.LoadString( iHelp );
ExpandEnvironmentStrings(sz, szHelpLocation.GetBuffer(MAX_PATH + 1), MAX_PATH);
szHelpLocation.ReleaseBuffer();
if ( m_pszHelpFilePath )
free((void*)m_pszHelpFilePath);
m_pszHelpFilePath = _tcsdup(szHelpLocation);
}
////////////////////////////////////////////////////////////////////////////
// CLoguiApp::InitInstance - DLL initialization
BOOL CLoguiApp::InitInstance()
{
g_hInstance = m_hInstance;
BOOL bInit = COleControlModule::InitInstance();
InitCommonDll();
if (bInit)
{
CString sz;
sz.LoadString( IDS_LOGUI_ERR_TITLE );
// Never free this string because now MF...kingC
// uses it internally BEFORE call to this function
//free((void*)m_pszAppName);
m_pszAppName = _tcsdup(sz);
// Get debug flag
GetOutputDebugFlag();
}
return bInit;
}
////////////////////////////////////////////////////////////////////////////
// CLoguiApp::ExitInstance - DLL termination
int CLoguiApp::ExitInstance()
{
return COleControlModule::ExitInstance();
}
/////////////////////////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
return ResultFromScode(SELFREG_E_CLASS);
return RegisterInMetabase();
}
/////////////////////////////////////////////////////////////////////////////
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
return ResultFromScode(SELFREG_E_CLASS);
return NOERROR;
}
// add all the base logging info to the /LM portion of the tree Also, add in
// the ftp and w3 service logging load strings
static HRESULT
RegisterInMetabase()
{
CString sz;
DWORD dw;
BOOL fService_Exist_W3SVC = FALSE;
BOOL fService_Exist_MSFTPSVC = FALSE;
BOOL fODBCW3 = FALSE;
BOOL fODBCFTP = FALSE;
CString szAvail, path;
CError err;
do
{
// This function is getting called only during registration -- locally.
// Therefore we don't need any names, passwords, etc here
CComAuthInfo auth;
CMetaKey mk(&auth, SZ_MBN_MACHINE, METADATA_PERMISSION_READ | METADATA_PERMISSION_WRITE);
err = mk.QueryResult();
BREAK_ON_ERR_FAILURE(err);
// test to see if we can do odbc logging
err = mk.QueryValue(MD_SERVER_CAPABILITIES, dw, NULL, _T("/W3SVC/Info"));
// This key may not even exist (since this service might not even be installed)
if (SUCCEEDED(err))
{
fService_Exist_W3SVC = TRUE;
fODBCW3 = (dw & IIS_CAP1_ODBC_LOGGING) != 0;
}
err = mk.QueryValue(MD_SERVER_CAPABILITIES, dw, NULL, _T("/MSFTPSVC/Info"));
// This key may not even exist (since this service might not even be installed)
if (SUCCEEDED(err))
{
fService_Exist_MSFTPSVC = TRUE;
fODBCFTP = (dw & IIS_CAP1_ODBC_LOGGING) != 0;
}
// open the logging object
path = _T("logging");
err = mk.AddKey(path);
if (err.Win32Error() == ERROR_ALREADY_EXISTS)
{
err.Reset();
}
BREAK_ON_ERR_FAILURE(err);
err = mk.SetValue(MD_KEY_TYPE, CString(SZ_LOGGING_MAIN_TYPE), NULL, path);
BREAK_ON_ERR_FAILURE(err);
#define SETUP_LOG_KEY(id,x,y)\
VERIFY(sz.LoadString((id)));\
sz = CMetabasePath(FALSE, path, sz);\
err = mk.AddKey(sz);\
if (err.Win32Error() == ERROR_ALREADY_EXISTS)\
{\
err.Reset();\
}\
BREAK_ON_ERR_FAILURE(err);\
err = mk.SetValue(MD_KEY_TYPE, CString(SZ_LOGGING_TYPE), NULL, sz);\
BREAK_ON_ERR_FAILURE(err);\
err = mk.SetValue(MD_LOG_PLUGIN_MOD_ID, CString((x)), NULL, sz);\
BREAK_ON_ERR_FAILURE(err);\
err = mk.SetValue(MD_LOG_PLUGIN_UI_ID, CString((y)), NULL, sz);\
BREAK_ON_ERR_FAILURE(err)\
SETUP_LOG_KEY(IDS_MTITLE_NCSA, NCSALOG_CLSID, NCSALOGUI_CLSID);
SETUP_LOG_KEY(IDS_MTITLE_ODBC, ODBCLOG_CLSID, ODBCLOGUI_CLSID);
SETUP_LOG_KEY(IDS_MTITLE_MSFT, ASCLOG_CLSID, ASCLOGUI_CLSID);
SETUP_LOG_KEY(IDS_MTITLE_XTND, EXTLOG_CLSID, EXTLOGUI_CLSID);
// prepare the available logging extensions string
// start with w3svc
if (fService_Exist_W3SVC)
{
szAvail.LoadString(IDS_MTITLE_NCSA);
sz.LoadString(IDS_MTITLE_MSFT);
szAvail += _T(',') + sz;
sz.LoadString(IDS_MTITLE_XTND);
szAvail += _T(',') + sz;
if (fODBCW3)
{
sz.LoadString(IDS_MTITLE_ODBC);
szAvail += _T(',') + sz;
}
// This key may not even exist (since this service might not even be installed) so don't break on err
err = mk.SetValue(MD_LOG_PLUGINS_AVAILABLE, szAvail, NULL, _T("W3SVC/info"));
}
if (fService_Exist_MSFTPSVC)
{
// now ftp - no ncsa
szAvail.LoadString(IDS_MTITLE_MSFT);
sz.LoadString(IDS_MTITLE_XTND);
szAvail += _T(',') + sz;
if (fODBCFTP)
{
sz.LoadString(IDS_MTITLE_ODBC);
szAvail += _T(',') + sz;
}
// This key may not even exist (since this service might not even be installed) so don't break on err
err = mk.SetValue(MD_LOG_PLUGINS_AVAILABLE, szAvail, NULL, _T("MSFTPSVC/info"));
}
} while(FALSE);
return err;
}