#include <cert-server-debug.h>
#include <cert-server-logic.h>
+#include <cert-server-db.h>
-sqlite3 *cert_store_db = NULL;
-
-int open_db(sqlite3 **db_handle, const char *db_path) {
-
- int result = CERTSVC_FAIL;
- sqlite3 *handle;
+int initialize_db(void)
+{
+ int result = CERTSVC_SUCCESS;
- if (access(db_path, F_OK) == 0) {
- result = db_util_open(db_path, &handle, 0);
- if (result != SQLITE_OK) {
- SLOGE("connect db [%s] failed!", db_path);
- return CERTSVC_FAIL;
- }
- *db_handle = handle;
+ if (cert_store_db != NULL)
return CERTSVC_SUCCESS;
- }
- SLOGD("%s DB does not exists. Creating one!!", db_path);
- result = db_util_open(db_path, &handle, 0);
+ result = db_util_open(CERTSVC_SYSTEM_STORE_DB, &cert_store_db, 0);
if (result != SQLITE_OK) {
- SLOGE("connect to db [%s] failed!.", db_path);
+ SLOGE("connect certs-meta db failed!");
+ cert_store_db = NULL;
return CERTSVC_FAIL;
}
- *db_handle = handle;
+
return CERTSVC_SUCCESS;
}
-int evaluate_query(sqlite3 *db_handle, char *query) {
-
+int evaluate_query(sqlite3 *db_handle, char *query)
+{
int result = CERTSVC_SUCCESS;
- sqlite3_stmt* p_statement;
+ sqlite3_stmt *stmt = NULL;
if (!db_handle) {
- SLOGE("Database not initialised.");
+ SLOGE("Database not initialized.");
return CERTSVC_WRONG_ARGUMENT;
}
return CERTSVC_WRONG_ARGUMENT;
}
- result = sqlite3_prepare_v2(db_handle, query, strlen(query), &p_statement, NULL);
+ result = sqlite3_prepare_v2(db_handle, query, strlen(query), &stmt, NULL);
if (result != SQLITE_OK) {
SLOGE("Sqlite3 error [%d] : <%s> preparing <%s> query.", result, sqlite3_errmsg(db_handle), query);
return CERTSVC_FAIL;
}
- result = sqlite3_step(p_statement);
+ result = sqlite3_step(stmt);
if (result != SQLITE_DONE) {
SLOGE("Sqlite3 error [%d] : <%s> executing <%s> statement.", result, sqlite3_errmsg(db_handle), query);
return CERTSVC_FAIL;
}
- result = sqlite3_finalize(p_statement);
+ result = sqlite3_finalize(stmt);
if (result != SQLITE_OK) {
SLOGE("Sqlite3 error [%d] : <%s> finalising <%s> statement.", result, sqlite3_errmsg(db_handle), query);
return CERTSVC_FAIL;
}
- return CERTSVC_SUCCESS;
-}
-
-int initialize_db(void)
-{
- int result = CERTSVC_SUCCESS;
-
- if (cert_store_db != NULL)
- return CERTSVC_SUCCESS;
- result = open_db(&cert_store_db, CERTSVC_SYSTEM_STORE_DB);
- if (result != CERTSVC_SUCCESS)
- SLOGE("Certsvc store DB creation failed. result[%d]", result);
-
- return result;
+ return CERTSVC_SUCCESS;
}
void CertSigHandler(int signo)
exit(1);
}
-int CertSvcGetSocketFromSystemd(int* pSockfd)
+int CertSvcGetSocketFromSystemd(int *pSockfd)
{
int n = sd_listen_fds(0);
int fd;
return CERTSVC_SUCCESS;
}
}
+
return CERTSVC_FAIL;
}
-void CertSvcServerComm()
+void CertSvcServerComm(void)
{
int server_sockfd = 0;
int client_sockfd = 0;
VcoreRequestData recv_data;
VcoreResponseData send_data;
- if (!CertSvcGetSocketFromSystemd(&server_sockfd)) {
+ if (CertSvcGetSocketFromSystemd(&server_sockfd) != CERTSVC_SUCCESS) {
SLOGE("Failed to get sockfd from systemd.");
return;
}
SLOGD("cert-server Accept! client sock[%d]", client_sockfd);
- if (setsockopt (client_sockfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
+ if (setsockopt(client_sockfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
SLOGE("Error in Set SO_RCVTIMEO Socket Option");
send_data.result = CERTSVC_FAIL;
goto Error_close_exit;
}
- if (setsockopt (client_sockfd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
+ if (setsockopt(client_sockfd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
SLOGE("Error in Set SO_SNDTIMEO Socket Option");
send_data.result = CERTSVC_FAIL;
goto Error_close_exit;
case CERTSVC_EXTRACT_CERT:
{
send_data.result = getCertificateDetailFromStore(
- cert_store_db,
recv_data.storeType,
recv_data.certType,
recv_data.gname,
- send_data.dataBlock,
- &send_data.dataBlockLen);
+ send_data.dataBlock);
+ send_data.dataBlockLen = strlen(send_data.dataBlock);
result = send(client_sockfd, (char*)&send_data, sizeof(send_data), 0);
break;
}
case CERTSVC_EXTRACT_SYSTEM_CERT:
{
send_data.result = getCertificateDetailFromSystemStore(
- cert_store_db,
recv_data.gname,
- send_data.dataBlock,
- &send_data.dataBlockLen);
+ send_data.dataBlock);
+ send_data.dataBlockLen = strlen(send_data.dataBlock);
result = send(client_sockfd, (char*)&send_data, sizeof(send_data), 0);
break;
}
case CERTSVC_DELETE_CERT:
{
send_data.result = deleteCertificateFromStore(
- cert_store_db,
recv_data.storeType,
recv_data.gname);
if (send_data.result == CERTSVC_SUCCESS)
- send_data.result = update_ca_certificate_file(cert_store_db, NULL, 0);
+ send_data.result = update_ca_certificate_file(NULL);
result = send(client_sockfd, (char*)&send_data, sizeof(send_data), 0);
break;
}
case CERTSVC_GET_CERTIFICATE_STATUS:
{
send_data.result = getCertificateStatusFromStore(
- cert_store_db,
recv_data.storeType,
recv_data.gname,
&send_data.certStatus);
case CERTSVC_SET_CERTIFICATE_STATUS:
{
send_data.result = setCertificateStatusToStore(
- cert_store_db,
recv_data.storeType,
recv_data.is_root_app,
recv_data.gname,
recv_data.certStatus);
if (send_data.result == CERTSVC_SUCCESS)
- send_data.result = update_ca_certificate_file(cert_store_db, NULL, 0);
+ send_data.result = update_ca_certificate_file(NULL);
result = send(client_sockfd, (char*)&send_data, sizeof(send_data), 0);
break;
}
case CERTSVC_CHECK_ALIAS_EXISTS:
{
send_data.result = checkAliasExistsInStore(
- cert_store_db,
recv_data.storeType,
recv_data.gname,
&send_data.isAliasUnique);
case CERTSVC_INSTALL_CERTIFICATE:
{
send_data.result = installCertificateToStore(
- cert_store_db,
recv_data.storeType,
recv_data.gname,
recv_data.common_name,
recv_data.private_key_gname,
recv_data.associated_gname,
recv_data.dataBlock,
- recv_data.dataBlockLen,
recv_data.certType);
- if ((send_data.result == CERTSVC_SUCCESS) && ((recv_data.certType == PEM_CRT) || (recv_data.certType == P12_TRUSTED)))
- send_data.result = update_ca_certificate_file(cert_store_db, recv_data.dataBlock, recv_data.dataBlockLen);
+ if (send_data.result == CERTSVC_SUCCESS && (recv_data.certType == PEM_CRT || recv_data.certType == P12_TRUSTED))
+ send_data.result = update_ca_certificate_file(recv_data.dataBlock);
result = send(client_sockfd, (char*)&send_data, sizeof(send_data), 0);
break;
}
case CERTSVC_GET_ROOT_CERTIFICATE_LIST:
{
send_data.result = getCertificateListFromStore(
- cert_store_db,
recv_data.reqType,
recv_data.storeType,
recv_data.is_root_app,
result = send(client_sockfd, (char*)&send_data, sizeof(send_data), 0);
if (bufferLen > 0)
result = send(client_sockfd, certListBuffer, bufferLen, 0);
-
break;
}
case CERTSVC_GET_CERTIFICATE_ALIAS:
{
send_data.result = getCertificateAliasFromStore(
- cert_store_db,
recv_data.storeType,
recv_data.gname,
send_data.common_name);
case CERTSVC_LOAD_CERTIFICATES:
{
send_data.result = loadCertificatesFromStore(
- cert_store_db,
recv_data.storeType,
recv_data.gname,
&certBlockBuffer,
break;
}
- if (result <= 0) {
+ if (result <= 0)
SLOGE("send failed :%d, errno %d try once", result, errno);
- //result = send(client_sockfd, (char*)&send_data, sizeof(send_data), 0);
- //SLOGE("retry result :%d, errno %d", result, errno);
- }
}
Error_close_exit:
close(server_sockfd);
+
if (cert_store_db) {
sqlite3_close(cert_store_db);
cert_store_db = NULL;
}
- if (certListBuffer)
- free(certListBuffer);
-
- if (certBlockBuffer)
- free(certBlockBuffer);
+ free(certListBuffer);
+ free(certBlockBuffer);
if (client_sockfd >= 0) {
result = send(client_sockfd, (char*)&send_data, sizeof(send_data), 0);
close(client_sockfd);
- }
- else
+ } else {
SLOGE("cannot connect to client socket.");
+ }
SLOGI("CertSvcServerComm done.");
}