//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1995. // // File: ndsfree.cxx // // Contents: NDS Object Free Routines // // Functions: // // History: 25-Apr-96 KrishnaG Created. // // Object Types 6, 13, 16, and 21 are flaky - pay extra attn. // // //---------------------------------------------------------------------------- #include "nds.hxx" // // NdsType objects free code // HRESULT NdsTypeFreeNDSSynId1( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_1.DNString); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId2( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_1.DNString); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId3( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_1.DNString); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId4( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_1.DNString); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId5( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_1.DNString); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId6( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; LPNDS_ASN1_TYPE_6 pStart = NULL; LPNDS_ASN1_TYPE_6 pTemp = NULL; FreeADsStr(lpNdsDestObject->NdsValue.value_6.String); pStart = lpNdsDestObject->NdsValue.value_6.Next; while (pStart){ pTemp = pStart; pStart = pTemp->Next; FreeADsStr(pTemp->String); FreeADsMem(pTemp); } RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId7( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; // // Do Nothing - Boolean // RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId8( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; // // Do nothing - Integer // RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId9( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; DWORD Length = 0; LPBYTE pBuffer = NULL; if (lpNdsDestObject->NdsValue.value_9.OctetString) { FreeADsMem( lpNdsDestObject->NdsValue.value_9.OctetString ); } RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId10( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_10.TelephoneNumber); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId11( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_11.TelephoneNumber); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId12( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; if (lpNdsDestObject->NdsValue.value_12.Address) { FreeADsMem(lpNdsDestObject->NdsValue.value_12.Address); } RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId13( PNDSOBJECT lpNdsDestObject ) { // // BugBug 13 Leaks like a sieve!! // HRESULT hr = S_OK; LPNDS_ASN1_TYPE_13 pStart = NULL; LPNDS_ASN1_TYPE_13 pTemp = NULL; if (lpNdsDestObject->NdsValue.value_13.Data) { FreeADsMem(lpNdsDestObject->NdsValue.value_13.Data); } pStart = lpNdsDestObject->NdsValue.value_13.Next; while (pStart){ pTemp = pStart; pStart = pTemp->Next; if (pTemp->Data) { FreeADsMem(pTemp->Data); } FreeADsMem(pTemp); } RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId14( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_14.Address); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId15( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_15.VolumeName); FreeADsStr(lpNdsDestObject->NdsValue.value_15.Path); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId16( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; DWORD dwCount = 0; DWORD i = 0; LPNDS_ASN1_TYPE_12 lpNdsTempASN1_12 = NULL; FreeADsStr(lpNdsDestObject->NdsValue.value_16.ServerName); dwCount = lpNdsDestObject->NdsValue.value_16.Count; lpNdsTempASN1_12 = lpNdsDestObject->NdsValue.value_16.ReplicaAddressHints; for (i = 0; i < dwCount; i++) { if ((lpNdsTempASN1_12 + i)->Address) { FreeADsMem((lpNdsTempASN1_12 + i)->Address); } } FreeADsMem(lpNdsTempASN1_12); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId17( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_17.ProtectedAttrName); FreeADsStr(lpNdsDestObject->NdsValue.value_17.SubjectName); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId18( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; DWORD i = 0; for (i = 0; i < 6; i++) { FreeADsStr(lpNdsDestObject->NdsValue.value_18.PostalAddress[i]); } RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId19( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; // // Do nothing for 19 // RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId20( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_20.ClassName); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId21( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; // // BugBug - how do we handle this byte stream!! // // // BugBug 21 -still don't know how to handle this // RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId22( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; // // DoNothing for 22 // RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId23( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_23.ObjectName); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId24( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; // // Do nothing // RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId25( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_25.ObjectName); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId26( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; FreeADsStr(lpNdsDestObject->NdsValue.value_26.ObjectName); RRETURN(hr); } HRESULT NdsTypeFreeNDSSynId27( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; // // Nothing to do for this one // RRETURN(hr); } HRESULT NdsTypeClear( PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; switch (lpNdsDestObject->NdsType) { case 1: hr = NdsTypeFreeNDSSynId1( lpNdsDestObject ); break; case 2: hr = NdsTypeFreeNDSSynId2( lpNdsDestObject ); break; case 3: hr = NdsTypeFreeNDSSynId3( lpNdsDestObject ); break; case 4: hr = NdsTypeFreeNDSSynId4( lpNdsDestObject ); break; case 5: hr = NdsTypeFreeNDSSynId5( lpNdsDestObject ); break; case 6: hr = NdsTypeFreeNDSSynId6( lpNdsDestObject ); break; case 7: hr = NdsTypeFreeNDSSynId7( lpNdsDestObject ); break; case 8: hr = NdsTypeFreeNDSSynId8( lpNdsDestObject ); break; case 9: hr = NdsTypeFreeNDSSynId9( lpNdsDestObject ); break; case 10: hr = NdsTypeFreeNDSSynId10( lpNdsDestObject ); break; case 11: hr = NdsTypeFreeNDSSynId11( lpNdsDestObject ); break; case 12: hr = NdsTypeFreeNDSSynId12( lpNdsDestObject ); break; case 13: hr = NdsTypeFreeNDSSynId13( lpNdsDestObject ); break; case 14: hr = NdsTypeFreeNDSSynId14( lpNdsDestObject ); break; case 15: hr = NdsTypeFreeNDSSynId15( lpNdsDestObject ); break; case 16: hr = NdsTypeFreeNDSSynId16( lpNdsDestObject ); break; case 17: hr = NdsTypeFreeNDSSynId17( lpNdsDestObject ); break; case 18: hr = NdsTypeFreeNDSSynId18( lpNdsDestObject ); break; case 19: hr = NdsTypeFreeNDSSynId19( lpNdsDestObject ); break; case 20: hr = NdsTypeFreeNDSSynId20( lpNdsDestObject ); break; case 21: hr = NdsTypeFreeNDSSynId21( lpNdsDestObject ); break; case 22: hr = NdsTypeFreeNDSSynId22( lpNdsDestObject ); break; case 23: hr = NdsTypeFreeNDSSynId23( lpNdsDestObject ); break; case 24: hr = NdsTypeFreeNDSSynId24( lpNdsDestObject ); break; case 25: hr = NdsTypeFreeNDSSynId25( lpNdsDestObject ); break; case 26: hr = NdsTypeFreeNDSSynId26( lpNdsDestObject ); break; case 27: hr = NdsTypeFreeNDSSynId27( lpNdsDestObject ); break; default: hr = E_FAIL; break; } RRETURN(hr); } void NdsTypeFreeNdsObjects( PNDSOBJECT pNdsObject, DWORD dwNumValues ) { DWORD i = 0; for (i = 0; i < dwNumValues; i++ ) { NdsTypeClear(pNdsObject + i); } FreeADsMem(pNdsObject); return; } HRESULT FreeNdsValues( nuint32 luSyntax, void *attrVal, nuint32 luAttrValSize ) { HRESULT hr = S_OK; switch (luSyntax) { case 1: case 2: case 3: case 4: case 5: FreeADsMem(attrVal); break; case 6: { pCI_List_T pCurr = (pCI_List_T) attrVal, pTemp = NULL; FreeADsMem(pCurr->s); pCurr = pCurr->next; while (pCurr) { pTemp = pCurr; pCurr = pCurr->next; FreeADsMem(pTemp->s); FreeADsMem(pTemp); } FreeADsMem(attrVal); break; } case 7: case 8: FreeADsMem(attrVal); break; case 9: { pOctet_String_T pOctetString = (pOctet_String_T) attrVal; FreeADsMem(pOctetString->data); FreeADsMem(pOctetString); break; } case 10: FreeADsMem(attrVal); break; case 11: { pFax_Number_T pFaxNumber = (pFax_Number_T) attrVal; FreeADsMem(pFaxNumber->telephoneNumber); FreeADsMem(pFaxNumber->parameters.data); FreeADsMem(pFaxNumber); break; } case 12: { pNet_Address_T pNetAddress = (pNet_Address_T) attrVal; FreeADsMem(pNetAddress->address); FreeADsMem(pNetAddress); break; } case 13: { pOctet_List_T pCurr = (pOctet_List_T) attrVal, pTemp = NULL; FreeADsMem(pCurr->data); pCurr = pCurr->next; while (pCurr) { pTemp = pCurr; pCurr = pCurr->next; FreeADsMem(pTemp->data); FreeADsMem(pTemp); } FreeADsMem(attrVal); break; } case 14: { pEMail_Address_T pEMailAddress = (pEMail_Address_T) attrVal; FreeADsMem(pEMailAddress->address); FreeADsMem(pEMailAddress); break; } case 15: { pPath_T pPath = (pPath_T) attrVal; FreeADsMem(pPath->path); FreeADsMem(pPath->volumeName); FreeADsMem(pPath); break; } case 16: { pReplica_Pointer_T pReplicaPointer = (pReplica_Pointer_T) attrVal; FreeADsMem(pReplicaPointer->serverName); for (DWORD i=0; i < pReplicaPointer->count; i++) { FreeADsMem(pReplicaPointer->replicaAddressHint[i].address); } FreeADsMem(pReplicaPointer); break; } case 17: { pObject_ACL_T pObjectACL = (pObject_ACL_T) attrVal; FreeADsMem(pObjectACL->protectedAttrName); FreeADsMem(pObjectACL->subjectName); FreeADsMem(pObjectACL); break; } case 18: { LPWSTR *pPostalAddresses = (LPWSTR *) attrVal; for (DWORD i=0; i<6; i++) { FreeADsMem(pPostalAddresses[i]); } FreeADsMem(pPostalAddresses); break; } case 19: FreeADsMem(attrVal); break; case 20: FreeADsMem(attrVal); break; case 21: // // Bugbug: more processing might be needed. // FreeADsMem(attrVal); break; case 22: FreeADsMem(attrVal); break; case 23: { pBack_Link_T pBackLink = (pBack_Link_T) attrVal; FreeADsMem(pBackLink->objectName); FreeADsMem(pBackLink); break; } case 24: FreeADsMem(attrVal); break; case 25: { pTyped_Name_T pTypedName = (pTyped_Name_T) attrVal; FreeADsMem(pTypedName->objectName); FreeADsMem(pTypedName); break; } case 26: { pHold_T pHold = (pHold_T) attrVal; FreeADsMem(pHold->objectName); FreeADsMem(pHold); break; } case 27: FreeADsMem(attrVal); break; default: hr = E_FAIL; break; } RRETURN(hr); }