root ca ssl certs enable/disable feature 51/51451/2 accepted/tizen/mobile/20151112.232401 accepted/tizen/tv/20151112.232411 accepted/tizen/wearable/20151112.232426 submit/tizen/20151112.113302
authorKyungwook Tak <k.tak@samsung.com>
Thu, 12 Nov 2015 08:24:14 +0000 (17:24 +0900)
committerKyungwook Tak <k.tak@samsung.com>
Thu, 12 Nov 2015 10:30:07 +0000 (19:30 +0900)
(resource provided by ca-certificates package)
ssl ca certs hierarchy
 * orig path   : /usr/share/ca-certificates/certs
        format : openssl hash format (<subject_hash>.[0-9])
 * symlink path   : /etc/ssl/certs/* -> /usr/share/ca-certificates/certs/*
           format : same to orig format

concatenated ca bundle
 * orig path   : /var/lib/ca-certificates/ca-bundle.pem
 * symlink path : /usr/share/cert-svc/ca-certificate.crt (for backward-compatibility)

subject_hash_old format symlinks don't exist in Tizen 3.0 (it existed in lower version)
which is only needed on openssl version lower than 1.0.0 (current : 1.0.2d in Tizen 3.0)

Change-Id: I31b1f79b37b8439d534f326e9bec71e17e6a19c2
Signed-off-by: Kyungwook Tak <k.tak@samsung.com>
14 files changed:
CMakeLists.txt
cert-svc-vcore.pc.in
etc/CMakeLists.txt
etc/initialize_store_db.sh
packaging/cert-svc.manifest
packaging/cert-svc.spec
tests/pkcs12/8956b9bc.0 [deleted file]
tests/pkcs12/CMakeLists.txt
tests/pkcs12/new_test_cases.cpp
tests/plugin/CMakeLists.txt
vcore/CMakeLists.txt
vcore/server/include/cert-server-db.h
vcore/server/src/cert-server-db.c
vcore/server/src/cert-server-logic.c

index 8d2a8f4..0ca7fc9 100644 (file)
@@ -32,22 +32,25 @@ ADD_DEFINITIONS("-Werror")
 SET(TARGET_VCORE_LIB "cert-svc-vcore")
 SET(TARGET_CERT_SERVER "cert-server")
 
-ADD_DEFINITIONS("-DCERTSVC_SYSTEM_STORE_DB=\"${TZ_SYS_SHARE}/cert-svc/dbspace/certs-meta.db\"")
-ADD_DEFINITIONS("-DCERTSVC_CRT_FILE_PATH=\"${TZ_SYS_SHARE}/cert-svc/ca-certificate.crt\"")
-ADD_DEFINITIONS("-DFINGERPRINT_LIST_PATH=\"${TZ_SYS_SHARE}/ca-certificates/fingerprint/fingerprint_list.xml\"")
-ADD_DEFINITIONS("-DFINGERPRINT_LIST_SCHEMA_PATH=\"${TZ_SYS_SHARE}/ca-certificates/fingerprint/fingerprint_list.xsd\"")
-ADD_DEFINITIONS("-DROOT_CA_CERTS_DIR=\"${TZ_SYS_SHARE}/ca-certificates/\"")
-ADD_DEFINITIONS("-DROOT_CA_CERTS_TIZEN_DIR=\"${TZ_SYS_SHARE}/ca-certificates/tizen/\"")
-ADD_DEFINITIONS("-DSIGNATURE_SCHEMA_PATH=\"${TZ_SYS_RO_WRT_ENGINE}/schema.xsd\"")
-
-ADD_DEFINITIONS("-DCERTSVC_DIR=\"${TZ_SYS_SHARE}/cert-svc/certs/\"")
-ADD_DEFINITIONS("-DCERTSVC_PKCS12_STORAGE_DIR=\"${TZ_SYS_SHARE}/cert-svc/pkcs12/\"")
-ADD_DEFINITIONS("-DSYSTEM_CERT_DIR=\"${TZ_SYS_ETC}/ssl/certs/\"")
+SET(CERT_SVC_PATH ${TZ_SYS_SHARE}/cert-svc)
+SET(CA_CERTS_PATH ${TZ_SYS_SHARE}/ca-certificates)
+
+ADD_DEFINITIONS("-DSIGNATURE_SCHEMA_PATH=\"${CERT_SVC_PATH}/schema.xsd\"")
+ADD_DEFINITIONS("-DCERTSVC_SYSTEM_STORE_DB=\"${CERT_SVC_PATH}/dbspace/certs-meta.db\"")
+ADD_DEFINITIONS("-DCERTSVC_DIR=\"${CERT_SVC_PATH}/certs/\"")
+ADD_DEFINITIONS("-DCERTSVC_PKCS12_STORAGE_DIR=\"${CERT_SVC_PATH}/pkcs12/\"")
+
+ADD_DEFINITIONS("-DSYSTEM_CERT_DIR=\"${TZ_SYS_CERTS}/\"")
+ADD_DEFINITIONS("-DFINGERPRINT_LIST_PATH=\"${CA_CERTS_PATH}/fingerprint/fingerprint_list.xml\"")
+ADD_DEFINITIONS("-DFINGERPRINT_LIST_SCHEMA_PATH=\"${CA_CERTS_PATH}/fingerprint/fingerprint_list.xsd\"")
+ADD_DEFINITIONS("-DROOT_CA_CERTS_DIR=\"${CA_CERTS_PATH}/certs\"")
+ADD_DEFINITIONS("-DROOT_CA_CERTS_TIZEN_DIR=\"${CA_CERTS_PATH}/tizen/\"")
+ADD_DEFINITIONS("-DCERTSVC_CRT_FILE_PATH=\"${TZ_SYS_CONCATENATED_CERT}\"")
 
 CONFIGURE_FILE(cert-svc-vcore.pc.in cert-svc-vcore.pc @ONLY)
 INSTALL(FILES
     ${CMAKE_CURRENT_BINARY_DIR}/cert-svc-vcore.pc
-    DESTINATION ${LIBDIR}/pkgconfig
+    DESTINATION ${LIB_INSTALL_DIR}/pkgconfig
 )
 
 ADD_SUBDIRECTORY(vcore)
index c86a7e8..a55a4e7 100644 (file)
@@ -1,6 +1,4 @@
-prefix=@PREFIX@
-exec_prefix=@EXEC_PREFIX@
-libdir=@LIBDIR@
+libdir=@LIB_INSTALL_DIR@
 includedir=@INCLUDEDIR@
 
 Name: cert-svc-vcore
index f5b4d64..9c73afe 100644 (file)
@@ -2,7 +2,7 @@ SET(ETC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
 
 INSTALL(FILES
     ${ETC_DIR}/schema.xsd
-    DESTINATION ${TZ_SYS_RO_WRT_ENGINE}
+    DESTINATION ${TZ_SYS_SHARE}/cert-svc
     )
 
 MESSAGE("Add ssl table to certs-meta.db")
@@ -23,7 +23,7 @@ EXECUTE_PROCESS(
     COMMAND
         ${ETC_DIR}/initialize_store_db.sh
         ${ETC_DIR}/certs-meta.db
-        ${ETC_DIR}/ca-certificate.crt
+        ${TZ_SYS_CERTS}
     RESULT_VARIABLE ERROR_CODE
     )
 
@@ -36,8 +36,3 @@ INSTALL(FILES
     ${ETC_DIR}/certs-meta.db-journal
     DESTINATION ${TZ_SYS_SHARE}/cert-svc/dbspace
     )
-
-INSTALL(FILES
-    ${ETC_DIR}/ca-certificate.crt
-    DESTINATION ${TZ_SYS_SHARE}/cert-svc
-    )
index b726345..3d35dcc 100755 (executable)
@@ -1,47 +1,65 @@
 #!/bin/bash
-source /etc/tizen-platform.conf
 
 DB_PATH=$1
-CRT_PATH=$2
+SYSTEM_SSL_DIR=$2
 
 ROOT_CERT_SQL=root-cert.sql
-SYSTEM_SSL_DIR=$TZ_SYS_ETC/ssl/certs
 
-function initialize_store {
-       for i in `find $SYSTEM_SSL_DIR/* -name '*'`
+function get_field()
+{
+       local fname=$1
+       local field=$2
+
+       echo "`openssl x509 -in $fname -subject -noout -nameopt multiline \
+                       | grep $field \
+                       | cut -f 2 -d =`"
+}
+
+function get_common_name()
+{
+       local fname=$1
+       local common_name=
+
+       common_name=`get_field $fname commonName`
+       if [[ $common_name == "" ]]; then
+               common_name=`get_field $fname organizationUnitName`
+       fi
+       if [[ $common_name == "" ]]; then
+               common_name=`get_field $fname organizationName`
+       fi
+       if [[ $common_name == "" ]]; then
+               common_name=`get_field $fname emailAddress`
+       fi
+
+       echo "${common_name:1}" # cut first whitespace
+}
+
+function initialize_store()
+{
+       for fname in `find $SYSTEM_SSL_DIR/*`
        do
-               gname=`echo $i | cut -f 5 -d '/'`
+               gname=`echo $fname | cut -f 5 -d '/'`
                if [[ ! $gname =~ ^[0-9a-z]{8}\.[0-9]$ ]]; then
                        continue
                fi
 
-               cert=`openssl x509 -in $i -outform PEM`
-               filehash=`openssl x509 -in $i -hash -noout`
-               subjecthash=`openssl x509 -in $i -subject_hash_old -noout`
+               cert=`openssl x509 -in $fname -outform PEM`
+               subject_hash=`openssl x509 -in $fname -subject_hash -noout`
+               subject_hash_old=`openssl x509 -in $fname -subject_hash_old -noout`
+               common_name=`get_common_name $fname`
 
-               commonname=`openssl x509 -in $i -subject -noout -nameopt multiline | grep commonName | cut -f 2 -d =`
-               if [[ $commonname == "" ]]; then
-                       commonname=`openssl x509 -in $i -subject -noout -nameopt multiline | grep organizationUnitName | cut -f 2 -d =`
-               fi
-               if [[ $commonname == "" ]]; then
-                       commonname=`openssl x509 -in $i -subject -noout -nameopt multiline | grep organizationName | cut -f 2 -d =`
-               fi
-               if [[ $commonname == "" ]]; then
-                       commonname=`openssl x509 -in $i -subject -noout -nameopt multiline | grep emailAddress | cut -f 2 -d =`
-               fi
-
-               commonname=${commonname:1} # cut first whitespace
-
-               echo "INSERT INTO ssl (gname, certificate, file_hash, subject_hash, common_name, enabled, is_root_app_enabled) values (\"$gname\", \"$cert\", \"$filehash\", \"$subjecthash\", \"$commonname\", 1, 1);" >> $ROOT_CERT_SQL
-
-               openssl x509 -in $i -outform PEM >> $CRT_PATH
+               echo "INSERT INTO ssl \
+                               (gname, certificate, file_hash, subject_hash, \
+                               common_name, enabled, is_root_app_enabled) values \
+                               (\"$gname\", \"$cert\", \"$subject_hash\", \"$subject_hash_old\", \
+                               \"$common_name\", 1, 1);" >> $ROOT_CERT_SQL
        done
 }
 
 touch $ROOT_CERT_SQL
-touch $CRT_PATH
 
 initialize_store
 
 cat $ROOT_CERT_SQL | sqlite3 $DB_PATH
+
 rm $ROOT_CERT_SQL
index a76fdba..7a98c2b 100644 (file)
@@ -2,4 +2,9 @@
        <request>
                <domain name="_" />
        </request>
+       <assign>
+               <filesystem path="/usr/share/cert-svc" label="System" type="transmutable" />
+               <filesystem path="/usr/share/cert-svc/ca-certificate.crt" label="_" />
+               <filesystem path="/usr/share/cert-svc/schema.xsd" label="_" />
+       </assign>
 </manifest>
index 38f26cc..8ab12c0 100644 (file)
@@ -43,6 +43,7 @@ Summary:  Certification service (tests)
 Group:    Security/Testing
 Requires: ca-certificates-tizen
 Requires: %{name} = %{version}-%{release}
+Conflicts: %name
 
 %description test
 Certification service (tests)
@@ -50,7 +51,7 @@ Certification service (tests)
 
 %prep
 %setup -q
-cp -a %{SOURCE1001} .
+cp -a %SOURCE1001 .
 
 %build
 export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE"
@@ -67,98 +68,77 @@ export CXXFLAGS="$CXXFLAGS -DTIZEN_EMULATOR_MODE"
 export FFLAGS="$FFLAGS -DTIZEN_EMULATOR_MODE"
 %endif
 
+# concatenated cert path defined in ca-certificates package
+%define SYS_CONCATENATED_CERT /var/lib/ca-certificates/ca-bundle.pem
+%define SYS_CERTS %TZ_SYS_ETC/ssl/certs
+
 %{!?build_type:%define build_type "Release"}
-%cmake . -DPREFIX=%{_prefix} \
-        -DVERSION=%{version} \
-        -DEXEC_PREFIX=%{_exec_prefix} \
-        -DLIBDIR=%{_libdir} \
-        -DINCLUDEDIR=%{_includedir} \
+%cmake . -DVERSION=%version \
+        -DINCLUDEDIR=%_includedir \
         -DTZ_SYS_SHARE=%TZ_SYS_SHARE \
         -DTZ_SYS_BIN=%TZ_SYS_BIN \
-        -DTZ_SYS_ETC=%TZ_SYS_ETC \
-        -DTZ_SYS_RO_WRT_ENGINE=%TZ_SYS_RO_WRT_ENGINE \
+        -DTZ_SYS_CERTS=%SYS_CERTS \
+        -DTZ_SYS_CONCATENATED_CERT=%SYS_CONCATENATED_CERT \
 %if 0%{?certsvc_test_build}
         -DCERTSVC_TEST_BUILD=1 \
         -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP \
 %endif
-        -DCMAKE_BUILD_TYPE=%{build_type} \
-        -DSYSTEMD_UNIT_DIR=%{_unitdir}
+        -DCMAKE_BUILD_TYPE=%build_type \
+        -DSYSTEMD_UNIT_DIR=%_unitdir
 
-make %{?jobs:-j%jobs}
+make %{?_smp_mflags}
 
 %install
-rm -rf %{buildroot}
-mkdir -p %{buildroot}%{TZ_SYS_SHARE}/license
-cp LICENSE %{buildroot}%{TZ_SYS_SHARE}/license/%{name}
-
-mkdir -p %{buildroot}%{TZ_SYS_SHARE}/cert-svc/pkcs12
-mkdir -p %{buildroot}%{TZ_SYS_SHARE}/cert-svc/dbspace
-
 %make_install
-mkdir -p %{buildroot}%{_unitdir}/multi-user.target.wants
-mkdir -p %{buildroot}%{_unitdir}/sockets.target.wants
-ln -s ../cert-server.service %{buildroot}%{_unitdir}/multi-user.target.wants/
-ln -s ../cert-server.socket %{buildroot}%{_unitdir}/sockets.target.wants/
+%install_service multi-user.target.wants cert-server.service
+%install_service sockets.target.wants cert-server.socket
 
-%clean
-rm -rf %{buildroot}
+mkdir -p %buildroot%TZ_SYS_SHARE/cert-svc/pkcs12
+mkdir -p %buildroot%TZ_SYS_SHARE/cert-svc/dbspace
+ln -s %SYS_CONCATENATED_CERT %buildroot%TZ_SYS_SHARE/cert-svc/ca-certificate.crt
 
 %preun
-if [ $1 == 0 ]; then
+# erase
+if [ $1 = 0 ]; then
     systemctl stop cert-server.service
 fi
 
 %post
 /sbin/ldconfig
 systemctl daemon-reload
-if [ $1 == 1 ]; then
+# install
+if [ $1 = 1 ]; then
+    systemctl start cert-server.service
+fi
+# upgrade / reinstall
+if [ $1 = 2 ]; then
     systemctl restart cert-server.service
 fi
 
-%postun
-/sbin/ldconfig
+%postun -p /sbin/ldconfig
 
 %files
-%defattr(644,system,system,755)
-%manifest %{name}.manifest
-# Read only files install as root
-%attr(755,root,root) %{TZ_SYS_BIN}/cert-server
-%attr(644,root,root) %{_unitdir}/cert-server.service
-%attr(644,root,root) %{_unitdir}/cert-server.socket
-%attr(777,root,root) %{_unitdir}/multi-user.target.wants/cert-server.service
-%attr(777,root,root) %{_unitdir}/sockets.target.wants/cert-server.socket
-%attr(755,root,root) %{_libdir}/libcert-svc-vcore.so.*
-%attr(644,root,root) %{TZ_SYS_SHARE}/license/%{name}
-%attr(644,root,root) %{TZ_SYS_RO_WRT_ENGINE}/schema.xsd
-
-# Resource files install as system
-%{TZ_SYS_SHARE}/cert-svc/pkcs12
-%{TZ_SYS_SHARE}/cert-svc/dbspace/certs-meta.db*
-%{TZ_SYS_SHARE}/cert-svc/ca-certificate.crt
+%manifest %name.manifest
+%license LICENSE
+%_unitdir/cert-server.service
+%_unitdir/cert-server.socket
+%_unitdir/multi-user.target.wants/cert-server.service
+%_unitdir/sockets.target.wants/cert-server.socket
+%_libdir/libcert-svc-vcore.so.*
+%TZ_SYS_BIN/cert-server
+%attr(-, system, system) %TZ_SYS_SHARE/cert-svc
 
 %files devel
-%defattr(-,root,root,-)
-%{_includedir}/*
-%{_libdir}/pkgconfig/*
-%{_libdir}/libcert-svc-vcore.so
-
+%_includedir/*
+%_libdir/pkgconfig/*
+%_libdir/libcert-svc-vcore.so
 
 %if 0%{?certsvc_test_build}
-%post test
-ln -sf %{TZ_SYS_SHARE}/ca-certificates/tizen/root_cacert0.pem %{TZ_SYS_ETC}/ssl/certs/
-ln -sf %{TZ_SYS_ETC}/ssl/certs/root_cacert0.pem %{TZ_SYS_ETC}/ssl/certs/ba70bb69.0
-
-%postun test
-rm %{TZ_SYS_ETC}/ssl/certs/root_cacert0.pem
-rm %{TZ_SYS_ETC}/ssl/certs/ba70bb69.0
-
 %files test
-%defattr(644,system,system,755)
-%attr(755,root,root) %{TZ_SYS_BIN}/cert-svc-test*
-%{TZ_SYS_RO_APP}/widget/tests/*
-%{TZ_SYS_ETC}/ssl/certs/8956b9bc.0
-%{TZ_SYS_SHARE}/ca-certificates/tizen/*
-%{TZ_SYS_SHARE}/cert-svc/cert-type/*
-%{TZ_SYS_SHARE}/cert-svc/tests/*
-%{_libdir}/libcert-svc-validator-plugin.so
+%TZ_SYS_BIN/cert-svc-test*
+%TZ_SYS_RO_APP/widget/tests
+%TZ_SYS_SHARE/cert-svc/cert-type
+%TZ_SYS_SHARE/cert-svc/tests
+%TZ_SYS_SHARE/ca-certificates/tizen/root_cacert0.pem
+%_libdir/libcert-svc-validator-plugin.so
 %endif
diff --git a/tests/pkcs12/8956b9bc.0 b/tests/pkcs12/8956b9bc.0
deleted file mode 100644 (file)
index 39105b5..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 0 (0x0)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=KR, ST=Seoul, O=Samsung, OU=Tizen Test, CN=Test Root CA for PKCS12 Test/emailAddress=tt@gmail.com
-        Validity
-            Not Before: May  7 08:25:27 2015 GMT
-            Not After : May  4 08:25:27 2025 GMT
-        Subject: C=KR, ST=Seoul, O=Samsung, OU=Tizen Test, CN=Test Root CA for PKCS12 Test/emailAddress=tt@gmail.com
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (1024 bit)
-                Modulus:
-                    00:be:32:b4:73:08:76:e2:4a:1e:39:ac:43:31:20:
-                    a6:5b:a2:a2:7c:95:c7:9a:1c:60:10:47:0e:d3:f0:
-                    50:52:6d:a2:a6:b2:b1:22:25:59:a3:7d:26:ab:3b:
-                    b6:e5:4d:98:9e:47:f3:4f:b3:31:65:a1:16:72:71:
-                    f9:56:64:7b:79:57:9e:f5:5f:d2:af:fa:14:fb:2d:
-                    3d:1f:40:e8:f7:1e:19:8c:d8:d5:9c:90:c7:f8:00:
-                    90:d2:a0:47:93:7b:2f:3a:38:7e:e3:f8:59:73:b7:
-                    a4:06:f4:41:4a:0b:68:1e:2a:37:d5:de:91:55:6e:
-                    d7:5c:7d:08:ee:be:1e:ba:1b
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                2C:2D:C8:DC:D0:F1:12:04:33:70:4A:4B:4F:DA:92:E0:4D:02:B2:F8
-            X509v3 Authority Key Identifier: 
-                keyid:2C:2D:C8:DC:D0:F1:12:04:33:70:4A:4B:4F:DA:92:E0:4D:02:B2:F8
-
-            X509v3 Basic Constraints: 
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         91:7f:c8:cb:43:a6:e8:ee:47:9b:4b:31:c3:6f:c0:e5:3e:32:
-         88:c8:4e:5d:96:85:20:8f:86:47:96:b7:c0:53:8d:4b:26:4b:
-         01:2f:5a:4e:87:18:60:2c:25:d6:eb:d7:a9:74:44:bc:3f:60:
-         7a:3b:14:7a:05:ca:f3:99:cb:d5:73:29:52:c5:b2:11:c0:ad:
-         e9:7a:c2:fd:c2:30:ac:f6:76:54:13:51:d6:d7:76:1d:56:58:
-         f0:c9:64:e1:cb:84:b8:af:65:f2:4a:dd:19:b5:05:03:ce:12:
-         8a:9e:25:59:00:8b:d1:4f:25:87:66:bc:54:cc:d5:c8:43:5e:
-         46:7c
------BEGIN CERTIFICATE-----
-MIIC2DCCAkGgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCS1Ix
-DjAMBgNVBAgMBVNlb3VsMRAwDgYDVQQKDAdTYW1zdW5nMRMwEQYDVQQLDApUaXpl
-biBUZXN0MSUwIwYDVQQDDBxUZXN0IFJvb3QgQ0EgZm9yIFBLQ1MxMiBUZXN0MRsw
-GQYJKoZIhvcNAQkBFgx0dEBnbWFpbC5jb20wHhcNMTUwNTA3MDgyNTI3WhcNMjUw
-NTA0MDgyNTI3WjCBiDELMAkGA1UEBhMCS1IxDjAMBgNVBAgMBVNlb3VsMRAwDgYD
-VQQKDAdTYW1zdW5nMRMwEQYDVQQLDApUaXplbiBUZXN0MSUwIwYDVQQDDBxUZXN0
-IFJvb3QgQ0EgZm9yIFBLQ1MxMiBUZXN0MRswGQYJKoZIhvcNAQkBFgx0dEBnbWFp
-bC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL4ytHMIduJKHjmsQzEg
-pluionyVx5ocYBBHDtPwUFJtoqaysSIlWaN9Jqs7tuVNmJ5H80+zMWWhFnJx+VZk
-e3lXnvVf0q/6FPstPR9A6PceGYzY1ZyQx/gAkNKgR5N7Lzo4fuP4WXO3pAb0QUoL
-aB4qN9XekVVu11x9CO6+HrobAgMBAAGjUDBOMB0GA1UdDgQWBBQsLcjc0PESBDNw
-SktP2pLgTQKy+DAfBgNVHSMEGDAWgBQsLcjc0PESBDNwSktP2pLgTQKy+DAMBgNV
-HRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GBAJF/yMtDpujuR5tLMcNvwOU+MojI
-Tl2WhSCPhkeWt8BTjUsmSwEvWk6HGGAsJdbr16l0RLw/YHo7FHoFyvOZy9VzKVLF
-shHArel6wv3CMKz2dlQTUdbXdh1WWPDJZOHLhLivZfJK3Rm1BQPOEoqeJVkAi9FP
-JYdmvFTM1chDXkZ8
------END CERTIFICATE-----
index 3415e3b..8b54a3f 100644 (file)
@@ -62,8 +62,3 @@ INSTALL(FILES
     ${PROJECT_SOURCE_DIR}/tests/pkcs12/wifiuser.p12
     DESTINATION ${TZ_SYS_SHARE}/cert-svc/tests/
 )
-
-INSTALL(FILES
-    ${PROJECT_SOURCE_DIR}/tests/pkcs12/8956b9bc.0
-    DESTINATION ${TZ_SYS_ETC}/ssl/certs/
-)
index 818847b..28a346b 100644 (file)
@@ -86,7 +86,7 @@ RUNNER_TEST(CERTSVC_PKCS12_1002_certsvc_set_cert_to_disabled_and_get_status_for_
 
        CREATE_INSTANCE
 
-       CertSvcString Alias = wrapper_certsvc_string_new("Certum_Root_CA.pem");
+       CertSvcString Alias = wrapper_certsvc_string_new("24ad0b63.0");
 
        result = certsvc_pkcs12_get_certificate_status_from_store(instance, SYSTEM_STORE, Alias, &status);
        RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Get certificate status from system store failed.");
index 4c0bf1b..7dae2fe 100644 (file)
@@ -35,4 +35,4 @@ TARGET_LINK_LIBRARIES(${TARGET_PLUGIN_SAMPLE}
     ${TARGET_VCORE_LIB}
     )
 
-INSTALL(TARGETS ${TARGET_PLUGIN_SAMPLE} DESTINATION ${LIBDIR})
+INSTALL(TARGETS ${TARGET_PLUGIN_SAMPLE} DESTINATION ${LIB_INSTALL_DIR})
index 8e54031..8e71a82 100644 (file)
@@ -121,7 +121,7 @@ INSTALL(TARGETS ${TARGET_CERT_SERVER} DESTINATION ${TZ_SYS_BIN})
 
 ########################################################
 INSTALL(TARGETS ${TARGET_VCORE_LIB}
-    DESTINATION ${LIBDIR}
+    DESTINATION ${LIB_INSTALL_DIR}
     )
 
 INSTALL(FILES
index 9cbd41e..29e8531 100644 (file)
 #define CERT_SERVER_DB_H_
 
 #include <db-util.h>
+
+#include <cert-svc/cerror.h>
+
 extern sqlite3 *cert_store_db;
 
+int execute_insert_update_query(const char *query);
+int execute_select_query(const char *query, sqlite3_stmt **stmt);
+
 #endif // CERT_SERVER_DB_H_
index 750fdb3..f0fd863 100644 (file)
  * @brief    cert server db utils.
  */
 
