4.1.10.6.9 AddObject
-
procedure AddObject( replEntinfList: REPLENTINFLIST, sourcePrefixTable: PrefixTable, nc: DSName, attributesAndStamps: set of AttributeAndStamp): DWORD
Informative summary of behavior: The AddObject procedure performs a replicated update by adding an object to the NC replica. This procedure has the following input parameters:
replEntinfList: The replicated update to be applied.
sourcePrefixTable: The prefix table from the server to translate attribute IDs.
nc: The root of the NC replica that is replicated.
attributesAndStamps: The AttributeAndStamp set that corresponds to the replicated update.
The procedure returns a Windows error code if it encounters an error while adding the object.
-
newObject: DSName dwResult: DWORD objectClassAttr: ATTRVAL isDeletedAttr: ATTRVAL isDeletedValue: boolean ncNameValue: DSName ncNameAtt: ATTRVAL partitionsContainer: DSName parentObject: DSName /* Find an appropriate and unused name for the object, updating * replEntInfList as appropriate */ dwResult := NameObject(replEntInfList, nc, sourcePrefixTable, attributeAndStamps) if dwResult ≠ ERROR_SUCCESS then return dwResult endif /* Check if this is a cross-ref in the partitions container replicating in.*/ objectClassAttr := ENTINF_GetValue( replEntinfList.Entinf, objectClass, sourcePrefixTable) ncNameAtt := ENTINF_GetValue( replEntinfList.Entinf, ncName, sourcePrefixTable) ncNameVal := ValueFromATTRVal(ncNameAtt,Syntax(ncNameAtt),sourcePrefixTable) partitionsContainer:= DescendantObject(ConfigNC(), "CN=Partitions,") parentObject := replEntinfList.Entinf.pName^ stripped of the first RDN. if(crossRef in ObjectClassAttr and parentObject = partitionsContainer) dwResult := AddSubRef(ncNameVal) if dwResult ≠ 0 then return dwResult endif isDeletedAttr := ENTINF_GetValue( replEntinfList.Entinf, isDeleted, sourcePrefixTable) if (isDeletedAttr = null) then isDeletedValue := false else isDeletedValue := ValueFromATTRVal(isDeletedAttr,Syntax(isDeleted),sourcePrefixTable) endif If(isDeleted Value) DelSubRef(ncNameVal) endif endif dwResult := PerformAddOperation(replEntinfList.Entinf, newObject, sourcePrefixTable, FALSE) /* Update attribute stamps. */ if (dwResult = 0) then for each e in attributesAndStamps do SetAttrStamp(newObject, e.attribute, e.stamp) endfor endif return dwResult