vpnengine/vpnmanager/src/policyimporter.cpp
branchRCL_3
changeset 22 9f4e37332ce5
parent 2 ef893827b4d1
child 23 473321461bba
equal deleted inserted replaced
20:352850cbed81 22:9f4e37332ce5
    13 *
    13 *
    14 * Description:   Policy importer
    14 * Description:   Policy importer
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 
    18 #include <f32file.h>
       
    19 #include <x509cert.h>
       
    20 #include <f32file.h>
       
    21 #include <x509cert.h>
       
    22 #include <e32const.h>
    19 
    23 
    20 #include "policyimporter.h"
    24 #include "policyimporter.h"
    21 #include "vpnapiservant.h"
    25 #include "vpnapiservant.h"
    22 #include "fileutil.h"
    26 #include "fileutil.h"
    23 #include "policypatcher.h"
    27 #include "policypatcher.h"
    26 #include "vpnmanagerserverdefs.h"
    30 #include "vpnmanagerserverdefs.h"
    27 #include "ikepolparser.h"
    31 #include "ikepolparser.h"
    28 #include "pkiutil.h"
    32 #include "pkiutil.h"
    29 #include "cmmanagerutils.h"
    33 #include "cmmanagerutils.h"
    30 #include "log_r6.h"
    34 #include "log_r6.h"
    31 
    35 #include "agileprovisionws.h"
    32 #include <f32file.h>
    36 #include "agileprovisiondefs.h"
    33 #include <x509cert.h>
    37 #include "policyinstaller_constants.h"
       
    38 
       
    39 
    34 
    40 
    35 const TInt KDefaultKeySize(1024);
    41 const TInt KDefaultKeySize(1024);
       
    42 
       
    43 _LIT8 (KPinFileNameTitle, "[POLICYNAME]");
    36 
    44 
    37 enum TImportState
    45 enum TImportState
    38     {
    46     {
    39     EStateBeginPolicyImport = 1,
    47     EStateBeginPolicyImport = 1,
    40     EStateImportCaCert,
    48     EStateImportCaCert,
    45     EStateAfterImportUserPrivKey,
    53     EStateAfterImportUserPrivKey,
    46     EStateAttachCertificate,
    54     EStateAttachCertificate,
    47     EStateAfterAttachCertificate,
    55     EStateAfterAttachCertificate,
    48     EStateImportPinAndPol,
    56     EStateImportPinAndPol,
    49     EStateCreateVpnDestination,
    57     EStateCreateVpnDestination,
    50     EStateEndPolicyImport
    58     EStateEndPolicyImport,
       
    59     EStateGetPolicyProvisionService,
       
    60     EStateAfterGetPolicyProvisionService
    51     };
    61     };
    52 
    62 
    53 CPolicyImporter* CPolicyImporter::NewL(const RMessage2& aMessage, CVpnApiServant& aVpnApiServant,
    63 CPolicyImporter* CPolicyImporter::NewL(const RMessage2& aMessage, CVpnApiServant& aVpnApiServant,
    54                                        CPolicyStore& aPolicyStore, RFs& aFs)
    64                                        CPolicyStore& aPolicyStore, RFs& aFs)
    55     {
    65     {
   114     delete iCurrUserCertList;
   124     delete iCurrUserCertList;
   115     delete iCurrOtherCaCertList;
   125     delete iCurrOtherCaCertList;
   116 
   126 
   117     delete iCertFileData;
   127     delete iCertFileData;
   118     delete iKeyFileData;
   128     delete iKeyFileData;
       
   129     
       
   130     delete iAgileProvisionWSAddr;
       
   131     delete iAgileProvisionWs;
       
   132     
   119     LOG_("<- CPolicyImporter::~CPolicyImporter()");
   133     LOG_("<- CPolicyImporter::~CPolicyImporter()");
   120     }
   134     }
   121 
   135 
   122 TInt CPolicyImporter::RunError(TInt aError)
   136 TInt CPolicyImporter::RunError(TInt aError)
   123     {
   137     {
   226             break;
   240             break;
   227 
   241 
   228         case EStateEndPolicyImport:
   242         case EStateEndPolicyImport:
   229             StateEndPolicyImportL();
   243             StateEndPolicyImportL();
   230             break;
   244             break;
   231 
   245             
       
   246         case EStateGetPolicyProvisionService:
       
   247             StateGetPolicyProvisionServiceL();
       
   248             break;
       
   249 
       
   250         case EStateAfterGetPolicyProvisionService:
       
   251             StateAfterGetPolicyProvisionServiceL();
       
   252             break;
   232         default:
   253         default:
   233             User::Panic(KVpnManagerServer, EInvalidImportState);
   254             User::Panic(KVpnManagerServer, EInvalidImportState);
   234             break;
   255             break;
   235         }
   256         }
   236     }
   257     }
   595 
   616 
   596 void CPolicyImporter::StateImportPinAndPolL()
   617 void CPolicyImporter::StateImportPinAndPolL()
   597     {
   618     {
   598     LOG_("-> CPolicyImporter::StateImportPinAndPolL()");
   619     LOG_("-> CPolicyImporter::StateImportPinAndPolL()");
   599     SetCurrState(EStateImportPinAndPol);
   620     SetCurrState(EStateImportPinAndPol);
   600 
   621     HBufC* pinFile;
   601     HBufC* pinFile = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KPinFileExt);
   622     HBufC* polFile;
   602     HBufC* polFile = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KPolFileExt);
   623     if ( !iAgileProvision )
       
   624         {
       
   625         pinFile = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KPinFileExt);
       
   626         polFile = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KPolFileExt);
       
   627         }
       
   628     else
       
   629         {
       
   630         pinFile = iFileUtil.MakeFileNameLC(KTempDirectory(), KAgileProvisionPinFileName(), KNullDesc());
       
   631         polFile = iFileUtil.MakeFileNameLC(KTempDirectory(), KAgileProvisionPolicyFileName(), KNullDesc());
       
   632         
       
   633         HBufC8* infoData=NULL;
       
   634        
       
   635         if ( iFileUtil.FileExists(*polFile) )
       
   636            {
       
   637            infoData=GetPolicyNameL(polFile);
       
   638            CleanupStack::PushL(infoData);
       
   639            }          
       
   640         else
       
   641            User::Leave(KErrNotFound);
       
   642         
       
   643         
       
   644         HBufC8* pinFileData = HBufC8::NewLC(KNullDesc().Length() + KPinFileNameTitle().Length() + KCRLF().Length() + infoData->Length());
       
   645         TPtr8 pinFilePtr (pinFileData->Des()) ;
       
   646         pinFilePtr.Append(KPinFileNameTitle);
       
   647         pinFilePtr.Append(KCRLF);
       
   648         pinFilePtr.Append(*infoData);
       
   649               
       
   650         iFileUtil.SaveFileDataL(*pinFile, *pinFileData);
       
   651         
       
   652         CleanupStack::PopAndDestroy(pinFileData);
       
   653         CleanupStack::PopAndDestroy(infoData);
       
   654         }
       
   655      
   603 
   656 
   604     if (!iFileUtil.FileExists(*pinFile))
   657     if (!iFileUtil.FileExists(*pinFile))
   605         {
   658         {
   606         LOG_("<- CPolicyImporter::StateImportPinAndPolL() LEAVE: KVpnErrNoPolicyInfoFile");
   659         LOG_("<- CPolicyImporter::StateImportPinAndPolL() LEAVE: KVpnErrNoPolicyInfoFile");
   607         User::Leave(KVpnErrNoPolicyInfoFile);
   660         User::Leave(KVpnErrNoPolicyInfoFile);
   614     else
   667     else
   615         {
   668         {
   616         PatchPolicyCaCertInfoL(*polFile);
   669         PatchPolicyCaCertInfoL(*polFile);
   617 
   670 
   618         iPolicyStore.ImportPolicyL(*pinFile, *polFile, iNewPolicyId);
   671         iPolicyStore.ImportPolicyL(*pinFile, *polFile, iNewPolicyId);
   619 
   672        
       
   673         // if policy imported from Agile VPN provisioning web service
       
   674         if ( iAgileProvision )
       
   675             {
       
   676             PatchPolicyProvisionL();
       
   677             }
   620         //iImportSinglePolicy is used when policy is installed via
   678         //iImportSinglePolicy is used when policy is installed via
   621         //OMA DM or ACU. If the policy is installed from .vpn file
   679         //OMA DM. If the policy is installed from .vpn file
   622         //the iImportSinglePolicy is not used.
   680         //the iImportSinglePolicy is not used.
   623         //The VPN destination is only created in .vpn case.
   681         //The VPN destination is only created in .vpn case.
   624         if (iImportSinglePolicy)
   682         if (iImportSinglePolicy)
   625             {
   683             {
   626             GotoState(EStateEndPolicyImport);
   684             GotoState(EStateEndPolicyImport);
   637 void CPolicyImporter::StateCreateVpnDestinationL()
   695 void CPolicyImporter::StateCreateVpnDestinationL()
   638     {
   696     {
   639     LOG_("-> CPolicyImporter::StateCreateVpnDestinationL()");
   697     LOG_("-> CPolicyImporter::StateCreateVpnDestinationL()");
   640     SetCurrState(EStateCreateVpnDestination);
   698     SetCurrState(EStateCreateVpnDestination);
   641 
   699 
   642         //Gets the IAP name from policy name
   700     //Gets the IAP name from policy name
   643     TVpnPolicyInfo* policyInfo = new (ELeave) TVpnPolicyInfo;
   701     TVpnPolicyInfo* policyInfo = new (ELeave) TVpnPolicyInfo;
   644     CleanupDeletePushL(policyInfo);
   702     CleanupDeletePushL(policyInfo);
   645 
   703 
   646     User::LeaveIfError(iPolicyStore.GetPolicyInfo(*iNewPolicyId, *policyInfo));
   704     User::LeaveIfError(iPolicyStore.GetPolicyInfo(*iNewPolicyId, *policyInfo));
   647 
   705     TBool iapExist(EFalse);
   648     CmManagerUtils::CreateVPNConnectionMethodToIntranetL(*policyInfo,
   706     if ( !iAgileProvision )
   649                                                          *(iVpnApiServant.iEventLogger));
   707         TUint32 provisionIapId = CmManagerUtils::CreateVPNConnectionMethodToIntranetL(*policyInfo,
   650 
   708                                                                              *(iVpnApiServant.iEventLogger));
   651     CleanupStack::PopAndDestroy(); //policyInfo
   709     else
       
   710         {
       
   711         
       
   712         if ( iAgileProvisionAPId > 0 )
       
   713             {
       
   714             iapExist=CmManagerUtils::ProvisionIAPNameExistL(iAgileProvisionAPId);
       
   715             }
       
   716         
       
   717         if ( !iapExist || iAgileProvisionAPId == 0)
       
   718             {
       
   719             TUint32 provisionIapId = CmManagerUtils::CreateVPNConnectionMethodToIntranetL(*policyInfo,
       
   720                                                                      *(iVpnApiServant.iEventLogger));
       
   721             
       
   722             TFileName serverSettingsFile;
       
   723             User::LeaveIfError(iFs.PrivatePath(serverSettingsFile));
       
   724                   
       
   725             serverSettingsFile.Append(KProvisionServerSettings);
       
   726                    
       
   727             if ( iFileUtil.FileExists(serverSettingsFile) )
       
   728                {
       
   729                HBufC8* fileData=iFileUtil.LoadFileDataL(serverSettingsFile);
       
   730                CleanupStack::PushL(fileData);
       
   731                HBufC8* newFileData =HBufC8::New(fileData->Length() + KCRLF().Length() + 4);
       
   732                CleanupStack::PushL(newFileData);
       
   733                TPtr8 fileDataPtr = newFileData->Des();
       
   734                fileDataPtr.Copy(*fileData);
       
   735                fileDataPtr.Append(KCRLF);
       
   736                fileDataPtr.AppendNum(provisionIapId);
       
   737                iFileUtil.SaveFileDataL(serverSettingsFile,fileDataPtr);
       
   738                CleanupStack::PopAndDestroy(newFileData);
       
   739                CleanupStack::PopAndDestroy(fileData);
       
   740                }
       
   741             }
       
   742         }
       
   743 
       
   744     CleanupStack::PopAndDestroy(policyInfo);
   652     GotoState(EStateEndPolicyImport);
   745     GotoState(EStateEndPolicyImport);
   653 
   746 
   654     LOG_("<- CPolicyImporter::StateCreateVpnDestinationL()");
   747     LOG_("<- CPolicyImporter::StateCreateVpnDestinationL()");
   655     }
   748     }
   656 
   749 
   666 
   759 
   667     HBufC* fileFilter = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KAllFilesPat);
   760     HBufC* fileFilter = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KAllFilesPat);
   668     iFileUtil.DeleteFilesL(*fileFilter);
   761     iFileUtil.DeleteFilesL(*fileFilter);
   669 
   762 
   670     CleanupStack::PopAndDestroy(); // fileFilter
   763     CleanupStack::PopAndDestroy(); // fileFilter
   671 
   764     if ( !iAgileProvision )
   672     LOG_EVENT_2B(R_VPN_MSG_INSTALLED_POLICY_FILE, iNewPolicyId, NULL, 0, iImportSinglePolicy);
   765         {
   673 
   766         LOG_EVENT_2B(R_VPN_MSG_INSTALLED_POLICY_FILE, iNewPolicyId, NULL, 0, iImportSinglePolicy);
       
   767         }
       
   768     else
       
   769         {
       
   770         _LIT8(KPolicySever, "Policy server");
       
   771         LOG_EVENT_2B(R_VPN_MSG_INSTALLED_POLICY_SERVER, iNewPolicyId, &KPolicySever(), KErrNone, EFalse);
       
   772         }
   674     GotoState(EStateBeginPolicyImport);
   773     GotoState(EStateBeginPolicyImport);
   675     LOG_("<- CPolicyImporter::StateEndPolicyImportL()");
   774     LOG_("<- CPolicyImporter::StateEndPolicyImportL()");
   676     }
   775     }
       
   776 
       
   777 void CPolicyImporter::SynchronizeVpnPolicyServerL()
       
   778     {
       
   779     
       
   780     GotoState(EStateGetPolicyProvisionService);
       
   781     }
       
   782 
       
   783 void CPolicyImporter::StateGetPolicyProvisionServiceL()
       
   784     {
       
   785     GetPolicyWsL();
       
   786     SetNextState(EStateAfterGetPolicyProvisionService);
       
   787     
       
   788     }
       
   789 
       
   790 void CPolicyImporter::StateAfterGetPolicyProvisionServiceL()
       
   791     {
       
   792     
       
   793     if (iStatus != KErrNone)
       
   794         {
       
   795         User::Leave(iStatus.Int());
       
   796         }
       
   797     delete iCurrCaCertList;
       
   798     iCurrCaCertList = NULL;
       
   799     iCurrCaCertList = new (ELeave) CArrayFixFlat<TFileName>(2);
       
   800     
       
   801     delete iCurrUserCertList;
       
   802     iCurrUserCertList = NULL;
       
   803     iCurrUserCertList = new (ELeave) CArrayFixFlat<TFileName>(2);
       
   804     
       
   805     iNewPolicyId = &iPolicyId;
       
   806     
       
   807     BuildPolicyIdListL();
       
   808     iCurrPolicyId.Copy(iPolicyIdList->At(iCurrPolicyIdIndex));
       
   809     iImportSinglePolicy = EFalse;
       
   810     iAgileProvision = ETrue;
       
   811     GotoState(EStateImportPinAndPol);
       
   812     
       
   813     }
       
   814 
   677 
   815 
   678 void CPolicyImporter::BuildPolicyIdListL()
   816 void CPolicyImporter::BuildPolicyIdListL()
   679     {
   817     {
   680     delete iPolicyIdList;
   818     delete iPolicyIdList;
   681     iPolicyIdList = NULL;
   819     iPolicyIdList = NULL;
  1151         issuerName=NULL;
  1289         issuerName=NULL;
  1152         currIndex++;
  1290         currIndex++;
  1153         }       
  1291         }       
  1154     
  1292     
  1155     return aCertFileArray->At(currCaIndex);
  1293     return aCertFileArray->At(currCaIndex);
  1156     
  1294     }
       
  1295     
       
  1296     
       
  1297     void CPolicyImporter::GetPolicyWsL()
       
  1298         {
       
  1299         const TInt KEolLen = 2;
       
  1300         
       
  1301         delete iAgileProvisionWs;
       
  1302         iImportDir=KTempDirectory();
       
  1303         iFileUtil.CreateDirIfNeededL(iImportDir);
       
  1304         iAgileProvisionWs = CAgileProvisionWs::NewL();
       
  1305              
       
  1306         TFileName serverSettingsFile;
       
  1307         User::LeaveIfError(iFs.PrivatePath(serverSettingsFile));
       
  1308               
       
  1309         serverSettingsFile.Append(KProvisionServerSettings);
       
  1310                     
       
  1311                
       
  1312         HBufC8* fileData;
       
  1313         TInt endOfLine;
       
  1314         HBufC8* serviceEndPoint;
       
  1315         TUint iapIdInt;
       
  1316         
       
  1317         if ( iFileUtil.FileExists(serverSettingsFile) )
       
  1318             {
       
  1319             fileData=iFileUtil.LoadFileDataL(serverSettingsFile);
       
  1320             CleanupStack::PushL(fileData);
       
  1321             endOfLine=fileData->Find(KCRLF);
       
  1322                     
       
  1323             serviceEndPoint=HBufC8::NewL( KHTTPprefix().Length() + KServiceSuffix().Length() +  fileData->Mid(0,endOfLine).Length());
       
  1324             CleanupStack::PushL(serviceEndPoint);
       
  1325             TPtr8 endPointPtr(serviceEndPoint->Des());
       
  1326             endPointPtr=KHTTPprefix;
       
  1327             HBufC8* serviceAddrBuf=(fileData->Mid(0,endOfLine)).AllocL();
       
  1328             CleanupStack::PushL(serviceAddrBuf);
       
  1329             
       
  1330             //serviceAddrBuf ownership transfer
       
  1331             iAgileProvisionWs->SetServiceAddr(serviceAddrBuf);
       
  1332             endPointPtr.Append(fileData->Mid(0,endOfLine));
       
  1333             endPointPtr.Append(KServiceSuffix);
       
  1334             CleanupStack::Pop(serviceAddrBuf);
       
  1335             
       
  1336             TInt startOfLine(endOfLine+KEolLen);
       
  1337             TPtrC8 nameData=fileData->Right(fileData->Length()-startOfLine);
       
  1338             endOfLine=nameData.Find(KCRLF);      
       
  1339                                         
       
  1340             startOfLine = endOfLine + KEolLen;
       
  1341             TPtrC8 iapIdData=nameData.Right(nameData.Length()-startOfLine);
       
  1342             endOfLine=iapIdData.Find(KCRLF);
       
  1343             TLex8 iapIdConverter(iapIdData.Left(endOfLine));
       
  1344             
       
  1345             iapIdConverter.Val(iapIdInt);
       
  1346             iAgileProvisionWs->GetPolicy( *serviceEndPoint, iapIdInt, iStatus );
       
  1347             CleanupStack::PopAndDestroy(serviceEndPoint);
       
  1348             CleanupStack::PopAndDestroy(fileData); 
       
  1349             }
       
  1350                 
       
  1351        
       
  1352         SetActive();
       
  1353  
       
  1354         }
       
  1355     
       
  1356     HBufC8* CPolicyImporter::GetPolicyNameL(HBufC* aPolicyFileName)
       
  1357         {
       
  1358         HBufC8* infoData=NULL;
       
  1359         HBufC8* infoSection=NULL;
       
  1360         HBufC8* fileData=NULL;
       
  1361         if ( iFileUtil.FileExists(*aPolicyFileName) )
       
  1362            {
       
  1363             fileData=iFileUtil.LoadFileDataL(*aPolicyFileName);
       
  1364             CleanupStack::PushL(fileData);
       
  1365             _LIT8(KInfo, "[INFO]");
       
  1366             TInt i=(fileData->Find(KInfo)) + KInfo().Length() + KCRLF().Length();
       
  1367                    
       
  1368             infoSection=fileData->Right((fileData->Length())-i).AllocL();
       
  1369             CleanupStack::PushL(infoSection);
       
  1370             TInt j=infoSection->Find(KCRLF);
       
  1371                   
       
  1372             infoData=infoSection->Mid(0,j).AllocL();
       
  1373             
       
  1374             CleanupStack::Pop(infoSection);
       
  1375             CleanupStack::Pop(fileData);
       
  1376             
       
  1377             delete infoSection;
       
  1378             delete fileData;
       
  1379             infoSection=NULL;
       
  1380             fileData=NULL;
       
  1381             
       
  1382             }          
       
  1383          else
       
  1384             User::Leave(KErrNotFound);
       
  1385          
       
  1386         return infoData;
       
  1387         }
       
  1388     
       
  1389                
       
  1390     void CPolicyImporter::PatchPolicyProvisionL()
       
  1391         {
       
  1392         TPath privateDir;
       
  1393         User::LeaveIfError(iFs.PrivatePath(privateDir));
       
  1394                 
       
  1395         HBufC* policyServerSettingsFileName = HBufC::NewL(KProvisionServerSettings().Length() + privateDir.Length());
       
  1396         CleanupStack::PushL(policyServerSettingsFileName);
       
  1397         TPtr fileNamePtr=policyServerSettingsFileName->Des();
       
  1398         fileNamePtr.Append(privateDir);
       
  1399         fileNamePtr.Append(KProvisionServerSettings);
       
  1400             
       
  1401                 
       
  1402         if ( iFileUtil.FileExists(fileNamePtr) )
       
  1403            {
       
  1404            HBufC8* fileData=iFileUtil.LoadFileDataL(fileNamePtr);
       
  1405            CleanupStack::PushL(fileData);
       
  1406         
       
  1407            TPtrC8 restOfData = *fileData;
       
  1408            
       
  1409            TInt bofInt;
       
  1410            TInt line=1;             
       
  1411            while ( (bofInt=restOfData.Find(KCRLF)) != KErrNotFound && line < KPolicyFileLine )
       
  1412                  {
       
  1413                  restOfData.Set(restOfData.Mid(bofInt + KCRLF().Length()));
       
  1414                  line++;                                  
       
  1415                  }
       
  1416            TInt iapIdStart=restOfData.Find(KCRLF);
       
  1417            HBufC16* iapIdBuf;
       
  1418            if ( iapIdStart!=KErrNotFound )
       
  1419               {
       
  1420               TPtrC8 iapIdPtr=restOfData.Mid(iapIdStart + KCRLF().Length(),restOfData.Length()-KCRLF().Length()-iapIdStart);
       
  1421               iapIdBuf=iFileUtil.To16BitL(iapIdPtr);
       
  1422               CleanupStack::PushL(iapIdBuf);
       
  1423               TLex iapIdConverter(*iapIdBuf);
       
  1424               iapIdConverter.Val(iAgileProvisionAPId,EDecimal);     
       
  1425               CleanupStack::PopAndDestroy(iapIdBuf);           
       
  1426               }
       
  1427            
       
  1428            if ( iAgileProvisionAPId >0)
       
  1429                restOfData.Set(restOfData.Mid(0,iapIdStart));
       
  1430                HBufC16* policyFileNameBuf = iFileUtil.To16BitL(restOfData);
       
  1431                CleanupStack::PushL(policyFileNameBuf);
       
  1432                HBufC* policyFilePath = iFileUtil.MakeFileNameLC(privateDir, *policyFileNameBuf, KPolFileExt);
       
  1433                
       
  1434                //server configuration file includes installed policy file name and policy exists.
       
  1435                if ( line == KPolicyFileLine && iFileUtil.FileExists(*policyFilePath) )
       
  1436                    { 
       
  1437                    HBufC16* restOfDataBuf=iFileUtil.To16BitL(restOfData);
       
  1438                    CleanupStack::PushL(restOfDataBuf);
       
  1439                    iPolicyIdBuf.Append(*restOfDataBuf);
       
  1440                    iNewPolicyIdBuf=iPolicyIdBuf;
       
  1441                    iPolicyStore.ReplacePolicyL(iPolicyIdBuf,*iNewPolicyId);
       
  1442                    iNewPolicyId= &iNewPolicyIdBuf;
       
  1443                    CleanupStack::PopAndDestroy(restOfDataBuf);
       
  1444                    }
       
  1445                //either first configuration or policy removed
       
  1446                else
       
  1447                    {
       
  1448                    HBufC* serverFile = HBufC::NewL(fileData->Length() + KCRLF().Length() + iNewPolicyId->Length());
       
  1449                    CleanupStack::PushL(serverFile);
       
  1450                    TPtr tPtr(serverFile->Des());
       
  1451                    HBufC16* fileData16=iFileUtil.To16BitL(*fileData);
       
  1452                    CleanupStack::PushL(fileData16);
       
  1453                    tPtr.Copy(*fileData16);
       
  1454                    _LIT(KCRLF, "\r\n");
       
  1455               
       
  1456                    //policy removed
       
  1457                    if ( line == KPolicyFileLine )
       
  1458                        {
       
  1459                        TInt lengthOfPolicyId=restOfData.Length();
       
  1460                        tPtr.Replace(fileData->Length()-lengthOfPolicyId,lengthOfPolicyId,*iNewPolicyId);
       
  1461                        }
       
  1462                    //first configuration
       
  1463                    else
       
  1464                        {
       
  1465                        tPtr.Append(KCRLF);
       
  1466                        tPtr.Append(*iNewPolicyId);
       
  1467                        }
       
  1468                    iFileUtil.SaveFileDataL(fileNamePtr,tPtr);
       
  1469                    
       
  1470                    CleanupStack::PopAndDestroy(fileData16);
       
  1471                    CleanupStack::PopAndDestroy(serverFile);
       
  1472                    }
       
  1473              
       
  1474                CleanupStack::PopAndDestroy(policyFilePath);
       
  1475                CleanupStack::PopAndDestroy(policyFileNameBuf); 
       
  1476                CleanupStack::PopAndDestroy(fileData);
       
  1477                CleanupStack::PopAndDestroy(policyServerSettingsFileName);
       
  1478            }
       
  1479 
  1157     }
  1480     }
  1158 /***/
  1481 /***/