+#include <cert-server-debug.h>
+
 #include <cert-server-db.h>
 
 sqlite3 *cert_store_db = NULL;
+
+int execute_insert_update_query(const char *query)
+{
+       if (!cert_store_db) {
+               SLOGE("Database not initialised.");
+               return CERTSVC_WRONG_ARGUMENT;
+       }
+
+       if (!query) {
+               SLOGE("Query is NULL.");
+               return CERTSVC_WRONG_ARGUMENT;
+       }
+
+       /* Begin transaction */
+       int result = sqlite3_exec(cert_store_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
+       if (result != SQLITE_OK) {
+               SLOGE("Failed to begin transaction.");
+               return CERTSVC_FAIL;
+       }
+
+       /* Executing command */
+       result = sqlite3_exec(cert_store_db, query, NULL, NULL, NULL);
+       if (result != SQLITE_OK) {
+               SLOGE("Failed to execute query (%s).", query);
+               return CERTSVC_FAIL;
+       }
+
+       /* Committing the transaction */
+       result = sqlite3_exec(cert_store_db, "COMMIT", NULL, NULL, NULL);
+       if (result) {
+               SLOGE("Failed to commit transaction. Roll back now.");
+               result = sqlite3_exec(cert_store_db, "ROLLBACK", NULL, NULL, NULL);
+               if (result != SQLITE_OK)
+                       SLOGE("Failed to commit transaction. Roll back now.");
+
+               return CERTSVC_FAIL;
+       }
+
+       SLOGD("Transaction Commit and End.");
+
+       return CERTSVC_SUCCESS;
+}
+
+int execute_select_query(const char *query, sqlite3_stmt **stmt)
+{
+       if (!cert_store_db || !query)
+               return CERTSVC_WRONG_ARGUMENT;
+
+       sqlite3_stmt *stmts = NULL;
+       if (sqlite3_prepare_v2(cert_store_db, query, strlen(query), &stmts, NULL) != SQLITE_OK) {
+               SLOGE("sqlite3_prepare_v2 failed [%s].", query);
+               return CERTSVC_FAIL;
+       }
+
+       *stmt = stmts;
+       return CERTSVC_SUCCESS;
+}
index 15c846b..6c705f8 100644 (file)
@@ -95,16 +95,12 @@ static bool hasStore(CertStoreType types, CertStoreType type)
 
 char *add_shared_owner_prefix(const char *name)
 {
-       size_t alias_len = strlen(name) + strlen(ckmc_owner_id_system) + strlen(ckmc_owner_id_separator);
-       char *ckm_alias = (char *)malloc(alias_len + 1);
-       if (!ckm_alias) {
+       char *ckm_alias = NULL;
+       int result = asprintf(&ckm_alias, "%s%s%s", ckmc_owner_id_system, ckmc_owner_id_separator, name);
+       if (result < 0 || ckm_alias == NULL) {
                SLOGE("Failed to allocate memory");
                return NULL;
        }
-       memset(ckm_alias, 0, alias_len + 1);
-       strcat(ckm_alias, ckmc_owner_id_system);
-       strcat(ckm_alias, ckmc_owner_id_separator);
-       strcat(ckm_alias, name);
 
        return ckm_alias;
 }
@@ -143,132 +139,59 @@ char *get_complete_path(const char *str1, const char *str2)
        return result;
 }
 
-/* TODO: root ssl file system refactor */
-int add_file_to_dir(const char *dir, const char *gname, const char *cert)
+int add_file_to_system_cert_dir(const char *gname)
 {
-       char *systemFile = get_complete_path(dir, gname);
-       if (!systemFile) {
-               SLOGE("Failed to get system file path.");
-               return CERTSVC_FAIL;
-       }
+       int ret = CERTSVC_SUCCESS;
 
-       char realFile[FILENAME_MAX] = {0};
-       if (!realpath(systemFile, realFile)) {
-               SLOGE("Failed to get realpath. systemFile[%s]", systemFile);
-               return CERTSVC_FAIL;
-       }
-
-       FILE *stream = fopen(realFile, "ab");
-       if (!stream) {
-               SLOGE("Fail to open file [%s]", realFile);
-               return CERTSVC_FAIL;
-       }
+       /* find certificate which filehash name is gname in root ca certs path. */
+       char *target = get_complete_path(ROOT_CA_CERTS_DIR, gname);
+       char *link = get_complete_path(SYSTEM_CERT_DIR, gname);
 
-       size_t cert_len = strlen(cert);
-       if (fwrite(cert, sizeof(char), cert_len, stream) != cert_len) {
-               SLOGE("Fail to write file in system store.");
-               fclose(stream);
-               return CERTSVC_FAIL;
+       if (target == NULL || link == NULL) {
+               SLOGE("Failed to get complete path.");
+               ret = CERTSVC_BAD_ALLOC;
+               goto out;
        }
 
-       fclose(stream);
-       return CERTSVC_SUCCESS;
-}
-
-int add_file_to_system_cert_dir(const char *gname, const char *cert)
-{
-       return add_file_to_dir(SYSTEM_CERT_DIR, gname, cert);
-}
-
-/* TODO: root ssl file system refactor */
-int del_file_from_dir(const char *dir, const char *gname)
-{
-       const char *systemFile = get_complete_path(dir, gname);
-       if (!systemFile)   {
-               SLOGE("Failed to construct source file path.");
-               return CERTSVC_FAIL;
+       if (symlink(target, link) != 0) {
+               SLOGE("Failed to make symlink from[%s] to[%s]", target, link);
+               ret = CERTSVC_FAIL;
+               goto out;
        }
 
-       char realFile[FILENAME_MAX] = {0};
-       if (!realpath(systemFile, realFile)) {
-               SLOGE("Failed to get realpath. systemFile[%s]", systemFile);
-               return CERTSVC_FAIL;
-       }
+out:
 
-       /* instead of removing the file, the file is trimmed to zero size */
-       FILE *stream = fopen(realFile, "wb");
-       if (!stream) {
-               SLOGE("Failed to open the file for writing, [%s].", realFile);
-               return CERTSVC_FAIL;
-       }
+       free(target);
+       free(link);
 
-       fclose(stream);
-       return CERTSVC_SUCCESS;
+       return ret;
 }
 
 int del_file_from_system_cert_dir(const char *gname)
 {
-       return del_file_from_dir(SYSTEM_CERT_DIR, gname);
-}
-
-int execute_insert_update_query(char *query)
-{
-       if (!cert_store_db) {
-               SLOGE("Database not initialised.");
-               return CERTSVC_WRONG_ARGUMENT;
-       }
-
-       if (!query) {
-               SLOGE("Query is NULL.");
-               return CERTSVC_WRONG_ARGUMENT;
-       }
-
-       /* Begin transaction */
-       int result = sqlite3_exec(cert_store_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL);
-       if (result != SQLITE_OK) {
-               SLOGE("Failed to begin transaction.");
-               return CERTSVC_FAIL;
-       }
+       int ret = CERTSVC_SUCCESS;
+       char *link = NULL;
 
-       /* Executing command */
-       result = sqlite3_exec(cert_store_db, query, NULL, NULL, NULL);
-       if (result != SQLITE_OK) {
-               SLOGE("Failed to execute query (%s).", query);
+       link = get_complete_path(SYSTEM_CERT_DIR, gname);
+       if (!link)   {
+               SLOGE("Failed to construct source file path.");
                return CERTSVC_FAIL;
        }
 
-       /* Committing the transaction */
-       result = sqlite3_exec(cert_store_db, "COMMIT", NULL, NULL, NULL);
-       if (result) {
-               SLOGE("Failed to commit transaction. Roll back now.");
-               result = sqlite3_exec(cert_store_db, "ROLLBACK", NULL, NULL, NULL);
-               if (result != SQLITE_OK)
-                       SLOGE("Failed to commit transaction. Roll back now.");
-
-               return CERTSVC_FAIL;
+       if (unlink(link) != 0) {
+               SLOGE("unlink %s failed. errno : %d", link, errno);
+               ret = CERTSVC_FAIL;
+               goto out;
        }
 
-       SLOGD("Transaction Commit and End.");
-
-       return CERTSVC_SUCCESS;
-}
-
-int execute_select_query(char *query, sqlite3_stmt **stmt)
-{
-       if (!cert_store_db || !query)
-               return CERTSVC_WRONG_ARGUMENT;
+out:
 
-       sqlite3_stmt *stmts = NULL;
-       if (sqlite3_prepare_v2(cert_store_db, query, strlen(query), &stmts, NULL) != SQLITE_OK) {
-               SLOGE("sqlite3_prepare_v2 failed [%s].", query);
-               return CERTSVC_FAIL;
-       }
+       free(link);
 
-       *stmt = stmts;
-       return CERTSVC_SUCCESS;
+       return ret;
 }
 
-int write_to_file(const char *path, const char *mode, const char *cert)
+int write_to_ca_cert_crt_file(const char *mode, const char *cert)
 {
        int result = CERTSVC_SUCCESS;
        FILE *fp = NULL;
@@ -278,8 +201,8 @@ int write_to_file(const char *path, const char *mode, const char *cert)
                return CERTSVC_WRONG_ARGUMENT;
        }
 
-       if (!(fp = fopen(path, mode))) {
-               SLOGE("Failed to open the file for writing, [%s].", path);
+       if (!(fp = fopen(CERTSVC_CRT_FILE_PATH, mode))) {
+               SLOGE("Failed to open the file for writing, [%s].", CERTSVC_CRT_FILE_PATH);
                return CERTSVC_FAIL;
        }
 
@@ -295,7 +218,7 @@ int write_to_file(const char *path, const char *mode, const char *cert)
        }
 
        /* adding empty line at the end */
-       fwrite("\n",sizeof(char), 1, fp);
+       fwrite("\n", sizeof(char), 1, fp);
 
 error:
        if (fp)
@@ -304,11 +227,6 @@ error:
        return result;
 }
 
-int write_to_ca_cert_crt_file(const char *mode, const char *cert)
-{
-       return write_to_file(CERTSVC_CRT_FILE_PATH, mode, cert);
-}
-
 int saveCertificateToStore(const char *gname, const char *cert)
 {
        if (!gname || !cert) {
@@ -346,14 +264,14 @@ int saveCertificateToStore(const char *gname, const char *cert)
        return CERTSVC_SUCCESS;
 }
 
-int saveCertificateToSystemStore(const char *gname, const char *cert)
+int saveCertificateToSystemStore(const char *gname)
 {
-       if (!gname || !cert) {
+       if (!gname) {
                SLOGE("Invalid input parameter passed.");
                return CERTSVC_WRONG_ARGUMENT;
        }
 
-       int result = add_file_to_system_cert_dir(gname, cert);
+       int result = add_file_to_system_cert_dir(gname);
        if (result != CERTSVC_SUCCESS)
                SLOGE("Failed to store the certificate in store.");
 
@@ -674,7 +592,7 @@ int enable_disable_cert_status(
                        }
 
                        if (storeType == SYSTEM_STORE)
-                               result = saveCertificateToSystemStore(gname, cert);
+                               result = saveCertificateToSystemStore(gname);
                        else
                                result = saveCertificateToStore(gname, cert);