From bb4ea8215a7170ad3492d71a6e3b198f29e3a0d3 Mon Sep 17 00:00:00 2001 From: Mateusz Moscicki Date: Wed, 20 Nov 2019 12:03:43 +0100 Subject: [PATCH 01/16] Change system_fw user to crash_worker Change-Id: I79938533fc4475dfd4d9d95e5037fe29928ad0c7 --- TODO | 2 +- packaging/crash-worker.spec | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/TODO b/TODO index 61aa716..7c41e96 100644 --- a/TODO +++ b/TODO @@ -1 +1 @@ -* In the future "/usr/bin/pkgcmd --global" as system_fw user will stop working, so it needs to be changed to get installed applications for the global user and for the actual user. +* In the future "/usr/bin/pkgcmd --global" as crash_worker user will stop working, so it needs to be changed to get installed applications for the global user and for the actual user. diff --git a/packaging/crash-worker.spec b/packaging/crash-worker.spec index 587f6f2..3b345d1 100644 --- a/packaging/crash-worker.spec +++ b/packaging/crash-worker.spec @@ -156,14 +156,14 @@ mkdir -p %{buildroot}%{crash_temp} %files %license LICENSE LICENSE.BSD %manifest crash-worker.manifest -%defattr(-,system_fw,system_fw,-) +%defattr(-,crash_worker,crash_worker,-) %dir %{crash_root_path} %dir %{crash_path} %dir %{crash_temp} %{_sysconfdir}/crash-manager.conf %attr(-,root,root) %{_prefix}/lib/sysctl.d/70-crash-manager.conf -%attr(0750,system_fw,system_fw) %{_bindir}/crash-manager -%attr(0750,system_fw,system_fw) %{_bindir}/dump_systemstate +%attr(0750,crash_worker,crash_worker) %{_bindir}/crash-manager +%attr(0750,crash_worker,crash_worker) %{_bindir}/dump_systemstate %{_sysconfdir}/dump_systemstate.conf.d/files/files.conf.example %{_sysconfdir}/dump_systemstate.conf.d/programs/programs.conf.example %{_libexecdir}/crash-stack @@ -172,7 +172,7 @@ mkdir -p %{buildroot}%{crash_temp} %{_libdir}/libcrash-manager.so.* %if %{with crashservice} -%attr(0750,system_fw,system_fw) %{_bindir}/crash-service +%attr(0750,crash_worker,crash_worker) %{_bindir}/crash-service %attr(-,root,root) %{_unitdir}/crash-service.service %attr(-,root,root) %{_sysconfdir}/dbus-1/system.d/crash-service.conf %attr(-,root,root) %{_datadir}/dbus-1/system-services/org.tizen.system.crash.livedump.service -- 2.7.4 From dec9985b809d284190e1d2e888613c6707157d7a Mon Sep 17 00:00:00 2001 From: Mateusz Moscicki Date: Thu, 21 Nov 2019 12:15:47 +0100 Subject: [PATCH 02/16] Release 6.0.2 This release brings: - Run crash-service and crash-worker as crash_worker user - Fix the name of libcrash-service requirement in crash-worker_system-tests Change-Id: Ib1e94342c475b20cde77bd10fbd21fd8a9ddfcb5 --- packaging/crash-worker.spec | 2 +- packaging/crash-worker_system-tests.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/crash-worker.spec b/packaging/crash-worker.spec index 3b345d1..728951b 100644 --- a/packaging/crash-worker.spec +++ b/packaging/crash-worker.spec @@ -13,7 +13,7 @@ Name: crash-worker Summary: Coredump handler and report generator for Tizen -Version: 6.0.1 +Version: 6.0.2 Release: 1 Group: Framework/system License: Apache-2.0 and BSD diff --git a/packaging/crash-worker_system-tests.spec b/packaging/crash-worker_system-tests.spec index 27edc9a..ab3e1b6 100644 --- a/packaging/crash-worker_system-tests.spec +++ b/packaging/crash-worker_system-tests.spec @@ -8,7 +8,7 @@ Name: crash-worker_system-tests Summary: Package with binaries and scripts for crash-worker system tests -Version: 6.0.1 +Version: 6.0.2 Release: 1 Group: Framework/system License: Apache-2.0 and BSD -- 2.7.4 From 81509b3fbf4e4bc68760b0c07f83e18e5b89c8ab Mon Sep 17 00:00:00 2001 From: Mateusz Moscicki Date: Fri, 22 Nov 2019 14:04:35 +0100 Subject: [PATCH 03/16] Revert "Allow new special priv_livecoredump group members to use livedump API" This reverts commit ab88e92b1eb4bae8d94523141afb2d59ffc5e6e6. Change-Id: Ida972aa30aaa001ace379a5051ef654589119f76 --- src/crash-service/crash-service.conf | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/crash-service/crash-service.conf b/src/crash-service/crash-service.conf index 43534d9..bb9d903 100644 --- a/src/crash-service/crash-service.conf +++ b/src/crash-service/crash-service.conf @@ -7,11 +7,6 @@ send_interface="org.tizen.system.crash.livedump" send_member="livedump_pid"/> - - - Date: Fri, 22 Nov 2019 14:06:13 +0100 Subject: [PATCH 04/16] Release 6.0.3 This release brings: - Revert "Allow new special priv_livecoredump group members to use livedump API" commit Change-Id: I10a2458fd1504f475b39e05a91bcd1edfb5a382f --- packaging/crash-worker.spec | 2 +- packaging/crash-worker_system-tests.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/crash-worker.spec b/packaging/crash-worker.spec index 728951b..148e3f4 100644 --- a/packaging/crash-worker.spec +++ b/packaging/crash-worker.spec @@ -13,7 +13,7 @@ Name: crash-worker Summary: Coredump handler and report generator for Tizen -Version: 6.0.2 +Version: 6.0.3 Release: 1 Group: Framework/system License: Apache-2.0 and BSD diff --git a/packaging/crash-worker_system-tests.spec b/packaging/crash-worker_system-tests.spec index ab3e1b6..2cf76be 100644 --- a/packaging/crash-worker_system-tests.spec +++ b/packaging/crash-worker_system-tests.spec @@ -8,7 +8,7 @@ Name: crash-worker_system-tests Summary: Package with binaries and scripts for crash-worker system tests -Version: 6.0.2 +Version: 6.0.3 Release: 1 Group: Framework/system License: Apache-2.0 and BSD -- 2.7.4 From 4c455c0ee6c878e2744ab805713085ace2b11124 Mon Sep 17 00:00:00 2001 From: Mateusz Moscicki Date: Mon, 14 Oct 2019 13:04:56 +0200 Subject: [PATCH 05/16] dump_systemstate: Add flag to dump_systemstate to determine whether to run buxton2ctl or not The next commit introduces a change that causes the crash-service not to have to be run as root, so there is need for another way to determine if dmesg or buxton2ctl should be run. Change-Id: I56df8f4dd1b9d8a2f6f072c886e8fa26dda0a317 --- src/crash-manager/crash-manager.c | 2 +- src/dump_systemstate/dump_systemstate.c | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/crash-manager/crash-manager.c b/src/crash-manager/crash-manager.c index 8bf424a..bd402a1 100644 --- a/src/crash-manager/crash-manager.c +++ b/src/crash-manager/crash-manager.c @@ -444,7 +444,7 @@ static void launch_crash_popup(struct crash_info *cinfo) static bool dump_system_state(const struct crash_info *cinfo, pid_t *pid) { - char *av[] = {DUMP_SYSTEMSTATE_BIN_PATH, "-d", "-k", "-j", "-p", "-e", "-f", cinfo->log_path, NULL}; + char *av[] = {DUMP_SYSTEMSTATE_BIN_PATH, "-d", "-k", "-j", "-p", "-e", "-f", cinfo->log_path, "-b", NULL}; spawn_param_s param = { .fn = spawn_setstdout, .u.int_val = STDERR_FILENO }; return spawn(av, NULL, ¶m, pid, NULL); } diff --git a/src/dump_systemstate/dump_systemstate.c b/src/dump_systemstate/dump_systemstate.c index f971350..9a0c3ef 100644 --- a/src/dump_systemstate/dump_systemstate.c +++ b/src/dump_systemstate/dump_systemstate.c @@ -59,7 +59,8 @@ static struct dump_item { static void usage() { - fprintf(stderr, "usage: dump_systemstate [-k] [-d] [-j] [-p] [-e] [-f file]\n" + fprintf(stderr, "usage: dump_systemstate [-b] [-k] [-d] [-j] [-p] [-e] [-f file]\n" + " -b: dump Buxton data\n" " -f: write to file (instead of stdout)\n" " -k: dump kernel messages (only root)\n" " -d: dump dlog messages\n" @@ -89,9 +90,10 @@ static int get_disk_used_percent(const char *path) int main(int argc, char *argv[]) { - int c, ret, i, is_root, dpercent, exit_code = 0; + int c, ret, i, dpercent, exit_code = 0; const char *arg_file = NULL; int out_fd = -1; + bool arg_buxton = false; bool arg_dlog = false; bool arg_dmesg = false; bool arg_extras = false; @@ -102,8 +104,11 @@ int main(int argc, char *argv[]) struct tm gm_tm; struct tm loc_tm; - while ((c = getopt(argc, argv, "hf:kdjep")) != -1) { + while ((c = getopt(argc, argv, "hf:kdbjep")) != -1) { switch (c) { + case 'b': + arg_buxton = true; + break; case 'd': arg_dlog = true; break; @@ -134,7 +139,6 @@ int main(int argc, char *argv[]) cur_time = time(NULL); gmtime_r(&cur_time, &gm_tm); localtime_r(&cur_time, &loc_tm); - is_root = !(geteuid()); /* open output file */ if (arg_file == NULL) { @@ -204,7 +208,7 @@ int main(int argc, char *argv[]) char *memps_args[] = {"/bin/memps", "-v", NULL}; spawn_wait_checked(memps_args, NULL); - if (is_root) { + if (arg_buxton) { fprintf_fd(out_fd, "\n==== System configuration (/usr/bin/buxton2ctl dump memory, system)\n"); char *get_mem_args[] = {"/bin/buxton2ctl", "dump", "memory", NULL}; spawn_wait_checked(get_mem_args, NULL); @@ -219,7 +223,7 @@ int main(int argc, char *argv[]) spawn_wait_checked(pkgcmd_args, NULL); } - if (arg_dmesg && is_root) { + if (arg_dmesg) { fprintf_fd(out_fd, "\n==== Kernel messages (TZ=UTC /bin/dmesg -T)\n"); char *dmesg_args[] = {"/bin/dmesg", "-T", NULL}; char *dmesg_env[] = {"TZ=UTC", NULL}; -- 2.7.4 From 3f820f88f067be0e1ddc63e13313361e0f95958e Mon Sep 17 00:00:00 2001 From: Mateusz Moscicki Date: Tue, 5 Nov 2019 14:15:51 +0100 Subject: [PATCH 06/16] dump_systemstate: Dump additional files and applications output Change-Id: I2c1348a25f7da30c5a177489eb4e57aed5f730ea --- packaging/crash-worker.spec | 2 ++ src/dump_systemstate/CMakeLists.txt | 6 ++++++ src/dump_systemstate/dump_systemstate.c | 8 ++++++++ src/dump_systemstate/files.conf.example | 6 ++++++ src/dump_systemstate/files/10-crash-worker.conf | 7 +++++++ src/dump_systemstate/programs.conf.example | 2 ++ src/dump_systemstate/programs/10-crash-worker.conf | 4 ++++ 7 files changed, 35 insertions(+) create mode 100644 src/dump_systemstate/files/10-crash-worker.conf create mode 100644 src/dump_systemstate/programs/10-crash-worker.conf diff --git a/packaging/crash-worker.spec b/packaging/crash-worker.spec index 148e3f4..4a5e9ac 100644 --- a/packaging/crash-worker.spec +++ b/packaging/crash-worker.spec @@ -165,7 +165,9 @@ mkdir -p %{buildroot}%{crash_temp} %attr(0750,crash_worker,crash_worker) %{_bindir}/crash-manager %attr(0750,crash_worker,crash_worker) %{_bindir}/dump_systemstate %{_sysconfdir}/dump_systemstate.conf.d/files/files.conf.example +%{_sysconfdir}/dump_systemstate.conf.d/files/10-crash-worker.conf %{_sysconfdir}/dump_systemstate.conf.d/programs/programs.conf.example +%{_sysconfdir}/dump_systemstate.conf.d/programs/10-crash-worker.conf %{_libexecdir}/crash-stack %{_libexecdir}/crash-popup-launch %{_libexecdir}/crash-notify-send diff --git a/src/dump_systemstate/CMakeLists.txt b/src/dump_systemstate/CMakeLists.txt index 7c3fa21..d659aa4 100755 --- a/src/dump_systemstate/CMakeLists.txt +++ b/src/dump_systemstate/CMakeLists.txt @@ -34,6 +34,12 @@ INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${PROJECT_NAME}/files.conf.example DESTINATION ${DUMP_SYSTEMSTATE_CONFIG_DIR_PATH}/files PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${PROJECT_NAME}/files/10-crash-worker.conf + DESTINATION ${DUMP_SYSTEMSTATE_CONFIG_DIR_PATH}/files + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${PROJECT_NAME}/programs.conf.example DESTINATION ${DUMP_SYSTEMSTATE_CONFIG_DIR_PATH}/programs PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${PROJECT_NAME}/programs/10-crash-worker.conf + DESTINATION ${DUMP_SYSTEMSTATE_CONFIG_DIR_PATH}/programs + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) diff --git a/src/dump_systemstate/dump_systemstate.c b/src/dump_systemstate/dump_systemstate.c index 9a0c3ef..46f11f3 100644 --- a/src/dump_systemstate/dump_systemstate.c +++ b/src/dump_systemstate/dump_systemstate.c @@ -191,6 +191,14 @@ int main(int argc, char *argv[]) char *du_args[] = {"/bin/du", "-ah", "/opt", "--exclude=/opt/usr", NULL}; spawn_wait_checked(du_args, NULL); } + + dpercent = get_disk_used_percent("/tmp"); + if (80 < dpercent) { + fprintf_fd(out_fd, "\n==== tmp usage detail - %d%% (/bin/du -h /tmp)\n", dpercent); + char *du_args[] = {"/bin/du", "-h", "/tmp", NULL}; + spawn_wait_checked(du_args, NULL); + } + fprintf_fd(out_fd, "\n==== System timezone (ls -al /opt/etc/localtime)\n"); char *ls_args[] = {"/bin/ls", "-al", "/opt/etc/localtime", NULL}; spawn_wait_checked(ls_args, NULL); diff --git a/src/dump_systemstate/files.conf.example b/src/dump_systemstate/files.conf.example index 92d5f22..e8c73c2 100644 --- a/src/dump_systemstate/files.conf.example +++ b/src/dump_systemstate/files.conf.example @@ -1,3 +1,9 @@ +# Please consider prefixing config names with numbers (NN-) if you need order +# to be preserved. +# +# Crash-worker reserves number 00-19 for its purpose. Please add files +# with number > 20. + [UNIQUE_ID_KEY] title=header line that gets printed (path gets appended too) path=/path/to/the/file diff --git a/src/dump_systemstate/files/10-crash-worker.conf b/src/dump_systemstate/files/10-crash-worker.conf new file mode 100644 index 0000000..6c723e6 --- /dev/null +++ b/src/dump_systemstate/files/10-crash-worker.conf @@ -0,0 +1,7 @@ +[VMSTAT] +title=Virtual Memory statistics +path=/proc/vmstat + +[KERNEL_LOCKS] +title=Kernel lock +path=/proc/locks diff --git a/src/dump_systemstate/programs.conf.example b/src/dump_systemstate/programs.conf.example index 8e26083..a1782bf 100644 --- a/src/dump_systemstate/programs.conf.example +++ b/src/dump_systemstate/programs.conf.example @@ -1,3 +1,5 @@ +# See files.conf.example for note about file naming and ordering. + [UNIQUE_ID_KEY] title=header line describing the program (will be printed alongside env, path and args) path=/path/to/the/program/executable diff --git a/src/dump_systemstate/programs/10-crash-worker.conf b/src/dump_systemstate/programs/10-crash-worker.conf new file mode 100644 index 0000000..67c5f58 --- /dev/null +++ b/src/dump_systemstate/programs/10-crash-worker.conf @@ -0,0 +1,4 @@ +[IPC] +title=System IPC facilities +path=/usr/bin/ipcs +args=-a -- 2.7.4 From ef61cdc5ba8a460361ef16455edcb365826e3cf5 Mon Sep 17 00:00:00 2001 From: Karol Lewandowski Date: Wed, 20 Nov 2019 16:57:08 +0100 Subject: [PATCH 07/16] dump_systemstate: Ensure extra-files and extra-programs are included by default Needed as regular dump_systemstate functionality has been implemented via .conf files. Change-Id: I32d1c4cb954f6556c5782ff2e56f0f1c9d06acd4 --- src/dump_systemstate/dump_systemstate.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/dump_systemstate/dump_systemstate.c b/src/dump_systemstate/dump_systemstate.c index 46f11f3..c4e56fe 100644 --- a/src/dump_systemstate/dump_systemstate.c +++ b/src/dump_systemstate/dump_systemstate.c @@ -59,16 +59,17 @@ static struct dump_item { static void usage() { - fprintf(stderr, "usage: dump_systemstate [-b] [-k] [-d] [-j] [-p] [-e] [-f file]\n" + fprintf(stderr, "usage: dump_systemstate [-b] [-k] [-d] [-j] [-p] [-e] [-E] [-f file]\n" " -b: dump Buxton data\n" " -f: write to file (instead of stdout)\n" " -k: dump kernel messages (only root)\n" " -d: dump dlog messages\n" " -j: dump journal log messages\n" " -p: dump list of installed packages\n" - " -e: dump extras defined in the config\n" + " -e: dump extras defined in the config (default)\n" " at " DUMP_SYSTEMSTATE_CONFIG_DIR_PROGRAMS_PATH "\n" " and " DUMP_SYSTEMSTATE_CONFIG_DIR_FILES_PATH "\n" + " -E: without extras defined in the config\n" ); } @@ -96,15 +97,19 @@ int main(int argc, char *argv[]) bool arg_buxton = false; bool arg_dlog = false; bool arg_dmesg = false; - bool arg_extras = false; + bool arg_extras = true; bool arg_journal = false; bool arg_pkgs = false; char timestr[80]; time_t cur_time; struct tm gm_tm; struct tm loc_tm; + const struct option long_options[] = { + { "no-extra", no_argument, NULL, 'E' }, + { "help", no_argument, NULL, 'h' }, + }; - while ((c = getopt(argc, argv, "hf:kdbjep")) != -1) { + while ((c = getopt_long(argc, argv, "hf:kdbjeEp", long_options, NULL)) != -1) { switch (c) { case 'b': arg_buxton = true; @@ -115,9 +120,12 @@ int main(int argc, char *argv[]) case 'k': arg_dmesg = true; break; - case 'e': + case 'e': // This flag is here for backward compatibility arg_extras = true; break; + case 'E': + arg_extras = false; + break; case 'j': arg_journal = true; break; -- 2.7.4 From 9862e8b37ead558e9e9449686601685b96324ec1 Mon Sep 17 00:00:00 2001 From: Mateusz Moscicki Date: Tue, 26 Nov 2019 10:02:31 +0100 Subject: [PATCH 08/16] Add stability_monitor user to the crash-service dbus policy Change-Id: If47b06d92e09a566a195763012bb2cd19f31eb6e --- src/crash-service/crash-service.conf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/crash-service/crash-service.conf b/src/crash-service/crash-service.conf index bb9d903..1bdcfb0 100644 --- a/src/crash-service/crash-service.conf +++ b/src/crash-service/crash-service.conf @@ -13,6 +13,12 @@ send_interface="org.tizen.system.crash.livedump" send_member="livedump_pid"/> + + + + -- 2.7.4 From 61e8826f606892b215238f3ae9545f5851612e70 Mon Sep 17 00:00:00 2001 From: Mateusz Moscicki Date: Tue, 26 Nov 2019 10:03:02 +0100 Subject: [PATCH 09/16] Release 6.0.4 This release brings: - Add stability_monitor user to the crash-service dbus policy Change-Id: Ief93724cbf23771163186a35c1b69806bd32027f --- packaging/crash-worker.spec | 2 +- packaging/crash-worker_system-tests.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/crash-worker.spec b/packaging/crash-worker.spec index 4a5e9ac..35853f0 100644 --- a/packaging/crash-worker.spec +++ b/packaging/crash-worker.spec @@ -13,7 +13,7 @@ Name: crash-worker Summary: Coredump handler and report generator for Tizen -Version: 6.0.3 +Version: 6.0.4 Release: 1 Group: Framework/system License: Apache-2.0 and BSD diff --git a/packaging/crash-worker_system-tests.spec b/packaging/crash-worker_system-tests.spec index 2cf76be..e1dc4a0 100644 --- a/packaging/crash-worker_system-tests.spec +++ b/packaging/crash-worker_system-tests.spec @@ -8,7 +8,7 @@ Name: crash-worker_system-tests Summary: Package with binaries and scripts for crash-worker system tests -Version: 6.0.3 +Version: 6.0.4 Release: 1 Group: Framework/system License: Apache-2.0 and BSD -- 2.7.4 From af3e822c23ea149eb565b32c6c781ac99a705062 Mon Sep 17 00:00:00 2001 From: Adrian Szyndela Date: Wed, 27 Nov 2019 11:16:36 +0100 Subject: [PATCH 10/16] license: add MIT license Some part of src/crash-stack/crash-stack-x86.c seems to be copied from libunwind. The part has MIT license. This adds MIT license text and an entry in the spec file. Change-Id: I8796d9ad2e61cd0671470eaaae184c2d00e6615f --- LICENSE.MIT | 9 +++++++++ packaging/crash-worker.spec | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 LICENSE.MIT diff --git a/LICENSE.MIT b/LICENSE.MIT new file mode 100644 index 0000000..5b16ef4 --- /dev/null +++ b/LICENSE.MIT @@ -0,0 +1,9 @@ +The MIT License + +Copyright (c) 2019 Samsung Electronics + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packaging/crash-worker.spec b/packaging/crash-worker.spec index 35853f0..6087233 100644 --- a/packaging/crash-worker.spec +++ b/packaging/crash-worker.spec @@ -154,7 +154,7 @@ mkdir -p %{buildroot}%{crash_temp} /usr/bin/chsmack -a "System" -t %{crash_temp} %files -%license LICENSE LICENSE.BSD +%license LICENSE LICENSE.BSD LICENSE.MIT %manifest crash-worker.manifest %defattr(-,crash_worker,crash_worker,-) %dir %{crash_root_path} -- 2.7.4 From 5b8d40f36c640d1f525a3c266578ecdcb835cf8a Mon Sep 17 00:00:00 2001 From: Adrian Szyndela Date: Thu, 28 Nov 2019 08:53:56 +0100 Subject: [PATCH 11/16] spec: add MIT to License field This adds MIT License to licenses specified in spec's License field. Change-Id: I40635546c35d11c777767740dea7bac2993bedf3 --- packaging/crash-worker.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/crash-worker.spec b/packaging/crash-worker.spec index 6087233..08bcafb 100644 --- a/packaging/crash-worker.spec +++ b/packaging/crash-worker.spec @@ -16,7 +16,7 @@ Summary: Coredump handler and report generator for Tizen Version: 6.0.4 Release: 1 Group: Framework/system -License: Apache-2.0 and BSD +License: Apache-2.0 and BSD-2-Clause and MIT Source0: %{name}-%{version}.tar.gz Source1001: crash-worker.manifest BuildRequires: pkgconfig(dlog) -- 2.7.4 From 0d6a0e9136d7f1aff1050f1aeca88fe3d2e6b843 Mon Sep 17 00:00:00 2001 From: Karol Lewandowski Date: Fri, 13 Dec 2019 11:46:13 +0100 Subject: [PATCH 12/16] Fix file permissions Change-Id: I078c745cc56e1cf108997f2e76897dbe4cb194da --- LICENSE | 0 NOTICE | 0 src/dump_systemstate/CMakeLists.txt | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 LICENSE mode change 100755 => 100644 NOTICE mode change 100755 => 100644 src/dump_systemstate/CMakeLists.txt diff --git a/LICENSE b/LICENSE old mode 100755 new mode 100644 diff --git a/NOTICE b/NOTICE old mode 100755 new mode 100644 diff --git a/src/dump_systemstate/CMakeLists.txt b/src/dump_systemstate/CMakeLists.txt old mode 100755 new mode 100644 -- 2.7.4 From 928ff71c8ed1b7c7be6ff9f8a53bd12d0ae5e069 Mon Sep 17 00:00:00 2001 From: Karol Lewandowski Date: Tue, 17 Dec 2019 14:56:06 +0100 Subject: [PATCH 13/16] crash-service: Stability monitor does not need to own crash-worker's dbus name Change-Id: Ida73ce27ac6ea040dcffb81f3a61e4096dc81940 --- src/crash-service/crash-service.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/src/crash-service/crash-service.conf b/src/crash-service/crash-service.conf index 1bdcfb0..02bd574 100644 --- a/src/crash-service/crash-service.conf +++ b/src/crash-service/crash-service.conf @@ -14,7 +14,6 @@ send_member="livedump_pid"/> - -- 2.7.4 From 83045734d9c70a6b7d13ff504dccd3cacafffdbf Mon Sep 17 00:00:00 2001 From: Karol Lewandowski Date: Fri, 13 Dec 2019 13:11:08 +0100 Subject: [PATCH 14/16] config: Separate config loading from processing Change-Id: Ief38894e03904f9947ee72773f07044280f62b41 --- src/shared/config.c | 123 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 98 insertions(+), 25 deletions(-) diff --git a/src/shared/config.c b/src/shared/config.c index 3154752..1e728c4 100644 --- a/src/shared/config.c +++ b/src/shared/config.c @@ -49,9 +49,55 @@ enum ReportType report_type_from_str(const char *report_type_str) return REP_TYPE_INVALID; } -bool config_init(config_t *c, const char *const path) +static bool config_load_from_dict(config_t *c, dictionary *ini) { assert(c); + + char *str = iniparser_getstring(ini, CRASH_SECTION ":CrashRootPath", NULL); + if (str) { + char *crash_root_path = strdup(str); + if (!crash_root_path) { + _E("config: Unable to set CrashRootPath - aborting"); + return false; + } + + free(c->crash_root_path); + c->crash_root_path = crash_root_path; + } + + /* strdup() can technically fail, but we don't mind. It is better to + * create a report without the extra script than to abort completely. */ + str = iniparser_getstring(ini, CRASH_SECTION ":ExtraScript", NULL); + if (str) { + char *extra_script = strdup(str); + if (extra_script) { + free(c->extra_script); + c->extra_script = extra_script; + } + } + + str = iniparser_getstring(ini, CRASH_SECTION ":ReportType", NULL); + if (str) { + int type = report_type_from_str(str); + if (report_type_to_str(type)) + c->report_type = type; + } + +#define UPDATE(where, type, key) where = iniparser_get##type(ini, CRASH_SECTION ":" key, where) + + UPDATE(c->system_max_use, int, "SystemMaxUse"); + UPDATE(c->max_retention_sec, int, "MaxRetentionSec"); + UPDATE(c->max_crash_dump, int, "MaxCrashDump"); + UPDATE(c->dump_core, boolean, "DumpCore"); + UPDATE(c->allow_zip, boolean, "AllowZip"); + +#undef UPDATE + + return true; +} + +static bool config_load_from_path(config_t *c, const char *const path) +{ assert(path); dictionary *ini = iniparser_load(path); @@ -60,37 +106,64 @@ bool config_init(config_t *c, const char *const path) return false; } - bool ret = false; + bool ret = config_load_from_dict(c, ini); + iniparser_freedict(ini); -#define GET(type, key, defval) iniparser_get##type(ini, CRASH_SECTION ":" key, defval) + return ret; +} - c->crash_root_path = strdup(GET(string, "CrashRootPath", CRASH_ROOT_PATH)); - if (!c->crash_root_path) - goto out; +static bool config_apply_defaults(config_t *c) +{ + assert(c); - /* strdup() can technically fail, but we don't mind. It is better to - * create a report without the extra script than to abort completely. */ - char *extrascript = GET(string, "ExtraScript", NULL); - c->extra_script = extrascript ? strdup(extrascript) : NULL; + memset(c, 0, sizeof(*c)); - char *reptype = GET(string, "ReportType", (char *)report_type_strmap[REP_TYPE_FULL]); - c->report_type = report_type_from_str(reptype); - if (!report_type_to_str(c->report_type)) - goto out; + c->crash_root_path = strdup(CRASH_ROOT_PATH); + c->report_type = REP_TYPE_FULL; + c->system_max_use = SYSTEM_MAX_USE; + c->system_keep_free = SYSTEM_KEEP_FREE; + c->max_retention_sec = MAX_RETENTION_SEC; + c->max_crash_dump = MAX_CRASH_DUMP; + c->dump_core = DUMP_CORE; + c->allow_zip = ALLOW_ZIP; - c->system_max_use = GET(int, "SystemMaxUse", SYSTEM_MAX_USE); - c->system_keep_free = GET(int, "SystemKeepFree", SYSTEM_KEEP_FREE); - c->max_retention_sec = GET(int, "MaxRetentionSec", MAX_RETENTION_SEC); - c->max_crash_dump = GET(int, "MaxCrashDump", MAX_CRASH_DUMP); - c->dump_core = GET(boolean, "DumpCore", DUMP_CORE); - c->allow_zip = GET(boolean, "AllowZip", ALLOW_ZIP); + return c->crash_root_path != NULL; +} -#undef GET +static void config_dump(config_t *c) +{ + assert(c); - ret = true; -out: - iniparser_freedict(ini); - return ret; + _D("config: crash_root_path = %s\n" + "config: extra_script = %s\n" + "config: report_type = %s\n" + "config: system_max_use = %d\n" + "config: system_keep_free = %d\n" + "config: max_retention_sec = %d\n" + "config: max_crash_dump = %d\n" + "config: dump_core = %d\n" + "config: allow_zip = %d\n", + c->crash_root_path, + c->extra_script, + report_type_to_str(c->report_type), + c->system_max_use, + c->system_keep_free, + c->max_retention_sec, + c->max_crash_dump, + c->dump_core, + c->allow_zip); +} + +bool config_init(config_t *c, const char *const path) +{ + if (!config_apply_defaults(c) || !config_load_from_path(c, path)) { + _E("config: Unable to initialize configuration"); + return false; + } + + config_dump(c); + + return true; } void config_free(config_t *c) -- 2.7.4 From cdca0baf4ce0cda8a866db7e25d544636e4e23ec Mon Sep 17 00:00:00 2001 From: Karol Lewandowski Date: Wed, 18 Dec 2019 10:41:09 +0100 Subject: [PATCH 15/16] config: Search for configuration also under crash-manager.conf.d directory Change-Id: I9c5680eafb467a0514feec5225cb794609ba1823 --- packaging/crash-worker.spec | 1 + src/crash-manager/CMakeLists.txt | 5 ++ src/crash-manager/crash-manager.conf.d.example | 3 ++ src/shared/config.c | 63 ++++++++++++++++++++++ .../crash_root_path/crash_root_path.sh.template | 17 ++++-- 5 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 src/crash-manager/crash-manager.conf.d.example diff --git a/packaging/crash-worker.spec b/packaging/crash-worker.spec index 08bcafb..1557f20 100644 --- a/packaging/crash-worker.spec +++ b/packaging/crash-worker.spec @@ -161,6 +161,7 @@ mkdir -p %{buildroot}%{crash_temp} %dir %{crash_path} %dir %{crash_temp} %{_sysconfdir}/crash-manager.conf +%{_sysconfdir}/crash-manager.conf.d/crash-manager.conf.example %attr(-,root,root) %{_prefix}/lib/sysctl.d/70-crash-manager.conf %attr(0750,crash_worker,crash_worker) %{_bindir}/crash-manager %attr(0750,crash_worker,crash_worker) %{_bindir}/dump_systemstate diff --git a/src/crash-manager/CMakeLists.txt b/src/crash-manager/CMakeLists.txt index 591a3ad..2fdf2a2 100644 --- a/src/crash-manager/CMakeLists.txt +++ b/src/crash-manager/CMakeLists.txt @@ -69,6 +69,11 @@ INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${PROJECT_NAME}/crash-manager.conf DESTINATION /etc PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${PROJECT_NAME}/crash-manager.conf.d.example + DESTINATION /etc/crash-manager.conf.d/ + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ + RENAME crash-manager.conf.example) + INSTALL(FILES ${CMAKE_SOURCE_DIR}/src/${PROJECT_NAME}/crash-manager.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) diff --git a/src/crash-manager/crash-manager.conf.d.example b/src/crash-manager/crash-manager.conf.d.example new file mode 100644 index 0000000..b50dbff --- /dev/null +++ b/src/crash-manager/crash-manager.conf.d.example @@ -0,0 +1,3 @@ +# Rename this file to end with .conf for it to be read by crash-manager +[CrashManager] +DumpCore=0 diff --git a/src/shared/config.c b/src/shared/config.c index 1e728c4..901bab0 100644 --- a/src/shared/config.c +++ b/src/shared/config.c @@ -15,10 +15,14 @@ * limitations under the License. */ #include +#include +#include #include #include #include #include +#include +#include #include "config.h" #include "defs.h" @@ -112,6 +116,63 @@ static bool config_load_from_path(config_t *c, const char *const path) return ret; } +static int entry_filter(const struct dirent *e) +{ + assert(e); + + const char *const conf_suffix = ".conf"; + const char *const name = e->d_name; + int len = strlen(name); + + if (e->d_type != DT_REG || len <= strlen(conf_suffix)) + return 0; + + // accept only files ending with predefined suffix + return strcmp(name + len - strlen(conf_suffix), conf_suffix) == 0; +} + +static bool config_load_from_dir_prefix(config_t *c, const char *const dir_prefix) +{ + assert(dir_prefix); + + char dir_path[PATH_MAX]; + int ret = snprintf(dir_path, sizeof(dir_path), "%s.d", dir_prefix); + if (ret < 0 || ret >= PATH_MAX) { + _W("config: internal error while trying to prepare config dir path"); + return false; + } + + int fd = open(dir_path, O_RDONLY | O_DIRECTORY); + if (fd < 0 && errno == ENOENT) + return true; + if (fd < 0) { + _E("config: Unable to access config directory at %s: %m", dir_path); + return false; + } + + struct dirent **entries = NULL; + int n = scandirat(fd, ".", &entries, entry_filter, alphasort); + if (n < 0) + goto out; + + for (int i = 0; i < n; ++i) { + char file_path[PATH_MAX]; + const char *fname = entries[i]->d_name; + ret = snprintf(file_path, sizeof(file_path), "%s/%s", dir_path, fname); + if (ret < 0 || ret >= PATH_MAX) { + _W("config: internal error while trying to prepare for reading %s config file", fname); + continue; + } + _D("config: reading additional configuration file from %s", file_path); + (void)config_load_from_path(c, file_path); + } + +out: + free(entries); + close(fd); + return true; +} + static bool config_apply_defaults(config_t *c) { assert(c); @@ -161,6 +222,8 @@ bool config_init(config_t *c, const char *const path) return false; } + (void)config_load_from_dir_prefix(c, path); + config_dump(c); return true; diff --git a/tests/system/crash_root_path/crash_root_path.sh.template b/tests/system/crash_root_path/crash_root_path.sh.template index 0f59b55..7fe5e96 100644 --- a/tests/system/crash_root_path/crash_root_path.sh.template +++ b/tests/system/crash_root_path/crash_root_path.sh.template @@ -8,7 +8,9 @@ fi . ${CRASH_WORKER_SYSTEM_TESTS}/utils/minicore-utils.sh -CRASH_MANAGER_CONF=/etc/crash-manager.conf +CONF_DIR=/etc/crash-manager.conf.d +CONF_FILE=${CONF_DIR}/crash-root-path-test.conf + NEW_PATH=/tmp/crash_path_test/ if [ ! -d ${NEW_PATH} ]; then mkdir ${NEW_PATH} @@ -23,8 +25,13 @@ function check_file_exists { } mount -o rw,remount / -backup_file ${CRASH_MANAGER_CONF} -cat ${CRASH_MANAGER_CONF}.backup | sed "s|#[ ]\+CrashRootPath=.*|CrashRootPath=${NEW_PATH}|" > ${CRASH_MANAGER_CONF} + +mkdir -p $CONF_DIR +rm -f $CONF_FILE || : +cat <$CONF_FILE +[CrashManager] +CrashRootPath=${NEW_PATH} +EOF { ${CRASH_WORKER_SYSTEM_TESTS}/utils/kenny & @@ -34,10 +41,10 @@ cat ${CRASH_MANAGER_CONF}.backup | sed "s|#[ ]\+CrashRootPath=.*|CrashRootPath=$ sleep 2 -restore_file ${CRASH_MANAGER_CONF} - wait_for_app crash-manager +rm -f ${CONF_FILE} || : + pushd ${NEW_PATH}/dump if ! unzip kenny*zip > /dev/null; then popd -- 2.7.4 From 584b89152d0e30db496529eb7da83cb7424882c8 Mon Sep 17 00:00:00 2001 From: Karol Lewandowski Date: Fri, 20 Dec 2019 20:32:46 +0100 Subject: [PATCH 16/16] config: Ensure freed pointers are set to null Change-Id: I779cff27a6873187e5f17415469864d6ccd0d1b7 --- src/shared/config.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/shared/config.c b/src/shared/config.c index 901bab0..d389187 100644 --- a/src/shared/config.c +++ b/src/shared/config.c @@ -235,4 +235,6 @@ void config_free(config_t *c) free(c->crash_root_path); free(c->extra_script); + + memset(c, 0, sizeof(*c)); } -- 2.7.4