280 lines
8.7 KiB
C++
280 lines
8.7 KiB
C++
/*++
|
|
|
|
Copyright (c) 1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
rtsrc.h
|
|
|
|
Abstract:
|
|
|
|
Implementation of IRoutingSource interface
|
|
|
|
Author:
|
|
|
|
Fei Su (feisu) 9/22/97 Created.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#include "stdafx.h"
|
|
#include "smtpadm.h"
|
|
#include "smtpprop.h"
|
|
#include "rtsrc.h"
|
|
#include "oleutil.h"
|
|
#include "metautil.h"
|
|
|
|
|
|
// Must define THIS_FILE_* macros to use SmtpCreateException()
|
|
|
|
#define THIS_FILE_HELP_CONTEXT 0
|
|
#define THIS_FILE_PROG_ID _T("Smtpadm.VirtualServer.1")
|
|
#define THIS_FILE_IID IID_IRoutingSource
|
|
|
|
|
|
#define RS_RELATIVE_NAME _T("RoutingSources")
|
|
|
|
|
|
#define ID_DS_TYPE 0
|
|
#define ID_DS_DATA_DIRECTORY 1
|
|
#define ID_DS_DEFAULT_MAIL_ROOT 2
|
|
#define ID_DS_BIND_TYPE 3
|
|
#define ID_DS_SCHEMA_TYPE 4
|
|
#define ID_DS_HOST 5
|
|
#define ID_DS_NAMING_CONTEXT 6
|
|
#define ID_DS_ACCOUNT 7
|
|
#define ID_DS_PASSWORD 8
|
|
|
|
#define DEFAULT_DS_TYPE _T("LDAP")
|
|
#define DEFAULT_DS_DATA_DIRECTORY _T("")
|
|
#define DEFAULT_DS_DEFAULT_MAIL_ROOT _T("/Mailbox")
|
|
#define DEFAULT_DS_BIND_TYPE _T("None")
|
|
#define DEFAULT_DS_SCHEMA_TYPE _T("Exchange5")
|
|
#define DEFAULT_DS_HOST _T("")
|
|
#define DEFAULT_DS_NAMING_CONTEXT _T("")
|
|
#define DEFAULT_DS_ACCOUNT _T("")
|
|
#define DEFAULT_DS_PASSWORD _T("")
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
|
|
STDMETHODIMP CRoutingSource::InterfaceSupportsErrorInfo(REFIID riid)
|
|
{
|
|
static const IID* arr[] =
|
|
{
|
|
&IID_IRoutingSource,
|
|
};
|
|
|
|
for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
|
|
{
|
|
if (InlineIsEqualGUID(*arr[i],riid))
|
|
return S_OK;
|
|
}
|
|
return S_FALSE;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Properties:
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
STDMETHODIMP CRoutingSource::get_Type( BSTR * pstrType )
|
|
{
|
|
return StdPropertyGet ( m_strType, pstrType );
|
|
}
|
|
|
|
STDMETHODIMP CRoutingSource::put_Type( BSTR strType )
|
|
{
|
|
return StdPropertyPut ( &m_strType, strType, &m_dwFC, BitMask(ID_DS_TYPE));
|
|
}
|
|
|
|
|
|
STDMETHODIMP CRoutingSource::get_DataDirectory( BSTR * pstrDataDirectory )
|
|
{
|
|
return StdPropertyGet ( m_strDataDirectory, pstrDataDirectory );
|
|
}
|
|
|
|
STDMETHODIMP CRoutingSource::put_DataDirectory( BSTR strDataDirectory )
|
|
{
|
|
return StdPropertyPut ( &m_strDataDirectory, strDataDirectory, &m_dwFC, BitMask(ID_DS_DATA_DIRECTORY) );
|
|
}
|
|
|
|
|
|
STDMETHODIMP CRoutingSource::get_DefaultMailRoot( BSTR * pstrDefaultMailRoot )
|
|
{
|
|
return StdPropertyGet ( m_strDefaultMailroot, pstrDefaultMailRoot );
|
|
}
|
|
|
|
STDMETHODIMP CRoutingSource::put_DefaultMailRoot( BSTR strDefaultMailRoot )
|
|
{
|
|
return StdPropertyPut ( &m_strDefaultMailroot, strDefaultMailRoot, &m_dwFC, BitMask(ID_DS_DEFAULT_MAIL_ROOT) );
|
|
}
|
|
|
|
|
|
STDMETHODIMP CRoutingSource::get_BindType( BSTR * pstrBindType )
|
|
{
|
|
return StdPropertyGet ( m_strBindType, pstrBindType );
|
|
}
|
|
|
|
STDMETHODIMP CRoutingSource::put_BindType( BSTR strBindType )
|
|
{
|
|
return StdPropertyPut ( &m_strBindType, strBindType, &m_dwFC, BitMask(ID_DS_BIND_TYPE) );
|
|
}
|
|
|
|
|
|
STDMETHODIMP CRoutingSource::get_SchemaType( BSTR * pstrSchemaType )
|
|
{
|
|
return StdPropertyGet ( m_strSchemaType, pstrSchemaType );
|
|
}
|
|
|
|
STDMETHODIMP CRoutingSource::put_SchemaType( BSTR strSchemaType )
|
|
{
|
|
return StdPropertyPut ( &m_strSchemaType, strSchemaType, &m_dwFC, BitMask(ID_DS_SCHEMA_TYPE) );
|
|
}
|
|
|
|
|
|
STDMETHODIMP CRoutingSource::get_Host( BSTR * pstrHost )
|
|
{
|
|
return StdPropertyGet ( m_strHost, pstrHost );
|
|
}
|
|
|
|
STDMETHODIMP CRoutingSource::put_Host( BSTR strHost )
|
|
{
|
|
return StdPropertyPut ( &m_strHost, strHost, &m_dwFC, BitMask(ID_DS_HOST) );
|
|
}
|
|
|
|
|
|
|
|
STDMETHODIMP CRoutingSource::get_NamingContext( BSTR * pstrNamingContext )
|
|
{
|
|
return StdPropertyGet ( m_strNamingContext, pstrNamingContext );
|
|
}
|
|
|
|
STDMETHODIMP CRoutingSource::put_NamingContext( BSTR strNamingContext )
|
|
{
|
|
return StdPropertyPut ( &m_strNamingContext, strNamingContext, &m_dwFC, BitMask(ID_DS_NAMING_CONTEXT) );
|
|
}
|
|
|
|
|
|
STDMETHODIMP CRoutingSource::get_Account( BSTR * pstrAccount )
|
|
{
|
|
return StdPropertyGet ( m_strAccount, pstrAccount );
|
|
}
|
|
|
|
STDMETHODIMP CRoutingSource::put_Account( BSTR strAccount )
|
|
{
|
|
return StdPropertyPut ( &m_strAccount, strAccount, &m_dwFC, BitMask(ID_DS_ACCOUNT) );
|
|
}
|
|
|
|
|
|
STDMETHODIMP CRoutingSource::get_Password( BSTR * pstrPassword )
|
|
{
|
|
return StdPropertyGet ( m_strPassword, pstrPassword );
|
|
}
|
|
|
|
STDMETHODIMP CRoutingSource::put_Password( BSTR strPassword )
|
|
{
|
|
return StdPropertyPut ( &m_strPassword, strPassword, &m_dwFC, BitMask(ID_DS_PASSWORD) );
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// Get / Set methods (internal)
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
HRESULT CRoutingSource::Get(CMetabaseKey * pMBVirtualServer)
|
|
{
|
|
TraceFunctEnter ( "CRoutingSource::Get" );
|
|
HRESULT hr = NOERROR;
|
|
|
|
if( !pMBVirtualServer )
|
|
BAIL_WITH_FAILURE(hr, E_POINTER);
|
|
|
|
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_TYPE, DEFAULT_DS_TYPE, &m_strType, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_DATA_DIRECTORY, DEFAULT_DS_DATA_DIRECTORY, &m_strDataDirectory, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_DEFAULT_MAIL_ROOT, DEFAULT_DS_DEFAULT_MAIL_ROOT, &m_strDefaultMailroot, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_BIND_TYPE, DEFAULT_DS_BIND_TYPE, &m_strBindType, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_SCHEMA_TYPE, DEFAULT_DS_SCHEMA_TYPE, &m_strSchemaType, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_HOST, DEFAULT_DS_HOST, &m_strHost, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_NAMING_CONTEXT, DEFAULT_DS_NAMING_CONTEXT, &m_strNamingContext, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_ACCOUNT, DEFAULT_DS_ACCOUNT, &m_strAccount, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_PASSWORD, DEFAULT_DS_PASSWORD, &m_strPassword, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
|
|
Exit:
|
|
TraceFunctLeave ();
|
|
return hr;
|
|
}
|
|
|
|
|
|
HRESULT CRoutingSource::Set(CMetabaseKey * pMBVirtualServer)
|
|
{
|
|
TraceFunctEnter ( "CRoutingSource::Set" );
|
|
HRESULT hr = NOERROR;
|
|
|
|
if( !pMBVirtualServer )
|
|
BAIL_WITH_FAILURE(hr, E_POINTER);
|
|
|
|
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_TYPE)) &&
|
|
!StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_TYPE, m_strType, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_DATA_DIRECTORY)) &&
|
|
!StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_DATA_DIRECTORY, m_strDataDirectory, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_DEFAULT_MAIL_ROOT)) &&
|
|
!StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_DEFAULT_MAIL_ROOT, m_strDefaultMailroot, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_BIND_TYPE)) &&
|
|
!StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_BIND_TYPE, m_strBindType, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_SCHEMA_TYPE)) &&
|
|
!StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_SCHEMA_TYPE, m_strSchemaType, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_HOST)) &&
|
|
!StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_HOST, m_strHost, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_NAMING_CONTEXT)) &&
|
|
!StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_NAMING_CONTEXT, m_strNamingContext, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_ACCOUNT)) &&
|
|
!StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_ACCOUNT, m_strAccount, RS_RELATIVE_NAME) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_PASSWORD)) &&
|
|
!StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_PASSWORD, m_strPassword, RS_RELATIVE_NAME, IIS_MD_UT_SERVER, METADATA_SECURE | METADATA_INHERIT) )
|
|
BAIL_WITH_FAILURE(hr, GetLastError());
|
|
|
|
|
|
Exit:
|
|
TraceFunctLeave ();
|
|
return hr;
|
|
}
|
|
|