|
|
//---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995
//
// File: cggi.cxx
//
// Contents: This file contains the Group Object's
// GeneralInformation Functional Set.
//
// History: Jan-29-1996 t-ptam(PatrickT) Created.
//
//----------------------------------------------------------------------------
#include "NWCOMPAT.hxx"
#pragma hdrstop
BOOL VerifyIfMember( BSTR bstrMember, VARIANT * VariantArray, ULONG cElementFetched );
//
// Class CNWCOMPATGroup
//
//----------------------------------------------------------------------------
//
// Function: CNWCOMPATGroup::get_Description
//
// Synopsis:
//
//----------------------------------------------------------------------------
STDMETHODIMP CNWCOMPATGroup::get_Description(THIS_ BSTR FAR* retval) { GET_PROPERTY_BSTR((IADsGroup *)this, Description); }
//----------------------------------------------------------------------------
//
// Function: CNWCOMPATGroup::put_Description
//
// Synopsis:
//
//----------------------------------------------------------------------------
STDMETHODIMP CNWCOMPATGroup::put_Description(THIS_ BSTR bstrDescription) { PUT_PROPERTY_BSTR((IADsGroup *)this, Description); }
//----------------------------------------------------------------------------
//
// Function: CNWCOMPATGroup::Members
//
// Synopsis:
//
//----------------------------------------------------------------------------
STDMETHODIMP CNWCOMPATGroup::Members( THIS_ IADsMembers FAR* FAR* ppMembers ) { HRESULT hr;
hr = CNWCOMPATGroupCollection::CreateGroupCollection( _Parent, _ParentType, _ServerName, _Name, IID_IADsMembers, (void **)ppMembers ); RRETURN_EXP_IF_ERR(hr); }
//----------------------------------------------------------------------------
//
// Function: CNWCOMPATGroup::IsMember
//
// Synopsis:
//
//----------------------------------------------------------------------------
STDMETHODIMP CNWCOMPATGroup::IsMember( THIS_ BSTR bstrMember, VARIANT_BOOL FAR* bMember ) { IADsMembers FAR * pMembers = NULL; IUnknown FAR * pUnknown = NULL; IEnumVARIANT FAR * pEnumVar = NULL; DWORD i = 0; HRESULT hr = S_OK; VARIANT_BOOL fMember = FALSE; VARIANT VariantArray[10]; BOOL fContinue = TRUE; ULONG cElementFetched = 0;
hr = Members( &pMembers ); BAIL_ON_FAILURE(hr);
hr = pMembers->get__NewEnum( &pUnknown ); BAIL_ON_FAILURE(hr);
hr = pUnknown->QueryInterface( IID_IEnumVARIANT, (void **)&pEnumVar ); BAIL_ON_FAILURE(hr);
while (fContinue) {
IADs *pObject ;
hr = pEnumVar->Next( 10, VariantArray, &cElementFetched );
if (hr == S_FALSE) { fContinue = FALSE;
//
// Reset hr to S_OK, we want to return success
//
hr = S_OK; }
fMember = (VARIANT_BOOL)VerifyIfMember( bstrMember, VariantArray, cElementFetched );
if (fMember) {
fContinue = FALSE; }
for (i = 0; i < cElementFetched; i++ ) {
IDispatch *pDispatch = NULL;
pDispatch = VariantArray[i].pdispVal; pDispatch->Release();
}
memset(VariantArray, 0, sizeof(VARIANT)*10);
}
error:
*bMember = fMember? VARIANT_TRUE : VARIANT_FALSE;
if (pEnumVar) { pEnumVar->Release(); }
if (pUnknown) { pUnknown->Release(); }
if (pMembers) { pMembers->Release(); }
RRETURN_EXP_IF_ERR(hr); }
BOOL VerifyIfMember( BSTR bstrMember, VARIANT * VariantArray, ULONG cElementFetched ) { DWORD i = 0; HRESULT hr = S_OK; IADs FAR * pObject = NULL; IDispatch FAR * pDispatch = NULL;
for (i = 0; i < cElementFetched; i++ ) {
IDispatch *pDispatch = NULL; BSTR bstrName = NULL;
pDispatch = VariantArray[i].pdispVal;
hr = pDispatch->QueryInterface( IID_IADs, (VOID **) &pObject ); BAIL_ON_FAILURE(hr);
hr = pObject->get_ADsPath(&bstrName); BAIL_ON_FAILURE(hr);
if (!_wcsicmp(bstrName, bstrMember)) {
SysFreeString(bstrName); bstrName = NULL;
pObject->Release();
return(TRUE);
}
SysFreeString(bstrName); bstrName = NULL;
pObject->Release();
}
error:
return(FALSE);
}
//----------------------------------------------------------------------------
//
// Function: CNWCOMPATGroup::Add
//
// Synopsis:
//
//----------------------------------------------------------------------------
STDMETHODIMP CNWCOMPATGroup::Add( THIS_ BSTR bstrNewItem ) { HRESULT hr = S_OK; HRESULT hrTemp = S_OK; NWCONN_HANDLE hConn = NULL; POBJECTINFO pObjectInfo = NULL;
//
// Fill in pObjectInfo with appropriate data.
//
hr = BuildObjectInfo( bstrNewItem, &pObjectInfo ); BAIL_ON_FAILURE(hr);
//
// Validate input name is a user.
//
if (pObjectInfo->NumComponents != 2) { hr = E_ADS_BAD_PATHNAME; BAIL_ON_FAILURE(hr); }
//
// Make sure that the user that we're attempting to
// add resides on the server of this group
//
if (_wcsicmp(pObjectInfo->ComponentArray[0], _ServerName)) { hr = E_ADS_BAD_PARAMETER; BAIL_ON_FAILURE(hr); }
//
// Obtain a handle to the bindery that bstrNewItem resides on.
//
hr = NWApiGetBinderyHandle( &hConn, pObjectInfo->ComponentArray[0] ); BAIL_ON_FAILURE(hr);
//
// Add the member to the group.
//
hr = NWApiAddGroupMember( hConn, _Name, pObjectInfo->ComponentArray[1] ); BAIL_ON_FAILURE(hr);
error: if (hConn) { hrTemp = NWApiReleaseBinderyHandle(hConn); }
if (pObjectInfo) { FreeObjectInfo(pObjectInfo); }
RRETURN_EXP_IF_ERR(hr); }
//----------------------------------------------------------------------------
//
// Function: CNWCOMPATGroup::Remove
//
// Synopsis:
//
//----------------------------------------------------------------------------
STDMETHODIMP CNWCOMPATGroup::Remove( THIS_ BSTR bstrItemToBeRemoved ) { HRESULT hr = S_OK; HRESULT hrTemp = S_OK; NWCONN_HANDLE hConn = NULL; POBJECTINFO pObjectInfo = NULL;
//
// Fill in pObjectInfo with appropriate data.
//
hr = BuildObjectInfo( bstrItemToBeRemoved, &pObjectInfo ); BAIL_ON_FAILURE(hr);
//
// Validate input name is a user.
//
if (pObjectInfo->NumComponents != 2) { hr = E_ADS_BAD_PATHNAME; BAIL_ON_FAILURE(hr); }
//
// Make sure that the user that we're attempting to
// delete resides on the server of this group
//
if (_wcsicmp(pObjectInfo->ComponentArray[0], _ServerName)) { hr = E_ADS_BAD_PARAMETER; BAIL_ON_FAILURE(hr); }
//
// Obtain a handle to the bindery that bstrNewItem resides on.
//
hr = NWApiGetBinderyHandle( &hConn, pObjectInfo->ComponentArray[0] ); BAIL_ON_FAILURE(hr);
//
// Remove the member from the group.
//
hr = NWApiRemoveGroupMember( hConn, _Name, pObjectInfo->ComponentArray[1] ); BAIL_ON_FAILURE(hr);
error: if (hConn) { hrTemp = NWApiReleaseBinderyHandle(hConn); }
if (pObjectInfo) { FreeObjectInfo(pObjectInfo); }
RRETURN_EXP_IF_ERR(hr); }
|