|
Jiri |
676fa8 |
From c138894ba3f3e630d7e1af398fcd93ffa862659d Mon Sep 17 00:00:00 2001
|
|
Jiri |
676fa8 |
From: Denys Vlasenko <dvlasenk@redhat.com>
|
|
Jiri |
676fa8 |
Date: Wed, 7 Dec 2011 13:58:25 +0100
|
|
Jiri |
676fa8 |
Subject: [PATCH 3/5] abrtd: fix potential problem with exitcode check on
|
|
Jiri |
676fa8 |
"post-create"
|
|
Jiri |
676fa8 |
|
|
Jiri |
676fa8 |
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
|
|
Jiri |
676fa8 |
---
|
|
Jiri |
676fa8 |
src/daemon/abrtd.c | 53 ++++++++++++++++++++++++++-------------------------
|
|
Jiri |
676fa8 |
1 files changed, 27 insertions(+), 26 deletions(-)
|
|
Jiri |
676fa8 |
|
|
Jiri |
676fa8 |
diff --git a/src/daemon/abrtd.c b/src/daemon/abrtd.c
|
|
Jiri |
676fa8 |
index d3a759a..743e40f 100644
|
|
Jiri |
676fa8 |
--- a/src/daemon/abrtd.c
|
|
Jiri |
676fa8 |
+++ b/src/daemon/abrtd.c
|
|
Jiri |
676fa8 |
@@ -313,9 +313,10 @@ static mw_result_t run_post_create_and_load_data(const char *dump_dir_name, prob
|
|
Jiri |
676fa8 |
/* Prevent having zombie child process */
|
|
Jiri |
676fa8 |
int status;
|
|
Jiri |
676fa8 |
safe_waitpid(child, &status, 0);
|
|
Jiri |
676fa8 |
- status = WEXITSTATUS(status);
|
|
Jiri |
676fa8 |
+ /* status = WEXITSTATUS(status); - wrong, we need to check WIFEXITED too */
|
|
Jiri |
676fa8 |
|
|
Jiri |
676fa8 |
- /* exit 0 means, this is a good, non-dup dir */
|
|
Jiri |
676fa8 |
+ /* exit 0 means "this is a good, non-dup dir" */
|
|
Jiri |
676fa8 |
+ /* exit with 1 + "DUP_OF_DIR: dir" string => dup */
|
|
Jiri |
676fa8 |
if (status != 0)
|
|
Jiri |
676fa8 |
{
|
|
Jiri |
676fa8 |
if (!dup_of_dir)
|
|
Jiri |
676fa8 |
@@ -330,34 +331,34 @@ static mw_result_t run_post_create_and_load_data(const char *dump_dir_name, prob
|
|
Jiri |
676fa8 |
* else: MW_ERROR
|
|
Jiri |
676fa8 |
*/
|
|
Jiri |
676fa8 |
mw_result_t res = MW_ERROR;
|
|
Jiri |
676fa8 |
+ struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
|
|
Jiri |
676fa8 |
+ if (!dd)
|
|
Jiri |
676fa8 |
+ /* dd_opendir already emitted error msg */
|
|
Jiri |
676fa8 |
+ goto ret;
|
|
Jiri |
676fa8 |
+
|
|
Jiri |
676fa8 |
+ /* Reset mode/uig/gid to correct values for all files created by event run */
|
|
Jiri |
676fa8 |
+ dd_sanitize_mode_and_owner(dd);
|
|
Jiri |
676fa8 |
+
|
|
Jiri |
676fa8 |
+ /* Update count */
|
|
Jiri |
676fa8 |
+ char *count_str = dd_load_text_ext(dd, FILENAME_COUNT, DD_FAIL_QUIETLY_ENOENT);
|
|
Jiri |
676fa8 |
+ unsigned long count = strtoul(count_str, NULL, 10);
|
|
Jiri |
676fa8 |
+ count++;
|
|
Jiri |
676fa8 |
+ char new_count_str[sizeof(long)*3 + 2];
|
|
Jiri |
676fa8 |
+ sprintf(new_count_str, "%lu", count);
|
|
Jiri |
676fa8 |
+ dd_save_text(dd, FILENAME_COUNT, new_count_str);
|
|
Jiri |
676fa8 |
+ dd_close(dd);
|
|
Jiri |
676fa8 |
+
|
|
Jiri |
676fa8 |
+ *problem_data = load_problem_data(dump_dir_name);
|
|
Jiri |
676fa8 |
+ if (*problem_data != NULL)
|
|
Jiri |
676fa8 |
{
|
|
Jiri |
676fa8 |
- struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
|
|
Jiri |
676fa8 |
- if (!dd)
|
|
Jiri |
676fa8 |
- goto ret;
|
|
Jiri |
676fa8 |
-
|
|
Jiri |
676fa8 |
- /* Reset mode/uig/gid to correct values for all files created by event run */
|
|
Jiri |
676fa8 |
- dd_sanitize_mode_and_owner(dd);
|
|
Jiri |
676fa8 |
-
|
|
Jiri |
676fa8 |
- /* Update count */
|
|
Jiri |
676fa8 |
- char *count_str = dd_load_text_ext(dd, FILENAME_COUNT, DD_FAIL_QUIETLY_ENOENT);
|
|
Jiri |
676fa8 |
- unsigned long count = strtoul(count_str, NULL, 10);
|
|
Jiri |
676fa8 |
- count++;
|
|
Jiri |
676fa8 |
- char new_count_str[sizeof(long)*3 + 2];
|
|
Jiri |
676fa8 |
- sprintf(new_count_str, "%lu", count);
|
|
Jiri |
676fa8 |
- dd_save_text(dd, FILENAME_COUNT, new_count_str);
|
|
Jiri |
676fa8 |
- dd_close(dd);
|
|
Jiri |
676fa8 |
-
|
|
Jiri |
676fa8 |
- *problem_data = load_problem_data(dump_dir_name);
|
|
Jiri |
676fa8 |
- if (*problem_data != NULL)
|
|
Jiri |
676fa8 |
+ res = MW_OK;
|
|
Jiri |
676fa8 |
+ if (count > 1)
|
|
Jiri |
676fa8 |
{
|
|
Jiri |
676fa8 |
- res = MW_OK;
|
|
Jiri |
676fa8 |
- if (count > 1)
|
|
Jiri |
676fa8 |
- {
|
|
Jiri |
676fa8 |
- log("Problem directory is a duplicate of %s", dump_dir_name);
|
|
Jiri |
676fa8 |
- res = MW_OCCURRED;
|
|
Jiri |
676fa8 |
- }
|
|
Jiri |
676fa8 |
+ log("Problem directory is a duplicate of %s", dump_dir_name);
|
|
Jiri |
676fa8 |
+ res = MW_OCCURRED;
|
|
Jiri |
676fa8 |
}
|
|
Jiri |
676fa8 |
}
|
|
Jiri |
676fa8 |
+ /* else: load_problem_data already emitted error msg */
|
|
Jiri |
676fa8 |
|
|
Jiri |
676fa8 |
ret:
|
|
Jiri |
676fa8 |
free(dup_of_dir);
|
|
Jiri |
676fa8 |
--
|
|
Jiri |
676fa8 |
1.7.7.3
|
|
Jiri |
676fa8 |
|