fixed SE-44271 issue
authorKyungwooNoh <kw1004.noh@samsung.com>
Tue, 2 Jul 2013 08:12:08 +0000 (17:12 +0900)
committerKyungwooNoh <kw1004.noh@samsung.com>
Tue, 2 Jul 2013 08:12:08 +0000 (17:12 +0900)
Change-Id: I2ced4d34341dead058c0ba7e1fbadc34cbc6d34e
Signed-off-by: KyungwooNoh <kw1004.noh@samsung.com>
src/security/cert/FSecCert_CertDbManager.cpp
src/security/cert/FSecCert_CertDbStore.cpp

index 2f9886a..99d384d 100755 (executable)
@@ -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;
 }
 
index 51c45d1..1e760da 100644 (file)
@@ -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;
 }