164 lines
4.9 KiB
C
164 lines
4.9 KiB
C
|
//================================================================================
|
|||
|
// Copyright (C) 1997 Microsoft Corporation
|
|||
|
// Author: RameshV
|
|||
|
// Description: implements an additional subnet function that requires a server typedef..
|
|||
|
// ThreadSafe: no
|
|||
|
// Locks: none
|
|||
|
// Please read stdinfo.txt for programming style.
|
|||
|
//================================================================================
|
|||
|
#include <mm.h>
|
|||
|
#include <array.h>
|
|||
|
#include <opt.h>
|
|||
|
#include <optl.h>
|
|||
|
#include <optclass.h>
|
|||
|
#include <bitmask.h>
|
|||
|
#include <range.h>
|
|||
|
#include <reserve.h>
|
|||
|
#include <subnet.h>
|
|||
|
#include <optdefl.h>
|
|||
|
#include <classdefl.h>
|
|||
|
#include <oclassdl.h>
|
|||
|
#include <sscope.h>
|
|||
|
#include <server.h>
|
|||
|
|
|||
|
//BeginExport(function)
|
|||
|
DWORD
|
|||
|
MemSubnetModify(
|
|||
|
IN PM_SUBNET Subnet,
|
|||
|
IN DWORD Address,
|
|||
|
IN DWORD Mask,
|
|||
|
IN DWORD State,
|
|||
|
IN DWORD SuperScopeId,
|
|||
|
IN LPWSTR Name,
|
|||
|
IN LPWSTR Description
|
|||
|
) //EndExport(function)
|
|||
|
{
|
|||
|
DWORD Error;
|
|||
|
PM_SUBNET NewSubnet, ThisSubnet;
|
|||
|
PARRAY pArray;
|
|||
|
ARRAY_LOCATION Loc;
|
|||
|
|
|||
|
AssertRet(Address == Subnet->Address, ERROR_INVALID_PARAMETER);
|
|||
|
Error = MemSubnetInit(
|
|||
|
&NewSubnet,
|
|||
|
Address,
|
|||
|
Mask,
|
|||
|
State,
|
|||
|
SuperScopeId,
|
|||
|
Name,
|
|||
|
Description
|
|||
|
);
|
|||
|
if( ERROR_SUCCESS != Error) return Error;
|
|||
|
|
|||
|
Require(NULL != NewSubnet && Subnet->ServerPtr );
|
|||
|
|
|||
|
if( Subnet->fSubnet ) {
|
|||
|
pArray = &(((PM_SERVER)(Subnet->ServerPtr))->Subnets);
|
|||
|
} else {
|
|||
|
pArray = &(((PM_SERVER)(Subnet->ServerPtr))->MScopes);
|
|||
|
}
|
|||
|
Error = MemArrayInitLoc(pArray, &Loc);
|
|||
|
while(ERROR_FILE_NOT_FOUND != Error) {
|
|||
|
Require(ERROR_SUCCESS == Error );
|
|||
|
|
|||
|
Error = MemArrayGetElement(pArray, &Loc, &ThisSubnet);
|
|||
|
Require(ERROR_SUCCESS == Error && NULL != ThisSubnet );
|
|||
|
|
|||
|
if( Subnet->Address != ThisSubnet->Address ) {
|
|||
|
Error = MemArrayNextLoc(pArray, &Loc);
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
Require(Subnet == ThisSubnet);
|
|||
|
Error = MemArraySetElement(pArray, &Loc, NewSubnet);
|
|||
|
Require(ERROR_SUCCESS == Error);
|
|||
|
|
|||
|
NewSubnet -> ServerPtr = Subnet->ServerPtr;
|
|||
|
NewSubnet -> Policy = Subnet->Policy;
|
|||
|
NewSubnet -> fSubnet = Subnet->fSubnet;
|
|||
|
NewSubnet -> Options = Subnet->Options;
|
|||
|
NewSubnet -> Ranges = Subnet->Ranges;
|
|||
|
NewSubnet -> Exclusions = Subnet->Exclusions;
|
|||
|
NewSubnet -> Reservations = Subnet->Reservations;
|
|||
|
NewSubnet -> Servers = Subnet->Servers;
|
|||
|
|
|||
|
(void) MemFree(Subnet);
|
|||
|
return Error;
|
|||
|
}
|
|||
|
|
|||
|
MemFree(NewSubnet);
|
|||
|
return ERROR_FILE_NOT_FOUND;
|
|||
|
}
|
|||
|
|
|||
|
//BeginExport(function)
|
|||
|
DWORD
|
|||
|
MemMScopeModify(
|
|||
|
IN PM_SUBNET MScope,
|
|||
|
IN DWORD ScopeId,
|
|||
|
IN DWORD State,
|
|||
|
IN DWORD Policy,
|
|||
|
IN BYTE TTL,
|
|||
|
IN LPWSTR Name,
|
|||
|
IN LPWSTR Description,
|
|||
|
IN LPWSTR LangTag,
|
|||
|
IN DATE_TIME ExpiryTime
|
|||
|
) //EndExport(function)
|
|||
|
{
|
|||
|
DWORD Error;
|
|||
|
PM_SUBNET NewMScope, ThisMScope;
|
|||
|
PARRAY pArray;
|
|||
|
ARRAY_LOCATION Loc;
|
|||
|
|
|||
|
AssertRet(ScopeId == MScope->MScopeId, ERROR_INVALID_PARAMETER);
|
|||
|
Error = MemMScopeInit(
|
|||
|
&NewMScope,
|
|||
|
ScopeId,
|
|||
|
State,
|
|||
|
Policy,
|
|||
|
TTL,
|
|||
|
Name,
|
|||
|
Description,
|
|||
|
LangTag,
|
|||
|
ExpiryTime
|
|||
|
);
|
|||
|
if( ERROR_SUCCESS != Error) return Error;
|
|||
|
|
|||
|
Require(NULL != NewMScope && MScope->ServerPtr );
|
|||
|
|
|||
|
pArray = &(((PM_SERVER)(MScope->ServerPtr))->MScopes);
|
|||
|
|
|||
|
Error = MemArrayInitLoc(pArray, &Loc);
|
|||
|
while(ERROR_FILE_NOT_FOUND != Error) {
|
|||
|
Require(ERROR_SUCCESS == Error );
|
|||
|
|
|||
|
Error = MemArrayGetElement(pArray, &Loc, &ThisMScope);
|
|||
|
Require(ERROR_SUCCESS == Error && NULL != ThisMScope );
|
|||
|
|
|||
|
if( MScope->MScopeId != ThisMScope->MScopeId ) {
|
|||
|
Error = MemArrayNextLoc(pArray, &Loc);
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
Require(MScope == ThisMScope);
|
|||
|
Error = MemArraySetElement(pArray, &Loc, NewMScope);
|
|||
|
Require(ERROR_SUCCESS == Error);
|
|||
|
|
|||
|
NewMScope -> ServerPtr = MScope->ServerPtr;
|
|||
|
NewMScope -> Options = MScope->Options;
|
|||
|
NewMScope -> Ranges = MScope->Ranges;
|
|||
|
NewMScope -> Exclusions = MScope->Exclusions;
|
|||
|
NewMScope -> Reservations = MScope->Reservations;
|
|||
|
NewMScope -> Servers = MScope->Servers;
|
|||
|
|
|||
|
(void) MemFree(MScope);
|
|||
|
return Error;
|
|||
|
}
|
|||
|
|
|||
|
MemFree(NewMScope);
|
|||
|
return ERROR_FILE_NOT_FOUND;
|
|||
|
}
|
|||
|
|
|||
|
//================================================================================
|
|||
|
// end of file
|
|||
|
//================================================================================
|
|||
|
|