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.
 
 
 
 
 
 

237 lines
6.2 KiB

//+----------------------------------------------------------------------------
//
// 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;
}