238 lines
6.0 KiB
C++
238 lines
6.0 KiB
C++
//+----------------------------------------------------------------------------
|
|
//
|
|
// Windows NT Secure Server Roles Security Configuration Wizard
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 2002
|
|
//
|
|
// File: RoleObj.cxx
|
|
//
|
|
// History: 15-Oct-01 Yanggao created
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
#include "pch.h"
|
|
#include "RoleObj.h"
|
|
#include "misc.h"
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
RoleObject::RoleObject(String& xmlroleName) :
|
|
satisfiable(false),
|
|
selected(false)
|
|
{
|
|
roleName = xmlroleName;
|
|
}
|
|
|
|
RoleObject::RoleObject(void) :
|
|
satisfiable(false),
|
|
selected(false)
|
|
{
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
RoleObject::~RoleObject()
|
|
{
|
|
LOG_DTOR(RoleObject);
|
|
|
|
SERVICELIST::iterator i;
|
|
|
|
for(i=servicesList.begin(); i!=servicesList.end(); i++)
|
|
{
|
|
servicesList.erase(i);
|
|
}
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
bool RoleObject::addService(ServiceObject* pobj)
|
|
{
|
|
servicesList.push_back(pobj);
|
|
return true;
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
bool RoleObject::removeService(String str)
|
|
{
|
|
SERVICELIST::iterator i = servicesList.begin();
|
|
for(i=servicesList.begin(); i!=servicesList.end(); i++)
|
|
{
|
|
if(((ServiceObject*)(*i))->serviceName.icompare(str) == 0)
|
|
{
|
|
servicesList.erase(i);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
ServiceObject* RoleObject::findService(String str)
|
|
{
|
|
SERVICELIST::iterator i = servicesList.begin();
|
|
for(i=servicesList.begin(); i!=servicesList.end(); i++)
|
|
{
|
|
if(((ServiceObject*)(*i))->serviceName.icompare(str) == 0)
|
|
{
|
|
return (*i);
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
DWORD RoleObject::getServiceCount()
|
|
{
|
|
return (DWORD)servicesList.size();
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Method: RoleObject::getDisplayName
|
|
//
|
|
// If set, return the display name. Otherwise return the internal name.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
PCWSTR
|
|
RoleObject::getDisplayName(void)
|
|
{
|
|
return _strRoleDisplayName.empty() ?
|
|
roleName.c_str() : _strRoleDisplayName.c_str();
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Method: RoleObject::InitFromXmlNode
|
|
//
|
|
// Initialize the object from its main.xml node.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT
|
|
RoleObject::InitFromXmlNode(IXMLDOMNode * pRoleNode)
|
|
{
|
|
LOG_FUNCTION(RoleObject::InitFromXmlNode);
|
|
HRESULT hr = S_OK;
|
|
|
|
hr = GetNodeText(pRoleNode, g_wzName, roleName);
|
|
|
|
if (FAILED(hr) || S_FALSE == hr)
|
|
{
|
|
LOG(String::format(L"Getting role name failed with error %1!x!", hr));
|
|
return hr;
|
|
}
|
|
|
|
LOG(String::format(L"Role name is '%1'", roleName.c_str()));
|
|
|
|
return hr;
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Method: RoleObject::InitFromXmlNode
|
|
//
|
|
// Initialize the object from its main.xml node.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT
|
|
RoleObject::SetLocalizedNames(IXMLDOMNode * pSSRNode)
|
|
{
|
|
LOG_FUNCTION(RoleObject::SetLocalizedNames);
|
|
if (roleName.empty())
|
|
{
|
|
ASSERT(FALSE);
|
|
return E_FAIL;
|
|
}
|
|
HRESULT hr = S_OK;
|
|
IXMLDOMNode * pRoleLocNode = NULL;
|
|
|
|
hr = pSSRNode->selectSingleNode(CComBSTR(g_wzRoleLocalization), &pRoleLocNode);
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
LOG(String::format(L"Select of RoleLocalization node failed with error %1!x!", hr));
|
|
return hr;
|
|
}
|
|
|
|
ASSERT(pRoleLocNode);
|
|
IXMLDOMNodeList * pRoleList = NULL;
|
|
|
|
hr = pRoleLocNode->selectNodes(CComBSTR(g_wzRole), &pRoleList);
|
|
|
|
pRoleLocNode->Release();
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
LOG(String::format(L"Select of RoleLocalization child nodes failed with error %1!x!", hr));
|
|
return hr;
|
|
}
|
|
|
|
ASSERT(pRoleList);
|
|
long nRoleNodes = 0;
|
|
|
|
hr = pRoleList->get_length(&nRoleNodes);
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
LOG(String::format(L"Getting the size of the RoleLocalization Node list failed with error %1!x!", hr));
|
|
return hr;
|
|
}
|
|
|
|
IXMLDOMNode * pRole;
|
|
|
|
for (long i = 0; i < nRoleNodes; i++)
|
|
{
|
|
pRole = NULL;
|
|
|
|
hr = pRoleList->get_item(i, &pRole);
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
LOG(String::format(L"Getting a RoleLocalization Node list item failed with error %1!x!", hr));
|
|
pRoleList->Release();
|
|
return hr;
|
|
}
|
|
|
|
ASSERT(pRole);
|
|
String strName;
|
|
|
|
hr = GetNodeText(pRole, g_wzName, strName);
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
LOG(String::format(L"Getting a RoleLocalization Node list item name failed with error %1!x!", hr));
|
|
pRoleList->Release();
|
|
return hr;
|
|
}
|
|
|
|
if (strName.icompare(roleName) == 0)
|
|
{
|
|
// Found the right one.
|
|
//
|
|
GetNodeText(pRole, g_wzDisplayName, _strRoleDisplayName);
|
|
GetNodeText(pRole, g_wzDescription, roleDescription);
|
|
pRole->Release();
|
|
pRoleList->Release();
|
|
return S_OK;
|
|
}
|
|
|
|
pRole->Release();
|
|
}
|
|
|
|
pRoleList->Release();
|
|
|
|
LOG(String::format(L"Did not find the RoleLocalization Node item for role %1", roleName.c_str()));
|
|
|
|
return S_FALSE;
|
|
}
|