From: KyungwooNoh Date: Tue, 2 Jul 2013 08:12:08 +0000 (+0900) Subject: fixed SE-44271 issue X-Git-Tag: accepted/tizen/20130912.081851^2~164 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7504ca9035b1286fb4812de158ef64a7f7ff63d5;p=platform%2Fframework%2Fnative%2Fappfw.git fixed SE-44271 issue Change-Id: I2ced4d34341dead058c0ba7e1fbadc34cbc6d34e Signed-off-by: KyungwooNoh --- diff --git a/src/security/cert/FSecCert_CertDbManager.cpp b/src/security/cert/FSecCert_CertDbManager.cpp index 2f9886a..99d384d 100755 --- a/src/security/cert/FSecCert_CertDbManager.cpp +++ b/src/security/cert/FSecCert_CertDbManager.cpp @@ -280,10 +280,9 @@ _CertDbManager::InsertCaCertificateFromBuffer(_CaCertType certType, _CertFormat } r = __caCertDbStore.CheckDuplicateCertificate(certType, reinterpret_cast< byte* >(subjectName), lenSubjectName); - if (r == E_SUCCESS) - { - return E_FILE_ALREADY_EXIST; - } + SysTryReturnResult(NID_SEC_CERT, IsFailed(r), E_FILE_ALREADY_EXIST, "File already exists."); + SysTryReturnResult(NID_SEC_CERT, r==E_DATA_NOT_FOUND, r, "Failed to check duplicate"); + //Get the last installed certificate id from db table __caCertDbStore.GetCurrentCertId(certId); //Calculate the new (std::nothrow) certificate id for installation @@ -442,11 +441,7 @@ _CertDbManager::UpdateCaCertificateFromBuffer(_CaCertType certType, _CertFormat //No need to update record as only file data changed. return E_SUCCESS; } - else - { - return E_FILE_ALREADY_EXIST; - } - + return r; } @@ -474,7 +469,8 @@ _CertDbManager::RemoveCaCertificateFromBuffer(_CaCertType certType, _CertFormat SysTryReturnResult(NID_SEC_CERT, pTbsCert != null, E_SYSTEM, "Failed to get certificate to be signed instance."); r = __caCertDbStore.CheckDuplicateCertificate(certType, pTbsCert->GetSubjectName(), strlen(reinterpret_cast< char* >(pTbsCert->GetSubjectName()))); - SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_OBJ_NOT_FOUND, "Certificate not found in db."); + SysTryReturnResult(NID_SEC_CERT, r != E_DATA_NOT_FOUND, E_OBJ_NOT_FOUND, "Certificate not found in db."); + SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), r, "Propagated."); r = GetCaCertificateId(pTbsCert->GetSubjectName(), strlen(reinterpret_cast< char* >(pTbsCert->GetSubjectName())), pTbsCert->GetIssuerName(), strlen(reinterpret_cast< char* >(pTbsCert->GetIssuerName())), @@ -1265,8 +1261,11 @@ _CertDbManager::InsertCertChain(_CertFormat certFormat, _CertChain* pCertChain) pTbsCert = pCurCert->GetTbsCertInstance(); SysTryReturnResult(NID_SEC_CERT, pTbsCert != null, E_SYSTEM, "Failed to get certificate to be signed instance."); - if (E_SUCCESS != __caCertDbStore.CheckDuplicateCertificate(certType, reinterpret_cast< byte* >(pTbsCert->GetSubjectName()), strlen(reinterpret_cast< char* >(pTbsCert->GetSubjectName())))) + r = __caCertDbStore.CheckDuplicateCertificate(certType, reinterpret_cast< byte* >(pTbsCert->GetSubjectName()), strlen(reinterpret_cast< char* >(pTbsCert->GetSubjectName()))); + if(r != E_SUCCESS) { + SysTryReturn(NID_SEC_CERT, r == E_DATA_NOT_FOUND, r, r, "[%s] Failed to check duplicate.", GetErrorMessage(r)); + pX509Buff = null; x509BuffSize = 0; @@ -1276,6 +1275,7 @@ _CertDbManager::InsertCertChain(_CertFormat certFormat, _CertChain* pCertChain) r = InsertCaCertificateFromBuffer(certType, certFormat, pX509Buff, x509BuffSize); SysTryReturn(NID_SEC_CERT, !(IsFailed(r) && r != E_FILE_ALREADY_EXIST), r, r, "[E_SYSTEM] Failed to insert ca certificate."); } + // CA certificate already present or properly installed in CA certificate store, // get the certificate id of certificate r = GetCaCertificateId(pTbsCert->GetSubjectName(), strlen(reinterpret_cast< char* >(pTbsCert->GetSubjectName())), @@ -1390,7 +1390,7 @@ _CertDbManager::InsertCertificateChain(_CertFormat certFormat, _CertChain* pCert int subjectNameLen = strlen(reinterpret_cast< char* >(pTbsCert->GetSubjectName())); r = __userCertDbStore.CheckDuplicateCertificate(pSubjectName, subjectNameLen); - if (IsFailed(r)) + if (r == E_DATA_NOT_FOUND) { if (pPrivateKeyInfo != null) { @@ -1465,8 +1465,10 @@ _CertDbManager::InsertCertificateChain(_CertFormat certFormat, _CertChain* pCert SysTryReturnResult(NID_SEC_CERT, pTbsCert != null, E_SYSTEM, "Failed to get certificate to be signed instance."); r = __caCertDbStore.CheckDuplicateCertificate(certType, pTbsCert->GetSubjectName(), strlen(reinterpret_cast< char* >(pTbsCert->GetSubjectName()))); - if (IsFailed(r)) + if (r != E_SUCCESS) { + SysTryReturnResult(NID_SEC_CERT, r == E_DATA_NOT_FOUND, r, "Failed to check duplicate."); + pX509Buff = null; x509BuffSize = 0; @@ -1621,6 +1623,7 @@ _CertDbManager::InsertUserCertificateFromBuffer(_CertFormat certFormat, byte* pC r = __userCertDbStore.CheckDuplicateCertificate(reinterpret_cast< byte* >(subjectNameBuffer), lenSubjectName); SysTryReturnResult(NID_SEC_CERT, IsFailed(r), E_FILE_ALREADY_EXIST, "File already exists."); + SysTryReturnResult(NID_SEC_CERT, r==E_DATA_NOT_FOUND, r, "Failed to check duplicate"); //Get the last installed certificate id from db table __userCertDbStore.GetCurrentCertId(certId); @@ -2238,8 +2241,6 @@ CATCH: EVP_PKEY_free(pKey); } - { - } return r; } diff --git a/src/security/cert/FSecCert_CertDbStore.cpp b/src/security/cert/FSecCert_CertDbStore.cpp index 51c45d1..1e760da 100644 --- a/src/security/cert/FSecCert_CertDbStore.cpp +++ b/src/security/cert/FSecCert_CertDbStore.cpp @@ -562,10 +562,9 @@ _CaCertDbStore::CheckDuplicateCertificate(_CaCertType certType, byte* pSubjectNa statement.Format(_MAX_QUERY_LEN, L"SELECT * from rootcert where certType = '%d' and subjectName = '%s' and subjectNameLen = '%d'", certType, subjectNameBase64, subjectNameBase64Len); std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement)); - if (pEnum == null) - { - return E_DATA_NOT_FOUND; - } + r = GetLastResult(); + SysTryReturnResult(NID_SEC_CERT, !IsFailed(r) , r, "Failed to get query result."); + SysTryReturnResult(NID_SEC_CERT, pEnum != null , E_DATA_NOT_FOUND, "No certificate found in database."); return r; } @@ -610,7 +609,9 @@ _CaCertDbStore::CheckDuplicateCertificate(_CaCertType certType, byte* issuerName statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM rootcert WHERE certType = '%d' AND issuerName = '%s' AND issuerNameLen = '%d' AND serialNo = '%s'", certType, issuerNameBase64, base64IssuerNameLen, base64SerialNo); std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement)); - SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in databas."); + r = GetLastResult(); + SysTryReturnResult(NID_SEC_CERT, !IsFailed(r) , r, "Failed to get query result."); + SysTryReturnResult(NID_SEC_CERT, pEnum != null , E_DATA_NOT_FOUND, "No certificate found in database."); return r; } @@ -1193,7 +1194,9 @@ _UserCertDbStore::CheckDuplicateCertificate(byte* pSubjectName, int subjectNameL statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE subjectName = '%s' AND subjectNameLen = '%d'", subjectNameBase64, subjectNameBase64Len); std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement)); - SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database."); + r = GetLastResult(); + SysTryReturnResult(NID_SEC_CERT, !IsFailed(r) , r, "Failed to get query result."); + SysTryReturnResult(NID_SEC_CERT, pEnum != null , E_DATA_NOT_FOUND, "No certificate found in database."); return r; } @@ -1236,7 +1239,9 @@ _UserCertDbStore::CheckDuplicateCertificate(byte* pIssuerName, int issuerNameLen statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE issuerName = '%s' AND issuerNameLen = '%d' AND serialNo = '%s'", issuerNameBase64, base64IssuerNameLen, base64SerialNo); std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement)); - SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database."); + r = GetLastResult(); + SysTryReturnResult(NID_SEC_CERT, !IsFailed(r) , r, "Failed to get query result."); + SysTryReturnResult(NID_SEC_CERT, pEnum != null , E_DATA_NOT_FOUND, "No certificate found in database."); return r; }