-%global csr_fw_server_build 0
-%global csr_fw_common_Build 0
-%global csr_fw_test_build 0
+# services timeoout time on idle for on-demand activation.
+# give it '-1' if don't want to timeout on idle.
+%define service_idle_timeout_time 60
+%define popup_service_idle_timeout_time 10
+
+# Configure engine file system.
+#
+# ro_dir_name / rw_dir_name
+# - dir name is directory name inside of CSR directory.
+# - 'dbspace' cannot be used as a dir_name.
+%define engine_ro_dir_name engine
+%define engine_rw_dir_name engine
+
+# base of detailed url of content screening engine.
+# If it's defined, detailed_url for client will be generated by
+# concatenating base url + malware name.
+# Else it's not defined, detailed_url getter in engine API will be used.
+%define with_detailed_base_url 0
+%define detailed_base_url %nil
+
+%define with_sample_engine 1
Summary: A general purpose content screening and reputation solution
Name: csr-framework
-Version: 2.0.0
+Version: 2.3.7
Release: 0
Source: %{name}-%{version}.tar.gz
-License: BSD-2.0
+License: Apache-2.0 and BSL-1.0
Group: Security/Service
URL: http://tizen.org
BuildRequires: cmake
+BuildRequires: gettext-tools
BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(libsystemd)
+BuildRequires: pkgconfig(vconf)
+BuildRequires: pkgconfig(sqlite3)
+BuildRequires: pkgconfig(pkgmgr)
+BuildRequires: pkgconfig(pkgmgr-info)
+BuildRequires: pkgconfig(libsmack)
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(efl-extension)
+BuildRequires: pkgconfig(icu-i18n)
+BuildRequires: pkgconfig(libtzplatform-config)
+BuildRequires: pkgconfig(cynara-client)
+Requires: lib%{name}-common = %{version}-%{release}
+%{?systemd_requires}
%description
General purpose content screening and reputation solution. Can scan
file contents and checking url to prevent malicious items.
+%global service_name csr
+%global bin_dir %{_bindir}
+%global sbin_dir /sbin
+%global ro_data_dir %{_datadir}
+%global rw_data_dir /opt/share
+%global ro_db_dir %{ro_data_dir}/%{service_name}/dbspace
+%global rw_db_dir %{rw_data_dir}/%{service_name}/dbspace
+%global ro_res_dir %{ro_data_dir}/%{service_name}/res
+%global engine_rw_working_dir %{rw_data_dir}/%{service_name}/%{engine_rw_dir_name}
+%global engine_dir %{ro_data_dir}/%{service_name}/%{engine_ro_dir_name}
+%global test_dir %{rw_data_dir}/%{service_name}-test
+%global test_res_dir %{ro_data_dir}/%{service_name}-test
+
+%global service_user security_fw
+%global service_group security_fw
+%global test_user owner
+%global popup_service_env_file_path /run/tizen-system-env
+%global smack_domain_name System
+%global popup_unitdir %{_unitdir_user}
+
+%package -n lib%{name}-common
+Summary: CSR framework (common library)
+License: Apache-2.0
+Group: Security/Libraries
+BuildRequires: pkgconfig(cynara-creds-socket)
+Requires: %{sbin_dir}/ldconfig
+
+%description -n lib%{name}-common
+Content Screening and Reputation framework package (common library)
+
%package -n lib%{name}-client
-Summary: Client library package for %{name}
-License: BSD-2.0
+Summary: CSR framework (client library)
+License: Apache-2.0
Group: Security/Libraries
+BuildRequires: pkgconfig(capi-base-common)
Requires: %{name} = %{version}-%{release}
+Requires: %{sbin_dir}/ldconfig
%description -n lib%{name}-client
-csr-framework client library package.
+Content Screening and Reputation framework package (client library)
%package devel
-Summary: Development files for %{name}
-Group: Security/Development
-Requires: %{name} = %{version}
+Summary: CSR framework (development files)
+LICENSE: Apache-2.0
+Group: Security/Development
+BuildRequires: pkgconfig(capi-base-common)
+Requires: %{name} = %{version}-%{release}
+Requires: lib%{name}-client
%description devel
-csr-framework developemnt files including headers and pkgconfig file.
+Content Screening and Reputation framework development files like headers and pkgconfigs
+
+%package engine-devel
+Summary: CSR framework (engine development files)
+LICENSE: Apache-2.0
+Group: Security/Development
+
+%description engine-devel
+Content Screening and Reputation framework engine development files like headers and
+pkgconfigs
-%if 0%{?csr_fw_test_build}
%package test
-Summary: test program for %{name}
-Group: Security/Testing
-Requires: %{name} = %{version}
+Summary: CSR framework (test program)
+License: Apache-2.0 and BSL-1.0
+Group: Security/Testing
+BuildRequires: boost-devel
+BuildRequires: pkgconfig(pkgmgr-info)
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(storage)
+Requires: boost-test
+Requires: %{name} = %{version}
%description test
-Comaptilibty test program
+Content Screening and Reputation framework (test program)
+
+%if 0%{?gcov:1}
+%package gcov
+Summary: CSR framework (gcov)
+Group: Security/Testing
+BuildRequires: lcov
+
+%description gcov
+Content Screening and Reputation framework (gcov)
%endif
%prep
%setup -q
-# assign client name as secfw to support backward compatibility
-%global client_name secfw
-%global bin_dir %{_bindir}
-
%build
+
+# define build architecture
+%ifarch %{ix86}
+%define test_target emulator
+%else
+%define test_target target
+%endif
+
+%if 0%{?gcov:1}
+export CFLAGS+=" -fprofile-arcs -ftest-coverage"
+export CXXFLAGS+=" -fprofile-arcs -ftest-coverage"
+export FFLAGS+=" -fprofile-arcs -ftest-coverage"
+export LDFLAGS+=" -lgcov"
+%endif
+
%cmake . \
-DCMAKE_BUILD_TYPE=%{?build_type:%build_type}%{!?build_type:RELEASE} \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-%if 0%{?csr_fw_server_build}
- -DCSR_FW_COMMON_BUILD=1 \
-%endif
-%if 0%{?csr_fw_server_build}
- -DCSR_FW_SERVER_BUILD=1 \
-%endif
-%if 0%{?csr_fw_test_build}
- -DCSR_FW_TEST_BUILD=1 \
-%endif
- -DSERVICE_NAME=%{name} \
+ -DSERVICE_USER=%{service_user} \
+ -DSERVICE_GROUP=%{service_group} \
+ -DSMACK_DOMAIN_NAME=%{smack_domain_name} \
+ -DPOPUP_SERVICE_ENV_FILE_PATH:PATH=%{popup_service_env_file_path} \
+ -DSERVICE_NAME=%{service_name} \
-DVERSION=%{version} \
-DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \
-DBIN_DIR:PATH=%{bin_dir} \
- -DCLIENT_NAME=%{client_name}
+ -DSYSTEMD_UNIT_DIR=%{_unitdir} \
+ -DPOPUP_SYSTEMD_UNIT_DIR=%{popup_unitdir} \
+ -DRO_DBSPACE:PATH=%{ro_db_dir} \
+ -DRW_DBSPACE:PATH=%{rw_db_dir} \
+ -DRO_RES_DIR:PATH=%{ro_res_dir} \
+ -DRO_DATA_DIR:PATH=%{ro_data_dir} \
+ -DSERVICE_IDLE_TIMEOUT_TIME=%{service_idle_timeout_time} \
+ -DPOPUP_SERVICE_IDLE_TIMEOUT_TIME=%{popup_service_idle_timeout_time} \
+ -DENGINE_RW_WORKING_DIR:PATH=%{engine_rw_working_dir} \
+ -DENGINE_DIR:PATH=%{engine_dir} \
+ -DTEST_TARGET=%{test_target} \
+ -DTEST_DIR:PATH=%{test_dir} \
+ -DTEST_RES_DIR:PATH=%{test_res_dir} \
+%if 0%{?with_detailed_base_url}
+ -DDETAILED_URL_BASE:STRING=%{detailed_base_url} \
+%endif
+%if 0%{?with_sample_engine}
+ -DWITH_SAMPLE_ENGINE:BOOL=ON \
+%else
+ -DWITH_SAMPLE_ENGINE:BOOL=OFF \
+%endif
+ -DTZ_SYS_STORAGE=%TZ_SYS_STORAGE \
+ -DTZ_SYS_RW_APP=%TZ_SYS_RW_APP \
+ -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP \
+ -DBUILD_GCOV=%{?gcov:1}%{!?gcov:0}
make %{?jobs:-j%jobs}
+%if 0%{?gcov:1}
+mkdir -p gcov-obj
+find . -name '*.gcno' -exec cp '{}' gcov-obj ';'
+%endif
+
%install
%make_install
+%install_service sockets.target.wants %{service_name}-cs.socket
+%install_service sockets.target.wants %{service_name}-wp.socket
+%install_service sockets.target.wants %{service_name}-admin.socket
+%install_service ../user/sockets.target.wants %{service_name}-popup.socket
-%post -p /sbin/ldconfig
-%postun -p /sbin/ldconfig
+mkdir -p %{buildroot}%{rw_db_dir}
+mkdir -p %{buildroot}%{ro_db_dir}
+cp data/scripts/*.sql %{buildroot}%{ro_db_dir}
-%files
-%defattr(-,root,root,-)
-%license LICENSE
-%if 0%{?csr_fw_server_build}
-# TODO: list up server files here
+mkdir -p %{buildroot}%{engine_dir}
+mkdir -p %{buildroot}%{engine_rw_working_dir}
+
+%find_lang %{service_name}
+
+%if 0%{?gcov:1}
+mkdir -p %{buildroot}%{_datadir}/gcov/obj
+install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj/%{name}
%endif
-%if 0%{?csr_fw_common_build}
-# TODO: list up common library files here
+
+%post
+rm -f %{rw_db_dir}/.%{service_name}.db*
+
+systemctl daemon-reload
+if [ $1 = 1 ]; then
+ systemctl start %{service_name}-cs.socket
+ systemctl start %{service_name}-wp.socket
+ systemctl start %{service_name}-admin.socket
+ systemctl start %{service_name}.service
+
+ systemctl --user start %{service_name}-popup.socket
+ systemctl --user start %{service_name}-popup.service
+elif [ $1 = 2 ]; then
+ systemctl stop %{service_name}-cs.socket
+ systemctl stop %{service_name}-wp.socket
+ systemctl stop %{service_name}-admin.socket
+ systemctl restart %{service_name}.service
+
+ systemctl --user stop %{service_name}-popup.socket
+ systemctl --user restart %{service_name}-popup.service
+fi
+
+%preun
+if [ $1 = 0 ]; then
+ systemctl stop %{service_name}-cs.socket
+ systemctl stop %{service_name}-wp.socket
+ systemctl stop %{service_name}-admin.socket
+ systemctl stop %{service_name}.service
+
+ systemctl --user stop %{service_name}-popup.socket
+ systemctl --user stop %{service_name}-popup.service
+fi
+
+%postun
+if [ $1 = 0 ]; then
+ systemctl daemon-reload
+fi
+
+%post -n lib%{name}-common -p %{sbin_dir}/ldconfig
+%post -n lib%{name}-client -p %{sbin_dir}/ldconfig
+%postun -n lib%{name}-common -p %{sbin_dir}/ldconfig
+%postun -n lib%{name}-client -p %{sbin_dir}/ldconfig
+
+%post -n %{name}-test
+chsmack -a "_" %{test_dir}/test_dir/dir1
+%if 0%{?with_sample_engine}
+systemctl stop %{service_name}-cs.socket
+systemctl stop %{service_name}-wp.socket
+systemctl stop %{service_name}-admin.socket
+systemctl restart %{service_name}.service
+
+touch %{engine_rw_working_dir}/csret_cs_virus_signatures
+touch %{engine_rw_working_dir}/csret_wp_risky_urls
+%endif
+
+%if 0%{?gcov:1}
+chmod 777 -R /tmp/home/abuild/rpmbuild/BUILD/csr-framework-*
+su - owner -c %{bin_dir}/%{service_name}-test
+%{bin_dir}/%{service_name}-internal-test
+%{bin_dir}/%{service_name}-threadpool-test
%endif
+%files -f %{service_name}.lang
+%defattr(-,root,root,-)
+%manifest %{service_name}.manifest
+%license LICENSE
+%license LICENSE.BSL-1.0
+%{bin_dir}/%{service_name}-server
+%{bin_dir}/%{service_name}-popup
+%{_unitdir}/%{service_name}.service
+%{_unitdir}/sockets.target.wants/%{service_name}-cs.socket
+%{_unitdir}/sockets.target.wants/%{service_name}-wp.socket
+%{_unitdir}/sockets.target.wants/%{service_name}-admin.socket
+%{_unitdir}/%{service_name}-cs.socket
+%{_unitdir}/%{service_name}-wp.socket
+%{_unitdir}/%{service_name}-admin.socket
+%{popup_unitdir}/%{service_name}-popup.socket
+%{popup_unitdir}/sockets.target.wants/%{service_name}-popup.socket
+%{popup_unitdir}/%{service_name}-popup.service
+%{ro_res_dir}/default-icon.png
+
+%dir %{ro_data_dir}/%{service_name}
+%dir %attr(-, %{service_user}, %{service_group}) %{rw_data_dir}/%{service_name}
+%dir %{ro_db_dir}
+%dir %attr(-, %{service_user}, %{service_group}) %{rw_db_dir}
+%attr(444, %{service_user}, %{service_group}) %{ro_db_dir}/*.sql
+
+%dir %{engine_dir}
+%dir %attr(775, %{service_user}, %{service_group}) %{engine_rw_working_dir}
+
+%files -n lib%{name}-common
+%defattr(-,root,root,-)
+%manifest %{service_name}-common.manifest
+%license LICENSE
+%{_libdir}/lib%{service_name}-common.so.*
+
%files -n lib%{name}-client
%defattr(-,root,root,-)
+%manifest %{service_name}-client.manifest
%license LICENSE
-%{_libdir}/lib%{client_name}.so.*
+%{_libdir}/lib%{service_name}-client.so.*
%files devel
-%doc README
-%doc doc/
-%{_includedir}/TCSErrorCodes.h
-%{_includedir}/TCSImpl.h
-%{_includedir}/TWPImpl.h
-%{_libdir}/pkgconfig/%{name}.pc
-%{_libdir}/lib%{client_name}.so
-
-%if 0%{?csr_fw_test_build}
+%defattr(-,root,root,-)
+%{_includedir}/csr/csr-content-screening.h
+%{_includedir}/csr/csr-content-screening-types.h
+%{_includedir}/csr/csr-web-protection.h
+%{_includedir}/csr/csr-web-protection-types.h
+%{_includedir}/csr/csr-error.h
+%{_includedir}/csr/csr-engine-manager.h
+%{_libdir}/pkgconfig/%{service_name}.pc
+%{_libdir}/lib%{service_name}-client.so
+%{_libdir}/lib%{service_name}-common.so
+
+%files engine-devel
+%defattr(-,root,root,-)
+%{_includedir}/csre/csre-content-screening-engine-info.h
+%{_includedir}/csre/csre-content-screening.h
+%{_includedir}/csre/csre-content-screening-types.h
+%{_includedir}/csre/csre-error.h
+%{_includedir}/csre/csre-web-protection-engine-info.h
+%{_includedir}/csre/csre-web-protection.h
+%{_includedir}/csre/csre-web-protection-types.h
+%{_libdir}/pkgconfig/%{service_name}-engine.pc
+
%files test
%defattr(-,root,root,-)
-%{bin_dir}/csr-test
+%manifest %{service_name}-test.manifest
+%license LICENSE
+%license LICENSE.BSL-1.0
+%{_libdir}/lib%{service_name}-test-common.so
+%attr(-, %{test_user}, %{service_group}) %{bin_dir}/%{service_name}-test
+%attr(-, %{test_user}, %{service_group}) %{bin_dir}/%{service_name}-internal-test
+%attr(-, %{test_user}, %{service_group}) %{bin_dir}/%{service_name}-popup-test
+%attr(-, %{test_user}, %{service_group}) %{bin_dir}/%{service_name}-threadpool-test
+
+# test resources
+%dir %attr(-, %{test_user}, %{service_group}) %{test_dir}
+%attr(-, %{test_user}, %{service_group}) %{test_dir}/*
+
+%dir %attr(-, %{test_user}, %{service_group}) %{test_res_dir}
+%attr(-, %{test_user}, %{service_group}) %{test_res_dir}/*
+
+# sample engine related files
+%if 0%{?with_sample_engine}
+%{engine_dir}/lib%{service_name}-cs-engine.so
+%{engine_dir}/lib%{service_name}-wp-engine.so
+%attr(-, %{service_user}, %{service_group}) %{engine_rw_working_dir}/*
+%endif
+
+%if 0%{?gcov:1}
+%files gcov
+%{_datadir}/gcov/obj/*
%endif