From 2c83a8cb9332607415a22d5e252314b2f5f2c40e Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Nov 03 2016 05:45:19 +0000 Subject: import libreport-2.1.11-35.el7 --- diff --git a/SOURCES/0162-lib-introduce-a-new-function-returning-base-user-con.patch b/SOURCES/0162-lib-introduce-a-new-function-returning-base-user-con.patch new file mode 100644 index 0000000..f7e535e --- /dev/null +++ b/SOURCES/0162-lib-introduce-a-new-function-returning-base-user-con.patch @@ -0,0 +1,82 @@ +From b429af7c61bb1abe791ceb34fb6b6cf7382f832b Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Fri, 12 Feb 2016 14:25:05 +0100 +Subject: [PATCH] lib: introduce a new function returning base user conf + directory + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + src/include/internal_libreport.h | 3 +++ + src/lib/configuration_files.c | 9 +++++++++ + src/lib/user_settings.c | 12 +++++------- + 3 files changed, 17 insertions(+), 7 deletions(-) + +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index b36cbd9..38d75a1 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -738,6 +738,9 @@ bool load_conf_file(const char *pPath, map_string_t *settings, bool skipKeysWith + #define load_plugin_conf_file libreport_load_plugin_conf_file + bool load_plugin_conf_file(const char *name, map_string_t *settings, bool skipKeysWithoutValue); + ++#define get_user_conf_base_dir libreport_get_user_conf_base_dir ++const char *get_user_conf_base_dir(void); ++ + #define load_conf_file_from_dirs libreport_load_conf_file_from_dirs + bool load_conf_file_from_dirs(const char *base_name, const char *const *directories, map_string_t *settings, bool skipKeysWithoutValue); + +diff --git a/src/lib/configuration_files.c b/src/lib/configuration_files.c +index 4975d62..b145b9f 100644 +--- a/src/lib/configuration_files.c ++++ b/src/lib/configuration_files.c +@@ -318,6 +318,15 @@ finalize: + return retval; + } + ++const char *get_user_conf_base_dir(void) ++{ ++ static char *base_dir = NULL; ++ if (base_dir == NULL) ++ base_dir = concat_path_file(g_get_user_config_dir(), "abrt/settings/"); ++ ++ return base_dir; ++} ++ + bool load_conf_file_from_dirs(const char *base_name, const char *const *directories, map_string_t *settings, bool skipKeysWithoutValue) + { + if (NULL == directories || NULL == *directories) +diff --git a/src/lib/user_settings.c b/src/lib/user_settings.c +index 4cd87ff..cdc8482 100644 +--- a/src/lib/user_settings.c ++++ b/src/lib/user_settings.c +@@ -18,21 +18,19 @@ + #include "internal_libreport.h" + #include + +-#define BASE_DIR_FOR_USER_CONFIG_FILE "abrt/settings/" +- + static map_string_t *user_settings; + static char *conf_path; + + static char *get_user_config_file_path(const char *name, const char *suffix) + { +- char *s, *conf; ++ char *s = NULL; ++ char *conf; + + if (suffix != NULL) +- s = xasprintf(BASE_DIR_FOR_USER_CONFIG_FILE"%s.%s", name, suffix); +- else +- s = xasprintf(BASE_DIR_FOR_USER_CONFIG_FILE"%s", name); ++ s = xasprintf("%s.%s", name, suffix); ++ ++ conf = concat_path_file(get_user_conf_base_dir(), s != NULL ? s : name); + +- conf = concat_path_file(g_get_user_config_dir(), s); + free(s); + return conf; + } +-- +1.8.3.1 + diff --git a/SOURCES/0163-utils-make-arguments-of-a-list-func-const.patch b/SOURCES/0163-utils-make-arguments-of-a-list-func-const.patch new file mode 100644 index 0000000..fdfd49c --- /dev/null +++ b/SOURCES/0163-utils-make-arguments-of-a-list-func-const.patch @@ -0,0 +1,120 @@ +From 4d5571e60769e08efc7dcbbe4cd69b68cd7e5a4e Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Fri, 12 Feb 2016 14:32:29 +0100 +Subject: [PATCH] utils: make arguments of a list func const + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + src/include/internal_libreport.h | 4 ++-- + src/lib/is_in_string_list.c | 4 ++-- + src/lib/make_descr.c | 6 +++--- + src/lib/problem_data.c | 8 ++++---- + 4 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index 38d75a1..108f4f1 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -293,10 +293,10 @@ char *run_in_shell_and_save_output(int flags, + /* Random utility functions */ + + #define is_in_string_list libreport_is_in_string_list +-bool is_in_string_list(const char *name, char **v); ++bool is_in_string_list(const char *name, const char *const *v); + + #define index_of_string_in_list libreport_index_of_string_in_list +-int index_of_string_in_list(const char *name, char **v); ++int index_of_string_in_list(const char *name, const char *const *v); + + #define is_in_comma_separated_list libreport_is_in_comma_separated_list + bool is_in_comma_separated_list(const char *value, const char *list); +diff --git a/src/lib/is_in_string_list.c b/src/lib/is_in_string_list.c +index e0ee26b..b75abe4 100644 +--- a/src/lib/is_in_string_list.c ++++ b/src/lib/is_in_string_list.c +@@ -18,7 +18,7 @@ + */ + #include "internal_libreport.h" + +-bool is_in_string_list(const char *name, char **v) ++bool is_in_string_list(const char *name, const char *const *v) + { + while (*v) + { +@@ -29,7 +29,7 @@ bool is_in_string_list(const char *name, char **v) + return false; + } + +-int index_of_string_in_list(const char *name, char **v) ++int index_of_string_in_list(const char *name, const char *const *v) + { + for(int i = 0; v[i]; ++i) + { +diff --git a/src/lib/make_descr.c b/src/lib/make_descr.c +index f8da893..fd180a9 100644 +--- a/src/lib/make_descr.c ++++ b/src/lib/make_descr.c +@@ -20,7 +20,7 @@ + + static bool rejected_name(const char *name, char **v, int flags) + { +- bool r = is_in_string_list(name, v); ++ bool r = is_in_string_list(name, (const char *const *)v); + if (flags & MAKEDESC_WHITELIST) + r = !r; + return r; +@@ -59,8 +59,8 @@ static int list_cmp(const char *s1, const char *s2) + FILENAME_COUNT , + NULL + }; +- int s1_index = index_of_string_in_list(s1, (char**) list_order); +- int s2_index = index_of_string_in_list(s2, (char**) list_order); ++ int s1_index = index_of_string_in_list(s1, list_order); ++ int s2_index = index_of_string_in_list(s2, list_order); + + if(s1_index < 0 && s2_index < 0) + return strcmp(s1, s2); +diff --git a/src/lib/problem_data.c b/src/lib/problem_data.c +index 212f337..9e625bd 100644 +--- a/src/lib/problem_data.c ++++ b/src/lib/problem_data.c +@@ -303,7 +303,7 @@ static const char *const editable_files[] = { + }; + static bool is_editable_file(const char *file_name) + { +- return is_in_string_list(file_name, (char**)editable_files); ++ return is_in_string_list(file_name, editable_files); + } + + /* When is_text_file() returns this special pointer value, +@@ -353,7 +353,7 @@ static char* is_text_file_at(int dir_fd, const char *name, ssize_t *sz) + if (base) + { + base++; +- if (is_in_string_list(base, (char**)always_text_files)) ++ if (is_in_string_list(base, always_text_files)) + goto text; + } + +@@ -423,7 +423,7 @@ void problem_data_load_from_dump_dir(problem_data_t *problem_data, struct dump_d + dd_init_next_file(dd); + while (dd_get_next_file(dd, &short_name, &full_name)) + { +- if (excluding && is_in_string_list(short_name, excluding)) ++ if (excluding && is_in_string_list(short_name, (const char *const *)excluding)) + { + //log("Excluded:'%s'", short_name); + goto next; +@@ -494,7 +494,7 @@ void problem_data_load_from_dump_dir(problem_data_t *problem_data, struct dump_d + FILENAME_REASON , + NULL + }; +- if (is_in_string_list(short_name, (char**)list_files)) ++ if (is_in_string_list(short_name, list_files)) + flags |= CD_FLAG_LIST; + + if (strcmp(short_name, FILENAME_TIME) == 0) +-- +1.8.3.1 + diff --git a/SOURCES/0164-conf-files-be-able-to-make-directories-optional.patch b/SOURCES/0164-conf-files-be-able-to-make-directories-optional.patch new file mode 100644 index 0000000..7ebe313 --- /dev/null +++ b/SOURCES/0164-conf-files-be-able-to-make-directories-optional.patch @@ -0,0 +1,125 @@ +From 800aadd6db1ba4429474769b059cc62e75a2c00d Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Fri, 12 Feb 2016 14:40:21 +0100 +Subject: [PATCH] conf files: be able to make directories optional + +Related to #316 + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + src/include/internal_libreport.h | 10 ++++++++++ + src/lib/configuration_files.c | 19 +++++++++++++++---- + tests/configuration_files.at | 35 +++++++++++++++++++++++++++++++++++ + 3 files changed, 60 insertions(+), 4 deletions(-) + +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index 108f4f1..2046e69 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -744,6 +744,16 @@ const char *get_user_conf_base_dir(void); + #define load_conf_file_from_dirs libreport_load_conf_file_from_dirs + bool load_conf_file_from_dirs(const char *base_name, const char *const *directories, map_string_t *settings, bool skipKeysWithoutValue); + ++enum { ++ CONF_DIR_FLAG_NONE = 0, ++ CONF_DIR_FLAG_OPTIONAL = 1, ++}; ++ ++#define load_conf_file_from_dirs_ext libreport_load_conf_file_from_dirs_ext ++bool load_conf_file_from_dirs_ext(const char *base_name, const char *const *directories, ++ const int * dir_flags, map_string_t *settings, ++ bool skipKeysWithoutValue); ++ + #define save_conf_file libreport_save_conf_file + bool save_conf_file(const char *path, map_string_t *settings); + #define save_plugin_conf_file libreport_save_plugin_conf_file +diff --git a/src/lib/configuration_files.c b/src/lib/configuration_files.c +index b145b9f..3520d93 100644 +--- a/src/lib/configuration_files.c ++++ b/src/lib/configuration_files.c +@@ -329,6 +329,11 @@ const char *get_user_conf_base_dir(void) + + bool load_conf_file_from_dirs(const char *base_name, const char *const *directories, map_string_t *settings, bool skipKeysWithoutValue) + { ++ return load_conf_file_from_dirs_ext(base_name, directories, NULL, settings, skipKeysWithoutValue); ++} ++ ++bool load_conf_file_from_dirs_ext(const char *base_name, const char *const *directories, const int *dir_flags, map_string_t *settings, bool skipKeysWithoutValue) ++{ + if (NULL == directories || NULL == *directories) + { + log_error("No configuration directory specified"); +@@ -336,13 +341,19 @@ bool load_conf_file_from_dirs(const char *base_name, const char *const *director + } + + bool result = true; +- for (const char *const *dir = directories; *dir != NULL; ++dir) ++ for (size_t i = 0; directories[i] != NULL; ++i) + { +- char *conf_file = concat_path_file(*dir, base_name); ++ char *conf_file = concat_path_file(directories[i], base_name); + if (!load_conf_file(conf_file, settings, skipKeysWithoutValue)) + { +- perror_msg("Can't open '%s'", conf_file); +- result = false; ++ if (dir_flags && (dir_flags[i] & CONF_DIR_FLAG_OPTIONAL)) ++ log_notice("Can't open '%s'", conf_file); ++ else ++ { ++ perror_msg("Can't open '%s'", conf_file); ++ result = false; ++ } ++ + } + free(conf_file); + } +diff --git a/tests/configuration_files.at b/tests/configuration_files.at +index f9275e1..3c75ffb 100644 +--- a/tests/configuration_files.at ++++ b/tests/configuration_files.at +@@ -321,6 +321,41 @@ int main(int argc, char **argv) + } + ]]) + ++## ---------------------------- ## ++## load_conf_file_from_dirs_ext ## ++## ---------------------------- ## ++ ++AT_TESTFUN([load_conf_file_from_dirs_ext], ++[[ ++#include "internal_libreport.h" ++ ++#define CONF_NAME "file.conf" ++ ++int main(void) ++{ ++ g_verbose = 3; ++ ++ { ++ const char *const dir_vec[] = { ++ "../../conf/second", ++ "/org/freedesktop/problems/invalid", ++ NULL, ++ }; ++ ++ int dir_flags_vec[] = { ++ CONF_DIR_FLAG_NONE, ++ CONF_DIR_FLAG_OPTIONAL, ++ -1, ++ }; ++ ++ map_string_t *settings = new_map_string(); ++ ++ assert(load_conf_file_from_dirs_ext(CONF_NAME, dir_vec, dir_flags_vec, settings, 0)); ++ ++ free_map_string(settings); ++ } ++} ++]]) + + ## ---------------## + ## save_conf_file ## +-- +1.8.3.1 + diff --git a/SOURCES/0165-lib-introduce-global-configuration-option-for-exclud.patch b/SOURCES/0165-lib-introduce-global-configuration-option-for-exclud.patch new file mode 100644 index 0000000..ab84e64 --- /dev/null +++ b/SOURCES/0165-lib-introduce-global-configuration-option-for-exclud.patch @@ -0,0 +1,307 @@ +From 2b8b92486ac28aff4a7d99fc18084db3d6f9617c Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Fri, 12 Feb 2016 14:20:19 +0100 +Subject: [PATCH] lib: introduce global configuration + option for excluded + elements + +Related to rhbz#1168494 + +Signed-off-by: Matej Habrnal +Signed-off-by: Jakub Filak +--- + src/include/Makefile.am | 2 +- + src/include/global_configuration.h | 45 ++++++++++++ + src/include/internal_libreport.h | 2 +- + src/include/libreport_types.h | 2 + + src/lib/Makefile.am | 3 +- + src/lib/global_configuration.c | 143 +++++++++++++++++++++++++++++++++++++ + src/plugins/reporter-upload.c | 4 +- + 7 files changed, 196 insertions(+), 5 deletions(-) + create mode 100644 src/include/global_configuration.h + create mode 100644 src/lib/global_configuration.c + +diff --git a/src/include/Makefile.am b/src/include/Makefile.am +index de44cda..062bffb 100644 +--- a/src/include/Makefile.am ++++ b/src/include/Makefile.am +@@ -9,7 +9,7 @@ libreport_include_HEADERS = \ + run_event.h \ + libreport_curl.h \ + workflow.h \ +- \ ++ global_configuration.h \ + config_item_info.h \ + file_obj.h \ + internal_libreport.h \ +diff --git a/src/include/global_configuration.h b/src/include/global_configuration.h +new file mode 100644 +index 0000000..9666796 +--- /dev/null ++++ b/src/include/global_configuration.h +@@ -0,0 +1,45 @@ ++/* ++ Copyright (C) 2015 ABRT team ++ Copyright (C) 2015 RedHat Inc ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++*/ ++ ++#ifndef LIBREPORT_GLOBAL_CONFIGURATION_H ++#define LIBREPORT_GLOBAL_CONFIGURATION_H ++ ++#include "libreport_types.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#define load_global_configuration libreport_load_global_configuration ++bool load_global_configuration(void); ++ ++#define load_global_configuration_from_dirs libreport_load_global_configuration_from_dirs ++bool load_global_configuration_from_dirs(const char *dirs[], int dir_flags[]); ++ ++#define free_global_configuration libreport_free_global_configuration ++void free_global_configuration(void); ++ ++#define get_global_always_excluded_elements libreport_get_global_always_excluded_elements ++string_vector_ptr_t get_global_always_excluded_elements(void); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif /* LIBREPORT_GLOBAL_CONFIGURATION_H */ +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index 2046e69..b632803 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -45,7 +45,6 @@ + #include + #include + #include +-#include + /* Try to pull in PATH_MAX */ + #include + #include +@@ -91,6 +90,7 @@ int vdprintf(int d, const char *format, va_list ap); + + /* Pull in entire public libreport API */ + #include "dump_dir.h" ++#include "global_configuration.h" + #include "event_config.h" + #include "problem_data.h" + #include "report.h" +diff --git a/src/include/libreport_types.h b/src/include/libreport_types.h +index 2c60972..eb70fca 100644 +--- a/src/include/libreport_types.h ++++ b/src/include/libreport_types.h +@@ -19,9 +19,11 @@ + #ifndef LIBREPORT_TYPES_H_ + #define LIBREPORT_TYPES_H_ + ++#include + #include + + typedef gchar **string_vector_ptr_t; ++typedef const gchar *const *const_string_vector_const_ptr_t; + + #define string_vector_new_from_string libreport_string_vector_new_from_string + string_vector_ptr_t string_vector_new_from_string(const char *vector); +diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am +index 7d9722a..f9ea602 100644 +--- a/src/lib/Makefile.am ++++ b/src/lib/Makefile.am +@@ -55,7 +55,8 @@ libreport_la_SOURCES = \ + workflow_xml_parser.c \ + config_item_info.c \ + xml_parser.c \ +- libreport_init.c ++ libreport_init.c \ ++ global_configuration.c + + libreport_la_CPPFLAGS = \ + -I$(srcdir)/../include \ +diff --git a/src/lib/global_configuration.c b/src/lib/global_configuration.c +new file mode 100644 +index 0000000..903a2fb +--- /dev/null ++++ b/src/lib/global_configuration.c +@@ -0,0 +1,143 @@ ++/* ++ Copyright (C) 2015 ABRT team ++ Copyright (C) 2015 RedHat Inc ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++*/ ++ ++#include "global_configuration.h" ++#include "internal_libreport.h" ++ ++#define OPT_NAME_SCRUBBED_VARIABLES "ScrubbedENVVariables" ++#define OPT_NAME_EXCLUDED_ELEMENTS "AlwaysExcludedElements" ++ ++static const char *const s_recognized_options[] = { ++ OPT_NAME_SCRUBBED_VARIABLES, ++ OPT_NAME_EXCLUDED_ELEMENTS, ++ NULL, ++}; ++ ++static map_string_t *s_global_settings; ++ ++bool load_global_configuration(void) ++{ ++ static const char *dirs[] = { ++ CONF_DIR, ++ NULL, ++ NULL, ++ }; ++ ++ static int dir_flags[] = { ++#if 0 ++ CONF_DIR_FLAG_NONE, ++#else ++ /* jfilak: RHEL-7 do not use global configuration file */ ++ CONF_DIR_FLAG_OPTIONAL, ++#endif ++ CONF_DIR_FLAG_OPTIONAL, ++ -1, ++ }; ++ ++ if (dirs[1] == NULL) ++ dirs[1] = get_user_conf_base_dir(); ++ ++ return load_global_configuration_from_dirs(dirs, dir_flags); ++} ++ ++bool load_global_configuration_from_dirs(const char *dirs[], int dir_flags[]) ++{ ++ if (s_global_settings == NULL) ++ { ++ s_global_settings = new_map_string(); ++ ++ bool ret = load_conf_file_from_dirs_ext("libreport.conf", dirs, dir_flags, s_global_settings, ++ /*don't skip without value*/ false); ++ if (!ret) ++ { ++ error_msg("Failed to load libreport global configuration"); ++ free_global_configuration(); ++ return false; ++ } ++ ++ map_string_iter_t iter; ++ init_map_string_iter(&iter, s_global_settings); ++ const char *key, *value; ++ while(next_map_string_iter(&iter, &key, &value)) ++ { ++ /* Die to avoid security leaks in case where someone made a typo in a option name */ ++ if (!is_in_string_list(key, s_recognized_options)) ++ { ++ error_msg("libreport global configuration contains unrecognized option : '%s'", key); ++ free_global_configuration(); ++ return false; ++ } ++ } ++ } ++ else ++ log_notice("libreport global configuration already loaded"); ++ ++ return true; ++} ++ ++void free_global_configuration(void) ++{ ++ if (s_global_settings != NULL) ++ { ++ free_map_string(s_global_settings); ++ s_global_settings = NULL; ++ } ++} ++ ++static void assert_global_configuration_initialized(void) ++{ ++ if (NULL == s_global_settings) ++ { ++ error_msg("libreport global configuration is not initialized"); ++ abort(); ++ } ++} ++ ++#define get_helper(type, getter, name) \ ++ ({ \ ++ assert_global_configuration_initialized(); \ ++ type opt; \ ++ if (getter(s_global_settings, name, &opt)) \ ++ /* Die to avoid security leaks in case where someone made a error */ \ ++ error_msg_and_die("libreport global settings contains invalid data: '"name"'"); \ ++ opt;\ ++ }) ++ ++string_vector_ptr_t get_global_always_excluded_elements(void) ++{ ++ assert_global_configuration_initialized(); ++ ++ char *env_exclude = getenv("EXCLUDE_FROM_REPORT"); ++ const char *gc_exclude = get_map_string_item_or_NULL(s_global_settings, OPT_NAME_EXCLUDED_ELEMENTS); ++ ++ if (env_exclude != NULL && gc_exclude == NULL) ++ return string_vector_new_from_string(env_exclude); ++ ++ if (env_exclude == NULL && gc_exclude != NULL) ++ return string_vector_new_from_string(gc_exclude); ++ ++ if (env_exclude == NULL && gc_exclude == NULL) ++ return string_vector_new_from_string(NULL); ++ ++ char *joined_exclude = xasprintf("%s, %s", env_exclude, gc_exclude); ++ string_vector_ptr_t ret = string_vector_new_from_string(joined_exclude); ++ free(joined_exclude); ++ ++ return ret; ++} +diff --git a/src/plugins/reporter-upload.c b/src/plugins/reporter-upload.c +index 84c827b..6d83d2f 100644 +--- a/src/plugins/reporter-upload.c ++++ b/src/plugins/reporter-upload.c +@@ -96,12 +96,12 @@ static int create_and_upload_archive( + + /* Write data to the tarball */ + { +- char *exclude_from_report = getenv("EXCLUDE_FROM_REPORT"); ++ string_vector_ptr_t exclude_from_report = get_global_always_excluded_elements(); + dd_init_next_file(dd); + char *short_name, *full_name; + while (dd_get_next_file(dd, &short_name, &full_name)) + { +- if (exclude_from_report && is_in_comma_separated_list(short_name, exclude_from_report)) ++ if (exclude_from_report && is_in_string_list(short_name, (const_string_vector_const_ptr_t)exclude_from_report)) + goto next; + + // dd_get_next_file guarantees that it's a REG: +-- +1.8.3.1 + diff --git a/SOURCES/0166-dd-add-a-function-for-compressing-dumpdirs.patch b/SOURCES/0166-dd-add-a-function-for-compressing-dumpdirs.patch new file mode 100644 index 0000000..38c7f37 --- /dev/null +++ b/SOURCES/0166-dd-add-a-function-for-compressing-dumpdirs.patch @@ -0,0 +1,528 @@ +From f9ff58e8cde1d3b6f5eb5307e2019d54c5e28487 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Thu, 11 Feb 2016 17:29:50 +0100 +Subject: [PATCH] dd: add a function for compressing dumpdirs + +Introduce dd_create_archive() function. + +I added the argument 'flags' in order to avoid the need to introduce +dd_create_archive_ext() function in the future. I am sure will use this +flag in the future (e.g. Encrypted). + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + po/POTFILES.in | 1 + + src/include/dump_dir.h | 26 +++++ + src/lib/Makefile.am | 1 + + src/lib/dump_dir.c | 117 ++++++++++++++++++++ + src/plugins/Makefile.am | 2 - + tests/dump_dir.at | 275 ++++++++++++++++++++++++++++++++++++++++++++++++ + 6 files changed, 420 insertions(+), 2 deletions(-) + +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 00046e2..30c9cb5 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -18,6 +18,7 @@ src/lib/abrt_sock.c + src/lib/client.c + src/lib/create_dump_dir.c + src/lib/curl.c ++src/lib/dump_dir.c + src/lib/event_config.c + src/lib/ureport.c + src/lib/make_descr.c +diff --git a/src/include/dump_dir.h b/src/include/dump_dir.h +index 07b119a..092ddeb 100644 +--- a/src/include/dump_dir.h ++++ b/src/include/dump_dir.h +@@ -21,6 +21,9 @@ + #ifndef LIBREPORT_DUMP_DIR_H_ + #define LIBREPORT_DUMP_DIR_H_ + ++/* For const_string_vector_const_ptr_t */ ++#include "libreport_types.h" ++ + /* For DIR */ + #include + #include +@@ -178,6 +181,29 @@ int fdump_dir_stat_for_uid(int dir_fd, uid_t uid); + */ + int dd_mark_as_notreportable(struct dump_dir *dd, const char *reason); + ++/* Creates a new archive from the dump directory contents ++ * ++ * The dd argument must be opened for reading. ++ * ++ * The archive_name must not exist. The file will be created with 0600 mode. ++ * ++ * The archive type is deduced from archive_name suffix. The supported archive ++ * suffixes are the following: ++ * - '.tag.gz' (note: the implementation uses child gzip process) ++ * ++ * The archive will include only the files that are not in the exclude_elements ++ * list. See get_global_always_excluded_elements(). ++ * ++ * The argument "flags" is currently unused. ++ * ++ * @return 0 on success; otherwise non-0 value. -ENOSYS if archive type is not ++ * supported. -EEXIST if the archive file already exists. -ECHILD if child ++ * process fails. Other negative values can be converted to errno values by ++ * turning them positive. ++ */ ++int dd_create_archive(struct dump_dir *dd, const char *archive_name, ++ const_string_vector_const_ptr_t exclude_elements, int flags); ++ + #ifdef __cplusplus + } + #endif +diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am +index f9ea602..50142f7 100644 +--- a/src/lib/Makefile.am ++++ b/src/lib/Makefile.am +@@ -79,6 +79,7 @@ libreport_la_CPPFLAGS = \ + $(AUGEAS_CFLAGS) \ + -D_GNU_SOURCE + libreport_la_LDFLAGS = \ ++ -ltar \ + -version-info 0:1:0 + libreport_la_LIBADD = \ + $(JSON_C_LIBS) \ +diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c +index 9096853..a5cd93e 100644 +--- a/src/lib/dump_dir.c ++++ b/src/lib/dump_dir.c +@@ -17,6 +17,7 @@ + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + #include ++#include + #include "internal_libreport.h" + + // Locking logic: +@@ -1475,3 +1476,119 @@ int dd_mark_as_notreportable(struct dump_dir *dd, const char *reason) + dd_save_text(dd, FILENAME_NOT_REPORTABLE, reason); + return 0; + } ++ ++/* flags - for future needs */ ++int dd_create_archive(struct dump_dir *dd, const char *archive_name, ++ const_string_vector_const_ptr_t exclude_elements, int flags) ++{ ++ if (suffixcmp(archive_name, ".tar.gz") != 0) ++ return -ENOSYS; ++ ++ int result = 0; ++ pid_t child; ++ TAR* tar = NULL; ++ int pipe_from_parent_to_child[2]; ++ xpipe(pipe_from_parent_to_child); ++ child = fork(); ++ if (child < 0) ++ { ++ result = -errno; ++ /* Don't die, let the caller to execute his clean-up code. */ ++ perror_msg("vfork"); ++ return result; ++ } ++ if (child == 0) ++ { ++ /* child */ ++ close(pipe_from_parent_to_child[1]); ++ xmove_fd(pipe_from_parent_to_child[0], 0); ++ ++ int fd = open(archive_name, O_WRONLY | O_CREAT | O_EXCL, 0600); ++ if (fd < 0) ++ { ++ /* This r might interfer with exit status of gzip, but it is ++ * very unlikely (man 1 gzip): ++ * Exit status is normally 0; if an error occurs, exit status is ++ * 1. If a warning occurs, exit status is 2. ++ */ ++ result = errno == EEXIST ? 100 : 3; ++ perror_msg("Can't open '%s'", archive_name); ++ exit(result); ++ } ++ ++ xmove_fd(fd, 1); ++ execlp("gzip", "gzip", NULL); ++ perror_msg_and_die("Can't execute '%s'", "gzip"); ++ } ++ close(pipe_from_parent_to_child[0]); ++ ++ /* If child died (say, in xopen), then parent might get SIGPIPE. ++ * We want to properly unlock dd, therefore we must not die on SIGPIPE: ++ */ ++ sighandler_t old_handler = signal(SIGPIPE, SIG_IGN); ++ ++ /* Create tar writer object */ ++ if (tar_fdopen(&tar, pipe_from_parent_to_child[1], (char *)archive_name, ++ /*fileops:(standard)*/ NULL, O_WRONLY | O_CREAT, 0644, TAR_GNU) != 0) ++ { ++ result = -errno; ++ log_warning(_("Failed to open TAR writer")); ++ goto finito; ++ } ++ ++ /* Write data to the tarball */ ++ dd_init_next_file(dd); ++ char *short_name, *full_name; ++ while (dd_get_next_file(dd, &short_name, &full_name)) ++ { ++ if (!(exclude_elements && is_in_string_list(short_name, exclude_elements))) ++ { ++ if (tar_append_file(tar, full_name, short_name)) ++ result = -errno; ++ } ++ ++ free(short_name); ++ free(full_name); ++ ++ if (result != 0) ++ goto finito; ++ } ++ ++ /* Close tar writer... */ ++ if (tar_append_eof(tar) != 0) ++ { ++ result = -errno; ++ log_warning(_("Failed to finalize TAR archive")); ++ goto finito; ++ } ++ ++finito: ++ signal(SIGPIPE, old_handler); ++ ++ if (tar != NULL && tar_close(tar) != 0) ++ { ++ result = -errno; ++ log_warning(_("Failed to close TAR writer")); ++ } ++ ++ /* ...and check that gzip child finished successfully */ ++ int status; ++ safe_waitpid(child, &status, 0); ++ if (status != 0) ++ { ++ result = -ECHILD; ++ if (WIFSIGNALED(status)) ++ log_warning(_("gzip killed with signal %d"), WTERMSIG(status)); ++ else if (WIFEXITED(status)) ++ { ++ if (WEXITSTATUS(status) == 100) ++ result = -EEXIST; ++ else ++ log_warning(_("gzip exited with %d"), WEXITSTATUS(status)); ++ } ++ else ++ log_warning(_("gzip process failed")); ++ } ++ ++ return result; ++} +diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am +index 7ec08d7..d5d75b6 100644 +--- a/src/plugins/Makefile.am ++++ b/src/plugins/Makefile.am +@@ -145,7 +145,6 @@ reporter_rhtsupport_CPPFLAGS = \ + $(LIBREPORT_CFLAGS) \ + $(LIBXML_CFLAGS) \ + -D_GNU_SOURCE +-reporter_rhtsupport_LDFLAGS = -ltar + reporter_rhtsupport_LDADD = \ + $(GLIB_LIBS) \ + $(LIBXML_LIBS) \ +@@ -168,7 +167,6 @@ reporter_upload_CPPFLAGS = \ + $(CURL_CFLAGS) \ + $(LIBREPORT_CFLAGS) \ + -D_GNU_SOURCE +-reporter_upload_LDFLAGS = -ltar + reporter_upload_LDADD = \ + $(GLIB_LIBS) \ + ../lib/libreport-web.la \ +diff --git a/tests/dump_dir.at b/tests/dump_dir.at +index a579243..fb8c7ce 100644 +--- a/tests/dump_dir.at ++++ b/tests/dump_dir.at +@@ -47,3 +47,278 @@ int main(void) + return 0; + } + ]]) ++ ++## ----------------- ## ++## dd_create_archive ## ++## ----------------- ## ++ ++AT_TESTFUN([dd_create_archive], ++[[ ++#include "internal_libreport.h" ++#include ++#include ++ ++void verify_archive(struct dump_dir *dd, const char *file_name, ++ const_string_vector_const_ptr_t included_files, ++ const_string_vector_const_ptr_t excluded_files) ++{ ++ unsigned c = 0; ++ for (const_string_vector_const_ptr_t i = included_files; i && *i; ++i) ++ ++c; ++ int *check_array = xzalloc(c * sizeof(int)); ++ ++ int pipe_from_parent_to_child[2]; ++ xpipe(pipe_from_parent_to_child); ++ pid_t child = fork(); ++ if (child < 0) ++ perror_msg_and_die("vfork"); ++ ++ if (child == 0) ++ { ++ /* child */ ++ close(pipe_from_parent_to_child[0]); ++ xmove_fd(xopen(file_name, O_RDONLY), 0); ++ xmove_fd(pipe_from_parent_to_child[1], 1); ++ execlp("gzip", "gzip", "-d", NULL); ++ perror_msg_and_die("Can't execute '%s'", "gzip"); ++ } ++ close(pipe_from_parent_to_child[1]); ++ ++ /* If child died (say, in xopen), then parent might get SIGPIPE. ++ * We want to properly unlock dd, therefore we must not die on SIGPIPE: ++ */ ++ signal(SIGPIPE, SIG_IGN); ++ ++ TAR* tar = NULL; ++ /* Create tar writer object */ ++ if (tar_fdopen(&tar, pipe_from_parent_to_child[0], (char *)file_name, ++ /*fileops:(standard)*/ NULL, O_RDONLY, 0644, TAR_GNU) != 0) ++ { ++ fprintf(stderr, "Failed to open the pipe to gzip for archive: '%s'\n", file_name); ++ abort(); ++ } ++ ++ int r = 0; ++ const char *real_file = "/tmp/libreport-attest-extracted"; ++ while ((r = th_read(tar)) == 0) ++ { ++ char *path = th_get_pathname(tar); ++ ++ if (!TH_ISREG(tar)) ++ { ++ fprintf(stderr, "Not regular file: '%s', found in archive: '%s'\n", path, file_name); ++ continue; ++ } ++ ++ const_string_vector_const_ptr_t i = included_files; ++ for (c = 0; i && *i; ++i, ++c) ++ { ++ if (strcmp(*i, path) == 0) ++ break; ++ } ++ ++ if (i && *i != NULL) ++ { ++ printf("Included file: '%s', found in archive '%s'\n", path, file_name); ++ check_array[c] += 1; ++ ++ unlink(real_file); ++ if(tar_extract_regfile(tar, xstrdup(real_file)) != 0) ++ { ++ fprintf(stderr, "TAR failed to extract '%s' to '%s': %s\n", path, real_file, strerror(errno)); ++ abort(); ++ } ++ ++ char *original = dd_load_text(dd, path); ++ assert(original != NULL); ++ assert(original[0] != '\0'); ++ ++ char *extracted = xmalloc_xopen_read_close("/tmp/libreport-attest-extracted", NULL); ++ assert(extracted != NULL); ++ ++ if (strcmp(extracted, original) != 0) ++ { ++ fprintf(stderr, "Invalid file contents: '%s'\nExp: '%s'\nGot: '%s'\n", path, original, extracted); ++ abort(); ++ } ++ ++ free(original); ++ free(extracted); ++ ++ continue; ++ } ++ ++ i = excluded_files; ++ for (; i && *i; ++i) ++ { ++ if (strcmp(*i, path) == 0) ++ break; ++ } ++ ++ if (i && *i != NULL) ++ { ++ fprintf(stderr, "Excluded file: '%s', found in archive '%s'\n", path, file_name); ++ abort(); ++ } ++ ++ fprintf(stderr, "Uncategorized file: '%s', found in archive '%s'\n", path, file_name); ++ } ++ ++ if (r != 1) ++ { ++ fprintf(stderr, "th_read() failed: %s\n", strerror(errno)); ++ abort(); ++ } ++ ++ tar_close(tar); ++ ++ int status; ++ safe_waitpid(child, &status, 0); ++ if (status != 0) ++ { ++ fprintf(stderr, "gzip status code '%d'\n", status); ++ abort(); ++ } ++ ++ int err = 0; ++ const_string_vector_const_ptr_t i = included_files; ++ for (c = 0; i && *i; ++i, ++c) ++ { ++ switch (check_array[c]) ++ { ++ case 0: ++ fprintf(stderr, "Not found included file: '%s', in archive: %s\n", *i, file_name); ++ ++err; ++ break; ++ case 1: ++ fprintf(stdout, "Found included file: '%s', in archive: %s\n", *i, file_name); ++ break; ++ default: ++ fprintf(stderr, "%d occurrences of included file: '%s', in archive: %s\n", check_array[c], *i, file_name); ++ ++err; ++ break; ++ } ++ } ++ ++ if (err) ++ abort(); ++ ++ return; ++} ++ ++int main(void) ++{ ++ g_verbose = 3; ++ ++ char template[] = "/tmp/XXXXXX"; ++ ++ if (mkdtemp(template) == NULL) { ++ perror("mkdtemp()"); ++ return EXIT_FAILURE; ++ } ++ ++ printf("Dump dir path: %s\n", template); ++ ++ struct dump_dir *dd = dd_create(template, (uid_t)-1, 0640); ++ assert(dd != NULL || !"Cannot create new dump directory"); ++ ++ ++#define COMMON_FILES "time", "last_occurrence", "uid", "kernel", \ ++ "architecture", "hostname", "os_info", "os_release", \ ++ "type", "count", "component", "program_log" ++#define SENSITIVE_FILES "environ", "backtrace", "secret_file", "private_file", \ ++ "useless_file" ++ ++ dd_create_basic_files(dd, geteuid(), NULL); ++ dd_save_text(dd, FILENAME_TYPE, "attest"); ++ dd_save_text(dd, FILENAME_COUNT, "1"); ++ dd_save_text(dd, FILENAME_COMPONENT, "libreport-attest"); ++ dd_save_text(dd, "program_log", "Something very important!"); ++ ++ const gchar *excluded_files[] = { ++ SENSITIVE_FILES, ++ NULL, ++ }; ++ ++ for (const gchar **iter = excluded_files; *iter; ++iter) ++ dd_save_text(dd, *iter, *iter); ++ ++ /* Un-supported archive type */ ++ { ++ fprintf(stderr, "TEST-CASE: Un-supported type\n"); ++ fprintf(stdout, "TEST-CASE: Un-supported type\n"); ++ const int r = dd_create_archive(dd, "/tmp/libreport-attest.omg", NULL, 0); ++ printf("dd_create_archive() == %d\n", r); ++ assert(r == -ENOSYS || !"Not supported"); ++ } ++ ++ /* File already exists. */ ++ dd_close(dd); ++ dd = dd_opendir(template, DD_OPEN_READONLY); ++ { ++ fprintf(stderr, "TEST-CASE: File exists\n"); ++ fprintf(stdout, "TEST-CASE: File exists\n"); ++ char file_contents[] = "Non emtpy file"; ++ const char *file_name = "/tmp/libreport-attest.tar.gz"; ++ FILE *test_file = fopen(file_name, "w"); ++ assert(test_file != NULL); ++ assert(fprintf(test_file, "%s", file_contents) == strlen(file_contents)); ++ fclose(test_file); ++ ++ assert(dd_create_archive(dd, file_name, NULL, 0) == -EEXIST || !"Exists"); ++ ++ char *canary = xmalloc_xopen_read_close(file_name, NULL); ++ assert(canary != NULL); ++ assert(strcmp(canary, file_contents) == 0); ++ } ++ ++ dd_close(dd); ++ dd = dd_opendir(template, DD_OPEN_READONLY); ++ /* All elements */ ++ { ++ fprintf(stderr, "TEST-CASE: Compress all elements\n"); ++ fprintf(stdout, "TEST-CASE: Compress all elements\n"); ++ ++ const gchar *included_files[] = { ++ COMMON_FILES, ++ SENSITIVE_FILES, ++ NULL, ++ }; ++ ++ const char *file_name = "/tmp/libreport-attest-all.tar.gz"; ++ unlink(file_name); ++ assert(dd_create_archive(dd, file_name, NULL, 0) == 0 || !"All elements"); ++ ++ verify_archive(dd, file_name, included_files, NULL); ++ ++ unlink(file_name); ++ } ++ ++ dd_close(dd); ++ dd = dd_opendir(template, DD_OPEN_READONLY); ++ /* Excluded elements */ ++ { ++ fprintf(stderr, "TEST-CASE: Exclude elements\n"); ++ fprintf(stdout, "TEST-CASE: Exclude elements\n"); ++ ++ const char *included_files[] = { ++ COMMON_FILES, ++ NULL, ++ }; ++ ++ const char *file_name = "/tmp/libreport-attest-excluded.tar.gz"; ++ unlink(file_name); ++ assert(dd_create_archive(dd, file_name, excluded_files, 0) == 0 || !"Excluded elements"); ++ ++ verify_archive(dd, file_name, included_files, excluded_files); ++ ++ unlink(file_name); ++ } ++ ++ dd_close(dd); ++ dd = dd_opendir(template, DD_OPEN_READONLY); ++ assert(dd_delete(dd) == 0); ++ ++ return 0; ++} ++]]) +-- +1.8.3.1 + diff --git a/SOURCES/0167-uploader-use-shared-dd_create_archive-function.patch b/SOURCES/0167-uploader-use-shared-dd_create_archive-function.patch new file mode 100644 index 0000000..9ce72e0 --- /dev/null +++ b/SOURCES/0167-uploader-use-shared-dd_create_archive-function.patch @@ -0,0 +1,273 @@ +From 072e3f9847e3c5bf42175aa0f837e1a6445cdbc8 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Fri, 12 Feb 2016 13:58:09 +0100 +Subject: [PATCH] uploader: use shared dd_create_archive function + +Use the test function instead of own untested one. + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal + +Conflicts: + src/plugins/reporter-upload.c +--- + src/plugins/reporter-upload.c | 184 ++++++++++++++---------------------------- + 1 file changed, 60 insertions(+), 124 deletions(-) + +diff --git a/src/plugins/reporter-upload.c b/src/plugins/reporter-upload.c +index 6d83d2f..b148d95 100644 +--- a/src/plugins/reporter-upload.c ++++ b/src/plugins/reporter-upload.c +@@ -16,7 +16,6 @@ + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +-#include + #include "libreport_curl.h" + #include "internal_libreport.h" + #include "client.h" +@@ -33,33 +32,45 @@ static char *ask_url(const char *message) + return url; + } + ++static int interactive_upload_file(const char *url, const char *file_name) ++{ ++ post_state_t *state = new_post_state(POST_WANT_ERROR_MSG); ++ state->username = getenv("Upload_Username"); ++ char *password_inp = NULL; ++ if (state->username != NULL && state->username[0] != '\0') ++ { ++ /* Load Password only if Username is configured, it doesn't make */ ++ /* much sense to load Password without Username. */ ++ state->password = getenv("Upload_Password"); ++ if (state->password == NULL) ++ { ++ /* Be permissive and nice, ask only once and don't check */ ++ /* the result. User can dismiss this prompt but the upload */ ++ /* may work somehow??? */ ++ char *msg = xasprintf(_("Please enter password for uploading:"), state->username); ++ state->password = password_inp = ask_password(msg); ++ free(msg); ++ } ++ } ++ ++ char *remote_name = upload_file_ext(state, url, file_name, UPLOAD_FILE_HANDLE_ACCESS_DENIALS); ++ int result = (remote_name == NULL); /* error if NULL */ ++ ++ free(remote_name); ++ free(password_inp); ++ free_post_state(state); ++ ++ return result; ++} ++ + static int create_and_upload_archive( + const char *dump_dir_name, + map_string_t *settings) + { + int result = 1; /* error */ + +- pid_t child; +- TAR* tar = NULL; +- const char* errmsg = NULL; + char* tempfile = NULL; + +- struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); +- if (!dd) +- xfunc_die(); /* error msg is already logged by dd_opendir */ +- +- /* Gzipping e.g. 0.5gig coredump takes a while. Let client know what we are doing */ +- log(_("Compressing data")); +- +-//TODO: +-//Encrypt = yes +-//ArchiveType = .tar.bz2 +-//ExcludeFiles = foo,bar*,b*z +- const char* opt = getenv("Upload_URL"); +- if (!opt) +- opt = get_map_string_item_or_empty(settings, "URL"); +- char *url = opt[0] != '\0' ? xstrdup(opt) : ask_url(_("Upload URL is not provided by configuration. Please enter upload URL:")); +- + /* Create a child gzip which will compress the data */ + /* SELinux guys are not happy with /tmp, using /var/run/abrt */ + /* Reverted back to /tmp for ABRT2 */ +@@ -67,114 +78,31 @@ static int create_and_upload_archive( + tempfile = concat_path_basename(LARGE_DATA_TMP_DIR, dump_dir_name); + tempfile = append_to_malloced_string(tempfile, ".tar.gz"); + +- int pipe_from_parent_to_child[2]; +- xpipe(pipe_from_parent_to_child); +- child = vfork(); +- if (child == 0) +- { +- /* child */ +- close(pipe_from_parent_to_child[1]); +- xmove_fd(pipe_from_parent_to_child[0], 0); +- xmove_fd(xopen3(tempfile, O_WRONLY | O_CREAT | O_EXCL, 0600), 1); +- execlp("gzip", "gzip", NULL); +- perror_msg_and_die("Can't execute '%s'", "gzip"); +- } +- close(pipe_from_parent_to_child[0]); ++ const char* opt = getenv("Upload_URL"); ++ if (!opt) ++ opt = get_map_string_item_or_empty(settings, "URL"); ++ char *url = opt[0] != '\0' ? xstrdup(opt) : ask_url(_("Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:")); + +- /* If child died (say, in xopen), then parent might get SIGPIPE. +- * We want to properly unlock dd, therefore we must not die on SIGPIPE: +- */ +- signal(SIGPIPE, SIG_IGN); ++ string_vector_ptr_t exclude_from_report = get_global_always_excluded_elements(); ++ struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); ++ if (!dd) ++ xfunc_die(); /* error msg is already logged by dd_opendir */ + +- /* Create tar writer object */ +- if (tar_fdopen(&tar, pipe_from_parent_to_child[1], tempfile, +- /*fileops:(standard)*/ NULL, O_WRONLY | O_CREAT, 0644, TAR_GNU) != 0) ++ /* Compressing e.g. 0.5gig coredump takes a while. Let client know what we are doing */ ++ log(_("Compressing data")); ++ if (dd_create_archive(dd, tempfile, (const char * const*)exclude_from_report, 0) != 0) + { +- errmsg = "Can't create temporary file in "LARGE_DATA_TMP_DIR; ++ log_error("Can't create temporary file in %s", LARGE_DATA_TMP_DIR); + goto ret; + } + +- /* Write data to the tarball */ +- { +- string_vector_ptr_t exclude_from_report = get_global_always_excluded_elements(); +- dd_init_next_file(dd); +- char *short_name, *full_name; +- while (dd_get_next_file(dd, &short_name, &full_name)) +- { +- if (exclude_from_report && is_in_string_list(short_name, (const_string_vector_const_ptr_t)exclude_from_report)) +- goto next; +- +- // dd_get_next_file guarantees that it's a REG: +- //struct stat stbuf; +- //if (stat(full_name, &stbuf) != 0) +- // || !S_ISREG(stbuf.st_mode) +- //) { +- // goto next; +- //} +- if (tar_append_file(tar, full_name, short_name) != 0) +- { +- errmsg = "Can't create temporary file in "LARGE_DATA_TMP_DIR; +- free(short_name); +- free(full_name); +- goto ret; +- } +- next: +- free(short_name); +- free(full_name); +- } +- } + dd_close(dd); + dd = NULL; + +- /* Close tar writer... */ +- if (tar_append_eof(tar) != 0 || tar_close(tar) != 0) +- { +- errmsg = "Can't create temporary file in "LARGE_DATA_TMP_DIR; +- goto ret; +- } +- tar = NULL; +- /* ...and check that gzip child finished successfully */ +- int status; +- safe_waitpid(child, &status, 0); +- child = -1; +- if (status != 0) +- { +- /* We assume the error was out-of-disk-space or out-of-quota */ +- errmsg = "Can't create temporary file in "LARGE_DATA_TMP_DIR; +- goto ret; +- } +- +- /* Upload the tarball */ ++ /* Upload the archive */ + /* Upload from /tmp to /tmp + deletion -> BAD, exclude this possibility */ + if (url && url[0] && strcmp(url, "file://"LARGE_DATA_TMP_DIR"/") != 0) +- { +- post_state_t *state = new_post_state(POST_WANT_ERROR_MSG); +- state->username = getenv("Upload_Username"); +- char *password_inp = NULL; +- if (state->username != NULL && state->username[0] != '\0') +- { +- /* Load Password only if Username is configured, it doesn't make */ +- /* much sense to load Password without Username. */ +- state->password = getenv("Upload_Password"); +- if (state->password == NULL) +- { +- /* Be permissive and nice, ask only once and don't check */ +- /* the result. User can dismiss this prompt but the upload */ +- /* may work somehow??? */ +- char *msg = xasprintf(_("Please enter password for uploading:"), state->username); +- state->password = password_inp = ask_password(msg); +- free(msg); +- } +- } +- +- char *remote_name = upload_file_ext(state, url, tempfile, UPLOAD_FILE_HANDLE_ACCESS_DENIALS); +- +- result = (remote_name == NULL); /* error if NULL */ +- free(remote_name); +- free(password_inp); +- free_post_state(state); +- /* cleanup code will delete tempfile */ +- } ++ result = interactive_upload_file(url, tempfile); + else + { + result = 0; /* success */ +@@ -186,18 +114,12 @@ static int create_and_upload_archive( + ret: + free(url); + dd_close(dd); +- if (tar) +- tar_close(tar); +- /* close(pipe_from_parent_to_child[1]); - tar_close() does it itself */ +- if (child > 0) +- safe_waitpid(child, NULL, 0); ++ + if (tempfile) + { + unlink(tempfile); + free(tempfile); + } +- if (errmsg) +- error_msg_and_die("%s", errmsg); + + return result; + } +@@ -206,6 +128,9 @@ int main(int argc, char **argv) + { + abrt_init(argv); + ++ if (!load_global_configuration()) ++ error_msg_and_die("Cannot continue without libreport global configuration."); ++ + /* I18n */ + setlocale(LC_ALL, ""); + #if ENABLE_NLS +@@ -255,6 +180,17 @@ int main(int argc, char **argv) + + export_abrt_envvars(0); + ++ // 2015-10-16 (jfilak): ++ // It looks like there is no demand for encryption and other archive ++ // types. Configurable ExcludeFiles sounds reasonable to me, I am ++ // not sure about globbing though. ++ // ++ //Encrypt = yes ++ //ArchiveType = .tar.bz2 ++ // ++ //TODO: ++ //ExcludeFiles = foo,bar*,b*z ++ + map_string_t *settings = new_map_string(); + if (url) + replace_map_string_item(settings, xstrdup("URL"), xstrdup(url)); +-- +1.8.3.1 + diff --git a/SOURCES/0168-testsuite-add-a-test-for-AlwaysExcludedElements.patch b/SOURCES/0168-testsuite-add-a-test-for-AlwaysExcludedElements.patch new file mode 100644 index 0000000..cf27812 --- /dev/null +++ b/SOURCES/0168-testsuite-add-a-test-for-AlwaysExcludedElements.patch @@ -0,0 +1,154 @@ +From 9a90a05c9000dc7d21afcfab6efbd26715aa3f08 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Mon, 8 Jun 2015 11:32:23 +0200 +Subject: [PATCH] testsuite: add a test for AlwaysExcludedElements + +Related: #362 + +Signed-off-by: Jakub Filak + +Conflicts: + tests/Makefile.am +--- + tests/Makefile.am | 3 +- + tests/global_config.at | 104 +++++++++++++++++++++++++++++++++++++++++++++++++ + tests/testsuite.at | 1 + + 3 files changed, 107 insertions(+), 1 deletion(-) + create mode 100644 tests/global_config.at + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index eaf1ac2..5ed7af6 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -43,7 +43,8 @@ TESTSUITE_AT = \ + xfuncs.at \ + string_list.at \ + ureport.at \ +- dump_dir.at ++ dump_dir.at \ ++ global_config.at + + EXTRA_DIST += $(TESTSUITE_AT) + TESTSUITE = $(srcdir)/testsuite +diff --git a/tests/global_config.at b/tests/global_config.at +new file mode 100644 +index 0000000..a6f5423 +--- /dev/null ++++ b/tests/global_config.at +@@ -0,0 +1,104 @@ ++# -*- Autotest -*- ++ ++AT_BANNER([global_config]) ++ ++## ------------------------ ## ++## always_excluded_elements ## ++## ------------------------ ## ++ ++AT_TESTFUN([always_excluded_elements], ++[[ ++#include "internal_libreport.h" ++#include ++#include ++ ++int main(int argc, char **argv) ++{ ++ g_verbose = 3; ++ char cwd_buf[PATH_MAX + 1]; ++ ++ static const char *dirs[] = { ++ NULL, ++ NULL, ++ }; ++ dirs[0] = getcwd(cwd_buf, sizeof(cwd_buf)); ++ ++ static int dir_flags[] = { ++ CONF_DIR_FLAG_NONE, ++ -1, ++ }; ++ ++ unlink("libreport.conf"); ++ FILE *lrf = fopen("libreport.conf", "wx"); ++ assert(lrf != NULL); ++ fclose(lrf); ++ ++ assert(load_global_configuration_from_dirs(dirs, dir_flags)); ++ ++ { ++ unsetenv("EXCLUDE_FROM_REPORT"); ++ string_vector_ptr_t excluded = get_global_always_excluded_elements(); ++ ++ assert(excluded != NULL); ++ assert(excluded[0] == NULL); ++ ++ string_vector_free(excluded); ++ } ++ ++ { ++ setenv("EXCLUDE_FROM_REPORT", "hostname, environ, uid", 1); ++ string_vector_ptr_t excluded = get_global_always_excluded_elements(); ++ ++ assert(excluded != NULL); ++ assert(strcmp(excluded[0], "hostname") == 0); ++ assert(strcmp(excluded[1], "environ") == 0); ++ assert(strcmp(excluded[2], "uid") == 0); ++ assert(excluded[3] == NULL); ++ ++ string_vector_free(excluded); ++ } ++ ++ free_global_configuration(); ++ ++ unlink("libreport.conf"); ++ lrf = fopen("libreport.conf", "wx"); ++ assert(lrf != NULL); ++ fprintf(lrf, "AlwaysExcludedElements = maps, var_log_messages, proc_pid_status"); ++ fclose(lrf); ++ ++ assert(load_global_configuration_from_dirs(dirs, dir_flags)); ++ ++ { ++ unsetenv("EXCLUDE_FROM_REPORT"); ++ string_vector_ptr_t excluded = get_global_always_excluded_elements(); ++ ++ assert(excluded != NULL); ++ assert(strcmp(excluded[0], "maps") == 0); ++ assert(strcmp(excluded[1], "var_log_messages") == 0); ++ assert(strcmp(excluded[2], "proc_pid_status") == 0); ++ assert(excluded[3] == NULL); ++ ++ string_vector_free(excluded); ++ } ++ ++ { ++ setenv("EXCLUDE_FROM_REPORT", "hostname, environ, uid", 1); ++ string_vector_ptr_t excluded = get_global_always_excluded_elements(); ++ ++ assert(excluded != NULL); ++ assert(strcmp(excluded[0], "hostname") == 0); ++ assert(strcmp(excluded[1], "environ") == 0); ++ assert(strcmp(excluded[2], "uid") == 0); ++ assert(strcmp(excluded[3], "maps") == 0); ++ assert(strcmp(excluded[4], "var_log_messages") == 0); ++ assert(strcmp(excluded[5], "proc_pid_status") == 0); ++ assert(excluded[6] == NULL); ++ ++ string_vector_free(excluded); ++ } ++ ++ unlink("libreport.conf"); ++ ++ return EXIT_SUCCESS; ++} ++]]) +diff --git a/tests/testsuite.at b/tests/testsuite.at +index 41107e7..91f0823 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -18,3 +18,4 @@ m4_include([report_python.at]) + m4_include([string_list.at]) + m4_include([ureport.at]) + m4_include([dump_dir.at]) ++m4_include([global_config.at]) +-- +1.8.3.1 + diff --git a/SOURCES/0169-lib-introduce-parser-of-ISO-date-strings.patch b/SOURCES/0169-lib-introduce-parser-of-ISO-date-strings.patch new file mode 100644 index 0000000..65be9bd --- /dev/null +++ b/SOURCES/0169-lib-introduce-parser-of-ISO-date-strings.patch @@ -0,0 +1,230 @@ +From 9e28f84f001e3fb26ab84b62f1c69ae56d63c6f8 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Fri, 12 Feb 2016 16:54:24 +0100 +Subject: [PATCH] lib: introduce parser of ISO date strings + +Make sure we can convert data back and forth without losing information. +The introduced function complements iso_date_string(). + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + po/POTFILES.in | 1 + + src/include/internal_libreport.h | 11 ++++ + src/lib/iso_date_string.c | 27 +++++++++- + tests/Makefile.am | 3 +- + tests/iso_date.at | 106 +++++++++++++++++++++++++++++++++++++++ + tests/testsuite.at | 1 + + 6 files changed, 147 insertions(+), 2 deletions(-) + create mode 100644 tests/iso_date.at + +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 30c9cb5..e952711 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -20,6 +20,7 @@ src/lib/create_dump_dir.c + src/lib/curl.c + src/lib/dump_dir.c + src/lib/event_config.c ++src/lib/iso_date_string.c + src/lib/ureport.c + src/lib/make_descr.c + src/lib/parse_options.c +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index b632803..78a17ae 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -644,6 +644,17 @@ char* get_environ(pid_t pid); + #define iso_date_string libreport_iso_date_string + char *iso_date_string(const time_t *pt); + #define LIBREPORT_ISO_DATE_STRING_SAMPLE "YYYY-MM-DD-hh:mm:ss" ++#define LIBREPORT_ISO_DATE_STRING_FORMAT "%Y-%m-%d-%H:%M:%S" ++ ++/* Parses date into integer UNIX time stamp ++ * ++ * @param date The parsed date string ++ * @param pt Return value ++ * @return 0 on success; otherwise non-0 number. -EINVAL if the parameter date ++ * does not match LIBREPORT_ISO_DATE_STRING_FORMAT ++ */ ++#define iso_date_string_parse libreport_iso_date_string_parse ++int iso_date_string_parse(const char *date, time_t *pt); + + enum { + MAKEDESC_SHOW_FILES = (1 << 0), +diff --git a/src/lib/iso_date_string.c b/src/lib/iso_date_string.c +index a7fb867..c0e567f 100644 +--- a/src/lib/iso_date_string.c ++++ b/src/lib/iso_date_string.c +@@ -33,7 +33,32 @@ char *iso_date_string(const time_t *pt) + if (ptm->tm_year+1900 < 0 || ptm->tm_year+1900 > 9999) + error_msg_and_die("Year=%d?? Aborting", ptm->tm_year+1900); + +- strftime(buf, sizeof(buf), "%Y-%m-%d-%H:%M:%S", ptm); ++ strftime(buf, sizeof(buf), LIBREPORT_ISO_DATE_STRING_FORMAT, ptm); + + return buf; + } ++ ++int iso_date_string_parse(const char *date, time_t *pt) ++{ ++ struct tm local; ++ const char *r = strptime(date, LIBREPORT_ISO_DATE_STRING_FORMAT, &local); ++ ++ if (r == NULL) ++ { ++ log_warning(_("String doesn't seem to be a date: '%s'"), date); ++ return -EINVAL; ++ } ++ if (*r != '\0') ++ { ++ log_warning(_("The date: '%s' has unrecognized suffix: '%s'"), date, r); ++ return -EINVAL; ++ } ++ if (local.tm_year < 70) ++ { ++ log_warning(_("The date: '%s' is out of UNIX time stamp range"), date); ++ return -EINVAL; ++ } ++ ++ *pt = mktime(&local); ++ return 0; ++} +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 5ed7af6..f36ab57 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -44,7 +44,8 @@ TESTSUITE_AT = \ + string_list.at \ + ureport.at \ + dump_dir.at \ +- global_config.at ++ global_config.at \ ++ iso_date.at + + EXTRA_DIST += $(TESTSUITE_AT) + TESTSUITE = $(srcdir)/testsuite +diff --git a/tests/iso_date.at b/tests/iso_date.at +new file mode 100644 +index 0000000..789b46d +--- /dev/null ++++ b/tests/iso_date.at +@@ -0,0 +1,106 @@ ++# -*- Autotest -*- ++ ++AT_BANNER([ISO_date]) ++ ++## --------------- ## ++## iso_date_string ## ++## --------------- ## ++ ++AT_TESTFUN([iso_date_string], ++[[#include "internal_libreport.h" ++#include ++#include ++#include ++ ++bool string_cmp(const char *orig, const char *other) ++{ ++ if (strcmp(orig, other) == 0) ++ return true; ++ ++ printf("'%s' != '%s'\n", orig, other); ++ return false; ++} ++ ++int main(void) ++{ ++ g_verbose=3; ++ ++ setenv("TZ", "", 1); ++ setenv("LC_ALL", "C", 1); ++ ++ time_t local[3]; ++ ++ time(&local[0]); ++ char *date = xstrdup(iso_date_string(NULL)); ++ ++ local[1] = local[0] + 1; ++ local[2] = local[0] + 2; ++ size_t i = 0; ++ for (; ARRAY_SIZE(local); ++i) ++ { ++ if (string_cmp(date, iso_date_string(local + i))) ++ break; ++ } ++ assert((i != ARRAY_SIZE(local)) || !"None of attempts hit result date"); ++ free(date); ++ ++ time_t y2k = 946684800; ++ assert(string_cmp("2000-01-01-00:00:00", iso_date_string(&y2k))); ++ ++ return 0; ++} ++ ++]]) ++ ++## --------------------- ## ++## iso_date_string_parse ## ++## --------------------- ## ++ ++AT_TESTFUN([parse_numbers], ++[[#include "internal_libreport.h" ++#include ++#include ++#include ++ ++int main(void) ++{ ++ g_verbose=3; ++ ++ setenv("TZ", "", 1); ++ setenv("LC_ALL", "C", 1); ++ ++ { ++ time_t result = 0; ++ assert(iso_date_string_parse("", &result) == -EINVAL); ++ } ++ ++ { ++ time_t result = 0; ++ assert(iso_date_string_parse("foo", &result) == -EINVAL); ++ } ++ ++ { ++ time_t result = 0; ++ assert(iso_date_string_parse("1969-12-31-23:59:59", &result) == -EINVAL); ++ } ++ ++ { ++ time_t result = 0; ++ assert(iso_date_string_parse("1970-01-01-00:00:00", &result) == 0); ++ assert(result == 0); ++ } ++ ++ { ++ time_t result = 0; ++ assert(iso_date_string_parse("2000-01-01-00:00:00", &result) == 0); ++ assert(result == 946684800 || !"Y2k"); ++ } ++ ++ { ++ time_t result = 0; ++ assert(iso_date_string_parse("2000-01-01-00:00:00fooo", &result) == -EINVAL); ++ } ++ ++ return 0; ++} ++]]) +diff --git a/tests/testsuite.at b/tests/testsuite.at +index 91f0823..e5e2f72 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -19,3 +19,4 @@ m4_include([string_list.at]) + m4_include([ureport.at]) + m4_include([dump_dir.at]) + m4_include([global_config.at]) ++m4_include([iso_date.at]) +-- +1.8.3.1 + diff --git a/SOURCES/0170-reported_to-add-a-function-formatting-reported_to-li.patch b/SOURCES/0170-reported_to-add-a-function-formatting-reported_to-li.patch new file mode 100644 index 0000000..79bc2b5 --- /dev/null +++ b/SOURCES/0170-reported_to-add-a-function-formatting-reported_to-li.patch @@ -0,0 +1,394 @@ +From 387e6fd8c974cf0c6b96b075baa968f86d6ed96f Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Mon, 19 Oct 2015 14:07:40 +0200 +Subject: [PATCH] reported_to: add a function formatting reported_to lines + +Use this function to ensure consistent reported_to formatting. + +Signed-off-by: Jakub Filak + +Conflicts: + po/POTFILES.in +--- + po/POTFILES.in | 1 + + src/include/dump_dir.h | 49 ++++++++++++++-- + src/lib/dump_dir.c | 12 ++++ + src/lib/reported_to.c | 55 +++++++++++++++--- + tests/reported_to.at | 148 ++++++++++++++++++++++++++++++++++++++++++++++++- + 5 files changed, 251 insertions(+), 14 deletions(-) + +diff --git a/po/POTFILES.in b/po/POTFILES.in +index e952711..1222c95 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -25,6 +25,7 @@ src/lib/ureport.c + src/lib/make_descr.c + src/lib/parse_options.c + src/lib/problem_data.c ++src/lib/reported_to.c + src/lib/run_event.c + src/plugins/abrt_rh_support.c + src/plugins/report_Bugzilla.xml.in +diff --git a/src/include/dump_dir.h b/src/include/dump_dir.h +index 092ddeb..fff23f2 100644 +--- a/src/include/dump_dir.h ++++ b/src/include/dump_dir.h +@@ -121,20 +121,57 @@ int dd_chown(struct dump_dir *dd, uid_t new_uid); + + + /* reported_to handling */ +-#define add_reported_to_data libreport_add_reported_to_data +-int add_reported_to_data(char **reported_to, const char *line); +-#define add_reported_to libreport_add_reported_to +-void add_reported_to(struct dump_dir *dd, const char *line); + struct report_result { + char *label; + char *url; + char *msg; + char *bthash; +- /* char *whole_line; */ +- /* time_t timestamp; */ ++ time_t timestamp; + /* ^^^ if you add more fields, don't forget to update free_report_result() */ + }; + typedef struct report_result report_result_t; ++ ++/* Appends a new unique line to the list of report results ++ * ++ * If the reported_to data already contains the given line, the line will not ++ * be added again. ++ * ++ * @param reported_to The data ++ * @param line The appended line ++ * @return 1 if the line was added at the end of the reported_to; otherwise 0. ++ */ ++#define add_reported_to_data libreport_add_reported_to_data ++int add_reported_to_data(char **reported_to, const char *line); ++ ++/* Appends a new unique entry to the list of report results ++ * ++ * result->label must be non-empty string which does not contain ':' character. ++ * ++ * The function converts the result to a valid reported_to line and calls ++ * add_reported_to_data(). ++ * ++ * @param reported_to The data ++ * @param result The appended entry ++ * @return -EINVAL if result->label is invalid; otherwise return value of ++ * add_reported_to_data ++ */ ++#define add_reported_to_entry_data libreport_add_reported_to_entry_data ++int add_reported_to_entry_data(char **reported_to, struct report_result *result); ++ ++/* This is a wrapper of add_reported_to_data which accepts 'struct dump_dir *' ++ * in the first argument instead of 'char **'. The added line is stored in ++ * 'reported_to' dump directory file. ++ */ ++#define add_reported_to libreport_add_reported_to ++void add_reported_to(struct dump_dir *dd, const char *line); ++ ++/* This is a wrapper of add_reported_to_entry_data which accepts 'struct ++ * dump_dir *' in the first argument instead of 'char **'. The added entry is ++ * stored in 'reported_to' dump directory file. ++ */ ++#define add_reported_to_entry libreport_add_reported_to_entry ++void add_reported_to_entry(struct dump_dir *dd, struct report_result *result); ++ + #define free_report_result libreport_free_report_result + void free_report_result(struct report_result *result); + #define find_in_reported_to_data libreport_find_in_reported_to_data +diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c +index a5cd93e..9b5b1b5 100644 +--- a/src/lib/dump_dir.c ++++ b/src/lib/dump_dir.c +@@ -1306,6 +1306,18 @@ void add_reported_to(struct dump_dir *dd, const char *line) + free(reported_to); + } + ++void add_reported_to_entry(struct dump_dir *dd, struct report_result *result) ++{ ++ if (!dd->locked) ++ error_msg_and_die("dump_dir is not opened"); /* bug */ ++ ++ char *reported_to = dd_load_text_ext(dd, FILENAME_REPORTED_TO, DD_FAIL_QUIETLY_ENOENT | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE); ++ if (add_reported_to_entry_data(&reported_to, result)) ++ dd_save_text(dd, FILENAME_REPORTED_TO, reported_to); ++ ++ free(reported_to); ++} ++ + report_result_t *find_in_reported_to(struct dump_dir *dd, const char *report_label) + { + char *reported_to = dd_load_text_ext(dd, FILENAME_REPORTED_TO, +diff --git a/src/lib/reported_to.c b/src/lib/reported_to.c +index bc0c2d2..3245ada 100644 +--- a/src/lib/reported_to.c ++++ b/src/lib/reported_to.c +@@ -45,6 +45,45 @@ int add_reported_to_data(char **reported_to, const char *line) + return 1; + } + ++int add_reported_to_entry_data(char **reported_to, struct report_result *result) ++{ ++ if (NULL == result->label || result->label[0] == '\0') ++ { ++ log_warning(_("Report result label mustn't be empty string.")); ++ return -EINVAL; ++ } ++ ++ if (strchr(result->label, ':') != NULL) ++ { ++ log_warning(_("Report result label mustn't contain ':' character.")); ++ return -EINVAL; ++ } ++ ++ struct strbuf *buf = strbuf_new(); ++ strbuf_append_strf(buf, "%s:", result->label); ++ ++ if (result->timestamp != 0) ++ { ++ const char *const time = iso_date_string(&(result->timestamp)); ++ strbuf_append_strf(buf, " TIME=%s", time); ++ } ++ ++ if (result->url != NULL) ++ strbuf_append_strf(buf, " URL=%s", result->url); ++ ++ if (result->bthash != NULL) ++ strbuf_append_strf(buf, " BTHASH=%s", result->bthash); ++ ++ /* MSG must be last because the value is delimited by new line character */ ++ if (result->msg != NULL) ++ strbuf_append_strf(buf, " MSG=%s", result->msg); ++ ++ const int r = add_reported_to_data(reported_to, buf->buf); ++ strbuf_free(buf); ++ ++ return r; ++} ++ + void free_report_result(struct report_result *result) + { + if (!result) +@@ -94,13 +133,15 @@ static report_result_t *parse_reported_line(const char *line, size_t label_len) + free(result->bthash); + result->bthash = xstrndup(line + 7, end - (line + 7)); + } +- //else +- //if (strncmp(line, "TIME=", 5) == 0) +- //{ +- // free(result->time); +- // result->time = foo(line + 5, end - (line + 5)); +- //} +- //... ++ if (strncmp(line, "TIME=", 5) == 0) ++ { ++ char *datetime = xstrndup(line + 5, end - (line + 5)); ++ const int r = iso_date_string_parse(datetime, &result->timestamp); ++ if (r != 0) ++ log_warning(_("Ignored invalid ISO date of report result '%s'"), result->label); ++ ++ free(datetime); ++ } + line = end; + continue; + } +diff --git a/tests/reported_to.at b/tests/reported_to.at +index 42af44f..ecf323d 100644 +--- a/tests/reported_to.at ++++ b/tests/reported_to.at +@@ -53,6 +53,138 @@ int main(void) + } + ]]) + ++ ++## -------------------------- ## ++## add_reported_to_entry_data ## ++## -------------------------- ## ++ ++AT_TESTFUN([add_reported_to_entry_data], ++[[ ++#include "internal_libreport.h" ++#include ++ ++bool string_cmp(const char *orig, const char *other) ++{ ++ if (strcmp(orig, other) == 0) ++ return true; ++ ++ printf("Exp: '%s'\nGot: '%s'\n", orig, other); ++ return false; ++} ++ ++int main(void) ++{ ++ g_verbose=3; ++ ++ setenv("TZ", "", 1); ++ setenv("LC_ALL", "C", 1); ++ ++ { ++ char *reported_to = NULL; ++ report_result_t result = { ++ .label = NULL, ++ }; ++ ++ assert(add_reported_to_entry_data(&reported_to, &result) == -EINVAL || !"0 string"); ++ } ++ ++ { ++ char *reported_to = NULL; ++ report_result_t result = { ++ .label = (char *)"", ++ }; ++ ++ assert(add_reported_to_entry_data(&reported_to, &result) == -EINVAL || !"Empty string"); ++ } ++ ++ { ++ char *reported_to = NULL; ++ report_result_t result = { ++ .label = (char *)"Fo:", ++ }; ++ ++ assert(add_reported_to_entry_data(&reported_to, &result) == -EINVAL || !"Contains :"); ++ } ++ ++ { ++ char *reported_to = NULL; ++ report_result_t result = { ++ .label = (char *)"Foo = blah", ++ }; ++ ++ assert(add_reported_to_entry_data(&reported_to, &result) || !"Label contains = and space"); ++ assert(reported_to != NULL); ++ assert(string_cmp("Foo = blah:\n", reported_to)); ++ } ++ ++ { ++ char *reported_to = NULL; ++ report_result_t result = { ++ .label = (char *)"OnlyURL", ++ .url = (char *)"http://test1.com", ++ }; ++ ++ assert(add_reported_to_entry_data(&reported_to, &result) || !"Only URL"); ++ assert(reported_to != NULL); ++ assert(string_cmp("OnlyURL: URL=http://test1.com\n", reported_to)); ++ } ++ ++ { ++ char *reported_to = NULL; ++ report_result_t result = { ++ .label = (char *)"OnlyBTHASH", ++ .bthash = (char *)"0123456789ABCDEF", ++ }; ++ ++ assert(add_reported_to_entry_data(&reported_to, &result) || !"Only BTHASH"); ++ assert(reported_to != NULL); ++ assert(string_cmp("OnlyBTHASH: BTHASH=0123456789ABCDEF\n", reported_to)); ++ } ++ ++ { ++ char *reported_to = NULL; ++ report_result_t result = { ++ .label = (char *)"OnlyMSG", ++ .msg = (char *)"Message = foo : blah!", ++ }; ++ ++ assert(add_reported_to_entry_data(&reported_to, &result) || !"Only MSG"); ++ assert(reported_to != NULL); ++ assert(string_cmp("OnlyMSG: MSG=Message = foo : blah!\n", reported_to)); ++ } ++ ++ { ++ char *reported_to = NULL; ++ report_result_t result = { ++ .label = (char *)"OnlyTIME", ++ /* 2000-01-01-00:00:00 */ ++ .timestamp = 946684800, ++ }; ++ ++ assert(add_reported_to_entry_data(&reported_to, &result) || !"Only MSG"); ++ assert(reported_to != NULL); ++ assert(string_cmp("OnlyTIME: TIME=2000-01-01-00:00:00\n", reported_to)); ++ } ++ ++ { ++ char *reported_to = NULL; ++ report_result_t result = { ++ .label = (char *)"Everything", ++ /* 2000-01-01-00:00:00 */ ++ .timestamp = 946684800, ++ .url = (char *)"http://epic.win", ++ .bthash = (char *)"0123456789ABCDEF", ++ .msg = (char *)"Exhausting libreport test!", ++ }; ++ ++ assert(add_reported_to_entry_data(&reported_to, &result) || !"Everything"); ++ assert(reported_to != NULL); ++ assert(string_cmp("Everything: TIME=2000-01-01-00:00:00 URL=http://epic.win BTHASH=0123456789ABCDEF MSG=Exhausting libreport test!\n", reported_to)); ++ } ++} ++]]) ++ ++ + ## ---------------------- ## + ## parse_reported_to_data ## + ## ---------------------- ## +@@ -87,6 +219,12 @@ bool parse_and_check(const char *reported_to, GList *expected) + goto finish; + } + ++ if(e->timestamp != c->timestamp) ++ { ++ printf("Timestamps: '%lld' != '%lld'\n", e->timestamp, c->timestamp); ++ goto finish; ++ } ++ + if(!((e->url == NULL && c->url == NULL) || strcmp(e->url, c->url) == 0)) + { + printf("'%s' != '%s'\n", e->url, c->url); +@@ -116,20 +254,26 @@ int main(void) + { + g_verbose=3; + ++ setenv("TZ", "", 1); ++ setenv("LC_ALL", "C", 1); ++ + #define FIRST_LINE "Bugzilla: URL=https://goodluck.org" ++#define FOURTH_LINE "Bugzilla: TIME=invalid URL=https://goodluck.org" + report_result_t first_result = { + .label = (char *)"Bugzilla", + .url = (char *)"https://goodluck.org" + }; + + #define SECOND_LINE "ABRT Server: BTHASH=81680083BIGBOOBS" ++#define FIFTH_LINE "ABRT Server: TIME=invalid BTHASH=81680083BIGBOOBS" + report_result_t second_result = { + .label = (char *)"ABRT Server", + .bthash = (char *)"81680083BIGBOOBS" + }; + +-#define THIRD_LINE "RHTSupport: TIME=12345678 URL=https://access.redhat.com/home MSG=The world's best IT support" ++#define THIRD_LINE "RHTSupport: TIME=2000-01-01-00:00:00 URL=https://access.redhat.com/home MSG=The world's best IT support" + report_result_t third_result = { ++ .timestamp = 946684800, + .label = (char *)"RHTSupport", + .url = (char *)"https://access.redhat.com/home", + .msg = (char *)"The world's best IT support", +@@ -137,9 +281,11 @@ int main(void) + + GList *expected = g_list_append(NULL, &first_result); + assert(parse_and_check(FIRST_LINE, expected)); ++ assert(parse_and_check(FOURTH_LINE, expected)); + + expected = g_list_append(expected, &second_result); + assert(parse_and_check(FIRST_LINE"\n"SECOND_LINE, expected)); ++ assert(parse_and_check(FIRST_LINE"\n"FIFTH_LINE, expected)); + + expected = g_list_append(expected, &third_result); + assert(parse_and_check(FIRST_LINE"\n"SECOND_LINE"\n"THIRD_LINE, expected)); +-- +1.8.3.1 + diff --git a/SOURCES/0171-plugins-port-reporters-to-add_reported_to_entry.patch b/SOURCES/0171-plugins-port-reporters-to-add_reported_to_entry.patch new file mode 100644 index 0000000..934d019 --- /dev/null +++ b/SOURCES/0171-plugins-port-reporters-to-add_reported_to_entry.patch @@ -0,0 +1,151 @@ +From eeae29b92017d42b7be967b0a67a4db24bafa80e Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Mon, 19 Oct 2015 14:24:52 +0200 +Subject: [PATCH] plugins: port reporters to add_reported_to_entry + +This commit should make the code less fragile. There is no need for this +commit, however I plan to make the '.label' member configurable through +environment variables. + +Signed-off-by: Jakub Filak + +Conflicts: + src/plugins/reporter-mantisbt.c +--- + src/lib/ureport.c | 21 ++++++++++++--------- + src/plugins/reporter-bugzilla.c | 7 ++++--- + src/plugins/reporter-kerneloops.c | 6 +++--- + src/plugins/reporter-mailx.c | 7 ++++--- + src/plugins/reporter-print.c | 7 ++++--- + src/plugins/reporter-rhtsupport.c | 12 +++++------- + 6 files changed, 32 insertions(+), 28 deletions(-) + +diff --git a/src/lib/ureport.c b/src/lib/ureport.c +index ebeaa8b..f89fe62 100644 +--- a/src/lib/ureport.c ++++ b/src/lib/ureport.c +@@ -644,15 +644,18 @@ ureport_server_response_save_in_dump_dir(struct ureport_server_response *resp, + + if (resp->urr_bthash) + { +- char *msg = xasprintf("uReport: BTHASH=%s", resp->urr_bthash); +- add_reported_to(dd, msg); +- free(msg); +- +- char *report_url = ureport_server_response_get_report_url(resp, config); +- msg = xasprintf("ABRT Server: URL=%s", report_url); +- add_reported_to(dd, msg); +- free(msg); +- free(report_url); ++ { ++ report_result_t rr = { .label = (char *)"uReport" }; ++ rr.bthash = resp->urr_bthash; ++ add_reported_to_entry(dd, &rr); ++ } ++ ++ { ++ report_result_t rr = { .label = (char *)"ABRT Server" }; ++ rr.url = ureport_server_response_get_report_url(resp, config); ++ add_reported_to_entry(dd, &rr); ++ free(rr.url); ++ } + } + + if (resp->urr_reported_to_list) +diff --git a/src/plugins/reporter-bugzilla.c b/src/plugins/reporter-bugzilla.c +index 097924e..d11fadf 100644 +--- a/src/plugins/reporter-bugzilla.c ++++ b/src/plugins/reporter-bugzilla.c +@@ -1351,9 +1351,10 @@ int main(int argc, char **argv) + struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (dd) + { +- char *msg = xasprintf("Bugzilla: URL=%s/show_bug.cgi?id=%u", rhbz.b_bugzilla_url, bz->bi_id); +- add_reported_to(dd, msg); +- free(msg); ++ report_result_t rr = { .label = (char *)"Bugzilla" }; ++ rr.url = xasprintf("%s/show_bug.cgi?id=%u", rhbz.b_bugzilla_url, bz->bi_id); ++ add_reported_to_entry(dd, &rr); ++ free(rr.url); + dd_close(dd); + } + +diff --git a/src/plugins/reporter-kerneloops.c b/src/plugins/reporter-kerneloops.c +index d312459..895f755 100644 +--- a/src/plugins/reporter-kerneloops.c ++++ b/src/plugins/reporter-kerneloops.c +@@ -118,9 +118,9 @@ static void report_to_kerneloops( + struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (dd) + { +- char *msg = xasprintf("kerneloops: URL=%s", submitURL); +- add_reported_to(dd, msg); +- free(msg); ++ report_result_t rr = { .label = (char *)"kerneloops" }; ++ rr.url = (char *)submitURL; ++ add_reported_to_entry(dd, &rr); + dd_close(dd); + } + +diff --git a/src/plugins/reporter-mailx.c b/src/plugins/reporter-mailx.c +index 92e78a4..54dc82e 100644 +--- a/src/plugins/reporter-mailx.c ++++ b/src/plugins/reporter-mailx.c +@@ -149,9 +149,10 @@ static void create_and_send_email( + struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (dd) + { +- char *msg = xasprintf("email: URL=mailto:%s", email_to); +- add_reported_to(dd, msg); +- free(msg); ++ report_result_t rr = { .label = (char *)"email" }; ++ rr.url = xasprintf("mailto:%s", email_to); ++ add_reported_to_entry(dd, &rr); ++ free(rr.url); + dd_close(dd); + } + } +diff --git a/src/plugins/reporter-print.c b/src/plugins/reporter-print.c +index 0c67a3c..90ed4c3 100644 +--- a/src/plugins/reporter-print.c ++++ b/src/plugins/reporter-print.c +@@ -134,9 +134,10 @@ int main(int argc, char **argv) + struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (dd) + { +- char *msg = xasprintf("file: URL=file://%s", output_file); +- add_reported_to(dd, msg); +- free(msg); ++ report_result_t rr = { .label = (char *)"file" }; ++ rr.url = xasprintf("file://%s", output_file); ++ add_reported_to_entry(dd, &rr); ++ free(rr.url); + dd_close(dd); + } + } +diff --git a/src/plugins/reporter-rhtsupport.c b/src/plugins/reporter-rhtsupport.c +index add0d6b..90988fc 100644 +--- a/src/plugins/reporter-rhtsupport.c ++++ b/src/plugins/reporter-rhtsupport.c +@@ -734,13 +734,11 @@ int main(int argc, char **argv) + struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (dd) + { +- char *msg = xasprintf("RHTSupport: TIME=%s URL=%s%s%s", +- iso_date_string(NULL), +- result->url, +- result->msg ? " MSG=" : "", result->msg ? result->msg : "" +- ); +- add_reported_to(dd, msg); +- free(msg); ++ struct report_result rr = { .label = (char *)"RHTSupport" }; ++ rr.url = result->url; ++ rr.msg = result->msg; ++ time(&rr.timestamp); ++ add_reported_to_entry(dd, &rr); + dd_close(dd); + if (result->msg) + log("%s", result->msg); +-- +1.8.3.1 + diff --git a/SOURCES/0172-lib-add-function-for-removing-userinfo-from-URIs.patch b/SOURCES/0172-lib-add-function-for-removing-userinfo-from-URIs.patch new file mode 100644 index 0000000..6c5ab67 --- /dev/null +++ b/SOURCES/0172-lib-add-function-for-removing-userinfo-from-URIs.patch @@ -0,0 +1,417 @@ +From 3e5fb3b7d678786dfd98b412e37f4757c7584aba Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Wed, 21 Oct 2015 14:20:04 +0200 +Subject: [PATCH] lib: add function for removing userinfo from URIs + +The function expects a valid URL. + +Signed-off-by: Jakub Filak + +Conflicts: + src/lib/Makefile.am +--- + src/include/internal_libreport.h | 22 ++++++ + src/lib/Makefile.am | 3 +- + src/lib/uriparser.c | 166 +++++++++++++++++++++++++++++++++++++++ + tests/Makefile.am | 3 +- + tests/testsuite.at | 1 + + tests/uriparser.at | 144 +++++++++++++++++++++++++++++++++ + 6 files changed, 337 insertions(+), 2 deletions(-) + create mode 100644 src/lib/uriparser.c + create mode 100644 tests/uriparser.at + +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index 78a17ae..651e339 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -1043,6 +1043,28 @@ void show_usage_and_die(const char *usage, const struct options *opt) NORETURN; + */ + struct abrt_post_state; + ++/* Decomposes uri to its base elements, removes userinfo out of the hostname and ++ * composes a new uri without userinfo. ++ * ++ * The function does not validate the url. ++ * ++ * @param uri The uri that might contain userinfo ++ * @param result The userinfo free uri will be store here. Cannot be null. Must ++ * be de-allocated by free. ++ * @param scheme Scheme of the uri. Can be NULL. Result can be NULL. Result ++ * must be de-allocated by free. ++ * @param hostname Hostname of the uri. Can be NULL. Result can be NULL. Result ++ * must be de-allocated by free. ++ * @param username Username of the uri. Can be NULL. Result can be NULL. Result ++ * must be de-allocated by free. ++ * @param password Password of the uri. Can be NULL. Result can be NULL. Result ++ * must be de-allocated by free. ++ * @param location Location of the uri. Can be NULL. Result is never NULL. Result ++ * must be de-allocated by free. ++ */ ++#define uri_userinfo_remove libreport_uri_userinfo_remove ++int uri_userinfo_remove(const char *uri, char **result, char **scheme, char **hostname, char **username, char **password, char **location); ++ + #ifdef __cplusplus + } + #endif +diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am +index 50142f7..b7e4781 100644 +--- a/src/lib/Makefile.am ++++ b/src/lib/Makefile.am +@@ -56,7 +56,8 @@ libreport_la_SOURCES = \ + config_item_info.c \ + xml_parser.c \ + libreport_init.c \ +- global_configuration.c ++ global_configuration.c \ ++ uriparser.c + + libreport_la_CPPFLAGS = \ + -I$(srcdir)/../include \ +diff --git a/src/lib/uriparser.c b/src/lib/uriparser.c +new file mode 100644 +index 0000000..01e9782 +--- /dev/null ++++ b/src/lib/uriparser.c +@@ -0,0 +1,166 @@ ++/* ++ Copyright (C) 2015 ABRT team ++ Copyright (C) 2015 RedHat Inc ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++*/ ++ ++#include "internal_libreport.h" ++ ++#include ++ ++int uri_userinfo_remove(const char *uri, char **result, char **scheme, char **hostname, char **username, char **password, char **location) ++{ ++ /* https://www.ietf.org/rfc/rfc3986.txt ++ * Appendix B. Parsing a URI Reference with a Regular Expression ++ * ++ * scheme = $2 ++ * authority = $4 ++ * location = $5 <- introduced by jfilak ++ * path = $6 ++ * query = $8 ++ * fragment = $10 ++ * 12 3 4 56 7 8 9 10 */ ++ const char *rfc3986_rx = "^(([^:/?#]+):)?(//([^/?#]*))?(([^?#]*)(\\?([^#]*))?(#(.*))?)$"; ++ regex_t re; ++ int r = regcomp(&re, rfc3986_rx, REG_EXTENDED); ++ assert(r == 0 || !"BUG: invalid regular expression"); ++ ++ regmatch_t matchptr[10]; ++ r = regexec(&re, uri, ARRAY_SIZE(matchptr), matchptr, 0); ++ if (r != 0) ++ { ++ log_debug("URI does not match RFC3986 regular expression."); ++ return -EINVAL; ++ } ++ ++ char *ptr = xzalloc((strlen(uri) + 1) * sizeof(char)); ++ *result = ptr; ++ if (scheme != NULL) ++ *scheme = NULL; ++ if (hostname != NULL) ++ *hostname = NULL; ++ if (username != NULL) ++ *username = NULL; ++ if (password != NULL) ++ *password = NULL; ++ if (location != NULL) ++ *location= NULL; ++ ++ /* https://www.ietf.org/rfc/rfc3986.txt ++ * 5.3. Component Recomposition ++ * ++ result = "" ++ ++ if defined(scheme) then ++ append scheme to result; ++ append ":" to result; ++ endif; ++ ++ if defined(authority) then ++ append "//" to result; ++ append authority to result; ++ endif; ++ ++ append path to result; ++ ++ if defined(query) then ++ append "?" to result; ++ append query to result; ++ endif; ++ ++ if defined(fragment) then ++ append "#" to result; ++ append fragment to result; ++ endif; ++ ++ return result; ++ */ ++ ++#define APPEND_MATCH(i, output) \ ++ if (matchptr[(i)].rm_so != -1) \ ++ { \ ++ size_t len = 0; \ ++ len = matchptr[(i)].rm_eo - matchptr[(i)].rm_so; \ ++ if (output) *output = xstrndup(uri + matchptr[(i)].rm_so, len); \ ++ strncpy(ptr, uri + matchptr[(i)].rm_so, len); \ ++ ptr += len; \ ++ } ++ ++ /* Append "scheme:" if defined */ ++ APPEND_MATCH(1, scheme); ++ ++ /* If authority is defined, append "//" */ ++ regmatch_t *match_authority = matchptr + 3; ++ if (match_authority->rm_so != -1) ++ { ++ strcat(ptr, "//"); ++ ptr += 2; ++ } ++ ++ ++match_authority; ++ /* If authority has address part, remove userinfo and add the address */ ++ if (match_authority->rm_so != -1) ++ { ++ size_t len = match_authority->rm_eo - match_authority->rm_so; ++ const char *authority = uri + match_authority->rm_so; ++ ++ /* Find the last '@'. Just for the case some used @ in username or ++ * password */ ++ size_t at = len; ++ while (at != 0) ++ { ++ if (authority[--at] != '@') ++ continue; ++ ++ /* Find the first ':' before @. There should not be more ':' but this ++ * is the most secure way -> avoid leaking an excerpt of a password ++ * containing ':'.*/ ++ size_t colon = 0; ++ while (colon < at) ++ { ++ if (authority[colon] != ':') ++ { ++ ++colon; ++ continue; ++ } ++ ++ if (password != NULL) ++ *password = xstrndup(authority + colon + 1, at - colon - 1); ++ ++ break; ++ } ++ ++ if (username != NULL) ++ *username = xstrndup(authority, colon); ++ ++ ++at; ++ break; ++ } ++ ++ len -= at; ++ ++ if (hostname != NULL) ++ *hostname = xstrndup(authority + at, len); ++ ++ strncpy(ptr, authority + at, len); ++ ptr += len; ++ } ++ ++ /* Append path, query and fragment or "" */ ++ APPEND_MATCH(5, location); ++ ++ return 0; ++} +diff --git a/tests/Makefile.am b/tests/Makefile.am +index f36ab57..c22958b 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -45,7 +45,8 @@ TESTSUITE_AT = \ + ureport.at \ + dump_dir.at \ + global_config.at \ +- iso_date.at ++ iso_date.at \ ++ uriparser.at + + EXTRA_DIST += $(TESTSUITE_AT) + TESTSUITE = $(srcdir)/testsuite +diff --git a/tests/testsuite.at b/tests/testsuite.at +index e5e2f72..72e0715 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -20,3 +20,4 @@ m4_include([ureport.at]) + m4_include([dump_dir.at]) + m4_include([global_config.at]) + m4_include([iso_date.at]) ++m4_include([uriparser.at]) +diff --git a/tests/uriparser.at b/tests/uriparser.at +new file mode 100644 +index 0000000..def021f +--- /dev/null ++++ b/tests/uriparser.at +@@ -0,0 +1,144 @@ ++# -*- Autotest -*- ++ ++AT_BANNER([uriparser]) ++ ++## ------------------- ## ++## uri_userinfo_remove ## ++## ------------------- ## ++ ++AT_TESTFUN([uri_userinfo_remove], ++[[#include "internal_libreport.h" ++#include ++#include ++#include ++ ++bool string_cmp(const char *message, const char *orig, const char *other) ++{ ++ if (orig == NULL && other != NULL) ++ { ++ printf("%s: expected NULL got '%s'\n", message, other); ++ return false; ++ } ++ ++ if (orig != NULL && other == NULL) ++ { ++ printf("%s: expected '%s' got NULL\n", message, orig); ++ return false; ++ } ++ ++ if (orig == NULL && other == NULL) ++ return true; ++ ++ if (strcmp(orig, other) == 0) ++ return true; ++ ++ printf("%s: '%s' != '%s'\n", message, orig, other); ++ return false; ++} ++ ++int test(int retval, const char *uri, const char *result, const char *scheme, const char *hostname, const char *username, const char *password, const char *location) ++{ ++ int e = 0; ++ const char *names[] = {"result", "scheme", "hostname", "username", "password", "location"} ; ++ char *outputs[6]; ++ const char *expected[6]; ++ ++ for (size_t i = 0; i < ARRAY_SIZE(outputs); ++i) ++ outputs[i] = (char *)0xDEADBEEF; ++ ++ expected[0] = result; ++ expected[1] = scheme; ++ expected[2] = hostname; ++ expected[3] = username; ++ expected[4] = password; ++ expected[5] = location; ++ ++ fprintf(stderr, "==== Testing: '%s'\n", uri); ++ fprintf(stdout, "==== Testing: '%s'\n", uri); ++ ++ int r = uri_userinfo_remove(uri, &outputs[0], &outputs[1], &outputs[2], &outputs[3], &outputs[4], &outputs[5]); ++ if (r != retval) ++ { ++ printf("Invalid retval %d != %d\n", retval, r); ++ ++e; ++ } ++ ++ if (r != -EINVAL) ++ { ++ for (size_t i = 0; i < ARRAY_SIZE(outputs); ++i) ++ { ++ if (outputs[i] == (char *)0xDEADBEEF) ++ { ++ printf("Not initialized argument '%s'\n", names[i]); ++ ++e; ++ } ++ else ++ { ++ e += !string_cmp(names[i], expected[i], outputs[i]); ++ free(outputs[i]); ++ outputs[i] = (char *)0xDEADBEEF; ++ } ++ } ++ } ++ else ++ { ++ for (size_t i = 0; i < ARRAY_SIZE(outputs); ++i) ++ { ++ if (outputs[i] != (char *)0xDEADBEEF) ++ { ++ printf("Touched argument '%s'\n", names[i]); ++ ++e; ++ } ++ } ++ } ++ ++ fprintf(stderr, "== Test without arguments\n"); ++ fprintf(stdout, "== Test without arguments\n"); ++ ++ ++ r = uri_userinfo_remove(uri, &outputs[0], NULL, NULL, NULL, NULL, NULL); ++ if (r != retval) ++ { ++ printf("Invalid retval without arguments: %d != %d\n", retval, r); ++ ++e; ++ } ++ ++ e += !string_cmp(names[0], result, outputs[0]); ++ free(outputs[0]); ++ ++ return e; ++} ++ ++int main(void) ++{ ++ g_verbose=3; ++ ++ int e = 0; ++ e += test( 0, "ftp://root:password@", "ftp://", "ftp:", "", "root", "password", ""); ++ e += test( 0, "ftp://root:password@/", "ftp:///", "ftp:", "", "root", "password", "/"); ++ e += test( 0, "ftp://root:password@/foo", "ftp:///foo", "ftp:", "", "root", "password", "/foo"); ++ e += test( 0, "ftp://@", "ftp://", "ftp:", "", "", NULL, ""); ++ e += test( 0, "ftp://@/", "ftp:///", "ftp:", "", "", NULL, "/"); ++ e += test( 0, "ftp://@/foo", "ftp:///foo", "ftp:", "", "", NULL, "/foo"); ++ e += test( 0, "ftp://:@", "ftp://", "ftp:", "", "", "", ""); ++ e += test( 0, "ftp://:@/", "ftp:///", "ftp:", "", "", "", "/"); ++ e += test( 0, "ftp://:@/foo", "ftp:///foo", "ftp:", "", "", "", "/foo"); ++ e += test( 0, "root:password", "root:password", "root:", NULL, NULL, NULL, "password"); ++ e += test( 0, "root:password@", "root:password@", "root:", NULL, NULL, NULL, "password@"); ++ e += test( 0, "ftp://root:password", "ftp://root:password", "ftp:", "root:password", NULL, NULL, ""); ++ e += test( 0, "scp:://root:password@localhost", "scp:://root:password@localhost", "scp:", NULL, NULL, NULL, "://root:password@localhost"); ++ e += test( 0, "scp:///root:password@localhost", "scp:///root:password@localhost", "scp:", "", NULL, NULL, "/root:password@localhost"); ++ e += test( 0, "ftp://root:password/", "ftp://root:password/", "ftp:", "root:password", NULL, NULL, "/"); ++ e += test( 0, "scp://B@rt:P@ssw0rd@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "B@rt", "P@ssw0rd", "/t@rget1?query=foo#head"); ++ e += test( 0, "scp://B@rt@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "B@rt", NULL, "/t@rget1?query=foo#head"); ++ e += test( 0, "scp://B@rt:@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "B@rt", "", "/t@rget1?query=foo#head"); ++ e += test( 0, "scp://:P@ssw0rd@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "", "P@ssw0rd", "/t@rget1?query=foo#head"); ++ e += test( 0, "scp://@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "", NULL, "/t@rget1?query=foo#head"); ++ e += test( 0, "scp://:@localhost/t@rget1?query=foo#head", "scp://localhost/t@rget1?query=foo#head", "scp:", "localhost", "", "", "/t@rget1?query=foo#head"); ++ e += test( 0, "password/root", "password/root", NULL, NULL, NULL, NULL, "password/root"); ++ e += test( 0, "/password/root", "/password/root", NULL, NULL, NULL, NULL, "/password/root"); ++ e += test( 0, "://root:passowrd@localhost", "://root:passowrd@localhost", NULL, NULL, NULL, NULL, "://root:passowrd@localhost"); ++ ++ return e; ++} ++]]) +-- +1.8.3.1 + diff --git a/SOURCES/0173-uploader-save-remote-name-in-reported_to.patch b/SOURCES/0173-uploader-save-remote-name-in-reported_to.patch new file mode 100644 index 0000000..1d44e60 --- /dev/null +++ b/SOURCES/0173-uploader-save-remote-name-in-reported_to.patch @@ -0,0 +1,130 @@ +From 41c56564e18a303a75584f1f65626d37d7ee5c54 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Mon, 19 Oct 2015 14:46:16 +0200 +Subject: [PATCH] uploader: save remote name in reported_to + +All other plugins do so. We also need this commit to be able to attach +URLs to uploaded dump directories to uReport on FAF servers. + +Signed-off-by: Jakub Filak +--- + src/plugins/reporter-upload.c | 55 ++++++++++++++++++++++++++++++------------- + 1 file changed, 38 insertions(+), 17 deletions(-) + +diff --git a/src/plugins/reporter-upload.c b/src/plugins/reporter-upload.c +index b148d95..971c5c1 100644 +--- a/src/plugins/reporter-upload.c ++++ b/src/plugins/reporter-upload.c +@@ -32,7 +32,7 @@ static char *ask_url(const char *message) + return url; + } + +-static int interactive_upload_file(const char *url, const char *file_name) ++static int interactive_upload_file(const char *url, const char *file_name, char **remote_name) + { + post_state_t *state = new_post_state(POST_WANT_ERROR_MSG); + state->username = getenv("Upload_Username"); +@@ -53,19 +53,24 @@ static int interactive_upload_file(const char *url, const char *file_name) + } + } + +- char *remote_name = upload_file_ext(state, url, file_name, UPLOAD_FILE_HANDLE_ACCESS_DENIALS); +- int result = (remote_name == NULL); /* error if NULL */ ++ char *tmp = upload_file_ext(state, url, file_name, UPLOAD_FILE_HANDLE_ACCESS_DENIALS); ++ ++ if (remote_name) ++ *remote_name = tmp; ++ else ++ free(tmp); + +- free(remote_name); + free(password_inp); + free_post_state(state); + +- return result; ++ /* return 0 on success */ ++ return tmp == NULL; + } + + static int create_and_upload_archive( + const char *dump_dir_name, +- map_string_t *settings) ++ const char *url, ++ char **remote_name) + { + int result = 1; /* error */ + +@@ -78,11 +83,6 @@ static int create_and_upload_archive( + tempfile = concat_path_basename(LARGE_DATA_TMP_DIR, dump_dir_name); + tempfile = append_to_malloced_string(tempfile, ".tar.gz"); + +- const char* opt = getenv("Upload_URL"); +- if (!opt) +- opt = get_map_string_item_or_empty(settings, "URL"); +- char *url = opt[0] != '\0' ? xstrdup(opt) : ask_url(_("Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:")); +- + string_vector_ptr_t exclude_from_report = get_global_always_excluded_elements(); + struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (!dd) +@@ -102,17 +102,16 @@ static int create_and_upload_archive( + /* Upload the archive */ + /* Upload from /tmp to /tmp + deletion -> BAD, exclude this possibility */ + if (url && url[0] && strcmp(url, "file://"LARGE_DATA_TMP_DIR"/") != 0) +- result = interactive_upload_file(url, tempfile); ++ result = interactive_upload_file(url, tempfile, remote_name); + else + { + result = 0; /* success */ + log(_("Archive is created: '%s'"), tempfile); +- free(tempfile); ++ *remote_name = tempfile; + tempfile = NULL; + } + + ret: +- free(url); + dd_close(dd); + + if (tempfile) +@@ -192,13 +191,35 @@ int main(int argc, char **argv) + //ExcludeFiles = foo,bar*,b*z + + map_string_t *settings = new_map_string(); +- if (url) +- replace_map_string_item(settings, xstrdup("URL"), xstrdup(url)); + if (conf_file) + load_conf_file(conf_file, settings, /*skip key w/o values:*/ false); + +- int result = create_and_upload_archive(dump_dir_name, settings); ++ char *input_url = NULL; ++ const char *conf_url = getenv("Upload_URL"); ++ if (!conf_url || conf_url[0] == '\0') ++ conf_url = url; ++ if (!conf_url || conf_url[0] == '\0') ++ conf_url = get_map_string_item_or_empty(settings, "URL"); ++ if (!conf_url || conf_url[0] == '\0') ++ conf_url = input_url = ask_url(_("Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:")); ++ ++ char *remote_name = NULL; ++ const int result = create_and_upload_archive(dump_dir_name, conf_url, &remote_name); ++ if (result != 0) ++ goto finito; ++ ++ struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); ++ if (dd) ++ { ++ report_result_t rr = { .label = (char *)"upload" }; ++ rr.url = remote_name, ++ add_reported_to_entry(dd, &rr); ++ dd_close(dd); ++ } ++ free(remote_name); + ++finito: ++ free(input_url); + free_map_string(settings); + return result; + } +-- +1.8.3.1 + diff --git a/SOURCES/0174-curl-return-URLs-without-userinfo.patch b/SOURCES/0174-curl-return-URLs-without-userinfo.patch new file mode 100644 index 0000000..ca6ac05 --- /dev/null +++ b/SOURCES/0174-curl-return-URLs-without-userinfo.patch @@ -0,0 +1,170 @@ +From e474cf3e6f937f0bc26a0f4171bacb468ebd2241 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Wed, 21 Oct 2015 14:40:28 +0200 +Subject: [PATCH] curl: return URLs without userinfo + +All clients should work with URLs without userinfo. This commit will +ensure that. + +This commit also changes log messages from: + + Sending /var/tmp/problem_dir.tar.gz to scp://localhost/tmp/tmp.x5WVgpgUsY/target/ + Error while uploading: 'curl_easy_perform: Login denied' + Please enter user name for 'scp://localhost/tmp/tmp.x5WVgpgUsY/target/': root + Please enter password for 'root': + Sending /var/tmp/problem_dir.tar.gz to scp://localhost/tmp/tmp.x5WVgpgUsY/target/ + Successfully sent /var/tmp/problem_dir.tar.gz to scp://localhost/tmp/tmp.x5WVgpgUsY/target/ + +to: + + Sending /var/tmp/problem_dir.tar.gz to scp://localhost + Error while uploading: 'curl_easy_perform: Login denied' + Please enter user name for 'scp://localhost': root + Please enter password for 'scp://root@localhost': + Sending /var/tmp/problem_dir.tar.gz to scp://localhost + Successfully created scp://localhost/tmp/tmp.x5WVgpgUsY/target/problem_dir.tar.gz + +Signed-off-by: Jakub Filak +--- + src/include/libreport_curl.h | 9 ++++++ + src/lib/curl.c | 67 +++++++++++++++++++++++++++++++------------- + 2 files changed, 56 insertions(+), 20 deletions(-) + +diff --git a/src/include/libreport_curl.h b/src/include/libreport_curl.h +index 812738c..b9277ad 100644 +--- a/src/include/libreport_curl.h ++++ b/src/include/libreport_curl.h +@@ -128,6 +128,15 @@ enum { + #define upload_file libreport_upload_file + char *upload_file(const char *url, const char *filename); + ++/* Uploads filename to url. ++ * ++ * If url does not ends with '/', base name of filename will be amended. ++ * ++ * Fails if the url does not have scheme or hostname. ++ * ++ * @return Resulting URL on success (the URL does not contain userinfo); ++ * otherwise NULL. ++ */ + #define upload_file_ext libreport_upload_file_ext + char *upload_file_ext(post_state_t *post_state, + const char *url, +diff --git a/src/lib/curl.c b/src/lib/curl.c +index 606d9ea..a64c464 100644 +--- a/src/lib/curl.c ++++ b/src/lib/curl.c +@@ -600,27 +600,48 @@ char *upload_file_ext(post_state_t *state, const char *url, const char *filename + { + /* we don't want to print the whole url as it may contain password + * rhbz#856960 +- * there can be '@' in the login or password so let's try to find the +- * first '@' from the end ++ * ++ * jfilak: ++ * We want to print valid URLs in useful messages. ++ * ++ * The old code had this approach: ++ * there can be '@' in the login or password so let's try to find the ++ * first '@' from the end ++ * ++ * The new implementation decomposes URI to its base elements and uses only ++ * scheme and hostname for the logging purpose. These elements should not ++ * contain any sensitive information. + */ +- const char *clean_url = strrchr(url, '@'); +- if (clean_url) +- clean_url++; +- else +- clean_url = url; +- +- char *whole_url; +- unsigned len = strlen(url); +- if (len > 0 && url[len-1] == '/') +- whole_url = concat_path_file(url, strrchr(filename, '/') ? : filename); +- else +- whole_url = xstrdup(url); +- +- + const char *username_bck = state->username; + const char *password_bck = state->password; ++ ++ char *whole_url = NULL; ++ char *scheme = NULL; ++ char *hostname = NULL; + char *username = NULL; + char *password = NULL; ++ char *clean_url = NULL; ++ ++ if (uri_userinfo_remove(url, &clean_url, &scheme, &hostname, &username, &password, NULL) != 0) ++ goto finito; ++ ++ if (scheme == NULL || hostname == NULL) ++ { ++ log_warning(_("Ingoring URL without scheme and hostname")); ++ goto finito; ++ } ++ ++ if (username && (state->username == NULL || state->username[0] == '\0')) ++ { ++ state->username = username; ++ state->password = password; ++ } ++ ++ unsigned len = strlen(clean_url); ++ if (len > 0 && clean_url[len-1] == '/') ++ whole_url = concat_path_file(clean_url, strrchr(filename, '/') ? : filename); ++ else ++ whole_url = xstrdup(clean_url); + + /* work around bug in libssh2(curl with scp://) + * libssh2_aget_disconnect() calls close(0) +@@ -634,7 +655,9 @@ char *upload_file_ext(post_state_t *state, const char *url, const char *filename + */ + do_post: + +- log(_("Sending %s to %s"), filename, clean_url); ++ /* Do not include the path part of the URL as it can contain sensitive data ++ * in case of typos */ ++ log(_("Sending %s to %s//%s"), filename, scheme, hostname); + post(state, + whole_url, + /*content_type:*/ "application/octet-stream", +@@ -658,13 +681,13 @@ char *upload_file_ext(post_state_t *state, const char *url, const char *filename + (state->curl_result == CURLE_LOGIN_DENIED + || state->curl_result == CURLE_REMOTE_ACCESS_DENIED)) + { +- char *msg = xasprintf(_("Please enter user name for '%s':"), clean_url); ++ char *msg = xasprintf(_("Please enter user name for '%s//%s':"), scheme, hostname); + free(username); + username = ask(msg); + free(msg); + if (username != NULL && username[0] != '\0') + { +- msg = xasprintf(_("Please enter password for '%s':"), username); ++ msg = xasprintf(_("Please enter password for '%s//%s@%s':"), scheme, username, hostname); + free(password); + password = ask_password(msg); + free(msg); +@@ -687,13 +710,17 @@ char *upload_file_ext(post_state_t *state, const char *url, const char *filename + else + { + /* This ends up a "reporting status message" in abrtd */ +- log(_("Successfully sent %s to %s"), filename, clean_url); ++ log(_("Successfully created %s"), whole_url); + } + + close(stdin_bck); + ++finito: + free(password); + free(username); ++ free(hostname); ++ free(scheme); ++ free(clean_url); + + state->username = username_bck; + state->password = password_bck; +-- +1.8.3.1 + diff --git a/SOURCES/0175-ureport-enable-attaching-of-arbitrary-values.patch b/SOURCES/0175-ureport-enable-attaching-of-arbitrary-values.patch new file mode 100644 index 0000000..d15e7af --- /dev/null +++ b/SOURCES/0175-ureport-enable-attaching-of-arbitrary-values.patch @@ -0,0 +1,196 @@ +From 9a37ec67fc849a8fd9862d5e03c3066b7a37ba26 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Fri, 12 Feb 2016 17:23:32 +0100 +Subject: [PATCH] ureport: enable attaching of arbitrary values + +Whenever we introduce a new report type we need to teach +reporter-ureport to attach its report results to micro-reports. + +This commit adds support for attaching arbitrary values, so we will not +need to modify reporter-ureport when a new reporter is added. + +Two operating modes are being introduced. +The mode for attaching random values: +$ reporter-ureport -l "foo" -T "blah" -A + +and the mode for attaching the report results +(data from reported_to file): +$ reporter-ureport -L "URL" -T "url" -r "upload" -A + +'-v', '--value' is taken by '--verbose'. +'-d', '--data' is taken by '--directory'. +Hence I used '-l', '--value'. + +'-t', '--type' is taken by '--auth'. +Hence I used '-T', '--type'. + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + doc/reporter-ureport.txt | 18 +++++++++++- + src/plugins/reporter-ureport.c | 66 ++++++++++++++++++++++++++++++++++++++++-- + 2 files changed, 81 insertions(+), 3 deletions(-) + +diff --git a/doc/reporter-ureport.txt b/doc/reporter-ureport.txt +index 420adcf..e896d9d 100644 +--- a/doc/reporter-ureport.txt ++++ b/doc/reporter-ureport.txt +@@ -7,7 +7,7 @@ reporter-ureport - Reports ABRT problems in format of micro report + + SYNOPSIS + -------- +-'reporter-ureport' [-v] [-c CONFFILE] [-u URL] [-k] [-A -a bthash -B -b bug-id -E -e email] [-r] [-d DIR] ++'reporter-ureport' [-v] [-c CONFFILE] [-u URL] [-k] [-A -a bthash -B -b bug-id -E -e email -l DATA -L FIELD -T TYPE -r RESULT_TYPE] [-d DIR] + + DESCRIPTION + ----------- +@@ -119,6 +119,22 @@ OPTIONS + -i AUTH_DATA_ITEMS:: + List of dump dir files included in the 'auth' uReport object. + ++-l DATA:: ++ Attach DATA (requires -T and -a|-A) ++ ++-L REPORT_RESULT_FILED:: ++ Attach the value of REPORT_RESULT_FILED member of the last report result ++ indentified by REPORT_RESULT_TYPE passed with -r option ++ (requires -r, -T and -a|-A). ++ ++-T ATTACHMENT_TYPE:: ++ Specifies the attachment type when attaching an arbitrary data to BTHASH ++ (takes effect only with -l or -L) ++ ++-r REPORT_RESULT_TYP:: ++ Used to single out report results ('reported_to' file lines) when attaching ++ an arbitrary data to BTHASH (takes effect only with -L) ++ + ENVIRONMENT VARIABLES + --------------------- + Environment variables take precedence over values provided in +diff --git a/src/plugins/reporter-ureport.c b/src/plugins/reporter-ureport.c +index e0c2281..6dcce81 100644 +--- a/src/plugins/reporter-ureport.c ++++ b/src/plugins/reporter-ureport.c +@@ -61,6 +61,11 @@ int main(int argc, char **argv) + int rhbz_bug_from_rt = 0; + const char *email_address = NULL; + int email_address_from_env = 0; ++ char *attach_value = NULL; ++ char *attach_value_from_rt = NULL; ++ char *attach_value_from_rt_data = NULL; ++ char *report_result_type = NULL; ++ char *attach_type = NULL; + struct dump_dir *dd = NULL; + struct options program_options[] = { + OPT__VERBOSE(&g_verbose), +@@ -84,11 +89,24 @@ int main(int argc, char **argv) + _("attach RHBZ bug (requires -a|-A, conflicts with -B)")), + OPT_BOOL('B', "bug-id-rt", &rhbz_bug_from_rt, + _("attach last RHBZ bug from reported_to (requires -a|-A, conflicts with -b)")), ++ ++ /* va l ue */ ++ OPT_STRING('l', "value", &attach_value, "DATA", ++ _("attach value (requires -a|-A and -T, conflicts with -L)")), ++ OPT_STRING('L', "value-rt", &attach_value_from_rt, "FIELD", ++ _("attach data of FIELD [URL] of the last report result (requires -a|-A, -r and -T, conflicts with -l)")), ++ ++ OPT_STRING('r', "report-result-type", &report_result_type, "REPORT_RESULT_TYPE", ++ _("use REPORT_RESULT_TYPE when looking for FIELD in reported_to (used only with -L)")), ++ OPT_STRING('T', "type", &attach_type, "ATTACHMENT_TYPE", ++ _("attach DATA as ureporte attachment ATTACHMENT_TYPE (used only with -l|-L)")), + OPT_END(), + }; + + const char *program_usage_string = _( + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" ++ " [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-d DIR]\n" ++ " [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" + "\n" +@@ -130,7 +148,24 @@ int main(int argc, char **argv) + if (email_address && email_address_from_env) + error_msg_and_die("You need to pass either -e bthash or -E"); + +- if (ureport_hash_from_rt || rhbz_bug_from_rt) ++ if (attach_value && attach_value_from_rt) ++ error_msg_and_die("You need to pass either -l url or -L"); ++ ++ if ((attach_value || attach_value_from_rt) && attach_type == NULL) ++ error_msg_and_die("You need to pass -T together with -l and -L"); ++ ++ if (attach_value_from_rt) ++ { ++ if (report_result_type == NULL) ++ error_msg_and_die("You need to pass -r together with -L"); ++ ++ /* If you introduce a new recognized value, don't forget to update ++ * the documentation and the conditions below. */ ++ if (strcmp(attach_value_from_rt, "URL") != 0) ++ error_msg_and_die("-L accepts only 'URL'"); ++ } ++ ++ if (ureport_hash_from_rt || rhbz_bug_from_rt || attach_value_from_rt) + { + dd = dd_opendir(dump_dir_path, DD_OPEN_READONLY); + if (!dd) +@@ -168,6 +203,25 @@ int main(int argc, char **argv) + free_report_result(bz_result); + } + ++ if (attach_value_from_rt) ++ { ++ report_result_t *result = find_in_reported_to(dd, report_result_type); ++ ++ if (!result) ++ error_msg_and_die(_("This problem has not been reported to '%s'."), report_result_type); ++ ++ /* If you introduce a new attach_value_from_rt recognized value, ++ * this condition will become invalid. */ ++ if (!result->url) ++ error_msg_and_die(_("The report result '%s' is missing URL."), report_result_type); ++ ++ /* Avoid the need to duplicate the string. */ ++ attach_value = attach_value_from_rt_data = result->url; ++ result->url = NULL; ++ ++ free_report_result(result); ++ } ++ + dd_close(dd); + } + +@@ -181,7 +235,7 @@ int main(int argc, char **argv) + + if (ureport_hash) + { +- if (rhbz_bug < 0 && !email_address) ++ if (rhbz_bug < 0 && !email_address && !attach_value) + error_msg_and_die(_("You need to specify bug ID, contact email or both")); + + if (rhbz_bug >= 0) +@@ -196,6 +250,12 @@ int main(int argc, char **argv) + goto finalize; + } + ++ if (attach_value) ++ { ++ if (ureport_attach_string(ureport_hash, attach_type, attach_value, &config)) ++ goto finalize; ++ } ++ + ret = 0; + goto finalize; + } +@@ -239,6 +299,8 @@ int main(int argc, char **argv) + ureport_server_response_free(response); + + finalize: ++ free(attach_value_from_rt_data); ++ + if (config.ur_prefs.urp_auth_items == auth_items) + config.ur_prefs.urp_auth_items = NULL; + +-- +1.8.3.1 + diff --git a/SOURCES/0176-curl-fix-typo-Ingoring-Ignoring.patch b/SOURCES/0176-curl-fix-typo-Ingoring-Ignoring.patch new file mode 100644 index 0000000..19fa29f --- /dev/null +++ b/SOURCES/0176-curl-fix-typo-Ingoring-Ignoring.patch @@ -0,0 +1,26 @@ +From d0e73f6e757afa9dfd870ab5869808c5b922013e Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Thu, 10 Mar 2016 15:31:25 +0100 +Subject: [PATCH] curl: fix typo Ingoring -> Ignoring + +Signed-off-by: Matej Habrnal +--- + src/lib/curl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/lib/curl.c b/src/lib/curl.c +index a64c464..b736dd2 100644 +--- a/src/lib/curl.c ++++ b/src/lib/curl.c +@@ -627,7 +627,7 @@ char *upload_file_ext(post_state_t *state, const char *url, const char *filename + + if (scheme == NULL || hostname == NULL) + { +- log_warning(_("Ingoring URL without scheme and hostname")); ++ log_warning(_("Ignoring URL without scheme and hostname")); + goto finito; + } + +-- +1.8.3.1 + diff --git a/SOURCES/0177-testsuite-add-test-for-uid_in_group.patch b/SOURCES/0177-testsuite-add-test-for-uid_in_group.patch new file mode 100644 index 0000000..02e1e9a --- /dev/null +++ b/SOURCES/0177-testsuite-add-test-for-uid_in_group.patch @@ -0,0 +1,54 @@ +From eed8e1ded537327132a7cec7dec7af75ddea5656 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Wed, 16 Dec 2015 10:54:25 +0100 +Subject: [PATCH] testsuite: add test for uid_in_group() + +Signed-off-by: Matej Habrnal +--- + tests/dump_dir.at | 33 +++++++++++++++++++++++++++++++++ + 1 file changed, 33 insertions(+) + +diff --git a/tests/dump_dir.at b/tests/dump_dir.at +index fb8c7ce..70a97e6 100644 +--- a/tests/dump_dir.at ++++ b/tests/dump_dir.at +@@ -322,3 +322,36 @@ int main(void) + return 0; + } + ]]) ++ ++## ------------ ## ++## uid_in_group ## ++## ------------ ## ++ ++AT_TESTFUN([uid_in_group], ++[[ ++#include "internal_libreport.h" ++#include ++#include ++ ++int main(void) ++{ ++ // not existing user id ++ assert(uid_in_group((uid_t)-1, 0) == false); ++ ++ // root user is member of root group ++ assert(uid_in_group(0, 0) == true); ++ ++ // user root isn't member of not existing group ++ assert(uid_in_group(0, (gid_t)-1) == false); ++ ++ // user root isn't member of nobody group ++ gid_t nobody_gid = (gid_t)-1; ++ struct group *gr = getgrnam("nobody"); ++ if (gr) ++ nobody_gid = gr->gr_gid; ++ ++ assert(uid_in_group(0, nobody_gid) == false); ++ ++ return 0; ++} ++]]) +-- +1.8.3.1 + diff --git a/SOURCES/0178-dd-make-function-uid_in_group-public.patch b/SOURCES/0178-dd-make-function-uid_in_group-public.patch new file mode 100644 index 0000000..affa655 --- /dev/null +++ b/SOURCES/0178-dd-make-function-uid_in_group-public.patch @@ -0,0 +1,58 @@ +From 444c282364a9d25f30942ceffdd5a52dd2b7183d Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Mon, 14 Dec 2015 16:21:29 +0100 +Subject: [PATCH] dd: make function uid_in_group() public + +Related to rhbz#1277849 + +Signed-off-by: Matej Habrnal +--- + src/include/internal_libreport.h | 9 +++++++++ + src/lib/dump_dir.c | 4 +--- + 2 files changed, 10 insertions(+), 3 deletions(-) + +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index 651e339..70eb299 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -816,6 +816,15 @@ int delete_dump_dir_possibly_using_abrtd(const char *dump_dir_name); + #define steal_directory libreport_steal_directory + struct dump_dir *steal_directory(const char *base_dir, const char *dump_dir_name); + ++/* Resolves if the given user is in given group ++ * ++ * @param uid user ID ++ * @param gid group ID ++ * @returns TRUE in case the user is in the group otherwise returns FALSE ++ */ ++#define uid_in_group libreport_uid_in_group ++bool uid_in_group(uid_t uid, gid_t gid); ++ + /* Tries to open dump_dir_name with writing access. If function needs to steal + * directory calls ask_continue(new base dir, dump dir) callback to ask user + * for permission. If ask_continue param is NULL the function thinks that an +diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c +index 9b5b1b5..1e6ce64 100644 +--- a/src/lib/dump_dir.c ++++ b/src/lib/dump_dir.c +@@ -1375,8 +1375,7 @@ void delete_dump_dir(const char *dirname) + } + } + +-#if DUMP_DIR_OWNED_BY_USER == 0 +-static bool uid_in_group(uid_t uid, gid_t gid) ++bool uid_in_group(uid_t uid, gid_t gid) + { + char **tmp; + struct passwd *pwd = getpwuid(uid); +@@ -1403,7 +1402,6 @@ static bool uid_in_group(uid_t uid, gid_t gid) + log_info("user %s DOESN'T belong to group: %s", pwd->pw_name, grp->gr_name); + return FALSE; + } +-#endif + + int fdump_dir_stat_for_uid(int dir_fd, uid_t uid) + { +-- +1.8.3.1 + diff --git a/SOURCES/0179-curl-add-possibility-to-configure-SSH-keys.patch b/SOURCES/0179-curl-add-possibility-to-configure-SSH-keys.patch new file mode 100644 index 0000000..4ebb106 --- /dev/null +++ b/SOURCES/0179-curl-add-possibility-to-configure-SSH-keys.patch @@ -0,0 +1,50 @@ +From 6cfe559cb537c2f34837c5d9a40c80b2cda37d4c Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Mon, 9 Nov 2015 13:23:55 +0100 +Subject: [PATCH] curl: add possibility to configure SSH keys + +Related to rhbz#1289513 + +Signed-off-by: Matej Habrnal + +Conflicts: + src/lib/curl.c +--- + src/include/libreport_curl.h | 3 +++ + src/lib/curl.c | 6 ++++++ + 2 files changed, 9 insertions(+) + +diff --git a/src/include/libreport_curl.h b/src/include/libreport_curl.h +index b9277ad..ec2e0b3 100644 +--- a/src/include/libreport_curl.h ++++ b/src/include/libreport_curl.h +@@ -38,6 +38,9 @@ typedef struct post_state { + const char *client_cert_path; + const char *client_key_path; + const char *cert_authority_cert_path; ++ /* SSH key files */ ++ const char *client_ssh_public_keyfile; ++ const char *client_ssh_private_keyfile; + /* Results of POST transaction: */ + int http_resp_code; + /* cast from CURLcode enum. +diff --git a/src/lib/curl.c b/src/lib/curl.c +index a64c464..2cc1058 100644 +--- a/src/lib/curl.c ++++ b/src/lib/curl.c +@@ -351,6 +351,12 @@ post(post_state_t *state, + xcurl_easy_setopt_ptr(handle, CURLOPT_PASSWORD, (state->password ? state->password : "")); + } + ++ /* set SSH public and private keyfile if configured */ ++ if (state->client_ssh_public_keyfile) ++ xcurl_easy_setopt_ptr(handle, CURLOPT_SSH_PUBLIC_KEYFILE, state->client_ssh_public_keyfile); ++ if (state->client_ssh_private_keyfile) ++ xcurl_easy_setopt_ptr(handle, CURLOPT_SSH_PRIVATE_KEYFILE, state->client_ssh_private_keyfile); ++ + if (data_size != POST_DATA_FROMFILE_PUT) + { + // Do a HTTP POST. This also makes curl use +-- +1.8.3.1 + diff --git a/SOURCES/0180-uploader-allow-empty-username-and-password.patch b/SOURCES/0180-uploader-allow-empty-username-and-password.patch new file mode 100644 index 0000000..84301f7 --- /dev/null +++ b/SOURCES/0180-uploader-allow-empty-username-and-password.patch @@ -0,0 +1,40 @@ +From 980b86a44ac0129cb5871fb94b66233df78a35cf Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Mon, 9 Nov 2015 15:02:36 +0100 +Subject: [PATCH] uploader: allow empty username and password + +Due to added the possibility to configure SSH keys the username and the +password may not be set. Also there is an another reason why we decided to +allow those options empty. The username and the password can be defined within +URL and if they are not provided either by conf file or within URL, +reporter-uploader will ask for that. + +Related to rhbz#1289513 + +Signed-off-by: Matej Habrnal +--- + src/plugins/report_Uploader.xml.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/plugins/report_Uploader.xml.in b/src/plugins/report_Uploader.xml.in +index 7df006a..8d648eb 100644 +--- a/src/plugins/report_Uploader.xml.in ++++ b/src/plugins/report_Uploader.xml.in +@@ -21,12 +21,12 @@ + + + + +-- +1.8.3.1 + diff --git a/SOURCES/0181-uploader-move-username-and-password-to-the-advanced-.patch b/SOURCES/0181-uploader-move-username-and-password-to-the-advanced-.patch new file mode 100644 index 0000000..13e529f --- /dev/null +++ b/SOURCES/0181-uploader-move-username-and-password-to-the-advanced-.patch @@ -0,0 +1,50 @@ +From 406bca78e4979831737bf13c8d990237a82eb5ba Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Mon, 9 Nov 2015 15:30:45 +0100 +Subject: [PATCH] uploader: move username and password to the advanced options + +Due to possibility configure SSH keys the username and the password became not +so important options therefore were moved from Basic to Advanced options. + +Related to rhbz#1289513 + +Signed-off-by: Matej Habrnal +--- + src/plugins/report_Uploader.xml.in | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +diff --git a/src/plugins/report_Uploader.xml.in b/src/plugins/report_Uploader.xml.in +index 8d648eb..db00c23 100644 +--- a/src/plugins/report_Uploader.xml.in ++++ b/src/plugins/report_Uploader.xml.in +@@ -19,17 +19,17 @@ + <_note-html>Examples: ftp://[user[:pass]@]host/dir/[file.tar.gz] scp://[user[:pass]@]host/dir/[file.tar.gz] file:///dir/[file.tar.gz] + + +- +- + ++ ++ + ++ ++ + + + +diff --git a/src/plugins/reporter-upload.c b/src/plugins/reporter-upload.c +index 971c5c1..36509fb 100644 +--- a/src/plugins/reporter-upload.c ++++ b/src/plugins/reporter-upload.c +@@ -32,16 +32,17 @@ static char *ask_url(const char *message) + return url; + } + +-static int interactive_upload_file(const char *url, const char *file_name, char **remote_name) ++static int interactive_upload_file(const char *url, const char *file_name, ++ map_string_t *settings, char **remote_name) + { + post_state_t *state = new_post_state(POST_WANT_ERROR_MSG); +- state->username = getenv("Upload_Username"); ++ state->username = get_map_string_item_or_NULL(settings, "UploadUsername"); + char *password_inp = NULL; + if (state->username != NULL && state->username[0] != '\0') + { + /* Load Password only if Username is configured, it doesn't make */ + /* much sense to load Password without Username. */ +- state->password = getenv("Upload_Password"); ++ state->password = get_map_string_item_or_NULL(settings, "UploadPassword"); + if (state->password == NULL) + { + /* Be permissive and nice, ask only once and don't check */ +@@ -53,6 +54,15 @@ static int interactive_upload_file(const char *url, const char *file_name, char + } + } + ++ /* set SSH keys */ ++ state->client_ssh_public_keyfile = get_map_string_item_or_NULL(settings, "SSHPublicKey"); ++ state->client_ssh_private_keyfile = get_map_string_item_or_NULL(settings, "SSHPrivateKey"); ++ ++ if (state->client_ssh_public_keyfile != NULL) ++ log_debug("Using SSH public key '%s'", state->client_ssh_public_keyfile); ++ if (state->client_ssh_private_keyfile != NULL) ++ log_debug("Using SSH private key '%s'", state->client_ssh_private_keyfile); ++ + char *tmp = upload_file_ext(state, url, file_name, UPLOAD_FILE_HANDLE_ACCESS_DENIALS); + + if (remote_name) +@@ -70,6 +80,7 @@ static int interactive_upload_file(const char *url, const char *file_name, char + static int create_and_upload_archive( + const char *dump_dir_name, + const char *url, ++ map_string_t *settings, + char **remote_name) + { + int result = 1; /* error */ +@@ -102,7 +113,7 @@ static int create_and_upload_archive( + /* Upload the archive */ + /* Upload from /tmp to /tmp + deletion -> BAD, exclude this possibility */ + if (url && url[0] && strcmp(url, "file://"LARGE_DATA_TMP_DIR"/") != 0) +- result = interactive_upload_file(url, tempfile, remote_name); ++ result = interactive_upload_file(url, tempfile, settings, remote_name); + else + { + result = 0; /* success */ +@@ -140,10 +151,12 @@ int main(int argc, char **argv) + const char *dump_dir_name = "."; + const char *conf_file = NULL; + const char *url = NULL; ++ const char *ssh_public_key = NULL; ++ const char *ssh_private_key = NULL; + + /* Can't keep these strings/structs static: _() doesn't support that */ + const char *program_usage_string = _( +- "& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++ "& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Uploads compressed tarball of problem directory DIR to URL.\n" + "If URL is not specified, creates tarball in "LARGE_DATA_TMP_DIR" and exits.\n" +@@ -166,6 +179,8 @@ int main(int argc, char **argv) + OPT_d = 1 << 1, + OPT_c = 1 << 2, + OPT_u = 1 << 3, ++ OPT_b = 1 << 4, ++ OPT_r = 1 << 5, + }; + /* Keep enum above and order of options below in sync! */ + struct options program_options[] = { +@@ -173,6 +188,8 @@ int main(int argc, char **argv) + OPT_STRING('d', NULL, &dump_dir_name, "DIR" , _("Problem directory")), + OPT_STRING('c', NULL, &conf_file , "CONFFILE", _("Config file")), + OPT_STRING('u', NULL, &url , "URL" , _("Base URL to upload to")), ++ OPT_STRING('b', "pubkey", &ssh_public_key , "FILE" , _("SSH public key file")), ++ OPT_STRING('r', "key", &ssh_private_key, "FILE" , _("SSH private key file")), + OPT_END() + }; + /*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string); +@@ -203,8 +220,22 @@ int main(int argc, char **argv) + if (!conf_url || conf_url[0] == '\0') + conf_url = input_url = ask_url(_("Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:")); + ++ set_map_string_item_from_string(settings, "UploadUsername", getenv("Upload_Username")); ++ set_map_string_item_from_string(settings, "UploadPassword", getenv("Upload_Password")); ++ ++ /* set SSH keys */ ++ if (ssh_public_key) ++ set_map_string_item_from_string(settings, "SSHPublicKey", ssh_public_key); ++ else if (getenv("Upload_SSHPublicKey") != NULL) ++ set_map_string_item_from_string(settings, "SSHPublicKey", getenv("Upload_SSHPublicKey")); ++ ++ if (ssh_private_key) ++ set_map_string_item_from_string(settings, "SSHPrivateKey", ssh_private_key); ++ else if (getenv("Upload_SSHPrivateKey") != NULL) ++ set_map_string_item_from_string(settings, "SSHPrivateKey", getenv("Upload_SSHPrivateKey")); ++ + char *remote_name = NULL; +- const int result = create_and_upload_archive(dump_dir_name, conf_url, &remote_name); ++ const int result = create_and_upload_archive(dump_dir_name, conf_url, settings, &remote_name); + if (result != 0) + goto finito; + +diff --git a/src/plugins/upload.conf b/src/plugins/upload.conf +new file mode 100644 +index 0000000..f32a2a0 +--- /dev/null ++++ b/src/plugins/upload.conf +@@ -0,0 +1,12 @@ ++# reporter-upload configuration file ++# check man reporter-upload for more details ++ ++#URL = scp://USERNAME:PASSWORD@SERVERNAME/var/spool/abrt-upload/ ++#URL = ftp://USERNAME:PASSWORD@SERVERNAME/var/spool/abrt-upload/ ++#URL = file:///var/spool/abrt-upload/ ++ ++# Specify SSH public key ++#SSHPublicKey = ++ ++# Specify SSH private key ++#SSHPrivateKey = +-- +1.8.3.1 + diff --git a/SOURCES/0184-uploader-etc-libreport-plugins-upload.conf-as-defaul.patch b/SOURCES/0184-uploader-etc-libreport-plugins-upload.conf-as-defaul.patch new file mode 100644 index 0000000..2b65fc7 --- /dev/null +++ b/SOURCES/0184-uploader-etc-libreport-plugins-upload.conf-as-defaul.patch @@ -0,0 +1,46 @@ +From 8d19dea8d110d52f3df475b37fac5c26f3c7387d Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Mon, 21 Mar 2016 13:55:42 +0100 +Subject: [PATCH] uploader: /etc/libreport/plugins/upload.conf as default conf + file + +Due to the possibility to configure SSH keys we added a default configuration +file as well. Users can define SSH keys as well as URL where dump dirs are +going to be uploaded. + +Related to rhbz#1289513 + +Signed-off-by: Matej Habrnal +--- + src/plugins/Makefile.am | 1 + + src/plugins/reporter-upload.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am +index 59fc440..01eec3a 100644 +--- a/src/plugins/Makefile.am ++++ b/src/plugins/Makefile.am +@@ -160,6 +160,7 @@ reporter_upload_CPPFLAGS = \ + -I$(srcdir)/../lib \ + -DBIN_DIR=\"$(bindir)\" \ + -DLOCALSTATEDIR='"$(localstatedir)"' \ ++ -DCONF_DIR=\"$(CONF_DIR)\" \ + -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \ + -DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \ + -DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \ +diff --git a/src/plugins/reporter-upload.c b/src/plugins/reporter-upload.c +index 36509fb..7b925c8 100644 +--- a/src/plugins/reporter-upload.c ++++ b/src/plugins/reporter-upload.c +@@ -149,7 +149,7 @@ int main(int argc, char **argv) + #endif + + const char *dump_dir_name = "."; +- const char *conf_file = NULL; ++ const char *conf_file = CONF_DIR"/plugins/upload.conf"; + const char *url = NULL; + const char *ssh_public_key = NULL; + const char *ssh_private_key = NULL; +-- +1.8.3.1 + diff --git a/SOURCES/0185-bugzilla-make-the-event-configurable.patch b/SOURCES/0185-bugzilla-make-the-event-configurable.patch new file mode 100644 index 0000000..4424491 --- /dev/null +++ b/SOURCES/0185-bugzilla-make-the-event-configurable.patch @@ -0,0 +1,415 @@ +From 1e38476046ca0dde7d91ac07462871820cfd55ca Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Tue, 22 Mar 2016 14:16:40 +0100 +Subject: [PATCH] bugzilla: make the event configurable + +Allow downstream to choose whether they want to open Bugzilla bugs +private by default. + +Related to rhbz#1279453 + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + configure.ac | 15 +++++ + po/POTFILES.skip | 1 + + src/plugins/Makefile.am | 2 +- + src/plugins/bugzilla.conf | 4 +- + src/plugins/report_Bugzilla.xml.in | 71 --------------------- + src/plugins/report_Bugzilla.xml.in.in | 72 +++++++++++++++++++++ + tests/Makefile.am | 8 ++- + tests/bugzilla_plugin.at.in | 114 ++++++++++++++++++++++++++++++++++ + tests/testsuite.at | 1 + + 10 files changed, 214 insertions(+), 76 deletions(-) + delete mode 100644 src/plugins/report_Bugzilla.xml.in + create mode 100644 src/plugins/report_Bugzilla.xml.in.in + create mode 100644 tests/bugzilla_plugin.at.in + +diff --git a/configure.ac b/configure.ac +index 8aea410..a7f67c9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -95,6 +95,19 @@ AC_PATH_PROG([XMLRPC], [xmlrpc-c-config], [no]) + [exit 1] + [fi] + ++AC_ARG_WITH([redhatbugzillacreateprivate], ++ AS_HELP_STRING([--with-redhatbugzillacreateprivate="yes/no"], ++ [Whether the Red Hat Bugzilla plugin should open ++ bugs private by default ("yes")]), ++ [], [with_redhatbugzillacreateprivate="yes"]) ++AC_SUBST([RED_HAT_BUGZILLA_CREATE_PRIVATE], [$with_redhatbugzillacreateprivate]) ++ ++AC_ARG_WITH([redhatbugzillaprivategroups], ++ AS_HELP_STRING([--with-redhatbugzillaprivategroups="CSV"], ++ [Name of groups separated by comma]), ++ [], [with_redhatbugzillaprivategroups="redhat"]) ++AC_SUBST([RED_HAT_BUGZILLA_PRIVATE_GROUPS], [$with_redhatbugzillaprivategroups]) ++ + XMLRPC_CFLAGS=`xmlrpc-c-config --cflags 2> /dev/null` + XMLRPC_LIBS=`xmlrpc-c-config --libs 2> /dev/null` + AC_SUBST(XMLRPC_CFLAGS) +@@ -337,11 +350,13 @@ AC_CONFIG_FILES([ + src/cli/Makefile + src/report-newt/Makefile + src/plugins/Makefile ++ src/plugins/report_Bugzilla.xml.in + src/client-python/Makefile + po/Makefile.in + doc/Makefile + doc/plugins-dbus/Makefile + src/workflows/Makefile ++ tests/bugzilla_plugin.at + ]) + + # src/plugins/Makefile +diff --git a/po/POTFILES.skip b/po/POTFILES.skip +index 2048914..5268b71 100644 +--- a/po/POTFILES.skip ++++ b/po/POTFILES.skip +@@ -1,2 +1,3 @@ + contrib/command-not-found/pk-tools-common.c + build/ ++src/plugins/report_Bugzilla.xml.in.in +diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am +index d5d75b6..397cc72 100644 +--- a/src/plugins/Makefile.am ++++ b/src/plugins/Makefile.am +@@ -82,7 +82,7 @@ dist_eventsdef_DATA = \ + reporters_extra_dist = + if BUILD_BUGZILLA + dist_eventsdef_DATA += bugzilla_event.conf bugzilla_anaconda_event.conf +-reporters_extra_dist += report_Bugzilla.xml.in report_Bugzilla.conf ++reporters_extra_dist += report_Bugzilla.xml.in.in report_Bugzilla.conf + endif + + if BUILD_UREPORT +diff --git a/src/plugins/bugzilla.conf b/src/plugins/bugzilla.conf +index 29c44b3..51648de 100644 +--- a/src/plugins/bugzilla.conf ++++ b/src/plugins/bugzilla.conf +@@ -17,5 +17,5 @@ Password = + DontMatchComponents = selinux-policy + + # for more info about these settings see: https://github.com/abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets +-# CreatePrivate = no +-# PrivateGroups = private ++# CreatePrivate = yes ++# PrivateGroups = redhat +diff --git a/src/plugins/report_Bugzilla.xml.in b/src/plugins/report_Bugzilla.xml.in +deleted file mode 100644 +index 9ffe90f..0000000 +--- a/src/plugins/report_Bugzilla.xml.in ++++ /dev/null +@@ -1,71 +0,0 @@ +- +- +- <_name>Bugzilla +- <_description>Report to Bugzilla bug tracker +- +- component,duphash,os_release +- coredump,count,event_log,reported_to,vmcore +- +- no +- +- 3 +- yes +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +diff --git a/src/plugins/report_Bugzilla.xml.in.in b/src/plugins/report_Bugzilla.xml.in.in +new file mode 100644 +index 0000000..5ef3925 +--- /dev/null ++++ b/src/plugins/report_Bugzilla.xml.in.in +@@ -0,0 +1,72 @@ ++ ++ ++ <_name>Bugzilla ++ <_description>Report to Bugzilla bug tracker ++ ++ component,duphash,os_release ++ coredump,count,event_log,reported_to,vmcore ++ ++ no ++ ++ 3 ++ yes ++ yes ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/Makefile.am b/tests/Makefile.am +index c22958b..825a870 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -48,12 +48,16 @@ TESTSUITE_AT = \ + iso_date.at \ + uriparser.at + ++TESTSUITE_AT_IN = \ ++ bugzilla_plugin.at ++ + EXTRA_DIST += $(TESTSUITE_AT) + TESTSUITE = $(srcdir)/testsuite + MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) + check_DATA = atconfig atlocal $(TESTSUITE) + DISTCLEANFILES = atconfig +-EXTRA_DIST += atlocal.in conf ureport ureport-rhts-credentials ++EXTRA_DIST += atlocal.in conf ureport ureport-rhts-credentials \ ++ bugzilla_plugin.at.in + + atconfig: $(top_builddir)/config.status + (cd ${top_builddir} && ./config.status ${subdir}/atconfig) +@@ -69,6 +73,6 @@ clean-local: + test ! -f '$(TESTSUITE)' || $(SHELL) '$(TESTSUITE)' --clean + + AUTOTEST = $(AUTOM4TE) --language=autotest +-$(TESTSUITE): $(TESTSUITE_AT) $(srcdir)/package.m4 ++$(TESTSUITE): $(TESTSUITE_AT) $(TESTSUITE_AT_IN) $(srcdir)/package.m4 + $(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at + mv $@.tmp $@ +diff --git a/tests/bugzilla_plugin.at.in b/tests/bugzilla_plugin.at.in +new file mode 100644 +index 0000000..a06b9d3 +--- /dev/null ++++ b/tests/bugzilla_plugin.at.in +@@ -0,0 +1,114 @@ ++# -*- Autotest -*- ++ ++AT_BANNER([Bugzilla]) ++ ++## ------------------- ## ++## report_Bugzilla_xml ## ++## ------------------- ## ++ ++AT_TESTFUN([report_Bugzilla_xml], ++[[ ++#include "testsuite.h" ++ ++TS_MAIN ++{ ++ event_config_t *conf = new_event_config("report_Bugzilla"); ++ load_event_description_from_file(conf, "../../../src/plugins/report_Bugzilla.xml"); ++ ++ TS_ASSERT_STRING_EQ(ec_get_screen_name(conf), "Bugzilla", "Screen name"); ++ TS_ASSERT_STRING_EQ(ec_get_description(conf), "Report to Bugzilla bug tracker", "Description"); ++ ++ TS_ASSERT_STRING_EQ(conf->ec_creates_items, NULL, "Not-defined create items"); ++ ++ TS_ASSERT_STRING_EQ(conf->ec_requires_items, "component,duphash,os_release", "Correct required items"); ++ ++ TS_ASSERT_STRING_EQ(conf->ec_exclude_items_by_default, "coredump,count,event_log,reported_to,vmcore", "Correct excluded items by default"); ++ ++ TS_ASSERT_STRING_EQ(conf->ec_exclude_items_always, NULL, "Not-defined excluded items always"); ++ ++ TS_ASSERT_FALSE(conf->ec_exclude_binary_items); ++ ++ TS_ASSERT_STRING_EQ(conf->ec_include_items_by_default, NULL, "Not-defined included items by default"); ++ ++ TS_ASSERT_SIGNED_EQ(conf->ec_minimal_rating, 3); ++ ++ TS_ASSERT_FALSE(conf->ec_skip_review); ++ ++ TS_ASSERT_FALSE(conf->ec_sending_sensitive_data); ++ ++ TS_ASSERT_TRUE(conf->ec_supports_restricted_access); ++ ++ event_option_t options[10] = { ++ { .eo_value = NULL, .eo_label = (char *)"User name", ++ .eo_note_html = (char *)"You can create bugzilla.redhat.com account here", ++ .eo_type = OPTION_TYPE_TEXT, .eo_allow_empty = 0, .is_advanced = 0, ++ }, ++ { .eo_value = NULL, .eo_label = (char *)"Password", .eo_note_html = NULL, ++ .eo_type = OPTION_TYPE_PASSWORD, .eo_allow_empty = 0, .is_advanced = 0, ++ }, ++ { .eo_value = (char *)"@RED_HAT_BUGZILLA_CREATE_PRIVATE@", .eo_label = (char *)"Restrict access", ++ .eo_note_html = (char *)"Restrict access to the created bugzilla ticket allowing only users from specified groups to view it (see advanced settings for more details)", ++ .eo_type = OPTION_TYPE_BOOL, .eo_allow_empty = 0, .is_advanced = 0, ++ }, ++ { .eo_value = (char *)"@RED_HAT_BUGZILLA_PRIVATE_GROUPS@", .eo_label = (char *)"Groups", ++ .eo_note_html = (char *)"Restrict the access to specified groups ?", ++ .eo_type = OPTION_TYPE_TEXT, .eo_allow_empty = 1, .is_advanced = 1, ++ }, ++ { .eo_value = (char *)"https://bugzilla.redhat.com", .eo_label = (char *)"Bugzilla URL", ++ .eo_note_html = (char *)"Address of Bugzilla server", ++ .eo_type = OPTION_TYPE_TEXT, .eo_allow_empty = 0, .is_advanced = 1, ++ }, ++ { .eo_value = (char *)"yes", .eo_label = (char *)"Verify SSL", ++ .eo_note_html = (char *)"Check SSL key validity", ++ .eo_type = OPTION_TYPE_BOOL, .eo_allow_empty = 0, .is_advanced = 1, ++ }, ++ { .eo_value = NULL, .eo_label = (char *)"Bugzilla product", ++ .eo_note_html = (char *)"Specify this only if you needed different product than specified in /etc/os-release", ++ .eo_type = OPTION_TYPE_TEXT, .eo_allow_empty = 1, .is_advanced = 1, ++ }, ++ { .eo_value = NULL, .eo_label = (char *)"Bugzilla product version", ++ .eo_note_html = (char *)"Specify this only if you needed different product version than specified in /etc/os-release", ++ .eo_type = OPTION_TYPE_TEXT, .eo_allow_empty = 1, .is_advanced = 1, ++ }, ++ { .eo_value = NULL, .eo_label = (char *)"HTTP Proxy", ++ .eo_note_html = (char *)"Sets the proxy server to use for HTTP", ++ .eo_type = OPTION_TYPE_TEXT, .eo_allow_empty = 1, .is_advanced = 1, ++ }, ++ { .eo_value = NULL, .eo_label = (char *)"HTTPS Proxy", ++ .eo_note_html = (char *)"Sets the proxy server to use for HTTPS", ++ .eo_type = OPTION_TYPE_TEXT, .eo_allow_empty = 1, .is_advanced = 1, ++ }, ++ }; ++ ++ const char *option_names[] = { ++ "Bugzilla_Login", ++ "Bugzilla_Password", ++ "Bugzilla_CreatePrivate", ++ "Bugzilla_PrivateGroups", ++ "Bugzilla_BugzillaURL", ++ "Bugzilla_SSLVerify", ++ "Bugzilla_Product", ++ "Bugzilla_ProductVersion", ++ "http_proxy", ++ "HTTPS_PROXY" ++ }; ++ ++ for (unsigned i = 0; i < ARRAY_SIZE(option_names); ++i) { ++ event_option_t *eo = get_event_option_from_list(option_names[i], conf->options); ++ TS_ASSERT_PTR_IS_NOT_NULL_MESSAGE(eo, option_names[i]); ++ ++ if (eo == NULL) ++ continue; ++ ++ TS_ASSERT_STRING_EQ(eo->eo_value, options[i].eo_value, option_names[i]); ++ TS_ASSERT_STRING_EQ(eo->eo_label, options[i].eo_label, option_names[i]); ++ TS_ASSERT_STRING_EQ(eo->eo_note_html, options[i].eo_note_html, option_names[i]); ++ TS_ASSERT_SIGNED_OP_MESSAGE(eo->eo_type, ==, options[i].eo_type, option_names[i]); ++ TS_ASSERT_SIGNED_OP_MESSAGE(eo->eo_allow_empty, ==, options[i].eo_allow_empty, option_names[i]); ++ TS_ASSERT_SIGNED_OP_MESSAGE(eo->is_advanced, ==, options[i].is_advanced, option_names[i]); ++ } ++ ++ free_event_config(conf); ++} ++TS_RETURN_MAIN ++]]) +diff --git a/tests/testsuite.at b/tests/testsuite.at +index 72e0715..c8269b1 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -21,3 +21,4 @@ m4_include([dump_dir.at]) + m4_include([global_config.at]) + m4_include([iso_date.at]) + m4_include([uriparser.at]) ++m4_include([bugzilla_plugin.at]) +-- +1.8.3.1 + diff --git a/SOURCES/0186-report-gtk-offer-users-to-create-private-ticket.patch b/SOURCES/0186-report-gtk-offer-users-to-create-private-ticket.patch new file mode 100644 index 0000000..b20db1f --- /dev/null +++ b/SOURCES/0186-report-gtk-offer-users-to-create-private-ticket.patch @@ -0,0 +1,333 @@ +From 056aea2ac07d86d7cbade4814570f03c2e6cbec7 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Tue, 22 Mar 2016 14:39:59 +0100 +Subject: [PATCH] report-gtk: offer users to create private ticket + +Make the feature public and offer it only in the cases where it make +sense (i.e. do not offer users to crate private ticket for +'report_Uploader'). + +Related to rhbz#1279453 + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + src/gui-wizard-gtk/wizard.c | 109 ++++++++++++++++++++++++++++++++--- + src/gui-wizard-gtk/wizard.glade | 123 ---------------------------------------- + 2 files changed, 102 insertions(+), 130 deletions(-) + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index 3a7db9c..17257ec 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -124,6 +124,21 @@ static void add_workflow_buttons(GtkBox *box, GHashTable *workflows, GCallback f + static void set_auto_event_chain(GtkButton *button, gpointer user_data); + static void start_event_run(const char *event_name); + ++static GtkWidget *g_sens_ticket; ++static GtkToggleButton *g_sens_ticket_cb; ++ ++enum { ++ PRIV_WARN_SHOW_BTN = 0x01, ++ PRIV_WARN_HIDE_BTN = 0x02, ++ PRIV_WARN_SHOW_MSG = 0x04, ++ PRIV_WARN_HIDE_MSG = 0x08, ++ PRIV_WARN_BTN_CHECKED = 0x10, ++ PRIV_WARN_BTN_UNCHECKED = 0x20, ++}; ++ ++static void private_ticket_creation_warning(int flags); ++static void update_private_ticket_creation_warning_for_selected_event(void); ++ + enum + { + /* Note: need to update types in +@@ -202,11 +217,13 @@ static const gchar *const page_names[] = + #define PRIVATE_TICKET_CB "private_ticket_cb" + + #define SENSITIVE_DATA_WARN "sensitive_data_warning" ++#define SENSITIVE_DATA_WARN_MSG "sensitive_data_warning_message" + #define SENSITIVE_LIST "ls_sensitive_words" + static const gchar *misc_widgets[] = + { + SENSITIVE_DATA_WARN, + SENSITIVE_LIST, ++ PRIVATE_TICKET_CB, + NULL + }; + +@@ -956,6 +973,7 @@ static int check_event_config(const char *event_name) + { + g_hash_table_unref(errors); + show_event_opt_error_dialog(event_name); ++ update_private_ticket_creation_warning_for_selected_event(); + return 1; + } + return 0; +@@ -2160,17 +2178,52 @@ static void on_sensitive_ticket_clicked_cb(GtkWidget *button, gpointer user_data + } + } + +-static void add_sensitive_data_warning(void) ++static void on_privacy_info_btn(GtkWidget *button, gpointer user_data) ++{ ++ if (g_event_selected == NULL) ++ return; ++ ++ show_event_config_dialog(g_event_selected, GTK_WINDOW(g_top_most_window)); ++} ++ ++static void private_ticket_creation_warning(int flags) + { +- GtkBuilder *builder = make_builder(); ++ if (flags & PRIV_WARN_HIDE_BTN) ++ { ++ gtk_widget_hide(GTK_WIDGET(g_sens_ticket)); ++ } ++ ++ if (flags & PRIV_WARN_SHOW_BTN) ++ { ++ gtk_widget_show_all(GTK_WIDGET(g_sens_ticket)); ++ gtk_widget_show(GTK_WIDGET(g_sens_ticket)); ++ } ++ ++ if (flags & PRIV_WARN_BTN_UNCHECKED) ++ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_sens_ticket_cb), FALSE); ++ ++ if (flags & PRIV_WARN_BTN_CHECKED) ++ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_sens_ticket_cb), TRUE); ++ ++ if (flags & PRIV_WARN_HIDE_MSG) ++ clear_warnings(); ++ ++ if (flags & PRIV_WARN_SHOW_MSG) ++ { ++ add_warning(_("Possible sensitive data detected, feel free to edit the report and remove them.")); ++ show_warnings(); ++ } ++} + +- GtkWidget *sens_data_warn = GTK_WIDGET(gtk_builder_get_object(builder, SENSITIVE_DATA_WARN)); +- GtkButton *sens_ticket_cb = GTK_BUTTON(gtk_builder_get_object(builder, PRIVATE_TICKET_CB)); ++static void add_sensitive_data_warning(void) ++{ ++ int flags = PRIV_WARN_SHOW_MSG; + +- g_signal_connect(sens_ticket_cb, "toggled", G_CALLBACK(on_sensitive_ticket_clicked_cb), NULL); +- add_widget_to_warning_area(GTK_WIDGET(sens_data_warn)); ++ event_config_t *cfg = get_event_config(g_event_selected); ++ if (cfg != NULL && cfg->ec_supports_restricted_access) ++ flags |= PRIV_WARN_SHOW_BTN | PRIV_WARN_BTN_CHECKED; + +- g_object_unref(builder); ++ private_ticket_creation_warning(flags); + } + + static void show_warnings(void) +@@ -2627,6 +2680,19 @@ static char *get_next_processed_event(GList **events_list) + return event_name; + } + ++static void update_private_ticket_creation_warning_for_selected_event(void) ++{ ++ event_config_t *cfg = get_event_config(g_event_selected); ++ if (cfg == NULL || !cfg->ec_supports_restricted_access) ++ return; ++ ++ int flags = PRIV_WARN_SHOW_BTN | PRIV_WARN_HIDE_MSG; ++ if (ec_restricted_access_enabled(cfg)) ++ flags |= PRIV_WARN_BTN_CHECKED; ++ ++ private_ticket_creation_warning(flags); ++} ++ + static void on_page_prepare(GtkNotebook *assistant, GtkWidget *page, gpointer user_data) + { + //int page_no = gtk_assistant_get_current_page(g_assistant); +@@ -2669,6 +2735,11 @@ static void on_page_prepare(GtkNotebook *assistant, GtkWidget *page, gpointer us + + if (pages[PAGENO_SUMMARY].page_widget == page) + { ++ if (get_global_create_private_ticket()) ++ private_ticket_creation_warning( PRIV_WARN_SHOW_BTN ++ | PRIV_WARN_BTN_CHECKED ++ | PRIV_WARN_HIDE_MSG); ++ + if (!g_expert_mode) + { + /* Skip intro screen */ +@@ -2718,6 +2789,8 @@ static void on_page_prepare(GtkNotebook *assistant, GtkWidget *page, gpointer us + + if (pages[PAGENO_EDIT_COMMENT].page_widget == page) + { ++ update_private_ticket_creation_warning_for_selected_event(); ++ + gtk_widget_set_sensitive(g_btn_next, false); + on_comment_changed(gtk_text_view_get_buffer(g_tv_comment), NULL); + } +@@ -3527,6 +3600,28 @@ void create_assistant(GtkApplication *app, bool expert_mode) + gtk_box_pack_start(g_box_assistant, GTK_WIDGET(g_assistant), true, true, 0); + + gtk_box_pack_start(g_box_assistant, GTK_WIDGET(g_widget_warnings_area), false, false, 0); ++ ++ /* Private ticket warning */ ++ { ++ g_sens_ticket = GTK_WIDGET(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); ++ gtk_widget_set_no_show_all(GTK_WIDGET(g_sens_ticket), TRUE); ++ gtk_widget_hide(GTK_WIDGET(g_sens_ticket)); ++ ++ g_sens_ticket_cb = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_label(_("Restrict access to the report"))); ++ gtk_widget_set_margin_start(GTK_WIDGET(g_sens_ticket_cb), 5); ++ gtk_widget_show(GTK_WIDGET(g_sens_ticket_cb)); ++ g_signal_connect(g_sens_ticket_cb, "toggled", G_CALLBACK(on_sensitive_ticket_clicked_cb), NULL); ++ ++ GtkLinkButton *privacy_info_btn = GTK_LINK_BUTTON(gtk_link_button_new_with_label("", _("Learn more about restricted access in the configuration"))); ++ gtk_widget_show(GTK_WIDGET(privacy_info_btn)); ++ g_signal_connect(privacy_info_btn, "clicked", G_CALLBACK(on_privacy_info_btn), NULL); ++ ++ gtk_box_pack_start(GTK_BOX(g_sens_ticket), GTK_WIDGET(g_sens_ticket_cb), false, false, 5); ++ gtk_box_pack_start(GTK_BOX(g_sens_ticket), GTK_WIDGET(privacy_info_btn), false, false, 5); ++ ++ gtk_box_pack_start(g_box_assistant, GTK_WIDGET(g_sens_ticket), false, true, 5); ++ } ++ + gtk_box_pack_start(g_box_assistant, GTK_WIDGET(g_box_buttons), false, false, 5); + + gtk_widget_show_all(GTK_WIDGET(g_box_buttons)); +diff --git a/src/gui-wizard-gtk/wizard.glade b/src/gui-wizard-gtk/wizard.glade +index 9296bca..441b2fc 100644 +--- a/src/gui-wizard-gtk/wizard.glade ++++ b/src/gui-wizard-gtk/wizard.glade +@@ -16,129 +16,6 @@ + + + +- +- False +- +- +- True +- False +- vertical +- +- +- True +- False +- +- +- True +- False +- 4 +- gtk-media-record +- 1 +- +- +- False +- True +- 0 +- +- +- +- +- True +- False +- 6 +- 3 +- 3 +- Possible sensitive data detected, feel free to edit the report and remove them. +- +- +- +- +- +- False +- True +- 1 +- +- +- +- +- False +- True +- 0 +- +- +- +- +- True +- False +- +- +- True +- False +- vertical +- +- +- Restrict access to the report +- True +- True +- False +- 0 +- True +- +- +- False +- True +- 0 +- +- +- +- +- True +- False +- 13 +- No one except Red Hat employees will be allowed to see the report with restricted access (not even you) +- +- +- +- +- +- False +- True +- 1 +- +- +- +- +- Read more about reports with restricted access +- True +- True +- True +- True +- none +- https://github.com/abrt/abrt/wiki/FAQ#reports-with-restricted-access +- +- +- False +- True +- 2 +- +- +- +- +- False +- True +- 0 +- +- +- +- +- False +- True +- 1 +- +- +- +- +- + + False + +-- +1.8.3.1 + diff --git a/SOURCES/0187-event-config-add-support-for-restricted-access.patch b/SOURCES/0187-event-config-add-support-for-restricted-access.patch new file mode 100644 index 0000000..b5f62d1 --- /dev/null +++ b/SOURCES/0187-event-config-add-support-for-restricted-access.patch @@ -0,0 +1,418 @@ +From 4d4ddb1005eda2a9ecf49f23d973d784bf6460de Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Tue, 22 Mar 2016 15:07:15 +0100 +Subject: [PATCH] event config: add support for 'restricted access' + +The xml event definition must hold the information about availability of +creating tickets with restricted access. + +The tools like report-gtk and report-cli must use this information to: +- offer the users the possibility to open the report with restricted access +- tell the users whether the ticket will be private or not based on the + configuration of the event + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + doc/report_event.conf.txt | 10 ++++ + src/include/event_config.h | 7 +++ + src/lib/event_config.c | 34 ++++++++++++ + src/lib/event_xml_parser.c | 20 ++++++++ + tests/Makefile.am | 3 +- + .../conf/event_implicit_no_support_restricted.xml | 13 +++++ + tests/conf/event_no_support_restricted.xml | 15 ++++++ + tests/conf/event_support_restricted_no_option.xml | 15 ++++++ + .../conf/event_support_restricted_with_option.xml | 15 ++++++ + tests/event_config.at | 60 ++++++++++++++++++++++ + tests/testsuite.at | 1 + + tests/xml_definition.at | 51 ++++++++++++++++++ + 12 files changed, 243 insertions(+), 1 deletion(-) + create mode 100644 tests/conf/event_implicit_no_support_restricted.xml + create mode 100644 tests/conf/event_no_support_restricted.xml + create mode 100644 tests/conf/event_support_restricted_no_option.xml + create mode 100644 tests/conf/event_support_restricted_with_option.xml + create mode 100644 tests/event_config.at + +diff --git a/doc/report_event.conf.txt b/doc/report_event.conf.txt +index 887c3e8..c7e736e 100644 +--- a/doc/report_event.conf.txt ++++ b/doc/report_event.conf.txt +@@ -71,6 +71,8 @@ Each file has XML formatting with the following DTD: + + + ++ ++ + + + +@@ -117,6 +119,14 @@ gui-review-elements:: + can be published. If "no", the event is executed automatically. If not + provided, "yes" is expected. + ++support-restricted-access:: ++ If "yes", the UI tools will offer the users to enter the new report with ++ restricted access. If "no", the UI tools will never offer the users to ++ enter the report with restricted access. "no" is the default value. The ++ element should have one argument named 'optionname' which defines name of ++ an option holding configuration of the restricted access feature. The ++ option must of 'bool' type. ++ + advanced-options:: + List of options which are hidden in the default view. + +diff --git a/src/include/event_config.h b/src/include/event_config.h +index e2fcc23..7d137c1 100644 +--- a/src/include/event_config.h ++++ b/src/include/event_config.h +@@ -80,6 +80,8 @@ typedef struct + long ec_minimal_rating; + bool ec_skip_review; + bool ec_sending_sensitive_data; ++ bool ec_supports_restricted_access; ++ char *ec_restricted_access_option; + + GList *ec_imported_event_names; + GList *options; +@@ -98,6 +100,11 @@ const char *ec_get_long_desc(event_config_t *ec); + void ec_set_long_desc(event_config_t *ec, const char *long_desc); + bool ec_is_configurable(event_config_t* ec); + ++/* Returns True if the event is configured to create ticket with restricted ++ * access. ++ */ ++bool ec_restricted_access_enabled(event_config_t *ec); ++ + void free_event_config(event_config_t *p); + + +diff --git a/src/lib/event_config.c b/src/lib/event_config.c +index 30b94d3..4155938 100644 +--- a/src/lib/event_config.c ++++ b/src/lib/event_config.c +@@ -88,6 +88,39 @@ void ec_print(event_config_t *ec) + ); + } + ++bool ec_restricted_access_enabled(event_config_t *ec) ++{ ++ if (!ec->ec_supports_restricted_access) ++ { ++ if (ec->ec_restricted_access_option != NULL) ++ log_warning("Event '%s' does not support restricted access but has the option", ec_get_name(ec)); ++ ++ return false; ++ } ++ ++ if (ec->ec_restricted_access_option == NULL) ++ { ++ log_debug("Event '%s' supports restricted access but is missing the option", ec_get_name(ec)); ++ return false; ++ } ++ ++ event_option_t *eo = get_event_option_from_list(ec->ec_restricted_access_option, ec->options); ++ if (eo == NULL) ++ { ++ log_warning("Event '%s' supports restricted access but the option is not defined", ec_get_name(ec)); ++ return false; ++ } ++ ++ if (eo->eo_type != OPTION_TYPE_BOOL) ++ { ++ log_warning("Restricted option '%s' of Event '%s' is not of 'bool' type", ++ ec->ec_restricted_access_option, ec_get_name(ec)); ++ return false; ++ } ++ ++ return eo->eo_value != NULL && string_to_bool(eo->eo_value); ++} ++ + void free_event_option(event_option_t *p) + { + if (!p) +@@ -112,6 +145,7 @@ void free_event_config(event_config_t *p) + free(p->ec_exclude_items_by_default); + free(p->ec_include_items_by_default); + free(p->ec_exclude_items_always); ++ free(p->ec_restricted_access_option); + g_list_free_full(p->ec_imported_event_names, free); + g_list_free_full(p->options, (GDestroyNotify)free_event_option); + +diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c +index a15f1e1..a5e3d3e 100644 +--- a/src/lib/event_xml_parser.c ++++ b/src/lib/event_xml_parser.c +@@ -33,6 +33,8 @@ + #define MINIMAL_RATING_ELEMENT "minimal-rating" + #define GUI_REVIEW_ELEMENTS "gui-review-elements" + #define SENDING_SENSITIVE_DATA_ELEMENT "sending-sensitive-data" ++#define SUPPORTS_RESTRICTED_ACCESS_ELEMENT "support-restricted-access" ++#define RESTRICTED_ACCESS_OPTION_ATTR "optionname" + + #define REQUIRES_ELEMENT "requires-items" + #define EXCL_BY_DEFAULT_ELEMENT "exclude-items-by-default" +@@ -234,6 +236,20 @@ static void start_element(GMarkupParseContext *context, + free(parse_data->attribute_lang); + parse_data->attribute_lang = get_element_lang(parse_data, attribute_names, attribute_values); + } ++ else ++ if (strcmp(element_name, SUPPORTS_RESTRICTED_ACCESS_ELEMENT) == 0) ++ { ++ if (( attribute_names[0] != NULL ++ && strcmp(attribute_names[0], RESTRICTED_ACCESS_OPTION_ATTR) != 0) ++ || attribute_names[1] != NULL) ++ { ++ error_msg("XML event configuration error: '%s' element misses attribute '%s'", ++ SUPPORTS_RESTRICTED_ACCESS_ELEMENT, RESTRICTED_ACCESS_OPTION_ATTR); ++ return; ++ } ++ ++ parse_data->event_config.values->ec_restricted_access_option = xstrdup(attribute_values[0]); ++ } + } + + // Called for close tags +@@ -489,6 +505,10 @@ static void text(GMarkupParseContext *context, + { + ui->ec_sending_sensitive_data = string_to_bool(text_copy); + } ++ else if (strcmp(inner_element, SUPPORTS_RESTRICTED_ACCESS_ELEMENT) == 0) ++ { ++ ui->ec_supports_restricted_access = string_to_bool(text_copy); ++ } + } + free(text_copy); + } +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 825a870..9aa3a07 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -46,7 +46,8 @@ TESTSUITE_AT = \ + dump_dir.at \ + global_config.at \ + iso_date.at \ +- uriparser.at ++ uriparser.at \ ++ event_config.at + + TESTSUITE_AT_IN = \ + bugzilla_plugin.at +diff --git a/tests/conf/event_implicit_no_support_restricted.xml b/tests/conf/event_implicit_no_support_restricted.xml +new file mode 100644 +index 0000000..eb37be8 +--- /dev/null ++++ b/tests/conf/event_implicit_no_support_restricted.xml +@@ -0,0 +1,13 @@ ++ ++ ++ Bugzilla ++ Report to Bugzilla bug tracker ++ Report to Bugzilla bug tracker in long description ++ ++ ++ ++ ++ +diff --git a/tests/conf/event_no_support_restricted.xml b/tests/conf/event_no_support_restricted.xml +new file mode 100644 +index 0000000..b2c83b1 +--- /dev/null ++++ b/tests/conf/event_no_support_restricted.xml +@@ -0,0 +1,15 @@ ++ ++ ++ Bugzilla ++ Report to Bugzilla bug tracker ++ Report to Bugzilla bug tracker in long description ++ ++ no ++ ++ ++ ++ ++ +diff --git a/tests/conf/event_support_restricted_no_option.xml b/tests/conf/event_support_restricted_no_option.xml +new file mode 100644 +index 0000000..b70e64b +--- /dev/null ++++ b/tests/conf/event_support_restricted_no_option.xml +@@ -0,0 +1,15 @@ ++ ++ ++ Bugzilla ++ Report to Bugzilla bug tracker ++ Report to Bugzilla bug tracker in long description ++ ++ yes ++ ++ ++ ++ ++ +diff --git a/tests/conf/event_support_restricted_with_option.xml b/tests/conf/event_support_restricted_with_option.xml +new file mode 100644 +index 0000000..ce5a1f9 +--- /dev/null ++++ b/tests/conf/event_support_restricted_with_option.xml +@@ -0,0 +1,15 @@ ++ ++ ++ Bugzilla ++ Report to Bugzilla bug tracker ++ Report to Bugzilla bug tracker in long description ++ ++ yes ++ ++ ++ ++ ++ +diff --git a/tests/event_config.at b/tests/event_config.at +new file mode 100644 +index 0000000..5baf000 +--- /dev/null ++++ b/tests/event_config.at +@@ -0,0 +1,60 @@ ++# -*- Autotest -*- ++ ++AT_BANNER([Event config]) ++ ++## ----------------- ## ++## restricted_access ## ++## ----------------- ## ++ ++AT_TESTFUN([restricted_access], ++[[ ++ ++#include "testsuite.h" ++ ++TS_MAIN ++{ ++ event_config_t *ect = new_event_config("restricted_access"); ++ ++ TS_ASSERT_FALSE(ect->ec_supports_restricted_access); ++ TS_ASSERT_PTR_IS_NULL(ect->ec_restricted_access_option); ++ TS_ASSERT_FALSE(ec_restricted_access_enabled(ect)); ++ ++ ect->ec_supports_restricted_access = true; ++ ++ TS_ASSERT_PTR_IS_NULL(ect->ec_restricted_access_option); ++ TS_ASSERT_FALSE(ec_restricted_access_enabled(ect)); ++ ++ ect->ec_restricted_access_option = xstrdup("PrivateTicket"); ++ ++ TS_ASSERT_FALSE(ec_restricted_access_enabled(ect)); ++ ++ event_option_t *eot = new_event_option(); ++ eot->eo_name = xstrdup("PrivateTicket"); ++ eot->eo_value = NULL; ++ ++ ect->options = g_list_prepend(ect->options, eot); ++ ++ TS_ASSERT_FALSE(ec_restricted_access_enabled(ect)); ++ ++ eot->eo_type = OPTION_TYPE_BOOL; ++ eot->eo_value = xstrdup("no"); ++ ++ TS_ASSERT_FALSE(ec_restricted_access_enabled(ect)); ++ ++ free(eot->eo_value); ++ eot->eo_value = xstrdup("yes"); ++ ++ TS_ASSERT_TRUE(ec_restricted_access_enabled(ect)); ++ ++ eot->eo_type = OPTION_TYPE_NUMBER; ++ ++ TS_ASSERT_FALSE(ec_restricted_access_enabled(ect)); ++ ++ ect->ec_supports_restricted_access = false; ++ ++ TS_ASSERT_FALSE(ec_restricted_access_enabled(ect)); ++ ++ free_event_config(ect); ++} ++TS_RETURN_MAIN ++]]) +diff --git a/tests/testsuite.at b/tests/testsuite.at +index c8269b1..392c3db 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -22,3 +22,4 @@ m4_include([global_config.at]) + m4_include([iso_date.at]) + m4_include([uriparser.at]) + m4_include([bugzilla_plugin.at]) ++m4_include([event_config.at]) +diff --git a/tests/xml_definition.at b/tests/xml_definition.at +index 29043f8..7d2140f 100644 +--- a/tests/xml_definition.at ++++ b/tests/xml_definition.at +@@ -137,3 +137,54 @@ int main(void) + return EXIT_SUCCESS; + } + ]]) ++ ++## ----------------- ## ++## restricted_access ## ++## ----------------- ## ++ ++AT_TESTFUN([restricted_access], ++[[ ++ ++#include "testsuite.h" ++ ++TS_MAIN ++{ ++ { ++ event_config_t *event_config = new_event_config("event_test_definition"); ++ load_event_description_from_file(event_config, "../../conf/event_no_support_restricted.xml"); ++ ++ TS_ASSERT_FALSE(event_config->ec_supports_restricted_access); ++ TS_ASSERT_PTR_IS_NULL(event_config->ec_restricted_access_option); ++ ++ free_event_config(event_config); ++ } ++ { ++ event_config_t *event_config = new_event_config("event_test_definition"); ++ load_event_description_from_file(event_config, "../../conf/event_implicit_no_support_restricted.xml"); ++ ++ TS_ASSERT_FALSE(event_config->ec_supports_restricted_access); ++ TS_ASSERT_PTR_IS_NULL(event_config->ec_restricted_access_option); ++ ++ free_event_config(event_config); ++ } ++ { ++ event_config_t *event_config = new_event_config("event_test_definition"); ++ load_event_description_from_file(event_config, "../../conf/event_support_restricted_no_option.xml"); ++ ++ TS_ASSERT_TRUE(event_config->ec_supports_restricted_access); ++ TS_ASSERT_PTR_IS_NULL(event_config->ec_restricted_access_option); ++ ++ free_event_config(event_config); ++ } ++ { ++ event_config_t *event_config = new_event_config("event_test_definition"); ++ load_event_description_from_file(event_config, "../../conf/event_support_restricted_with_option.xml"); ++ ++ TS_ASSERT_TRUE(event_config->ec_supports_restricted_access); ++ TS_ASSERT_STRING_EQ(event_config->ec_restricted_access_option, "Bugzilla_RestrictedAccess", "Loaded from configuration"); ++ ++ free_event_config(event_config); ++ } ++} ++TS_RETURN_MAIN ++]]) +-- +1.8.3.1 + diff --git a/SOURCES/0188-lib-move-CREATE_PRIVATE_TICKET-to-the-global-configu.patch b/SOURCES/0188-lib-move-CREATE_PRIVATE_TICKET-to-the-global-configu.patch new file mode 100644 index 0000000..4a8dcb4 --- /dev/null +++ b/SOURCES/0188-lib-move-CREATE_PRIVATE_TICKET-to-the-global-configu.patch @@ -0,0 +1,203 @@ +From 8d8919987929cc5eb27e45dfc58f18b78dd0e484 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Tue, 22 Mar 2016 15:15:43 +0100 +Subject: [PATCH] lib: move CREATE_PRIVATE_TICKET to the global configuration + +The plugins should not rely directly on the environment variables. This +patch should ensure that every one uses the same logic to interpret the +environment variables. + +Related to rhbz#1279453 + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + src/gui-wizard-gtk/main.c | 1 + + src/gui-wizard-gtk/wizard.c | 9 +---- + src/include/global_configuration.h | 15 +++++++++ + src/lib/global_configuration.c | 22 +++++++++++++ + src/plugins/reporter-bugzilla.c | 4 +-- + tests/global_config.at | 67 ++++++++++++++++++++++++++++++++++++++ + 6 files changed, 107 insertions(+), 11 deletions(-) + +diff --git a/src/gui-wizard-gtk/main.c b/src/gui-wizard-gtk/main.c +index 41a8089..1a10258 100644 +--- a/src/gui-wizard-gtk/main.c ++++ b/src/gui-wizard-gtk/main.c +@@ -186,6 +186,7 @@ int main(int argc, char **argv) + + g_dump_dir_name = xstrdup(argv[0]); + ++ load_global_configuration(); + /* load /etc/abrt/events/foo.{conf,xml} stuff + and $XDG_CACHE_HOME/abrt/events/foo.conf */ + g_event_config_list = load_event_config_data(); +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index 17257ec..6a1bdc0 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -2168,14 +2168,7 @@ static void add_warning(const char *warning) + + static void on_sensitive_ticket_clicked_cb(GtkWidget *button, gpointer user_data) + { +- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) +- { +- xsetenv(CREATE_PRIVATE_TICKET, "1"); +- } +- else +- { +- safe_unsetenv(CREATE_PRIVATE_TICKET); +- } ++ set_global_create_private_ticket(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)), /*transient*/0); + } + + static void on_privacy_info_btn(GtkWidget *button, gpointer user_data) +diff --git a/src/include/global_configuration.h b/src/include/global_configuration.h +index 9666796..bc5513d 100644 +--- a/src/include/global_configuration.h ++++ b/src/include/global_configuration.h +@@ -38,6 +38,21 @@ void free_global_configuration(void); + #define get_global_always_excluded_elements libreport_get_global_always_excluded_elements + string_vector_ptr_t get_global_always_excluded_elements(void); + ++#define get_global_create_private_ticket libreport_get_global_create_private_ticket ++bool get_global_create_private_ticket(void); ++ ++/** ++ * Configures the create private ticket global option ++ * ++ * The function changes the configuration only for the current process by ++ * default. ++ * ++ * @param enabled The option's value ++ * @param flags For future needs (enable persistent configuration) ++ */ ++#define set_global_create_private_ticket libreport_set_global_create_private_ticket ++void set_global_create_private_ticket(bool enabled, int flags); ++ + #ifdef __cplusplus + } + #endif +diff --git a/src/lib/global_configuration.c b/src/lib/global_configuration.c +index 903a2fb..ef921e9 100644 +--- a/src/lib/global_configuration.c ++++ b/src/lib/global_configuration.c +@@ -141,3 +141,25 @@ string_vector_ptr_t get_global_always_excluded_elements(void) + + return ret; + } ++ ++bool get_global_create_private_ticket(void) ++{ ++ assert_global_configuration_initialized(); ++ ++ char *env_create_private = getenv(CREATE_PRIVATE_TICKET); ++ ++ if (env_create_private == NULL) ++ return false; ++ ++ return string_to_bool(env_create_private); ++} ++ ++void set_global_create_private_ticket(bool enabled, int flags/*unused - persistent*/) ++{ ++ assert_global_configuration_initialized(); ++ ++ if (enabled) ++ xsetenv(CREATE_PRIVATE_TICKET, "1"); ++ else ++ safe_unsetenv(CREATE_PRIVATE_TICKET); ++} +diff --git a/src/plugins/reporter-bugzilla.c b/src/plugins/reporter-bugzilla.c +index d11fadf..941c91f 100644 +--- a/src/plugins/reporter-bugzilla.c ++++ b/src/plugins/reporter-bugzilla.c +@@ -740,9 +740,7 @@ static void set_settings(struct bugzilla_struct *b, map_string_t *settings) + environ = getenv("Bugzilla_DontMatchComponents"); + b->b_DontMatchComponents = environ ? environ : get_map_string_item_or_empty(settings, "DontMatchComponents"); + +- environ = getenv(CREATE_PRIVATE_TICKET); +- if (environ) +- b->b_create_private = string_to_bool(environ); ++ b->b_create_private = get_global_create_private_ticket(); + + if (!b->b_create_private) + { +diff --git a/tests/global_config.at b/tests/global_config.at +index a6f5423..05a0ffa 100644 +--- a/tests/global_config.at ++++ b/tests/global_config.at +@@ -102,3 +102,70 @@ int main(int argc, char **argv) + return EXIT_SUCCESS; + } + ]]) ++ ++## --------------------- ## ++## create_private_ticket ## ++## --------------------- ## ++ ++AT_TESTFUN([create_private_ticket], ++[[ ++#include "testsuite.h" ++ ++TS_MAIN ++{ ++ char cwd_buf[PATH_MAX + 1]; ++ static const char *dirs[] = { ++ NULL, ++ NULL, ++ }; ++ dirs[0] = getcwd(cwd_buf, sizeof(cwd_buf)); ++ ++ static int dir_flags[] = { ++ CONF_DIR_FLAG_NONE, ++ -1, ++ }; ++ ++ unlink("libreport.conf"); ++ FILE *lrf = fopen("libreport.conf", "wx"); ++ assert(lrf != NULL); ++ fclose(lrf); ++ ++ assert(load_global_configuration_from_dirs(dirs, dir_flags)); ++ ++ TS_ASSERT_FALSE_MESSAGE(get_global_create_private_ticket(), "False by default"); ++ ++ set_global_create_private_ticket(false, 0); ++ ++ TS_ASSERT_FALSE_MESSAGE(get_global_create_private_ticket(), "Still false"); ++ ++ set_global_create_private_ticket(true, 0); ++ ++ TS_ASSERT_TRUE_MESSAGE(get_global_create_private_ticket(), "Configuration accepted"); ++ TS_ASSERT_STRING_EQ(getenv(CREATE_PRIVATE_TICKET), "1", "Correct ENVIRONMENT value"); ++ ++ set_global_create_private_ticket(true, 0); ++ ++ TS_ASSERT_TRUE_MESSAGE(get_global_create_private_ticket(), "Configuration sanity"); ++ TS_ASSERT_STRING_EQ(getenv(CREATE_PRIVATE_TICKET), "1", "Correct ENVIRONMENT value"); ++ ++ set_global_create_private_ticket(false, 0); ++ ++ TS_ASSERT_FALSE_MESSAGE(get_global_create_private_ticket(), "Reverted back to False"); ++ TS_ASSERT_STRING_NULL_OR_EMPTY(getenv(CREATE_PRIVATE_TICKET), "Correct ENVIRONMENT value"); ++ ++ xsetenv(CREATE_PRIVATE_TICKET, "1"); ++ ++ TS_ASSERT_TRUE_MESSAGE(get_global_create_private_ticket(), "Loaded from environment"); ++ ++ unsetenv(CREATE_PRIVATE_TICKET); ++ ++ TS_ASSERT_FALSE_MESSAGE(get_global_create_private_ticket(), "Reflects environment"); ++ ++ xsetenv(CREATE_PRIVATE_TICKET, "0"); ++ ++ TS_ASSERT_FALSE_MESSAGE(get_global_create_private_ticket(), "Zero is false"); ++ ++ free_global_configuration(); ++} ++TS_RETURN_MAIN ++]]) +-- +1.8.3.1 + diff --git a/SOURCES/0189-testsuite-add-simple-helper-macros.patch b/SOURCES/0189-testsuite-add-simple-helper-macros.patch new file mode 100644 index 0000000..377bb31 --- /dev/null +++ b/SOURCES/0189-testsuite-add-simple-helper-macros.patch @@ -0,0 +1,422 @@ +From 83ff1e3f0b925910c0965490a26860a7c5efaa57 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Tue, 22 Mar 2016 17:13:38 +0100 +Subject: [PATCH] testsuite: add simple helper macros + +I am tired of repeating the same constructions over and over again. + +Signed-off-by: Jakub Filak +--- + tests/Makefile.am | 2 +- + tests/atlocal.in | 2 +- + tests/helpers/testsuite.h | 297 ++++++++++++++++++++++++++++++++++++++++ + tests/helpers/testsuite_tools.h | 67 +++++++++ + 4 files changed, 366 insertions(+), 2 deletions(-) + create mode 100644 tests/helpers/testsuite.h + create mode 100644 tests/helpers/testsuite_tools.h + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 9aa3a07..9bfc2b6 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -58,7 +58,7 @@ MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) + check_DATA = atconfig atlocal $(TESTSUITE) + DISTCLEANFILES = atconfig + EXTRA_DIST += atlocal.in conf ureport ureport-rhts-credentials \ +- bugzilla_plugin.at.in ++ helpers/testsuite.h bugzilla_plugin.at.in + + atconfig: $(top_builddir)/config.status + (cd ${top_builddir} && ./config.status ${subdir}/atconfig) +diff --git a/tests/atlocal.in b/tests/atlocal.in +index 1a82edb..3d6b04a 100644 +--- a/tests/atlocal.in ++++ b/tests/atlocal.in +@@ -6,7 +6,7 @@ CC='@CC@' + LIBTOOL="$abs_top_builddir/libtool" + + # We want no optimization. +-CFLAGS="@O0CFLAGS@ -I$abs_top_builddir/src/include -I$abs_top_builddir/src/lib -I$abs_top_builddir/src/gtk-helpers -D_GNU_SOURCE @GLIB_CFLAGS@ @GTK_CFLAGS@ -DDEFAULT_DUMP_DIR_MODE=@DEFAULT_DUMP_DIR_MODE@" ++CFLAGS="@O0CFLAGS@ -I$abs_top_builddir/tests/helpers -I$abs_top_builddir/src/include -I$abs_top_builddir/src/lib -I$abs_top_builddir/src/gtk-helpers -D_GNU_SOURCE @GLIB_CFLAGS@ @GTK_CFLAGS@ -DDEFAULT_DUMP_DIR_MODE=@DEFAULT_DUMP_DIR_MODE@" + + # Are special link options needed? + LDFLAGS="@LDFLAGS@" +diff --git a/tests/helpers/testsuite.h b/tests/helpers/testsuite.h +new file mode 100644 +index 0000000..28bfd3e +--- /dev/null ++++ b/tests/helpers/testsuite.h +@@ -0,0 +1,297 @@ ++/* ++ Copyright (C) 2015 ABRT team ++ Copyright (C) 2015 RedHat inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ ++ ---- ++ ++ libreport testsuite helpers ++ ++ Feel free to add whatever macro you need but please try to keep this file ++ short and useful. ++ ++ Bare in mind usability and print as much accurate log messages as possible: ++ ++ Example 1: ++ ++ int actual = 0; ++ int expected = 1; ++ TS_ASSERT_SIGNED_EQ(actual, expected) ++ ++ ---- ++ ++ [ FAILED ] 12: Assert (actual == expected) ++ Actual : 0 ++ Expected: 1 ++ ++ ++ Example 2: ++ ++ int get_runtime_number() { ++ return 0; ++ } ++ ++ TS_ASSERT_SIGNED_OP_MESSAGE(get_runtime_number(), 1, "Custom message") ++ ++ ---- ++ ++ [ FAILED ] 3: Custom messages (get_runtime_number() >= 1) ++ Actual : 0 ++ Expected: 1 ++ ++ Note: the number right behind [ FAILED ] is line number where the failed ++ assert is located. ++*/ ++#ifndef LIBREPORT_TESTSUITE_H ++#define LIBREPORT_TESTSUITE_H ++ ++/* For g_verbose */ ++#include "internal_libreport.h" ++ ++/* For convenience */ ++#include ++ ++ ++/* Number of failed asserts and other failures. Can be used a return value of ++ * the main function. */ ++long g_testsuite_fails = 0; ++ ++/* Number of successful asserts. For debugging purpose. */ ++long g_testsuite_ok = 0; ++ ++/* Enables additional log messages. */ ++int g_testsuite_debug = 0; ++ ++/* Can be used to change log messages destination. */ ++FILE *g_testsuite_output_stream = 0; ++ ++ ++/* ++ * Test case definition ++ */ ++ ++#define TS_MAIN \ ++ int main(int argc, char *argv[]) { g_verbose = 3; do ++ ++#define TS_RETURN_MAIN \ ++ while (0) ;\ ++ return g_testsuite_fails; } ++ ++ ++/* ++ * Logging ++ */ ++ ++#define TS_PRINTF(format, ...) \ ++ fprintf(g_testsuite_output_stream != NULL ? g_testsuite_output_stream : stderr, format, __VA_ARGS__) ++ ++#define TS_DEBUG_PRINTF(format, ...) \ ++ do { if (g_testsuite_debug) { TS_PRINTF(format, __VA_ARGS__); } } while (0) ++ ++ ++/* ++ * Handling of test results ++ */ ++ ++#define TS_SUCCESS(format, ...) \ ++ do { \ ++ TS_DEBUG_PRINTF("[ OK ] %d: ", __LINE__); \ ++ TS_DEBUG_PRINTF(format, __VA_ARGS__); \ ++ ++g_testsuite_ok; \ ++ } while (0) ++ ++#define TS_FAILURE(format, ...) \ ++ do { \ ++ TS_PRINTF("[ FAILED ] %d: ", __LINE__); \ ++ TS_PRINTF(format, __VA_ARGS__); \ ++ ++g_testsuite_fails; \ ++ } while (0) ++ ++ ++/* ++ * Logical conditions ++ */ ++ ++#define _TS_ASSERT_BOOLEAN(expression, expected, message) \ ++ do { \ ++ const int result = (expression); \ ++ if (result == expected) { \ ++ TS_SUCCESS("%s ("#expression" == %s)\n", message ? message : "Assert", expected ? "TRUE" : "FALSE"); \ ++ }\ ++ else { \ ++ TS_FAILURE("%s ("#expression" == %s)\n", message ? message : "Assert", expected ? "TRUE" : "FALSE"); \ ++ }\ ++ } while(0) ++ ++ ++#define TS_ASSERT_TRUE_MESSAGE(expression, message) \ ++ _TS_ASSERT_BOOLEAN(expression, 1, message) ++ ++#define TS_ASSERT_TRUE(expression) \ ++ TS_ASSERT_TRUE_MESSAGE(expression, NULL) ++ ++#define TS_ASSERT_FALSE_MESSAGE(expression, message) \ ++ _TS_ASSERT_BOOLEAN(expression, 0, message) ++ ++#define TS_ASSERT_FALSE(expression) \ ++ TS_ASSERT_FALSE_MESSAGE(expression, NULL) ++ ++/* ++ * Testing of signed numbers ++ */ ++ ++#define TS_ASSERT_SIGNED_OP_MESSAGE(actual, operator, expected, message) \ ++ do { \ ++ long long l_ts_lhs = (actual); \ ++ long long l_ts_rhs = (expected); \ ++ if (l_ts_lhs operator l_ts_rhs) { \ ++ TS_SUCCESS("%s ("#actual" "#operator" "#expected")\n\tActual : %lld\n", message ? message : "Assert", l_ts_lhs); \ ++ } \ ++ else { \ ++ TS_FAILURE("%s ("#actual" "#operator" "#expected")\n\tActual : %lld\n\tExpected: %lld\n", message ? message : "Assert", l_ts_lhs, l_ts_rhs); \ ++ } \ ++ } while(0) ++ ++#define TS_ASSERT_SIGNED_EQ(actual, expected) \ ++ TS_ASSERT_SIGNED_OP_MESSAGE(actual, ==, expected, NULL) ++ ++#define TS_ASSERT_SIGNED_GE(actual, expected) \ ++ TS_ASSERT_SIGNED_OP_MESSAGE(actual, >=, expected, NULL) ++ ++ ++/* ++ * Testing of chars ++ */ ++ ++#define TS_ASSERT_CHAR_OP_MESSAGE(actual, operator, expected, message) \ ++ do { \ ++ char l_ts_lhs = (actual); \ ++ char l_ts_rhs = (expected); \ ++ if (l_ts_lhs operator l_ts_rhs) { \ ++ TS_SUCCESS("%s ("#actual" "#operator" "#expected")\n\tActual : %c\n", message ? message : "Assert", l_ts_lhs); \ ++ } \ ++ else { \ ++ TS_FAILURE("%s ("#actual" "#operator" "#expected")\n\tActual : %c\n\tExpected: %c\n", message ? message : "Assert", l_ts_lhs, l_ts_rhs); \ ++ } \ ++ } while(0) ++ ++#define TS_ASSERT_CHAR_EQ_MESSAGE(actual, expected, message) \ ++ TS_ASSERT_CHAR_OP_MESSAGE(actual, ==, expected, message) ++ ++#define TS_ASSERT_CHAR_EQ(actual, expected) \ ++ TS_ASSERT_CHAR_EQ_MESSAGE(actual, ==, expected, NULL) ++ ++ ++/* ++ * Testing of strings ++ */ ++ ++#define TS_ASSERT_STRING_EQ(actual, expected, message) \ ++ do { \ ++ const char *l_ts_lhs = (actual); \ ++ const char *l_ts_rhs = (expected); \ ++ if (l_ts_lhs == NULL && l_ts_rhs != NULL) { \ ++ TS_FAILURE("%s ("#actual" == "#expected")\n\tActual : NULL\n\tExpected: %p\n", message ? message : "Assert", l_ts_rhs); \ ++ } \ ++ else if (l_ts_lhs != NULL && l_ts_rhs == NULL) { \ ++ TS_FAILURE("%s ("#actual" == "#expected")\n\tActual : %s\n\tExpected: NULL\n", message ? message : "Assert", l_ts_lhs); \ ++ } \ ++ else if ((l_ts_rhs == NULL && l_ts_rhs == NULL)) { \ ++ TS_SUCCESS("%s ("#actual" == "#expected")\n\tActual : NULL\n", message ? message : "Assert"); \ ++ } \ ++ else if (strcmp(l_ts_lhs, l_ts_rhs) == 0) { \ ++ TS_SUCCESS("%s ("#actual" == "#expected")\n\tActual : %s\n", message ? message : "Assert", l_ts_lhs); \ ++ } \ ++ else { \ ++ TS_FAILURE("%s ("#actual" == "#expected")\n\tActual : %s\n\tExpected: %s\n", message ? message : "Assert", l_ts_lhs, l_ts_rhs); \ ++ } \ ++ } while(0) ++ ++#define TS_ASSERT_STRING_BEGINS_WITH(actual, prefix, message) \ ++ do { \ ++ const char *l_ts_lhs = (actual); \ ++ const char *l_ts_rhs = (prefix); \ ++ if (l_ts_lhs == NULL && l_ts_rhs != NULL) { \ ++ TS_FAILURE("%s ("#actual" begins with "#prefix")\n\tActual : NULL\n\tExpected: %p\n", message ? message : "Assert", l_ts_rhs); \ ++ } \ ++ else if (l_ts_lhs != NULL && l_ts_rhs == NULL) { \ ++ TS_FAILURE("%s ("#actual" begins with "#prefix")\n\tActual : %s\n\tExpected: NULL\n", message ? message : "Assert", l_ts_lhs); \ ++ } \ ++ else if ((l_ts_rhs == NULL && l_ts_rhs == NULL)) { \ ++ TS_SUCCESS("%s ("#actual" begins with "#prefix")\n\tActual : NULL\n", message ? message : "Assert"); \ ++ } \ ++ else if (strncmp(l_ts_lhs, l_ts_rhs, strlen(l_ts_rhs)) == 0) { \ ++ TS_SUCCESS("%s ("#actual" begins with "#prefix")\n\tActual : %s\n", message ? message : "Assert", l_ts_lhs); \ ++ } \ ++ else { \ ++ TS_FAILURE("%s ("#actual" begins with "#prefix")\n\tActual : %s\n\tExpected: %s\n", message ? message : "Assert", l_ts_lhs, l_ts_rhs); \ ++ } \ ++ } while(0) ++ ++#define TS_ASSERT_STRING_NULL_OR_EMPTY(actual, message) \ ++ do { \ ++ const char *l_ts_lhs = (actual); \ ++ if (l_ts_lhs != NULL && l_ts_lhs[0] != '\0') { \ ++ TS_FAILURE("%s ("#actual" is NULL or empty)\n\tActual : %s\n", message ? message : "Assert", l_ts_lhs); \ ++ } \ ++ else if ((l_ts_lhs != NULL && l_ts_lhs[0] == '\0')) { \ ++ TS_SUCCESS("%s ("#actual" is NULL or empty)\n\tActual : is empty\n", message ? message : "Assert"); \ ++ } \ ++ else if (l_ts_lhs == NULL) { \ ++ TS_SUCCESS("%s ("#actual" is NULL or empty)\n\tActual : is NULL\n", message ? message : "Assert"); \ ++ } \ ++ else { \ ++ TS_PRINTF("%s", "Invalid conditions in TS_ASSERT_STRING_NULL_OR_EMPTY"); \ ++ abort(); \ ++ } \ ++ } while(0) ++ ++/* ++ * Testing of pointers ++ */ ++ ++#define TS_ASSERT_PTR_OP_MESSAGE(actual, operator, expected, message) \ ++ do { \ ++ const void *l_ts_lhs = (actual); \ ++ const void *l_ts_rhs = (expected); \ ++ if (l_ts_lhs operator l_ts_rhs) { \ ++ TS_SUCCESS("%s ("#actual" "#operator" "#expected")\n\tActual : %p\n", message ? message : "Assert", l_ts_lhs); \ ++ } \ ++ else { \ ++ TS_FAILURE("%s ("#actual" "#operator" "#expected")\n\tActual : %p\n\tExpected: %p\n", message ? message : "Assert", l_ts_lhs, l_ts_rhs); \ ++ } \ ++ } while(0) ++ ++ ++#define TS_ASSERT_PTR_IS_NULL_MESSAGE(actual, message) \ ++ TS_ASSERT_PTR_OP_MESSAGE(actual, ==, NULL, message); ++ ++#define TS_ASSERT_PTR_IS_NULL(actual) \ ++ TS_ASSERT_PTR_IS_NULL_MESSAGE(actual, NULL); ++ ++ ++#define TS_ASSERT_PTR_IS_NOT_NULL_MESSAGE(actual, message) \ ++ TS_ASSERT_PTR_OP_MESSAGE(actual, !=, NULL, message); ++ ++#define TS_ASSERT_PTR_IS_NOT_NULL(actual) \ ++ TS_ASSERT_PTR_IS_NOT_NULL_MESSAGE(actual, NULL); ++ ++ ++#define TS_ASSERT_PTR_EQ(actual, expected) \ ++ TS_ASSERT_PTR_OP_MESSAGE(actual, ==, expected, NULL); ++ ++ ++#endif/*LIBREPORT_TESTSUITE_H*/ +diff --git a/tests/helpers/testsuite_tools.h b/tests/helpers/testsuite_tools.h +new file mode 100644 +index 0000000..ed3a557 +--- /dev/null ++++ b/tests/helpers/testsuite_tools.h +@@ -0,0 +1,67 @@ ++/* ++ Copyright (C) 2015 ABRT team ++ Copyright (C) 2015 RedHat inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ ++ ---- ++ ++ Helper functions ++*/ ++ ++#include "testsuite.h" ++ ++/* Creates a new dump directory in a new temporary directory ++ */ ++static struct dump_dir *testsuite_dump_dir_create(uid_t uid, mode_t mode, int ts_flags) ++{ ++ char dump_dir_name[] = "/tmp/XXXXXX/dump_dir"; ++ ++ char *last_slash = strrchr(dump_dir_name, '/'); ++ *last_slash = '\0'; ++ ++ if (mkdtemp(dump_dir_name) == NULL) { ++ perror("mkdtemp()"); ++ abort(); ++ } ++ ++ fprintf(stdout, "Test temp directory: %s\n", dump_dir_name); ++ fflush(stdout); ++ ++ *last_slash = '/'; ++ ++ struct dump_dir *dd = dd_create(dump_dir_name, uid, mode == (mode_t)-1 ? 0640 : mode); ++ assert(dd != NULL); ++ ++ return dd; ++} ++ ++/* Removes the dump directory in and the temporary directory ++ * ++ * See testsuite_dump_dir_create() ++ */ ++static void testsuite_dump_dir_delete(struct dump_dir *dd) ++{ ++ char *tmp_dir = xstrndup(dd->dd_dirname, strrchr(dd->dd_dirname, '/') - dd->dd_dirname); ++ assert(dd_delete(dd) == 0); ++ ++ if(rmdir(tmp_dir) != 0) ++ { ++ perror("rmdir()"); ++ abort(); ++ } ++ ++ free(tmp_dir); ++} +-- +1.8.3.1 + diff --git a/SOURCES/0190-bugzilla-don-t-report-private-problem-as-comment.patch b/SOURCES/0190-bugzilla-don-t-report-private-problem-as-comment.patch new file mode 100644 index 0000000..64bcc44 --- /dev/null +++ b/SOURCES/0190-bugzilla-don-t-report-private-problem-as-comment.patch @@ -0,0 +1,167 @@ +From 6e11121e7ec10cd63e6bbaa8e996b883e9fe1ac2 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Wed, 23 Mar 2016 17:11:56 +0100 +Subject: [PATCH] bugzilla: don't report private problem as comment + +Before this patch reporter-bugzilla ignored the Private report request +and added a public comment to a duplicate bug because it was assumed +that the duplicate comment cannot contain anything security sensitive. + +There are two problems with it. The assumption is invalid because the +comment contains all one-line files including 'cmdline' and the reporter +might added something private to the bug description. + +Bugzilla comments can be made private but not all users have rights to +do so. On the contrary, all users can set a group to a bug report. +Hence, this commit teaches reporter-bugzilla to ask the user if he/she +wants to open a new, private bug report and immediately close it as a +duplicate of the original or terminate the reporting. The tool will ask +the question only if the users wants to open a private report and a +duplicate bug report is found. + +Resolves: #1279453 + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + src/plugins/reporter-bugzilla.c | 44 +++++++++++++++++++++++++++++++++++++++-- + src/plugins/rhbz.c | 23 +++++++++++++++++++++ + src/plugins/rhbz.h | 4 ++++ + 3 files changed, 69 insertions(+), 2 deletions(-) + +diff --git a/src/plugins/reporter-bugzilla.c b/src/plugins/reporter-bugzilla.c +index 941c91f..fbe7873 100644 +--- a/src/plugins/reporter-bugzilla.c ++++ b/src/plugins/reporter-bugzilla.c +@@ -907,6 +907,7 @@ int main(int argc, char **argv) + unsigned opts = parse_opts(argc, argv, program_options, program_usage_string); + argv += optind; + ++ load_global_configuration(); + export_abrt_envvars(0); + + map_string_t *settings = new_map_string(); +@@ -928,6 +929,8 @@ int main(int argc, char **argv) + */ + /*free_map_string(settings);*/ + } ++ /* either we got Bugzilla_CreatePrivate from settings or -g was specified on cmdline */ ++ rhbz.b_create_private |= (opts & OPT_g); + + log_notice("Initializing XML-RPC library"); + xmlrpc_env env; +@@ -1189,8 +1192,38 @@ int main(int argc, char **argv) + } + } + +- if (existing_id < 0) ++ if (existing_id < 0 || rhbz.b_create_private) + { ++ ++ if (existing_id >= 0) ++ { ++ char *msg = xasprintf(_( ++ "You have requested to make your data accessible only to a " ++ "specific group and this bug is a duplicate of bug: " ++ "%s/%u" ++ " " ++ "In case of bug duplicates a new comment is added to the " ++ "original bug report but access to the comments cannot be " ++ "restricted to a specific group." ++ " " ++ "Would you like to open a new bug report and close it as " ++ "DUPLICATE of the original one?" ++ " " ++ "Otherwise, the bug reporting procedure will be terminated."), ++ rhbz.b_bugzilla_url, existing_id); ++ ++ int r = ask_yes_no(msg); ++ free(msg); ++ ++ if (r == 0) ++ { ++ log(_("Logging out")); ++ rhbz_logout(client); ++ ++ exit(EXIT_CANCEL_BY_USER); ++ } ++ } ++ + /* Create new bug */ + log(_("Creating a new bug")); + +@@ -1205,7 +1238,7 @@ int main(int argc, char **argv) + int new_id = rhbz_new_bug(client, + problem_data, rhbz.b_product, rhbz.b_product_version, + summary, bzcomment, +- (rhbz.b_create_private | (opts & OPT_g)), // either we got Bugzilla_CreatePrivate from settings or -g was specified on cmdline ++ rhbz.b_create_private, + rhbz.b_private_groups + ); + free(bzcomment); +@@ -1241,6 +1274,13 @@ int main(int argc, char **argv) + bz = new_bug_info(); + bz->bi_status = xstrdup("NEW"); + bz->bi_id = new_id; ++ ++ if (existing_id >= 0) ++ { ++ log(_("Closing bug %i as duplicate of bug %i"), new_id, existing_id); ++ rhbz_close_as_duplicate(client, new_id, existing_id, RHBZ_NOMAIL_NOTIFY); ++ } ++ + goto log_out; + } + +diff --git a/src/plugins/rhbz.c b/src/plugins/rhbz.c +index bad9ed4..a227c62 100644 +--- a/src/plugins/rhbz.c ++++ b/src/plugins/rhbz.c +@@ -862,6 +862,29 @@ void rhbz_set_url(struct abrt_xmlrpc *ax, int bug_id, const char *url, int flags + xmlrpc_DECREF(result); + } + ++void rhbz_close_as_duplicate(struct abrt_xmlrpc *ax, int bug_id, ++ int duplicate_bug, ++ int flags) ++{ ++ func_entry(); ++ ++ const int nomail_notify = !!IS_NOMAIL_NOTIFY(flags); ++ xmlrpc_value *result = abrt_xmlrpc_call(ax, "Bug.update", "{s:i,s:s,s:s,s:i,s:i}", ++ "ids", bug_id, ++ "status", "CLOSED", ++ "resolution", "DUPLICATE", ++ "dupe_of", duplicate_bug, ++ ++ /* Undocumented argument but it works with Red Hat Bugzilla version 4.2.4-7 ++ * and version 4.4.rc1.b02 ++ */ ++ "nomail", nomail_notify ++ ); ++ ++ if (result) ++ xmlrpc_DECREF(result); ++} ++ + xmlrpc_value *rhbz_search_duphash(struct abrt_xmlrpc *ax, + const char *product, + const char *version, +diff --git a/src/plugins/rhbz.h b/src/plugins/rhbz.h +index 976d333..15e7699 100644 +--- a/src/plugins/rhbz.h ++++ b/src/plugins/rhbz.h +@@ -74,6 +74,10 @@ void rhbz_add_comment(struct abrt_xmlrpc *ax, int bug_id, const char *comment, + + void rhbz_set_url(struct abrt_xmlrpc *ax, int bug_id, const char *url, int flags); + ++void rhbz_close_as_duplicate(struct abrt_xmlrpc *ax, int bug_id, ++ int duplicate_bug, ++ int flags); ++ + void *rhbz_bug_read_item(const char *memb, xmlrpc_value *xml, int flags); + + void rhbz_logout(struct abrt_xmlrpc *ax); +-- +1.8.3.1 + diff --git a/SOURCES/0192-Add-workflow-for-RHEL-anonymous-report.patch b/SOURCES/0192-Add-workflow-for-RHEL-anonymous-report.patch new file mode 100644 index 0000000..8bef6f6 --- /dev/null +++ b/SOURCES/0192-Add-workflow-for-RHEL-anonymous-report.patch @@ -0,0 +1,321 @@ +From 9be0992e4b6e459ba64c9f2433a5a022dd0b21fa Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Thu, 24 Mar 2016 16:04:25 +0100 +Subject: [PATCH] Add workflow for RHEL anonymous report + +Make name and descritpion of RHEL's workflow more obvious. + +Related: #1258482 + +Signed-off-by: Matej Habrnal +--- + doc/Makefile.am | 1 + + doc/report_uReport.conf.txt | 41 ++++++++++++++++++++++++++++ + po/POTFILES.in | 1 + + src/plugins/report_RHTSupport.xml.in | 11 ++++---- + src/plugins/report_uReport.xml.in | 11 ++++---- + src/workflows/Makefile.am | 3 ++ + src/workflows/report_uReport.conf | 3 ++ + src/workflows/workflow_RHELCCpp.xml.in | 4 +-- + src/workflows/workflow_RHELJava.xml.in | 4 +-- + src/workflows/workflow_RHELKerneloops.xml.in | 4 +-- + src/workflows/workflow_RHELLibreport.xml.in | 4 +-- + src/workflows/workflow_RHELPython.xml.in | 4 +-- + src/workflows/workflow_RHELvmcore.xml.in | 4 +-- + src/workflows/workflow_RHELxorg.xml.in | 4 +-- + src/workflows/workflow_uReport.xml.in | 9 ++++++ + 15 files changed, 84 insertions(+), 24 deletions(-) + create mode 100644 doc/report_uReport.conf.txt + create mode 100644 src/workflows/report_uReport.conf + create mode 100644 src/workflows/workflow_uReport.xml.in + +diff --git a/doc/Makefile.am b/doc/Makefile.am +index da4785e..9376984 100644 +--- a/doc/Makefile.am ++++ b/doc/Makefile.am +@@ -48,6 +48,7 @@ MAN5_TXT += report_fedora.conf.txt + MAN5_TXT += report_Logger.conf.txt + MAN5_TXT += report_rhel.conf.txt + MAN5_TXT += report_rhel_bugzilla.conf.txt ++MAN5_TXT += report_uReport.conf.txt + MAN5_TXT += report_logger.conf.txt + MAN5_TXT += report_mailx.conf.txt + MAN5_TXT += report_uploader.conf.txt +diff --git a/doc/report_uReport.conf.txt b/doc/report_uReport.conf.txt +new file mode 100644 +index 0000000..07fa836 +--- /dev/null ++++ b/doc/report_uReport.conf.txt +@@ -0,0 +1,41 @@ ++report_uReport.conf(5) ++====================== ++ ++NAME ++---- ++report_uReport.conf - configuration file for libreport. ++ ++DESCRIPTION ++----------- ++This configuration file specifies which of the reporting work flow definitions ++are applicable for all problems types on Red Hat Enterprise Linux. ++ ++All applicable work flows are presented to users in User Interface as ++possibilities for processing of any problems. A particular work flow becomes ++applicable if its conditions are satisfied. ++ ++This configuration file consists from one condition per line. ++ ++Each condition line must start with EVENT=workflow_NAME where "workflow_" is ++constant prefix and "workflow_NAME" is base name of path to reporting work flow ++configuration file. ++ ++The rest of condition line has form VAR=VAL, VAR!=VAL or VAL~=REGEX, where VAR ++is a name of problem directory element to be checked (for example, ++"executable", "package", hostname" etc). The condition may consists ++from as many element checks as it is necessary. ++ ++EXAMPLES ++-------- ++Condition line:: ++ EVENT=workflow_uReport ++ ++The condition line above expects existence of /usr/share/libreport/workflows/workflow_uReport.xml ++ ++SEE ALSO ++-------- ++report-gtk(1) ++ ++AUTHOR ++------ ++* ABRT team +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 1222c95..d843de1 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -64,6 +64,7 @@ src/workflows/workflow_MailxCCpp.xml.in + src/workflows/workflow_Mailx.xml.in + src/workflows/workflow_UploadCCpp.xml.in + src/workflows/workflow_Upload.xml.in ++src/workflows/workflow_uReport.xml.in + src/workflows/workflow_RHELCCpp.xml.in + src/workflows/workflow_RHELKerneloops.xml.in + src/workflows/workflow_RHELPython.xml.in +diff --git a/src/plugins/report_RHTSupport.xml.in b/src/plugins/report_RHTSupport.xml.in +index b7a7872..60e18d9 100644 +--- a/src/plugins/report_RHTSupport.xml.in ++++ b/src/plugins/report_RHTSupport.xml.in +@@ -4,6 +4,7 @@ + <_description>Report to Red Hat support + + package ++ yes + count,event_log,vmcore + + no +@@ -24,11 +25,6 @@ + <_description>Red Hat customer password + no + +- + + ++ + + + False +@@ -122,12 +123,13 @@ + + True + True ++ True ++ True + out + + + True + True +- word + + + +@@ -138,15 +140,92 @@ + + + +- ++ ++ True + False ++ True ++ vertical ++ ++ ++ True ++ False ++ How reproducible is this problem? ++ 0.02 ++ 0 ++ ++ ++ False ++ True ++ 0 ++ ++ + +- ++ + True + False +- You need to fill the how to before you can proceed... +- True + ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ True ++ False ++ How it can be reproduced (one step per line)? ++ 0 ++ 5 ++ ++ ++ False ++ True ++ 2 ++ ++ ++ ++ ++ True ++ True ++ True ++ True ++ out ++ ++ ++ True ++ True ++ ++ ++ ++ ++ True ++ True ++ 3 ++ ++ ++ ++ ++ True ++ False ++ ++ ++ True ++ False ++ Please add a comprehensive description of the problem you have. This is a very long place holder. ++ True ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ True ++ True ++ 4 ++ + + + +@@ -156,19 +235,67 @@ + + + +- ++ + True + False +- 0 +- 0 +- <b>Your comments are not private.</b> They may be included into publicly visible problem reports. +- True +- True ++ True ++ vertical ++ ++ ++ True ++ False ++ ++ ++ True ++ False ++ You need to fill the how to before you can proceed... ++ True ++ ++ ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ False ++ start ++ start ++ <b>Your comments are not private.</b> They may be included into publicly visible problem reports. ++ True ++ True ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ I don't know what caused this problem ++ True ++ True ++ False ++ start ++ 0 ++ True ++ ++ ++ False ++ True ++ 2 ++ ++ + + + False + True +- 3 ++ 4 + + + +@@ -208,21 +335,6 @@ + + False + True +- 4 +- +- +- +- +- I don't know what caused this problem +- True +- True +- False +- 0 +- True +- +- +- False +- True + 5 + + +diff --git a/src/include/event_config.h b/src/include/event_config.h +index 7d137c1..fdcb3b4 100644 +--- a/src/include/event_config.h ++++ b/src/include/event_config.h +@@ -82,6 +82,7 @@ typedef struct + bool ec_sending_sensitive_data; + bool ec_supports_restricted_access; + char *ec_restricted_access_option; ++ bool ec_requires_details; + + GList *ec_imported_event_names; + GList *options; +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index 651e339..c5f899c 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -952,6 +952,10 @@ struct dump_dir *open_directory_for_writing( + #define FILENAME_ABRT_VERSION "abrt_version" + #define FILENAME_EXPLOITABLE "exploitable" + ++/* reproducible element is used by functions from problem_data.h */ ++#define FILENAME_REPRODUCIBLE "reproducible" ++#define FILENAME_REPRODUCER "reproducer" ++ + // Not stored as files, added "on the fly": + #define CD_DUMPDIR "Directory" + +diff --git a/src/include/problem_data.h b/src/include/problem_data.h +index 0fc8b78..d75a986 100644 +--- a/src/include/problem_data.h ++++ b/src/include/problem_data.h +@@ -142,6 +142,17 @@ problem_data_t *create_problem_data_for_reporting(const char *dump_dir_name); + struct dump_dir *create_dump_dir_from_problem_data(problem_data_t *problem_data, const char *base_dir_name); + struct dump_dir *create_dump_dir_from_problem_data_ext(problem_data_t *problem_data, const char *base_dir_name, uid_t uid); + ++enum { ++ PROBLEM_REPRODUCIBLE_UNKNOWN, ++ PROBLEM_REPRODUCIBLE_YES, ++ PROBLEM_REPRODUCIBLE_RECURRENT, ++ ++ _PROBLEM_REPRODUCIBLE_MAX_, ++}; ++ ++int get_problem_data_reproducible(problem_data_t *problem_data); ++const char *get_problem_data_reproducible_name(int reproducible); ++ + #ifdef __cplusplus + } + #endif +diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c +index a5e3d3e..aec2ba4 100644 +--- a/src/lib/event_xml_parser.c ++++ b/src/lib/event_xml_parser.c +@@ -35,6 +35,7 @@ + #define SENDING_SENSITIVE_DATA_ELEMENT "sending-sensitive-data" + #define SUPPORTS_RESTRICTED_ACCESS_ELEMENT "support-restricted-access" + #define RESTRICTED_ACCESS_OPTION_ATTR "optionname" ++#define REQUIRES_DETAILS "requires-details" + + #define REQUIRES_ELEMENT "requires-items" + #define EXCL_BY_DEFAULT_ELEMENT "exclude-items-by-default" +@@ -509,6 +510,10 @@ static void text(GMarkupParseContext *context, + { + ui->ec_supports_restricted_access = string_to_bool(text_copy); + } ++ else if (strcmp(inner_element, REQUIRES_DETAILS) == 0) ++ { ++ ui->ec_requires_details = string_to_bool(text_copy); ++ } + } + free(text_copy); + } +diff --git a/src/lib/problem_data.c b/src/lib/problem_data.c +index 9e625bd..2f66fb3 100644 +--- a/src/lib/problem_data.c ++++ b/src/lib/problem_data.c +@@ -637,3 +637,38 @@ void problem_data_get_osinfo(problem_data_t *problem_data, map_string_t *osinfo) + problem_data_get_osinfo_from_items(problem_data, osinfo, + FILENAME_OS_INFO, FILENAME_OS_RELEASE); + } ++ ++static const gchar const* reproducible_names[_PROBLEM_REPRODUCIBLE_MAX_] = ++{ ++ "Not sure how to reproduce the problem", ++ "The problem is reproducible", ++ "The problem occurs regularly", ++}; ++ ++int get_problem_data_reproducible(problem_data_t *problem_data) ++{ ++ const char *reproducible_str = problem_data_get_content_or_NULL(problem_data, FILENAME_REPRODUCIBLE); ++ if (reproducible_str == NULL) ++ { ++ log_info("Cannot return Reproducible type: missing "FILENAME_REPRODUCIBLE); ++ return -1; ++ } ++ ++ for (int i = 0; i < _PROBLEM_REPRODUCIBLE_MAX_; ++i) ++ if (strcmp(reproducible_str, reproducible_names[i]) == 0) ++ return i; ++ ++ error_msg("Cannot return Reproducible type: invalid format of '%s'", FILENAME_REPRODUCIBLE); ++ return -1; ++} ++ ++const char *get_problem_data_reproducible_name(int reproducible) ++{ ++ if (reproducible < 0 || reproducible >= _PROBLEM_REPRODUCIBLE_MAX_) ++ { ++ error_msg("Cannot return Reproducible name: invalid code: %d", reproducible); ++ return NULL; ++ } ++ ++ return reproducible_names[reproducible]; ++} +-- +1.8.3.1 + diff --git a/SOURCES/0194-rhtsupport-Discourage-users-from-opening-one-shot-cr.patch b/SOURCES/0194-rhtsupport-Discourage-users-from-opening-one-shot-cr.patch new file mode 100644 index 0000000..c6fac29 --- /dev/null +++ b/SOURCES/0194-rhtsupport-Discourage-users-from-opening-one-shot-cr.patch @@ -0,0 +1,43 @@ +From 49ddc9209df746b83ca4767075c56f4df790a03c Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Tue, 29 Mar 2016 12:01:30 +0200 +Subject: [PATCH] rhtsupport: Discourage users from opening one-shot crashes + +Related: #1258482 + +Signed-off-by: Matej Habrnal +--- + src/plugins/reporter-rhtsupport.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/src/plugins/reporter-rhtsupport.c b/src/plugins/reporter-rhtsupport.c +index 90988fc..2374dd9 100644 +--- a/src/plugins/reporter-rhtsupport.c ++++ b/src/plugins/reporter-rhtsupport.c +@@ -630,6 +630,23 @@ int main(int argc, char **argv) + rhts_result_t *result_atch = NULL; + char *dsc = NULL; + char *summary = NULL; ++ ++ const char *count = NULL; ++ count = problem_data_get_content_or_NULL(problem_data, FILENAME_COUNT); ++ if (count != NULL ++ && strcmp(count, "1") == 0 ++ /* the 'count' file can lie */ ++ && get_problem_data_reproducible(problem_data) <= PROBLEM_REPRODUCIBLE_UNKNOWN) ++ { ++ int r = ask_yes_no( ++ _("The problem has only occurred once and the ability to reproduce " ++ "the problem is unknown. Please ensure you will be able to " ++ "provide detailed information to our Support Team. " ++ "Would you like to continue and open a new support case?")); ++ if (!r) ++ exit(EXIT_CANCEL_BY_USER); ++ } ++ + const char *function; + const char *reason; + const char *package; +-- +1.8.3.1 + diff --git a/SOURCES/0195-testsuite-problem_data-add-problem_data_reproducible.patch b/SOURCES/0195-testsuite-problem_data-add-problem_data_reproducible.patch new file mode 100644 index 0000000..2be2332 --- /dev/null +++ b/SOURCES/0195-testsuite-problem_data-add-problem_data_reproducible.patch @@ -0,0 +1,436 @@ +From d036dce0c804a6d91790dd8e6aa4f2ca08e703d9 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Tue, 29 Mar 2016 12:11:23 +0200 +Subject: [PATCH] testsuite: problem_data: add problem_data_reproducible + testcase + +Signed-off-by: Matej Habrnal +--- + tests/problem_data.at | 415 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 415 insertions(+) + create mode 100644 tests/problem_data.at + +diff --git a/tests/problem_data.at b/tests/problem_data.at +new file mode 100644 +index 0000000..c4ee4de +--- /dev/null ++++ b/tests/problem_data.at +@@ -0,0 +1,415 @@ ++# -*- Autotest -*- ++ ++AT_BANNER([problem data]) ++ ++## ---------------- ## ++## problem_data_add ## ++## ---------------- ## ++ ++AT_TESTFUN([problem_data_add], ++[[ ++#include "problem_data.h" ++#include "internal_libreport.h" ++#include ++ ++#define TEST_NAME "package" ++#define TEST_CONTENTS "libreport" ++#define TEST_FLAGS (CD_FLAG_TXT | CD_FLAG_ISNOTEDITABLE | CD_FLAG_UNIXTIME) ++ ++int main(int argc, char **argv) ++{ ++ g_verbose = 3; ++ ++ problem_data_t *data = problem_data_new(); ++ problem_data_add(data, TEST_NAME, TEST_CONTENTS, TEST_FLAGS); ++ ++ struct problem_item *itm = problem_data_get_item_or_NULL(data, TEST_NAME); ++ ++ assert(strcmp(itm->content, TEST_CONTENTS) == 0); ++ assert(itm->flags == TEST_FLAGS); ++ assert(itm->size == PROBLEM_ITEM_UNINITIALIZED_SIZE); ++ ++ problem_data_free(data); ++ ++ return 0; ++} ++]]) ++ ++## -------------------- ## ++## problem_data_add_ext ## ++## -------------------- ## ++ ++AT_TESTFUN([problem_data_add_ext], ++[[ ++#include "problem_data.h" ++#include "internal_libreport.h" ++#include ++ ++#define TEST_NAME "package" ++#define TEST_CONTENTS "libreport" ++#define TEST_FLAGS (CD_FLAG_TXT | CD_FLAG_ISNOTEDITABLE | CD_FLAG_UNIXTIME) ++ ++int main(int argc, char **argv) ++{ ++ g_verbose = 3; ++ ++ problem_data_t *data = problem_data_new(); ++ struct problem_item *itm = problem_data_add_ext(data, TEST_NAME, TEST_CONTENTS, TEST_FLAGS, strlen(TEST_CONTENTS)); ++ ++ struct problem_item *found = problem_data_get_item_or_NULL(data, TEST_NAME); ++ assert(itm == found); ++ ++ assert(strcmp(itm->content, TEST_CONTENTS) == 0); ++ assert(itm->flags == TEST_FLAGS); ++ assert(itm->size == strlen(TEST_CONTENTS)); ++ ++ problem_data_free(data); ++ ++ return 0; ++} ++]]) ++ ++## ---------------------- ## ++## problem_item_get_size ## ++## ---------------------- ## ++ ++AT_TESTFUN([problem_item_get_size], ++[[ ++#include "problem_data.h" ++#include "internal_libreport.h" ++#include ++ ++int main(int argc, char **argv) ++{ ++ g_verbose = 3; ++ ++ problem_data_t *data = problem_data_new(); ++ ++ { ++ struct problem_item *itm = problem_data_add_ext(data, "1", "foo", CD_FLAG_TXT | CD_FLAG_ISNOTEDITABLE, PROBLEM_ITEM_UNINITIALIZED_SIZE); ++ const size_t old_size = strlen(itm->content); ++ { ++ size_t current_size = PROBLEM_ITEM_UNINITIALIZED_SIZE; ++ assert(problem_item_get_size(itm, ¤t_size) == 0); ++ assert(current_size != PROBLEM_ITEM_UNINITIALIZED_SIZE); ++ assert(current_size == old_size); ++ } ++ { ++ free(itm->content); ++ itm->content = NULL; ++ size_t current_size = PROBLEM_ITEM_UNINITIALIZED_SIZE; ++ assert(problem_item_get_size(itm, ¤t_size) == 0); ++ assert(current_size != PROBLEM_ITEM_UNINITIALIZED_SIZE); ++ assert(current_size == old_size); ++ } ++ } ++ ++ { ++ char flnm[] = "/tmp/libreport.unittest.XXXXXXX"; ++ int flds = mkstemp(flnm); ++ assert(flds >= 0); ++ /* sizeof(flnm) is strlen + '\0' */ ++ assert(write(flds, flnm, strlen(flnm)) == strlen(flnm)); ++ fsync(flds); ++ ++ struct stat buf; ++ assert(fstat(flds, &buf) == 0); ++ assert(buf.st_size != 0); ++ size_t old_size = buf.st_size; ++ ++ struct problem_item *itm = problem_data_add_ext(data, "2", flnm, CD_FLAG_BIN, PROBLEM_ITEM_UNINITIALIZED_SIZE); ++ ++ { ++ size_t current_size = PROBLEM_ITEM_UNINITIALIZED_SIZE; ++ assert(problem_item_get_size(itm, ¤t_size) == 0); ++ assert(current_size != PROBLEM_ITEM_UNINITIALIZED_SIZE); ++ assert(current_size == old_size); ++ } ++ { ++ close(flds); ++ unlink(flnm); ++ assert(stat(flnm, &buf) != 0); ++ size_t current_size = PROBLEM_ITEM_UNINITIALIZED_SIZE; ++ assert(problem_item_get_size(itm, ¤t_size) == 0); ++ assert(current_size != PROBLEM_ITEM_UNINITIALIZED_SIZE); ++ assert(current_size == old_size); ++ } ++ } ++ ++ problem_data_free(data); ++ ++ return 0; ++} ++]]) ++ ++## ------------------------------- ## ++## problem_data_load_from_dump_dir ## ++## ------------------------------- ## ++ ++AT_TESTFUN([problem_data_load_from_dump_dir], ++[[ ++#include "problem_data.h" ++#include "internal_libreport.h" ++#include ++ ++int main(int argc, char **argv) ++{ ++ g_verbose = 3; ++ ++ char template[] = "/tmp/XXXXXX"; ++ ++ if (mkdtemp(template) == NULL) { ++ perror("mkdtemp()"); ++ return EXIT_FAILURE; ++ } ++ ++ printf("Dump dir path: %s\n", template); ++ ++ struct dump_dir *dd = dd_create(template, (uid_t)-1, 0640); ++ assert(dd != NULL || !"Cannot create new dump directory"); ++ ++ /* dd_create_basic_files() should create these files: ++ FILENAME_TIME, FILENAME_LAST_OCCURRENCE, FILENAME_UID, FILENAME_KERNEL, ++ FILENAME_ARCHITECTURE, FILENAME_HOSTNAME, FILENAME_OS_INFO, FILENAME_OS_RELEASE ++ */ ++ dd_create_basic_files(dd, geteuid(), NULL); ++ ++ dd_save_text(dd, FILENAME_TYPE, "attest"); ++ dd_save_text(dd, FILENAME_ANALYZER, "attest-problem_data"); ++ dd_save_text(dd, FILENAME_DUPHASH, "0123456789ABCDEF"); ++ dd_save_text(dd, FILENAME_UUID, "FEDCBA9876543210"); ++ dd_save_text(dd, FILENAME_USERNAME, "perhaps_tester"); ++ dd_save_text(dd, FILENAME_PACKAGE, "1:attest-1.1-3.x86_64"); ++ dd_save_text(dd, FILENAME_PKG_EPOCH, "1"); ++ dd_save_text(dd, FILENAME_PKG_NAME, "attest"); ++ dd_save_text(dd, FILENAME_PKG_VERSION, "1.1"); ++ dd_save_text(dd, FILENAME_PKG_RELEASE, "3"); ++ dd_save_text(dd, FILENAME_PKG_ARCH, "x86_64"); ++ dd_save_text(dd, FILENAME_CMDLINE, "$TESTSUITE.DIR/$NUM/problem_data_load_from_dump_dir foo blah"); ++ dd_save_text(dd, FILENAME_EXECUTABLE, "$TESTSUITE.DIR/$NUM/problem_data_load_from_dump_dir"); ++ dd_save_text(dd, FILENAME_ROOTDIR, "/"); ++ dd_save_text(dd, FILENAME_PWD, "$TESTSUITE.DIR"); ++ dd_save_text(dd, FILENAME_PID, "12345"); ++ dd_save_text(dd, FILENAME_GLOBAL_PID, "12345"); ++ dd_save_text(dd, FILENAME_TID, "12345"); ++ dd_save_text(dd, FILENAME_COUNT, "1"); ++ dd_save_text(dd, FILENAME_REASON, "Unit testing problem_data_load_from_dump_dir"); ++ dd_save_text(dd, FILENAME_COMMENT, "Random comment"); ++ dd_save_text(dd, FILENAME_BACKTRACE, "Pseudo-backtrace"); ++ dd_save_text(dd, FILENAME_OPEN_FDS, "Opened FDs"); ++ dd_save_text(dd, FILENAME_MAPS, "/proc/[pid]/maps"); ++ dd_save_text(dd, FILENAME_SMAPS, "/proc/[pid]/smaps"); ++ dd_save_text(dd, FILENAME_ENVIRON, "/proc/[pid]/environ"); ++ dd_save_text(dd, FILENAME_LIMITS, "/proc/[pid]/limits"); ++ dd_save_text(dd, FILENAME_CGROUP, "/proc/[pid]/cgroup"); ++ dd_save_text(dd, FILENAME_PROC_PID_STATUS, "/proc/[pid]/status"); ++ dd_save_text(dd, FILENAME_MOUNTINFO, "/proc/[pid]/mountinfo"); ++ dd_save_text(dd, FILENAME_CRASH_FUNCTION, "main"); ++ dd_save_text(dd, FILENAME_REMOTE, "0"); ++ dd_save_text(dd, FILENAME_RATING, "4"); ++ dd_save_text(dd, FILENAME_EXPLOITABLE, "6"); ++ dd_save_text(dd, FILENAME_TAINTED, "Not tainted"); ++ dd_save_text(dd, FILENAME_TAINTED_SHORT, "Not tainted"); ++ dd_save_text(dd, FILENAME_TAINTED_LONG, "Not tainted"); ++ dd_save_text(dd, FILENAME_NOT_REPORTABLE, "Despite 'not tainted' this problem cannot be reported."); ++ dd_save_text(dd, FILENAME_REPORTED_TO, "Bugzilla: URL=https://bugzilla.redhat.com/1000000"); ++ dd_save_text(dd, FILENAME_EVENT_LOG, "--- report_Bugzilla has finished successfully ---"); ++ dd_save_text(dd, FILENAME_KICKSTART_CFG, "kickstart.cfg"); ++ dd_save_text(dd, FILENAME_ANACONDA_TB, "anaconda.tb"); ++ ++ dd_save_text(dd, FILENAME_NAMESPACES, "FILENAME_NAMESPACES"); ++ dd_save_text(dd, FILENAME_OS_INFO_IN_ROOTDIR, "FILENAME_OS_INFO_IN_ROOTDIR"); ++ dd_save_text(dd, FILENAME_OS_RELEASE_IN_ROOTDIR, "FILENAME_OS_RELEASE_IN_ROOTDIR"); ++ dd_save_text(dd, FILENAME_KERNEL_LOG, "FILENAME_KERNEL_LOG"); ++ dd_save_text(dd, FILENAME_DESCRIPTION, "FILENAME_DESCRIPTION"); ++ dd_save_text(dd, FILENAME_CORE_BACKTRACE, "FILENAME_CORE_BACKTRACE"); ++ dd_save_text(dd, FILENAME_REMOTE_RESULT, "FILENAME_REMOTE_RESULT"); ++ dd_save_text(dd, FILENAME_ABRT_VERSION, "FILENAME_ABRT_VERSION"); ++ dd_save_text(dd, FILENAME_CONTAINER, "FILENAME_CONTAINER"); ++ dd_save_text(dd, FILENAME_CONTAINER_ID, "FILENAME_CONTAINER_ID"); ++ dd_save_text(dd, FILENAME_CONTAINER_UUID, "FILENAME_CONTAINER_UUID"); ++ dd_save_text(dd, FILENAME_CONTAINER_IMAGE, "FILENAME_CONTAINER_IMAGE"); ++ dd_save_text(dd, FILENAME_CONTAINER_CMDLINE, "FILENAME_CONTAINER_CMDLINE"); ++ dd_save_text(dd, FILENAME_DOCKER_INSPECT, "FILENAME_DOCKER_INSPECT"); ++ ++ dd_save_text(dd, "attestsuite-random-file", "random content"); ++ dd_save_text(dd, "attestsuite-oneliner-newline", "newline\n"); ++ dd_save_text(dd, "attestsuite-newline-followed", "newline\nfollowed"); ++ dd_save_text(dd, "attestsuite-multi-line", "newline\nextra\n"); ++ dd_save_text(dd, "attestsuite-tab", "tab\ttab"); ++ dd_save_text(dd, "attestsuite-cr", "cr\rcr"); ++ ++ char buffer[1024*3]; ++ memset(buffer, 'x', sizeof(buffer)); ++ ++ { ++ int fd4k = openat(dd->dd_fd, "attestsuite-over4k", O_WRONLY | O_CREAT | O_TRUNC, 0550); ++ assert(fd4k >= 0); ++ full_write(fd4k, buffer, sizeof(buffer)); ++ full_write(fd4k, buffer, sizeof(buffer)); ++ close(fd4k); ++ } ++ ++ { ++ int bigfd = openat(dd->dd_fd, "attestsuite-bigtext", O_WRONLY | O_CREAT | O_TRUNC, 0550); ++ assert(bigfd >= 0); ++ for (int i = 3000; i > 0; --i) ++ full_write(bigfd, buffer, sizeof(buffer)); ++ close(bigfd); ++ } ++ ++ dd_copy_file(dd, FILENAME_BINARY, "/usr/bin/sh"); ++ dd_copy_file(dd, FILENAME_COREDUMP, "/usr/bin/sh"); ++ dd_copy_file(dd, FILENAME_VMCORE, "/usr/bin/sh"); ++ ++ static const char *const list_elements[] = { FILENAME_UID, FILENAME_PACKAGE, ++ FILENAME_CMDLINE, FILENAME_TIME, FILENAME_COUNT, FILENAME_REASON }; ++ ++ static const char *const editable_files[] = { FILENAME_COMMENT, FILENAME_BACKTRACE, ++ FILENAME_REASON, FILENAME_OPEN_FDS, FILENAME_CMDLINE, FILENAME_MAPS, ++ FILENAME_SMAPS, FILENAME_ENVIRON, FILENAME_HOSTNAME, FILENAME_REMOTE, ++ FILENAME_KICKSTART_CFG, FILENAME_ANACONDA_TB, }; ++ ++ static const char *const binary_files[] = { FILENAME_BINARY, FILENAME_COREDUMP, ++ FILENAME_VMCORE, }; ++ ++ problem_data_t *pd = problem_data_new(); ++ problem_data_load_from_dump_dir(pd, dd, /*excluding*/NULL); ++ ++ GHashTableIter pd_iter; ++ char *element_name; ++ struct problem_item *item; ++ g_hash_table_iter_init(&pd_iter, pd); ++ while (g_hash_table_iter_next(&pd_iter, (void**)&element_name, (void**)&item)) ++ { ++ printf("Testing element : %s\n", element_name); ++ ++ size_t i; ++ for (i = 0; i < ARRAY_SIZE(list_elements); ++i) ++ { ++ if (strcmp(element_name, list_elements[i]) == 0) ++ { ++ assert((item->flags & CD_FLAG_LIST)); ++ break; ++ } ++ } ++ if (i == ARRAY_SIZE(list_elements)) ++ assert(!(item->flags & CD_FLAG_LIST)); ++ ++ for (i = 0; i < ARRAY_SIZE(editable_files); ++i) ++ { ++ if (strcmp(element_name, editable_files[i]) == 0) ++ { ++ assert((item->flags & CD_FLAG_ISEDITABLE) && !(item->flags & CD_FLAG_ISNOTEDITABLE)); ++ break; ++ } ++ } ++ if (i == ARRAY_SIZE(editable_files)) ++ assert(!(item->flags & CD_FLAG_ISEDITABLE) && (item->flags & CD_FLAG_ISNOTEDITABLE)); ++ ++ for (i = 0; i < ARRAY_SIZE(binary_files); ++i) ++ { ++ if (strcmp(element_name, binary_files[i]) == 0) ++ { ++ assert((item->flags & CD_FLAG_BIN) && !(item->flags & CD_FLAG_TXT) && !(item->flags & CD_FLAG_BIGTXT)); ++ break; ++ } ++ } ++ if (i == ARRAY_SIZE(binary_files)) ++ { ++ if(strstr(element_name, "bigtext") == 0) ++ assert((item->flags & CD_FLAG_TXT) && !(item->flags & CD_FLAG_BIN) && !(item->flags & CD_FLAG_BIGTXT)); ++ else ++ assert((item->flags & CD_FLAG_BIGTXT) && (item->flags & CD_FLAG_BIN) && !(item->flags & CD_FLAG_TXT)); ++ } ++ ++ if (strcmp(element_name, FILENAME_TIME) == 0) ++ assert(item->flags & CD_FLAG_UNIXTIME); ++ else ++ assert(!(item->flags & CD_FLAG_UNIXTIME)); ++ } ++ ++ { ++ char *cnt = problem_data_get_content_or_NULL(pd, "attestsuite-oneliner-newline"); ++ assert(cnt != NULL && "attestsuite-oneliner-newline"); ++ assert(strcmp(cnt, "newline") == 0); ++ } ++ ++ { ++ char *cnt = problem_data_get_content_or_NULL(pd, "attestsuite-newline-followed"); ++ assert(cnt != NULL && "attestsuite-newline-followed"); ++ assert(strcmp(cnt, "newline\nfollowed") == 0); ++ } ++ ++ { ++ char *cnt = problem_data_get_content_or_NULL(pd, "attestsuite-multi-line"); ++ assert(cnt != NULL && "attestsuite-multi-line"); ++ assert(strcmp(cnt, "newline\nextra\n") == 0); ++ } ++ ++ { ++ char *cnt = problem_data_get_content_or_NULL(pd, "attestsuite-over4k"); ++ assert(cnt != NULL && "attestsuite-over4k"); ++ assert(strlen(cnt) == (2 * sizeof(buffer))); ++ } ++ ++ { ++ char *cnt = problem_data_get_content_or_NULL(pd, "attestsuite-tab"); ++ assert(cnt != NULL && "attestsuite-tab"); ++ assert(strcmp(cnt, "tab\ttab") == 0); ++ } ++ ++ { ++ char *cnt = problem_data_get_content_or_NULL(pd, "attestsuite-cr"); ++ assert(cnt != NULL && "attestsuite-cr"); ++ assert(strcmp(cnt, "cr[0D]cr") == 0); ++ } ++ ++ return 0; ++} ++]]) ++ ++## ------------------------- ## ++## problem_data_reproducible ## ++## ------------------------- ## ++ ++AT_TESTFUN([problem_data_reproducible], ++[[ ++#include "testsuite.h" ++ ++#define TEST_FLAGS (CD_FLAG_TXT | CD_FLAG_ISNOTEDITABLE | CD_FLAG_UNIXTIME) ++ ++TS_MAIN ++{ ++ TS_ASSERT_STRING_NULL_OR_EMPTY(get_problem_data_reproducible_name(-1), "Invalid value"); ++ TS_ASSERT_PTR_IS_NOT_NULL(get_problem_data_reproducible_name(PROBLEM_REPRODUCIBLE_UNKNOWN)); ++ TS_ASSERT_PTR_IS_NOT_NULL(get_problem_data_reproducible_name(PROBLEM_REPRODUCIBLE_YES)); ++ TS_ASSERT_PTR_IS_NOT_NULL(get_problem_data_reproducible_name(PROBLEM_REPRODUCIBLE_RECURRENT)); ++ TS_ASSERT_STRING_NULL_OR_EMPTY(get_problem_data_reproducible_name(_PROBLEM_REPRODUCIBLE_MAX_), "Upper boundary"); ++ TS_ASSERT_STRING_NULL_OR_EMPTY(get_problem_data_reproducible_name(_PROBLEM_REPRODUCIBLE_MAX_ + 1), "Upper boundary + 1"); ++ TS_ASSERT_SIGNED_EQ(_PROBLEM_REPRODUCIBLE_MAX_, 3); ++ ++ problem_data_t *pd = problem_data_new(); ++ ++ TS_ASSERT_SIGNED_EQ(get_problem_data_reproducible(pd), -1); ++ ++ problem_data_add(pd, FILENAME_REPRODUCIBLE, ++ get_problem_data_reproducible_name(PROBLEM_REPRODUCIBLE_UNKNOWN), TEST_FLAGS); ++ TS_ASSERT_SIGNED_EQ(get_problem_data_reproducible(pd), PROBLEM_REPRODUCIBLE_UNKNOWN); ++ ++ problem_data_add(pd, FILENAME_REPRODUCIBLE, ++ get_problem_data_reproducible_name(PROBLEM_REPRODUCIBLE_YES), TEST_FLAGS); ++ TS_ASSERT_SIGNED_EQ(get_problem_data_reproducible(pd), PROBLEM_REPRODUCIBLE_YES); ++ ++ problem_data_add(pd, FILENAME_REPRODUCIBLE, ++ get_problem_data_reproducible_name(PROBLEM_REPRODUCIBLE_RECURRENT), TEST_FLAGS); ++ TS_ASSERT_SIGNED_EQ(get_problem_data_reproducible(pd), PROBLEM_REPRODUCIBLE_RECURRENT); ++ ++ problem_data_add(pd, FILENAME_REPRODUCIBLE, ++ get_problem_data_reproducible_name(_PROBLEM_REPRODUCIBLE_MAX_), TEST_FLAGS); ++ TS_ASSERT_SIGNED_EQ(get_problem_data_reproducible(pd), -1); ++ ++ problem_data_free(pd); ++} ++TS_RETURN_MAIN ++]]) +-- +1.8.3.1 + diff --git a/SOURCES/0196-rhtsupport-Discourage-users-from-reporting-in-non-Re.patch b/SOURCES/0196-rhtsupport-Discourage-users-from-reporting-in-non-Re.patch new file mode 100644 index 0000000..157b27d --- /dev/null +++ b/SOURCES/0196-rhtsupport-Discourage-users-from-reporting-in-non-Re.patch @@ -0,0 +1,81 @@ +From 64b9c39ffada27c51a202426378499dc5f278ceb Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Tue, 29 Mar 2016 12:03:41 +0200 +Subject: [PATCH] rhtsupport: Discourage users from reporting in non Red Hat + stuff + +Related: #1258482 + +Signed-off-by: Matej Habrnal +--- + src/include/internal_libreport.h | 6 ++++++ + src/plugins/reporter-rhtsupport.c | 34 +++++++++++++++++++++++++++++++--- + 2 files changed, 37 insertions(+), 3 deletions(-) + +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index c5f899c..397ac22 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -948,6 +948,12 @@ struct dump_dir *open_directory_for_writing( + #define FILENAME_PKG_VERSION "pkg_version" + #define FILENAME_PKG_RELEASE "pkg_release" + #define FILENAME_PKG_ARCH "pkg_arch" ++ ++/* RHEL packages - Red Hat, Inc. */ ++#define FILENAME_PKG_VENDOR "pkg_vendor" ++/* RHEL keys - https://access.redhat.com/security/team/key */ ++#define FILENAME_PKG_FINGERPRINT "pkg_fingerprint" ++ + #define FILENAME_USERNAME "username" + #define FILENAME_ABRT_VERSION "abrt_version" + #define FILENAME_EXPLOITABLE "exploitable" +diff --git a/src/plugins/reporter-rhtsupport.c b/src/plugins/reporter-rhtsupport.c +index 2374dd9..7b04086 100644 +--- a/src/plugins/reporter-rhtsupport.c ++++ b/src/plugins/reporter-rhtsupport.c +@@ -647,11 +647,39 @@ int main(int argc, char **argv) + exit(EXIT_CANCEL_BY_USER); + } + ++ const char *vendor = NULL; ++ vendor = problem_data_get_content_or_NULL(problem_data, FILENAME_PKG_VENDOR); ++ const char *package = NULL; ++ package = problem_data_get_content_or_NULL(problem_data, FILENAME_PACKAGE); ++ ++ if (package && vendor && strcmp(vendor, "Red Hat, Inc.") != 0) ++ { ++ char *message = xasprintf( ++ _("The crashed program was released by '%s'. " ++ "Would you like to report the problem to Red Hat Support?"), ++ vendor); ++ int r = ask_yes_no(message); ++ free(message); ++ if (!r) ++ exit(EXIT_CANCEL_BY_USER); ++ } ++ ++ const char *executable = NULL; ++ executable = problem_data_get_content_or_NULL(problem_data, FILENAME_EXECUTABLE); ++ if (!package) ++ { ++ char *message = xasprintf( ++ _("The program '%s' does not appear to be provided by Red Hat. " ++ "Would you like to report the problem to Red Hat Support?"), ++ executable); ++ int r = ask_yes_no(message); ++ free(message); ++ if (!r) ++ exit(EXIT_CANCEL_BY_USER); ++ } ++ + const char *function; + const char *reason; +- const char *package; +- +- package = problem_data_get_content_or_NULL(problem_data, FILENAME_PACKAGE); + reason = problem_data_get_content_or_NULL(problem_data, FILENAME_REASON); + function = problem_data_get_content_or_NULL(problem_data, FILENAME_CRASH_FUNCTION); + { +-- +1.8.3.1 + diff --git a/SOURCES/0197-augeas-trim-spaces-before-key-value.patch b/SOURCES/0197-augeas-trim-spaces-before-key-value.patch new file mode 100644 index 0000000..128c212 --- /dev/null +++ b/SOURCES/0197-augeas-trim-spaces-before-key-value.patch @@ -0,0 +1,52 @@ +From 53d414c56dde740926aa536899cf62ec34598845 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Fri, 1 Apr 2016 13:11:46 +0200 +Subject: [PATCH] augeas: trim spaces before key value + +Resolves: rhbz#1236613 + +Signed-off-by: Matej Habrnal +--- + augeas/libreport.aug | 2 +- + augeas/test_libreport.aug | 8 ++++++++ + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/augeas/libreport.aug b/augeas/libreport.aug +index 0e1e5e5..7125be2 100644 +--- a/augeas/libreport.aug ++++ b/augeas/libreport.aug +@@ -14,7 +14,7 @@ module Libreport = + let empty = [ del /[ \t]*\n/ "\n" ] + + (* Define option *) +- let option = [ key ident . value_sep . value_to_eol . eol ] ++ let option = [ del /[ \t]*/ "" . key ident . value_sep . value_to_eol . eol ] + + (* Define lens *) + let lns = ( comment | empty | option )* +diff --git a/augeas/test_libreport.aug b/augeas/test_libreport.aug +index b6d319e..116e97c 100644 +--- a/augeas/test_libreport.aug ++++ b/augeas/test_libreport.aug +@@ -21,6 +21,10 @@ DontMatchComponents = selinux-policy + # for more info about these settings see: https://github.com/abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets + CreatePrivate= no + PrivateGroups=private ++ Whitespace = start ++ Whitespace_two=start ++ Whitespace_three =start ++ Whitespace_four= start + " + + test Libreport.lns get conf = +@@ -45,3 +49,7 @@ PrivateGroups=private + { "#comment" = "for more info about these settings see: https://github.com/abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets" } + { "CreatePrivate" = "no" } + { "PrivateGroups" = "private" } ++ { "Whitespace" = "start" } ++ { "Whitespace_two" = "start" } ++ { "Whitespace_three" = "start" } ++ { "Whitespace_four" = "start" } +-- +1.8.3.1 + diff --git a/SOURCES/0199-lib-add-Problem-Format-API.patch b/SOURCES/0199-lib-add-Problem-Format-API.patch new file mode 100644 index 0000000..067e771 --- /dev/null +++ b/SOURCES/0199-lib-add-Problem-Format-API.patch @@ -0,0 +1,2357 @@ +From 7d128880f67f1e80f6fcc703054583fb1a69d7fd Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Tue, 29 Mar 2016 15:15:28 +0200 +Subject: [PATCH] lib: add Problem Format API + +Related to #1261358 + +Signed-off-by: Jakub Filak +Signed-off-by: Matej Habrnal +--- + po/POTFILES.in | 1 + + src/include/Makefile.am | 1 + + src/include/problem_report.h | 334 ++++++++++++ + src/lib/Makefile.am | 5 +- + src/lib/problem_report.c | 1209 ++++++++++++++++++++++++++++++++++++++++++ + tests/Makefile.am | 3 +- + tests/problem_report.at | 690 ++++++++++++++++++++++++ + tests/testsuite.at | 1 + + 8 files changed, 2242 insertions(+), 2 deletions(-) + create mode 100644 src/include/problem_report.h + create mode 100644 src/lib/problem_report.c + create mode 100644 tests/problem_report.at + +diff --git a/po/POTFILES.in b/po/POTFILES.in +index d843de1..4246e06 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -25,6 +25,7 @@ src/lib/ureport.c + src/lib/make_descr.c + src/lib/parse_options.c + src/lib/problem_data.c ++src/lib/problem_report.c + src/lib/reported_to.c + src/lib/run_event.c + src/plugins/abrt_rh_support.c +diff --git a/src/include/Makefile.am b/src/include/Makefile.am +index 062bffb..87e5e60 100644 +--- a/src/include/Makefile.am ++++ b/src/include/Makefile.am +@@ -5,6 +5,7 @@ libreport_include_HEADERS = \ + dump_dir.h \ + event_config.h \ + problem_data.h \ ++ problem_report.h \ + report.h \ + run_event.h \ + libreport_curl.h \ +diff --git a/src/include/problem_report.h b/src/include/problem_report.h +new file mode 100644 +index 0000000..f2d41d8 +--- /dev/null ++++ b/src/include/problem_report.h +@@ -0,0 +1,334 @@ ++/* ++ Copyright (C) 2014 ABRT team ++ Copyright (C) 2014 RedHat Inc ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ ++ @brief API for formating of problem data ++ ++ These functions can be used to convert a problem data to its string ++ representation. ++ ++ The output format can be parsed from a string: ++ ++ problem_formatter_t *formatter = problem_formatter_new(); ++ problem_formatter_load_string(formatter, MY_FORMAT_STRING); ++ ++ or loaded from a file: ++ ++ problem_formatter_t *formatter = problem_formatter_new(); ++ problem_formatter_load_file(formatter, MY_FORMAT_FILE); ++ ++ Once you have configured your formatter you can convert problem_data to ++ problem_report by calling: ++ ++ problem_report_t *report; ++ if (problem_formatter_generate_report(formatter, data, &report) != 0) ++ errx(EXIT_FAILURE, "Problem data cannot be converted to problem report."); ++ ++ Now you can print the report: ++ ++ printf("Problem: %s\n", problem_report_get_summary()); ++ printf("%s\n", problem_report_get_description()); ++ ++ puts("Problem attachments:"); ++ for (GList *a = problem_report_get_attachments(pr); a != NULL; a = g_list_next(a)) ++ printf(" %s\n", a->data); ++ ++ Format description: ++ ++ ---- ++ %summary:: summary format ++ %attach:: elemnt1[,element2]... ++ section:: element1[,element2]... ++ The literal text line to be added to report. ++ ---- ++ ++ Summary format is a line of text, where %element% is replaced by ++ text element's content, and [[...%element%...]] block is used only if ++ %element% exists. [[...]] blocks can nest. ++ ++ Sections can be: ++ - %summary: bug summary format string. ++ ++ - %attach: a list of elements to attach. ++ ++ - text, double colon (::) and the list of comma-separated elements. ++ Text can be empty (":: elem1, elem2, elem3" works), ++ in this case "Text:" header line will be omitted. ++ ++ - %description: this section is implicit and contains all text ++ sections unless another section was specified (%summary and %attach ++ are ignored when determining text section's placement) ++ ++ - every text element belongs to the last specified section (%summary ++ and %attach sections are ignored). If no section was specified, ++ the text element belogns to %description. ++ ++ - If none of elements exists, the section will not be created. ++ ++ - Empty lines are NOT ignored. ++ ++ Elements can be: ++ - problem directory element names, which get formatted as ++ : ++ or ++ : ++ : ++ : ++ : ++ ++ - problem directory element names prefixed by "%bare_", ++ which is formatted as-is, without ":" and colons ++ ++ - %oneline, %multiline, %text wildcards, which select all corresponding ++ elements for output or attachment ++ ++ - %binary wildcard, valid only for %attach section, instructs to attach ++ binary elements ++ ++ - problem directory element names prefixed by "-", ++ which excludes given element from all wildcards ++ ++ - Nonexistent elements are silently ignored. ++ ++ You can add your own section: ++ ++ problem_formatter_t *formatter = problem_formatter_new(); ++ problem_formatter_add_section(formatter, "additional_info", PFFF_REQUIRED); ++ ++ and then you can use the section in the formatting string: ++ ++ problem_formatter_load_string(formatter, ++ "::comment\n" ++ "%additional_info:: maps"); ++ problem_formatter_generate_report(formatter, data, &report); ++ ++ printf("Problem: %s\n", problem_report_get_summary()); ++ printf("%s\n", problem_report_get_description()); ++ printf("Additional info: %s\n", problem_report_get_section(report, "additiona_info")); ++ ++ The lines above are equivalent to the following lines: ++ ++ printf("Problem: %s\n", problem_data_get_content_or_NULL(data, "reason")); ++ printf("%s\n", problem_data_get_content_or_NULL(data, "comment")); ++ printf("Additional info: %s\n", problem_data_get_content_or_NULL(data, "maps")); ++*/ ++#ifndef LIBREPORT_PROBLEM_REPORT_H ++#define LIBREPORT_PROBLEM_REPORT_H ++ ++#include ++#include ++#include "problem_data.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#define PR_SEC_SUMMARY "summary" ++#define PR_SEC_DESCRIPTION "description" ++ ++/* ++ * The problem report structure represents a problem data formatted according ++ * to a format string. ++ * ++ * A problem report is composed of well-known sections: ++ * - summary ++ * - descritpion ++ * - attach ++ * ++ * and custom sections accessed by: ++ * problem_report_get_section(); ++ */ ++struct problem_report; ++typedef struct problem_report problem_report_t; ++ ++/* ++ * Helpers for easily switching between FILE and struct strbuf ++ */ ++ ++/* ++ * Type of buffer used by Problem report ++ */ ++typedef FILE problem_report_buffer; ++ ++/* ++ * Wrapper for the proble buffer's formated output function. ++ */ ++#define problem_report_buffer_printf(buf, fmt, ...)\ ++ fprintf((buf), (fmt), ##__VA_ARGS__) ++ ++ ++/* ++ * Get a section buffer ++ * ++ * Use this function if you need to amend something to a formatted section. ++ * ++ * @param self Problem report ++ * @param section_name Name of required section ++ * @return Always valid pointer to a section buffer ++ */ ++problem_report_buffer *problem_report_get_buffer(const problem_report_t *self, ++ const char *section_name); ++ ++/* ++ * Get Summary string ++ * ++ * The returned pointer is valid as long as you perform no further output to ++ * the summary buffer. ++ * ++ * @param self Problem report ++ * @return Non-NULL pointer to summary data ++ */ ++const char *problem_report_get_summary(const problem_report_t *self); ++ ++/* ++ * Get Description string ++ * ++ * The returned pointer is valid as long as you perform no further output to ++ * the description buffer. ++ * ++ * @param self Problem report ++ * @return Non-NULL pointer to description data ++ */ ++const char *problem_report_get_description(const problem_report_t *self); ++ ++/* ++ * Get Section's string ++ * ++ * The returned pointer is valid as long as you perform no further output to ++ * the section's buffer. ++ * ++ * @param self Problem report ++ * @param section_name Name of the required section ++ * @return Non-NULL pointer to description data ++ */ ++const char *problem_report_get_section(const problem_report_t *self, ++ const char *section_name); ++ ++/* ++ * Get GList of the problem data items that are to be attached ++ * ++ * @param self Problem report ++ * @return A pointer to GList (NULL means empty list) ++ */ ++GList *problem_report_get_attachments(const problem_report_t *self); ++ ++/* ++ * Releases all resources allocated by a problem report ++ * ++ * @param self Problem report ++ */ ++void problem_report_free(problem_report_t *self); ++ ++ ++/* ++ * An enum of Extra section flags ++ */ ++enum problem_formatter_section_flags { ++ PFFF_REQUIRED = 1 << 0, ///< section must be present in the format spec ++}; ++ ++/* ++ * The problem formatter structure formats a problem data according to a format ++ * string and stores result a problem report. ++ * ++ * The problem formatter uses '%reason%' as %summary section format string, if ++ * %summary is not provided by a format string. ++ */ ++struct problem_formatter; ++typedef struct problem_formatter problem_formatter_t; ++ ++/* ++ * Constructs a new problem formatter. ++ * ++ * @return Non-NULL pointer to the new problem formatter ++ */ ++problem_formatter_t *problem_formatter_new(void); ++ ++/* ++ * Releases all resources allocated by a problem formatter ++ * ++ * @param self Problem formatter ++ */ ++void problem_formatter_free(problem_formatter_t *self); ++ ++/* ++ * Adds a new recognized section ++ * ++ * The problem formatter ignores a section in the format spec if the section is ++ * not one of the default nor added by this function. ++ * ++ * How the problem formatter handles these extra sections: ++ * ++ * A custom section is something like %description section. %description is the ++ * default section where all text (sub)sections are stored. If the formatter ++ * finds the custom section in format string, then starts storing text ++ * (sub)sections in the custom section. ++ * ++ * (%description) |:: comment ++ * (%description) | ++ * (%description) |Package:: package ++ * (%description) | ++ * (%additiona_info) |%additional_info:: ++ * (%additiona_info) |%reporter% ++ * (%additiona_info) |User:: user_name,uid ++ * (%additiona_info) | ++ * (%additiona_info) |Directories:: root,cwd ++ * ++ * ++ * @param self Problem formatter ++ * @param name Name of the added section ++ * @param flags Info about the added section ++ * @return Zero on success. -EEXIST if the name is already known by the formatter ++ */ ++int problem_formatter_add_section(problem_formatter_t *self, const char *name, int flags); ++ ++/* ++ * Loads a problem format from a string. ++ * ++ * @param self Problem formatter ++ * @param fmt Format ++ * @return Zero on success or number of warnings (e.g. missing section, ++ * unrecognized section). ++ */ ++int problem_formatter_load_string(problem_formatter_t* self, const char *fmt); ++ ++/* ++ * Loads a problem format from a file. ++ * ++ * @param self Problem formatter ++ * @param pat Path to the format file ++ * @return Zero on success or number of warnings (e.g. missing section, ++ * unrecognized section). ++ */ ++int problem_formatter_load_file(problem_formatter_t* self, const char *path); ++ ++/* ++ * Creates a new problem report, formats the data according to the loaded ++ * format string and stores output in the report. ++ * ++ * @param self Problem formatter ++ * @param data Problem data to format ++ * @param report Pointer where the created problem report is to be stored ++ * @return Zero on success, otherwise non-zero value. ++ */ ++int problem_formatter_generate_report(const problem_formatter_t *self, problem_data_t *data, problem_report_t **report); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif // LIBREPORT_PROBLEM_REPORT_H +diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am +index b7e4781..c11a42d 100644 +--- a/src/lib/Makefile.am ++++ b/src/lib/Makefile.am +@@ -38,6 +38,7 @@ libreport_la_SOURCES = \ + make_descr.c \ + run_event.c \ + problem_data.c \ ++ problem_report.c \ + create_dump_dir.c \ + abrt_types.c \ + parse_release.c \ +@@ -78,6 +79,7 @@ libreport_la_CPPFLAGS = \ + $(GLIB_CFLAGS) \ + $(GOBJECT_CFLAGS) \ + $(AUGEAS_CFLAGS) \ ++ $(SATYR_CFLAGS) \ + -D_GNU_SOURCE + libreport_la_LDFLAGS = \ + -ltar \ +@@ -87,7 +89,8 @@ libreport_la_LIBADD = \ + $(GLIB_LIBS) \ + $(JOURNAL_LIBS) \ + $(GOBJECT_LIBS) \ +- $(AUGEAS_LIBS) ++ $(AUGEAS_LIBS) \ ++ $(SATYR_LIBS) + + libreportconfdir = $(CONF_DIR) + dist_libreportconf_DATA = \ +diff --git a/src/lib/problem_report.c b/src/lib/problem_report.c +new file mode 100644 +index 0000000..6598c15 +--- /dev/null ++++ b/src/lib/problem_report.c +@@ -0,0 +1,1209 @@ ++/* ++ Copyright (C) 2014 ABRT team ++ Copyright (C) 2014 RedHat Inc ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++*/ ++ ++#include "problem_report.h" ++#include "internal_libreport.h" ++ ++#include ++#include ++ ++#include ++ ++#define DESTROYED_POINTER (void *)0xdeadbeef ++ ++/* FORMAT: ++ * |%summary:: Hello, world ++ * |Problem description:: %bare_comment ++ * | ++ * |Package:: package ++ * | ++ * |%attach: %binary, backtrace ++ * | ++ * |%additional_info:: ++ * |%reporter% ++ * |User:: user_name,uid ++ * | ++ * |Directories:: root,cwd ++ * ++ * PARSED DATA (list of struct section_t): ++ * { ++ * section_t { ++ * .name = '%summary'; ++ * .items = { 'Hello, world' }; ++ * .children = NULL; ++ * }, ++ * section_t { ++ * .name = '%attach' ++ * .items = { '%binary', 'backtrace' }; ++ * .children = NULL; ++ * }, ++ * section_t { ++ * .name = '%description' ++ * .items = NULL; ++ * .children = { ++ * section_t { ++ * .name = 'Problem description:'; ++ * .items = { '%bare_comment' }; ++ * .children = NULL; ++ * }, ++ * section_t { ++ * .name = ''; ++ * .items = NULL; ++ * .children = NULL; ++ * }, ++ * section_t { ++ * .name = 'Package:'; ++ * .items = { 'package' }; ++ * .children = NULL; ++ * }, ++ * } ++ * }, ++ * section_t { ++ * .name = '%additional_info' ++ * .items = { '%reporter%' }; ++ * .children = { ++ * section_t { ++ * .name = 'User:'; ++ * .items = { 'user_name', 'uid' }; ++ * .children = NULL; ++ * }, ++ * section_t { ++ * .name = ''; ++ * .items = NULL; ++ * .children = NULL; ++ * }, ++ * section_t { ++ * .name = 'Directories:'; ++ * .items = { 'root', 'cwd' }; ++ * .children = NULL; ++ * }, ++ * } ++ * } ++ * } ++ */ ++struct section_t { ++ char *name; ///< name or output text (%summar, 'Package version:'); ++ GList *items; ///< list of file names and special items (%reporter, %binar, ...) ++ GList *children; ///< list of sub sections (struct section_t) ++}; ++ ++typedef struct section_t section_t; ++ ++static section_t * ++section_new(const char *name) ++{ ++ section_t *self = xmalloc(sizeof(*self)); ++ self->name = xstrdup(name); ++ self->items = NULL; ++ self->children = NULL; ++ ++ return self; ++} ++ ++static void ++section_free(section_t *self) ++{ ++ if (self == NULL) ++ return; ++ ++ free(self->name); ++ g_list_free_full(self->items, free); ++ g_list_free_full(self->children, (GDestroyNotify)section_free); ++ ++ free(self); ++} ++ ++static int ++section_name_cmp(section_t *lhs, const char *rhs) ++{ ++ return strcmp((lhs->name + 1), rhs); ++} ++ ++/* Utility functions */ ++ ++static GList* ++split_string_on_char(const char *str, char ch) ++{ ++ GList *list = NULL; ++ for (;;) ++ { ++ const char *delim = strchrnul(str, ch); ++ list = g_list_prepend(list, xstrndup(str, delim - str)); ++ if (*delim == '\0') ++ break; ++ str = delim + 1; ++ } ++ return g_list_reverse(list); ++} ++ ++static int ++compare_item_name(const char *lookup, const char *name) ++{ ++ if (lookup[0] == '-') ++ lookup++; ++ else if (strncmp(lookup, "%bare_", 6) == 0) ++ lookup += 6; ++ return strcmp(lookup, name); ++} ++ ++static int ++is_item_name_in_section(const section_t *lookup, const char *name) ++{ ++ if (g_list_find_custom(lookup->items, name, (GCompareFunc)compare_item_name)) ++ return 0; /* "found it!" */ ++ return 1; ++} ++ ++static bool is_explicit_or_forbidden(const char *name, GList *comment_fmt_spec); ++ ++static int ++is_explicit_or_forbidden_child(const section_t *master_section, const char *name) ++{ ++ if (is_explicit_or_forbidden(name, master_section->children)) ++ return 0; /* "found it!" */ ++ return 1; ++} ++ ++/* For example: 'package' belongs to '%oneline', but 'package' is used in ++ * 'Version of component', so it is not very helpful to include that file once ++ * more in another section ++ */ ++static bool ++is_explicit_or_forbidden(const char *name, GList *comment_fmt_spec) ++{ ++ return g_list_find_custom(comment_fmt_spec, name, (GCompareFunc)is_item_name_in_section) ++ || g_list_find_custom(comment_fmt_spec, name, (GCompareFunc)is_explicit_or_forbidden_child); ++} ++ ++static GList* ++load_stream(FILE *fp) ++{ ++ assert(fp); ++ ++ GList *sections = NULL; ++ section_t *master = section_new("%description"); ++ section_t *sec = NULL; ++ ++ sections = g_list_append(sections, master); ++ ++ char *line; ++ while ((line = xmalloc_fgetline(fp)) != NULL) ++ { ++ /* Skip comments */ ++ char first = *skip_whitespace(line); ++ if (first == '#') ++ goto free_line; ++ ++ /* Handle trailing backslash continuation */ ++ check_continuation: ; ++ unsigned len = strlen(line); ++ if (len && line[len-1] == '\\') ++ { ++ line[len-1] = '\0'; ++ char *next_line = xmalloc_fgetline(fp); ++ if (next_line) ++ { ++ line = append_to_malloced_string(line, next_line); ++ free(next_line); ++ goto check_continuation; ++ } ++ } ++ ++ /* We are reusing line buffer to form temporary ++ * "key\0values\0..." in its beginning ++ */ ++ bool summary_line = false; ++ char *value = NULL; ++ char *src; ++ char *dst; ++ for (src = dst = line; *src; src++) ++ { ++ char c = *src; ++ /* did we reach the value list? */ ++ if (!value && c == ':' && src[1] == ':') ++ { ++ *dst++ = '\0'; /* terminate key */ ++ src += 1; ++ value = dst; /* remember where value starts */ ++ summary_line = (strcmp(line, "%summary") == 0); ++ if (summary_line) ++ { ++ value = (src + 1); ++ break; ++ } ++ continue; ++ } ++ /* skip whitespace in value list */ ++ if (value && isspace(c)) ++ continue; ++ *dst++ = c; /* store next key or value char */ ++ } ++ ++ GList *item_list = NULL; ++ if (summary_line) ++ { ++ /* %summary is special */ ++ item_list = g_list_append(NULL, xstrdup(skip_whitespace(value))); ++ } ++ else ++ { ++ *dst = '\0'; /* terminate value (or key) */ ++ if (value) ++ item_list = split_string_on_char(value, ','); ++ } ++ ++ sec = section_new(line); ++ sec->items = item_list; ++ ++ if (sec->name[0] == '%') ++ { ++ if (!summary_line && strcmp(sec->name, "%attach") != 0) ++ { ++ master->children = g_list_reverse(master->children); ++ master = sec; ++ } ++ ++ sections = g_list_prepend(sections, sec); ++ } ++ else ++ master->children = g_list_prepend(master->children, sec); ++ ++ free_line: ++ free(line); ++ } ++ ++ /* If master equals sec, then master's children list was not yet reversed. ++ * ++ * %description is the default section (i.e is not explicitly mentioned) ++ * and %summary nor %attach cause its children list to reverse. ++ */ ++ if (master == sec || strcmp(master->name, "%description") == 0) ++ master->children = g_list_reverse(master->children); ++ ++ return sections; ++} ++ ++ ++/* Summary generation */ ++ ++#define MAX_OPT_DEPTH 10 ++static int ++format_percented_string(const char *str, problem_data_t *pd, FILE *result) ++{ ++ long old_pos[MAX_OPT_DEPTH] = { 0 }; ++ int okay[MAX_OPT_DEPTH] = { 1 }; ++ long len = 0; ++ int opt_depth = 1; ++ ++ while (*str) { ++ switch (*str) { ++ default: ++ putc(*str, result); ++ len++; ++ str++; ++ break; ++ case '\\': ++ if (str[1]) ++ str++; ++ putc(*str, result); ++ len++; ++ str++; ++ break; ++ case '[': ++ if (str[1] == '[' && opt_depth < MAX_OPT_DEPTH) ++ { ++ old_pos[opt_depth] = len; ++ okay[opt_depth] = 1; ++ opt_depth++; ++ str += 2; ++ } else { ++ putc(*str, result); ++ len++; ++ str++; ++ } ++ break; ++ case ']': ++ if (str[1] == ']' && opt_depth > 1) ++ { ++ opt_depth--; ++ if (!okay[opt_depth]) ++ { ++ fseek(result, old_pos[opt_depth], SEEK_SET); ++ len = old_pos[opt_depth]; ++ } ++ str += 2; ++ } else { ++ putc(*str, result); ++ len++; ++ str++; ++ } ++ break; ++ case '%': ; ++ char *nextpercent = strchr(++str, '%'); ++ if (!nextpercent) ++ { ++ error_msg_and_die("Unterminated %%element%%: '%s'", str - 1); ++ } ++ ++ *nextpercent = '\0'; ++ const problem_item *item = problem_data_get_item_or_NULL(pd, str); ++ *nextpercent = '%'; ++ ++ if (item && (item->flags & CD_FLAG_TXT)) ++ { ++ fputs(item->content, result); ++ len += strlen(item->content); ++ } ++ else ++ okay[opt_depth - 1] = 0; ++ str = nextpercent + 1; ++ break; ++ } ++ } ++ ++ if (opt_depth > 1) ++ { ++ error_msg_and_die("Unbalanced [[ ]] bracket"); ++ } ++ ++ if (!okay[0]) ++ { ++ error_msg("Undefined variable outside of [[ ]] bracket"); ++ } ++ ++ return 0; ++} ++ ++/* BZ comment generation */ ++ ++static int ++append_text(struct strbuf *result, const char *item_name, const char *content, bool print_item_name) ++{ ++ char *eol = strchrnul(content, '\n'); ++ if (eol[0] == '\0' || eol[1] == '\0') ++ { ++ /* one-liner */ ++ int pad = 16 - (strlen(item_name) + 2); ++ if (pad < 0) ++ pad = 0; ++ if (print_item_name) ++ strbuf_append_strf(result, ++ eol[0] == '\0' ? "%s: %*s%s\n" : "%s: %*s%s", ++ item_name, pad, "", content ++ ); ++ else ++ strbuf_append_strf(result, ++ eol[0] == '\0' ? "%s\n" : "%s", ++ content ++ ); ++ } ++ else ++ { ++ /* multi-line item */ ++ if (print_item_name) ++ strbuf_append_strf(result, "%s:\n", item_name); ++ for (;;) ++ { ++ eol = strchrnul(content, '\n'); ++ strbuf_append_strf(result, ++ /* For %bare_multiline_item, we don't want to print colons */ ++ (print_item_name ? ":%.*s\n" : "%.*s\n"), ++ (int)(eol - content), content ++ ); ++ if (eol[0] == '\0' || eol[1] == '\0') ++ break; ++ content = eol + 1; ++ } ++ } ++ return 1; ++} ++ ++static int ++append_short_backtrace(struct strbuf *result, problem_data_t *problem_data, size_t max_text_size, bool print_item_name) ++{ ++ const problem_item *item = problem_data_get_item_or_NULL(problem_data, ++ FILENAME_BACKTRACE); ++ if (!item) ++ return 0; /* "I did not print anything" */ ++ if (!(item->flags & CD_FLAG_TXT)) ++ return 0; /* "I did not print anything" */ ++ ++ char *truncated = NULL; ++ ++ if (strlen(item->content) >= max_text_size) ++ { ++ log_debug("'backtrace' exceeds the text file size, going to append its short version"); ++ ++ char *error_msg = NULL; ++ const char *type = problem_data_get_content_or_NULL(problem_data, FILENAME_TYPE); ++ if (!type) ++ { ++ log_debug("Problem data does not contain '"FILENAME_TYPE"' file"); ++ return 0; ++ } ++ ++ /* For CCpp crashes, use the GDB-produced backtrace which should be ++ * available by now. sr_abrt_type_from_analyzer returns SR_REPORT_CORE ++ * by default for CCpp crashes. ++ */ ++ enum sr_report_type report_type = sr_abrt_type_from_analyzer(type); ++ if (strcmp(type, "CCpp") == 0) ++ { ++ log_debug("Successfully identified 'CCpp' abrt type"); ++ report_type = SR_REPORT_GDB; ++ } ++ ++ struct sr_stacktrace *backtrace = sr_stacktrace_parse(report_type, ++ item->content, &error_msg); ++ ++ if (!backtrace) ++ { ++ log(_("Can't parse backtrace: %s"), error_msg); ++ free(error_msg); ++ return 0; ++ } ++ ++ /* Get optimized thread stack trace for 10 top most frames */ ++ truncated = sr_stacktrace_to_short_text(backtrace, 10); ++ sr_stacktrace_free(backtrace); ++ ++ if (!truncated) ++ { ++ log(_("Can't generate stacktrace description (no crash thread?)")); ++ return 0; ++ } ++ } ++ else ++ { ++ log_debug("'backtrace' is small enough to be included as is"); ++ } ++ ++ append_text(result, ++ /*item_name:*/ truncated ? "truncated_backtrace" : FILENAME_BACKTRACE, ++ /*content:*/ truncated ? truncated : item->content, ++ print_item_name ++ ); ++ free(truncated); ++ return 1; ++} ++ ++static int ++append_item(struct strbuf *result, const char *item_name, problem_data_t *pd, GList *comment_fmt_spec) ++{ ++ bool print_item_name = (strncmp(item_name, "%bare_", strlen("%bare_")) != 0); ++ if (!print_item_name) ++ item_name += strlen("%bare_"); ++ ++ if (item_name[0] != '%') ++ { ++ struct problem_item *item = problem_data_get_item_or_NULL(pd, item_name); ++ if (!item) ++ return 0; /* "I did not print anything" */ ++ if (!(item->flags & CD_FLAG_TXT)) ++ return 0; /* "I did not print anything" */ ++ ++ char *formatted = problem_item_format(item); ++ char *content = formatted ? formatted : item->content; ++ append_text(result, item_name, content, print_item_name); ++ free(formatted); ++ return 1; /* "I printed something" */ ++ } ++ ++ /* Special item name */ ++ ++ /* Compat with previously-existed ad-hockery: %short_backtrace */ ++ if (strcmp(item_name, "%short_backtrace") == 0) ++ return append_short_backtrace(result, pd, CD_TEXT_ATT_SIZE_BZ, print_item_name); ++ ++ /* Compat with previously-existed ad-hockery: %reporter */ ++ if (strcmp(item_name, "%reporter") == 0) ++ return append_text(result, "reporter", PACKAGE"-"VERSION, print_item_name); ++ ++ /* %oneline,%multiline,%text */ ++ bool oneline = (strcmp(item_name+1, "oneline" ) == 0); ++ bool multiline = (strcmp(item_name+1, "multiline") == 0); ++ bool text = (strcmp(item_name+1, "text" ) == 0); ++ if (!oneline && !multiline && !text) ++ { ++ log("Unknown or unsupported element specifier '%s'", item_name); ++ return 0; /* "I did not print anything" */ ++ } ++ ++ int printed = 0; ++ ++ /* Iterate over _sorted_ items */ ++ GList *sorted_names = g_hash_table_get_keys(pd); ++ sorted_names = g_list_sort(sorted_names, (GCompareFunc)strcmp); ++ ++ /* %text => do as if %oneline, then repeat as if %multiline */ ++ if (text) ++ oneline = 1; ++ ++ again: ; ++ GList *l = sorted_names; ++ while (l) ++ { ++ const char *name = l->data; ++ l = l->next; ++ struct problem_item *item = g_hash_table_lookup(pd, name); ++ if (!item) ++ continue; /* paranoia, won't happen */ ++ ++ if (!(item->flags & CD_FLAG_TXT)) ++ continue; ++ ++ if (is_explicit_or_forbidden(name, comment_fmt_spec)) ++ continue; ++ ++ char *formatted = problem_item_format(item); ++ char *content = formatted ? formatted : item->content; ++ char *eol = strchrnul(content, '\n'); ++ bool is_oneline = (eol[0] == '\0' || eol[1] == '\0'); ++ if (oneline == is_oneline) ++ printed |= append_text(result, name, content, print_item_name); ++ free(formatted); ++ } ++ if (text && oneline) ++ { ++ /* %text, and we just did %oneline. Repeat as if %multiline */ ++ oneline = 0; ++ /*multiline = 1; - not checked in fact, so why bother setting? */ ++ goto again; ++ } ++ ++ g_list_free(sorted_names); /* names themselves are not freed */ ++ ++ return printed; ++} ++ ++#define add_to_section_output(format, ...) \ ++ do { \ ++ for (; empty_lines > 0; --empty_lines) fputc('\n', result); \ ++ empty_lines = 0; \ ++ fprintf(result, format, __VA_ARGS__); \ ++ } while (0) ++ ++static void ++format_section(section_t *section, problem_data_t *pd, GList *comment_fmt_spec, FILE *result) ++{ ++ int empty_lines = -1; ++ ++ for (GList *iter = section->children; iter; iter = g_list_next(iter)) ++ { ++ section_t *child = (section_t *)iter->data; ++ if (child->items) ++ { ++ /* "Text: item[,item]..." */ ++ struct strbuf *output = strbuf_new(); ++ GList *item = child->items; ++ while (item) ++ { ++ const char *str = item->data; ++ item = item->next; ++ if (str[0] == '-') /* "-name", ignore it */ ++ continue; ++ append_item(output, str, pd, comment_fmt_spec); ++ } ++ ++ if (output->len != 0) ++ add_to_section_output((child->name[0] ? "%s:\n%s" : "%s%s"), ++ child->name, output->buf); ++ ++ strbuf_free(output); ++ } ++ else ++ { ++ /* Just "Text" (can be "") */ ++ ++ /* Filter out trailint empty lines */ ++ if (child->name[0] != '\0') ++ add_to_section_output("%s\n", child->name); ++ /* Do not count empty lines, if output wasn't yet produced */ ++ else if (empty_lines >= 0) ++ ++empty_lines; ++ } ++ } ++} ++ ++static GList * ++get_special_items(const char *item_name, problem_data_t *pd, GList *comment_fmt_spec) ++{ ++ /* %oneline,%multiline,%text,%binary */ ++ bool oneline = (strcmp(item_name+1, "oneline" ) == 0); ++ bool multiline = (strcmp(item_name+1, "multiline") == 0); ++ bool text = (strcmp(item_name+1, "text" ) == 0); ++ bool binary = (strcmp(item_name+1, "binary" ) == 0); ++ if (!oneline && !multiline && !text && !binary) ++ { ++ log("Unknown or unsupported element specifier '%s'", item_name); ++ return NULL; ++ } ++ ++ log_debug("Special item_name '%s', iterating for attach...", item_name); ++ GList *result = 0; ++ ++ /* Iterate over _sorted_ items */ ++ GList *sorted_names = g_hash_table_get_keys(pd); ++ sorted_names = g_list_sort(sorted_names, (GCompareFunc)strcmp); ++ ++ GList *l = sorted_names; ++ while (l) ++ { ++ const char *name = l->data; ++ l = l->next; ++ struct problem_item *item = g_hash_table_lookup(pd, name); ++ if (!item) ++ continue; /* paranoia, won't happen */ ++ ++ if (is_explicit_or_forbidden(name, comment_fmt_spec)) ++ continue; ++ ++ if ((item->flags & CD_FLAG_TXT) && !binary) ++ { ++ char *content = item->content; ++ char *eol = strchrnul(content, '\n'); ++ bool is_oneline = (eol[0] == '\0' || eol[1] == '\0'); ++ if (text || oneline == is_oneline) ++ result = g_list_append(result, xstrdup(name)); ++ } ++ else if ((item->flags & CD_FLAG_BIN) && binary) ++ result = g_list_append(result, xstrdup(name)); ++ } ++ ++ g_list_free(sorted_names); /* names themselves are not freed */ ++ ++ ++ log_debug("...Done iterating over '%s' for attach", item_name); ++ ++ return result; ++} ++ ++static GList * ++get_attached_files(problem_data_t *pd, GList *items, GList *comment_fmt_spec) ++{ ++ GList *result = NULL; ++ GList *item = items; ++ while (item != NULL) ++ { ++ const char *item_name = item->data; ++ item = item->next; ++ if (item_name[0] == '-') /* "-name", ignore it */ ++ continue; ++ ++ if (item_name[0] != '%') ++ { ++ result = g_list_append(result, xstrdup(item_name)); ++ continue; ++ } ++ ++ GList *special = get_special_items(item_name, pd, comment_fmt_spec); ++ if (special == NULL) ++ { ++ log_notice("No attachment found for '%s'", item_name); ++ continue; ++ } ++ ++ result = g_list_concat(result, special); ++ } ++ ++ return result; ++} ++ ++/* ++ * Problem Report - memor stream ++ * ++ * A wrapper for POSIX memory stream. ++ * ++ * A memory stream is presented as FILE *. ++ * ++ * A memory stream is associated with a pointer to written data and a pointer ++ * to size of the written data. ++ * ++ * This structure holds all of the used pointers. ++ */ ++struct memstream_buffer ++{ ++ char *msb_buffer; ++ size_t msb_size; ++ FILE *msb_stream; ++}; ++ ++static struct memstream_buffer * ++memstream_buffer_new() ++{ ++ struct memstream_buffer *self = xmalloc(sizeof(*self)); ++ ++ self->msb_buffer = NULL; ++ self->msb_stream = open_memstream(&(self->msb_buffer), &(self->msb_size)); ++ ++ return self; ++} ++ ++static void ++memstream_buffer_free(struct memstream_buffer *self) ++{ ++ if (self == NULL) ++ return; ++ ++ fclose(self->msb_stream); ++ self->msb_stream = DESTROYED_POINTER; ++ ++ free(self->msb_buffer); ++ self->msb_buffer = DESTROYED_POINTER; ++ ++ free(self); ++} ++ ++static FILE * ++memstream_get_stream(struct memstream_buffer *self) ++{ ++ assert(self != NULL); ++ ++ return self->msb_stream; ++} ++ ++static const char * ++memstream_get_string(struct memstream_buffer *self) ++{ ++ assert(self != NULL); ++ assert(self->msb_stream != NULL); ++ ++ fflush(self->msb_stream); ++ ++ return self->msb_buffer; ++} ++ ++ ++/* ++ * Problem Report ++ * ++ * The formated strings are internaly stored in "buffer"s. If a programer wants ++ * to get a formated section data, a getter function extracts those data from ++ * the apropriate buffer and returns them in form of null-terminated string. ++ * ++ * Each section has own buffer. ++ * ++ * There are three common sections that are always present: ++ * 1. summary ++ * 2. description ++ * 3. attach ++ * Buffers of these sections has own structure member for the sake of ++ * efficiency. ++ * ++ * The custom sections hash their buffers stored in a map where key is a ++ * section's name and value is a section's buffer. ++ * ++ * Problem report provides the programers with the possibility to ammend ++ * formated output to any section buffer. ++ */ ++struct problem_report ++{ ++ struct memstream_buffer *pr_sec_summ; ///< %summary buffer ++ struct memstream_buffer *pr_sec_desc; ///< %description buffer ++ GList *pr_attachments; ///< %attach - list of file names ++ GHashTable *pr_sec_custom; ///< map : %(custom section) -> buffer ++}; ++ ++static problem_report_t * ++problem_report_new() ++{ ++ problem_report_t *self = xmalloc(sizeof(*self)); ++ ++ self->pr_sec_summ = memstream_buffer_new(); ++ self->pr_sec_desc = memstream_buffer_new(); ++ self->pr_attachments = NULL; ++ self->pr_sec_custom = NULL; ++ ++ return self; ++} ++ ++static void ++problem_report_initialize_custom_sections(problem_report_t *self) ++{ ++ assert(self != NULL); ++ assert(self->pr_sec_custom == NULL); ++ ++ self->pr_sec_custom = g_hash_table_new_full(g_str_hash, g_str_equal, free, ++ (GDestroyNotify)memstream_buffer_free); ++} ++ ++static void ++problem_report_destroy_custom_sections(problem_report_t *self) ++{ ++ assert(self != NULL); ++ assert(self->pr_sec_custom != NULL); ++ ++ g_hash_table_destroy(self->pr_sec_custom); ++} ++ ++static int ++problem_report_add_custom_section(problem_report_t *self, const char *name) ++{ ++ assert(self != NULL); ++ ++ if (self->pr_sec_custom == NULL) ++ { ++ problem_report_initialize_custom_sections(self); ++ } ++ ++ if (problem_report_get_buffer(self, name)) ++ { ++ log_warning("Custom section already exists : '%s'", name); ++ return -EEXIST; ++ } ++ ++ log_debug("Problem report enriched with section : '%s'", name); ++ g_hash_table_insert(self->pr_sec_custom, xstrdup(name), memstream_buffer_new()); ++ return 0; ++} ++ ++static struct memstream_buffer * ++problem_report_get_section_buffer(const problem_report_t *self, const char *section_name) ++{ ++ if (self->pr_sec_custom == NULL) ++ { ++ log_debug("Couldn't find section '%s': no custom section added", section_name); ++ return NULL; ++ } ++ ++ return (struct memstream_buffer *)g_hash_table_lookup(self->pr_sec_custom, section_name); ++} ++ ++problem_report_buffer * ++problem_report_get_buffer(const problem_report_t *self, const char *section_name) ++{ ++ assert(self != NULL); ++ assert(section_name != NULL); ++ ++ if (strcmp(PR_SEC_SUMMARY, section_name) == 0) ++ return memstream_get_stream(self->pr_sec_summ); ++ ++ if (strcmp(PR_SEC_DESCRIPTION, section_name) == 0) ++ return memstream_get_stream(self->pr_sec_desc); ++ ++ struct memstream_buffer *buf = problem_report_get_section_buffer(self, section_name); ++ return buf == NULL ? NULL : memstream_get_stream(buf); ++} ++ ++const char * ++problem_report_get_summary(const problem_report_t *self) ++{ ++ assert(self != NULL); ++ ++ return memstream_get_string(self->pr_sec_summ); ++} ++ ++const char * ++problem_report_get_description(const problem_report_t *self) ++{ ++ assert(self != NULL); ++ ++ return memstream_get_string(self->pr_sec_desc); ++} ++ ++const char * ++problem_report_get_section(const problem_report_t *self, const char *section_name) ++{ ++ assert(self != NULL); ++ assert(section_name); ++ ++ struct memstream_buffer *buf = problem_report_get_section_buffer(self, section_name); ++ ++ if (buf == NULL) ++ return NULL; ++ ++ return memstream_get_string(buf); ++} ++ ++static void ++problem_report_set_attachments(problem_report_t *self, GList *attachments) ++{ ++ assert(self != NULL); ++ assert(self->pr_attachments == NULL); ++ ++ self->pr_attachments = attachments; ++} ++ ++GList * ++problem_report_get_attachments(const problem_report_t *self) ++{ ++ assert(self != NULL); ++ ++ return self->pr_attachments; ++} ++ ++void ++problem_report_free(problem_report_t *self) ++{ ++ if (self == NULL) ++ return; ++ ++ memstream_buffer_free(self->pr_sec_summ); ++ self->pr_sec_summ = DESTROYED_POINTER; ++ ++ memstream_buffer_free(self->pr_sec_desc); ++ self->pr_sec_desc = DESTROYED_POINTER; ++ ++ g_list_free_full(self->pr_attachments, free); ++ self->pr_attachments = DESTROYED_POINTER; ++ ++ if (self->pr_sec_custom) ++ { ++ problem_report_destroy_custom_sections(self); ++ self->pr_sec_custom = DESTROYED_POINTER; ++ } ++ ++ free(self); ++} ++ ++/* ++ * Problem Formatter - extra section ++ */ ++struct extra_section ++{ ++ char *pfes_name; ///< name with % prefix ++ int pfes_flags; ///< whether is required or not ++}; ++ ++static struct extra_section * ++extra_section_new(const char *name, int flags) ++{ ++ struct extra_section *self = xmalloc(sizeof(*self)); ++ ++ self->pfes_name = xstrdup(name); ++ self->pfes_flags = flags; ++ ++ return self; ++} ++ ++static void ++extra_section_free(struct extra_section *self) ++{ ++ if (self == NULL) ++ return; ++ ++ free(self->pfes_name); ++ self->pfes_name = DESTROYED_POINTER; ++ ++ free(self); ++} ++ ++static int ++extra_section_name_cmp(struct extra_section *lhs, const char *rhs) ++{ ++ return strcmp(lhs->pfes_name, rhs); ++} ++ ++/* ++ * Problem Formatter ++ * ++ * Holds parsed sections lists. ++ */ ++struct problem_formatter ++{ ++ GList *pf_sections; ///< parsed sections (struct section_t) ++ GList *pf_extra_sections; ///< user configured sections (struct extra_section) ++ char *pf_default_summary; ///< default summary format ++}; ++ ++problem_formatter_t * ++problem_formatter_new(void) ++{ ++ problem_formatter_t *self = xzalloc(sizeof(*self)); ++ ++ self->pf_default_summary = xstrdup("%reason%"); ++ ++ return self; ++} ++ ++void ++problem_formatter_free(problem_formatter_t *self) ++{ ++ if (self == NULL) ++ return; ++ ++ g_list_free_full(self->pf_sections, (GDestroyNotify)section_free); ++ self->pf_sections = DESTROYED_POINTER; ++ ++ g_list_free_full(self->pf_extra_sections, (GDestroyNotify)extra_section_free); ++ self->pf_extra_sections = DESTROYED_POINTER; ++ ++ free(self->pf_default_summary); ++ self->pf_default_summary = DESTROYED_POINTER; ++ ++ free(self); ++} ++ ++static int ++problem_formatter_is_section_known(problem_formatter_t *self, const char *name) ++{ ++ return strcmp(name, "summary") == 0 ++ || strcmp(name, "attach") == 0 ++ || strcmp(name, "description") == 0 ++ || NULL != g_list_find_custom(self->pf_extra_sections, name, (GCompareFunc)extra_section_name_cmp); ++} ++ ++// i.e additional_info -> no flags ++int ++problem_formatter_add_section(problem_formatter_t *self, const char *name, int flags) ++{ ++ /* Do not add already added sections */ ++ if (problem_formatter_is_section_known(self, name)) ++ { ++ log_debug("Extra section already exists : '%s' ", name); ++ return -EEXIST; ++ } ++ ++ self->pf_extra_sections = g_list_prepend(self->pf_extra_sections, ++ extra_section_new(name, flags)); ++ ++ return 0; ++} ++ ++// check format validity and produce warnings ++static int ++problem_formatter_validate(problem_formatter_t *self) ++{ ++ int retval = 0; ++ ++ /* Go through all (struct extra_section)s and check whete those having flag ++ * PFFF_REQUIRED are present in the parsed (struct section_t)s. ++ */ ++ for (GList *iter = self->pf_extra_sections; iter; iter = g_list_next(iter)) ++ { ++ struct extra_section *section = (struct extra_section *)iter->data; ++ ++ log_debug("Validating extra section : '%s'", section->pfes_name); ++ ++ if ( (PFFF_REQUIRED & section->pfes_flags) ++ && NULL == g_list_find_custom(self->pf_sections, section->pfes_name, (GCompareFunc)section_name_cmp)) ++ { ++ log_warning("Problem format misses required section : '%s'", section->pfes_name); ++ ++retval; ++ } ++ } ++ ++ /* Go through all the parsed (struct section_t)s check whether are all ++ * known, i.e. each section is either one of the common sections (summary, ++ * description, attach) or is present in the (struct extra_section)s. ++ */ ++ for (GList *iter = self->pf_sections; iter; iter = g_list_next(iter)) ++ { ++ section_t *section = (section_t *)iter->data; ++ ++ if (!problem_formatter_is_section_known(self, (section->name + 1))) ++ { ++ log_warning("Problem format contains unrecognized section : '%s'", section->name); ++ ++retval; ++ } ++ } ++ ++ return retval; ++} ++ ++int ++problem_formatter_load_string(problem_formatter_t *self, const char *fmt) ++{ ++ const size_t len = strlen(fmt); ++ if (len != 0) ++ { ++ FILE *fp = fmemopen((void *)fmt, len, "r"); ++ if (fp == NULL) ++ { ++ error_msg("Not enough memory to open a stream for reading format string."); ++ return -ENOMEM; ++ } ++ ++ self->pf_sections = load_stream(fp); ++ fclose(fp); ++ } ++ ++ return problem_formatter_validate(self); ++} ++ ++int ++problem_formatter_load_file(problem_formatter_t *self, const char *path) ++{ ++ FILE *fp = stdin; ++ if (strcmp(path, "-") != 0) ++ { ++ fp = fopen(path, "r"); ++ if (!fp) ++ return -ENOENT; ++ } ++ ++ self->pf_sections = load_stream(fp); ++ ++ if (fp != stdin) ++ fclose(fp); ++ ++ return problem_formatter_validate(self); ++} ++ ++// generates report ++int ++problem_formatter_generate_report(const problem_formatter_t *self, problem_data_t *data, problem_report_t **report) ++{ ++ problem_report_t *pr = problem_report_new(); ++ ++ for (GList *iter = self->pf_extra_sections; iter; iter = g_list_next(iter)) ++ problem_report_add_custom_section(pr, ((struct extra_section *)iter->data)->pfes_name); ++ ++ bool has_summary = false; ++ for (GList *iter = self->pf_sections; iter; iter = g_list_next(iter)) ++ { ++ section_t *section = (section_t *)iter->data; ++ ++ /* %summary is something special */ ++ if (strcmp(section->name, "%summary") == 0) ++ { ++ has_summary = true; ++ format_percented_string((const char *)section->items->data, data, ++ problem_report_get_buffer(pr, PR_SEC_SUMMARY)); ++ } ++ /* %attach as well */ ++ else if (strcmp(section->name, "%attach") == 0) ++ { ++ problem_report_set_attachments(pr, get_attached_files(data, section->items, self->pf_sections)); ++ } ++ else /* %description or a custom section (e.g. %additional_info) */ ++ { ++ FILE *buffer = problem_report_get_buffer(pr, section->name + 1); ++ ++ if (buffer != NULL) ++ { ++ log_debug("Formatting section : '%s'", section->name); ++ format_section(section, data, self->pf_sections, buffer); ++ } ++ else ++ log_warning("Unsupported section '%s'", section->name); ++ } ++ } ++ ++ if (!has_summary) { ++ log_debug("Problem format misses section '%%summary'. Using the default one : '%s'.", ++ self->pf_default_summary); ++ ++ format_percented_string(self->pf_default_summary, ++ data, problem_report_get_buffer(pr, PR_SEC_SUMMARY)); ++ } ++ ++ *report = pr; ++ return 0; ++} +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 9bfc2b6..b45f2d9 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -47,7 +47,8 @@ TESTSUITE_AT = \ + global_config.at \ + iso_date.at \ + uriparser.at \ +- event_config.at ++ event_config.at \ ++ problem_report.at + + TESTSUITE_AT_IN = \ + bugzilla_plugin.at +diff --git a/tests/problem_report.at b/tests/problem_report.at +new file mode 100644 +index 0000000..8bc469f +--- /dev/null ++++ b/tests/problem_report.at +@@ -0,0 +1,690 @@ ++# -*- Autotest -*- ++ ++AT_BANNER([problem report]) ++ ++## ------- ## ++## summary ## ++## ------- ## ++ ++AT_TESTFUN([summary], ++[[ ++#include "problem_report.h" ++#include "internal_libreport.h" ++#include ++ ++int main(int argc, char **argv) ++{ ++ const char *const test_format_result[][2] = { ++ { ++ "%summary:: [abrt] trivial string", ++ "[abrt] trivial string" ++ }, ++ ++ { ++ "%summary:: [abrt] %package%", ++ "[abrt] libreport" ++ }, ++ ++ { ++ "%summary:: [abrt] %package%[[ : %crash_function%()]][[ : %does_not_exist%]][[ : %reason%]][[ TAINTED: %taint_flags%]]", ++ "[abrt] libreport : run_event() : Killed by SIGSEGV" ++ }, ++ ++ { ++ "%summary:: [abrt] %package%[[ : %crash_function%[[ : %does_not_exist%]]()]][[ : %reason%]]", ++ "[abrt] libreport : run_event() : Killed by SIGSEGV" ++ }, ++ ++ { ++ "%summary:: [abrt] %package%[[ : %does_not_exist%[[ : %crash_function%()]]]][[ : %reason%]]", ++ "[abrt] libreport : Killed by SIGSEGV" ++ }, ++ ++ { ++ "%summary:: [[%does_not_exist%]][[%once_more%]][abrt] %package%", ++ "[abrt] libreport" ++ }, ++ ++ { ++ "", ++ "Killed by SIGSEGV" ++ }, ++ }; ++ ++ g_verbose = 3; ++ ++ problem_data_t *data = problem_data_new(); ++ problem_data_add_text_noteditable(data, "package", "libreport"); ++ problem_data_add_text_noteditable(data, "crash_function", "run_event"); ++ problem_data_add_text_noteditable(data, "reason", "Killed by SIGSEGV"); ++ ++ for (size_t i = 0; i < sizeof(test_format_result)/sizeof(*test_format_result); ++i) { ++ problem_formatter_t *pf = problem_formatter_new(); ++ assert(!problem_formatter_load_string(pf, test_format_result[i][0])); ++ ++ problem_report_t *pr = NULL; ++ assert(!problem_formatter_generate_report(pf, data, &pr)); ++ assert(pr != NULL); ++ ++ const char *summary = problem_report_get_summary(pr); ++ assert(summary != NULL); ++ ++ fprintf(stderr, "expected: '%s'\n", test_format_result[i][1]); ++ fprintf(stderr, "result : '%s'\n", summary); ++ ++ assert(strcmp(test_format_result[i][1], summary) == 0); ++ ++ problem_report_free(pr); ++ problem_formatter_free(pf); ++ } ++ ++ problem_data_free(data); ++ ++ return 0; ++} ++]]) ++ ++## ---------- ## ++## desciption ## ++## ---------- ## ++ ++AT_TESTFUN([description], ++[[ ++#include "problem_report.h" ++#include "internal_libreport.h" ++#include ++ ++int main(int argc, char **argv) ++{ ++ const char *const test_format_result[][2] = { ++ { ++ "\n"\ ++ "\n"\ ++ "\n"\ ++ "Single line\n" ++ "\n"\ ++ "\n"\ ++ "\n", ++ ++ "Single line\n" ++ }, ++ ++ { ++ "\n"\ ++ "\n"\ ++ "\n"\ ++ "Comment:: %bare_comment" ++ "\n"\ ++ "\n"\ ++ "\n"\ ++ "Ad-hoc line\n" ++ "\n"\ ++ "\n"\ ++ "\n"\ ++ "Additional:: package,\\\n" ++ "uuid,cwd\\\\" ++ ",user_name" ++ "\n"\ ++ "\n", ++ ++ "Comment:\n" \ ++ "Hello, world!\n" ++ "\n"\ ++ "\n"\ ++ "Ad-hoc line\n" ++ "\n"\ ++ "\n"\ ++ "\n"\ ++ "Additional:\n"\ ++ "package: libreport\n"\ ++ "uuid: 123456789ABCDEF\n"\ ++ "user_name: abrt\n", ++ }, ++ ++ { ++ ":: %bare_description", ++ ++ "I run will_segfault and\n"\ ++ "it crashed as expected\n" ++ }, ++ ++ { ++ "User:: %bare_user_name,uid\n"\ ++ "Additional info:: -uuid,%oneline,-comment,-package", ++ ++ "User:\n"\ ++ "abrt\n"\ ++ "uid: 69\n"\ ++ "Additional info:\n"\ ++ "analyzer: CCpp\n"\ ++ "root: /var/run/mock/abrt\n"\ ++ "type: CCpp\n" ++ }, ++ ++ { ++ ":: %reporter", ++ NULL /* do no check results*/ ++ }, ++ ++ { ++ "Truncated backtrace:: %bare_%short_backtrace", ++ ++ "Truncated backtrace:\n" ++ "Thread no. 0 (7 frames)\n" ++ " #1 crash at will_segfault.c:19\n" ++ " #2 varargs at will_segfault.c:31\n" ++ " #3 inlined at will_segfault.c:40\n" ++ " #4 f at will_segfault.c:45\n" ++ " #5 callback at will_segfault.c:50\n" ++ " #6 call_me_back at libwillcrash.c:8\n" ++ " #7 recursive at will_segfault.c:59\n" ++ }, ++ }; ++ ++ g_verbose = 3; ++ ++ problem_data_t *data = problem_data_new(); ++ problem_data_add_text_noteditable(data, "package", "libreport"); ++ problem_data_add_text_noteditable(data, "analyzer", "CCpp"); ++ problem_data_add_text_noteditable(data, "type", "CCpp"); ++ problem_data_add_text_noteditable(data, "comment", "Hello, world!"); ++ problem_data_add_text_noteditable(data, "uuid", "123456789ABCDEF"); ++ problem_data_add_text_noteditable(data, "uid", "69"); ++ problem_data_add_text_noteditable(data, "user_name", "abrt"); ++ problem_data_add_text_noteditable(data, "root", "/var/run/mock/abrt"); ++ problem_data_add_text_noteditable(data, "description", "I run will_segfault and\nit crashed as expected\n"); ++ problem_data_add_text_noteditable(data, "backtrace", ++"Thread 1 (LWP 11865):\n"\ ++"#0 printf (__fmt=0x400acf \"Result: %d\\n\") at /usr/include/bits/stdio2.h:104\n"\ ++"No locals.\n"\ ++"#1 crash (p=p@entry=0x0) at will_segfault.c:19\n"\ ++"i = \n"\ ++"#2 0x0000000000400964 in varargs (num_args=1, num_args@entry=2) at will_segfault.c:31\n"\ ++"p = \n"\ ++"ap = {{gp_offset = 24, fp_offset = 32767, overflow_arg_area = 0x7fff4fc8a0c0, reg_save_area = 0x7fff4fc8a080}}\n"\ ++"#3 0x00000000004009be in inlined (p=0x0) at will_segfault.c:40\n"\ ++"num = 42\n"\ ++"#4 f (p=p@entry=0x0) at will_segfault.c:45\n"\ ++"No locals.\n"\ ++"#5 0x00000000004009e9 in callback (data=data@entry=0x0) at will_segfault.c:50\n"\ ++"No locals.\n"\ ++"#6 0x00000032f76006f9 in call_me_back (cb=cb@entry=0x4009e0 , data=data@entry=0x0) at libwillcrash.c:8\n"\ ++"res = \n"\ ++"#7 0x0000000000400a14 in recursive (i=i@entry=0) at will_segfault.c:59\n"\ ++"p = \n"\ ++"#8 0x0000000000400a00 in recursive (i=i@entry=1) at will_segfault.c:66\n"\ ++"No locals.\n"\ ++"#9 0x0000000000400a00 in recursive (i=i@entry=2) at will_segfault.c:66\n"\ ++"No locals.\n"\ ++"#10 0x0000000000400775 in main (argc=, argv=) at will_segfault.c:83\n"\ ++"No locals.\n"\ ++"From To Syms Read Shared Object Library\n"\ ++"0x00000032f76005f0 0x00000032f7600712 Yes /lib64/libwillcrash.so.0\n"\ ++"0x0000003245c1f4f0 0x0000003245d6aca4 Yes /lib64/libc.so.6\n"\ ++"0x0000003245800b10 0x000000324581b6d0 Yes /lib64/ld-linux-x86-64.so.2\n"\ ++"$1 = 0x0\n" ++"No symbol \"__glib_assert_msg\" in current context.\n"\ ++"rax 0xf 15\n"\ ++"rbx 0x0 0\n"\ ++"rcx 0x7ff96f752000 140709293531136\n"\ ++"rdx 0x3245fb9a40 215922481728\n"\ ++"rsi 0x7ff96f752000 140709293531136\n"\ ++"rdi 0x1 1\n"\ ++"rbp 0x400a30 0x400a30 <__libc_csu_init>\n"\ ++"rsp 0x7fff4fc8a050 0x7fff4fc8a050\n"\ ++"r8 0xffffffff 4294967295\n"\ ++"r9 0x0 0\n"\ ++"r10 0x22 34\n"\ ++"r11 0x246 582\n"\ ++"r12 0x40079f 4196255\n"\ ++"r13 0x7fff4fc8a210 140734531936784\n"\ ++"r14 0x0 0\n"\ ++"r15 0x0 0\n"\ ++"rip 0x4008ae 0x4008ae \n"\ ++"eflags 0x10246 [ PF ZF IF RF ]\n"\ ++"cs 0x33 51\n"\ ++"ss 0x2b 43\n"\ ++"ds 0x0 0\n"\ ++"es 0x0 0\n"\ ++"fs 0x0 0\n"\ ++"gs 0x0 0\n"\ ++"st0 0 (raw 0x00000000000000000000)\n"\ ++"st1 0 (raw 0x00000000000000000000)\n"\ ++"st2 0 (raw 0x00000000000000000000)\n"\ ++"st3 0 (raw 0x00000000000000000000)\n"\ ++"st4 0 (raw 0x00000000000000000000)\n"\ ++"st5 0 (raw 0x00000000000000000000)\n"\ ++"st6 0 (raw 0x00000000000000000000)\n"\ ++"st7 0 (raw 0x00000000000000000000)\n"\ ++"fctrl 0x37f 895\n"\ ++"fstat 0x0 0\n"\ ++"ftag 0xffff 65535\n"\ ++"fiseg 0x0 0\n"\ ++"fioff 0x0 0\n"\ ++"foseg 0x0 0\n"\ ++"fooff 0x0 0\n"\ ++"fop 0x0 0\n"\ ++"xmm0 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"xmm1 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x2f }, v8_int16 = {0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f}, v4_int32 = {0x2f2f2f2f, 0x2f2f2f2f, 0x2f2f2f2f, 0x2f2f2f2f}, v2_int64 = {0x2f2f2f2f2f2f2f2f, 0x2f2f2f2f2f2f2f2f}, uint128 = 0x2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f}\n"\ ++"xmm2 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"xmm3 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 , 0xff, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff00, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0xff00}, v2_int64 = {0x0, 0xff0000000000}, uint128 = 0x0000ff00000000000000000000000000}\n"\ ++"xmm4 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0xff0000, 0x0}, v2_int64 = {0x0, 0xff0000}, uint128 = 0x0000000000ff00000000000000000000}\n"\ ++"xmm5 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"xmm6 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"xmm7 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"xmm8 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"xmm9 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"xmm10 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"xmm11 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"xmm12 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 , 0xff, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff}, v4_int32 = {0x0, 0x0, 0x0, 0xff0000}, v2_int64 = {0x0, 0xff000000000000}, uint128 = 0x00ff0000000000000000000000000000}\n"\ ++"xmm13 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"xmm14 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"xmm15 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ ++"mxcsr 0x1f80 [ IM DM ZM OM UM PM ]\n"\ ++"Dump of assembler code for function crash:\n"\ ++" 0x00000000004008a0 <+0>: push %rbx\n"\ ++" 0x00000000004008a1 <+1>: mov %rdi,%rbx\n"\ ++" 0x00000000004008a4 <+4>: mov $0x400ac0,%edi\n"\ ++" 0x00000000004008a9 <+9>: callq 0x4006f0 \n"\ ++" => 0x00000000004008ae <+14>: mov (%rbx),%edx\n"\ ++" 0x00000000004008b0 <+16>: mov $0x400acf,%esi\n"\ ++" 0x00000000004008b5 <+21>: mov $0x1,%edi\n"\ ++" 0x00000000004008ba <+26>: xor %eax,%eax\n"\ ++" 0x00000000004008bc <+28>: callq 0x400740 <__printf_chk@plt>\n"\ ++" 0x00000000004008c1 <+33>: pop %rbx\n"\ ++" 0x00000000004008c2 <+34>: retq\n"\ ++"End of assembler dump.\n" ++ ); ++ ++ for (size_t i = 0; i < sizeof(test_format_result)/sizeof(*test_format_result); ++i) { ++ problem_formatter_t *pf = problem_formatter_new(); ++ assert(!problem_formatter_load_string(pf, test_format_result[i][0])); ++ ++ problem_report_t *pr = NULL; ++ assert(!problem_formatter_generate_report(pf, data, &pr)); ++ assert(pr != NULL); ++ ++ const char *summary = problem_report_get_description(pr); ++ assert(summary != NULL); ++ ++ if (test_format_result[i][1] != NULL) { ++ fprintf(stderr, "####\n"); ++ fprintf(stderr, "expected: '%s'\n", test_format_result[i][1]); ++ fprintf(stderr, "====\n"); ++ fprintf(stderr, "result : '%s'\n", summary); ++ fprintf(stderr, "####\n"); ++ ++ assert(strcmp(test_format_result[i][1], summary) == 0); ++ } ++ ++ problem_report_free(pr); ++ problem_formatter_free(pf); ++ } ++ ++ problem_data_free(data); ++ ++ return 0; ++} ++]]) ++ ++## ------ ## ++## attach ## ++## ------ ## ++ ++AT_TESTFUN([attach], ++[[ ++#include "problem_report.h" ++#include "internal_libreport.h" ++#include ++ ++int main(int argc, char **argv) ++{ ++ g_verbose = 3; ++ ++ const char *fst[] = { "backtrace", "screenshot", "description", NULL }; ++ ++ struct test_case { ++ const char *format; ++ const char *const *files; ++ } cases [] = { ++ { ++ .format = "%attach:: %multiline,%binary,-coredump", ++ .files = fst, ++ } ++ }; ++ ++ problem_data_t *data = problem_data_new(); ++ problem_data_add_text_noteditable(data, "package", "libreport"); ++ problem_data_add_text_noteditable(data, "analyzer", "CCpp"); ++ problem_data_add_text_noteditable(data, "type", "CCpp"); ++ problem_data_add_text_noteditable(data, "comment", "Hello, world!"); ++ problem_data_add_text_noteditable(data, "uuid", "123456789ABCDEF"); ++ problem_data_add_text_noteditable(data, "uid", "69"); ++ problem_data_add_text_noteditable(data, "user_name", "abrt"); ++ problem_data_add_text_noteditable(data, "root", "/var/run/mock/abrt"); ++ problem_data_add_text_noteditable(data, "description", "I run will_segfault and\nit crashed as expected\n"); ++ problem_data_add_file(data, "coredump", "/what/ever/path/to/coredump"); ++ problem_data_add_file(data, "screenshot", "/what/ever/path/to/screenshot"); ++ problem_data_add_text_noteditable(data, "backtrace", ++"Thread 1 (LWP 11865):\n"\ ++"#0 printf (__fmt=0x400acf \"Result: %d\\n\") at /usr/include/bits/stdio2.h:104\n"\ ++"No locals.\n"\ ++"#1 crash (p=p@entry=0x0) at will_segfault.c:19\n"\ ++"i = \n"\ ++"#2 0x0000000000400964 in varargs (num_args=1, num_args@entry=2) at will_segfault.c:31\n"\ ++"p = \n"\ ++"ap = {{gp_offset = 24, fp_offset = 32767, overflow_arg_area = 0x7fff4fc8a0c0, reg_save_area = 0x7fff4fc8a080}}\n"\ ++"#3 0x00000000004009be in inlined (p=0x0) at will_segfault.c:40\n"\ ++"num = 42\n"\ ++"#4 f (p=p@entry=0x0) at will_segfault.c:45\n"\ ++"No locals.\n"\ ++"#5 0x00000000004009e9 in callback (data=data@entry=0x0) at will_segfault.c:50\n"\ ++"No locals.\n"\ ++"#6 0x00000032f76006f9 in call_me_back (cb=cb@entry=0x4009e0 , data=data@entry=0x0) at libwillcrash.c:8\n"\ ++"res = \n"\ ++"#7 0x0000000000400a14 in recursive (i=i@entry=0) at will_segfault.c:59\n"\ ++"p = \n"\ ++"#8 0x0000000000400a00 in recursive (i=i@entry=1) at will_segfault.c:66\n"\ ++"No locals.\n"\ ++"#9 0x0000000000400a00 in recursive (i=i@entry=2) at will_segfault.c:66\n"\ ++"No locals.\n"\ ++"#10 0x0000000000400775 in main (argc=, argv=) at will_segfault.c:83\n"\ ++"No locals.\n"); ++ ++ for (size_t i = 0; i < sizeof(cases)/sizeof(*cases); ++i) { ++ fprintf(stderr, "%s", cases[i].format); ++ ++ problem_formatter_t *pf = problem_formatter_new(); ++ assert(!problem_formatter_load_string(pf, cases[i].format)); ++ ++ problem_report_t *pr = NULL; ++ assert(!problem_formatter_generate_report(pf, data, &pr)); ++ assert(pr != NULL); ++ ++ const char *const *iter = cases[i].files; ++ ++ if (*iter != NULL) { ++ assert(problem_report_get_attachments(pr)); ++ } ++ ++ GList *clone = g_list_copy_deep(problem_report_get_attachments(pr), (GCopyFunc)xstrdup, NULL); ++ ++ while (*iter) { ++ GList *item = g_list_find_custom(clone, *iter, (GCompareFunc)strcmp); ++ ++ if (item == NULL) { ++ fprintf(stderr, "format: '%s'\n", cases[i].format); ++ fprintf(stderr, "missing file: '%s'\n", *iter); ++ abort(); ++ } ++ else { ++ free(item->data); ++ clone = g_list_delete_link(clone, item); ++ } ++ ++ ++iter; ++ } ++ ++ if (clone != NULL) { ++ for (GList *iter = clone; iter; iter = g_list_next(iter)) { ++ fprintf(stderr, "extra : '%s'\n", (const char *)iter->data); ++ } ++ abort(); ++ } ++ ++ problem_report_free(pr); ++ problem_formatter_free(pf); ++ } ++ ++ problem_data_free(data); ++ ++ return 0; ++} ++]]) ++ ++ ++## -------------- ## ++## custom_section ## ++## -------------- ## ++ ++AT_TESTFUN([custom_section], ++[[ ++#include "problem_report.h" ++#include "internal_libreport.h" ++#include ++ ++int main(int argc, char **argv) ++{ ++ g_verbose = 3; ++ ++ struct test_case; ++ struct test_case { ++ const char *section_name; ++ int section_flags; ++ int retval_load; ++ int retval_generate; ++ const char *format; ++ const char *output; ++ } cases [] = { ++ { .section_name = NULL, ++ .section_flags = 0, ++ .retval_load = 1, ++ .retval_generate = 0, ++ .format = ++ "%additional_info::\n" ++ ":: package,\\\n" ++ "uuid,cwd\\\\" ++ ",user_name" ++ , ++ .output = NULL, ++ }, ++ ++ { .section_name = "additional_info", ++ .section_flags = 0, ++ .retval_load = 0, ++ .retval_generate = 0, ++ .format = ++ "%additional_info::\n" ++ ":: package,\\\n" ++ "uuid,cwd\\\\" ++ ",user_name" ++ , ++ .output = ++ "package: libreport\n" ++ "uuid: 0123456789ABCDEF\n" ++ "user_name: abrt\n" ++ , ++ }, ++ ++ { .section_name = "additional_info", ++ .section_flags = PFFF_REQUIRED, ++ .retval_load = 1, ++ .retval_generate = 0, ++ .format = "%summary:: [abrt] %package%\n:: %reporter\n", ++ .output = NULL, ++ }, ++ ++ { .section_name = "additional_info", ++ .section_flags = 0, ++ .retval_load = 0, ++ .retval_generate = 0, ++ .format = "%summary:: [abrt] %package%\n:: %reporter\n", ++ .output = "", ++ }, ++ ++ { .section_name = "additional_info", ++ .section_flags = 0, ++ .retval_load = 0, ++ .retval_generate = 0, ++ .format = ++ "%additional_info:: root\n" ++ "Info:: package,\\\n" ++ "uuid,cwd\\\\" ++ ",user_name" ++ , ++ .output = ++ "Info:\n" ++ "package: libreport\n" ++ "uuid: 0123456789ABCDEF\n" ++ "user_name: abrt\n" ++ , ++ }, ++ }; ++ ++ problem_data_t *data = problem_data_new(); ++ problem_data_add_text_noteditable(data, "package", "libreport"); ++ problem_data_add_text_noteditable(data, "crash_function", "run_event"); ++ problem_data_add_text_noteditable(data, "reason", "Killed by SIGSEGV"); ++ problem_data_add_text_noteditable(data, "uuid", "0123456789ABCDEF"); ++ problem_data_add_text_noteditable(data, "user_name", "abrt"); ++ ++ for (size_t i = 0; i < sizeof(cases)/sizeof(*cases); ++i) { ++ fprintf(stderr, "#### Test case %zd ####\n", i + 1); ++ ++ struct test_case *tcase = cases + i; ++ problem_formatter_t *pf = problem_formatter_new(); ++ ++ if (tcase->section_name != NULL) { ++ problem_formatter_add_section(pf, tcase->section_name, tcase->section_flags); ++ } ++ ++ int r = problem_formatter_load_string(pf, tcase->format); ++ if (r != tcase->retval_load) { ++ fprintf(stderr, "Load : expected : %d , got : %d\n", tcase->retval_load, r); ++ abort(); ++ } ++ ++ if (tcase->retval_load != 0) { ++ goto next_test_case; ++ } ++ ++ problem_report_t *pr = NULL; ++ r = problem_formatter_generate_report(pf, data, &pr); ++ if (r != tcase->retval_generate) { ++ fprintf(stderr, "Generaet : expected : %d , got : %d\n", tcase->retval_generate, r); ++ abort(); ++ } ++ ++ if (tcase->retval_generate != 0) { ++ goto next_test_case; ++ } ++ ++ const char *output = problem_report_get_section(pr, tcase->section_name); ++ assert(output); ++ ++ if (strcmp(output, tcase->output) != 0) { ++ fprintf(stderr, "expected:\n'%s'\n", tcase->output); ++ fprintf(stderr, "result :\n'%s'\n", output); ++ abort(); ++ } ++ ++ problem_report_free(pr); ++ ++next_test_case: ++ problem_formatter_free(pf); ++ fprintf(stderr, "#### Finished - Test case %zd ####\n", i + 1); ++ } ++ ++ problem_data_free(data); ++ ++ return 0; ++} ++]]) ++ ++## ------ ## ++## sanity ## ++## ------ ## ++ ++AT_TESTFUN([sanity], ++[[ ++#include "problem_report.h" ++#include "internal_libreport.h" ++#include ++#include ++ ++void assert_equal_strings(const char *res, const char *exp) ++{ ++ if ( (res == NULL && exp != NULL) ++ || (res != NULL && exp == NULL) ++ || ((res != NULL && exp != NULL) && strcmp(res, exp) != 0) ++ ) { ++ fprintf(stderr, "expected : '%s'\n", exp); ++ fprintf(stderr, "result : '%s'\n", res); ++ abort(); ++ } ++} ++ ++int main(int argc, char **argv) ++{ ++ g_verbose = 3; ++ ++ problem_formatter_t *pf = problem_formatter_new(); ++ ++ assert(problem_formatter_add_section(pf, "summary", 0) == -EEXIST); ++ assert(problem_formatter_add_section(pf, "description", 0) == -EEXIST); ++ assert(problem_formatter_add_section(pf, "attach", 0) == -EEXIST); ++ ++ assert(problem_formatter_add_section(pf, "additional_info", 0) == 0); ++ assert(problem_formatter_add_section(pf, "additional_info", 0) == -EEXIST); ++ ++ problem_data_t *data = problem_data_new(); ++ problem_data_add_text_noteditable(data, "package", "libreport"); ++ problem_data_add_text_noteditable(data, "crash_function", "run_event"); ++ problem_data_add_text_noteditable(data, "reason", "Killed by SIGSEGV"); ++ problem_data_add_text_noteditable(data, "comment", "Hello, world!"); ++ problem_data_add_text_noteditable(data, "root", "/var/run/mock/abrt"); ++ problem_data_add_text_noteditable(data, "user_name", "abrt"); ++ problem_data_add_file(data, "screenshot", "/what/ever/path/to/screenshot"); ++ ++ problem_formatter_load_string(pf, ++ "%summary:: [abrt] %package% : %reason%\n\n" ++ "Description:: %bare_comment\n\n" ++ "%attach:: screenshot\n\n" ++ "%additional_info::\n\n" ++ "User:: root,user_name,uid\n\n\n" ++ ); ++ ++ problem_report_t *pr = NULL; ++ problem_formatter_generate_report(pf, data, &pr); ++ ++ assert_equal_strings(problem_report_get_summary(pr), ++ "[abrt] libreport : Killed by SIGSEGV"); ++ ++ problem_report_buffer_printf(problem_report_get_buffer(pr, PR_SEC_SUMMARY), " - test"); ++ ++ assert_equal_strings(problem_report_get_summary(pr), ++ "[abrt] libreport : Killed by SIGSEGV - test"); ++ ++ ++ assert_equal_strings(problem_report_get_description(pr), ++ "Description:\nHello, world!\n"); ++ ++ problem_report_buffer_printf(problem_report_get_buffer(pr, PR_SEC_DESCRIPTION), "Test line\n"); ++ ++ assert_equal_strings(problem_report_get_description(pr), ++ "Description:\nHello, world!\nTest line\n"); ++ ++ ++ assert_equal_strings(problem_report_get_section(pr, "additional_info"), ++ "User:\n" ++ "root: /var/run/mock/abrt\n" ++ "user_name: abrt\n" ++ ); ++ ++ problem_report_buffer_printf(problem_report_get_buffer(pr, "additional_info"), "uid: 42\n"); ++ ++ assert_equal_strings(problem_report_get_section(pr, "additional_info"), ++ "User:\n" ++ "root: /var/run/mock/abrt\n" ++ "user_name: abrt\n" ++ "uid: 42\n" ++ ); ++ ++ ++ problem_report_free(pr); ++ problem_data_free(data); ++ problem_formatter_free(pf); ++ ++ return 0; ++} ++]]) +diff --git a/tests/testsuite.at b/tests/testsuite.at +index 392c3db..ccb37d1 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -17,6 +17,7 @@ m4_include([xml_definition.at]) + m4_include([report_python.at]) + m4_include([string_list.at]) + m4_include([ureport.at]) ++m4_include([problem_report.at]) + m4_include([dump_dir.at]) + m4_include([global_config.at]) + m4_include([iso_date.at]) +-- +1.8.3.1 + diff --git a/SOURCES/0200-rhtsupport-use-problem-report-API-to-create-descript.patch b/SOURCES/0200-rhtsupport-use-problem-report-API-to-create-descript.patch new file mode 100644 index 0000000..8b02b93 --- /dev/null +++ b/SOURCES/0200-rhtsupport-use-problem-report-API-to-create-descript.patch @@ -0,0 +1,233 @@ +From 7afe09fb5c3a69469b864cf21cacec5b427ae372 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Tue, 29 Mar 2016 15:08:15 +0200 +Subject: [PATCH] rhtsupport: use problem report API to create description + +Related to: rhbz#1261358 + +Signed-off-by: Matej Habrnal +--- + doc/reporter-rhtsupport.txt | 5 +- + src/plugins/reporter-rhtsupport.c | 116 +++++++++++++++++++++++++++++--------- + 2 files changed, 92 insertions(+), 29 deletions(-) + +diff --git a/doc/reporter-rhtsupport.txt b/doc/reporter-rhtsupport.txt +index c4aa459..66e5bed 100644 +--- a/doc/reporter-rhtsupport.txt ++++ b/doc/reporter-rhtsupport.txt +@@ -7,7 +7,7 @@ reporter-rhtsupport - Reports problem to RHTSupport. + + SYNOPSIS + -------- +-'reporter-rhtsupport' [-v] [-c CONFFILE] [-u -C UR_CONFFILE] -d DIR ++'reporter-rhtsupport' [-v] [-c CONFFILE] [-F FMTFILE] [-u -C UR_CONFFILE] -d DIR + + Or: + +@@ -87,6 +87,9 @@ OPTIONS + -C UR_CONFFILE:: + Configuration file for submitting uReports. + ++-F CONF_FORMAT_FILE:: ++ Formatting file for a new case. ++ + FILES + ----- + /usr/share/libreport/conf.d/plugins/rhtsupport.conf:: +diff --git a/src/plugins/reporter-rhtsupport.c b/src/plugins/reporter-rhtsupport.c +index 7b04086..7d45b75 100644 +--- a/src/plugins/reporter-rhtsupport.c ++++ b/src/plugins/reporter-rhtsupport.c +@@ -23,6 +23,22 @@ + #include "libreport_curl.h" + #include "abrt_rh_support.h" + #include "reporter-rhtsupport.h" ++#include "problem_report.h" ++ ++/* problem report format template */ ++#define PROBLEM_REPORT_TEMPLATE \ ++ "%summary:: [abrt] %pkg_name%[[: %crash_function%()]][[: %reason%]][[: TAINTED %tainted_short%]]\n" \ ++ "\n" \ ++ "Description of problem:: %bare_comment\n" \ ++ "\n" \ ++ "Truncated backtrace:: %bare_%short_backtrace\n" \ ++ "\n" \ ++ "Other report identifiers:: %bare_reported_to\n" \ ++ "\n" \ ++ "Additional info::" \ ++ " count,reason,package,cmdline,executable,%reporter\n" ++ ++#define ABRT_ELEMENTS_KB_ARTICLE "https://access.redhat.com/articles/2134281" + + #define QUERY_HINTS_IF_SMALLER_THAN (8*1024*1024) + +@@ -429,11 +445,12 @@ int main(int argc, char **argv) + const char *case_no = NULL; + GList *conf_file = NULL; + const char *urconf_file = UREPORT_CONF_FILE_PATH; ++ const char *fmt_file = NULL; + + /* Can't keep these strings/structs static: _() doesn't support that */ + const char *program_usage_string = _( + "\n" +- "& [-v] [-c CONFFILE] -d DIR\n" ++ "& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -464,6 +481,9 @@ int main(int argc, char **argv) + OPT_t = 1 << 3, + OPT_f = 1 << 4, + OPT_u = 1 << 5, ++ OPT_C = 1 << 6, ++ OPT_F = 1 << 7, ++ OPT_D = 1 << 8, + }; + /* Keep enum above and order of options below in sync! */ + struct options program_options[] = { +@@ -474,6 +494,8 @@ int main(int argc, char **argv) + OPT_BOOL( 'f', NULL, NULL , _("Force reporting even if this problem is already reported")), + OPT_BOOL( 'u', NULL, NULL , _("Submit uReport before creating a new case")), + OPT_STRING( 'C', NULL, &urconf_file , "FILE", _("Configuration file for uReport")), ++ OPT_STRING( 'F', NULL, &fmt_file , "FILE", _("Formatting file for a new case")), ++ OPT_BOOL( 'D', NULL, NULL , _("Debug")), + OPT_END() + }; + unsigned opts = parse_opts(argc, argv, program_options, program_usage_string); +@@ -617,20 +639,11 @@ int main(int argc, char **argv) + } + } + +- /* Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing */ +- log(_("Compressing data")); +- + problem_data_t *problem_data = create_problem_data_for_reporting(dump_dir_name); + if (!problem_data) + xfunc_die(); /* create_problem_data_for_reporting already emitted error msg */ + + const char *errmsg = NULL; +- char *tempfile = NULL; +- rhts_result_t *result = NULL; +- rhts_result_t *result_atch = NULL; +- char *dsc = NULL; +- char *summary = NULL; +- + const char *count = NULL; + count = problem_data_get_content_or_NULL(problem_data, FILENAME_COUNT); + if (count != NULL +@@ -678,21 +691,6 @@ int main(int argc, char **argv) + exit(EXIT_CANCEL_BY_USER); + } + +- const char *function; +- const char *reason; +- reason = problem_data_get_content_or_NULL(problem_data, FILENAME_REASON); +- function = problem_data_get_content_or_NULL(problem_data, FILENAME_CRASH_FUNCTION); +- { +- struct strbuf *buf_summary = strbuf_new(); +- strbuf_append_strf(buf_summary, "[abrt] %s", package); +- if (function && strlen(function) < 30) +- strbuf_append_strf(buf_summary, ": %s", function); +- if (reason) +- strbuf_append_strf(buf_summary, ": %s", reason); +- summary = strbuf_free_nobuf(buf_summary); +- dsc = make_description_bz(problem_data, CD_TEXT_ATT_SIZE_BZ); +- } +- + char tmpdir_name[sizeof(LARGE_DATA_TMP_DIR"/rhtsupport-"LIBREPORT_ISO_DATE_STRING_SAMPLE"-XXXXXX")]; + snprintf(tmpdir_name, sizeof(tmpdir_name), LARGE_DATA_TMP_DIR"/rhtsupport-%s-XXXXXX", iso_date_string(NULL)); + /* mkdtemp does mkdir(xxx, 0700), should be safe (is it?) */ +@@ -703,8 +701,71 @@ int main(int argc, char **argv) + /* Starting from here, we must perform cleanup on errors + * (delete temp dir) + */ ++ char *tempfile = NULL; + tempfile = concat_path_basename(tmpdir_name, dump_dir_name); + tempfile = append_to_malloced_string(tempfile, ".tar.gz"); ++ ++ rhts_result_t *result = NULL; ++ rhts_result_t *result_atch = NULL; ++ package = problem_data_get_content_or_NULL(problem_data, FILENAME_PACKAGE); ++ ++ const char *dsc = NULL; ++ const char *summary = NULL; ++ ++ problem_formatter_t *pf = problem_formatter_new(); ++ ++ /* formatting conf file was set */ ++ if (fmt_file) ++ { ++ if (problem_formatter_load_file(pf, fmt_file)) ++ error_msg_and_die("Invalid format file: %s", fmt_file); ++ } ++ /* using formatting template */ ++ else ++ { ++ if (problem_formatter_load_string(pf, PROBLEM_REPORT_TEMPLATE)) ++ error_msg_and_die("Invalid problem report format string"); ++ } ++ ++ problem_report_t *pr = NULL; ++ if (problem_formatter_generate_report(pf, problem_data, &pr)) ++ error_msg_and_die("Failed to format bug report from problem data"); ++ ++ /* Add information about attachments into the description */ ++ problem_report_buffer *dsc_buffer = problem_report_get_buffer(pr, PR_SEC_DESCRIPTION); ++ ++ char *tarball_name = basename(tempfile); ++ problem_report_buffer_printf(dsc_buffer, ++ "\n" ++ "sosreport and other files were attached as '%s' to the case.\n" ++ "For more details about elements collected by ABRT see:\n" ++ "%s\n" ++ , tarball_name, ABRT_ELEMENTS_KB_ARTICLE); ++ ++ ++ summary = problem_report_get_summary(pr); ++ dsc = problem_report_get_description(pr); ++ ++ /* debug */ ++ if (opts & OPT_D) ++ { ++ printf("summary: %s\n" ++ "\n" ++ "%s" ++ "\n" ++ , summary ++ , dsc ++ ); ++ ++ problem_report_free(pr); ++ problem_formatter_free(pf); ++ ++ exit(0); ++ } ++ ++ /* Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing */ ++ log(_("Compressing data")); ++ + if (create_tarball(tempfile, problem_data) != 0) + { + errmsg = _("Can't create temporary file in "LARGE_DATA_TMP_DIR); +@@ -749,6 +810,8 @@ int main(int argc, char **argv) + + free(version); + free(product); ++ problem_report_free(pr); ++ problem_formatter_free(pf); + + if (result->error) + { +@@ -879,9 +942,6 @@ int main(int argc, char **argv) + if (errmsg) + error_msg_and_die("%s", errmsg); + +- free(summary); +- free(dsc); +- + free_rhts_result(result_atch); + free_rhts_result(result); + +-- +1.8.3.1 + diff --git a/SOURCES/0201-rhtsupport-add-pkg_vendor-reproducer-and-reproducibl.patch b/SOURCES/0201-rhtsupport-add-pkg_vendor-reproducer-and-reproducibl.patch new file mode 100644 index 0000000..1dae01d --- /dev/null +++ b/SOURCES/0201-rhtsupport-add-pkg_vendor-reproducer-and-reproducibl.patch @@ -0,0 +1,67 @@ +From 60e3877eecba52fc855ac40120e67c069e0cd60b Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Thu, 3 Mar 2016 10:25:10 +0100 +Subject: [PATCH] rhtsupport: add pkg_vendor, reproducer and reproducible to + description + +Related to: rhbz#1261358 + +Signed-off-by: Matej Habrnal +--- + src/plugins/reporter-rhtsupport.c | 21 ++++++++++++++++----- + 1 file changed, 16 insertions(+), 5 deletions(-) + +diff --git a/src/plugins/reporter-rhtsupport.c b/src/plugins/reporter-rhtsupport.c +index 7d45b75..781b5b1 100644 +--- a/src/plugins/reporter-rhtsupport.c ++++ b/src/plugins/reporter-rhtsupport.c +@@ -27,16 +27,20 @@ + + /* problem report format template */ + #define PROBLEM_REPORT_TEMPLATE \ +- "%summary:: [abrt] %pkg_name%[[: %crash_function%()]][[: %reason%]][[: TAINTED %tainted_short%]]\n" \ ++ "%summary:: [abrt] [[%pkg_name%]][[: %crash_function%()]][[: %reason%]][[: TAINTED %tainted_short%]]\n" \ + "\n" \ + "Description of problem:: %bare_comment\n" \ + "\n" \ +- "Truncated backtrace:: %bare_%short_backtrace\n" \ ++ "Additional info::" \ ++ " count,reason,package,pkg_vendor,cmdline,executable,%reporter\n" \ + "\n" \ +- "Other report identifiers:: %bare_reported_to\n" \ ++ "How reproducible:: %bare_reproducible\n" \ + "\n" \ +- "Additional info::" \ +- " count,reason,package,cmdline,executable,%reporter\n" ++ "Steps to reproduce:: %bare_reproducer\n" \ ++ "\n" \ ++ "Truncated backtrace:: %bare_%short_backtrace\n" \ ++ "\n" \ ++ "Other report identifiers:: %bare_reported_to\n" + + #define ABRT_ELEMENTS_KB_ARTICLE "https://access.redhat.com/articles/2134281" + +@@ -677,6 +681,10 @@ int main(int argc, char **argv) + exit(EXIT_CANCEL_BY_USER); + } + ++ /* In the case there is no pkg_vendor file use "unknown vendor" */ ++ if (!vendor) ++ problem_data_add_text_noteditable(problem_data, FILENAME_PKG_VENDOR, "unknown vendor"); ++ + const char *executable = NULL; + executable = problem_data_get_content_or_NULL(problem_data, FILENAME_EXECUTABLE); + if (!package) +@@ -689,6 +697,9 @@ int main(int argc, char **argv) + free(message); + if (!r) + exit(EXIT_CANCEL_BY_USER); ++ ++ problem_data_add_text_noteditable(problem_data, FILENAME_PACKAGE, ++ "not belong to any package"); + } + + char tmpdir_name[sizeof(LARGE_DATA_TMP_DIR"/rhtsupport-"LIBREPORT_ISO_DATE_STRING_SAMPLE"-XXXXXX")]; +-- +1.8.3.1 + diff --git a/SOURCES/0202-rhtsupport-attach-all-dump-dir-s-element-to-a-new-ca.patch b/SOURCES/0202-rhtsupport-attach-all-dump-dir-s-element-to-a-new-ca.patch new file mode 100644 index 0000000..5c69a15 --- /dev/null +++ b/SOURCES/0202-rhtsupport-attach-all-dump-dir-s-element-to-a-new-ca.patch @@ -0,0 +1,100 @@ +From 4df6adff7f2393fc228b0437a1c8be172ff7370e Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Thu, 3 Mar 2016 10:39:46 +0100 +Subject: [PATCH] rhtsupport: attach all dump dir's element to a new case + +Before this commit there were attached only binary files and an xml file which +contains all text dump dir's files at once. +With this commit reporter-rhtsupport attaching all dump dir's files separately. + +Because we don't know if someone uses the xml file, the reporter attaches the +xml files as well. + +Related to: rhbz#1261358 + +Signed-off-by: Matej Habrnal +--- + src/plugins/reporter-rhtsupport.c | 35 +++++++++++++++++++++++++++-------- + 1 file changed, 27 insertions(+), 8 deletions(-) + +diff --git a/src/plugins/reporter-rhtsupport.c b/src/plugins/reporter-rhtsupport.c +index 781b5b1..63a24a5 100644 +--- a/src/plugins/reporter-rhtsupport.c ++++ b/src/plugins/reporter-rhtsupport.c +@@ -73,7 +73,8 @@ static report_result_t *get_reported_to(const char *dump_dir_name) + } + + static +-int create_tarball(const char *tempfile, problem_data_t *problem_data) ++int create_tarball(const char *tempfile, struct dump_dir *dd, ++ problem_data_t *problem_data) + { + reportfile_t *file = NULL; + int retval = 0; /* everything is ok so far .. */ +@@ -126,15 +127,28 @@ int create_tarball(const char *tempfile, problem_data_t *problem_data) + /*recorded_filename*/ xml_name, + /*binary */ !(value->flags & CD_FLAG_BIGTXT) + ); +- if (tar_append_file(tar, (char*)content, xml_name) != 0) +- { +- free(xml_name); +- goto ret_fail; +- } + free(xml_name); + } + } + } ++ ++ /* append all files from dump dir */ ++ dd_init_next_file(dd); ++ char *short_name, *full_name; ++ while (dd_get_next_file(dd, &short_name, &full_name)) ++ { ++ char *uploaded_name = concat_path_file("content", short_name); ++ free(short_name); ++ ++ if (tar_append_file(tar, full_name, uploaded_name) != 0) ++ { ++ free(full_name); ++ goto ret_fail; ++ } ++ ++ free(full_name); ++ } ++ + const char *signature = reportfile_as_string(file); + /* + * Note: this pointer points to string which is owned by +@@ -200,6 +214,7 @@ ret_fail: + } + + ret_clean: ++ dd_close(dd); + /* now it's safe to free file */ + free_reportfile(file); + return retval; +@@ -777,7 +792,11 @@ int main(int argc, char **argv) + /* Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing */ + log(_("Compressing data")); + +- if (create_tarball(tempfile, problem_data) != 0) ++ struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); ++ if (!dd) ++ xfunc_die(); /* error msg is already logged by dd_opendir */ ++ ++ if (create_tarball(tempfile, dd, problem_data) != 0) + { + errmsg = _("Can't create temporary file in "LARGE_DATA_TMP_DIR); + goto ret; +@@ -850,7 +869,7 @@ int main(int argc, char **argv) + } + /* No error in case creation */ + /* Record "reported_to" element */ +- struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); ++ dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (dd) + { + struct report_result rr = { .label = (char *)"RHTSupport" }; +-- +1.8.3.1 + diff --git a/SOURCES/0203-lib-remove-unused-function-make_description_bz.patch b/SOURCES/0203-lib-remove-unused-function-make_description_bz.patch new file mode 100644 index 0000000..8f386dc --- /dev/null +++ b/SOURCES/0203-lib-remove-unused-function-make_description_bz.patch @@ -0,0 +1,68 @@ +From eb013d53b789cf8b99325618e248b2380c51c815 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Wed, 6 Apr 2016 15:49:23 +0200 +Subject: [PATCH] lib: remove unused function make_description_bz + +The function was replaced by using problem report api. + +Signed-off-by: Matej Habrnal +--- + src/include/internal_libreport.h | 2 -- + src/lib/make_descr.c | 28 ---------------------------- + 2 files changed, 30 deletions(-) + +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index 4f3c56a..c3b2045 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -666,8 +666,6 @@ enum { + }; + #define make_description libreport_make_description + char *make_description(problem_data_t *problem_data, char **names_to_skip, unsigned max_text_size, unsigned desc_flags); +-#define make_description_bz libreport_make_description_bz +-char* make_description_bz(problem_data_t *problem_data, unsigned max_text_size); + #define make_description_logger libreport_make_description_logger + char* make_description_logger(problem_data_t *problem_data, unsigned max_text_size); + #define make_description_mailx libreport_make_description_mailx +diff --git a/src/lib/make_descr.c b/src/lib/make_descr.c +index fd180a9..a16eb98 100644 +--- a/src/lib/make_descr.c ++++ b/src/lib/make_descr.c +@@ -356,34 +356,6 @@ static const char *const blacklisted_items[] = { + NULL + }; + +-/* Items we don't want to include in email */ +-static const char *const blacklisted_items_mailx[] = { +- CD_DUMPDIR , +- FILENAME_ANALYZER , +- FILENAME_TYPE , +- FILENAME_COREDUMP , +- FILENAME_DUPHASH , +- FILENAME_UUID , +- FILENAME_COUNT , +- FILENAME_TAINTED_SHORT, +- FILENAME_ARCHITECTURE, +- FILENAME_PACKAGE, +- FILENAME_OS_RELEASE, +- FILENAME_COMPONENT, +- FILENAME_REASON, +- NULL +-}; +- +-char* make_description_bz(problem_data_t *problem_data, unsigned max_text_size) +-{ +- return make_description( +- problem_data, +- (char**)blacklisted_items, +- max_text_size, +- MAKEDESC_SHOW_FILES | MAKEDESC_SHOW_MULTILINE +- ); +-} +- + char* make_description_logger(problem_data_t *problem_data, unsigned max_text_size) + { + return make_description( +-- +1.8.3.1 + diff --git a/SOURCES/0204-mailx-use-problem-report-api-to-define-an-emais-cont.patch b/SOURCES/0204-mailx-use-problem-report-api-to-define-an-emais-cont.patch new file mode 100644 index 0000000..6ab25f3 --- /dev/null +++ b/SOURCES/0204-mailx-use-problem-report-api-to-define-an-emais-cont.patch @@ -0,0 +1,344 @@ +From 07059f936207c33b8aabf356e22dda64fc1050cb Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Fri, 1 Apr 2016 13:23:14 +0200 +Subject: [PATCH] mailx: use problem report api to define an emais' content + +If formatting file is defined, the reporter-mailx +uses the given file to create content of emails. Section summary is used +for email's subject. If no formatting file is defined, the default formatting +is used and subject can be redefined either by mailx.conf file or by env +variable. + +Related to rhbz#1281312 + +Signed-off-by: Matej Habrnal +--- + doc/reporter-mailx.txt | 48 ++++++++++++++++++++- + src/include/internal_libreport.h | 2 - + src/lib/make_descr.c | 56 ------------------------ + src/plugins/reporter-mailx.c | 92 +++++++++++++++++++++++++++++++--------- + 4 files changed, 119 insertions(+), 79 deletions(-) + +diff --git a/doc/reporter-mailx.txt b/doc/reporter-mailx.txt +index bd0c63e..029a3d0 100644 +--- a/doc/reporter-mailx.txt ++++ b/doc/reporter-mailx.txt +@@ -7,7 +7,7 @@ reporter-mailx - Sends contents of a problem directory via email. + + SYNOPSIS + -------- +-'reporter-mailx' [-v] -d DIR [-c CONFFILE] ++'reporter-mailx' [-v] -d DIR [-c CONFFILE] [-F FMTFILE] + + DESCRIPTION + ----------- +@@ -38,6 +38,49 @@ The options are: + directory to the email. This can cause the emails to be very + large. + ++Formatting configuration files ++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++Lines starting with # are ignored. ++ ++Lines can be continued on the next line using trailing backslash. ++ ++Format: ++ ++ "%summary:: subject format" ++ "section:: element1[,element2]..." ++ The literal text line to be added to email. Can be empty. ++ (Empty lines are NOT ignored!) ++ ++ Subject format is a line of text, where %element% is replaced by ++ text element's content, and [[...%element%...]] block is used only if ++ %element% exists. [[...]] blocks can nest. ++ ++ Sections can be: ++ - %summary: email subject format string. ++ - %attach: a list of elements to attach. ++ - text, double colon (::) and the list of comma-separated elements. ++ ++ Elements can be: ++ - problem directory element names, which get formatted as ++ : ++ or ++ : ++ : ++ : ++ : ++ - problem directory element names prefixed by "%bare_", ++ which is formatted as-is, without ":" and colons ++ - %oneline, %multiline, %text wildcards, which select all corresponding ++ elements for output or attachment ++ - %binary wildcard, valid only for %attach section, instructs to attach ++ binary elements ++ - problem directory element names prefixed by "-", ++ which excludes given element from all wildcards ++ ++ Nonexistent elements are silently ignored. ++ If none of elements exists, the section will not be created. ++ ++ + Integration with ABRT events + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 'reporter-mailx' can be used as a reporter, to allow users report +@@ -66,6 +109,9 @@ OPTIONS + contains site-wide configuration. Users can change the values via + environment variables. + ++-F CONF_FORMAT_FILE ++ Formatting file for an email. ++ + ENVIRONMENT VARIABLES + --------------------- + Environment variables take precedence over values provided in +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index c3b2045..cf5730c 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -668,8 +668,6 @@ enum { + char *make_description(problem_data_t *problem_data, char **names_to_skip, unsigned max_text_size, unsigned desc_flags); + #define make_description_logger libreport_make_description_logger + char* make_description_logger(problem_data_t *problem_data, unsigned max_text_size); +-#define make_description_mailx libreport_make_description_mailx +-char* make_description_mailx(problem_data_t *problem_data, unsigned max_text_size); + + /* See man os-release(5) for details */ + #define OSINFO_ID "ID" +diff --git a/src/lib/make_descr.c b/src/lib/make_descr.c +index a16eb98..5a6d9f4 100644 +--- a/src/lib/make_descr.c ++++ b/src/lib/make_descr.c +@@ -290,52 +290,6 @@ char *make_description(problem_data_t *problem_data, char **names_to_skip, + return strbuf_free_nobuf(buf_dsc); + } + +-#ifdef UNUSED +-char* make_description_mailx(problem_data_t *problem_data) +-{ +- struct strbuf *buf_dsc = strbuf_new(); +- struct strbuf *buf_additional_files = strbuf_new(); +- struct strbuf *buf_duphash_file = strbuf_new(); +- struct strbuf *buf_common_files = strbuf_new(); +- +- GHashTableIter iter; +- char *name; +- struct problem_item *value; +- g_hash_table_iter_init(&iter, problem_data); +- while (g_hash_table_iter_next(&iter, (void**)&name, (void**)&value)) +- { +- if (value->flags & CD_FLAG_TXT) +- { +- if ((strcmp(name, FILENAME_DUPHASH) != 0) +- && (strcmp(name, FILENAME_ARCHITECTURE) != 0) +- && (strcmp(name, FILENAME_KERNEL) != 0) +- && (strcmp(name, FILENAME_PACKAGE) != 0) +- ) { +- strbuf_append_strf(buf_additional_files, "%s\n-----\n%s\n\n", name, value->content); +- } +- else if (strcmp(name, FILENAME_DUPHASH) == 0) +- strbuf_append_strf(buf_duphash_file, "%s\n-----\n%s\n\n", name, value->content); +- else +- strbuf_append_strf(buf_common_files, "%s\n-----\n%s\n\n", name, value->content); +- } +- } +- +- char *common_files = strbuf_free_nobuf(buf_common_files); +- char *duphash_file = strbuf_free_nobuf(buf_duphash_file); +- char *additional_files = strbuf_free_nobuf(buf_additional_files); +- +- strbuf_append_strf(buf_dsc, "Duplicate check\n=====\n%s\n\n", duphash_file); +- strbuf_append_strf(buf_dsc, "Common information\n=====\n%s\n\n", common_files); +- strbuf_append_strf(buf_dsc, "Additional information\n=====\n%s\n", additional_files); +- +- free(common_files); +- free(duphash_file); +- free(additional_files); +- +- return strbuf_free_nobuf(buf_dsc); +-} +-#endif +- + /* Items we don't want to include to bz / logger */ + static const char *const blacklisted_items[] = { + CD_DUMPDIR , +@@ -365,13 +319,3 @@ char* make_description_logger(problem_data_t *problem_data, unsigned max_text_si + MAKEDESC_SHOW_FILES | MAKEDESC_SHOW_MULTILINE + ); + } +- +-char* make_description_mailx(problem_data_t *problem_data, unsigned max_text_size) +-{ +- return make_description( +- problem_data, +- (char**)blacklisted_items_mailx, +- max_text_size, +- MAKEDESC_SHOW_FILES | MAKEDESC_SHOW_MULTILINE +- ); +-} +diff --git a/src/plugins/reporter-mailx.c b/src/plugins/reporter-mailx.c +index 54dc82e..a062abd 100644 +--- a/src/plugins/reporter-mailx.c ++++ b/src/plugins/reporter-mailx.c +@@ -18,6 +18,25 @@ + */ + #include "internal_libreport.h" + #include "client.h" ++#include "problem_report.h" ++ ++#define PR_DEFAULT_SUBJECT \ ++ "[abrt] %pkg_name%[[: %crash_function%()]][[: %reason%]][[: TAINTED %tainted_short%]]" ++ ++#define PR_MAILX_TEMPLATE \ ++ "%%summary:: %s\n" \ ++ "\n" \ ++ "::" \ ++ FILENAME_REASON","FILENAME_CRASH_FUNCTION"," \ ++ FILENAME_CMDLINE","FILENAME_EXECUTABLE"," \ ++ FILENAME_PACKAGE","FILENAME_COMPONENT","FILENAME_PID","FILENAME_PWD"," \ ++ FILENAME_HOSTNAME","FILENAME_COUNT", %%oneline\n" \ ++ "\n" \ ++ "::" \ ++ FILENAME_REPORTED_TO","FILENAME_BACKTRACE","FILENAME_CORE_BACKTRACE \ ++ ", %%multiline" ++ ++#define PR_ATTACH_BINARY "\n%attach:: %binary" + + static void exec_and_feed_input(const char* text, char **args) + { +@@ -79,6 +98,7 @@ static char *ask_email_address(const char *type, const char *def_address) + static void create_and_send_email( + const char *dump_dir_name, + map_string_t *settings, ++ const char *fmt_file, + bool notify_only) + { + problem_data_t *problem_data = create_problem_data_for_reporting(dump_dir_name); +@@ -86,8 +106,6 @@ static void create_and_send_email( + xfunc_die(); /* create_problem_data_for_reporting already emitted error msg */ + + char* env; +- env = getenv("Mailx_Subject"); +- const char *subject = (env ? env : get_map_string_item_or_NULL(settings, "Subject") ? : "[abrt] full crash report"); + env = getenv("Mailx_EmailFrom"); + char *email_from = (env ? xstrdup(env) : xstrdup(get_map_string_item_or_NULL(settings, "EmailFrom")) ? : ask_email_address("sender", "user@localhost")); + env = getenv("Mailx_EmailTo"); +@@ -99,22 +117,52 @@ static void create_and_send_email( + unsigned arg_size = 0; + args = append_str_to_vector(args, &arg_size, "/bin/mailx"); + +- char *dsc = make_description_mailx(problem_data, CD_TEXT_ATT_SIZE_LOGGER); ++ problem_formatter_t *pf = problem_formatter_new(); ++ /* formatting file is not set */ ++ if (fmt_file == NULL) ++ { ++ env = getenv("Mailx_Subject"); ++ const char *subject = (env ? env : get_map_string_item_or_NULL(settings, "Subject") ? : PR_DEFAULT_SUBJECT); ++ ++ char *format_string = xasprintf(PR_MAILX_TEMPLATE, subject); ++ ++ /* attaching binary file to the email */ ++ if (send_binary_data) ++ format_string = append_to_malloced_string(format_string, PR_ATTACH_BINARY); ++ ++ if (problem_formatter_load_string(pf, format_string)) ++ error_msg_and_die("BUG: Invalid default problem report format string"); + +- if (send_binary_data) ++ free(format_string); ++ } ++ else + { +- GHashTableIter iter; +- char *name; +- struct problem_item *value; +- g_hash_table_iter_init(&iter, problem_data); +- while (g_hash_table_iter_next(&iter, (void**)&name, (void**)&value)) +- { +- if (value->flags & CD_FLAG_BIN) +- { +- args = append_str_to_vector(args, &arg_size, "-a"); +- args = append_str_to_vector(args, &arg_size, value->content); +- } +- } ++ if (problem_formatter_load_file(pf, fmt_file)) ++ error_msg_and_die("Invalid format file: %s", fmt_file); ++ } ++ ++ problem_report_t *pr = NULL; ++ if (problem_formatter_generate_report(pf, problem_data, &pr)) ++ error_msg_and_die("Failed to format bug report from problem data"); ++ ++ const char *subject = problem_report_get_summary(pr); ++ const char *dsc = problem_report_get_description(pr); ++ ++ log_debug("subject: %s\n" ++ "\n" ++ "%s" ++ "\n" ++ , subject ++ , dsc); ++ ++ /* attaching files to the email */ ++ for (GList *a = problem_report_get_attachments(pr); a != NULL; a = g_list_next(a)) ++ { ++ log_debug("Attaching '%s' to the email", (const char *)a->data); ++ args = append_str_to_vector(args, &arg_size, "-a"); ++ char *full_name = concat_path_file(realpath(dump_dir_name, NULL), a->data); ++ args = append_str_to_vector(args, &arg_size, full_name); ++ free(full_name); + } + + args = append_str_to_vector(args, &arg_size, "-s"); +@@ -135,7 +183,8 @@ static void create_and_send_email( + log(_("Sending an email...")); + exec_and_feed_input(dsc, args); + +- free(dsc); ++ problem_report_free(pr); ++ problem_formatter_free(pf); + + while (*args) + free(*args++); +@@ -173,10 +222,11 @@ int main(int argc, char **argv) + + const char *dump_dir_name = "."; + const char *conf_file = CONF_DIR"/plugins/mailx.conf"; ++ const char *fmt_file = NULL; + + /* Can't keep these strings/structs static: _() doesn't support that */ + const char *program_usage_string = _( +- "& [-v] -d DIR [-c CONFFILE]" ++ "& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]" + "\n" + "\n""Sends contents of a problem directory DIR via email" + "\n" +@@ -191,13 +241,15 @@ int main(int argc, char **argv) + OPT_v = 1 << 0, + OPT_d = 1 << 1, + OPT_c = 1 << 2, +- OPT_n = 1 << 3, ++ OPT_F = 1 << 3, ++ OPT_n = 1 << 4, + }; + /* Keep enum above and order of options below in sync! */ + struct options program_options[] = { + OPT__VERBOSE(&g_verbose), + OPT_STRING('d', NULL, &dump_dir_name, "DIR" , _("Problem directory")), + OPT_STRING('c', NULL, &conf_file , "CONFFILE", _("Config file")), ++ OPT_STRING('F', NULL, &fmt_file , "FILE" , _("Formatting file for an email")), + OPT_BOOL('n', "notify-only", NULL , _("Notify only (Do not mark the report as sent)")), + OPT_END() + }; +@@ -208,7 +260,7 @@ int main(int argc, char **argv) + map_string_t *settings = new_map_string(); + load_conf_file(conf_file, settings, /*skip key w/o values:*/ false); + +- create_and_send_email(dump_dir_name, settings, /*notify_only*/(opts & OPT_n)); ++ create_and_send_email(dump_dir_name, settings, fmt_file, /*notify_only*/(opts & OPT_n)); + + free_map_string(settings); + return 0; +-- +1.8.3.1 + diff --git a/SOURCES/0205-mailx-mail-formatting-add-comment-right-after-onelin.patch b/SOURCES/0205-mailx-mail-formatting-add-comment-right-after-onelin.patch new file mode 100644 index 0000000..50022e0 --- /dev/null +++ b/SOURCES/0205-mailx-mail-formatting-add-comment-right-after-onelin.patch @@ -0,0 +1,30 @@ +From 7f945ffc1eb5b3c69a4d3632455b75e7fce88534 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Thu, 7 Apr 2016 15:53:34 +0200 +Subject: [PATCH] mailx: mail formatting: add comment right after %oneline + +Related to rhbz#1281312 + +Signed-off-by: Matej Habrnal +--- + src/plugins/reporter-mailx.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/plugins/reporter-mailx.c b/src/plugins/reporter-mailx.c +index a062abd..c531541 100644 +--- a/src/plugins/reporter-mailx.c ++++ b/src/plugins/reporter-mailx.c +@@ -33,8 +33,8 @@ + FILENAME_HOSTNAME","FILENAME_COUNT", %%oneline\n" \ + "\n" \ + "::" \ +- FILENAME_REPORTED_TO","FILENAME_BACKTRACE","FILENAME_CORE_BACKTRACE \ +- ", %%multiline" ++ FILENAME_COMMENT","FILENAME_REPORTED_TO","FILENAME_BACKTRACE"," \ ++ FILENAME_CORE_BACKTRACE", %%multiline" + + #define PR_ATTACH_BINARY "\n%attach:: %binary" + +-- +1.8.3.1 + diff --git a/SOURCES/0206-mailx-introduce-debug-parameter-D.patch b/SOURCES/0206-mailx-introduce-debug-parameter-D.patch new file mode 100644 index 0000000..8f594ba --- /dev/null +++ b/SOURCES/0206-mailx-introduce-debug-parameter-D.patch @@ -0,0 +1,149 @@ +From 5ae2faba4071002bf012d14a2d6e132b5d472e03 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Thu, 7 Apr 2016 15:55:04 +0200 +Subject: [PATCH] mailx: introduce debug parameter -D + +Related to rhbz#1281312 + +Signed-off-by: Matej Habrnal + +Conflicts: + src/plugins/reporter-mailx.c +--- + src/plugins/reporter-mailx.c | 60 +++++++++++++++++++++++++++++++++----------- + 1 file changed, 46 insertions(+), 14 deletions(-) + +diff --git a/src/plugins/reporter-mailx.c b/src/plugins/reporter-mailx.c +index c531541..feeb900 100644 +--- a/src/plugins/reporter-mailx.c ++++ b/src/plugins/reporter-mailx.c +@@ -38,6 +38,11 @@ + + #define PR_ATTACH_BINARY "\n%attach:: %binary" + ++enum { ++ RM_FLAG_NOTIFY = (1 << 0), ++ RM_FLAG_DEBUG = (1 << 1) ++}; ++ + static void exec_and_feed_input(const char* text, char **args) + { + int pipein[2]; +@@ -99,7 +104,7 @@ static void create_and_send_email( + const char *dump_dir_name, + map_string_t *settings, + const char *fmt_file, +- bool notify_only) ++ int flag) + { + problem_data_t *problem_data = create_problem_data_for_reporting(dump_dir_name); + if (!problem_data) +@@ -113,10 +118,6 @@ static void create_and_send_email( + env = getenv("Mailx_SendBinaryData"); + bool send_binary_data = string_to_bool(env ? env : get_map_string_item_or_empty(settings, "SendBinaryData")); + +- char **args = NULL; +- unsigned arg_size = 0; +- args = append_str_to_vector(args, &arg_size, "/bin/mailx"); +- + problem_formatter_t *pf = problem_formatter_new(); + /* formatting file is not set */ + if (fmt_file == NULL) +@@ -148,17 +149,33 @@ static void create_and_send_email( + const char *subject = problem_report_get_summary(pr); + const char *dsc = problem_report_get_description(pr); + +- log_debug("subject: %s\n" +- "\n" +- "%s" +- "\n" +- , subject +- , dsc); ++ if (flag & RM_FLAG_DEBUG) ++ { ++ printf("subject: %s\n" ++ "\n" ++ "%s" ++ "\n" ++ , subject ++ , dsc); ++ ++ puts("attachments:"); ++ for (GList *a = problem_report_get_attachments(pr); a != NULL; a = g_list_next(a)) ++ printf(" %s\n", (const char *)a->data); ++ ++ problem_report_free(pr); ++ problem_formatter_free(pf); ++ free(email_from); ++ free(email_to); ++ exit(0); ++ } ++ ++ char **args = NULL; ++ unsigned arg_size = 0; ++ args = append_str_to_vector(args, &arg_size, "/bin/mailx"); + + /* attaching files to the email */ + for (GList *a = problem_report_get_attachments(pr); a != NULL; a = g_list_next(a)) + { +- log_debug("Attaching '%s' to the email", (const char *)a->data); + args = append_str_to_vector(args, &arg_size, "-a"); + char *full_name = concat_path_file(realpath(dump_dir_name, NULL), a->data); + args = append_str_to_vector(args, &arg_size, full_name); +@@ -181,6 +198,12 @@ static void create_and_send_email( + putenv((char*)"sendwait=1"); + + log(_("Sending an email...")); ++ ++ if (flag & RM_FLAG_NOTIFY) ++ log(_("Sending a notification email to: %s"), email_to); ++ else ++ log(_("Sending an email...")); ++ + exec_and_feed_input(dsc, args); + + problem_report_free(pr); +@@ -193,7 +216,7 @@ static void create_and_send_email( + + problem_data_free(problem_data); + +- if (!notify_only) ++ if (!(flag & RM_FLAG_NOTIFY)) + { + struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (dd) +@@ -243,6 +266,7 @@ int main(int argc, char **argv) + OPT_c = 1 << 2, + OPT_F = 1 << 3, + OPT_n = 1 << 4, ++ OPT_D = 1 << 5, + }; + /* Keep enum above and order of options below in sync! */ + struct options program_options[] = { +@@ -251,6 +275,7 @@ int main(int argc, char **argv) + OPT_STRING('c', NULL, &conf_file , "CONFFILE", _("Config file")), + OPT_STRING('F', NULL, &fmt_file , "FILE" , _("Formatting file for an email")), + OPT_BOOL('n', "notify-only", NULL , _("Notify only (Do not mark the report as sent)")), ++ OPT_BOOL( 'D', NULL, NULL , _("Debug")), + OPT_END() + }; + unsigned opts = parse_opts(argc, argv, program_options, program_usage_string); +@@ -260,7 +285,14 @@ int main(int argc, char **argv) + map_string_t *settings = new_map_string(); + load_conf_file(conf_file, settings, /*skip key w/o values:*/ false); + +- create_and_send_email(dump_dir_name, settings, fmt_file, /*notify_only*/(opts & OPT_n)); ++ int flag = 0; ++ if (opts & OPT_n) ++ flag |= RM_FLAG_NOTIFY; ++ ++ if (opts & OPT_D) ++ flag |= RM_FLAG_DEBUG; ++ ++ create_and_send_email(dump_dir_name, settings, fmt_file, flag); + + free_map_string(settings); + return 0; +-- +1.8.3.1 + diff --git a/SOURCES/0207-mailx-stop-creating-dead.letter-on-mailx-failures.patch b/SOURCES/0207-mailx-stop-creating-dead.letter-on-mailx-failures.patch new file mode 100644 index 0000000..7ed8658 --- /dev/null +++ b/SOURCES/0207-mailx-stop-creating-dead.letter-on-mailx-failures.patch @@ -0,0 +1,39 @@ +From 438579dd448f220aea0f9d99cabf01a253b999ba Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Mon, 11 Apr 2016 11:05:57 +0200 +Subject: [PATCH] mailx: stop creating dead.letter on mailx failures + +SELinux does not like mailx creating the file and I do not see any +reason to create the file in a problem directory because the file +contains a copy of the email that could not be send. + +Failures of EVENT=notify are discoverable in system logs and if you run +the reporter manually, you will see that mailx failed. + +Resolves #1309317 + +Signed-off-by: Jakub Filak +--- + src/plugins/reporter-mailx.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/plugins/reporter-mailx.c b/src/plugins/reporter-mailx.c +index feeb900..19013a5 100644 +--- a/src/plugins/reporter-mailx.c ++++ b/src/plugins/reporter-mailx.c +@@ -197,6 +197,12 @@ static void create_and_send_email( + */ + putenv((char*)"sendwait=1"); + ++ /* Prevent mailx from creating dead.letter if sending fails. The file is ++ * useless in our case and if the reporter is called from abrtd, SELinux ++ * complains a lot about mailx touching ABRT data. ++ */ ++ putenv((char*)"DEAD=/dev/null"); ++ + log(_("Sending an email...")); + + if (flag & RM_FLAG_NOTIFY) +-- +1.8.3.1 + diff --git a/SOURCES/0208-lib-allow-report-SELinux-denial-from-sealert-under-c.patch b/SOURCES/0208-lib-allow-report-SELinux-denial-from-sealert-under-c.patch new file mode 100644 index 0000000..c9f9630 --- /dev/null +++ b/SOURCES/0208-lib-allow-report-SELinux-denial-from-sealert-under-c.patch @@ -0,0 +1,83 @@ +From 215926614e59d509a2ab01e74706daaeffee3e49 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Tue, 5 Apr 2016 14:17:56 +0200 +Subject: [PATCH] lib: allow report SELinux denial from sealert under common + user + +The main purpose of the removed lines in this commit were preventing from +creating non-root dump dir's sub-directrories in the case an uid element +doesn't exist in time of creating the dump dir. + +The removed lines are moved to the function problem_data_save() in abrt +src/lib/hooklib.c. + +Related to rhbz#1264921 + +Signed-off-by: Matej Habrnal +--- + src/lib/create_dump_dir.c | 3 --- + tests/report_python.at | 37 +++++++++++++++++++++++++++++++++++++ + 2 files changed, 37 insertions(+), 3 deletions(-) + +diff --git a/src/lib/create_dump_dir.c b/src/lib/create_dump_dir.c +index 45c248d..d683b8e 100644 +--- a/src/lib/create_dump_dir.c ++++ b/src/lib/create_dump_dir.c +@@ -48,9 +48,6 @@ struct dump_dir *create_dump_dir_from_problem_data_ext(problem_data_t *problem_d + return NULL; + } + +- if (uid == (uid_t)-1L) +- uid = 0; +- + struct timeval tv; + if (gettimeofday(&tv, NULL) < 0) + { +diff --git a/tests/report_python.at b/tests/report_python.at +index a05498c..7886e9d 100644 +--- a/tests/report_python.at ++++ b/tests/report_python.at +@@ -100,3 +100,40 @@ if report.getVersion_fromOSRELEASE() != report.getVersion(): + + sys.exit(exit_code) + ]]) ++ ++## ---------------------------------- ## ++## create_dump_dir_uid_does_not_exist ## ++## ---------------------------------- ## ++ ++AT_PYTESTFUN([create_dump_dir_uid_does_not_exist], ++[[import sys ++ ++sys.path.insert(0, "../../../src/report-python") ++sys.path.insert(0, "../../../src/report-python/.libs") ++ ++report = __import__("report-python", globals(), locals(), [], -1) ++sys.modules["report"] = report ++ ++import os ++ ++cd = report.problem_data() ++cd.add_basics() ++dd = cd.create_dump_dir("/tmp/") ++print "dumpdir name:", dd.name ++ ++stat_info = os.stat(dd.name) ++uid = stat_info.st_uid ++gid = stat_info.st_gid ++print "user uid", os.getuid() ++print "user gid", os.getgid() ++print "dumpdir uid: ", uid," gid: ", gid ++ ++exit_code = 0 ++if os.getuid() != uid: ++ exit_code += 1 ++ ++if os.getgid() != gid: ++ exit_code += 1 ++ ++sys.exit(exit_code) ++]]) +-- +1.8.3.1 + diff --git a/SOURCES/0209-lib-problem-report-API-check-fseek-return-code.patch b/SOURCES/0209-lib-problem-report-API-check-fseek-return-code.patch new file mode 100644 index 0000000..7d1df23 --- /dev/null +++ b/SOURCES/0209-lib-problem-report-API-check-fseek-return-code.patch @@ -0,0 +1,29 @@ +From a7d83c252e978dfdd42de5bdc01e292167501b51 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Fri, 22 Jan 2016 13:17:13 +0100 +Subject: [PATCH] lib: problem report API check fseek return code + +Related to #1261358 + +Signed-off-by: Matej Habrnal +--- + src/lib/problem_report.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/lib/problem_report.c b/src/lib/problem_report.c +index 6598c15..2bf5530 100644 +--- a/src/lib/problem_report.c ++++ b/src/lib/problem_report.c +@@ -344,7 +344,8 @@ format_percented_string(const char *str, problem_data_t *pd, FILE *result) + opt_depth--; + if (!okay[opt_depth]) + { +- fseek(result, old_pos[opt_depth], SEEK_SET); ++ if (fseek(result, old_pos[opt_depth], SEEK_SET) < 0) ++ perror_msg_and_die("fseek"); + len = old_pos[opt_depth]; + } + str += 2; +-- +1.8.3.1 + diff --git a/SOURCES/0210-RHTSupport-include-count-in-Support-cases.patch b/SOURCES/0210-RHTSupport-include-count-in-Support-cases.patch new file mode 100644 index 0000000..7716758 --- /dev/null +++ b/SOURCES/0210-RHTSupport-include-count-in-Support-cases.patch @@ -0,0 +1,30 @@ +From e0feef4849e45208974c72fce2c60ac4adc4eab6 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Fri, 15 Apr 2016 10:59:15 +0200 +Subject: [PATCH] RHTSupport: include count in Support cases + +We want to provide GSS with a count of crash occurrences. + +Related to #1258482 + +Signed-off-by: Matej Habrnal +--- + src/plugins/report_RHTSupport.xml.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/plugins/report_RHTSupport.xml.in b/src/plugins/report_RHTSupport.xml.in +index 60e18d9..357a94d 100644 +--- a/src/plugins/report_RHTSupport.xml.in ++++ b/src/plugins/report_RHTSupport.xml.in +@@ -5,7 +5,7 @@ + + package + yes +- count,event_log,vmcore ++ event_log,vmcore + + no + +-- +1.8.3.1 + diff --git a/SOURCES/0211-configure-set-version-to-2.1.11.1.patch b/SOURCES/0211-configure-set-version-to-2.1.11.1.patch new file mode 100644 index 0000000..40a6b93 --- /dev/null +++ b/SOURCES/0211-configure-set-version-to-2.1.11.1.patch @@ -0,0 +1,26 @@ +From 284e4e055a2dabd7b27771cd448ba4603abd634a Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Thu, 25 Feb 2016 09:23:32 +0100 +Subject: [PATCH] configure: set version to 2.1.11.1 + +Customer cases created with libreport which contains feature "Add a pair of +steps to libreport reporting workflow to enhance the quality of opened customer +cases" (rhbz#1258482) are marked with libreport version 2.1.11.1. + +Signed-off-by: Matej Habrnal +--- + libreport-version | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/libreport-version b/libreport-version +index 09843e3..54fd9a4 100644 +--- a/libreport-version ++++ b/libreport-version +@@ -1 +1 @@ +-2.1.11 +\ No newline at end of file ++2.1.11.1 +\ No newline at end of file +-- +1.7.1 + diff --git a/SOURCES/0212-Translation-updates.patch b/SOURCES/0212-Translation-updates.patch new file mode 100644 index 0000000..6fdbbed --- /dev/null +++ b/SOURCES/0212-Translation-updates.patch @@ -0,0 +1,22836 @@ +From 17148ab801d8a0a05055dede2fc0866cac0e5a74 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Thu, 1 Sep 2016 14:41:15 +0200 +Subject: [PATCH] Translation updates + +Resolves #1304240 + +Signed-off-by: Matej Habrnal +--- + po/de.po | 1028 ++++++++++++++++++++++++++++++++++++---------------------- + po/es.po | 1026 ++++++++++++++++++++++++++++++++++++---------------------- + po/fr.po | 1039 +++++++++++++++++++++++++++++++++++++---------------------- + po/it.po | 1029 ++++++++++++++++++++++++++++++++++++---------------------- + po/ja.po | 1017 ++++++++++++++++++++++++++++++++++----------------------- + po/ko.po | 947 ++++++++++++++++++++++++++++++++--------------------- + po/pt_BR.po | 1018 +++++++++++++++++++++++++++++++++++---------------------- + po/ru.po | 1021 +++++++++++++++++++++++++++++++++++---------------------- + po/zh_CN.po | 986 ++++++++++++++++++++++++++++++++++---------------------- + po/zh_TW.po | 978 +++++++++++++++++++++++++++++++++---------------------- + 10 files changed, 6249 insertions(+), 3840 deletions(-) + +diff --git a/po/de.po b/po/de.po +index 0714fbf..add66bd 100644 +--- a/po/de.po ++++ b/po/de.po +@@ -1,18 +1,20 @@ + # Hedda Peters , 2015. #zanata + # Roman Spirgi , 2015. #zanata ++# Hedda Peters , 2016. #zanata ++# Lisa Stemmler , 2016. #zanata + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2015-07-14 15:18+0200\n" ++"POT-Creation-Date: 2016-06-29 15:25+0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2015-07-16 08:23-0400\n" ++"PO-Revision-Date: 2016-08-24 01:10-0400\n" + "Last-Translator: Hedda Peters \n" + "Language-Team: German\n" + "Language: de\n" +-"X-Generator: Zanata 3.6.2\n" ++"X-Generator: Zanata 3.9.5\n" + "Plural-Forms: nplurals=2; plural=(n != 1)\n" + + # translation auto-copied from project libreport, version master, document libreport +@@ -215,37 +217,31 @@ msgstr "Workflow wählen:" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:87 +-#, python-brace-format + msgid "Extracting cpio from {0}" + msgstr "Cpio extrahieren von {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:92 +-#, python-brace-format + msgid "Can't write to '{0}': {1}" + msgstr "Nach »{0}« konnte nicht geschrieben werden: {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:107 +-#, python-brace-format + msgid "Can't extract package '{0}'" + msgstr "Paket »{0}« konnte nicht extrahiert werden" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:115 +-#, python-brace-format + msgid "Caching files from {0} made from {1}" + msgstr "Dateien cachen von {0} erstellt von {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:134 +-#, python-brace-format + msgid "Can't extract files from '{0}'" + msgstr "Dateien von »{0}« konnten nicht extrahiert werden" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:147 +-#, python-brace-format + msgid "Can't remove '{0}': {1}" + msgstr "»{0}« konnte nicht entfernt werden: {1}" + +@@ -254,7 +250,6 @@ msgstr "»{0}« konnte nicht entfernt werden: {1}" + #. % (self.downloaded_pkgs + 1, self.total_pkgs, name, pct) + #. ) + #: ../src/client-python/debuginfo.py:194 ../src/client-python/debuginfo.py:205 +-#, python-brace-format + msgid "Downloading ({0} of {1}) {2}: {3:3}%" + msgstr "Herunterladen ({0} von {1}) {2}: {3:3}%" + +@@ -305,7 +300,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:356 +-#, python-brace-format + msgid "Can't setup {0}: {1}, disabling" + msgstr "{0} konnte nicht eingerichtet werden: {1}, wird deaktiviert" + +@@ -330,19 +324,16 @@ msgstr "Fehler beim Abrufen der Dateiliste: »{0!s}«" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:416 +-#, python-brace-format + msgid "Can't find packages for {0} debuginfo files" + msgstr "Pakete für {0} Debuginfo-Dateien konnten nicht gefunden werden" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:418 +-#, python-brace-format + msgid "Packages to download: {0}" + msgstr "Herunterzuladene Pakete: {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:419 +-#, python-brace-format + msgid "Downloading {0:.2f}Mb, installed size: {1:.2f}Mb. Continue?" + msgstr "" + "Herunterladen von {0:.2f} MB, installierte Größe: {1:.2f} MB. Fortfahren?" +@@ -355,7 +346,6 @@ msgstr "Download durch Benutzer abgebrochen" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:434 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in tmp dir '{0}' ({1:.2f}Mb left). Continue?" + msgstr "" +@@ -364,7 +354,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:443 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in cache dir '{0}' ({1:.2f}Mb left). " + "Continue?" +@@ -374,13 +363,11 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:469 +-#, python-brace-format + msgid "Cannot copy file '{0}': {1}" + msgstr "Datei '{0}' kann nicht kopiert werden: {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:487 +-#, python-brace-format + msgid "Downloading package {0} failed" + msgstr "Herunterladen von Paket {0} ist fehlgeschlagen" + +@@ -395,7 +382,6 @@ msgstr "Entpacken fehlgeschlagen, Download wird abgebrochen ..." + #. but it was appearing even if no packages were in fact extracted + #. (say, when there was one package, and it has download error). + #: ../src/client-python/debuginfo.py:504 +-#, python-brace-format + msgid "Removing {0}" + msgstr "Entfernen von {0}" + +@@ -458,7 +444,7 @@ msgid "C_onfigure" + msgstr "K_onfigurieren" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3472 ++#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3718 + msgid "_Close" + msgstr "_Schließen" + +@@ -492,7 +478,7 @@ msgstr "" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gtk-helpers/event_config_dialog.c:321 + #: ../src/gtk-helpers/workflow_config_dialog.c:86 +-#: ../src/gui-wizard-gtk/wizard.c:822 ../src/gui-wizard-gtk/wizard.c:3101 ++#: ../src/gui-wizard-gtk/wizard.c:844 ../src/gui-wizard-gtk/wizard.c:3325 + msgid "_Cancel" + msgstr "_Abbrechen" + +@@ -580,7 +566,7 @@ msgstr "" + msgid "Alternate GUI file" + msgstr "Alternative GUI-Datei" + +-#: ../src/gui-wizard-gtk/wizard.c:354 ++#: ../src/gui-wizard-gtk/wizard.c:378 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide the " +@@ -595,7 +581,7 @@ msgstr "" + "Mehr Informationen über die Konfiguration finden Sie unter: https://access." + "redhat.com/site/articles/718083" + +-#: ../src/gui-wizard-gtk/wizard.c:357 ++#: ../src/gui-wizard-gtk/wizard.c:381 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide " +@@ -610,13 +596,13 @@ msgstr "" + "Mehr " + "Informationen über die Konfiguration" + +-#: ../src/gui-wizard-gtk/wizard.c:373 ++#: ../src/gui-wizard-gtk/wizard.c:397 + #, c-format + msgid "Con_figure %s" + msgstr "%s kon_figurieren" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:400 ++#: ../src/gui-wizard-gtk/wizard.c:424 + #, c-format + msgid "" + "Need writable directory, but '%s' is not writable. Move it to '%s' and " +@@ -626,17 +612,17 @@ msgstr "" + "Nach »%s« verschieben und auf der verschobenen Kopie fortfahren?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:813 ++#: ../src/gui-wizard-gtk/wizard.c:835 + msgid "View/edit a text file" + msgstr "Textdatei ansehen/bearbeiten" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:821 ++#: ../src/gui-wizard-gtk/wizard.c:843 + msgid "_Save" + msgstr "_Sichern" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1040 ++#: ../src/gui-wizard-gtk/wizard.c:1067 + msgid "" + "No reporting targets are defined for this problem. Check configuration in /" + "etc/libreport/*" +@@ -645,46 +631,70 @@ msgstr "" + "Sie die Konfiguration in /etc/libreport/*" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1077 ++#: ../src/gui-wizard-gtk/wizard.c:1104 + #, c-format + msgid "(requires: %s)" + msgstr "(benötigt: %s)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1091 ++#: ../src/gui-wizard-gtk/wizard.c:1118 + #, c-format + msgid "(not needed, data already exist: %s)" + msgstr "(nicht nötig, »%s« existiert bereits)" + ++#: ../src/gui-wizard-gtk/wizard.c:1217 ++msgid "" ++"Since crashes without a known reproducer can be difficult to diagnose, " ++"please provide a comprehensive description of the problem you have " ++"encountered." ++msgstr "" ++"Da Abstürze, die nicht reproduziert werden können, schwierig zu " ++"diagnostizieren sind, geben Sie bitte eine detaillierte Beschreibung des " ++"Problems an." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1224 ++msgid "" ++"Please provide a short description of the problem and please include the " ++"steps you have used to reproduce the problem." ++msgstr "" ++"Bitte geben Sie eine kurze Beschreibung des Problems an und führen Sie dabei " ++"die Schritte auf, mit denen Sie das Problem reproduziert haben." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1231 ++msgid "Please provide the steps you have used to reproduce the problem." ++msgstr "" ++"Bitte führen Sie die Schritte auf, mit denen Sie das Problem reproduziert " ++"haben." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1277 ++#: ../src/gui-wizard-gtk/wizard.c:1349 + msgid "(click here to view/edit)" + msgstr "(zum Anzeigen/Bearbeiten hier klicken)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1288 ++#: ../src/gui-wizard-gtk/wizard.c:1360 + #, c-format + msgid "(binary file, %llu bytes)" + msgstr "(Binärdatei, %llu Bytes)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1395 ../src/report-newt/report-newt.c:334 ++#: ../src/gui-wizard-gtk/wizard.c:1467 ../src/report-newt/report-newt.c:334 + msgid "(no description)" + msgstr "(keine Beschreibung)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1403 ++#: ../src/gui-wizard-gtk/wizard.c:1475 + #, c-format + msgid "%llu bytes, %u files" + msgstr "%llu Bytes, %u Dateien" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1647 ++#: ../src/gui-wizard-gtk/wizard.c:1752 + msgid "Processing was canceled" + msgstr "Vorgang wurde abgebrochen" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/gui-wizard-gtk/wizard.c:1851 ++#: ../src/gui-wizard-gtk/wizard.c:1956 + msgid "" + "Processing of the problem failed. This can have many reasons but there are " + "three most common:\n" +@@ -699,7 +709,7 @@ msgstr "" + "\t▫ Ungültige Konfiguration" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/gui-wizard-gtk/wizard.c:1860 ++#: ../src/gui-wizard-gtk/wizard.c:1965 + msgid "" + "If you want to update the configuration and try to report again, please open " + "Preferences item\n" +@@ -712,57 +722,71 @@ msgstr "" + "der Konfigurationsänderungen auf die Wiederholen-Schaltfläche." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1978 ++#: ../src/gui-wizard-gtk/wizard.c:2089 + msgid "Processing was interrupted because the problem is not reportable." + msgstr "" + "Die Verarbeitung wurde unterbrochen, weil der Fehler nicht berichtet werden " + "kann." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1988 ../src/gui-wizard-gtk/wizard.c:2057 ++#: ../src/gui-wizard-gtk/wizard.c:2099 ../src/gui-wizard-gtk/wizard.c:2168 + msgid "Processing failed." + msgstr "Verarbeitung fehlgeschlagen." + + # translation auto-copied from project libreport, version master, document libreport + #. No next event, go to progress page and finish +-#: ../src/gui-wizard-gtk/wizard.c:1995 ../src/gui-wizard-gtk/wizard.c:2818 ++#: ../src/gui-wizard-gtk/wizard.c:2106 ../src/gui-wizard-gtk/wizard.c:3040 + msgid "Processing finished." + msgstr "Verarbeitung abgeschlossen." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1996 ++#: ../src/gui-wizard-gtk/wizard.c:2107 + msgid "Processing finished, please proceed to the next step." + msgstr "" + "Verarbeitung beendet, bitte fahren Sie mit dem nächsten Schritt weiter." + + # translation auto-copied from project libreport, version master, document libreport + #. TODO: better msg? +-#: ../src/gui-wizard-gtk/wizard.c:2054 ++#: ../src/gui-wizard-gtk/wizard.c:2165 + #, c-format + msgid "No processing for event '%s' is defined" + msgstr "Keine Verarbeitung für Ereignis »%s« definiert" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2068 ++#: ../src/gui-wizard-gtk/wizard.c:2179 + msgid "Processing interrupted: can't continue without writable directory." + msgstr "" + "Verarbeitung unterbrochen: Kein Schreibberechtigung für Verzeichnis " + "vorhanden." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2105 ++#: ../src/gui-wizard-gtk/wizard.c:2216 + msgid "Processing..." + msgstr "Verarbeitung läuft..." + ++# translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi ++#: ../src/gui-wizard-gtk/wizard.c:2297 ++msgid "" ++"Possible sensitive data detected, feel free to edit the report and remove " ++"them." ++msgstr "" ++"Möglicherweise sind sensitive Daten im Fehlerbericht enthalten. Der " ++"Fehlerbericht kann entsprechend angepasst werden." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2198 ++#: ../src/gui-wizard-gtk/wizard.c:2337 + msgid "Cannot check backtrace rating because of invalid event name" + msgstr "" + "Backtrace-Bewertung konnte wegen eines ungültigen Ablauf-Namens nicht " + "überprüft werden" + ++#: ../src/gui-wizard-gtk/wizard.c:2869 ++#, c-format ++msgid "Failed to save file '%s'" ++msgstr "Fehler beim Speichern von Datei »%s«" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2838 ++#: ../src/gui-wizard-gtk/wizard.c:3060 + #, c-format + msgid "" + "Event '%s' requires permission to send possibly sensitive data.\n" +@@ -773,7 +797,7 @@ msgstr "" + "Möchten Sie fortfahren?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2886 ++#: ../src/gui-wizard-gtk/wizard.c:3108 + #, c-format + msgid "This problem should not be reported (it is likely a known problem). %s" + msgstr "" +@@ -781,107 +805,128 @@ msgstr "" + "bekanntes Problem). %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3102 ++#: ../src/gui-wizard-gtk/wizard.c:3326 + msgid "_Open" + msgstr "_Öffnen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3124 ++#: ../src/gui-wizard-gtk/wizard.c:3348 + #, c-format + msgid "'%s' is not an ordinary file" + msgstr "»%s« ist keine gewöhnliche Datei" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3138 ++#: ../src/gui-wizard-gtk/wizard.c:3362 + msgid "You are trying to copy a file onto itself" + msgstr "Sie versuchen, eine Datei auf sich selbst zu kopieren" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3145 ++#: ../src/gui-wizard-gtk/wizard.c:3369 + #, c-format + msgid "Can't copy '%s': %s" + msgstr "»%s« kann nicht kopiert werden: %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3160 ++#: ../src/gui-wizard-gtk/wizard.c:3384 + #, c-format + msgid "Item '%s' already exists and is not modifiable" + msgstr "Element »%s« existiert bereits und ist nicht veränderbar" + ++#: ../src/gui-wizard-gtk/wizard.c:3542 ++msgid "I have experienced this problem for the first time" ++msgstr "Ich bin zum ersten Mal auf dieses Problem gestoßen" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3545 ++msgid "I can reproduce this problem" ++msgstr "Ich kann das Problem reproduzieren" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3548 ++msgid "This problem occurs repeatedly" ++msgstr "Dieses Problem tritt wiederholt auf" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3314 ++#: ../src/gui-wizard-gtk/wizard.c:3560 + msgid "Include" + msgstr "Einbeziehen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3325 ++#: ../src/gui-wizard-gtk/wizard.c:3571 + msgid "Name" + msgstr "Name" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3335 ++#: ../src/gui-wizard-gtk/wizard.c:3581 + msgid "Value" + msgstr "Wert" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3369 ++#: ../src/gui-wizard-gtk/wizard.c:3615 + msgid "Problem description" + msgstr "Problembeschreibung" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3370 ++#: ../src/gui-wizard-gtk/wizard.c:3616 + msgid "Select how to report this problem" + msgstr "Wählen Sie, wie dieser Fehler gemeldet werden soll" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3371 ++#: ../src/gui-wizard-gtk/wizard.c:3617 + msgid "Provide additional information" + msgstr "Weitere Informationen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3372 ++#: ../src/gui-wizard-gtk/wizard.c:3618 + msgid "Review the data" + msgstr "Daten überprüfen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3373 ++#: ../src/gui-wizard-gtk/wizard.c:3619 + msgid "Confirm data to report" + msgstr "Zu berichtende Daten bestätigen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3374 ++#: ../src/gui-wizard-gtk/wizard.c:3620 + msgid "Processing" + msgstr "Verarbeitung läuft" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3375 ++#: ../src/gui-wizard-gtk/wizard.c:3621 + msgid "Processing done" + msgstr "Verarbeitung abgeschlossen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3474 ++#: ../src/gui-wizard-gtk/wizard.c:3720 + msgid "_Stop" + msgstr "_Anhalten" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3477 ++#: ../src/gui-wizard-gtk/wizard.c:3723 + msgid "Upload for analysis" + msgstr "Hochladen für Analyse" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3480 ++#: ../src/gui-wizard-gtk/wizard.c:3726 + msgid "Repeat" + msgstr "Wiederholen" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3483 ++#: ../src/gui-wizard-gtk/wizard.c:3729 + msgid "_Forward" + msgstr "_Vorwärts" + +-#: ../src/gui-wizard-gtk/wizard.c:3575 ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.c:3780 ++msgid "Restrict access to the report" ++msgstr "Zugriff auf den Bericht einschränken" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3785 ++msgid "Learn more about restricted access in the configuration" ++msgstr "Erfahren Sie mehr über beschränkten Zugriff in der Konfiguration" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3844 + msgid "" + "In order to enable the built-in screencasting functionality the package fros-" + "gnome has to be installed. Please run the following command if you want to " +@@ -895,35 +940,8 @@ msgstr "" + "\n" + "su -c \"yum install fros-gnome\"" + +-# translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/gui-wizard-gtk/wizard.glade.h:1 +-msgid "" +-"Possible sensitive data detected, feel free to edit the report and remove " +-"them." +-msgstr "" +-"Möglicherweise sind sensitive Daten im Fehlerbericht enthalten. Der " +-"Fehlerbericht kann entsprechend angepasst werden." +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:2 +-msgid "Restrict access to the report" +-msgstr "Zugriff auf den Bericht einschränken" +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:3 +-msgid "" +-"No one except Red Hat employees will be allowed to see the report with " +-"restricted access (not even you)" +-msgstr "" +-"Niemand außer Red Hat Mitarbeitern wird es möglich sein, den Bericht mit " +-"eingeschränktem Zugriff einzusehen (auch Sie selbst nicht)" +- + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:4 +-msgid "Read more about reports with restricted access" +-msgstr "Erfahren Sie mehr über Berichte mit beschränktem Zugriff" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++#: ../src/gui-wizard-gtk/wizard.glade.h:1 + msgid "" + "On the following screens, you will be asked to describe how the problem " + "occurred, to choose how to analyze the problem (if needed), to review " +@@ -936,12 +954,12 @@ msgstr "" + "werden soll. Klicken Sie auf »Vor« um fortzufahren." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++#: ../src/gui-wizard-gtk/wizard.glade.h:2 + msgid "Details" + msgstr "Details" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:7 ++#: ../src/gui-wizard-gtk/wizard.glade.h:3 + msgid "" + "How did this problem happen (step-by-step)? How can it be reproduced? Any " + "additional comments useful for diagnosing the problem? Please use English if " +@@ -951,15 +969,31 @@ msgstr "" + "reproduzieren? Haben Sie weitere Hinweise zur Eingrenzung des Problems? " + "Bitte nutzen Sie, wenn möglich, Englisch." + ++#: ../src/gui-wizard-gtk/wizard.glade.h:4 ++msgid "How reproducible is this problem?" ++msgstr "Wie reproduzierbar ist das Problem?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++msgid "How it can be reproduced (one step per line)?" ++msgstr "Wie kann es reproduziert werden (einen Schritt pro Zeile)?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++msgid "" ++"Please add a comprehensive description of the problem you have. This is a " ++"very long place holder." ++msgstr "" ++"Bitte geben Sie eine detaillierte Beschreibung des Problems an. Dies ist ein " ++"sehr langer Platzhalter." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:8 ++#: ../src/gui-wizard-gtk/wizard.glade.h:7 + msgid "You need to fill the how to before you can proceed..." + msgstr "" + "Sie müssen angeben, wie verfahren werden soll, bevor Sie fortfahren können..." + "" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++#: ../src/gui-wizard-gtk/wizard.glade.h:8 + msgid "" + "Your comments are not private. They may be included into publicly " + "visible problem reports." +@@ -968,6 +1002,11 @@ msgstr "" + "Fehlerberichte einbezogen werden." + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++msgid "I don't know what caused this problem" ++msgstr "Ich weiß nicht, was dieses Problem verursacht hat" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:10 + msgid "If you don't know how to describe it, you can" + msgstr "Falls Sie nicht wissen, wie Sie ihn beschreiben sollen, können Sie " +@@ -979,11 +1018,6 @@ msgstr "Einen Screencast hinzufügen" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:12 +-msgid "I don't know what caused this problem" +-msgstr "Ich weiß nicht, was dieses Problem verursacht hat" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Use this button to generate more informative backtrace after you installed " + "additional debug packages" +@@ -992,7 +1026,7 @@ msgstr "" + "erstellen, nachdem Sie zusätzliche Debug-Pakete installiert haben" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:14 ++#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Please review the data before it gets reported. Depending on reporter " + "chosen, it may end up publicly visible." +@@ -1000,53 +1034,53 @@ msgstr "" + "Bitte überprüfen Sie die Daten bevor sie übermittelt werden. Je nach " + "Übermittlungsmethode könnten Sie später öffentlich einsehbar sein." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:15 ++#: ../src/gui-wizard-gtk/wizard.glade.h:14 + msgid "Forbidden words" + msgstr "Unzulässige Wörter" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/gui-wizard-gtk/wizard.glade.h:16 ++#: ../src/gui-wizard-gtk/wizard.glade.h:15 + msgid "Custom" + msgstr "Benutzerdefiniert" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/gui-wizard-gtk/wizard.glade.h:17 ++#: ../src/gui-wizard-gtk/wizard.glade.h:16 + msgid "Clear the search bar to see the list of security sensitive words." + msgstr "" + "Suchleiste löschen, um die Liste der sicherheitsrelevanten Worte anzuzeigen" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/gui-wizard-gtk/wizard.glade.h:18 ++#: ../src/gui-wizard-gtk/wizard.glade.h:17 + msgid "file" + msgstr "Datei" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/gui-wizard-gtk/wizard.glade.h:19 ++#: ../src/gui-wizard-gtk/wizard.glade.h:18 + msgid "data" + msgstr "Daten" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/gui-wizard-gtk/wizard.glade.h:20 ++#: ../src/gui-wizard-gtk/wizard.glade.h:19 + msgid "Search" + msgstr "Suche" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:21 ++#: ../src/gui-wizard-gtk/wizard.glade.h:20 + msgid "Size:" + msgstr "Größe:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:22 ++#: ../src/gui-wizard-gtk/wizard.glade.h:21 + msgid "Attach a file" + msgstr "Datei anhängen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:23 ++#: ../src/gui-wizard-gtk/wizard.glade.h:22 + msgid "I reviewed the data and _agree with submitting it" + msgstr "Ich habe die Daten überprüft und _stimme der Übertragung zu" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:24 ++#: ../src/gui-wizard-gtk/wizard.glade.h:23 + msgid "" + "If you are reporting to a remote server, make sure you removed all private " + "data (such as usernames and passwords). Backtrace, command line, environment " +@@ -1058,23 +1092,23 @@ msgstr "" + "Elemente, die untersucht werden müssen." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:25 ++#: ../src/gui-wizard-gtk/wizard.glade.h:24 + msgid "Processing did not start yet" + msgstr "Verarbeitung wurde noch nicht gestartet" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:26 ++#: ../src/gui-wizard-gtk/wizard.glade.h:25 + msgid "Show log" + msgstr "Protokoll anzeigen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:27 ++#: ../src/gui-wizard-gtk/wizard.glade.h:26 + msgid "Reporting has finished. You can close this window now." + msgstr "" + "Berichterstellung abgeschlossen. Sie können dieses Fenster jetzt schließen." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:28 ++#: ../src/gui-wizard-gtk/wizard.glade.h:27 + msgid "" + "If you want to report the problem to a different destination, collect " + "additional information, or provide a better problem description and repeat " +@@ -1085,17 +1119,17 @@ msgstr "" + "klicken Sie auf »Vor«, um den Vorgang der Berichterstellung zu wiederholen." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1007 ++#: ../src/include/internal_libreport.h:1046 + msgid "Be verbose" + msgstr "Ausführlich protokollieren" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1008 +-#: ../src/plugins/reporter-bugzilla.c:895 ++#: ../src/include/internal_libreport.h:1047 ++#: ../src/plugins/reporter-bugzilla.c:893 + #: ../src/plugins/reporter-kerneloops.c:166 +-#: ../src/plugins/reporter-mailx.c:198 ../src/plugins/reporter-print.c:56 +-#: ../src/plugins/reporter-rhtsupport.c:471 +-#: ../src/plugins/reporter-upload.c:249 ++#: ../src/plugins/reporter-mailx.c:280 ../src/plugins/reporter-print.c:56 ++#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-upload.c:188 + msgid "Problem directory" + msgstr "Problem-Verzeichnis" + +@@ -1153,7 +1187,7 @@ msgid "'%s' is not correct file name" + msgstr "»%s« ist kein korrekter Dateiname" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/create_dump_dir.c:153 ++#: ../src/lib/create_dump_dir.c:150 + #, c-format + msgid "uid value is not valid: '%s'" + msgstr "UID-Wert ist ungültig: »%s«" +@@ -1164,70 +1198,98 @@ msgstr "UID-Wert ist ungültig: »%s«" + msgid "Uploaded: %llu of %llu kbytes" + msgstr "Übertragen: %llu von %llu kbytes" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/curl.c:635 ++#: ../src/lib/curl.c:636 ++msgid "Ignoring URL without scheme and hostname" ++msgstr "URL ohne Schema und Rechnername ignorieren" ++ ++#. Do not include the path part of the URL as it can contain sensitive data ++#. * in case of typos ++#: ../src/lib/curl.c:666 + #, c-format +-msgid "Sending %s to %s" +-msgstr "%s wird an %s gesendet" ++msgid "Sending %s to %s//%s" ++msgstr "%s wird an %s//%s gesendet" + +-# translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/lib/curl.c:659 ++#: ../src/lib/curl.c:690 + #, c-format +-msgid "Please enter user name for '%s':" +-msgstr "Benutzername für »%s« angeben:" ++msgid "Please enter user name for '%s//%s':" ++msgstr "Bitte Benutzername für »%s//%s« angeben:" + +-# translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/lib/curl.c:665 ++#: ../src/lib/curl.c:696 + #, c-format +-msgid "Please enter password for '%s':" +-msgstr "Passwort für »%s« angeben:" ++msgid "Please enter password for '%s//%s@%s':" ++msgstr "Bitte Passwort für »%s//%s@%s« angeben:" + +-# translation auto-copied from project libreport, version master, document libreport + #. This ends up a "reporting status message" in abrtd +-#: ../src/lib/curl.c:688 ++#: ../src/lib/curl.c:719 ++#, c-format ++msgid "Successfully created %s" ++msgstr "%s erfolgreich erstellt" ++ ++#: ../src/lib/dump_dir.c:1545 ++msgid "Failed to open TAR writer" ++msgstr "Öffnen des TAR Writer fehlgeschlagen" ++ ++#: ../src/lib/dump_dir.c:1571 ++msgid "Failed to finalize TAR archive" ++msgstr "Abschließen des TAR-Archivs fehlgeschlagen" ++ ++#: ../src/lib/dump_dir.c:1581 ++msgid "Failed to close TAR writer" ++msgstr "Schließen des TAR Writer fehlgeschlagen" ++ ++#: ../src/lib/dump_dir.c:1591 + #, c-format +-msgid "Successfully sent %s to %s" +-msgstr "%s wurde erfolgreich an %s gesendet" ++msgid "gzip killed with signal %d" ++msgstr "Abbruch von gzip erzwungen durch Signal %d" ++ ++#: ../src/lib/dump_dir.c:1597 ++#, c-format ++msgid "gzip exited with %d" ++msgstr "gzip beendet mit %d" ++ ++#: ../src/lib/dump_dir.c:1600 ++msgid "gzip process failed" ++msgstr "gzip-Prozess fehlgeschlagen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:348 ++#: ../src/lib/event_config.c:382 + msgid "Missing mandatory value" + msgstr "Fehlender erforderlicher Wert" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:356 ++#: ../src/lib/event_config.c:390 + #, c-format + msgid "Invalid utf8 character '%c'" + msgstr "Ungültiges UTF8-Zeichen »%c«" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:369 ++#: ../src/lib/event_config.c:403 + #, c-format + msgid "Invalid number '%s'" + msgstr "Ungültige Zahl »%s«" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:384 ++#: ../src/lib/event_config.c:418 + #, c-format + msgid "Invalid boolean value '%s'" + msgstr "Ungültige Boolesche Variable »%s«" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:390 ++#: ../src/lib/event_config.c:424 + msgid "Unsupported option type" + msgstr "Nicht unterstützter Optionstyp" + +-#: ../src/lib/event_config.c:463 ++#: ../src/lib/event_config.c:497 + msgid "Reporting disabled because the rating does not contain a number." + msgstr "Berichterstellung deaktiviert, da die Bewertung keine Zahl enthält." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:464 ++#: ../src/lib/event_config.c:498 + msgid "Please report this problem to ABRT project developers." + msgstr "Bitte melden Sie dieses Problem an die ABRT-Projektentwickler." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:470 ++#: ../src/lib/event_config.c:504 + msgid "" + "The backtrace is incomplete, please make sure you provide the steps to " + "reproduce." +@@ -1236,19 +1298,19 @@ msgstr "" + "Schritte zum Reproduzieren angeben." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:471 ++#: ../src/lib/event_config.c:505 + msgid "The backtrace probably can't help developer to diagnose the bug." + msgstr "" + "Diese Ablaufverfolgung kann Entwicklern bei der Fehlerdiagnose vermutlich " + "nicht weiterhelfen." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:477 ++#: ../src/lib/event_config.c:511 + msgid "Reporting disabled because the backtrace is unusable." + msgstr "Berichterstellung deaktiviert, da der Backtrace unbrauchbar ist." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:481 ++#: ../src/lib/event_config.c:515 + #, c-format + msgid "" + "Please try to install debuginfo manually using the command: \"debuginfo-" +@@ -1258,13 +1320,28 @@ msgstr "" + "zu installieren und versuchen Sie es erneut." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:483 ++#: ../src/lib/event_config.c:517 + msgid "A proper debuginfo is probably missing or the coredump is corrupted." + msgstr "" + "Vermutlich fehlt eine korrekte Debuginfo oder der Coredump ist beschädigt" + ++#: ../src/lib/iso_date_string.c:48 ++#, c-format ++msgid "String doesn't seem to be a date: '%s'" ++msgstr "String scheint kein Datum zu sein: »%s«" ++ ++#: ../src/lib/iso_date_string.c:53 ++#, c-format ++msgid "The date: '%s' has unrecognized suffix: '%s'" ++msgstr "Das Datum: »%s« hat unbekanntes Suffix: »%s«" ++ ++#: ../src/lib/iso_date_string.c:58 ++#, c-format ++msgid "The date: '%s' is out of UNIX time stamp range" ++msgstr "Das Datum: »%s« liegt außerhalb des UNIX Zeitstempel-Bereichs" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:354 ++#: ../src/lib/ureport.c:395 + #, c-format + msgid "Your problem seems to be caused by %s\n" + "\n" +@@ -1274,31 +1351,41 @@ msgstr "Ihr Fehler scheint durch %s verursacht worden zu sein\n" + " %s\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:357 ++#: ../src/lib/ureport.c:398 + msgid "Your problem seems to be caused by one of the following:\n" + msgstr "Ihr Problem scheint eine der folgenden Ursachen zu haben:\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:528 ++#: ../src/lib/ureport.c:570 + #, c-format + msgid "Failed to upload uReport to the server '%s' with curl: %s" + msgstr "Hochladen des uReport zum Server »%s« mit curl: %s fehlgeschlagen" + ++#: ../src/lib/ureport.c:574 ++#, c-format ++msgid "Failed to upload uReport to the server '%s'" ++msgstr "Hochladen des uReport zum Server »%s« fehlgeschlagen" ++ ++#: ../src/lib/ureport.c:577 ++#, c-format ++msgid "Error: %s" ++msgstr "Fehler: %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:534 ++#: ../src/lib/ureport.c:584 + #, c-format + msgid "The URL '%s' does not exist (got error 404 from server)" + msgstr "Die URL »%s« ist nicht vorhanden (Server-Fehlermeldung 404)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:540 ++#: ../src/lib/ureport.c:590 + #, c-format + msgid "The server at '%s' encountered an internal error (got error 500)" + msgstr "" + "Der Server bei »%s« hat einen internen Fehler festgestellt (Fehler 500)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:546 ++#: ../src/lib/ureport.c:596 + #, c-format + msgid "The server at '%s' currently can't handle the request (got error 503)" + msgstr "" +@@ -1307,20 +1394,20 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #. can't print better error message +-#: ../src/lib/ureport.c:555 ++#: ../src/lib/ureport.c:605 + #, c-format + msgid "Unexpected HTTP response from '%s': %d" + msgstr "Unerwartete HTTP-Antwort von »%s«: %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:564 ++#: ../src/lib/ureport.c:614 + #, c-format + msgid "Unable to parse response from ureport server at '%s'" + msgstr "" + "Antwort des uReport-Servers unter »%s« konnte nicht verarbeitet werden" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:574 ++#: ../src/lib/ureport.c:624 + #, c-format + msgid "The response from '%s' has invalid format" + msgstr "Die Antwort von »%s« weist ein ungültiges Format auf" +@@ -1328,18 +1415,18 @@ msgstr "Die Antwort von »%s« weist ein ungültiges Format auf" + # translation auto-copied from project libreport, version master, document libreport + #. HTTP CODE 202 means that call was successful but the response + #. has an error message +-#: ../src/lib/ureport.c:580 ++#: ../src/lib/ureport.c:630 + #, c-format + msgid "Type mismatch has been detected in the response from '%s'" + msgstr "Unterschied des Typs in der Antwort von »%s« festgestellt" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:766 ../src/plugins/reporter-rhtsupport.c:198 ++#: ../src/lib/ureport.c:820 ../src/plugins/reporter-rhtsupport.c:233 + msgid "Failed on submitting the problem" + msgstr "Fehlerbericht konnte nicht übertragen werden" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:808 ++#: ../src/lib/ureport.c:862 + #, c-format + msgid "The server at '%s' responded with an error: '%s'" + msgstr "Der Server bei »%s« hat mit einer Fehlermeldung geantwortet: »%s«" +@@ -1366,6 +1453,31 @@ msgid "Essential element '%s' is missing, can't continue" + msgstr "Notwendiges Element »%s« fehlt, fortfahren nicht möglich" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:478 ../src/plugins/reporter-bugzilla.c:355 ++#, c-format ++msgid "Can't parse backtrace: %s" ++msgstr "Ablaufverfolgung kann nicht analysiert werden: %s" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:489 ../src/plugins/reporter-bugzilla.c:366 ++msgid "Can't generate stacktrace description (no crash thread?)" ++msgstr "" ++"Stacktrace-Beschreibung kann nicht erstellt werden (Kein Absturz-Thread?)" ++ ++#: ../src/lib/reported_to.c:52 ++msgid "Report result label mustn't be empty string." ++msgstr "Label für Berichtergebnis darf kein leerer String sein." ++ ++#: ../src/lib/reported_to.c:58 ++msgid "Report result label mustn't contain ':' character." ++msgstr "Label für Berichtergebnis darf nicht das Zeichen »:« enthalten." ++ ++#: ../src/lib/reported_to.c:141 ++#, c-format ++msgid "Ignored invalid ISO date of report result '%s'" ++msgstr "Ungültiges ISO-Datum von Berichtergebnis »%s« wurde ignoriert" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/run_event.c:791 + #, c-format + msgid "('%s' was killed by signal %u)\n" +@@ -1451,13 +1563,14 @@ msgstr "Via Bugzilla Bugtracker berichten" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:3 +-msgid "Bugzilla URL" +-msgstr "Bugzilla-URL" ++#: ../src/plugins/report_Uploader.xml.in.h:6 ++msgid "User name" ++msgstr "Benutzername" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:4 +-msgid "Address of Bugzilla server" +-msgstr "Adresse des Bugzilla-Servers" ++msgid "Bugzilla account user name" ++msgstr "Bugzilla Account-Benutzername" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:5 +@@ -1470,48 +1583,23 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:6 +-#: ../src/plugins/report_Uploader.xml.in.h:6 +-msgid "User name" +-msgstr "Benutzername" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:7 +-msgid "Bugzilla account user name" +-msgstr "Bugzilla Account-Benutzername" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:5 + #: ../src/plugins/report_Uploader.xml.in.h:8 + msgid "Password" + msgstr "Passwort" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:9 ++#: ../src/plugins/report_Bugzilla.xml.in.h:7 + msgid "Bugzilla account password" + msgstr "Bugzilla Account-Passwort" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:10 +-#: ../src/plugins/report_RHTSupport.xml.in.h:7 +-#: ../src/plugins/report_uReport.xml.in.h:7 +-msgid "Verify SSL" +-msgstr "SSL überprüfen" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:11 +-#: ../src/plugins/report_RHTSupport.xml.in.h:8 +-#: ../src/plugins/report_uReport.xml.in.h:8 +-msgid "Check SSL key validity" +-msgstr "Gültigkeit des SSL-Schlüssels überprüfen" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++#: ../src/plugins/report_Bugzilla.xml.in.h:8 + msgid "Restrict access" + msgstr "Zugriff einschränken" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++#: ../src/plugins/report_Bugzilla.xml.in.h:9 + msgid "" + "Restrict access to the created bugzilla ticket allowing only users from " + "specified groups to view it (see advanced settings for more details)" +@@ -1521,12 +1609,50 @@ msgstr "" + "erweiterte Einstellungen für weitere Details)" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:10 ++msgid "Groups" ++msgstr "Gruppen" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:11 ++msgid "" ++"Restrict the access to specified groups <a href=\"https://github.com/abrt/" ++"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++msgstr "" ++"Zugriff auf bestimmte Gruppen beschränken <a href=\"https://github.com/" ++"abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++msgid "Bugzilla URL" ++msgstr "Bugzilla-URL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++msgid "Address of Bugzilla server" ++msgstr "Adresse des Bugzilla-Servers" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:14 ++#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_uReport.xml.in.h:7 ++msgid "Verify SSL" ++msgstr "SSL überprüfen" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_uReport.xml.in.h:8 ++msgid "Check SSL key validity" ++msgstr "Gültigkeit des SSL-Schlüssels überprüfen" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:16 + msgid "Bugzilla product" + msgstr "Bugzilla-Produkt" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_Bugzilla.xml.in.h:17 + msgid "" + "Specify this only if you needed different product than specified in /etc/os-" + "release" +@@ -1535,12 +1661,12 @@ msgstr "" + "unter /etc/os-release angegeben." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:16 ++#: ../src/plugins/report_Bugzilla.xml.in.h:18 + msgid "Bugzilla product version" + msgstr "Bugzilla-Produkteversion" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:17 ++#: ../src/plugins/report_Bugzilla.xml.in.h:19 + msgid "" + "Specify this only if you needed different product version than specified in /" + "etc/os-release" +@@ -1549,7 +1675,7 @@ msgstr "" + "benötigen, als unter /etc/os-release angegeben." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:18 ++#: ../src/plugins/report_Bugzilla.xml.in.h:20 + #: ../src/plugins/report_Kerneloops.xml.in.h:5 + #: ../src/plugins/report_RHTSupport.xml.in.h:13 + #: ../src/plugins/report_Uploader.xml.in.h:10 +@@ -1559,7 +1685,7 @@ msgid "HTTP Proxy" + msgstr "HTTP-Proxy" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:19 ++#: ../src/plugins/report_Bugzilla.xml.in.h:21 + #: ../src/plugins/report_Kerneloops.xml.in.h:6 + #: ../src/plugins/report_RHTSupport.xml.in.h:14 + #: ../src/plugins/report_Uploader.xml.in.h:11 +@@ -1569,7 +1695,7 @@ msgid "Sets the proxy server to use for HTTP" + msgstr "Proxy-Server für HTTP festlegen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:20 ++#: ../src/plugins/report_Bugzilla.xml.in.h:22 + #: ../src/plugins/report_Kerneloops.xml.in.h:7 + #: ../src/plugins/report_RHTSupport.xml.in.h:15 + #: ../src/plugins/report_Uploader.xml.in.h:12 +@@ -1579,7 +1705,7 @@ msgid "HTTPS Proxy" + msgstr "HTTPS-Proxy" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:21 ++#: ../src/plugins/report_Bugzilla.xml.in.h:23 + #: ../src/plugins/report_Kerneloops.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:16 + #: ../src/plugins/report_Uploader.xml.in.h:13 +@@ -1589,20 +1715,6 @@ msgid "Sets the proxy server to use for HTTPS" + msgstr "Proxy-Server für HTTPS festlegen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:22 +-msgid "Groups" +-msgstr "Gruppen" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:23 +-msgid "" +-"Restrict the access to specified groups <a href=\"https://github.com/abrt/" +-"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +-msgstr "" +-"Zugriff auf bestimmte Gruppen beschränken <a href=\"https://github.com/" +-"abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +- +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report.c:37 + msgid "" + "& [-v] --target TARGET --ticket ID FILE...\n" +@@ -1637,19 +1749,7 @@ msgid "Ticket/case ID" + msgstr "Ticket/Fall-ID" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:355 +-#, c-format +-msgid "Can't parse backtrace: %s" +-msgstr "Ablaufverfolgung kann nicht analysiert werden: %s" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:366 +-msgid "Can't generate stacktrace description (no crash thread?)" +-msgstr "" +-"Stacktrace-Beschreibung kann nicht erstellt werden (Kein Absturz-Thread?)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:764 ++#: ../src/plugins/reporter-bugzilla.c:762 + msgid "" + "Warning, private ticket groups already specified as cmdline argument, " + "ignoring the env variable and configuration" +@@ -1658,38 +1758,38 @@ msgstr "" + "Umgebungsvariable und Konfiguration wird ignoriert" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:775 +-#: ../src/plugins/reporter-rhtsupport.c:342 ++#: ../src/plugins/reporter-bugzilla.c:773 ++#: ../src/plugins/reporter-rhtsupport.c:377 + msgid "Can't continue without login" + msgstr "Fortfahren ohne Login nicht möglich" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:788 +-#: ../src/plugins/reporter-rhtsupport.c:355 ++#: ../src/plugins/reporter-bugzilla.c:786 ++#: ../src/plugins/reporter-rhtsupport.c:390 + msgid "Can't continue without password" + msgstr "Fortfahren ohne Passwort nicht möglich" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:797 ++#: ../src/plugins/reporter-bugzilla.c:795 + #, c-format + msgid "Logging into Bugzilla at %s" + msgstr "Anmelden bei Bugzilla unter %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:801 ++#: ../src/plugins/reporter-bugzilla.c:799 + msgid "Invalid password or login. Please enter your BZ login:" + msgstr "Ungültiges Passwort oder Login. Bitte geben Sie Ihren BZ-Login ein:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:804 +-#: ../src/plugins/reporter-rhtsupport.c:369 ++#: ../src/plugins/reporter-bugzilla.c:802 ++#: ../src/plugins/reporter-rhtsupport.c:404 + #, c-format + msgid "Invalid password or login. Please enter the password for '%s':" + msgstr "" + "Ungültiges Passwort oder Login. Bitte geben Sie das Passwort für »%s« ein:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:823 ++#: ../src/plugins/reporter-bugzilla.c:821 + msgid "" + "\n" + "& [-vbf] [-g GROUP-NAME]... [-c CONFFILE]... [-F FMTFILE] [-A FMTFILE2] -d " +@@ -1736,11 +1836,11 @@ msgstr "" + "\n" + "& [-vbf] [-g GROUP-NAME]... [-c CONFFILE]... [-F FMTFILE] [-A FMTFILE2] -d " + "DIR\n" +-"or:\n" ++"oder:\n" + "& [-v] [-c CONFFILE]... [-d DIR] -t[ID] FILE...\n" +-"or:\n" ++"oder:\n" + "& [-v] [-c CONFFILE]... [-d DIR] -t[ID] -w\n" +-"or:\n" ++"oder:\n" + "& [-v] [-c CONFFILE]... -h DUPHASH\n" + "\n" + "Fehler an Bugzilla melden.\n" +@@ -1780,79 +1880,80 @@ msgstr "" + "Falls nicht spezifiziert, ist CONFFILE standardmäßig " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:896 +-#: ../src/plugins/reporter-rhtsupport.c:472 ++#: ../src/plugins/reporter-bugzilla.c:894 ++#: ../src/plugins/reporter-rhtsupport.c:511 + msgid "Configuration file (may be given many times)" + msgstr "Konfigurationsdatei (kann mehrmals angegeben werden)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:897 ++#: ../src/plugins/reporter-bugzilla.c:895 + msgid "Formatting file for initial comment" + msgstr "Vorbereiten der Datei für erste Anmerkung" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:898 ++#: ../src/plugins/reporter-bugzilla.c:896 + msgid "Formatting file for duplicates" + msgstr "Vorbereiten der Datei für Duplikate" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-bugzilla.c:897 + msgid "Attach FILEs [to bug with this ID]" + msgstr "FILEs anhängen [an Fehlerbericht mit dieser ID]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:900 ++#: ../src/plugins/reporter-bugzilla.c:898 + msgid "When creating bug, attach binary files too" + msgstr "Beim Erstellen des Fehlerberichts auch Binärdateien anhängen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:901 +-#: ../src/plugins/reporter-rhtsupport.c:474 ++#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-rhtsupport.c:513 + msgid "Force reporting even if this problem is already reported" + msgstr "" + "Berichten erzwingen, selbst wenn dieses Problem bereits gemeldet wurde" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:902 ++#: ../src/plugins/reporter-bugzilla.c:900 + msgid "Add bugzilla user to CC list [of bug with this ID]" + msgstr "" + "Bugzilla-Benutzer zu CC-Liste hinzufügen [an Fehlerbericht mit dieser ID]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:903 ++#: ../src/plugins/reporter-bugzilla.c:901 + msgid "Print BUG_ID which has given DUPHASH" + msgstr "BUG_ID anzeigen, welche DUPHASH erzeugt hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:904 ++#: ../src/plugins/reporter-bugzilla.c:902 + msgid "A name of bug tracker for an additional URL from 'reported_to'" + msgstr "Name vom Bug-Tracker für zusätzliche URL von »reported_to«" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:905 ++#: ../src/plugins/reporter-bugzilla.c:903 + msgid "Restrict access to this group only" + msgstr "Zugriff nur auf diese Gruppe beschränken" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:906 ++#: ../src/plugins/reporter-bugzilla.c:904 ../src/plugins/reporter-mailx.c:284 ++#: ../src/plugins/reporter-rhtsupport.c:517 + msgid "Debug" + msgstr "Fehlersuche" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:948 ++#: ../src/plugins/reporter-bugzilla.c:949 + msgid "Looking for similar problems in bugzilla" + msgstr "Auf Bugzilla nach ähnlichen Fehlern suchen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:975 ++#: ../src/plugins/reporter-bugzilla.c:976 + msgid "Login is not provided by configuration. Please enter your BZ login:" + msgstr "" + "Login ist in der Konfiguration nicht angegeben. Bitte geben Sie Ihren BZ-" + "Login ein:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:981 +-#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-bugzilla.c:982 ++#: ../src/plugins/reporter-rhtsupport.c:551 + #, c-format + msgid "" + "Password is not provided by configuration. Please enter the password for " +@@ -1862,7 +1963,7 @@ msgstr "" + "Passwort für »%s« ein:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1000 ++#: ../src/plugins/reporter-bugzilla.c:1001 + msgid "" + "Can't get Bugzilla ID because this problem has not yet been reported to " + "Bugzilla." +@@ -1871,7 +1972,7 @@ msgstr "" + "Bugzilla gemeldet wurde." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1007 ++#: ../src/plugins/reporter-bugzilla.c:1008 + #, c-format + msgid "" + "This problem has been reported to Bugzilla '%s' which differs from the " +@@ -1881,89 +1982,113 @@ msgstr "" + "konfiguriertem Bugzilla »%s«." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1011 ++#: ../src/plugins/reporter-bugzilla.c:1012 + #, c-format + msgid "Malformed url to Bugzilla '%s'." + msgstr "Fehlerhafte URL an Bugzilla »%s«." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1015 ++#: ../src/plugins/reporter-bugzilla.c:1016 + #, c-format + msgid "Using Bugzilla ID '%s'" + msgstr "Bugzilla ID »%s« verwenden" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1049 +-#: ../src/plugins/reporter-bugzilla.c:1341 ++#: ../src/plugins/reporter-bugzilla.c:1050 ++#: ../src/plugins/reporter-bugzilla.c:1220 ++#: ../src/plugins/reporter-bugzilla.c:1379 + msgid "Logging out" + msgstr "Abmelden" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1100 ++#: ../src/plugins/reporter-bugzilla.c:1101 + msgid "Can't determine Bugzilla Product from problem data." + msgstr "" + "Aufgrund der Fehlerdaten kann das Bugzilla-Projekt nicht bestimmt werden." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1151 ++#: ../src/plugins/reporter-bugzilla.c:1152 + msgid "Checking for duplicates" + msgstr "Überprüfen auf Duplikate" + ++#: ../src/plugins/reporter-bugzilla.c:1201 ++#, c-format ++msgid "" ++"You have requested to make your data accessible only to a specific group and " ++"this bug is a duplicate of bug: %s/%u In case of bug duplicates a new " ++"comment is added to the original bug report but access to the comments " ++"cannot be restricted to a specific group. Would you like to open a new bug " ++"report and close it as DUPLICATE of the original one? Otherwise, the bug " ++"reporting procedure will be terminated." ++msgstr "" ++"Sie möchten Ihre Daten nur einer bestimmten Gruppe zugänglich zu machen und " ++"dieser Fehlerbericht ist ein doppelter Bericht von Fehler: %s/%u Bei " ++"doppelten Fehlerberichten wird ein neuer Kommentar zum originalen " ++"Fehlerbericht hinzugefügt, allerdings kann der Zugriff auf die Kommentare " ++"nicht auf eine bestimmte Gruppe beschränkt werden. Möchten Sie einen neuen " ++"Fehlerbericht öffnen und ihn als DUPLICATE des Originalen schließen? " ++"Andernfalls wird der Vorgang beendet." ++ + # translation auto-copied from project libreport, version master, document libreport + #. Create new bug +-#: ../src/plugins/reporter-bugzilla.c:1197 ++#: ../src/plugins/reporter-bugzilla.c:1228 + msgid "Creating a new bug" + msgstr "Neuer Fehlerbericht wird erstellt" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1218 ++#: ../src/plugins/reporter-bugzilla.c:1249 + msgid "Failed to create a new bug." + msgstr "Erstellung eines neuen Fehlerberichts fehlgeschlagen." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1229 ++#: ../src/plugins/reporter-bugzilla.c:1260 + #, c-format + msgid "Adding External URL to bug %i" + msgstr "Externe URL wird zu Bug %i hinzugefügt" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1235 ++#: ../src/plugins/reporter-bugzilla.c:1266 + #, c-format + msgid "Adding attachments to bug %i" + msgstr "Anhänge werden an Fehlerbericht %i angefügt" + ++#: ../src/plugins/reporter-bugzilla.c:1280 ++#, c-format ++msgid "Closing bug %i as duplicate of bug %i" ++msgstr "Fehler %i wird als doppelter Fehler von Fehler %i geschlossen" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1254 ++#: ../src/plugins/reporter-bugzilla.c:1292 + #, c-format + msgid "Bug is already reported: %i" + msgstr "Fehler wurde bereits eingereicht: %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1297 ++#: ../src/plugins/reporter-bugzilla.c:1335 + #, c-format + msgid "Adding %s to CC list" + msgstr "%s zu CC-Liste hinzufügen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1314 ++#: ../src/plugins/reporter-bugzilla.c:1352 + #, c-format + msgid "Adding new comment to bug %d" + msgstr "Neuen Kommentar zu Fehler %d hinzufügen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1328 ++#: ../src/plugins/reporter-bugzilla.c:1366 + msgid "Attaching better backtrace" + msgstr "Besserer Backtrace wird hinzugefügt" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1336 ++#: ../src/plugins/reporter-bugzilla.c:1374 + msgid "Found the same comment in the bug history, not adding a new one" + msgstr "" + "Identischer Kommentar in Fehlerchronik gefunden, kein neuer Kommentar wird " + "hinzugefügt" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1344 ++#: ../src/plugins/reporter-bugzilla.c:1382 + #, c-format + msgid "Status: %s%s%s %s/show_bug.cgi?id=%u" + msgstr "Status: %s%s%s %s/show_bug.cgi?id=%u" +@@ -2002,12 +2127,12 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/reporter-kerneloops.c:167 +-#: ../src/plugins/reporter-ureport.c:74 ++#: ../src/plugins/reporter-ureport.c:79 + msgid "Configuration file" + msgstr "Konfigurationsdatei" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:59 ++#: ../src/plugins/reporter-mailx.c:83 + #, c-format + msgid "" + "Email address of %s was not specified. Would you like to do so now? If not, " +@@ -2017,50 +2142,58 @@ msgstr "" + "Falls nicht, wird '%s' verwendet" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:66 ++#: ../src/plugins/reporter-mailx.c:90 + #, c-format + msgid "Please, type email address of %s:" + msgstr "Bitte geben Sie die E-Mail-Adresse von %s an:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:73 ++#: ../src/plugins/reporter-mailx.c:97 + #, c-format + msgid "Can't continue without email address of %s" + msgstr "Fortfahren ohne E-Mail-Adresse von %s nicht möglich" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:135 ++#: ../src/plugins/reporter-mailx.c:206 ../src/plugins/reporter-mailx.c:211 + msgid "Sending an email..." + msgstr "Senden der E-Mail..." + ++#: ../src/plugins/reporter-mailx.c:209 ++#, c-format ++msgid "Sending a notification email to: %s" ++msgstr "E-Mail-Benachrichtigung senden an: %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:158 ++#: ../src/plugins/reporter-mailx.c:237 + #, c-format + msgid "Email was sent to: %s" + msgstr "E-Mail wurde gesendet an: %s" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:178 ++#: ../src/plugins/reporter-mailx.c:258 + msgid "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Sends contents of a problem directory DIR via email\n" + "\n" + "If not specified, CONFFILE defaults to " + msgstr "" +-"& [-v] -d VERZ [-c KONFDATEI]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Sendet Inhalte eines Problem-Verzeichnisses DIR per E-Mail\n" + "\n" +-"Falls nicht spezifiziert, ist KONFDATEI standardmäßig " ++"Falls nicht spezifiziert, ist CONFFILE standardmäßig " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:199 ../src/plugins/reporter-upload.c:250 ++#: ../src/plugins/reporter-mailx.c:281 ../src/plugins/reporter-upload.c:189 + msgid "Config file" + msgstr "Konfigurationsdatei" + ++#: ../src/plugins/reporter-mailx.c:282 ++msgid "Formatting file for an email" ++msgstr "Vorbereiten der Datei für eine E-Mail" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:200 ++#: ../src/plugins/reporter-mailx.c:283 + msgid "Notify only (Do not mark the report as sent)" + msgstr "" + "Nur benachrichtigen (Diesen Report nicht als übermittelt kennzeichnen)" +@@ -2105,40 +2238,39 @@ msgstr "" + "Datei:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was appended to %s" + msgstr "Der Bericht wurde an %s angehängt" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was stored to %s" + msgstr "Der Bericht wurde unter %s gespeichert" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:259 +-#: ../src/plugins/reporter-ureport.c:237 ++#: ../src/plugins/reporter-rhtsupport.c:294 ++#: ../src/plugins/reporter-ureport.c:297 + #, c-format + msgid "Server responded with an error: '%s'" + msgstr "Der Server hat mit einer Fehlermeldung geantwortet: »%s«" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:319 ++#: ../src/plugins/reporter-rhtsupport.c:354 + msgid "Do you still want to create a RHTSupport ticket?" + msgstr "Möchten Sie noch immer ein RHTSupport-Ticket erstellen?" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/plugins/reporter-rhtsupport.c:367 ++#: ../src/plugins/reporter-rhtsupport.c:402 + msgid "Invalid password or login. Please enter your Red Hat login:" + msgstr "" + "Ungültiges Passwort oder Login. Bitte geben Sie Ihren Red Hat-Login ein:" + +-# translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/plugins/reporter-rhtsupport.c:435 ++#: ../src/plugins/reporter-rhtsupport.c:471 + msgid "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -2147,105 +2279,138 @@ msgid "" + "If not specified, CONFFILE defaults to " + msgstr "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" +-"or:\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" ++"oder:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +-"Fehler an RHTSupport übermitteln.\n" ++"Fehler an RHT-Support übermitteln.\n" + "\n" + "Falls nicht definiert, ist CONFFILE standardmäßig" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:473 ++#: ../src/plugins/reporter-rhtsupport.c:512 + msgid "Upload FILEs [to case with this ID]" + msgstr "FILEs übertragen [an Fall mit dieser ID]" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/plugins/reporter-rhtsupport.c:475 ++#: ../src/plugins/reporter-rhtsupport.c:514 + msgid "Submit uReport before creating a new case" + msgstr "Vor Neuerstellung eines Fehlerberichtes uReport übertragen" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/plugins/reporter-rhtsupport.c:476 ++#: ../src/plugins/reporter-rhtsupport.c:515 + msgid "Configuration file for uReport" + msgstr "Konfigurationsdatei für uReport" + ++#: ../src/plugins/reporter-rhtsupport.c:516 ++msgid "Formatting file for a new case" ++msgstr "Datei wird für neuen Bericht vorbereitet" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:504 ++#: ../src/plugins/reporter-rhtsupport.c:545 + msgid "Login is not provided by configuration. Please enter your RHTS login:" + msgstr "" + "Login ist in der Konfiguration nicht angegeben. Bitte geben Sie Ihren RHTS-" + "Login ein:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:573 ++#: ../src/plugins/reporter-rhtsupport.c:614 + #, c-format + msgid "Attaching '%s' to case '%s'" + msgstr "»%s« wird an Fall »%s« angehängt" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/plugins/reporter-rhtsupport.c:610 ++#: ../src/plugins/reporter-rhtsupport.c:651 + msgid "Sending ABRT crash statistics data" + msgstr "ABRT-Absturzstatistik-Daten senden" + ++#: ../src/plugins/reporter-rhtsupport.c:674 ++msgid "" ++"The problem has only occurred once and the ability to reproduce the problem " ++"is unknown. Please ensure you will be able to provide detailed information " ++"to our Support Team. Would you like to continue and open a new support case?" ++msgstr "" ++"Das Problem trat nur einmal auf und die Möglichkeit zur Reproduktion ist " ++"unbekannt. Bitte stellen Sie sicher, dass Sie über ausreichend detaillierte " ++"Informationen für unser Support-Team verfügen. Möchten Sie fortfahren und " ++"ein neues Support-Ticket öffnen?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:690 ++#, c-format ++msgid "" ++"The crashed program was released by '%s'. Would you like to report the " ++"problem to Red Hat Support?" ++msgstr "" ++"Das abgestürzte Programm wurde von »%s« veröffentlicht. Möchten Sie das " ++"Problem an den Red Hat Support berichten?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:708 ++#, c-format ++msgid "" ++"The program '%s' does not appear to be provided by Red Hat. Would you like " ++"to report the problem to Red Hat Support?" ++msgstr "" ++"Das Programm »%s« scheint nicht von Red Hat zu stammen. Möchten Sie das " ++"Problem an den Red Hat Support berichten?" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/reporter-rhtsupport.c:725 ++msgid "Can't create a temporary directory in " ++msgstr "Es kann kein temporäres Verzeichnis erstellt werden in" ++ + # translation auto-copied from project libreport, version master, document libreport + #. Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing + #. error msg is already logged by dd_opendir +-#. Gzipping e.g. 0.5gig coredump takes a while. Let client know what we are doing +-#: ../src/plugins/reporter-rhtsupport.c:621 +-#: ../src/plugins/reporter-upload.c:52 ++#. Compressing e.g. 0.5gig coredump takes a while. Let client know what we are doing ++#: ../src/plugins/reporter-rhtsupport.c:793 ++#: ../src/plugins/reporter-upload.c:103 + msgid "Compressing data" + msgstr "Daten werden komprimiert" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:656 +-msgid "Can't create a temporary directory in " +-msgstr "Es kann kein temporäres Verzeichnis erstellt werden in" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:665 ++#: ../src/plugins/reporter-rhtsupport.c:801 + msgid "Can't create temporary file in " + msgstr "Temporäre Datei kann nicht erstellt werden in " + + # translation auto-copied from project libreport, version master, document libreport + #. Check for hints and show them if we have something +-#: ../src/plugins/reporter-rhtsupport.c:676 ++#: ../src/plugins/reporter-rhtsupport.c:812 + msgid "Checking for hints" + msgstr "Suche nach Hinweisen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:686 ++#: ../src/plugins/reporter-rhtsupport.c:822 + msgid "Creating a new case" + msgstr "Einen neuen Bericht erstellen" + + # translation auto-copied from project libreport, version master, document libreport + #. How can we help user sorting out this problem? +-#: ../src/plugins/reporter-rhtsupport.c:697 ++#: ../src/plugins/reporter-rhtsupport.c:833 + msgid "Can't determine RH Support Product from problem data." + msgstr "" + "RH-Support-Projekt kann aufgrund der Fehlerdaten nicht bestimmt werden." + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/plugins/reporter-rhtsupport.c:753 ++#: ../src/plugins/reporter-rhtsupport.c:889 + msgid "Linking ABRT crash statistics record with the case" + msgstr "Eintrag der ABRT-Absturzstatistiken mit dem Fehlerbericht verknüpfen" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/plugins/reporter-rhtsupport.c:766 ++#: ../src/plugins/reporter-rhtsupport.c:902 + #, c-format + msgid "Linking ABRT crash statistics record with contact email: '%s'" + msgstr "" + "Eintrag der ABRT-Absturzstatistiken mit Kontakt-E-Mail verknüpfen: »%s«" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:790 ++#: ../src/plugins/reporter-rhtsupport.c:926 + #, c-format + msgid "Adding comment to case '%s'" + msgstr "Hinzufügen des Kommentars zu Fehlerbericht »%s«" + + # translation auto-copied from project libreport, version master, document libreport + #. Attach the tarball of -d DIR +-#: ../src/plugins/reporter-rhtsupport.c:808 ++#: ../src/plugins/reporter-rhtsupport.c:944 + #, c-format + msgid "Attaching problem data to case '%s'" + msgstr "Fehlerdaten zu Bericht »%s« hinzufügen" +@@ -2261,49 +2426,58 @@ msgid "Updates which possibly help: " + msgstr "Möglicherweise hilfreiche Updates: " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:30 ++#: ../src/plugins/reporter-upload.c:29 + msgid "Can't continue without URL" + msgstr "Ohne URL kann nicht fortgesetzt werden" + +-#: ../src/plugins/reporter-upload.c:61 +-msgid "Upload URL is not provided by configuration. Please enter upload URL:" +-msgstr "" +-"Upload-URL ist in der Konfiguration nicht angegeben. Bitte geben Sie eine " +-"Upload-URL an:" +- + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi + #. Be permissive and nice, ask only once and don't check + #. the result. User can dismiss this prompt but the upload + #. may work somehow??? +-#: ../src/plugins/reporter-upload.c:164 ++#: ../src/plugins/reporter-upload.c:51 + msgid "Please enter password for uploading:" + msgstr "Für das Hochladen Passwort eingeben:" + + # translation auto-copied from project libreport, version master, document libreport + #. success +-#: ../src/plugins/reporter-upload.c:181 ++#: ../src/plugins/reporter-upload.c:120 + #, c-format + msgid "Archive is created: '%s'" + msgstr "Archiv wurde erstellt: »%s«" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:222 ++#: ../src/plugins/reporter-upload.c:159 + msgid "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Uploads compressed tarball of problem directory DIR to URL.\n" + "If URL is not specified, creates tarball in " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]¶\n" + "\n" + "Lädt komprimierten Tarball des Problemverzeichnisses DIR an URL hoch.\n" + "Falls URL nicht spezifiziert ist, wird Tarball erstellt in " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:251 ++#: ../src/plugins/reporter-upload.c:190 + msgid "Base URL to upload to" + msgstr "Basis-URL, an die übertragen wird" + ++#: ../src/plugins/reporter-upload.c:191 ++msgid "SSH public key file" ++msgstr "Datei des öffentlichen SSH-Schlüssels" ++ ++#: ../src/plugins/reporter-upload.c:192 ++msgid "SSH private key file" ++msgstr "Datei des privaten SSH-Schlüssels" ++ ++#: ../src/plugins/reporter-upload.c:221 ++msgid "" ++"Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:" ++"" ++msgstr "" ++"Bitte eine URL angeben (scp, ftp, etc.), wohin die Fehlerdaten exportiert " ++"werden sollen:" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Kerneloops.xml.in.h:1 + msgid "Kerneloops.org" +@@ -2430,12 +2604,12 @@ msgid "Red Hat customer password" + msgstr "Red Hat Kunden-Passwort" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/plugins/report_RHTSupport.xml.in.h:9 ++#: ../src/plugins/report_RHTSupport.xml.in.h:7 + msgid "Submit uReport" + msgstr "uReport senden" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/plugins/report_RHTSupport.xml.in.h:10 ++#: ../src/plugins/report_RHTSupport.xml.in.h:8 + msgid "" + "Submit <a href=\"https://access.redhat.com/articles/642323\">micro-" + "report</a> when creating a new case." +@@ -2444,12 +2618,12 @@ msgstr "" + "Bericht</a> übertragen, wenn neuer Fehlerbericht erstellt wird." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_RHTSupport.xml.in.h:9 + msgid "RH Portal URL" + msgstr "RH Portal URL" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_RHTSupport.xml.in.h:10 + msgid "Address of the Red Hat support portal" + msgstr "Adresse des Red Hat Support-Portals" + +@@ -2512,6 +2686,22 @@ msgstr "FTP-Proxy" + msgid "Sets the proxy server to use for FTP" + msgstr "Proxy-Server für FTP festlegen" + ++#: ../src/plugins/report_Uploader.xml.in.h:16 ++msgid "SSH Public key file" ++msgstr "Datei des öffentlichen SSH-Schlüssels" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:17 ++msgid "Use this field to specify SSH public keyfile" ++msgstr "Geben Sie in diesem Feld die Datei des öffentlichen SSH-Schlüssels an" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:18 ++msgid "SSH Private key file" ++msgstr "Datei des privaten SSH-Schlüssels" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:19 ++msgid "Use this field to specify SSH private keyfile" ++msgstr "Geben Sie in diesem Feld die Datei des privaten SSH-Schlüssels an" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_uReport.xml.in.h:1 + msgid "uReport" +@@ -2600,52 +2790,52 @@ msgstr "" + "Bugzilla konnte keinen übergeordneten Fehlerbericht für Fehler %d finden" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/rhbz.c:893 ++#: ../src/plugins/rhbz.c:916 + msgid "Bug.search(quicksearch) return value did not contain member 'bugs'" + msgstr "" + "Antwort von Bug.search(quicksearch) enthält keine angehängten Fehlerberichte" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:68 ++#: ../src/plugins/reporter-ureport.c:73 + msgid "Specify server URL" + msgstr "Server-URL angeben" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:70 ++#: ../src/plugins/reporter-ureport.c:75 + msgid "Allow insecure connection to ureport server" + msgstr "Erlaube die unsichere Verbindung zum ureport-Server" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:71 ++#: ../src/plugins/reporter-ureport.c:76 + msgid "Use client authentication" + msgstr "Client-Authentifizierung verwenden" + +-#: ../src/plugins/reporter-ureport.c:72 ++#: ../src/plugins/reporter-ureport.c:77 + msgid "Use HTTP Authentication" + msgstr "HTTP-Authentifizierung verwenden" + + # translation auto-copied from project libreport, version master, document libreport, author Roman Spirgi +-#: ../src/plugins/reporter-ureport.c:73 ++#: ../src/plugins/reporter-ureport.c:78 + msgid "Additional files included in 'auth' key" + msgstr "Zusätzliche im »Auth«-Schlüssel enthaltene Daten" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:76 ++#: ../src/plugins/reporter-ureport.c:81 + msgid "bthash of uReport to attach (conflicts with -A)" + msgstr "Anzuhängender bthash von uReport (kollidiert mit -A)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:78 ++#: ../src/plugins/reporter-ureport.c:83 + msgid "attach to a bthash from reported_to (conflicts with -a)" + msgstr "Anhängen an bthash von »reported_to« (kollidiert mit -a)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:80 ++#: ../src/plugins/reporter-ureport.c:85 + msgid "contact e-mail address (requires -a|-A, conflicts with -E)" + msgstr "Kontakt-E-Mail-Adresse (erfordert -a|-A, kollidiert mit -E)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:82 ++#: ../src/plugins/reporter-ureport.c:87 + msgid "" + "contact e-mail address from environment or configuration file (requires -a|-" + "A, conflicts with -e)" +@@ -2654,22 +2844,51 @@ msgstr "" + "A, kollidiert mit -e)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:84 ++#: ../src/plugins/reporter-ureport.c:89 + msgid "attach RHBZ bug (requires -a|-A, conflicts with -B)" + msgstr "RHBZ-Fehler anhängen (erfordert -a|-A, kollidiert mit -B)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:86 ++#: ../src/plugins/reporter-ureport.c:91 + msgid "" + "attach last RHBZ bug from reported_to (requires -a|-A, conflicts with -b)" + msgstr "" + "Letzten RHBZ-Fehler anhängen von »reported_to« (erfordert -a|-A, kollidiert " + "mit -b)" + +-#: ../src/plugins/reporter-ureport.c:91 ++#: ../src/plugins/reporter-ureport.c:95 ++msgid "attach value (requires -a|-A and -T, conflicts with -L)" ++msgstr "Wert anfügen (erfordert -a|-A und -T, kollidiert mit -L)" ++ ++#: ../src/plugins/reporter-ureport.c:97 ++msgid "" ++"attach data of FIELD [URL] of the last report result (requires -a|-A, -r and " ++"-T, conflicts with -l)" ++msgstr "" ++"Daten von FIELD [URL] der letzten Berichtergebnisse anfügen (erfordert -a|-" ++"A, -r und -T, kollidiert mit -l)" ++ ++#: ../src/plugins/reporter-ureport.c:100 ++msgid "" ++"use REPORT_RESULT_TYPE when looking for FIELD in reported_to (used only with " ++"-L)" ++msgstr "" ++"verwenden Sie REPORT_RESULT_TYPE, wenn Sie FIELD in reported_to suchen (nur " ++"verwendet mit -L)" ++ ++#: ../src/plugins/reporter-ureport.c:102 ++msgid "" ++"attach DATA as ureporte attachment ATTACHMENT_TYPE (used only with -l|-L)" ++msgstr "" ++"DATA als ureporte-Anhang ATTACHMENT_TYPE anfügen (nur verwendet mit -l|-L)" ++ ++#: ../src/plugins/reporter-ureport.c:107 + msgid "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2680,38 +2899,51 @@ msgid "" + msgstr "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" + "\n" +-"Micro-Report hochladen oder einen Anhang zu einem Micro-Report anfügen\n" ++"Micro-Report hochladen oder Anhang an einen Micro-Report anfügen\n" + "\n" +-"Standardkonfiguration auslesen aus" ++"Liest die Standardkonfiguration aus" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:144 ++#: ../src/plugins/reporter-ureport.c:179 + msgid "This problem does not have an uReport assigned." + msgstr "Dieses Problem hat keinen zugewiesenen uReport." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:157 ++#: ../src/plugins/reporter-ureport.c:192 + msgid "This problem has not been reported to Bugzilla." + msgstr "Dieses Problem wurde nicht an Bugzilla gemeldet." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:161 ++#: ../src/plugins/reporter-ureport.c:196 + #, c-format + msgid "Unable to find bug ID in bugzilla URL '%s'" + msgstr "Fehler-ID konnte aus der Bugzilla-URL »%s« nicht gelesen werden" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:166 ++#: ../src/plugins/reporter-ureport.c:201 + #, c-format + msgid "Unable to parse bug ID from bugzilla URL '%s'" + msgstr "Fehler-ID konnte nicht aus der Bugzilla-URL »%s «gelesen werden" + ++#: ../src/plugins/reporter-ureport.c:211 ++#, c-format ++msgid "This problem has not been reported to '%s'." ++msgstr "Dieses Problem wurde nicht gemeldet an »%s«." ++ ++#: ../src/plugins/reporter-ureport.c:216 ++#, c-format ++msgid "The report result '%s' is missing URL." ++msgstr "Das Berichtergebnis »%s« fehlt in URL." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:179 ++#: ../src/plugins/reporter-ureport.c:233 + msgid "" + "Neither environment variable 'uReport_ContactEmail' nor configuration option " + "'ContactEmail' is set" +@@ -2719,22 +2951,22 @@ msgstr "" + "Weder die Umgebungsvariable »uReport_ContactEmail« noch die " + "Konfigurationsoption »ContactEmail« wurde festgelegt" + +-#: ../src/plugins/reporter-ureport.c:185 ++#: ../src/plugins/reporter-ureport.c:239 + msgid "You need to specify bug ID, contact email or both" + msgstr "Fehler-ID, Kontakt-E-Mail oder beides muss angegeben werden" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:203 ++#: ../src/plugins/reporter-ureport.c:263 + msgid "You need to specify bthash of the uReport to attach." + msgstr "Sie müssen den Bthash des uReport angeben, um Anhang zu erstellen" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:208 ++#: ../src/plugins/reporter-ureport.c:268 + msgid "Not uploading an empty uReport" + msgstr "Ein leerer uReport kann nicht hochgeladen werden" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:229 ++#: ../src/plugins/reporter-ureport.c:289 + msgid "This problem has already been reported." + msgstr "Dieses Problem wurde bereits gemeldet." + +@@ -2905,7 +3137,18 @@ msgstr "Fehlerdaten via E-Mail senden" + msgid "Analyze the problem locally and send information via email" + msgstr "Fehler lokal analysieren und Information über E-Mail senden" + +-# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_uReport.xml.in.h:1 ++msgid "Submit anonymous crash report" ++msgstr "Anonymen Absturzbericht übermitteln" ++ ++#: ../src/workflows/workflow_uReport.xml.in.h:2 ++msgid "" ++"Submit anonymous crash report - I do not want to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Anonymen Absturzbericht übermitteln – Ich möchte nicht vom Red Hat Support " ++"kontaktiert werden" ++ + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:1 + #: ../src/workflows/workflow_RHELKerneloops.xml.in.h:1 + #: ../src/workflows/workflow_RHELPython.xml.in.h:1 +@@ -2913,58 +3156,65 @@ msgstr "Fehler lokal analysieren und Information über E-Mail senden" + #: ../src/workflows/workflow_RHELxorg.xml.in.h:1 + #: ../src/workflows/workflow_RHELLibreport.xml.in.h:1 + #: ../src/workflows/workflow_RHELJava.xml.in.h:1 +-msgid "Report to Red Hat Customer Portal" +-msgstr "Fehler an das Red Hat Kundenportal berichten" ++msgid "Ask Red Hat Support for help" ++msgstr "Red Hat Support um Hilfe bitten" + +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:2 ++#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 ++#: ../src/workflows/workflow_RHELPython.xml.in.h:2 ++#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 ++#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 ++#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 ++#: ../src/workflows/workflow_RHELJava.xml.in.h:2 ++msgid "" ++"Create new Red Hat Support case - I would like to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Neues Red Hat Support-Ticket erstellen – Ich möchte vom Red Hat Support " ++"kontaktiert werden" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 ++msgid "Report to Red Hat Bugzilla" ++msgstr "An Red Hat Bugzilla berichten" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:2 + msgid "Process the C/C++ crash using the Red Hat infrastructure" + msgstr "C/C++ Absturzmeldung mit Hilfe der Red Hat-Infrastruktur verarbeiten" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:2 + msgid "Process the kerneloops using the Red Hat infrastructure" + msgstr "Kernel-Absturzmeldung mit Hilfe der Red Hat-Infrastruktur verarbeiten" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELPython.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:2 + msgid "Process the python exception using the Red Hat infrastructure" + msgstr "Python-Ausnahme mit Hilfe der Red Hat-Infrastruktur verarbeiten" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:2 + msgid "Process the kernel crash using the Red Hat infrastructure" + msgstr "Kernel-Absturzmeldung mit Hilfe der Red Hat-Infrastruktur verarbeiten" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:2 + msgid "Process the X Server problem using the Red Hat infrastructure" + msgstr "X-Serverproblem mit Hilfe der Red Hat-Infrastruktur verarbeiten" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:2 + msgid "Process the problem using the Red Hat infrastructure" + msgstr "Problem mithilfe der Red Hat Infrastruktur verarbeiten" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELJava.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:2 + msgid "Process the Java exception using the Red Hat infrastructure" + msgstr "Java-Ausnahme mithilfe der Red Hat Infrastruktur verarbeiten" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 +-msgid "Report to Red Hat Bugzilla" +-msgstr "An Red Hat Bugzilla berichten" +diff --git a/po/es.po b/po/es.po +index 1ca11d5..54b2389 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -1,18 +1,19 @@ + # Alex Puchades , 2015. #zanata + # Gladys Guerrero Lozano , 2015. #zanata ++# Máximo Castañeda Riloba , 2016. #zanata + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2015-07-14 15:18+0200\n" ++"POT-Creation-Date: 2016-06-29 15:25+0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2015-07-21 02:10-0400\n" +-"Last-Translator: Gladys Guerrero Lozano \n" ++"PO-Revision-Date: 2016-07-03 04:27-0400\n" ++"Last-Translator: Máximo Castañeda Riloba \n" + "Language-Team: Spanish\n" + "Language: es\n" +-"X-Generator: Zanata 3.6.2\n" ++"X-Generator: Zanata 3.9.5\n" + "Plural-Forms: nplurals=2; plural=(n != 1)\n" + + # translation auto-copied from project libreport, version master, document libreport +@@ -212,37 +213,31 @@ msgstr "Seleccione un proceso a ejecutar:" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:87 +-#, python-brace-format + msgid "Extracting cpio from {0}" + msgstr "Extrayendo cpio desde {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:92 +-#, python-brace-format + msgid "Can't write to '{0}': {1}" + msgstr "No se puede escribir a '{0}': {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:107 +-#, python-brace-format + msgid "Can't extract package '{0}'" + msgstr "No se puede extraer paquete '{0}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:115 +-#, python-brace-format + msgid "Caching files from {0} made from {1}" + msgstr "Almacenando en caché archivos de '{0}' creados en {1} " + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:134 +-#, python-brace-format + msgid "Can't extract files from '{0}'" + msgstr "No se pueden extraer archivos de '{0}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:147 +-#, python-brace-format + msgid "Can't remove '{0}': {1}" + msgstr "No se pueden retirar '{0}': {1}" + +@@ -251,7 +246,6 @@ msgstr "No se pueden retirar '{0}': {1}" + #. % (self.downloaded_pkgs + 1, self.total_pkgs, name, pct) + #. ) + #: ../src/client-python/debuginfo.py:194 ../src/client-python/debuginfo.py:205 +-#, python-brace-format + msgid "Downloading ({0} of {1}) {2}: {3:3}%" + msgstr "Descargando ({0} of {1}) {2}: {3:3}%" + +@@ -302,7 +296,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:356 +-#, python-brace-format + msgid "Can't setup {0}: {1}, disabling" + msgstr "No se puede configurar {0}: {1}, inhabilitando..." + +@@ -327,19 +320,16 @@ msgstr "Error al recuperar listas de archivos:'{0!s}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:416 +-#, python-brace-format + msgid "Can't find packages for {0} debuginfo files" + msgstr "No se pueden encontrar paquetes para {0} archivos de depuración" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:418 +-#, python-brace-format + msgid "Packages to download: {0}" + msgstr "Paquetes a descargar: {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:419 +-#, python-brace-format + msgid "Downloading {0:.2f}Mb, installed size: {1:.2f}Mb. Continue?" + msgstr "Descargando {0:.2f}Mb, tamaño instalado: {1:.2f}Mb. ¿Continuar?" + +@@ -351,7 +341,6 @@ msgstr "Descarga cancelada por usuario" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:434 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in tmp dir '{0}' ({1:.2f}Mb left). Continue?" + msgstr "" +@@ -360,7 +349,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:443 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in cache dir '{0}' ({1:.2f}Mb left). " + "Continue?" +@@ -370,13 +358,11 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:469 +-#, python-brace-format + msgid "Cannot copy file '{0}': {1}" + msgstr "No se puede copiar el archivo '{0}': {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:487 +-#, python-brace-format + msgid "Downloading package {0} failed" + msgstr "Descarga de paquete {0} falló" + +@@ -391,7 +377,6 @@ msgstr "Desempaque falló, abortando descarga..." + #. but it was appearing even if no packages were in fact extracted + #. (say, when there was one package, and it has download error). + #: ../src/client-python/debuginfo.py:504 +-#, python-brace-format + msgid "Removing {0}" + msgstr "Retirando {0}" + +@@ -453,7 +438,7 @@ msgid "C_onfigure" + msgstr "C_onfiguración" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3472 ++#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3718 + msgid "_Close" + msgstr "_Cerrar" + +@@ -485,7 +470,7 @@ msgstr " Secret Service no está disponible, ¡su configuración no se guardará + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gtk-helpers/event_config_dialog.c:321 + #: ../src/gtk-helpers/workflow_config_dialog.c:86 +-#: ../src/gui-wizard-gtk/wizard.c:822 ../src/gui-wizard-gtk/wizard.c:3101 ++#: ../src/gui-wizard-gtk/wizard.c:844 ../src/gui-wizard-gtk/wizard.c:3325 + msgid "_Cancel" + msgstr "_Cancelar" + +@@ -575,7 +560,7 @@ msgstr "" + msgid "Alternate GUI file" + msgstr "Archivo alterno de GUI" + +-#: ../src/gui-wizard-gtk/wizard.c:354 ++#: ../src/gui-wizard-gtk/wizard.c:378 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide the " +@@ -590,7 +575,7 @@ msgstr "" + "Leer más sobre configuración en: https://access.redhat.com/site/articles/" + "718083" + +-#: ../src/gui-wizard-gtk/wizard.c:357 ++#: ../src/gui-wizard-gtk/wizard.c:381 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide " +@@ -605,13 +590,13 @@ msgstr "" + "Leer más sobre " + "configuración" + +-#: ../src/gui-wizard-gtk/wizard.c:373 ++#: ../src/gui-wizard-gtk/wizard.c:397 + #, c-format + msgid "Con_figure %s" + msgstr "Con_figure %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:400 ++#: ../src/gui-wizard-gtk/wizard.c:424 + #, c-format + msgid "" + "Need writable directory, but '%s' is not writable. Move it to '%s' and " +@@ -621,17 +606,17 @@ msgstr "" + "y operar en los datos desplazados?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:813 ++#: ../src/gui-wizard-gtk/wizard.c:835 + msgid "View/edit a text file" + msgstr "Ver o editar archivo de texto" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:821 ++#: ../src/gui-wizard-gtk/wizard.c:843 + msgid "_Save" + msgstr "_Guardar" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1040 ++#: ../src/gui-wizard-gtk/wizard.c:1067 + msgid "" + "No reporting targets are defined for this problem. Check configuration in /" + "etc/libreport/*" +@@ -640,46 +625,68 @@ msgstr "" + "configuración en /etc/libreport/*" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1077 ++#: ../src/gui-wizard-gtk/wizard.c:1104 + #, c-format + msgid "(requires: %s)" + msgstr "(se requiere: %s)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1091 ++#: ../src/gui-wizard-gtk/wizard.c:1118 + #, c-format + msgid "(not needed, data already exist: %s)" + msgstr "(no es necesario, los datos ya existen: %s)" + ++#: ../src/gui-wizard-gtk/wizard.c:1217 ++msgid "" ++"Since crashes without a known reproducer can be difficult to diagnose, " ++"please provide a comprehensive description of the problem you have " ++"encountered." ++msgstr "" ++"Dado que los problemas sin instrucciones para reproducirlos pueden ser " ++"difíciles de diagnosticar, por favor incluya una descripción detallada del " ++"problema que ha encontrado." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1224 ++msgid "" ++"Please provide a short description of the problem and please include the " ++"steps you have used to reproduce the problem." ++msgstr "" ++"Incluya una pequeña descripción del problema y los pasos necesarios para " ++"reproducirlo." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1231 ++msgid "Please provide the steps you have used to reproduce the problem." ++msgstr "Incluya los pasos necesarios para reproducir el problema." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1277 ++#: ../src/gui-wizard-gtk/wizard.c:1349 + msgid "(click here to view/edit)" + msgstr "(Haga clic aquí para ver/editar)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1288 ++#: ../src/gui-wizard-gtk/wizard.c:1360 + #, c-format + msgid "(binary file, %llu bytes)" + msgstr "(archivo binario, %llu bytes)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1395 ../src/report-newt/report-newt.c:334 ++#: ../src/gui-wizard-gtk/wizard.c:1467 ../src/report-newt/report-newt.c:334 + msgid "(no description)" + msgstr "(no hay descripción)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1403 ++#: ../src/gui-wizard-gtk/wizard.c:1475 + #, c-format + msgid "%llu bytes, %u files" + msgstr "%llu bytes, %u archivos" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1647 ++#: ../src/gui-wizard-gtk/wizard.c:1752 + msgid "Processing was canceled" + msgstr "El procesamiento fue cancelado" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/gui-wizard-gtk/wizard.c:1851 ++#: ../src/gui-wizard-gtk/wizard.c:1956 + msgid "" + "Processing of the problem failed. This can have many reasons but there are " + "three most common:\n" +@@ -694,7 +701,7 @@ msgstr "" + "\t▫ configuración inválida" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/gui-wizard-gtk/wizard.c:1860 ++#: ../src/gui-wizard-gtk/wizard.c:1965 + msgid "" + "If you want to update the configuration and try to report again, please open " + "Preferences item\n" +@@ -707,55 +714,69 @@ msgstr "" + "haga clic en Repetir." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1978 ++#: ../src/gui-wizard-gtk/wizard.c:2089 + msgid "Processing was interrupted because the problem is not reportable." + msgstr "" + "El procesamiento se interrumpió debido a que el problema no se puede " + "reportar." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1988 ../src/gui-wizard-gtk/wizard.c:2057 ++#: ../src/gui-wizard-gtk/wizard.c:2099 ../src/gui-wizard-gtk/wizard.c:2168 + msgid "Processing failed." + msgstr "El procesamiento falló." + + # translation auto-copied from project libreport, version master, document libreport + #. No next event, go to progress page and finish +-#: ../src/gui-wizard-gtk/wizard.c:1995 ../src/gui-wizard-gtk/wizard.c:2818 ++#: ../src/gui-wizard-gtk/wizard.c:2106 ../src/gui-wizard-gtk/wizard.c:3040 + msgid "Processing finished." + msgstr "Fin del procesamiento." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1996 ++#: ../src/gui-wizard-gtk/wizard.c:2107 + msgid "Processing finished, please proceed to the next step." + msgstr "Procesamiento finalizado, por favor siga al siguiente paso." + + # translation auto-copied from project libreport, version master, document libreport + #. TODO: better msg? +-#: ../src/gui-wizard-gtk/wizard.c:2054 ++#: ../src/gui-wizard-gtk/wizard.c:2165 + #, c-format + msgid "No processing for event '%s' is defined" + msgstr "No se define procesamiento para el evento '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2068 ++#: ../src/gui-wizard-gtk/wizard.c:2179 + msgid "Processing interrupted: can't continue without writable directory." + msgstr "" + "El procesamiento ha sido interrumpido: no se puede continuar sin un " + "directorio que se pueda escribir." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2105 ++#: ../src/gui-wizard-gtk/wizard.c:2216 + msgid "Processing..." + msgstr "Procesando..." + ++# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades ++#: ../src/gui-wizard-gtk/wizard.c:2297 ++msgid "" ++"Possible sensitive data detected, feel free to edit the report and remove " ++"them." ++msgstr "" ++"Posibles datos confidenciales detectados, si lo desea puede editar el " ++"informe y eliminarlos." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2198 ++#: ../src/gui-wizard-gtk/wizard.c:2337 + msgid "Cannot check backtrace rating because of invalid event name" + msgstr "" + "No se pudo verificar la tasa de trazado debido al nombre de evento inválido" + ++#: ../src/gui-wizard-gtk/wizard.c:2869 ++#, c-format ++msgid "Failed to save file '%s'" ++msgstr "No se pudo guardar el archivo '%s'" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2838 ++#: ../src/gui-wizard-gtk/wizard.c:3060 + #, c-format + msgid "" + "Event '%s' requires permission to send possibly sensitive data.\n" +@@ -765,7 +786,7 @@ msgstr "" + "¿Desea continuar?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2886 ++#: ../src/gui-wizard-gtk/wizard.c:3108 + #, c-format + msgid "This problem should not be reported (it is likely a known problem). %s" + msgstr "" +@@ -773,107 +794,128 @@ msgstr "" + "%s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3102 ++#: ../src/gui-wizard-gtk/wizard.c:3326 + msgid "_Open" + msgstr "_Abrir" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3124 ++#: ../src/gui-wizard-gtk/wizard.c:3348 + #, c-format + msgid "'%s' is not an ordinary file" + msgstr "'%s' no es un archivo común" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3138 ++#: ../src/gui-wizard-gtk/wizard.c:3362 + msgid "You are trying to copy a file onto itself" + msgstr "Está intentando copiar un archivo en sí mismo" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3145 ++#: ../src/gui-wizard-gtk/wizard.c:3369 + #, c-format + msgid "Can't copy '%s': %s" + msgstr "No se puede copiar '%s': %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3160 ++#: ../src/gui-wizard-gtk/wizard.c:3384 + #, c-format + msgid "Item '%s' already exists and is not modifiable" + msgstr "Elemento '%s' ya existe y no se puede modificar" + ++#: ../src/gui-wizard-gtk/wizard.c:3542 ++msgid "I have experienced this problem for the first time" ++msgstr "Es la primera vez que me ocurre" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3545 ++msgid "I can reproduce this problem" ++msgstr "Puedo reproducirlo" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3548 ++msgid "This problem occurs repeatedly" ++msgstr "Es recurrente" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3314 ++#: ../src/gui-wizard-gtk/wizard.c:3560 + msgid "Include" + msgstr "Incluya" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3325 ++#: ../src/gui-wizard-gtk/wizard.c:3571 + msgid "Name" + msgstr "Nombre" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3335 ++#: ../src/gui-wizard-gtk/wizard.c:3581 + msgid "Value" + msgstr "Valor" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3369 ++#: ../src/gui-wizard-gtk/wizard.c:3615 + msgid "Problem description" + msgstr "Descripción del problema" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3370 ++#: ../src/gui-wizard-gtk/wizard.c:3616 + msgid "Select how to report this problem" + msgstr "Seleccione cómo enviar este problema" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3371 ++#: ../src/gui-wizard-gtk/wizard.c:3617 + msgid "Provide additional information" + msgstr "Proporcione información adicional" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3372 ++#: ../src/gui-wizard-gtk/wizard.c:3618 + msgid "Review the data" + msgstr "Reviser los datos" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3373 ++#: ../src/gui-wizard-gtk/wizard.c:3619 + msgid "Confirm data to report" + msgstr "Confirme los datos que se van a reportar" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3374 ++#: ../src/gui-wizard-gtk/wizard.c:3620 + msgid "Processing" + msgstr "Procesamiento" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3375 ++#: ../src/gui-wizard-gtk/wizard.c:3621 + msgid "Processing done" + msgstr "Procesamiento terminado" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3474 ++#: ../src/gui-wizard-gtk/wizard.c:3720 + msgid "_Stop" + msgstr "_Detener" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3477 ++#: ../src/gui-wizard-gtk/wizard.c:3723 + msgid "Upload for analysis" + msgstr "Cargando para análisis..." + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3480 ++#: ../src/gui-wizard-gtk/wizard.c:3726 + msgid "Repeat" + msgstr "Repetir" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3483 ++#: ../src/gui-wizard-gtk/wizard.c:3729 + msgid "_Forward" + msgstr "_Siguiente" + +-#: ../src/gui-wizard-gtk/wizard.c:3575 ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.c:3780 ++msgid "Restrict access to the report" ++msgstr "Restringir acceso al reporte" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3785 ++msgid "Learn more about restricted access in the configuration" ++msgstr "Más información sobre el acceso restringido en la configuración" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3844 + msgid "" + "In order to enable the built-in screencasting functionality the package fros-" + "gnome has to be installed. Please run the following command if you want to " +@@ -887,35 +929,8 @@ msgstr "" + "\n" + "su -c \"yum install fros-gnome\"" + +-# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/gui-wizard-gtk/wizard.glade.h:1 +-msgid "" +-"Possible sensitive data detected, feel free to edit the report and remove " +-"them." +-msgstr "" +-"Posibles datos confidenciales detectados, si lo desea puede editar el " +-"informe y eliminarlos." +- + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:2 +-msgid "Restrict access to the report" +-msgstr "Restringir acceso al reporte" +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:3 +-msgid "" +-"No one except Red Hat employees will be allowed to see the report with " +-"restricted access (not even you)" +-msgstr "" +-"Nadie, a excepción de los empleados de Red Hat, podrá ver el informe con " +-"acceso restringido (ni siquiera usted)." +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:4 +-msgid "Read more about reports with restricted access" +-msgstr "Lea más sobre reportes con acceso restringido" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++#: ../src/gui-wizard-gtk/wizard.glade.h:1 + msgid "" + "On the following screens, you will be asked to describe how the problem " + "occurred, to choose how to analyze the problem (if needed), to review " +@@ -928,12 +943,12 @@ msgstr "" + "Haga clic en 'Siguiente' para continuar." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++#: ../src/gui-wizard-gtk/wizard.glade.h:2 + msgid "Details" + msgstr "Detalles" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:7 ++#: ../src/gui-wizard-gtk/wizard.glade.h:3 + msgid "" + "How did this problem happen (step-by-step)? How can it be reproduced? Any " + "additional comments useful for diagnosing the problem? Please use English if " +@@ -943,13 +958,29 @@ msgstr "" + "añadir otros comentarios para diagnosticar el problema? Por favor utilice " + "inglés en lo posible." + ++#: ../src/gui-wizard-gtk/wizard.glade.h:4 ++msgid "How reproducible is this problem?" ++msgstr "¿Se puede reproducir el problema?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++msgid "How it can be reproduced (one step per line)?" ++msgstr "¿Cómo se puede reproducir (una línea para cada paso)?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++msgid "" ++"Please add a comprehensive description of the problem you have. This is a " ++"very long place holder." ++msgstr "" ++"Añada una descripción detallada del problema, con toda la información que " ++"pueda ser relevante. No escatime." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:8 ++#: ../src/gui-wizard-gtk/wizard.glade.h:7 + msgid "You need to fill the how to before you can proceed..." +-msgstr "Necesita llenar cómo desea proceder..." ++msgstr "Debe rellenar la descripción de cómo sucedió antes de continuar..." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++#: ../src/gui-wizard-gtk/wizard.glade.h:8 + msgid "" + "Your comments are not private. They may be included into publicly " + "visible problem reports." +@@ -958,6 +989,11 @@ msgstr "" + "de problemas visibles al público." + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++msgid "I don't know what caused this problem" ++msgstr "No sé qué causó este problema" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:10 + msgid "If you don't know how to describe it, you can" + msgstr "Si no sabe como se describe, puede" +@@ -969,11 +1005,6 @@ msgstr "agregar una grabación de pantalla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:12 +-msgid "I don't know what caused this problem" +-msgstr "No sé qué causó este problema" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Use this button to generate more informative backtrace after you installed " + "additional debug packages" +@@ -982,7 +1013,7 @@ msgstr "" + "instalada los paquetes de depuración adicionales." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:14 ++#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Please review the data before it gets reported. Depending on reporter " + "chosen, it may end up publicly visible." +@@ -990,53 +1021,53 @@ msgstr "" + "Por favor, revise los datos antes de informarlos. Dependiendo del informador " + "elegido, puede terminar siendo de acceso público." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:15 ++#: ../src/gui-wizard-gtk/wizard.glade.h:14 + msgid "Forbidden words" + msgstr "Palabras prohibidas" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/gui-wizard-gtk/wizard.glade.h:16 ++#: ../src/gui-wizard-gtk/wizard.glade.h:15 + msgid "Custom" + msgstr "Personalizar" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/gui-wizard-gtk/wizard.glade.h:17 ++#: ../src/gui-wizard-gtk/wizard.glade.h:16 + msgid "Clear the search bar to see the list of security sensitive words." + msgstr "" + "Vacíe la barra de búsqueda para ver la lista completa de palabras sensibles." + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/gui-wizard-gtk/wizard.glade.h:18 ++#: ../src/gui-wizard-gtk/wizard.glade.h:17 + msgid "file" + msgstr "archivo" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/gui-wizard-gtk/wizard.glade.h:19 ++#: ../src/gui-wizard-gtk/wizard.glade.h:18 + msgid "data" + msgstr "datos" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/gui-wizard-gtk/wizard.glade.h:20 ++#: ../src/gui-wizard-gtk/wizard.glade.h:19 + msgid "Search" + msgstr "Búsqueda" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:21 ++#: ../src/gui-wizard-gtk/wizard.glade.h:20 + msgid "Size:" + msgstr "Tamaño:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:22 ++#: ../src/gui-wizard-gtk/wizard.glade.h:21 + msgid "Attach a file" + msgstr "Adjunte un archivo" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:23 ++#: ../src/gui-wizard-gtk/wizard.glade.h:22 + msgid "I reviewed the data and _agree with submitting it" + msgstr "Revisé los datos y _estoy de acuerdo con enviarlo" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:24 ++#: ../src/gui-wizard-gtk/wizard.glade.h:23 + msgid "" + "If you are reporting to a remote server, make sure you removed all private " + "data (such as usernames and passwords). Backtrace, command line, environment " +@@ -1048,22 +1079,22 @@ msgstr "" + "necesitan examinar." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:25 ++#: ../src/gui-wizard-gtk/wizard.glade.h:24 + msgid "Processing did not start yet" + msgstr "El proceso aún no comienza" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:26 ++#: ../src/gui-wizard-gtk/wizard.glade.h:25 + msgid "Show log" + msgstr "Mostrar registro" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:27 ++#: ../src/gui-wizard-gtk/wizard.glade.h:26 + msgid "Reporting has finished. You can close this window now." + msgstr "El informe ha terminado. Puede cerrar esta ventana." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:28 ++#: ../src/gui-wizard-gtk/wizard.glade.h:27 + msgid "" + "If you want to report the problem to a different destination, collect " + "additional information, or provide a better problem description and repeat " +@@ -1074,17 +1105,17 @@ msgstr "" + "repita el proceso del reporte, presione 'Siguiente'." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1007 ++#: ../src/include/internal_libreport.h:1046 + msgid "Be verbose" + msgstr "Sea profuso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1008 +-#: ../src/plugins/reporter-bugzilla.c:895 ++#: ../src/include/internal_libreport.h:1047 ++#: ../src/plugins/reporter-bugzilla.c:893 + #: ../src/plugins/reporter-kerneloops.c:166 +-#: ../src/plugins/reporter-mailx.c:198 ../src/plugins/reporter-print.c:56 +-#: ../src/plugins/reporter-rhtsupport.c:471 +-#: ../src/plugins/reporter-upload.c:249 ++#: ../src/plugins/reporter-mailx.c:280 ../src/plugins/reporter-print.c:56 ++#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-upload.c:188 + msgid "Problem directory" + msgstr "Directorio del problema" + +@@ -1142,7 +1173,7 @@ msgid "'%s' is not correct file name" + msgstr "'%s' no es el nombre de archivo correcto" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/create_dump_dir.c:153 ++#: ../src/lib/create_dump_dir.c:150 + #, c-format + msgid "uid value is not valid: '%s'" + msgstr "el valor uid no es válido: '%s'" +@@ -1153,71 +1184,99 @@ msgstr "el valor uid no es válido: '%s'" + msgid "Uploaded: %llu of %llu kbytes" + msgstr "Cargado: %llu of %llu kbytes" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/curl.c:635 ++#: ../src/lib/curl.c:636 ++msgid "Ignoring URL without scheme and hostname" ++msgstr "Descartada URL sin esquema ni servidor" ++ ++#. Do not include the path part of the URL as it can contain sensitive data ++#. * in case of typos ++#: ../src/lib/curl.c:666 + #, c-format +-msgid "Sending %s to %s" +-msgstr "Enviando %s a %s" ++msgid "Sending %s to %s//%s" ++msgstr "Enviando %s a %s//%s" + +-# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/lib/curl.c:659 ++#: ../src/lib/curl.c:690 + #, c-format +-msgid "Please enter user name for '%s':" +-msgstr "Introduzca su nombre de usuario para '%s':" ++msgid "Please enter user name for '%s//%s':" ++msgstr "Introduzca su nombre de usuario para '%s//%s':" + +-# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/lib/curl.c:665 ++#: ../src/lib/curl.c:696 + #, c-format +-msgid "Please enter password for '%s':" +-msgstr "Introduzca su contraseña para '%s':" ++msgid "Please enter password for '%s//%s@%s':" ++msgstr "Introduzca la contraseña para '%s//%s@%s':" + +-# translation auto-copied from project libreport, version master, document libreport + #. This ends up a "reporting status message" in abrtd +-#: ../src/lib/curl.c:688 ++#: ../src/lib/curl.c:719 ++#, c-format ++msgid "Successfully created %s" ++msgstr "%s creada con éxito" ++ ++#: ../src/lib/dump_dir.c:1545 ++msgid "Failed to open TAR writer" ++msgstr "Error al abrir TAR" ++ ++#: ../src/lib/dump_dir.c:1571 ++msgid "Failed to finalize TAR archive" ++msgstr "Error al terminar TAR" ++ ++#: ../src/lib/dump_dir.c:1581 ++msgid "Failed to close TAR writer" ++msgstr "Error al cerrar TAR" ++ ++#: ../src/lib/dump_dir.c:1591 + #, c-format +-msgid "Successfully sent %s to %s" +-msgstr "Enviado correctamente %s a %s" ++msgid "gzip killed with signal %d" ++msgstr "gzip no pudo terminar por recibir una señal %d" ++ ++#: ../src/lib/dump_dir.c:1597 ++#, c-format ++msgid "gzip exited with %d" ++msgstr "gzip terminó con estado %d" ++ ++#: ../src/lib/dump_dir.c:1600 ++msgid "gzip process failed" ++msgstr "gzip falló" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:348 ++#: ../src/lib/event_config.c:382 + msgid "Missing mandatory value" + msgstr "Falta un valor obligatorio" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:356 ++#: ../src/lib/event_config.c:390 + #, c-format + msgid "Invalid utf8 character '%c'" + msgstr "Carácter utf8 inválido '%c'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:369 ++#: ../src/lib/event_config.c:403 + #, c-format + msgid "Invalid number '%s'" + msgstr "Número '%s' inválido" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:384 ++#: ../src/lib/event_config.c:418 + #, c-format + msgid "Invalid boolean value '%s'" + msgstr "Valor booleano inválido '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:390 ++#: ../src/lib/event_config.c:424 + msgid "Unsupported option type" + msgstr "Tipo de opción no soportada" + +-#: ../src/lib/event_config.c:463 ++#: ../src/lib/event_config.c:497 + msgid "Reporting disabled because the rating does not contain a number." + msgstr "Reporte inhabilitado porque la clasificación no contiene un número." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:464 ++#: ../src/lib/event_config.c:498 + msgid "Please report this problem to ABRT project developers." + msgstr "" + "Por favor reporte este problema a los desarrolladores del proyecto ABRT." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:470 ++#: ../src/lib/event_config.c:504 + msgid "" + "The backtrace is incomplete, please make sure you provide the steps to " + "reproduce." +@@ -1226,20 +1285,20 @@ msgstr "" + "para reproducir el error." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:471 ++#: ../src/lib/event_config.c:505 + msgid "The backtrace probably can't help developer to diagnose the bug." + msgstr "" + "El trazado probablemente no ayude a los desarrolladores a diagnosticar el " + "error." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:477 ++#: ../src/lib/event_config.c:511 + msgid "Reporting disabled because the backtrace is unusable." + msgstr "" + "Creación de informes inhabilitado debido a que el trazado no es utilizable." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:481 ++#: ../src/lib/event_config.c:515 + #, c-format + msgid "" + "Please try to install debuginfo manually using the command: \"debuginfo-" +@@ -1249,14 +1308,29 @@ msgstr "" + "\"debuginfo-install %s\" e intente de nuevo." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:483 ++#: ../src/lib/event_config.c:517 + msgid "A proper debuginfo is probably missing or the coredump is corrupted." + msgstr "" + "Probablemente haga falta un archivo de depuración o el coredump está " + "corrupto." + ++#: ../src/lib/iso_date_string.c:48 ++#, c-format ++msgid "String doesn't seem to be a date: '%s'" ++msgstr "No parece que '%s' sea un fecha" ++ ++#: ../src/lib/iso_date_string.c:53 ++#, c-format ++msgid "The date: '%s' has unrecognized suffix: '%s'" ++msgstr "El final de la fecha '%s' no se reconoce: '%s'" ++ ++#: ../src/lib/iso_date_string.c:58 ++#, c-format ++msgid "The date: '%s' is out of UNIX time stamp range" ++msgstr "La fecha '%s' está fuera del rango de las marcas de ficheros de UNIX" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:354 ++#: ../src/lib/ureport.c:395 + #, c-format + msgid "Your problem seems to be caused by %s\n" + "\n" +@@ -1266,30 +1340,40 @@ msgstr "Su problema parece haber sido causado por %s\n" + "%s\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:357 ++#: ../src/lib/ureport.c:398 + msgid "Your problem seems to be caused by one of the following:\n" + msgstr "Su problema parece haber sido causado por algo de lo siguiente:\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:528 ++#: ../src/lib/ureport.c:570 + #, c-format + msgid "Failed to upload uReport to the server '%s' with curl: %s" + msgstr "Falló al subir uReport al servidor ‘%s’ con curl: %s" + ++#: ../src/lib/ureport.c:574 ++#, c-format ++msgid "Failed to upload uReport to the server '%s'" ++msgstr "Fallo al enviar el uReport al servidor '%s'" ++ ++#: ../src/lib/ureport.c:577 ++#, c-format ++msgid "Error: %s" ++msgstr "Error: %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:534 ++#: ../src/lib/ureport.c:584 + #, c-format + msgid "The URL '%s' does not exist (got error 404 from server)" + msgstr "La URL ‘%s' no existe (se obtuvo error 404 del servidor)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:540 ++#: ../src/lib/ureport.c:590 + #, c-format + msgid "The server at '%s' encountered an internal error (got error 500)" + msgstr "El servidor en ‘%s’ encontró un error interno (obtuvo error 500)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:546 ++#: ../src/lib/ureport.c:596 + #, c-format + msgid "The server at '%s' currently can't handle the request (got error 503)" + msgstr "" +@@ -1298,19 +1382,19 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #. can't print better error message +-#: ../src/lib/ureport.c:555 ++#: ../src/lib/ureport.c:605 + #, c-format + msgid "Unexpected HTTP response from '%s': %d" + msgstr "Respuesta HTTP inesperada desde '%s': %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:564 ++#: ../src/lib/ureport.c:614 + #, c-format + msgid "Unable to parse response from ureport server at '%s'" + msgstr "No se pudo analizar la respuesta del servidor ureport en '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:574 ++#: ../src/lib/ureport.c:624 + #, c-format + msgid "The response from '%s' has invalid format" + msgstr "La respuesta desde ‘%s’ tiene formato no válido" +@@ -1318,18 +1402,18 @@ msgstr "La respuesta desde ‘%s’ tiene formato no válido" + # translation auto-copied from project libreport, version master, document libreport + #. HTTP CODE 202 means that call was successful but the response + #. has an error message +-#: ../src/lib/ureport.c:580 ++#: ../src/lib/ureport.c:630 + #, c-format + msgid "Type mismatch has been detected in the response from '%s'" + msgstr "Se ha detectado un desajuste de tipo en la respuesta desde ‘%s’" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:766 ../src/plugins/reporter-rhtsupport.c:198 ++#: ../src/lib/ureport.c:820 ../src/plugins/reporter-rhtsupport.c:233 + msgid "Failed on submitting the problem" + msgstr "Falló al presentar el problema" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:808 ++#: ../src/lib/ureport.c:862 + #, c-format + msgid "The server at '%s' responded with an error: '%s'" + msgstr "El servidor en ‘%s’ respondió con un error: ‘%s’" +@@ -1356,6 +1440,29 @@ msgid "Essential element '%s' is missing, can't continue" + msgstr "Falta elemento esencial '%s', no se puede continuar" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:478 ../src/plugins/reporter-bugzilla.c:355 ++#, c-format ++msgid "Can't parse backtrace: %s" ++msgstr "No se pudo analizar el trazado: %s" ++ ++#: ../src/lib/problem_report.c:489 ../src/plugins/reporter-bugzilla.c:366 ++msgid "Can't generate stacktrace description (no crash thread?)" ++msgstr "No se puede generar descripción de pila de trazado (¿hilo sin fallo?)" ++ ++#: ../src/lib/reported_to.c:52 ++msgid "Report result label mustn't be empty string." ++msgstr "La etiqueta del resultado no puede estar vacía." ++ ++#: ../src/lib/reported_to.c:58 ++msgid "Report result label mustn't contain ':' character." ++msgstr "La etiqueta del resultado no puede contener el carácter ':'." ++ ++#: ../src/lib/reported_to.c:141 ++#, c-format ++msgid "Ignored invalid ISO date of report result '%s'" ++msgstr "Se descarta fecha errónea del resultado: '%s'" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/run_event.c:791 + #, c-format + msgid "('%s' was killed by signal %u)\n" +@@ -1441,13 +1548,14 @@ msgstr "Reportar al rastreador de errores de Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:3 +-msgid "Bugzilla URL" +-msgstr "URL de Bugzilla" ++#: ../src/plugins/report_Uploader.xml.in.h:6 ++msgid "User name" ++msgstr "Nombre de usuario" + +-# translation auto-copied from project libreport, version master, document libreport ++# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades + #: ../src/plugins/report_Bugzilla.xml.in.h:4 +-msgid "Address of Bugzilla server" +-msgstr "Dirección del servidor de Bugzilla" ++msgid "Bugzilla account user name" ++msgstr "Nombre de usuario de Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades + #: ../src/plugins/report_Bugzilla.xml.in.h:5 +@@ -1460,48 +1568,23 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:6 +-#: ../src/plugins/report_Uploader.xml.in.h:6 +-msgid "User name" +-msgstr "Nombre de usuario" +- +-# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/report_Bugzilla.xml.in.h:7 +-msgid "Bugzilla account user name" +-msgstr "Nombre de usuario de Bugzilla" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:5 + #: ../src/plugins/report_Uploader.xml.in.h:8 + msgid "Password" + msgstr "Contraseña" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/report_Bugzilla.xml.in.h:9 ++#: ../src/plugins/report_Bugzilla.xml.in.h:7 + msgid "Bugzilla account password" + msgstr "Contraseña de Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:10 +-#: ../src/plugins/report_RHTSupport.xml.in.h:7 +-#: ../src/plugins/report_uReport.xml.in.h:7 +-msgid "Verify SSL" +-msgstr "Verificar SSL " +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:11 +-#: ../src/plugins/report_RHTSupport.xml.in.h:8 +-#: ../src/plugins/report_uReport.xml.in.h:8 +-msgid "Check SSL key validity" +-msgstr "Revisar la validez de la llave SSL" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++#: ../src/plugins/report_Bugzilla.xml.in.h:8 + msgid "Restrict access" + msgstr "Restringir acceso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++#: ../src/plugins/report_Bugzilla.xml.in.h:9 + msgid "" + "Restrict access to the created bugzilla ticket allowing only users from " + "specified groups to view it (see advanced settings for more details)" +@@ -1511,12 +1594,50 @@ msgstr "" + "más detalles)" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:10 ++msgid "Groups" ++msgstr "Grupos" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:11 ++msgid "" ++"Restrict the access to specified groups <a href=\"https://github.com/abrt/" ++"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++msgstr "" ++"Restringe el acceso a los grupos especificados <a href=\"https://github." ++"com/abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++msgid "Bugzilla URL" ++msgstr "URL de Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++msgid "Address of Bugzilla server" ++msgstr "Dirección del servidor de Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:14 ++#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_uReport.xml.in.h:7 ++msgid "Verify SSL" ++msgstr "Verificar SSL " ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_uReport.xml.in.h:8 ++msgid "Check SSL key validity" ++msgstr "Revisar la validez de la llave SSL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:16 + msgid "Bugzilla product" + msgstr "Producto Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_Bugzilla.xml.in.h:17 + msgid "" + "Specify this only if you needed different product than specified in /etc/os-" + "release" +@@ -1525,12 +1646,12 @@ msgstr "" + "en /etc/os-release" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:16 ++#: ../src/plugins/report_Bugzilla.xml.in.h:18 + msgid "Bugzilla product version" + msgstr "Versión de producto Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:17 ++#: ../src/plugins/report_Bugzilla.xml.in.h:19 + msgid "" + "Specify this only if you needed different product version than specified in /" + "etc/os-release" +@@ -1539,7 +1660,7 @@ msgstr "" + "especificada en /etc/os-release" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:18 ++#: ../src/plugins/report_Bugzilla.xml.in.h:20 + #: ../src/plugins/report_Kerneloops.xml.in.h:5 + #: ../src/plugins/report_RHTSupport.xml.in.h:13 + #: ../src/plugins/report_Uploader.xml.in.h:10 +@@ -1549,7 +1670,7 @@ msgid "HTTP Proxy" + msgstr "Proxy HTTP" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:19 ++#: ../src/plugins/report_Bugzilla.xml.in.h:21 + #: ../src/plugins/report_Kerneloops.xml.in.h:6 + #: ../src/plugins/report_RHTSupport.xml.in.h:14 + #: ../src/plugins/report_Uploader.xml.in.h:11 +@@ -1559,7 +1680,7 @@ msgid "Sets the proxy server to use for HTTP" + msgstr "Fija el servidor proxy para ser usado por HTTP" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:20 ++#: ../src/plugins/report_Bugzilla.xml.in.h:22 + #: ../src/plugins/report_Kerneloops.xml.in.h:7 + #: ../src/plugins/report_RHTSupport.xml.in.h:15 + #: ../src/plugins/report_Uploader.xml.in.h:12 +@@ -1569,7 +1690,7 @@ msgid "HTTPS Proxy" + msgstr "Proxy HTTPS" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:21 ++#: ../src/plugins/report_Bugzilla.xml.in.h:23 + #: ../src/plugins/report_Kerneloops.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:16 + #: ../src/plugins/report_Uploader.xml.in.h:13 +@@ -1578,20 +1699,6 @@ msgstr "Proxy HTTPS" + msgid "Sets the proxy server to use for HTTPS" + msgstr "Fija el servidor proxy para ser usado por HTTPS" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:22 +-msgid "Groups" +-msgstr "Grupos" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:23 +-msgid "" +-"Restrict the access to specified groups <a href=\"https://github.com/abrt/" +-"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +-msgstr "" +-"Restringe el acceso a los grupos especificados <a href=\"https://github." +-"com/abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +- + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades + #: ../src/plugins/report.c:37 + msgid "" +@@ -1628,18 +1735,8 @@ msgstr "'strata' o 'bugzilla'" + msgid "Ticket/case ID" + msgstr "ID de tíquet / caso" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:355 +-#, c-format +-msgid "Can't parse backtrace: %s" +-msgstr "No se pudo analizar el trazado: %s" +- +-#: ../src/plugins/reporter-bugzilla.c:366 +-msgid "Can't generate stacktrace description (no crash thread?)" +-msgstr "No se puede generar descripción de pila de trazado (¿hilo sin fallo?)" +- + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:764 ++#: ../src/plugins/reporter-bugzilla.c:762 + msgid "" + "Warning, private ticket groups already specified as cmdline argument, " + "ignoring the env variable and configuration" +@@ -1649,39 +1746,39 @@ msgstr "" + "configuración." + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:775 +-#: ../src/plugins/reporter-rhtsupport.c:342 ++#: ../src/plugins/reporter-bugzilla.c:773 ++#: ../src/plugins/reporter-rhtsupport.c:377 + msgid "Can't continue without login" + msgstr "No puede continuar sin iniciar sesión" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:788 +-#: ../src/plugins/reporter-rhtsupport.c:355 ++#: ../src/plugins/reporter-bugzilla.c:786 ++#: ../src/plugins/reporter-rhtsupport.c:390 + msgid "Can't continue without password" + msgstr "No puede continuar sin contraseña" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:797 ++#: ../src/plugins/reporter-bugzilla.c:795 + #, c-format + msgid "Logging into Bugzilla at %s" + msgstr "Ingresando a Bugzilla en '%s'" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:801 ++#: ../src/plugins/reporter-bugzilla.c:799 + msgid "Invalid password or login. Please enter your BZ login:" + msgstr "" + "Contraseña o usuario inválido. Por favor, introduce tu nombre de usuario BZ:" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:804 +-#: ../src/plugins/reporter-rhtsupport.c:369 ++#: ../src/plugins/reporter-bugzilla.c:802 ++#: ../src/plugins/reporter-rhtsupport.c:404 + #, c-format + msgid "Invalid password or login. Please enter the password for '%s':" + msgstr "" + "Contraseña o usuario inválido. Por favor, introduce tu contraseña para '%s'" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:823 ++#: ../src/plugins/reporter-bugzilla.c:821 + msgid "" + "\n" + "& [-vbf] [-g GROUP-NAME]... [-c CONFFILE]... [-F FMTFILE] [-A FMTFILE2] -d " +@@ -1773,77 +1870,78 @@ msgstr "" + "Si no se especifica, CONFFILE se predetermina a " + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:896 +-#: ../src/plugins/reporter-rhtsupport.c:472 ++#: ../src/plugins/reporter-bugzilla.c:894 ++#: ../src/plugins/reporter-rhtsupport.c:511 + msgid "Configuration file (may be given many times)" + msgstr "Archivo de configuración (puede aparecer más de una vez)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:897 ++#: ../src/plugins/reporter-bugzilla.c:895 + msgid "Formatting file for initial comment" + msgstr "Formateando archivos para comentario inicial..." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:898 ++#: ../src/plugins/reporter-bugzilla.c:896 + msgid "Formatting file for duplicates" + msgstr "Formateando archivos para duplicados..." + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-bugzilla.c:897 + msgid "Attach FILEs [to bug with this ID]" + msgstr "Adjuntar ARCHIVOS [para error con id ID]" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:900 ++#: ../src/plugins/reporter-bugzilla.c:898 + msgid "When creating bug, attach binary files too" + msgstr "Al crear el informe, adjuntar también los archivos binarios " + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:901 +-#: ../src/plugins/reporter-rhtsupport.c:474 ++#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-rhtsupport.c:513 + msgid "Force reporting even if this problem is already reported" + msgstr "Reportar incluso si este problema ya ha sido reportado" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:902 ++#: ../src/plugins/reporter-bugzilla.c:900 + msgid "Add bugzilla user to CC list [of bug with this ID]" + msgstr "Añadir el usuario de Bugzilla a la lista CC [de error con este ID]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:903 ++#: ../src/plugins/reporter-bugzilla.c:901 + msgid "Print BUG_ID which has given DUPHASH" + msgstr "Imprime el BUG_ID al que se le dio el DUPHASH" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:904 ++#: ../src/plugins/reporter-bugzilla.c:902 + msgid "A name of bug tracker for an additional URL from 'reported_to'" + msgstr "Un rastreador de errores para una URL adicional desde 'reported_to'" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:905 ++#: ../src/plugins/reporter-bugzilla.c:903 + msgid "Restrict access to this group only" + msgstr "Restringir acceso a este grupo solamente" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:906 ++#: ../src/plugins/reporter-bugzilla.c:904 ../src/plugins/reporter-mailx.c:284 ++#: ../src/plugins/reporter-rhtsupport.c:517 + msgid "Debug" + msgstr "Depurar" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:948 ++#: ../src/plugins/reporter-bugzilla.c:949 + msgid "Looking for similar problems in bugzilla" + msgstr "Búsqueda de problemas similares en bugzilla" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:975 ++#: ../src/plugins/reporter-bugzilla.c:976 + msgid "Login is not provided by configuration. Please enter your BZ login:" + msgstr "" + "No se ha proporcioando el nombre de usuario. Por favor, introduzca su " + "usuario BZ:" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:981 +-#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-bugzilla.c:982 ++#: ../src/plugins/reporter-rhtsupport.c:551 + #, c-format + msgid "" + "Password is not provided by configuration. Please enter the password for " +@@ -1853,7 +1951,7 @@ msgstr "" + "para '%s':" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:1000 ++#: ../src/plugins/reporter-bugzilla.c:1001 + msgid "" + "Can't get Bugzilla ID because this problem has not yet been reported to " + "Bugzilla." +@@ -1862,7 +1960,7 @@ msgstr "" + "reportado todavía." + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:1007 ++#: ../src/plugins/reporter-bugzilla.c:1008 + #, c-format + msgid "" + "This problem has been reported to Bugzilla '%s' which differs from the " +@@ -1872,89 +1970,111 @@ msgstr "" + "Bugzilla '%s' especificado en la configuración." + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:1011 ++#: ../src/plugins/reporter-bugzilla.c:1012 + #, c-format + msgid "Malformed url to Bugzilla '%s'." + msgstr "URL inválida para Bugzilla '%s'." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1015 ++#: ../src/plugins/reporter-bugzilla.c:1016 + #, c-format + msgid "Using Bugzilla ID '%s'" + msgstr "Uso del ID de Bugzilla '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1049 +-#: ../src/plugins/reporter-bugzilla.c:1341 ++#: ../src/plugins/reporter-bugzilla.c:1050 ++#: ../src/plugins/reporter-bugzilla.c:1220 ++#: ../src/plugins/reporter-bugzilla.c:1379 + msgid "Logging out" + msgstr "Salida " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1100 ++#: ../src/plugins/reporter-bugzilla.c:1101 + msgid "Can't determine Bugzilla Product from problem data." + msgstr "" + "No se puede determinar el producto Bugzilla desde los datos del problema." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1151 ++#: ../src/plugins/reporter-bugzilla.c:1152 + msgid "Checking for duplicates" + msgstr "Búsqueda de duplicados" + ++#: ../src/plugins/reporter-bugzilla.c:1201 ++#, c-format ++msgid "" ++"You have requested to make your data accessible only to a specific group and " ++"this bug is a duplicate of bug: %s/%u In case of bug duplicates a new " ++"comment is added to the original bug report but access to the comments " ++"cannot be restricted to a specific group. Would you like to open a new bug " ++"report and close it as DUPLICATE of the original one? Otherwise, the bug " ++"reporting procedure will be terminated." ++msgstr "" ++"Ha solicitado que sólo un grupo concreto tenga acceso a los datos, pero el " ++"error es un duplicado de %s/%u. Para los duplicados se suele añadir un " ++"comentario en el informe original, pero no es posible restringir el acceso. " ++"En lugar de eso, ¿quiere abrir un nuevo informe restringido y cerrarlo como " ++"duplicado del original? Si no, el proceso acabará aquí." ++ + # translation auto-copied from project libreport, version master, document libreport + #. Create new bug +-#: ../src/plugins/reporter-bugzilla.c:1197 ++#: ../src/plugins/reporter-bugzilla.c:1228 + msgid "Creating a new bug" + msgstr "Creación de un informe de error" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:1218 ++#: ../src/plugins/reporter-bugzilla.c:1249 + msgid "Failed to create a new bug." + msgstr "Falló al crear un informe de error ." + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:1229 ++#: ../src/plugins/reporter-bugzilla.c:1260 + #, c-format + msgid "Adding External URL to bug %i" + msgstr "Adición de URL externa al error %i" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:1235 ++#: ../src/plugins/reporter-bugzilla.c:1266 + #, c-format + msgid "Adding attachments to bug %i" + msgstr "Adición de adjuntos al error %i" + ++#: ../src/plugins/reporter-bugzilla.c:1280 ++#, c-format ++msgid "Closing bug %i as duplicate of bug %i" ++msgstr "Cerrando el error %i como duplicado de %i" ++ + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:1254 ++#: ../src/plugins/reporter-bugzilla.c:1292 + #, c-format + msgid "Bug is already reported: %i" + msgstr "El error ya fue reportado: %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1297 ++#: ../src/plugins/reporter-bugzilla.c:1335 + #, c-format + msgid "Adding %s to CC list" + msgstr "Se añade %s a la lista CC" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:1314 ++#: ../src/plugins/reporter-bugzilla.c:1352 + #, c-format + msgid "Adding new comment to bug %d" + msgstr "Se añade un nuevo comentario al error %d" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:1328 ++#: ../src/plugins/reporter-bugzilla.c:1366 + msgid "Attaching better backtrace" + msgstr "Se añade un mejor trazado" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1336 ++#: ../src/plugins/reporter-bugzilla.c:1374 + msgid "Found the same comment in the bug history, not adding a new one" + msgstr "" + "Se encontró el mismo comentario en este historial de errores, no se añade " + "uno nuevo" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-bugzilla.c:1344 ++#: ../src/plugins/reporter-bugzilla.c:1382 + #, c-format + msgid "Status: %s%s%s %s/show_bug.cgi?id=%u" + msgstr "Estatus: %s%s%s %s/show_bug.cgi?id=%u" +@@ -1993,12 +2113,12 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/reporter-kerneloops.c:167 +-#: ../src/plugins/reporter-ureport.c:74 ++#: ../src/plugins/reporter-ureport.c:79 + msgid "Configuration file" + msgstr "Archivo de configuración" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-mailx.c:59 ++#: ../src/plugins/reporter-mailx.c:83 + #, c-format + msgid "" + "Email address of %s was not specified. Would you like to do so now? If not, " +@@ -2008,50 +2128,59 @@ msgstr "" + "no, se utilizará '%s'" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-mailx.c:66 ++#: ../src/plugins/reporter-mailx.c:90 + #, c-format + msgid "Please, type email address of %s:" + msgstr "Por favor, escriba la dirección de correo-e de %s:" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-mailx.c:73 ++#: ../src/plugins/reporter-mailx.c:97 + #, c-format + msgid "Can't continue without email address of %s" + msgstr "No se puede continuar sin dirección de correo-e de %s" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-mailx.c:135 ++#: ../src/plugins/reporter-mailx.c:206 ../src/plugins/reporter-mailx.c:211 + msgid "Sending an email..." + msgstr "Enviando un correo..." + ++#: ../src/plugins/reporter-mailx.c:209 ++#, c-format ++msgid "Sending a notification email to: %s" ++msgstr "Enviando una notificación a: %s" ++ + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-mailx.c:158 ++#: ../src/plugins/reporter-mailx.c:237 + #, c-format + msgid "Email was sent to: %s" + msgstr "Se envió un correo-e a %s" + +-# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-mailx.c:178 ++#: ../src/plugins/reporter-mailx.c:258 + msgid "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Sends contents of a problem directory DIR via email\n" + "\n" + "If not specified, CONFFILE defaults to " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" +-"Envía contenido del directorio de problemas DIR a través de correo-e\n" ++"Envía el contenido del directorio de problemas DIR mediante correo " ++"electrónico\n" + "\n" +-"Si no se especifica, CONFFILE se predetermina a " ++"Si no se especifica, CONFFILE vale " + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-mailx.c:199 ../src/plugins/reporter-upload.c:250 ++#: ../src/plugins/reporter-mailx.c:281 ../src/plugins/reporter-upload.c:189 + msgid "Config file" + msgstr "Archivo de configuración" + ++#: ../src/plugins/reporter-mailx.c:282 ++msgid "Formatting file for an email" ++msgstr "Archivo de formato para correo electrónico" ++ + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-mailx.c:200 ++#: ../src/plugins/reporter-mailx.c:283 + msgid "Notify only (Do not mark the report as sent)" + msgstr "Solo notificar (no marcar el informe como enviado)" + +@@ -2094,41 +2223,40 @@ msgstr "" + "No se puede abrir %s para escritura. Por favor, seleccione otro archivo:" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was appended to %s" + msgstr "Se añadió el informe a %s" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was stored to %s" + msgstr "Se guardó el informe en %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:259 +-#: ../src/plugins/reporter-ureport.c:237 ++#: ../src/plugins/reporter-rhtsupport.c:294 ++#: ../src/plugins/reporter-ureport.c:297 + #, c-format + msgid "Server responded with an error: '%s'" + msgstr "El servidor respondió con un error: ‘%s’" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:319 ++#: ../src/plugins/reporter-rhtsupport.c:354 + msgid "Do you still want to create a RHTSupport ticket?" + msgstr "¿Aún desea crear un tíque de RHTSupport?" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:367 ++#: ../src/plugins/reporter-rhtsupport.c:402 + msgid "Invalid password or login. Please enter your Red Hat login:" + msgstr "" + "Nombre de usuario o contraseña inválidos. Por favor, introduzca sus " + "credenciales de acceso de Red Hat:" + +-# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:435 ++#: ../src/plugins/reporter-rhtsupport.c:471 + msgid "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -2137,104 +2265,136 @@ msgid "" + "If not specified, CONFFILE defaults to " + msgstr "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "o:\n" +-"& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" ++"& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] ARCHIVO...\n" + "\n" + "Reporta el problema a RHTSupport.\n" + "\n" +-"Si no se especifica, CONFFILE se predetermina a" ++"Si no se especifica, CONFFILE vale " + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:473 ++#: ../src/plugins/reporter-rhtsupport.c:512 + msgid "Upload FILEs [to case with this ID]" + msgstr "Cargar ARCHIVOS [para el caso con id ID]" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:475 ++#: ../src/plugins/reporter-rhtsupport.c:514 + msgid "Submit uReport before creating a new case" + msgstr "Enviar uReport antes de crear un nuevo caso" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:476 ++#: ../src/plugins/reporter-rhtsupport.c:515 + msgid "Configuration file for uReport" + msgstr "Archivo de configuración para uReport" + ++#: ../src/plugins/reporter-rhtsupport.c:516 ++msgid "Formatting file for a new case" ++msgstr "Archivo de formato para los nuevos casos" ++ + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:504 ++#: ../src/plugins/reporter-rhtsupport.c:545 + msgid "Login is not provided by configuration. Please enter your RHTS login:" + msgstr "" + "La configuración no proporciona un nombre de usuario, ingrese su nombre de " + "usuario RHTS:" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:573 ++#: ../src/plugins/reporter-rhtsupport.c:614 + #, c-format + msgid "Attaching '%s' to case '%s'" + msgstr "Adjuntando '%s' al caso '%s'" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:610 ++#: ../src/plugins/reporter-rhtsupport.c:651 + msgid "Sending ABRT crash statistics data" + msgstr "Envío de estadísticas de fallos ABRT" + ++#: ../src/plugins/reporter-rhtsupport.c:674 ++msgid "" ++"The problem has only occurred once and the ability to reproduce the problem " ++"is unknown. Please ensure you will be able to provide detailed information " ++"to our Support Team. Would you like to continue and open a new support case?" ++msgstr "" ++"El problema ha ocurrido una vez y no se sabe si es reproducible. Asegúrese " ++"de que podrá dar información detallada el equipo de soporte. ¿Desea " ++"continuar y abrir un caso de soporte?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:690 ++#, c-format ++msgid "" ++"The crashed program was released by '%s'. Would you like to report the " ++"problem to Red Hat Support?" ++msgstr "" ++"El programa del error pertenece a '%s'. ¿Quiere enviar el informe al soporte " ++"de Red Hat?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:708 ++#, c-format ++msgid "" ++"The program '%s' does not appear to be provided by Red Hat. Would you like " ++"to report the problem to Red Hat Support?" ++msgstr "" ++"No parece que el programa '%s' le haya llegado mediante Red Hat. ¿Quiere " ++"enviar el informe al soporte de Red Hat?" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/reporter-rhtsupport.c:725 ++msgid "Can't create a temporary directory in " ++msgstr "No se puede crear un directorio temporal en" ++ + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades + #. Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing + #. error msg is already logged by dd_opendir +-#. Gzipping e.g. 0.5gig coredump takes a while. Let client know what we are doing +-#: ../src/plugins/reporter-rhtsupport.c:621 +-#: ../src/plugins/reporter-upload.c:52 ++#. Compressing e.g. 0.5gig coredump takes a while. Let client know what we are doing ++#: ../src/plugins/reporter-rhtsupport.c:793 ++#: ../src/plugins/reporter-upload.c:103 + msgid "Compressing data" + msgstr "Compresión de datos" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:656 +-msgid "Can't create a temporary directory in " +-msgstr "No se puede crear un directorio temporal en" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:665 ++#: ../src/plugins/reporter-rhtsupport.c:801 + msgid "Can't create temporary file in " + msgstr "No se puede crear un archivo temporal en" + + # translation auto-copied from project libreport, version master, document libreport + #. Check for hints and show them if we have something +-#: ../src/plugins/reporter-rhtsupport.c:676 ++#: ../src/plugins/reporter-rhtsupport.c:812 + msgid "Checking for hints" + msgstr "Comprobando sugerencias..." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:686 ++#: ../src/plugins/reporter-rhtsupport.c:822 + msgid "Creating a new case" + msgstr "Creación de un caso" + + #. How can we help user sorting out this problem? +-#: ../src/plugins/reporter-rhtsupport.c:697 ++#: ../src/plugins/reporter-rhtsupport.c:833 + msgid "Can't determine RH Support Product from problem data." + msgstr "" + "No se puede determinar RH Support Product desde los datos del problema." + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:753 ++#: ../src/plugins/reporter-rhtsupport.c:889 + msgid "Linking ABRT crash statistics record with the case" + msgstr "Enlace de estadísticas de errores ABRT con el caso " + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:766 ++#: ../src/plugins/reporter-rhtsupport.c:902 + #, c-format + msgid "Linking ABRT crash statistics record with contact email: '%s'" + msgstr "" + "Enlace de estadísticas de errores ABRT con el correo-e de contacto: '%s'" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-rhtsupport.c:790 ++#: ../src/plugins/reporter-rhtsupport.c:926 + #, c-format + msgid "Adding comment to case '%s'" + msgstr "Adición de comentario al caso ‘%s’" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades + #. Attach the tarball of -d DIR +-#: ../src/plugins/reporter-rhtsupport.c:808 ++#: ../src/plugins/reporter-rhtsupport.c:944 + #, c-format + msgid "Attaching problem data to case '%s'" + msgstr "Vinculación de datos de problema al caso ‘%s’" +@@ -2250,47 +2410,58 @@ msgid "Updates which possibly help: " + msgstr "Actualizaciones que podrían ser de ayuda:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:30 ++#: ../src/plugins/reporter-upload.c:29 + msgid "Can't continue without URL" + msgstr "No se puede continuar sin URL" + +-#: ../src/plugins/reporter-upload.c:61 +-msgid "Upload URL is not provided by configuration. Please enter upload URL:" +-msgstr "La configuración no proporciona la URL cargada:" +- + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades + #. Be permissive and nice, ask only once and don't check + #. the result. User can dismiss this prompt but the upload + #. may work somehow??? +-#: ../src/plugins/reporter-upload.c:164 ++#: ../src/plugins/reporter-upload.c:51 + msgid "Please enter password for uploading:" + msgstr "Introduzca su contraseña para la subida:" + + # translation auto-copied from project libreport, version master, document libreport + #. success +-#: ../src/plugins/reporter-upload.c:181 ++#: ../src/plugins/reporter-upload.c:120 + #, c-format + msgid "Archive is created: '%s'" + msgstr "Se creó el archivo: '%s'" + +-# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-upload.c:222 ++#: ../src/plugins/reporter-upload.c:159 + msgid "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Uploads compressed tarball of problem directory DIR to URL.\n" + "If URL is not specified, creates tarball in " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Sube el tarball comprimido del directorio de problema DIR a URL.\n" + "Si la URL no se especifica, crea un tarball en " + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-upload.c:251 ++#: ../src/plugins/reporter-upload.c:190 + msgid "Base URL to upload to" + msgstr "URL base para subir a " + ++#: ../src/plugins/reporter-upload.c:191 ++msgid "SSH public key file" ++msgstr "Archivo de clave pública SSH" ++ ++#: ../src/plugins/reporter-upload.c:192 ++msgid "SSH private key file" ++msgstr "Archivo de clave privada SSH" ++ ++#: ../src/plugins/reporter-upload.c:221 ++msgid "" ++"Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:" ++"" ++msgstr "" ++"Introduzca una URL (scp, ftp, etc...) de destino para exportar los datos del " ++"problema:" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Kerneloops.xml.in.h:1 + msgid "Kerneloops.org" +@@ -2417,12 +2588,12 @@ msgid "Red Hat customer password" + msgstr "Contraseña de cliente de Red Hat" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/report_RHTSupport.xml.in.h:9 ++#: ../src/plugins/report_RHTSupport.xml.in.h:7 + msgid "Submit uReport" + msgstr "Enviar uReport" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/report_RHTSupport.xml.in.h:10 ++#: ../src/plugins/report_RHTSupport.xml.in.h:8 + msgid "" + "Submit <a href=\"https://access.redhat.com/articles/642323\">micro-" + "report</a> when creating a new case." +@@ -2431,12 +2602,12 @@ msgstr "" + "642323\">uReport</a> como un nuevo caso." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_RHTSupport.xml.in.h:9 + msgid "RH Portal URL" + msgstr "URL del portal de Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_RHTSupport.xml.in.h:10 + msgid "Address of the Red Hat support portal" + msgstr "Dirección del portal de soporte de Red Hat" + +@@ -2498,6 +2669,22 @@ msgstr "Proxy FTP" + msgid "Sets the proxy server to use for FTP" + msgstr "Especifica un servidor proxy para usar por FTP" + ++#: ../src/plugins/report_Uploader.xml.in.h:16 ++msgid "SSH Public key file" ++msgstr "Archivo de clave pública SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:17 ++msgid "Use this field to specify SSH public keyfile" ++msgstr "Indique el archivo de clave pública SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:18 ++msgid "SSH Private key file" ++msgstr "Archivo de clave privada SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:19 ++msgid "Use this field to specify SSH private keyfile" ++msgstr "Indique el archivo de clave privada SSH" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_uReport.xml.in.h:1 + msgid "uReport" +@@ -2584,52 +2771,52 @@ msgid "Bugzilla couldn't find parent of bug %d" + msgstr "Bugzilla no pudo hallar el padre del error %d" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/rhbz.c:893 ++#: ../src/plugins/rhbz.c:916 + msgid "Bug.search(quicksearch) return value did not contain member 'bugs'" + msgstr "Bug.search(búsqueda rápida) devolvió un valor sin el campo 'bugs'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:68 ++#: ../src/plugins/reporter-ureport.c:73 + msgid "Specify server URL" + msgstr "Especifique la URL del servidor" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:70 ++#: ../src/plugins/reporter-ureport.c:75 + msgid "Allow insecure connection to ureport server" + msgstr "Permitir conexión insegura al servidor uReport" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:71 ++#: ../src/plugins/reporter-ureport.c:76 + msgid "Use client authentication" + msgstr "Use autenticación de cliente" + +-#: ../src/plugins/reporter-ureport.c:72 ++#: ../src/plugins/reporter-ureport.c:77 + msgid "Use HTTP Authentication" + msgstr "Utilice autenticación HTTP" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:73 ++#: ../src/plugins/reporter-ureport.c:78 + msgid "Additional files included in 'auth' key" + msgstr "Archivos adicionales incluidos en la clave 'auth'" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:76 ++#: ../src/plugins/reporter-ureport.c:81 + msgid "bthash of uReport to attach (conflicts with -A)" + msgstr "bthash de uReport a adjuntar (en conflicto con -A)" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:78 ++#: ../src/plugins/reporter-ureport.c:83 + msgid "attach to a bthash from reported_to (conflicts with -a)" + msgstr "adjuntar a un bthash desde reported_to (en conflicto con -a)" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:80 ++#: ../src/plugins/reporter-ureport.c:85 + msgid "contact e-mail address (requires -a|-A, conflicts with -E)" + msgstr "" + "dirección de correo-e de contacto (requiere -a|-A, en conflicto con -E)" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:82 ++#: ../src/plugins/reporter-ureport.c:87 + msgid "" + "contact e-mail address from environment or configuration file (requires -a|-" + "A, conflicts with -e)" +@@ -2638,22 +2825,51 @@ msgstr "" + "a|-A, en conflicto con -E)" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:84 ++#: ../src/plugins/reporter-ureport.c:89 + msgid "attach RHBZ bug (requires -a|-A, conflicts with -B)" + msgstr "adjuntar el error RHBZ (requiere -a|-A, en conflicto con -E)" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:86 ++#: ../src/plugins/reporter-ureport.c:91 + msgid "" + "attach last RHBZ bug from reported_to (requires -a|-A, conflicts with -b)" + msgstr "" + "adjuntar el último error RHBZ de reported_to (requiere -a|-A, en conflicto " + "con -b)" + +-#: ../src/plugins/reporter-ureport.c:91 ++#: ../src/plugins/reporter-ureport.c:95 ++msgid "attach value (requires -a|-A and -T, conflicts with -L)" ++msgstr "adjuntar valor (requiere -a|-A y -T, en conflicto con -L)" ++ ++#: ../src/plugins/reporter-ureport.c:97 ++msgid "" ++"attach data of FIELD [URL] of the last report result (requires -a|-A, -r and " ++"-T, conflicts with -l)" ++msgstr "" ++"adjuntar datos del CAMPO [URL] del resultado del último informe (requiere -" ++"a|-A, -r y -T, en conflicto con -l)" ++ ++#: ../src/plugins/reporter-ureport.c:100 ++msgid "" ++"use REPORT_RESULT_TYPE when looking for FIELD in reported_to (used only with " ++"-L)" ++msgstr "" ++"usar TIPO_DE_RESULTADO_DE_INFORME al buscar CAMPO en reported_to (sólo se " ++"usa con -L)" ++ ++#: ../src/plugins/reporter-ureport.c:102 ++msgid "" ++"attach DATA as ureporte attachment ATTACHMENT_TYPE (used only with -l|-L)" ++msgstr "" ++"adjuntar DATOS como TIPO_DE_ADJUNTO al ureport (sólo se usa con -l|-L)" ++ ++#: ../src/plugins/reporter-ureport.c:107 + msgid "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2662,41 +2878,54 @@ msgid "" + "\n" + "Reads the default configuration from " + msgstr "" +-"& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " +-"-b bug-id -E -e email] [-d DIR]\n" +-"& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " +-"AUTH_ITEMS]\\\n" ++"& [-v] [-c ARCHIVO] [-u URL] [-k] [-t FUENTE] [-h CREDENCIALES] [-A -a " ++"bthash -B -b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T TIPO_DE_ADJUNTO -r TIPO_DE_RESULTADO_DE_INFORME -L CAMPO] " ++"[-d DIR]\n" ++" [-A -a bthash -T TIPO_DE_ADJUNTO -l DATOS] [-d DIR]\n" ++"& [-v] [-c ARCHIVO] [-u URL] [-k] [-t FUENTE] [-h CREDENCIALES] [-i " ++"ÍTEMS_AUTENTICACIÓN]\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" + "\n" +-"Carga un microinforme o agrega un adjunto al microinforme\n" ++"Enviar micro report o añadir adjunto a un micro report.\n" + "\n" +-"Lee la configuración predeteminada desde " ++"Lee la configuración de " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:144 ++#: ../src/plugins/reporter-ureport.c:179 + msgid "This problem does not have an uReport assigned." + msgstr "Este problema no tiene un uReport asignado." + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:157 ++#: ../src/plugins/reporter-ureport.c:192 + msgid "This problem has not been reported to Bugzilla." + msgstr "Este problema no fue reportado a Bugzilla." + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:161 ++#: ../src/plugins/reporter-ureport.c:196 + #, c-format + msgid "Unable to find bug ID in bugzilla URL '%s'" + msgstr "No se pudo encontrar el ID del error de Bugzilla en la URL '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:166 ++#: ../src/plugins/reporter-ureport.c:201 + #, c-format + msgid "Unable to parse bug ID from bugzilla URL '%s'" + msgstr "" + "No se pudo analizar el ID del error a partir de la URL de bugzilla '%s'" + ++#: ../src/plugins/reporter-ureport.c:211 ++#, c-format ++msgid "This problem has not been reported to '%s'." ++msgstr "Este problema no fue reportado a '%s'." ++ ++#: ../src/plugins/reporter-ureport.c:216 ++#, c-format ++msgid "The report result '%s' is missing URL." ++msgstr "Al resultado '%s' le falta la URL." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:179 ++#: ../src/plugins/reporter-ureport.c:233 + msgid "" + "Neither environment variable 'uReport_ContactEmail' nor configuration option " + "'ContactEmail' is set" +@@ -2704,22 +2933,22 @@ msgstr "" + "Ni la variable de entorno 'uReport_ContactEmail' ni la opción de " + "configuración 'ContactEmail' se han establecido" + +-#: ../src/plugins/reporter-ureport.c:185 ++#: ../src/plugins/reporter-ureport.c:239 + msgid "You need to specify bug ID, contact email or both" + msgstr "Debe especificar el ID del error, el correo-e de contacto o ambos" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:203 ++#: ../src/plugins/reporter-ureport.c:263 + msgid "You need to specify bthash of the uReport to attach." + msgstr "Necesita especificar el bthash del uReport a adjuntar." + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:208 ++#: ../src/plugins/reporter-ureport.c:268 + msgid "Not uploading an empty uReport" + msgstr "No se sube un uReport vacío" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/plugins/reporter-ureport.c:229 ++#: ../src/plugins/reporter-ureport.c:289 + msgid "This problem has already been reported." + msgstr "Este problema ya fue reportado." + +@@ -2891,7 +3120,17 @@ msgstr "Enviar la información del problema por correo-e" + msgid "Analyze the problem locally and send information via email" + msgstr "Analizar el problema en su sitio y enviar la información por correo-e" + +-# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades ++#: ../src/workflows/workflow_uReport.xml.in.h:1 ++msgid "Submit anonymous crash report" ++msgstr "Enviar informe anónimo" ++ ++#: ../src/workflows/workflow_uReport.xml.in.h:2 ++msgid "" ++"Submit anonymous crash report - I do not want to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Enviar informe anónimo: no quiero que el soporte de Red Hat contacte conmigo" ++ + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:1 + #: ../src/workflows/workflow_RHELKerneloops.xml.in.h:1 + #: ../src/workflows/workflow_RHELPython.xml.in.h:1 +@@ -2899,59 +3138,66 @@ msgstr "Analizar el problema en su sitio y enviar la información por correo-e" + #: ../src/workflows/workflow_RHELxorg.xml.in.h:1 + #: ../src/workflows/workflow_RHELLibreport.xml.in.h:1 + #: ../src/workflows/workflow_RHELJava.xml.in.h:1 +-msgid "Report to Red Hat Customer Portal" +-msgstr "Reportar al Portal de cliente de Red Hat" ++msgid "Ask Red Hat Support for help" ++msgstr "Solicitar ayuda al soporte de Red Hat" + +-# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:2 ++#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 ++#: ../src/workflows/workflow_RHELPython.xml.in.h:2 ++#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 ++#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 ++#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 ++#: ../src/workflows/workflow_RHELJava.xml.in.h:2 ++msgid "" ++"Create new Red Hat Support case - I would like to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Crear un nuevo caso de soporte Red Hat: quiero que el soporte de Red Hat " ++"contacte conmigo" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 ++msgid "Report to Red Hat Bugzilla" ++msgstr "Reportar a Red Hat Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport, author Alex Puchades + #: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:2 + msgid "Process the C/C++ crash using the Red Hat infrastructure" + msgstr "Procesar la caída de C/C++ mediante la infraestructura Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:2 + msgid "Process the kerneloops using the Red Hat infrastructure" + msgstr "Procesar el kerneloops mediante la infraestructura Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELPython.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:2 + msgid "Process the python exception using the Red Hat infrastructure" + msgstr "Procesar la excepción python mediante la infraestructura Red Hat" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:2 + msgid "Process the kernel crash using the Red Hat infrastructure" + msgstr "Procesar el cuelgue del kernel mediante la infraestructura Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:2 + msgid "Process the X Server problem using the Red Hat infrastructure" + msgstr "" + "Procesar el problema del Servidor X mediante la infraestructura Red Hat" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:2 + msgid "Process the problem using the Red Hat infrastructure" + msgstr "Procesar el problema mediante la infraestructura de Red Hat" + + # translation auto-copied from project libreport, version master, document libreport, author Alex Puchades +-#: ../src/workflows/workflow_RHELJava.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:2 + msgid "Process the Java exception using the Red Hat infrastructure" + msgstr "Procesar la excepción de Java mediante la infraestructura de Red Hat" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 +-msgid "Report to Red Hat Bugzilla" +-msgstr "Reportar a Red Hat Bugzilla" +diff --git a/po/fr.po b/po/fr.po +index d5db0d6..4f42e86 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -1,17 +1,19 @@ + # Sam Friedmann , 2015. #zanata ++# Jibec , 2016. #zanata ++# Sam Friedmann , 2016. #zanata + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2015-07-14 15:18+0200\n" ++"POT-Creation-Date: 2016-06-29 15:25+0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2015-07-17 01:29-0400\n" +-"Last-Translator: Sam Friedmann \n" ++"PO-Revision-Date: 2016-07-02 09:27-0400\n" ++"Last-Translator: Jibec \n" + "Language-Team: French\n" + "Language: fr\n" +-"X-Generator: Zanata 3.6.2\n" ++"X-Generator: Zanata 3.9.5\n" + "Plural-Forms: nplurals=2; plural=(n > 1)\n" + + # translation auto-copied from project libreport, version master, document libreport +@@ -23,9 +25,9 @@ msgid "" + " or: & [-vspy] -x PROBLEM_DIR" + msgstr "" + "& [-vsp] -L[PREFIX] [PROBLEM_DIR]\n" +-" or: & [-vspy] -e EVENT PROBLEM_DIR\n" +-" or: & [-vspy] -d PROBLEM_DIR\n" +-" or: & [-vspy] -x PROBLEM_DIR" ++" ou : & [-vspy] -e EVENT PROBLEM_DIR\n" ++" ou : & [-vspy] -d PROBLEM_DIR\n" ++" ou : & [-vspy] -x PROBLEM_DIR" + + # translation auto-copied from project libreport, version master, document libreport + #. short_name long_name value parameter_name help +@@ -58,7 +60,7 @@ msgstr "Afficher la version et quitter" + msgid "Noninteractive: don't ask questions, assume 'yes'" + msgstr "" + "Non-interactif : ne pose pas de questions et répond à toutes les questions " +-"par 'oui'" ++"par « oui »" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/cli/cli.c:93 +@@ -87,7 +89,7 @@ msgid "" + "# Backtrace\n" + "# Check that it does not contain any sensitive data (passwords, etc.)" + msgstr "" +-"# Backtrace\n" ++"# Trace arrière\n" + "# Vérifiez qu'il ne contient aucune donnée sensible (mots de passe, etc.)" + + # translation auto-copied from project libreport, version master, document libreport +@@ -213,37 +215,31 @@ msgstr "Sélectionnez un workflow à exécuter :" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:87 +-#, python-brace-format + msgid "Extracting cpio from {0}" + msgstr "Extraction de cpio depuis {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:92 +-#, python-brace-format + msgid "Can't write to '{0}': {1}" + msgstr "Écriture sur « {0} » impossible : {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:107 +-#, python-brace-format + msgid "Can't extract package '{0}'" + msgstr "Extraction du paquetage « {0} » impossible" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:115 +-#, python-brace-format + msgid "Caching files from {0} made from {1}" + msgstr "Mise en cache des fichiers de {0} effectuée à partir de {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:134 +-#, python-brace-format + msgid "Can't extract files from '{0}'" + msgstr "Extraction des fichiers de '{0}' impossible" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:147 +-#, python-brace-format + msgid "Can't remove '{0}': {1}" + msgstr "Suppression de '{0}' impossible : {1}" + +@@ -252,7 +248,6 @@ msgstr "Suppression de '{0}' impossible : {1}" + #. % (self.downloaded_pkgs + 1, self.total_pkgs, name, pct) + #. ) + #: ../src/client-python/debuginfo.py:194 ../src/client-python/debuginfo.py:205 +-#, python-brace-format + msgid "Downloading ({0} of {1}) {2}: {3:3}%" + msgstr "Téléchargement ({0} de {1}) {2} : {3:3}%" + +@@ -304,7 +299,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:356 +-#, python-brace-format + msgid "Can't setup {0}: {1}, disabling" + msgstr "Impossible d'installer {0} : {1}, désactivation" + +@@ -320,30 +314,27 @@ msgstr "Recherche des paquetages nécessités dans les référentiels" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:367 + msgid "Error retrieving metadata: '{0!s}'" +-msgstr "Erreur lors de la récupération des métadonnées : '{0!s}'" ++msgstr "Erreur lors de la récupération des métadonnées : « {0!s} »" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:380 + msgid "Error retrieving filelists: '{0!s}'" +-msgstr "Erreur lors de la récupération des listes de fichiers : '{0!s}'" ++msgstr "Erreur lors de la récupération des listes de fichiers : « {0!s} »" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:416 +-#, python-brace-format + msgid "Can't find packages for {0} debuginfo files" + msgstr "Les paquetages pour les fichiers debuginfo {0} sont introuvables" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:418 +-#, python-brace-format + msgid "Packages to download: {0}" + msgstr "Paquetages à télécharger : {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:419 +-#, python-brace-format + msgid "Downloading {0:.2f}Mb, installed size: {1:.2f}Mb. Continue?" +-msgstr "Téléchargement {0:.2f}Mo, taille installée : {1:.2f}Mo. Continuer ?" ++msgstr "Téléchargement {0:.2f}Mio, taille installée : {1:.2f}Mio. Continuer ?" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:424 ../src/client-python/debuginfo.py:438 +@@ -353,7 +344,6 @@ msgstr "Téléchargement annulé par l'utilisateur" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:434 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in tmp dir '{0}' ({1:.2f}Mb left). Continue?" + msgstr "" +@@ -362,7 +352,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:443 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in cache dir '{0}' ({1:.2f}Mb left). " + "Continue?" +@@ -372,13 +361,11 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:469 +-#, python-brace-format + msgid "Cannot copy file '{0}': {1}" + msgstr "Impossible de copier le fichier « {0} » : {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:487 +-#, python-brace-format + msgid "Downloading package {0} failed" + msgstr "Échec du téléchargement du paquetage {0}" + +@@ -393,7 +380,6 @@ msgstr "Échec de la décompression, téléchargement annulé..." + #. but it was appearing even if no packages were in fact extracted + #. (say, when there was one package, and it has download error). + #: ../src/client-python/debuginfo.py:504 +-#, python-brace-format + msgid "Removing {0}" + msgstr "Suppression de {0}" + +@@ -456,7 +442,7 @@ msgid "C_onfigure" + msgstr "C_onfigurer" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3472 ++#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3718 + msgid "_Close" + msgstr "_Fermer" + +@@ -489,7 +475,7 @@ msgstr "" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gtk-helpers/event_config_dialog.c:321 + #: ../src/gtk-helpers/workflow_config_dialog.c:86 +-#: ../src/gui-wizard-gtk/wizard.c:822 ../src/gui-wizard-gtk/wizard.c:3101 ++#: ../src/gui-wizard-gtk/wizard.c:844 ../src/gui-wizard-gtk/wizard.c:3325 + msgid "_Cancel" + msgstr "_Annuler" + +@@ -577,7 +563,7 @@ msgstr "" + msgid "Alternate GUI file" + msgstr "Fichier GUI alternatif" + +-#: ../src/gui-wizard-gtk/wizard.c:354 ++#: ../src/gui-wizard-gtk/wizard.c:378 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide the " +@@ -592,7 +578,7 @@ msgstr "" + "Pour en savoir plus sur la configuration, veuillez vous rendre sur : https://" + "access.redhat.com/site/articles/718083" + +-#: ../src/gui-wizard-gtk/wizard.c:357 ++#: ../src/gui-wizard-gtk/wizard.c:381 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide " +@@ -607,13 +593,13 @@ msgstr "" + "En savoir plus " + "sur la configuration" + +-#: ../src/gui-wizard-gtk/wizard.c:373 ++#: ../src/gui-wizard-gtk/wizard.c:397 + #, c-format + msgid "Con_figure %s" + msgstr "Con_figurer %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:400 ++#: ../src/gui-wizard-gtk/wizard.c:424 + #, c-format + msgid "" + "Need writable directory, but '%s' is not writable. Move it to '%s' and " +@@ -624,17 +610,17 @@ msgstr "" + "déplacées ?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:813 ++#: ../src/gui-wizard-gtk/wizard.c:835 + msgid "View/edit a text file" + msgstr "Voir/modifier un fichier texte" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:821 ++#: ../src/gui-wizard-gtk/wizard.c:843 + msgid "_Save" + msgstr "_Enregistrer" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1040 ++#: ../src/gui-wizard-gtk/wizard.c:1067 + msgid "" + "No reporting targets are defined for this problem. Check configuration in /" + "etc/libreport/*" +@@ -643,45 +629,69 @@ msgstr "" + "configuration dans " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1077 ++#: ../src/gui-wizard-gtk/wizard.c:1104 + #, c-format + msgid "(requires: %s)" + msgstr "(nécessite : %s)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1091 ++#: ../src/gui-wizard-gtk/wizard.c:1118 + #, c-format + msgid "(not needed, data already exist: %s)" + msgstr "(non nécessaire, les données existent déjà : %s)" + ++#: ../src/gui-wizard-gtk/wizard.c:1217 ++msgid "" ++"Since crashes without a known reproducer can be difficult to diagnose, " ++"please provide a comprehensive description of the problem you have " ++"encountered." ++msgstr "" ++"Comme les plantages non reproductibles peuvent être difficiles à " ++"diagnostiquer, veuillez fournir une description complète du problème que " ++"vous avez rencontré." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1224 ++msgid "" ++"Please provide a short description of the problem and please include the " ++"steps you have used to reproduce the problem." ++msgstr "" ++"Veuillez fournir une description courte du problème et bien vouloir inclure " ++"les étapes que vous avez réalisées pour reproduire le problème." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1231 ++msgid "Please provide the steps you have used to reproduce the problem." ++msgstr "" ++"Veuillez fournir les étapes que vous avez réalisées pour reproduire le " ++"problème." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1277 ++#: ../src/gui-wizard-gtk/wizard.c:1349 + msgid "(click here to view/edit)" + msgstr "(cliquer ici pour voir/éditer)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1288 ++#: ../src/gui-wizard-gtk/wizard.c:1360 + #, c-format + msgid "(binary file, %llu bytes)" + msgstr "(fichier binaire, %llu octets)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1395 ../src/report-newt/report-newt.c:334 ++#: ../src/gui-wizard-gtk/wizard.c:1467 ../src/report-newt/report-newt.c:334 + msgid "(no description)" + msgstr "(sans description)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1403 ++#: ../src/gui-wizard-gtk/wizard.c:1475 + #, c-format + msgid "%llu bytes, %u files" + msgstr "%llu octets, %u fichiers" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1647 ++#: ../src/gui-wizard-gtk/wizard.c:1752 + msgid "Processing was canceled" + msgstr "Le traitement a été annulé" + +-#: ../src/gui-wizard-gtk/wizard.c:1851 ++#: ../src/gui-wizard-gtk/wizard.c:1956 + msgid "" + "Processing of the problem failed. This can have many reasons but there are " + "three most common:\n" +@@ -695,7 +705,7 @@ msgstr "" + "\t▫ Problème de données corrompues\n" + "\t▫ Configuration invalide" + +-#: ../src/gui-wizard-gtk/wizard.c:1860 ++#: ../src/gui-wizard-gtk/wizard.c:1965 + msgid "" + "If you want to update the configuration and try to report again, please open " + "Preferences item\n" +@@ -709,66 +719,79 @@ msgstr "" + "changements de configuration." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1978 ++#: ../src/gui-wizard-gtk/wizard.c:2089 + msgid "Processing was interrupted because the problem is not reportable." + msgstr "" + "Le traitement a été interrompu car l'anomalir ne peut pas être l'objet d'un " + "rapport." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1988 ../src/gui-wizard-gtk/wizard.c:2057 ++#: ../src/gui-wizard-gtk/wizard.c:2099 ../src/gui-wizard-gtk/wizard.c:2168 + msgid "Processing failed." + msgstr "Échec du traitement." + + # translation auto-copied from project libreport, version master, document libreport + #. No next event, go to progress page and finish +-#: ../src/gui-wizard-gtk/wizard.c:1995 ../src/gui-wizard-gtk/wizard.c:2818 ++#: ../src/gui-wizard-gtk/wizard.c:2106 ../src/gui-wizard-gtk/wizard.c:3040 + msgid "Processing finished." + msgstr "Fin du traitement." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1996 ++#: ../src/gui-wizard-gtk/wizard.c:2107 + msgid "Processing finished, please proceed to the next step." + msgstr "Traitement terminé. Vous pouvez procéder à l'étape suivante." + + # translation auto-copied from project libreport, version master, document libreport + #. TODO: better msg? +-#: ../src/gui-wizard-gtk/wizard.c:2054 ++#: ../src/gui-wizard-gtk/wizard.c:2165 + #, c-format + msgid "No processing for event '%s' is defined" + msgstr "Aucune action liée à l'événement « %s » n'a été définie." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2068 ++#: ../src/gui-wizard-gtk/wizard.c:2179 + msgid "Processing interrupted: can't continue without writable directory." + msgstr "" + "Traitement interrompu : impossible de continuer sans répertoire inscriptible." + "" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2105 ++#: ../src/gui-wizard-gtk/wizard.c:2216 + msgid "Processing..." + msgstr "Traitement..." + ++#: ../src/gui-wizard-gtk/wizard.c:2297 ++msgid "" ++"Possible sensitive data detected, feel free to edit the report and remove " ++"them." ++msgstr "" ++"Des données sensibles ont été détectées, n'hésitez pas à modifier le rapport " ++"et à les supprimer." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2198 ++#: ../src/gui-wizard-gtk/wizard.c:2337 + msgid "Cannot check backtrace rating because of invalid event name" + msgstr "" + "Impossible de vérifier la trace arrière du fait d'un nom d'événement " + "invalide" + ++#: ../src/gui-wizard-gtk/wizard.c:2869 ++#, c-format ++msgid "Failed to save file '%s'" ++msgstr "Échec de la sauvegarde du fichier « %s »" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2838 ++#: ../src/gui-wizard-gtk/wizard.c:3060 + #, c-format + msgid "" + "Event '%s' requires permission to send possibly sensitive data.\n" + "Do you want to continue?" + msgstr "" +-"L'évenement « %s » demande la permission d'envoyer des données sensibles. " ++"L’évènement « %s » demande la permission d'envoyer des données sensibles. " + "Voulez-vous continuer ?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2886 ++#: ../src/gui-wizard-gtk/wizard.c:3108 + #, c-format + msgid "This problem should not be reported (it is likely a known problem). %s" + msgstr "" +@@ -776,106 +799,127 @@ msgstr "" + "connu). %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3102 ++#: ../src/gui-wizard-gtk/wizard.c:3326 + msgid "_Open" + msgstr "_Ouvrir" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3124 ++#: ../src/gui-wizard-gtk/wizard.c:3348 + #, c-format + msgid "'%s' is not an ordinary file" + msgstr "« %s » n'est pas un fichier ordinaire" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3138 ++#: ../src/gui-wizard-gtk/wizard.c:3362 + msgid "You are trying to copy a file onto itself" + msgstr "Vous essayez de copier un fichier sur lui-même" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3145 ++#: ../src/gui-wizard-gtk/wizard.c:3369 + #, c-format + msgid "Can't copy '%s': %s" + msgstr "Copie de « %s » impossible : %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3160 ++#: ../src/gui-wizard-gtk/wizard.c:3384 + #, c-format + msgid "Item '%s' already exists and is not modifiable" + msgstr "L'élément « %s » existe déjà et n'est pas modifiable" + ++#: ../src/gui-wizard-gtk/wizard.c:3542 ++msgid "I have experienced this problem for the first time" ++msgstr "C'est la première fois que je rencontre ce problème" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3545 ++msgid "I can reproduce this problem" ++msgstr "Je peux reproduire ce problème" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3548 ++msgid "This problem occurs repeatedly" ++msgstr "Ce problème à lieu répétitivement" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3314 ++#: ../src/gui-wizard-gtk/wizard.c:3560 + msgid "Include" + msgstr "Inclure" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3325 ++#: ../src/gui-wizard-gtk/wizard.c:3571 + msgid "Name" + msgstr "Nom" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3335 ++#: ../src/gui-wizard-gtk/wizard.c:3581 + msgid "Value" + msgstr "Valeur" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3369 ++#: ../src/gui-wizard-gtk/wizard.c:3615 + msgid "Problem description" + msgstr "Description de l'incident" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3370 ++#: ../src/gui-wizard-gtk/wizard.c:3616 + msgid "Select how to report this problem" + msgstr "Sélectionnez la manière dont vous souhaitez rapporter l'incident" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3371 ++#: ../src/gui-wizard-gtk/wizard.c:3617 + msgid "Provide additional information" + msgstr "Veuillez fournir des informations supplémentaires" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3372 ++#: ../src/gui-wizard-gtk/wizard.c:3618 + msgid "Review the data" + msgstr "Vérifier les données" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3373 ++#: ../src/gui-wizard-gtk/wizard.c:3619 + msgid "Confirm data to report" + msgstr "Confirmer les données à rapporter" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3374 ++#: ../src/gui-wizard-gtk/wizard.c:3620 + msgid "Processing" + msgstr "Traitement" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3375 ++#: ../src/gui-wizard-gtk/wizard.c:3621 + msgid "Processing done" + msgstr "Traitement terminé" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3474 ++#: ../src/gui-wizard-gtk/wizard.c:3720 + msgid "_Stop" + msgstr "Arrê_ter" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3477 ++#: ../src/gui-wizard-gtk/wizard.c:3723 + msgid "Upload for analysis" + msgstr "Téléversement pour analyse" + + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3480 ++#: ../src/gui-wizard-gtk/wizard.c:3726 + msgid "Repeat" + msgstr "Répéter" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3483 ++#: ../src/gui-wizard-gtk/wizard.c:3729 + msgid "_Forward" + msgstr "_Continuer" + +-#: ../src/gui-wizard-gtk/wizard.c:3575 ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.c:3780 ++msgid "Restrict access to the report" ++msgstr "Restreindre l'accès au rapport" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3785 ++msgid "Learn more about restricted access in the configuration" ++msgstr "En savoir plus sur l'accès restreint dans la configuration" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3844 + msgid "" + "In order to enable the built-in screencasting functionality the package fros-" + "gnome has to be installed. Please run the following command if you want to " +@@ -889,34 +933,8 @@ msgstr "" + "\n" + "su -c \"yum install fros-gnome\"" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:1 +-msgid "" +-"Possible sensitive data detected, feel free to edit the report and remove " +-"them." +-msgstr "" +-"Des données sensibles ont été détectées, n'hésitez pas à modifier le rapport " +-"et à les supprimer." +- + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:2 +-msgid "Restrict access to the report" +-msgstr "Restreindre l'accès au rapport" +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:3 +-msgid "" +-"No one except Red Hat employees will be allowed to see the report with " +-"restricted access (not even you)" +-msgstr "" +-"Hormis les employés de Red Hat, personne ne sera autorisé à voir le rapport " +-"avec un accès restreint (même pas vous)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:4 +-msgid "Read more about reports with restricted access" +-msgstr "En savoir plus sur les rapports avec accès restreint." +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++#: ../src/gui-wizard-gtk/wizard.glade.h:1 + msgid "" + "On the following screens, you will be asked to describe how the problem " + "occurred, to choose how to analyze the problem (if needed), to review " +@@ -929,12 +947,12 @@ msgstr "" + "rapporté. Veuillez cliquer sur « Suivant » pour continuer." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++#: ../src/gui-wizard-gtk/wizard.glade.h:2 + msgid "Details" + msgstr "Détails" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:7 ++#: ../src/gui-wizard-gtk/wizard.glade.h:3 + msgid "" + "How did this problem happen (step-by-step)? How can it be reproduced? Any " + "additional comments useful for diagnosing the problem? Please use English if " +@@ -945,14 +963,30 @@ msgstr "" + "utiles au diagnostic de cet incident ? Veuillez s'il-vous-plaît utiliser " + "l'anglais dans la mesure du possible." + ++#: ../src/gui-wizard-gtk/wizard.glade.h:4 ++msgid "How reproducible is this problem?" ++msgstr "À quel point ce problème est-il reproductible ?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++msgid "How it can be reproduced (one step per line)?" ++msgstr "Comment peut-il être reproduit (une étape par ligne) ?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++msgid "" ++"Please add a comprehensive description of the problem you have. This is a " ++"very long place holder." ++msgstr "" ++"Veuillez ajouter une description complète du problème que vous rencontrez. " ++"Ce contenant permet un texte très long." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:8 ++#: ../src/gui-wizard-gtk/wizard.glade.h:7 + msgid "You need to fill the how to before you can proceed..." + msgstr "" + "La section « Comment » doit être remplie avant de pouvoir continuer..." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++#: ../src/gui-wizard-gtk/wizard.glade.h:8 + msgid "" + "Your comments are not private. They may be included into publicly " + "visible problem reports." +@@ -961,6 +995,11 @@ msgstr "" + "des rapports d'anomalies publiques." + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++msgid "I don't know what caused this problem" ++msgstr "Je ne sais pas ce qui a causé cet incident" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:10 + msgid "If you don't know how to describe it, you can" + msgstr "Si vous ne savez pas le décrire, vous pouvez" +@@ -972,11 +1011,6 @@ msgstr "ajouter une diffusion d'écran" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:12 +-msgid "I don't know what caused this problem" +-msgstr "Je ne sais pas ce qui a causé cet incident" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Use this button to generate more informative backtrace after you installed " + "additional debug packages" +@@ -985,7 +1019,7 @@ msgstr "" + "avez installé les paquets de déboguage supplémentaires" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:14 ++#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Please review the data before it gets reported. Depending on reporter " + "chosen, it may end up publicly visible." +@@ -993,49 +1027,49 @@ msgstr "" + "Merci de passer en revue les données avant qu'elles ne soient rapportées. En " + "fonction du rapporteur choisi, elles peuvent être rendues publiques." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:15 ++#: ../src/gui-wizard-gtk/wizard.glade.h:14 + msgid "Forbidden words" + msgstr "Mots interdits" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:16 ++#: ../src/gui-wizard-gtk/wizard.glade.h:15 + msgid "Custom" + msgstr "Personnalisation" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:17 ++#: ../src/gui-wizard-gtk/wizard.glade.h:16 + msgid "Clear the search bar to see the list of security sensitive words." + msgstr "" + "Effacez la barre de recherche pour affichere la liste des mots liés à la " + "sécurité." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:18 ++#: ../src/gui-wizard-gtk/wizard.glade.h:17 + msgid "file" + msgstr "fichier" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:19 ++#: ../src/gui-wizard-gtk/wizard.glade.h:18 + msgid "data" + msgstr "données" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:20 ++#: ../src/gui-wizard-gtk/wizard.glade.h:19 + msgid "Search" + msgstr "Recherche" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:21 ++#: ../src/gui-wizard-gtk/wizard.glade.h:20 + msgid "Size:" + msgstr "Taille :" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:22 ++#: ../src/gui-wizard-gtk/wizard.glade.h:21 + msgid "Attach a file" + msgstr "Attacher un fichier" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:23 ++#: ../src/gui-wizard-gtk/wizard.glade.h:22 + msgid "I reviewed the data and _agree with submitting it" + msgstr "J'ai vérifié les données et donne mon _accord pour les soumettre" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:24 ++#: ../src/gui-wizard-gtk/wizard.glade.h:23 + msgid "" + "If you are reporting to a remote server, make sure you removed all private " + "data (such as usernames and passwords). Backtrace, command line, environment " +@@ -1048,24 +1082,24 @@ msgstr "" + "examinés." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:25 ++#: ../src/gui-wizard-gtk/wizard.glade.h:24 + msgid "Processing did not start yet" + msgstr "Le traitement n'a pas encore démarré" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:26 ++#: ../src/gui-wizard-gtk/wizard.glade.h:25 + msgid "Show log" + msgstr "Afficher le journal" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:27 ++#: ../src/gui-wizard-gtk/wizard.glade.h:26 + msgid "Reporting has finished. You can close this window now." + msgstr "" + "La création de rapports est terminée. Vous pouvez maintenant fermer cette " + "fenêtre." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:28 ++#: ../src/gui-wizard-gtk/wizard.glade.h:27 + msgid "" + "If you want to report the problem to a different destination, collect " + "additional information, or provide a better problem description and repeat " +@@ -1077,17 +1111,17 @@ msgstr "" + "« Suivant »." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1007 ++#: ../src/include/internal_libreport.h:1046 + msgid "Be verbose" + msgstr "Verbeux" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1008 +-#: ../src/plugins/reporter-bugzilla.c:895 ++#: ../src/include/internal_libreport.h:1047 ++#: ../src/plugins/reporter-bugzilla.c:893 + #: ../src/plugins/reporter-kerneloops.c:166 +-#: ../src/plugins/reporter-mailx.c:198 ../src/plugins/reporter-print.c:56 +-#: ../src/plugins/reporter-rhtsupport.c:471 +-#: ../src/plugins/reporter-upload.c:249 ++#: ../src/plugins/reporter-mailx.c:280 ../src/plugins/reporter-print.c:56 ++#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-upload.c:188 + msgid "Problem directory" + msgstr "Répertoire de l'incident" + +@@ -1145,7 +1179,7 @@ msgid "'%s' is not correct file name" + msgstr "« %s » n'est pas le nom du fichier correct" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/create_dump_dir.c:153 ++#: ../src/lib/create_dump_dir.c:150 + #, c-format + msgid "uid value is not valid: '%s'" + msgstr "la valeur de l'uid est invalide : « %s »" +@@ -1156,69 +1190,99 @@ msgstr "la valeur de l'uid est invalide : « %s »" + msgid "Uploaded: %llu of %llu kbytes" + msgstr "Téléchargé : %llu sur %llu Ko" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/curl.c:635 ++#: ../src/lib/curl.c:636 ++msgid "Ignoring URL without scheme and hostname" ++msgstr "Ignorer l'URL sans schéma et nom d'hôte" ++ ++#. Do not include the path part of the URL as it can contain sensitive data ++#. * in case of typos ++#: ../src/lib/curl.c:666 + #, c-format +-msgid "Sending %s to %s" +-msgstr "Envoi de %s sur %s" ++msgid "Sending %s to %s//%s" ++msgstr "Envoi de %s sur %s//%s" + +-#: ../src/lib/curl.c:659 ++#: ../src/lib/curl.c:690 + #, c-format +-msgid "Please enter user name for '%s':" +-msgstr "Veuillez saisir le nom d'utilisateur de « %s » :" ++msgid "Please enter user name for '%s//%s':" ++msgstr "Veuillez saisir le nom d'utilisateur de %s//%s :" + +-#: ../src/lib/curl.c:665 ++#: ../src/lib/curl.c:696 + #, c-format +-msgid "Please enter password for '%s':" +-msgstr "Veuillez saisir le mot de passe de « %s » :" ++msgid "Please enter password for '%s//%s@%s':" ++msgstr "Veuillez saisir le mot de passe pour '%s//%s@%s' :" + +-# translation auto-copied from project libreport, version master, document libreport + #. This ends up a "reporting status message" in abrtd +-#: ../src/lib/curl.c:688 ++#: ../src/lib/curl.c:719 ++#, c-format ++msgid "Successfully created %s" ++msgstr "%s créé" ++ ++#: ../src/lib/dump_dir.c:1545 ++msgid "Failed to open TAR writer" ++msgstr "Impossible d'ouvrir le rédacteur TAR" ++ ++#: ../src/lib/dump_dir.c:1571 ++msgid "Failed to finalize TAR archive" ++msgstr "La finalisation de l'archive TAR a échoué" ++ ++#: ../src/lib/dump_dir.c:1581 ++msgid "Failed to close TAR writer" ++msgstr "L'ouverture du rédacteur TAR à échoué" ++ ++#: ../src/lib/dump_dir.c:1591 + #, c-format +-msgid "Successfully sent %s to %s" +-msgstr "Envoi de %s sur %s réussi" ++msgid "gzip killed with signal %d" ++msgstr "gzip a été terminé par le signal %d" ++ ++#: ../src/lib/dump_dir.c:1597 ++#, c-format ++msgid "gzip exited with %d" ++msgstr "processus gzip terminé avec %d" ++ ++#: ../src/lib/dump_dir.c:1600 ++msgid "gzip process failed" ++msgstr "processus gzip échoué" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:348 ++#: ../src/lib/event_config.c:382 + msgid "Missing mandatory value" + msgstr "Une valeur nécessaire est manquante" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:356 ++#: ../src/lib/event_config.c:390 + #, c-format + msgid "Invalid utf8 character '%c'" + msgstr "Caractère utf8 invalide « %c »" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:369 ++#: ../src/lib/event_config.c:403 + #, c-format + msgid "Invalid number '%s'" + msgstr "Nombre invalide « %s »" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:384 ++#: ../src/lib/event_config.c:418 + #, c-format + msgid "Invalid boolean value '%s'" + msgstr "Valeur booléenne invalide : « %s »" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:390 ++#: ../src/lib/event_config.c:424 + msgid "Unsupported option type" + msgstr "Option de type non supportée" + +-#: ../src/lib/event_config.c:463 ++#: ../src/lib/event_config.c:497 + msgid "Reporting disabled because the rating does not contain a number." + msgstr "" + "L'envoi du rapport est désactivé car l'évaluation ne contient aucun chiffre." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:464 ++#: ../src/lib/event_config.c:498 + msgid "Please report this problem to ABRT project developers." + msgstr "Merci de rapporter cet incident aux développeurs du projet ABRT." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:470 ++#: ../src/lib/event_config.c:504 + msgid "" + "The backtrace is incomplete, please make sure you provide the steps to " + "reproduce." +@@ -1227,19 +1291,19 @@ msgstr "" + "le reproduire." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:471 ++#: ../src/lib/event_config.c:505 + msgid "The backtrace probably can't help developer to diagnose the bug." + msgstr "" + "La trace arrière n'aidera probablement pas les développeurs à diagnostiquer " + "le défaut." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:477 ++#: ../src/lib/event_config.c:511 + msgid "Reporting disabled because the backtrace is unusable." + msgstr "L'envoi du rapport est désactivé car le backtrace est inutilisable." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:481 ++#: ../src/lib/event_config.c:515 + #, c-format + msgid "" + "Please try to install debuginfo manually using the command: \"debuginfo-" +@@ -1249,14 +1313,29 @@ msgstr "" + "commande : « debuginfo-install %s » et de réessayer." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:483 ++#: ../src/lib/event_config.c:517 + msgid "A proper debuginfo is probably missing or the coredump is corrupted." + msgstr "" + "Des informations de débogage adéquates sont probablement manquantes, ou le " + "vidage du plantage (coredump) est corrompu." + ++#: ../src/lib/iso_date_string.c:48 ++#, c-format ++msgid "String doesn't seem to be a date: '%s'" ++msgstr "La chaîne ne semble pas être une date : « %s »" ++ ++#: ../src/lib/iso_date_string.c:53 ++#, c-format ++msgid "The date: '%s' has unrecognized suffix: '%s'" ++msgstr "La date : « %s » possède un suffixe non reconnu : « %s »" ++ ++#: ../src/lib/iso_date_string.c:58 ++#, c-format ++msgid "The date: '%s' is out of UNIX time stamp range" ++msgstr "La date : « %s » se trouve en dehors de la plage d'horodatage UNIX" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:354 ++#: ../src/lib/ureport.c:395 + #, c-format + msgid "Your problem seems to be caused by %s\n" + "\n" +@@ -1266,31 +1345,41 @@ msgstr "Votre incident semble être causé par %s\n" + "%s\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:357 ++#: ../src/lib/ureport.c:398 + msgid "Your problem seems to be caused by one of the following:\n" + msgstr "Votre incident semble avoir l'une des causes suivantes :\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:528 ++#: ../src/lib/ureport.c:570 + #, c-format + msgid "Failed to upload uReport to the server '%s' with curl: %s" + msgstr "Échec du téléversement du uReport au serveur « %s » avec curl : %s" + ++#: ../src/lib/ureport.c:574 ++#, c-format ++msgid "Failed to upload uReport to the server '%s'" ++msgstr "Échec du téléversement du uReport au serveur « %s »" ++ ++#: ../src/lib/ureport.c:577 ++#, c-format ++msgid "Error: %s" ++msgstr "Erreur : %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:534 ++#: ../src/lib/ureport.c:584 + #, c-format + msgid "The URL '%s' does not exist (got error 404 from server)" + msgstr "L'URL « %s » n'existe pas (erreur 404 renvoyée par le serveur)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:540 ++#: ../src/lib/ureport.c:590 + #, c-format + msgid "The server at '%s' encountered an internal error (got error 500)" + msgstr "" + "Le serveur à « %s » a rencontré une erreur interne (erreur 500 renvoyée)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:546 ++#: ../src/lib/ureport.c:596 + #, c-format + msgid "The server at '%s' currently can't handle the request (got error 503)" + msgstr "" +@@ -1299,19 +1388,19 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #. can't print better error message +-#: ../src/lib/ureport.c:555 ++#: ../src/lib/ureport.c:605 + #, c-format + msgid "Unexpected HTTP response from '%s': %d" + msgstr "Réponse HTTP inattendue de « %s » : %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:564 ++#: ../src/lib/ureport.c:614 + #, c-format + msgid "Unable to parse response from ureport server at '%s'" + msgstr "Impossible d'analyser la réponse du serveur ureport à « %s »" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:574 ++#: ../src/lib/ureport.c:624 + #, c-format + msgid "The response from '%s' has invalid format" + msgstr "La réponse de « %s » a un format invalide" +@@ -1319,18 +1408,18 @@ msgstr "La réponse de « %s » a un format invalide" + # translation auto-copied from project libreport, version master, document libreport + #. HTTP CODE 202 means that call was successful but the response + #. has an error message +-#: ../src/lib/ureport.c:580 ++#: ../src/lib/ureport.c:630 + #, c-format + msgid "Type mismatch has been detected in the response from '%s'" + msgstr "Une confusion de type a été détectée dans la réponse de « %s »" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:766 ../src/plugins/reporter-rhtsupport.c:198 ++#: ../src/lib/ureport.c:820 ../src/plugins/reporter-rhtsupport.c:233 + msgid "Failed on submitting the problem" + msgstr "Échec de la soumission du problème" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:808 ++#: ../src/lib/ureport.c:862 + #, c-format + msgid "The server at '%s' responded with an error: '%s'" + msgstr "Le serveur à « %s » a répondu par une erreur : « %s »" +@@ -1356,6 +1445,35 @@ msgid "Essential element '%s' is missing, can't continue" + msgstr "L'élément essentiel « %s » est manquant, impossible de continuer" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:478 ../src/plugins/reporter-bugzilla.c:355 ++#, c-format ++msgid "Can't parse backtrace: %s" ++msgstr "Impossible d'analyser la trace inverse : %s " ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:489 ../src/plugins/reporter-bugzilla.c:366 ++msgid "Can't generate stacktrace description (no crash thread?)" ++msgstr "" ++"Impossible de créer une description de la trace de la pile (ne concerne pas " ++"le fil d'exécution de la panne ?)" ++ ++#: ../src/lib/reported_to.c:52 ++msgid "Report result label mustn't be empty string." ++msgstr "" ++"Les étiquettes des résultats du rapport ne doivent pas être laissés vides." ++ ++#: ../src/lib/reported_to.c:58 ++msgid "Report result label mustn't contain ':' character." ++msgstr "" ++"L'étiquette des résultats du rapport ne doivent pas contenir le caractère \":" ++"\"" ++ ++#: ../src/lib/reported_to.c:141 ++#, c-format ++msgid "Ignored invalid ISO date of report result '%s'" ++msgstr "La date ISO non valide du résultat du rapport « %s » a été ignorée " ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/run_event.c:791 + #, c-format + msgid "('%s' was killed by signal %u)\n" +@@ -1441,13 +1559,14 @@ msgstr "Rapporter sur le suivi de bogues de Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:3 +-msgid "Bugzilla URL" +-msgstr "URL de Bugzilla" ++#: ../src/plugins/report_Uploader.xml.in.h:6 ++msgid "User name" ++msgstr "Nom d'utilisateur" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:4 +-msgid "Address of Bugzilla server" +-msgstr "Adresse du serveur Bugzilla" ++msgid "Bugzilla account user name" ++msgstr "Nom d'utilisateur du compte Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:5 +@@ -1460,48 +1579,23 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:6 +-#: ../src/plugins/report_Uploader.xml.in.h:6 +-msgid "User name" +-msgstr "Nom d'utilisateur" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:7 +-msgid "Bugzilla account user name" +-msgstr "Nom d'utilisateur du compte Bugzilla" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:5 + #: ../src/plugins/report_Uploader.xml.in.h:8 + msgid "Password" + msgstr "Mot de passe" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:9 ++#: ../src/plugins/report_Bugzilla.xml.in.h:7 + msgid "Bugzilla account password" + msgstr "Mot de passe du compte Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:10 +-#: ../src/plugins/report_RHTSupport.xml.in.h:7 +-#: ../src/plugins/report_uReport.xml.in.h:7 +-msgid "Verify SSL" +-msgstr "Vérifier SSL" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:11 +-#: ../src/plugins/report_RHTSupport.xml.in.h:8 +-#: ../src/plugins/report_uReport.xml.in.h:8 +-msgid "Check SSL key validity" +-msgstr "Vérifier la validité de la clé SSL" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++#: ../src/plugins/report_Bugzilla.xml.in.h:8 + msgid "Restrict access" + msgstr "Restreindre l'accès" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++#: ../src/plugins/report_Bugzilla.xml.in.h:9 + msgid "" + "Restrict access to the created bugzilla ticket allowing only users from " + "specified groups to view it (see advanced settings for more details)" +@@ -1511,12 +1605,50 @@ msgstr "" + "avancés pour plus de détails)" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:10 ++msgid "Groups" ++msgstr "Groupes" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:11 ++msgid "" ++"Restrict the access to specified groups <a href=\"https://github.com/abrt/" ++"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++msgstr "" ++"N'autoriser l'accès qu'aux groupes indiqués <a href=\"https://github.com/" ++"abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++msgid "Bugzilla URL" ++msgstr "URL de Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++msgid "Address of Bugzilla server" ++msgstr "Adresse du serveur Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:14 ++#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_uReport.xml.in.h:7 ++msgid "Verify SSL" ++msgstr "Vérifier SSL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_uReport.xml.in.h:8 ++msgid "Check SSL key validity" ++msgstr "Vérifier la validité de la clé SSL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:16 + msgid "Bugzilla product" + msgstr "Produit Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_Bugzilla.xml.in.h:17 + msgid "" + "Specify this only if you needed different product than specified in /etc/os-" + "release" +@@ -1525,12 +1657,12 @@ msgstr "" + "celui indiqué dans /etc/os-release" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:16 ++#: ../src/plugins/report_Bugzilla.xml.in.h:18 + msgid "Bugzilla product version" + msgstr "Version du produit Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:17 ++#: ../src/plugins/report_Bugzilla.xml.in.h:19 + msgid "" + "Specify this only if you needed different product version than specified in /" + "etc/os-release" +@@ -1539,7 +1671,7 @@ msgstr "" + "produit que celle indiquée dans /etc/os-release" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:18 ++#: ../src/plugins/report_Bugzilla.xml.in.h:20 + #: ../src/plugins/report_Kerneloops.xml.in.h:5 + #: ../src/plugins/report_RHTSupport.xml.in.h:13 + #: ../src/plugins/report_Uploader.xml.in.h:10 +@@ -1549,7 +1681,7 @@ msgid "HTTP Proxy" + msgstr "Mandataire HTTP" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:19 ++#: ../src/plugins/report_Bugzilla.xml.in.h:21 + #: ../src/plugins/report_Kerneloops.xml.in.h:6 + #: ../src/plugins/report_RHTSupport.xml.in.h:14 + #: ../src/plugins/report_Uploader.xml.in.h:11 +@@ -1559,7 +1691,7 @@ msgid "Sets the proxy server to use for HTTP" + msgstr "Configure le serveur mandataire à utiliser pour HTTP" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:20 ++#: ../src/plugins/report_Bugzilla.xml.in.h:22 + #: ../src/plugins/report_Kerneloops.xml.in.h:7 + #: ../src/plugins/report_RHTSupport.xml.in.h:15 + #: ../src/plugins/report_Uploader.xml.in.h:12 +@@ -1569,7 +1701,7 @@ msgid "HTTPS Proxy" + msgstr "Mandataire HTTPS" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:21 ++#: ../src/plugins/report_Bugzilla.xml.in.h:23 + #: ../src/plugins/report_Kerneloops.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:16 + #: ../src/plugins/report_Uploader.xml.in.h:13 +@@ -1579,20 +1711,6 @@ msgid "Sets the proxy server to use for HTTPS" + msgstr "Configure le serveur mandataire à utiliser pour HTTPS" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:22 +-msgid "Groups" +-msgstr "Groupes" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:23 +-msgid "" +-"Restrict the access to specified groups <a href=\"https://github.com/abrt/" +-"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +-msgstr "" +-"N'autoriser l'accès qu'aux groupes indiqués <a href=\"https://github.com/" +-"abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +- +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report.c:37 + msgid "" + "& [-v] --target TARGET --ticket ID FILE...\n" +@@ -1630,20 +1748,7 @@ msgid "Ticket/case ID" + msgstr "ID du ticket/cas" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:355 +-#, c-format +-msgid "Can't parse backtrace: %s" +-msgstr "Impossible d'analyser la trace inverse : %s " +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:366 +-msgid "Can't generate stacktrace description (no crash thread?)" +-msgstr "" +-"Impossible de créer une description de la trace de la pile (ne concerne pas " +-"le fil d'exécution de la panne ?)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:764 ++#: ../src/plugins/reporter-bugzilla.c:762 + msgid "" + "Warning, private ticket groups already specified as cmdline argument, " + "ignoring the env variable and configuration" +@@ -1652,33 +1757,33 @@ msgstr "" + "de commande, on ignore la variable d'environnement et la configuration" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:775 +-#: ../src/plugins/reporter-rhtsupport.c:342 ++#: ../src/plugins/reporter-bugzilla.c:773 ++#: ../src/plugins/reporter-rhtsupport.c:377 + msgid "Can't continue without login" + msgstr "Impossible de continuer sans s'identifier" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:788 +-#: ../src/plugins/reporter-rhtsupport.c:355 ++#: ../src/plugins/reporter-bugzilla.c:786 ++#: ../src/plugins/reporter-rhtsupport.c:390 + msgid "Can't continue without password" + msgstr "Impossible de continuer sans mot de passe" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:797 ++#: ../src/plugins/reporter-bugzilla.c:795 + #, c-format + msgid "Logging into Bugzilla at %s" + msgstr "Connexion à Bugzilla sur %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:801 ++#: ../src/plugins/reporter-bugzilla.c:799 + msgid "Invalid password or login. Please enter your BZ login:" + msgstr "" + "Mot de passe ou identifiant invalide. Merci d'indiquer votre identifiant BZ :" + "" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:804 +-#: ../src/plugins/reporter-rhtsupport.c:369 ++#: ../src/plugins/reporter-bugzilla.c:802 ++#: ../src/plugins/reporter-rhtsupport.c:404 + #, c-format + msgid "Invalid password or login. Please enter the password for '%s':" + msgstr "" +@@ -1686,7 +1791,7 @@ msgstr "" + "pour « %s » :" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:823 ++#: ../src/plugins/reporter-bugzilla.c:821 + msgid "" + "\n" + "& [-vbf] [-g GROUP-NAME]... [-c CONFFILE]... [-F FMTFILE] [-A FMTFILE2] -d " +@@ -1781,80 +1886,81 @@ msgstr "" + "S'il n'est pas spécifié, par défaut CONFFILE" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:896 +-#: ../src/plugins/reporter-rhtsupport.c:472 ++#: ../src/plugins/reporter-bugzilla.c:894 ++#: ../src/plugins/reporter-rhtsupport.c:511 + msgid "Configuration file (may be given many times)" + msgstr "Fichier de configuration (peut être fourni de nombreuses fois)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:897 ++#: ../src/plugins/reporter-bugzilla.c:895 + msgid "Formatting file for initial comment" + msgstr "Mise en forme du fichier pour le commentaire initial" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:898 ++#: ../src/plugins/reporter-bugzilla.c:896 + msgid "Formatting file for duplicates" + msgstr "Mise en forme du fichier pour les doublons" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-bugzilla.c:897 + msgid "Attach FILEs [to bug with this ID]" + msgstr "Attacher les FICHIERS [au bogue avec cet ID]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:900 ++#: ../src/plugins/reporter-bugzilla.c:898 + msgid "When creating bug, attach binary files too" + msgstr "Attacher les fichiers binaires aussi lors de la création d'un bogue" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:901 +-#: ../src/plugins/reporter-rhtsupport.c:474 ++#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-rhtsupport.c:513 + msgid "Force reporting even if this problem is already reported" + msgstr "Forcer le rapport même si cet incident a déjà été rapporté" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:902 ++#: ../src/plugins/reporter-bugzilla.c:900 + msgid "Add bugzilla user to CC list [of bug with this ID]" + msgstr "" + "Ajouter votre utilisateur bugzilla à la liste CC [du défaut portant cet ID]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:903 ++#: ../src/plugins/reporter-bugzilla.c:901 + msgid "Print BUG_ID which has given DUPHASH" + msgstr "Afficher le BUG_ID possédant un DUPHASH donné" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:904 ++#: ../src/plugins/reporter-bugzilla.c:902 + msgid "A name of bug tracker for an additional URL from 'reported_to'" + msgstr "" + "Le nom d'un outil de suivi d'anomalies pour une URL supplémentaire de « " + "reported_to »" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:905 ++#: ../src/plugins/reporter-bugzilla.c:903 + msgid "Restrict access to this group only" + msgstr "Restreindre l'accès à ce seul groupe" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:906 ++#: ../src/plugins/reporter-bugzilla.c:904 ../src/plugins/reporter-mailx.c:284 ++#: ../src/plugins/reporter-rhtsupport.c:517 + msgid "Debug" + msgstr "Débogage" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:948 ++#: ../src/plugins/reporter-bugzilla.c:949 + msgid "Looking for similar problems in bugzilla" + msgstr "Recherche d'incidents similaires dans bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:975 ++#: ../src/plugins/reporter-bugzilla.c:976 + msgid "Login is not provided by configuration. Please enter your BZ login:" + msgstr "" + "Le mot de passe n'est pas fourni dans la configuration. Merci d'indiquer " + "votre identifiant BZ :" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:981 +-#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-bugzilla.c:982 ++#: ../src/plugins/reporter-rhtsupport.c:551 + #, c-format + msgid "" + "Password is not provided by configuration. Please enter the password for " +@@ -1864,7 +1970,7 @@ msgstr "" + "mot de passe pour « %s » :" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1000 ++#: ../src/plugins/reporter-bugzilla.c:1001 + msgid "" + "Can't get Bugzilla ID because this problem has not yet been reported to " + "Bugzilla." +@@ -1873,7 +1979,7 @@ msgstr "" + "sur Bugzilla." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1007 ++#: ../src/plugins/reporter-bugzilla.c:1008 + #, c-format + msgid "" + "This problem has been reported to Bugzilla '%s' which differs from the " +@@ -1883,90 +1989,114 @@ msgstr "" + "« %s » configuré." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1011 ++#: ../src/plugins/reporter-bugzilla.c:1012 + #, c-format + msgid "Malformed url to Bugzilla '%s'." + msgstr "URL malformé vers le Bugzilla « %s »." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1015 ++#: ../src/plugins/reporter-bugzilla.c:1016 + #, c-format + msgid "Using Bugzilla ID '%s'" + msgstr "Utilisation de l'ID Bugzilla « %s »" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1049 +-#: ../src/plugins/reporter-bugzilla.c:1341 ++#: ../src/plugins/reporter-bugzilla.c:1050 ++#: ../src/plugins/reporter-bugzilla.c:1220 ++#: ../src/plugins/reporter-bugzilla.c:1379 + msgid "Logging out" + msgstr "Déconnexion" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1100 ++#: ../src/plugins/reporter-bugzilla.c:1101 + msgid "Can't determine Bugzilla Product from problem data." + msgstr "" + "Impossible de déterminer le produit Bugzilla à partir des données de " + "l'incident." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1151 ++#: ../src/plugins/reporter-bugzilla.c:1152 + msgid "Checking for duplicates" + msgstr "Vérification des doublons" + ++#: ../src/plugins/reporter-bugzilla.c:1201 ++#, c-format ++msgid "" ++"You have requested to make your data accessible only to a specific group and " ++"this bug is a duplicate of bug: %s/%u In case of bug duplicates a new " ++"comment is added to the original bug report but access to the comments " ++"cannot be restricted to a specific group. Would you like to open a new bug " ++"report and close it as DUPLICATE of the original one? Otherwise, the bug " ++"reporting procedure will be terminated." ++msgstr "" ++"Vous avez demandé de rendre vos données accessibles uniquement à un groupe " ++"spécifique et ce bogue est un double du bogue : %s/%u Pour les doubles de " ++"bogue, un nouveau commentaire est ajouté au rapport de bogue d'origine mais " ++"l'accès aux commentaires est restreint à un groupe spécifique. Souhaitez-" ++"vous ouvrir un nouveau rapport de bogue et le fermer en tant que DOUBLE " ++"(DUPLICATE) du rapport de bogue d'origine ? Sinon, la procédure de rapport " ++"de bogue sera fermée." ++ + # translation auto-copied from project libreport, version master, document libreport + #. Create new bug +-#: ../src/plugins/reporter-bugzilla.c:1197 ++#: ../src/plugins/reporter-bugzilla.c:1228 + msgid "Creating a new bug" + msgstr "Création d'un nouveau bogue" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1218 ++#: ../src/plugins/reporter-bugzilla.c:1249 + msgid "Failed to create a new bug." + msgstr "La création d'un nouveau bogue a échoué." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1229 ++#: ../src/plugins/reporter-bugzilla.c:1260 + #, c-format + msgid "Adding External URL to bug %i" + msgstr "Ajouter un URL externe au bogue %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1235 ++#: ../src/plugins/reporter-bugzilla.c:1266 + #, c-format + msgid "Adding attachments to bug %i" + msgstr "Ajouter des pièces jointes au bogue %i" + ++#: ../src/plugins/reporter-bugzilla.c:1280 ++#, c-format ++msgid "Closing bug %i as duplicate of bug %i" ++msgstr "Fermeture du bogue %i en tant que double du bogue %i" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1254 ++#: ../src/plugins/reporter-bugzilla.c:1292 + #, c-format + msgid "Bug is already reported: %i" + msgstr "Le bogue a déjà été rapporté : %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1297 ++#: ../src/plugins/reporter-bugzilla.c:1335 + #, c-format + msgid "Adding %s to CC list" + msgstr "Ajout de %s à la liste en copie" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1314 ++#: ../src/plugins/reporter-bugzilla.c:1352 + #, c-format + msgid "Adding new comment to bug %d" + msgstr "Ajout d'un nouveau commentaire au bogue %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1328 ++#: ../src/plugins/reporter-bugzilla.c:1366 + msgid "Attaching better backtrace" + msgstr "Un meilleur backtrace est joint" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1336 ++#: ../src/plugins/reporter-bugzilla.c:1374 + msgid "Found the same comment in the bug history, not adding a new one" + msgstr "" + "Le même commentaire a été trouvé dans l'historique du bogue, ajout d'un " + "nouveau commentaire annulé" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1344 ++#: ../src/plugins/reporter-bugzilla.c:1382 + #, c-format + msgid "Status: %s%s%s %s/show_bug.cgi?id=%u" + msgstr "Statut : %s%s%s %s/show_bug.cgi?id=%u" +@@ -2006,12 +2136,12 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/reporter-kerneloops.c:167 +-#: ../src/plugins/reporter-ureport.c:74 ++#: ../src/plugins/reporter-ureport.c:79 + msgid "Configuration file" + msgstr "Fichier de configuration" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:59 ++#: ../src/plugins/reporter-mailx.c:83 + #, c-format + msgid "" + "Email address of %s was not specified. Would you like to do so now? If not, " +@@ -2021,50 +2151,58 @@ msgstr "" + "Dans le cas contraire, « %s » sera utilisé" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:66 ++#: ../src/plugins/reporter-mailx.c:90 + #, c-format + msgid "Please, type email address of %s:" + msgstr "Merci de saisir l'adresse courriel de %s :" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:73 ++#: ../src/plugins/reporter-mailx.c:97 + #, c-format + msgid "Can't continue without email address of %s" + msgstr "Impossible de continuer sans l'adresse courriel de %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:135 ++#: ../src/plugins/reporter-mailx.c:206 ../src/plugins/reporter-mailx.c:211 + msgid "Sending an email..." + msgstr "Envoyer un courriel..." + ++#: ../src/plugins/reporter-mailx.c:209 ++#, c-format ++msgid "Sending a notification email to: %s" ++msgstr "Envoi d'un courrier électronique de notification à : %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:158 ++#: ../src/plugins/reporter-mailx.c:237 + #, c-format + msgid "Email was sent to: %s" + msgstr "Courriel envoyé à : %s" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:178 ++#: ../src/plugins/reporter-mailx.c:258 + msgid "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Sends contents of a problem directory DIR via email\n" + "\n" + "If not specified, CONFFILE defaults to " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Envoie le contenu d'un répertoire d'incidents DIR via courriel\n" + "\n" + "Si non-spécifié CONFFILE est ajusté par défaut sur " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:199 ../src/plugins/reporter-upload.c:250 ++#: ../src/plugins/reporter-mailx.c:281 ../src/plugins/reporter-upload.c:189 + msgid "Config file" + msgstr "Fichier de configuration" + ++#: ../src/plugins/reporter-mailx.c:282 ++msgid "Formatting file for an email" ++msgstr "Mise en forme du fichier pour un courriel" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:200 ++#: ../src/plugins/reporter-mailx.c:283 + msgid "Notify only (Do not mark the report as sent)" + msgstr "Notification uniquement (ne pas marquer le rapport comme envoyé)" + +@@ -2109,39 +2247,39 @@ msgstr "" + "fichier :" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was appended to %s" + msgstr "Le rapport a été ajouté à %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was stored to %s" + msgstr "Le rapport a été stocké sur %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:259 +-#: ../src/plugins/reporter-ureport.c:237 ++#: ../src/plugins/reporter-rhtsupport.c:294 ++#: ../src/plugins/reporter-ureport.c:297 + #, c-format + msgid "Server responded with an error: '%s'" + msgstr "Le serveur a répondu par une erreur : « %s »" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:319 ++#: ../src/plugins/reporter-rhtsupport.c:354 + msgid "Do you still want to create a RHTSupport ticket?" + msgstr "Voulez-vous toujours créer un ticket RHTSupport ?" + +-#: ../src/plugins/reporter-rhtsupport.c:367 ++#: ../src/plugins/reporter-rhtsupport.c:402 + msgid "Invalid password or login. Please enter your Red Hat login:" + msgstr "" + "Mot de passe ou identifiant invalide. Merci d'indiquer votre identifiant Red " + "Hat :" + +-#: ../src/plugins/reporter-rhtsupport.c:435 ++#: ../src/plugins/reporter-rhtsupport.c:471 + msgid "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -2150,87 +2288,120 @@ msgid "" + "If not specified, CONFFILE defaults to " + msgstr "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" +-"or:\n" +-"& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" ++"ou :\n" ++"& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FICHIER...\n" + "\n" +-"Rapporte un problème sur RHTSupport.\n" ++"Rapporte un problème aux services d'assistance Red Hat.\n" + "\n" + "Si non spécifiée, la valeur par défaut de CONFFILE est " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:473 ++#: ../src/plugins/reporter-rhtsupport.c:512 + msgid "Upload FILEs [to case with this ID]" + msgstr "Télécharger les FICHIERs (FILEs) [sur le dossier avec cet ID]" + +-#: ../src/plugins/reporter-rhtsupport.c:475 ++#: ../src/plugins/reporter-rhtsupport.c:514 + msgid "Submit uReport before creating a new case" + msgstr "Soumettre un uReport avant de créer un nouveau dossier" + +-#: ../src/plugins/reporter-rhtsupport.c:476 ++#: ../src/plugins/reporter-rhtsupport.c:515 + msgid "Configuration file for uReport" + msgstr "Fichier de configuration pour un uReport" + ++#: ../src/plugins/reporter-rhtsupport.c:516 ++msgid "Formatting file for a new case" ++msgstr "Mise en forme du fichier pour un nouveau dossier" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:504 ++#: ../src/plugins/reporter-rhtsupport.c:545 + msgid "Login is not provided by configuration. Please enter your RHTS login:" + msgstr "" + "L'identifiant de connexion n'est pas fourni dans la configuration. Merci " + "d'indiquer votre identifiant RHTS :" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:573 ++#: ../src/plugins/reporter-rhtsupport.c:614 + #, c-format + msgid "Attaching '%s' to case '%s'" + msgstr "« %s » joint au dossier « %s »" + +-#: ../src/plugins/reporter-rhtsupport.c:610 ++#: ../src/plugins/reporter-rhtsupport.c:651 + msgid "Sending ABRT crash statistics data" + msgstr "Envoi de données des statistiques d'incident ABRT" + ++#: ../src/plugins/reporter-rhtsupport.c:674 ++msgid "" ++"The problem has only occurred once and the ability to reproduce the problem " ++"is unknown. Please ensure you will be able to provide detailed information " ++"to our Support Team. Would you like to continue and open a new support case?" ++msgstr "" ++"Ce problème ne s'est présenté qu'une seule fois et la capacité à reproduire " ++"ce problème est inconnu. Veuillez vous assurer que vous serez capable de " ++"fournir des informations détaillées à notre équipe de support. Voulez-vous " ++"continuer et ouvrir un dossier d'assistance ?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:690 ++#, c-format ++msgid "" ++"The crashed program was released by '%s'. Would you like to report the " ++"problem to Red Hat Support?" ++msgstr "" ++"Le programme qui a planté provient de « %s ». Voulez-vous signaler ce " ++"problème aux services d'assistance Red Hat ?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:708 ++#, c-format ++msgid "" ++"The program '%s' does not appear to be provided by Red Hat. Would you like " ++"to report the problem to Red Hat Support?" ++msgstr "" ++"Le programme « %s » ne semble pas provenir de Red Hat. Voulez-vous signaler " ++"ce problème aux services d'assistance Red Hat ?" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/reporter-rhtsupport.c:725 ++msgid "Can't create a temporary directory in " ++msgstr "Impossible de créer un répertoire temporaire dans" ++ + # translation auto-copied from project libreport, version master, document libreport + #. Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing + #. error msg is already logged by dd_opendir +-#. Gzipping e.g. 0.5gig coredump takes a while. Let client know what we are doing +-#: ../src/plugins/reporter-rhtsupport.c:621 +-#: ../src/plugins/reporter-upload.c:52 ++#. Compressing e.g. 0.5gig coredump takes a while. Let client know what we are doing ++#: ../src/plugins/reporter-rhtsupport.c:793 ++#: ../src/plugins/reporter-upload.c:103 + msgid "Compressing data" + msgstr "Compression des données" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:656 +-msgid "Can't create a temporary directory in " +-msgstr "Impossible de créer un répertoire temporaire dans" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:665 ++#: ../src/plugins/reporter-rhtsupport.c:801 + msgid "Can't create temporary file in " + msgstr "Impossible de créer un fichier temporaire dans" + + # translation auto-copied from project libreport, version master, document libreport + #. Check for hints and show them if we have something +-#: ../src/plugins/reporter-rhtsupport.c:676 ++#: ../src/plugins/reporter-rhtsupport.c:812 + msgid "Checking for hints" + msgstr "Recherche d'indices" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:686 ++#: ../src/plugins/reporter-rhtsupport.c:822 + msgid "Creating a new case" + msgstr "Création d'un nouveau dossier" + + # translation auto-copied from project libreport, version master, document libreport + #. How can we help user sorting out this problem? +-#: ../src/plugins/reporter-rhtsupport.c:697 ++#: ../src/plugins/reporter-rhtsupport.c:833 + msgid "Can't determine RH Support Product from problem data." + msgstr "" + "Impossible de déterminer le produit Red Hat pris en assistance à partir des " + "données du problème." + +-#: ../src/plugins/reporter-rhtsupport.c:753 ++#: ../src/plugins/reporter-rhtsupport.c:889 + msgid "Linking ABRT crash statistics record with the case" + msgstr "Lier l'enregistrement des statistiques d'incident ABRT au dossier" + +-#: ../src/plugins/reporter-rhtsupport.c:766 ++#: ../src/plugins/reporter-rhtsupport.c:902 + #, c-format + msgid "Linking ABRT crash statistics record with contact email: '%s'" + msgstr "" +@@ -2238,14 +2409,14 @@ msgstr "" + "électronique : « %s »" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:790 ++#: ../src/plugins/reporter-rhtsupport.c:926 + #, c-format + msgid "Adding comment to case '%s'" + msgstr "Ajout d'un commentaire au dossier « %s »" + + # translation auto-copied from project libreport, version master, document libreport + #. Attach the tarball of -d DIR +-#: ../src/plugins/reporter-rhtsupport.c:808 ++#: ../src/plugins/reporter-rhtsupport.c:944 + #, c-format + msgid "Attaching problem data to case '%s'" + msgstr "Ajout des données de l'incident au dossier « %s »" +@@ -2261,39 +2432,32 @@ msgid "Updates which possibly help: " + msgstr "Mises à jour pouvant être utiles :" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:30 ++#: ../src/plugins/reporter-upload.c:29 + msgid "Can't continue without URL" + msgstr "Impossible de continuer sans URL" + +-#: ../src/plugins/reporter-upload.c:61 +-msgid "Upload URL is not provided by configuration. Please enter upload URL:" +-msgstr "" +-"L'URL de téléversement n'est pas fourni dans la configuration. Merci " +-"d'indiquer l'URL de téléversement :" +- + #. Be permissive and nice, ask only once and don't check + #. the result. User can dismiss this prompt but the upload + #. may work somehow??? +-#: ../src/plugins/reporter-upload.c:164 ++#: ../src/plugins/reporter-upload.c:51 + msgid "Please enter password for uploading:" + msgstr "Veuillez saisir le mot de passe pour le téléversement :" + + # translation auto-copied from project libreport, version master, document libreport + #. success +-#: ../src/plugins/reporter-upload.c:181 ++#: ../src/plugins/reporter-upload.c:120 + #, c-format + msgid "Archive is created: '%s'" + msgstr "Archive créée : %s" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:222 ++#: ../src/plugins/reporter-upload.c:159 + msgid "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Uploads compressed tarball of problem directory DIR to URL.\n" + "If URL is not specified, creates tarball in " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Téléverse une archive tar compressée d'un répertoire d'incidents DIR à l'URL." + "\n" +@@ -2301,10 +2465,26 @@ msgstr "" + "Si l'URL n'est pas indiquée, crée l'archive tar dans" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:251 ++#: ../src/plugins/reporter-upload.c:190 + msgid "Base URL to upload to" + msgstr "URL de base où effectuer l'envoi" + ++#: ../src/plugins/reporter-upload.c:191 ++msgid "SSH public key file" ++msgstr "Fichier de clé publique SSH" ++ ++#: ../src/plugins/reporter-upload.c:192 ++msgid "SSH private key file" ++msgstr "Fichier de clé privé SSH" ++ ++#: ../src/plugins/reporter-upload.c:221 ++msgid "" ++"Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:" ++"" ++msgstr "" ++"Veuillez saisir un URL (scp, ftp, etc.) sur lequel exporter les données du " ++"problème :" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Kerneloops.xml.in.h:1 + msgid "Kerneloops.org" +@@ -2430,11 +2610,11 @@ msgstr "Nom d'utilisateur du client Red Hat" + msgid "Red Hat customer password" + msgstr "Mot de passe du client Red Hat" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:9 ++#: ../src/plugins/report_RHTSupport.xml.in.h:7 + msgid "Submit uReport" + msgstr "Soumettre un uReport" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:10 ++#: ../src/plugins/report_RHTSupport.xml.in.h:8 + msgid "" + "Submit <a href=\"https://access.redhat.com/articles/642323\">micro-" + "report</a> when creating a new case." +@@ -2443,12 +2623,12 @@ msgstr "" + "report</a> lors de la création d'un nouveau dossier." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_RHTSupport.xml.in.h:9 + msgid "RH Portal URL" + msgstr "URL du portail RH" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_RHTSupport.xml.in.h:10 + msgid "Address of the Red Hat support portal" + msgstr "Adresse du portail de support Red Hat" + +@@ -2508,6 +2688,22 @@ msgstr "Mandataire FTP" + msgid "Sets the proxy server to use for FTP" + msgstr "Configure le serveur mandataire à utiliser pour FTP" + ++#: ../src/plugins/report_Uploader.xml.in.h:16 ++msgid "SSH Public key file" ++msgstr "Fichier de clé publique SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:17 ++msgid "Use this field to specify SSH public keyfile" ++msgstr "Utiliser ce champ pour spécifier un fichier de clé publique SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:18 ++msgid "SSH Private key file" ++msgstr "Fichier de clé privé SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:19 ++msgid "Use this field to specify SSH private keyfile" ++msgstr "Utiliser ce champ pour spécifier un fichier de clé privé SSH" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_uReport.xml.in.h:1 + msgid "uReport" +@@ -2594,52 +2790,52 @@ msgid "Bugzilla couldn't find parent of bug %d" + msgstr "Bugzilla n'a pas trouvé le parent du bogue %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/rhbz.c:893 ++#: ../src/plugins/rhbz.c:916 + msgid "Bug.search(quicksearch) return value did not contain member 'bugs'" + msgstr "" + "Bug.search(quicksearch) renvoie une valeur ne contenant pas de défaut membre." + "" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:68 ++#: ../src/plugins/reporter-ureport.c:73 + msgid "Specify server URL" + msgstr "Spécifier l'URL du serveur" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:70 ++#: ../src/plugins/reporter-ureport.c:75 + msgid "Allow insecure connection to ureport server" + msgstr "Permettre les connexions non-sécurisées au serveur ureport" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:71 ++#: ../src/plugins/reporter-ureport.c:76 + msgid "Use client authentication" + msgstr "Utilisez l'authentification client" + +-#: ../src/plugins/reporter-ureport.c:72 ++#: ../src/plugins/reporter-ureport.c:77 + msgid "Use HTTP Authentication" + msgstr "Utiliser l'authentification HTTP" + +-#: ../src/plugins/reporter-ureport.c:73 ++#: ../src/plugins/reporter-ureport.c:78 + msgid "Additional files included in 'auth' key" + msgstr "Fichiers supplémentaires inclus dans la clé « auth »" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:76 ++#: ../src/plugins/reporter-ureport.c:81 + msgid "bthash of uReport to attach (conflicts with -A)" + msgstr "bthash du uReport à attacher (en conflit avec -A)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:78 ++#: ../src/plugins/reporter-ureport.c:83 + msgid "attach to a bthash from reported_to (conflicts with -a)" + msgstr "attacher à un bthash à partir de reported_to (en conflit avec -a)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:80 ++#: ../src/plugins/reporter-ureport.c:85 + msgid "contact e-mail address (requires -a|-A, conflicts with -E)" + msgstr "adresse électronique (requiert -a|-A, en conflit avec -E)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:82 ++#: ../src/plugins/reporter-ureport.c:87 + msgid "" + "contact e-mail address from environment or configuration file (requires -a|-" + "A, conflicts with -e)" +@@ -2648,22 +2844,52 @@ msgstr "" + "(requiert -a|-A, en conflit avec -e)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:84 ++#: ../src/plugins/reporter-ureport.c:89 + msgid "attach RHBZ bug (requires -a|-A, conflicts with -B)" + msgstr "attacher le bogue RHBZ (requiert -a|-A, en conflit avec -B)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:86 ++#: ../src/plugins/reporter-ureport.c:91 + msgid "" + "attach last RHBZ bug from reported_to (requires -a|-A, conflicts with -b)" + msgstr "" + "attacher le dernier bogue RHBZ à partir de reported_to (requiert -a|-A, en " + "conflit avec -b)" + +-#: ../src/plugins/reporter-ureport.c:91 ++#: ../src/plugins/reporter-ureport.c:95 ++msgid "attach value (requires -a|-A and -T, conflicts with -L)" ++msgstr "joindre la valeur (requiert -a|-A et T, en conflit avec -L)" ++ ++#: ../src/plugins/reporter-ureport.c:97 ++msgid "" ++"attach data of FIELD [URL] of the last report result (requires -a|-A, -r and " ++"-T, conflicts with -l)" ++msgstr "" ++"joindre les données de FIELD [URL] des résultats du dernier rapport " ++"(requiert -a|-A, -r et -T, en conflit avec -l)" ++ ++#: ../src/plugins/reporter-ureport.c:100 ++msgid "" ++"use REPORT_RESULT_TYPE when looking for FIELD in reported_to (used only with " ++"-L)" ++msgstr "" ++"utiliser REPORT_RESULT_TYPE lorsque vous recherchez FIELD dans reported_to " ++"(utilisé uniquement avec -L)" ++ ++#: ../src/plugins/reporter-ureport.c:102 ++msgid "" ++"attach DATA as ureporte attachment ATTACHMENT_TYPE (used only with -l|-L)" ++msgstr "" ++"joindre DATA en tant que pièce jointe ureporte ATTACHMENT_TYPE (utilisé " ++"uniquement avec -l|-L)" ++ ++#: ../src/plugins/reporter-ureport.c:107 + msgid "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2674,6 +2900,9 @@ msgid "" + msgstr "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2683,29 +2912,39 @@ msgstr "" + "Lit la configuration par défaut à partir de " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:144 ++#: ../src/plugins/reporter-ureport.c:179 + msgid "This problem does not have an uReport assigned." + msgstr "Cet incident n'a pas de uReport attribué." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:157 ++#: ../src/plugins/reporter-ureport.c:192 + msgid "This problem has not been reported to Bugzilla." + msgstr "Cet incident n'a pas été rapporté sur Bugzilla." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:161 ++#: ../src/plugins/reporter-ureport.c:196 + #, c-format + msgid "Unable to find bug ID in bugzilla URL '%s'" + msgstr "Impossible de trouver l'ID de défaut dans l'URL bugzilla « %s »" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:166 ++#: ../src/plugins/reporter-ureport.c:201 + #, c-format + msgid "Unable to parse bug ID from bugzilla URL '%s'" + msgstr "Impossible d'analyser l'ID de défaut de l'URL bugzilla « %s »" + ++#: ../src/plugins/reporter-ureport.c:211 ++#, c-format ++msgid "This problem has not been reported to '%s'." ++msgstr "Cet incident n'a pas été rapporté sur '%s'." ++ ++#: ../src/plugins/reporter-ureport.c:216 ++#, c-format ++msgid "The report result '%s' is missing URL." ++msgstr "Le résultat du rapport « %s » ne contient pas d'URL." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:179 ++#: ../src/plugins/reporter-ureport.c:233 + msgid "" + "Neither environment variable 'uReport_ContactEmail' nor configuration option " + "'ContactEmail' is set" +@@ -2713,23 +2952,23 @@ msgstr "" + "Ni la variable d'environnement « uReport_ContactEmail », ni l'option de " + "configuration « ContactEmail » ne sont définis" + +-#: ../src/plugins/reporter-ureport.c:185 ++#: ../src/plugins/reporter-ureport.c:239 + msgid "You need to specify bug ID, contact email or both" + msgstr "" + "Vous devez spécifier l'ID du bogue, l'adresse électronique, ou les deux" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:203 ++#: ../src/plugins/reporter-ureport.c:263 + msgid "You need to specify bthash of the uReport to attach." + msgstr "Vous devez spécifier le bthash du uReport auquel se rattacher." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:208 ++#: ../src/plugins/reporter-ureport.c:268 + msgid "Not uploading an empty uReport" + msgstr "Pas de téléversement d'un uReport vide" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:229 ++#: ../src/plugins/reporter-ureport.c:289 + msgid "This problem has already been reported." + msgstr "Cet incident a déjà été rapporté." + +@@ -2900,7 +3139,18 @@ msgstr "" + "Analyser le problème localement et envoyer les informations par courrier " + "électronique" + +-# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_uReport.xml.in.h:1 ++msgid "Submit anonymous crash report" ++msgstr "Soumettre le rapport anonymement" ++ ++#: ../src/workflows/workflow_uReport.xml.in.h:2 ++msgid "" ++"Submit anonymous crash report - I do not want to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Soumettre le rapport anonymement - Je ne veux pas que les services " ++"d'assistance Red Hat me contactent" ++ + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:1 + #: ../src/workflows/workflow_RHELKerneloops.xml.in.h:1 + #: ../src/workflows/workflow_RHELPython.xml.in.h:1 +@@ -2908,58 +3158,65 @@ msgstr "" + #: ../src/workflows/workflow_RHELxorg.xml.in.h:1 + #: ../src/workflows/workflow_RHELLibreport.xml.in.h:1 + #: ../src/workflows/workflow_RHELJava.xml.in.h:1 +-msgid "Report to Red Hat Customer Portal" +-msgstr "Rapporter sur le Portail Client Red Hat" ++msgid "Ask Red Hat Support for help" ++msgstr "Demander de l'aide aux services d'assistance Red Hat" + +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:2 ++#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 ++#: ../src/workflows/workflow_RHELPython.xml.in.h:2 ++#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 ++#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 ++#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 ++#: ../src/workflows/workflow_RHELJava.xml.in.h:2 ++msgid "" ++"Create new Red Hat Support case - I would like to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Créer un nouveau dossier d'assistance - Je souhaite que les services " ++"d'assistance de Red Hat me contactent" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 ++msgid "Report to Red Hat Bugzilla" ++msgstr "Rapporter sur Red Hat Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:2 + msgid "Process the C/C++ crash using the Red Hat infrastructure" + msgstr "Traiter le plantage C/C++ en utilisant l'infrastructure Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:2 + msgid "Process the kerneloops using the Red Hat infrastructure" + msgstr "Traiter le kerneloops en utilisant l'infrastructure Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELPython.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:2 + msgid "Process the python exception using the Red Hat infrastructure" + msgstr "Traiter l'exception python en utilisant l'infrastructure Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:2 + msgid "Process the kernel crash using the Red Hat infrastructure" + msgstr "Traiter le plantage du noyau en utilisant l'infrastructure Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:2 + msgid "Process the X Server problem using the Red Hat infrastructure" + msgstr "Traiter l'incident du serveur X en utilisant l'infrastructure Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:2 + msgid "Process the problem using the Red Hat infrastructure" + msgstr "Traiter le problème en utilisant l'infrastructure Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELJava.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:2 + msgid "Process the Java exception using the Red Hat infrastructure" + msgstr "Traiter l'exception Java en utilisant l'infrastructure Red Hat" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 +-msgid "Report to Red Hat Bugzilla" +-msgstr "Rapporter sur Red Hat Bugzilla" +diff --git a/po/it.po b/po/it.po +index 5480a17..55adb26 100644 +--- a/po/it.po ++++ b/po/it.po +@@ -1,17 +1,18 @@ + # Francesco Valente , 2015. #zanata ++# Terry Chuang , 2016. #zanata + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2015-07-14 15:18+0200\n" ++"POT-Creation-Date: 2016-06-29 15:25+0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2015-07-17 01:15-0400\n" +-"Last-Translator: Francesco Valente \n" ++"PO-Revision-Date: 2016-09-01 05:31-0400\n" ++"Last-Translator: Copied by Zanata \n" + "Language-Team: Italian\n" + "Language: it\n" +-"X-Generator: Zanata 3.6.2\n" ++"X-Generator: Zanata 3.9.5\n" + "Plural-Forms: nplurals=2; plural=(n != 1)\n" + + # translation auto-copied from project libreport, version master, document libreport +@@ -108,7 +109,7 @@ msgstr "# Componente" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/cli/cli-report.c:159 + msgid "# Core dump" +-msgstr "# Core dump" ++msgstr "# Coredump" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/cli/cli-report.c:160 +@@ -133,17 +134,17 @@ msgstr "# Motivo del crash" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/cli/cli-report.c:170 + msgid "# os-release configuration file from root dir" +-msgstr "# os-release configuration file from root dir" ++msgstr "# file di configurazione os-release da directory root" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/cli/cli-report.c:175 + msgid "# Release string of the operating system from root dir" +-msgstr "# Release string of the operating system from root dir" ++msgstr "# Versione di rilascio del sistema operativo da directory root" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/cli/cli-report.c:183 + msgid "# os-release configuration file" +-msgstr "# os-release configuration file" ++msgstr "# file di configurazione os-release" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/cli/cli-report.c:188 +@@ -212,37 +213,31 @@ msgstr "Seleziona un flusso di lavoro da eseguire:" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:87 +-#, python-brace-format + msgid "Extracting cpio from {0}" + msgstr "Estrazione di cpio da {0} in corso" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:92 +-#, python-brace-format + msgid "Can't write to '{0}': {1}" + msgstr "Impossibile scrivere su '{0}': {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:107 +-#, python-brace-format + msgid "Can't extract package '{0}'" + msgstr "Impossibile estrarre il pacchetto '{0}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:115 +-#, python-brace-format + msgid "Caching files from {0} made from {1}" + msgstr "Memorizzazione in cache dei file da {0} creati da {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:134 +-#, python-brace-format + msgid "Can't extract files from '{0}'" + msgstr "Impossibile estrarre file da '{0}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:147 +-#, python-brace-format + msgid "Can't remove '{0}': {1}" + msgstr "Impossibile rimuovere '{0}': {1}" + +@@ -251,7 +246,6 @@ msgstr "Impossibile rimuovere '{0}': {1}" + #. % (self.downloaded_pkgs + 1, self.total_pkgs, name, pct) + #. ) + #: ../src/client-python/debuginfo.py:194 ../src/client-python/debuginfo.py:205 +-#, python-brace-format + msgid "Downloading ({0} of {1}) {2}: {3:3}%" + msgstr "Processo di download ({0} di {1}) {2} in corso: {3:3}%" + +@@ -302,7 +296,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:356 +-#, python-brace-format + msgid "Can't setup {0}: {1}, disabling" + msgstr "Impossibile impostare {0}: {1}, disabilitazione in corso" + +@@ -327,19 +320,16 @@ msgstr "Errore durante il recupero degli elenchi dei file: '{0!s}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:416 +-#, python-brace-format + msgid "Can't find packages for {0} debuginfo files" + msgstr "Impossibile trovare i pacchetti per {0} file di debuginfo " + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:418 +-#, python-brace-format + msgid "Packages to download: {0}" + msgstr "Pacchetti da scaricare: {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:419 +-#, python-brace-format + msgid "Downloading {0:.2f}Mb, installed size: {1:.2f}Mb. Continue?" + msgstr "" + "Processo di download {0:.2f}Mb in corso, dimensione installata: {1:.2f}Mb. " +@@ -353,7 +343,6 @@ msgstr "Processo di download cancellato dall'utente" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:434 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in tmp dir '{0}' ({1:.2f}Mb left). Continue?" + msgstr "" +@@ -362,7 +351,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:443 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in cache dir '{0}' ({1:.2f}Mb left). " + "Continue?" +@@ -372,13 +360,11 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:469 +-#, python-brace-format + msgid "Cannot copy file '{0}': {1}" + msgstr "Impossibile copiare il file '{0}': {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:487 +-#, python-brace-format + msgid "Downloading package {0} failed" + msgstr "Processo di download del pacchetto {0} fallito" + +@@ -393,7 +379,6 @@ msgstr "Decompressione fallita, interruzione del download in corso ..." + #. but it was appearing even if no packages were in fact extracted + #. (say, when there was one package, and it has download error). + #: ../src/client-python/debuginfo.py:504 +-#, python-brace-format + msgid "Removing {0}" + msgstr "Rimozione {0} in corso" + +@@ -455,7 +440,7 @@ msgid "C_onfigure" + msgstr "C_onfigura" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3472 ++#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3718 + msgid "_Close" + msgstr "_Chiudi" + +@@ -487,7 +472,7 @@ msgstr "" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gtk-helpers/event_config_dialog.c:321 + #: ../src/gtk-helpers/workflow_config_dialog.c:86 +-#: ../src/gui-wizard-gtk/wizard.c:822 ../src/gui-wizard-gtk/wizard.c:3101 ++#: ../src/gui-wizard-gtk/wizard.c:844 ../src/gui-wizard-gtk/wizard.c:3325 + msgid "_Cancel" + msgstr "_Cancella" + +@@ -573,7 +558,7 @@ msgstr "" + msgid "Alternate GUI file" + msgstr "Alternare file GUI" + +-#: ../src/gui-wizard-gtk/wizard.c:354 ++#: ../src/gui-wizard-gtk/wizard.c:378 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide the " +@@ -588,7 +573,7 @@ msgstr "" + "Per maggiori informazioni sulla configurazione: https://access.redhat.com/" + "site/articles/718083" + +-#: ../src/gui-wizard-gtk/wizard.c:357 ++#: ../src/gui-wizard-gtk/wizard.c:381 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide " +@@ -603,13 +588,13 @@ msgstr "" + "Per maggiori " + "informazioni sulla configurazione" + +-#: ../src/gui-wizard-gtk/wizard.c:373 ++#: ../src/gui-wizard-gtk/wizard.c:397 + #, c-format + msgid "Con_figure %s" + msgstr "Con_figura %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:400 ++#: ../src/gui-wizard-gtk/wizard.c:424 + #, c-format + msgid "" + "Need writable directory, but '%s' is not writable. Move it to '%s' and " +@@ -619,17 +604,17 @@ msgstr "" + "Spostarla su '%s' ed operare sui dati appena spostati?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:813 ++#: ../src/gui-wizard-gtk/wizard.c:835 + msgid "View/edit a text file" + msgstr "Visualizza/modifica un file di testo" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:821 ++#: ../src/gui-wizard-gtk/wizard.c:843 + msgid "_Save" + msgstr "_Salva" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1040 ++#: ../src/gui-wizard-gtk/wizard.c:1067 + msgid "" + "No reporting targets are defined for this problem. Check configuration in /" + "etc/libreport/*" +@@ -638,45 +623,66 @@ msgstr "" + "Controllare la configurazione in /etc/libreport/*" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1077 ++#: ../src/gui-wizard-gtk/wizard.c:1104 + #, c-format + msgid "(requires: %s)" + msgstr "(richiede: %s)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1091 ++#: ../src/gui-wizard-gtk/wizard.c:1118 + #, c-format + msgid "(not needed, data already exist: %s)" + msgstr "(non necessario, i dati esistono già: %s)" + ++#: ../src/gui-wizard-gtk/wizard.c:1217 ++msgid "" ++"Since crashes without a known reproducer can be difficult to diagnose, " ++"please provide a comprehensive description of the problem you have " ++"encountered." ++msgstr "" ++"Poiché è difficile diagnosticare crash non riproducibili, fornire una " ++"descrizione completa del problema riscontrato." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1224 ++msgid "" ++"Please provide a short description of the problem and please include the " ++"steps you have used to reproduce the problem." ++msgstr "" ++"Fornire una breve descrizione del problema includendo i passaggi effettuati " ++"per riprodurlo." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1231 ++msgid "Please provide the steps you have used to reproduce the problem." ++msgstr "Fornire i passaggi utilizzati per riprodurre il problema." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1277 ++#: ../src/gui-wizard-gtk/wizard.c:1349 + msgid "(click here to view/edit)" + msgstr "(cliccare qui per visualizzare/modificare)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1288 ++#: ../src/gui-wizard-gtk/wizard.c:1360 + #, c-format + msgid "(binary file, %llu bytes)" + msgstr "(file binario, %llu byte)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1395 ../src/report-newt/report-newt.c:334 ++#: ../src/gui-wizard-gtk/wizard.c:1467 ../src/report-newt/report-newt.c:334 + msgid "(no description)" + msgstr "(nessuna descrizione)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1403 ++#: ../src/gui-wizard-gtk/wizard.c:1475 + #, c-format + msgid "%llu bytes, %u files" + msgstr "%llu byte, %u file" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1647 ++#: ../src/gui-wizard-gtk/wizard.c:1752 + msgid "Processing was canceled" + msgstr "L'analisi è stata cancellata" + +-#: ../src/gui-wizard-gtk/wizard.c:1851 ++#: ../src/gui-wizard-gtk/wizard.c:1956 + msgid "" + "Processing of the problem failed. This can have many reasons but there are " + "three most common:\n" +@@ -690,7 +696,7 @@ msgstr "" + "\t▫ corruzione dei dati\n" + "\t▫ configurazione non valida" + +-#: ../src/gui-wizard-gtk/wizard.c:1860 ++#: ../src/gui-wizard-gtk/wizard.c:1965 + msgid "" + "If you want to update the configuration and try to report again, please open " + "Preferences item\n" +@@ -702,54 +708,67 @@ msgstr "" + "e dopo aver applicato le modifiche selezionare Riprova." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1978 ++#: ../src/gui-wizard-gtk/wizard.c:2089 + msgid "Processing was interrupted because the problem is not reportable." + msgstr "L'analisi è stata interrotta perchè il problema non è segnalabile" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1988 ../src/gui-wizard-gtk/wizard.c:2057 ++#: ../src/gui-wizard-gtk/wizard.c:2099 ../src/gui-wizard-gtk/wizard.c:2168 + msgid "Processing failed." + msgstr "Elaborazione fallita." + + # translation auto-copied from project libreport, version master, document libreport + #. No next event, go to progress page and finish +-#: ../src/gui-wizard-gtk/wizard.c:1995 ../src/gui-wizard-gtk/wizard.c:2818 ++#: ../src/gui-wizard-gtk/wizard.c:2106 ../src/gui-wizard-gtk/wizard.c:3040 + msgid "Processing finished." + msgstr "Processo finito." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1996 ++#: ../src/gui-wizard-gtk/wizard.c:2107 + msgid "Processing finished, please proceed to the next step." + msgstr "Elaborazione terminata, si prega di procedere con il prossimo passo." + + # translation auto-copied from project libreport, version master, document libreport + #. TODO: better msg? +-#: ../src/gui-wizard-gtk/wizard.c:2054 ++#: ../src/gui-wizard-gtk/wizard.c:2165 + #, c-format + msgid "No processing for event '%s' is defined" + msgstr "Non è definito alcun processo di analisi per l'evento '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2068 ++#: ../src/gui-wizard-gtk/wizard.c:2179 + msgid "Processing interrupted: can't continue without writable directory." + msgstr "" + "Elaborazione interrotta: impossibile continuare senza una directory " + "scrivibile." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2105 ++#: ../src/gui-wizard-gtk/wizard.c:2216 + msgid "Processing..." + msgstr "Elaborazione..." + ++#: ../src/gui-wizard-gtk/wizard.c:2297 ++msgid "" ++"Possible sensitive data detected, feel free to edit the report and remove " ++"them." ++msgstr "" ++"Rilevati possibili dati sensibili. È possibile modificare il riporto e " ++"rimuoverli." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2198 ++#: ../src/gui-wizard-gtk/wizard.c:2337 + msgid "Cannot check backtrace rating because of invalid event name" + msgstr "" + "Impossibile controllare il rating del backtrace a causa di un nome di evento " + "non valido" + ++#: ../src/gui-wizard-gtk/wizard.c:2869 ++#, c-format ++msgid "Failed to save file '%s'" ++msgstr "Impossibile salvare il file \"%s\"" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2838 ++#: ../src/gui-wizard-gtk/wizard.c:3060 + #, c-format + msgid "" + "Event '%s' requires permission to send possibly sensitive data.\n" +@@ -759,7 +778,7 @@ msgstr "" + "Si vuole procedere?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2886 ++#: ../src/gui-wizard-gtk/wizard.c:3108 + #, c-format + msgid "This problem should not be reported (it is likely a known problem). %s" + msgstr "" +@@ -767,106 +786,127 @@ msgstr "" + "problema noto). %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3102 ++#: ../src/gui-wizard-gtk/wizard.c:3326 + msgid "_Open" + msgstr "_Apri" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3124 ++#: ../src/gui-wizard-gtk/wizard.c:3348 + #, c-format + msgid "'%s' is not an ordinary file" + msgstr "'%s' non è un file normale" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3138 ++#: ../src/gui-wizard-gtk/wizard.c:3362 + msgid "You are trying to copy a file onto itself" + msgstr "Si sta cercando di copiare un file su se stesso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3145 ++#: ../src/gui-wizard-gtk/wizard.c:3369 + #, c-format + msgid "Can't copy '%s': %s" + msgstr "Impossibile copiare '%s': %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3160 ++#: ../src/gui-wizard-gtk/wizard.c:3384 + #, c-format + msgid "Item '%s' already exists and is not modifiable" + msgstr "L'oggetto '%s' è già esistente e non è modificabile" + ++#: ../src/gui-wizard-gtk/wizard.c:3542 ++msgid "I have experienced this problem for the first time" ++msgstr "Ho riscontrato questo problema per la prima volta" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3545 ++msgid "I can reproduce this problem" ++msgstr "Posso riprodurre il problema" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3548 ++msgid "This problem occurs repeatedly" ++msgstr "Il problema si verifica ripetutamente" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3314 ++#: ../src/gui-wizard-gtk/wizard.c:3560 + msgid "Include" + msgstr "Includi" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3325 ++#: ../src/gui-wizard-gtk/wizard.c:3571 + msgid "Name" + msgstr "Nome" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3335 ++#: ../src/gui-wizard-gtk/wizard.c:3581 + msgid "Value" + msgstr "Valore" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3369 ++#: ../src/gui-wizard-gtk/wizard.c:3615 + msgid "Problem description" + msgstr "Descrizione problema" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3370 ++#: ../src/gui-wizard-gtk/wizard.c:3616 + msgid "Select how to report this problem" + msgstr "Selezionare come riportare il problema" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3371 ++#: ../src/gui-wizard-gtk/wizard.c:3617 + msgid "Provide additional information" + msgstr "Fornire informazioni aggiuntive" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3372 ++#: ../src/gui-wizard-gtk/wizard.c:3618 + msgid "Review the data" + msgstr "Rivedere i dati" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3373 ++#: ../src/gui-wizard-gtk/wizard.c:3619 + msgid "Confirm data to report" + msgstr "Conferma dati da riportare" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3374 ++#: ../src/gui-wizard-gtk/wizard.c:3620 + msgid "Processing" + msgstr "Elaborazione" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3375 ++#: ../src/gui-wizard-gtk/wizard.c:3621 + msgid "Processing done" + msgstr "Elaborazione eseguita." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3474 ++#: ../src/gui-wizard-gtk/wizard.c:3720 + msgid "_Stop" +-msgstr "_Stop" ++msgstr "_Arresto" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3477 ++#: ../src/gui-wizard-gtk/wizard.c:3723 + msgid "Upload for analysis" + msgstr "Carica per analisi" + + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3480 ++#: ../src/gui-wizard-gtk/wizard.c:3726 + msgid "Repeat" + msgstr "Riprova" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3483 ++#: ../src/gui-wizard-gtk/wizard.c:3729 + msgid "_Forward" + msgstr "_Avanti" + +-#: ../src/gui-wizard-gtk/wizard.c:3575 ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.c:3780 ++msgid "Restrict access to the report" ++msgstr "Limita l'accesso al report" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3785 ++msgid "Learn more about restricted access in the configuration" ++msgstr "Ulteriori informazioni sull’accesso limitato nella configurazione" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3844 + msgid "" + "In order to enable the built-in screencasting functionality the package fros-" + "gnome has to be installed. Please run the following command if you want to " +@@ -880,34 +920,8 @@ msgstr "" + "\n" + "su -c \"yum install fros-gnome\"" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:1 +-msgid "" +-"Possible sensitive data detected, feel free to edit the report and remove " +-"them." +-msgstr "" +-"Rilevati possibili dati sensibili. È possibile modificare il riporto e " +-"rimuoverli." +- + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:2 +-msgid "Restrict access to the report" +-msgstr "Limita l'accesso al report" +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:3 +-msgid "" +-"No one except Red Hat employees will be allowed to see the report with " +-"restricted access (not even you)" +-msgstr "" +-"Solo i dipendenti di Red Hat potranno visualizzare il riporto con accesso " +-"limitato (nemmeno tu potrai farlo)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:4 +-msgid "Read more about reports with restricted access" +-msgstr "Ulteriori informazioni sui report con accesso limitato" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++#: ../src/gui-wizard-gtk/wizard.glade.h:1 + msgid "" + "On the following screens, you will be asked to describe how the problem " + "occurred, to choose how to analyze the problem (if needed), to review " +@@ -920,12 +934,12 @@ msgstr "" + "per procedere." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++#: ../src/gui-wizard-gtk/wizard.glade.h:2 + msgid "Details" + msgstr "Dettagli" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:7 ++#: ../src/gui-wizard-gtk/wizard.glade.h:3 + msgid "" + "How did this problem happen (step-by-step)? How can it be reproduced? Any " + "additional comments useful for diagnosing the problem? Please use English if " +@@ -935,13 +949,29 @@ msgstr "" + "ripridotto? Ulteriori commenti utili per la diagnosi del problema? Usare " + "l'inglese se possibile." + ++#: ../src/gui-wizard-gtk/wizard.glade.h:4 ++msgid "How reproducible is this problem?" ++msgstr "Quanto è riproducibile il problema?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++msgid "How it can be reproduced (one step per line)?" ++msgstr "Come può essere riprodotto (un passaggio per riga)?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++msgid "" ++"Please add a comprehensive description of the problem you have. This is a " ++"very long place holder." ++msgstr "" ++"Aggiungere una descrizione completa del problema riscontrato. Questo è un " ++"segnaposto molto lungo." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:8 ++#: ../src/gui-wizard-gtk/wizard.glade.h:7 + msgid "You need to fill the how to before you can proceed..." + msgstr "È necessario riempire il campo 'Come' prima di poter procedere..." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++#: ../src/gui-wizard-gtk/wizard.glade.h:8 + msgid "" + "Your comments are not private. They may be included into publicly " + "visible problem reports." +@@ -950,6 +980,11 @@ msgstr "" + "report visibili pubblicamente." + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++msgid "I don't know what caused this problem" ++msgstr "Non si conosce la causa di questo errore" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:10 + msgid "If you don't know how to describe it, you can" + msgstr "Se non si sa come descriverlo, si può" +@@ -961,11 +996,6 @@ msgstr "aggiungi una registrazione dello schermo" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:12 +-msgid "I don't know what caused this problem" +-msgstr "Non si conosce la causa di questo errore" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Use this button to generate more informative backtrace after you installed " + "additional debug packages" +@@ -974,7 +1004,7 @@ msgstr "" + "installato i pacchetti aggiuntivi per il debug" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:14 ++#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Please review the data before it gets reported. Depending on reporter " + "chosen, it may end up publicly visible." +@@ -982,49 +1012,49 @@ msgstr "" + "Prego revisionare i dati prima che vengano riportati. In base al reporter " + "scelto, possono diventare pubblicamente visibili." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:15 ++#: ../src/gui-wizard-gtk/wizard.glade.h:14 + msgid "Forbidden words" + msgstr "Parole proibite" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:16 ++#: ../src/gui-wizard-gtk/wizard.glade.h:15 + msgid "Custom" + msgstr "Personalizzazione" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:17 ++#: ../src/gui-wizard-gtk/wizard.glade.h:16 + msgid "Clear the search bar to see the list of security sensitive words." + msgstr "" + "Annulla la barra di ricerca per visualizzare un elenco di parole di " + "sicurezza sensibili." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:18 ++#: ../src/gui-wizard-gtk/wizard.glade.h:17 + msgid "file" + msgstr "file" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:19 ++#: ../src/gui-wizard-gtk/wizard.glade.h:18 + msgid "data" + msgstr "dati" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:20 ++#: ../src/gui-wizard-gtk/wizard.glade.h:19 + msgid "Search" + msgstr "Cerca" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:21 ++#: ../src/gui-wizard-gtk/wizard.glade.h:20 + msgid "Size:" + msgstr "Dimensione:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:22 ++#: ../src/gui-wizard-gtk/wizard.glade.h:21 + msgid "Attach a file" + msgstr "Allega un file" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:23 ++#: ../src/gui-wizard-gtk/wizard.glade.h:22 + msgid "I reviewed the data and _agree with submitting it" + msgstr "Ho revisionato i dati e _accetto il loro invio" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:24 ++#: ../src/gui-wizard-gtk/wizard.glade.h:23 + msgid "" + "If you are reporting to a remote server, make sure you removed all private " + "data (such as usernames and passwords). Backtrace, command line, environment " +@@ -1036,22 +1066,22 @@ msgstr "" + "necessitano di una revisione." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:25 ++#: ../src/gui-wizard-gtk/wizard.glade.h:24 + msgid "Processing did not start yet" + msgstr "L'elaboarazione non è ancora partita" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:26 ++#: ../src/gui-wizard-gtk/wizard.glade.h:25 + msgid "Show log" + msgstr "Mostra log" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:27 ++#: ../src/gui-wizard-gtk/wizard.glade.h:26 + msgid "Reporting has finished. You can close this window now." + msgstr "La fase di report è terminata. Ora si può chiudere la finestra." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:28 ++#: ../src/gui-wizard-gtk/wizard.glade.h:27 + msgid "" + "If you want to report the problem to a different destination, collect " + "additional information, or provide a better problem description and repeat " +@@ -1062,17 +1092,17 @@ msgstr "" + "ripetere il processo di riporto, premere 'Avanti'." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1007 ++#: ../src/include/internal_libreport.h:1046 + msgid "Be verbose" + msgstr "Sii verboso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1008 +-#: ../src/plugins/reporter-bugzilla.c:895 ++#: ../src/include/internal_libreport.h:1047 ++#: ../src/plugins/reporter-bugzilla.c:893 + #: ../src/plugins/reporter-kerneloops.c:166 +-#: ../src/plugins/reporter-mailx.c:198 ../src/plugins/reporter-print.c:56 +-#: ../src/plugins/reporter-rhtsupport.c:471 +-#: ../src/plugins/reporter-upload.c:249 ++#: ../src/plugins/reporter-mailx.c:280 ../src/plugins/reporter-print.c:56 ++#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-upload.c:188 + msgid "Problem directory" + msgstr "Directory del problema" + +@@ -1130,7 +1160,7 @@ msgid "'%s' is not correct file name" + msgstr "'%s' non è un nome del file valido" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/create_dump_dir.c:153 ++#: ../src/lib/create_dump_dir.c:150 + #, c-format + msgid "uid value is not valid: '%s'" + msgstr "valore uid non valido: '%s'" +@@ -1141,70 +1171,100 @@ msgstr "valore uid non valido: '%s'" + msgid "Uploaded: %llu of %llu kbytes" + msgstr "Caricati: %llu di %llu kbytes" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/curl.c:635 ++#: ../src/lib/curl.c:636 ++msgid "Ignoring URL without scheme and hostname" ++msgstr "Ignorare un URL senza schema e nome host" ++ ++#. Do not include the path part of the URL as it can contain sensitive data ++#. * in case of typos ++#: ../src/lib/curl.c:666 + #, c-format +-msgid "Sending %s to %s" +-msgstr "Invio di %s a %s in corso" ++msgid "Sending %s to %s//%s" ++msgstr "Invio di %s a %s//%s" + +-#: ../src/lib/curl.c:659 ++#: ../src/lib/curl.c:690 + #, c-format +-msgid "Please enter user name for '%s':" +-msgstr "Inserire il nome utente per '%s':" ++msgid "Please enter user name for '%s//%s':" ++msgstr "Immettere il nome utente per '%s//%s':" + +-#: ../src/lib/curl.c:665 ++#: ../src/lib/curl.c:696 + #, c-format +-msgid "Please enter password for '%s':" +-msgstr "Inserire la password per '%s':" ++msgid "Please enter password for '%s//%s@%s':" ++msgstr "Immettere la password per '%s//%s@%s':" + +-# translation auto-copied from project libreport, version master, document libreport + #. This ends up a "reporting status message" in abrtd +-#: ../src/lib/curl.c:688 ++#: ../src/lib/curl.c:719 ++#, c-format ++msgid "Successfully created %s" ++msgstr "%s creato con successo" ++ ++#: ../src/lib/dump_dir.c:1545 ++msgid "Failed to open TAR writer" ++msgstr "Impossibile aprire il writer TAR" ++ ++#: ../src/lib/dump_dir.c:1571 ++msgid "Failed to finalize TAR archive" ++msgstr "Impossibile finalizzare l’archivio TAR" ++ ++#: ../src/lib/dump_dir.c:1581 ++msgid "Failed to close TAR writer" ++msgstr "Impossibile chiudere il writer TAR" ++ ++#: ../src/lib/dump_dir.c:1591 ++#, c-format ++msgid "gzip killed with signal %d" ++msgstr "Operazione di kill su gzip con segnale %d" ++ ++#: ../src/lib/dump_dir.c:1597 + #, c-format +-msgid "Successfully sent %s to %s" +-msgstr "Invio di %s a %s completato" ++msgid "gzip exited with %d" ++msgstr "Uscita da gzip con %d" ++ ++#: ../src/lib/dump_dir.c:1600 ++msgid "gzip process failed" ++msgstr "Processo gzip non riuscito" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:348 ++#: ../src/lib/event_config.c:382 + msgid "Missing mandatory value" + msgstr "Valore obbligatorio mancante" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:356 ++#: ../src/lib/event_config.c:390 + #, c-format + msgid "Invalid utf8 character '%c'" + msgstr "Carattere utf8 '%c' non valido" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:369 ++#: ../src/lib/event_config.c:403 + #, c-format + msgid "Invalid number '%s'" + msgstr "Numero '%s' non valido" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:384 ++#: ../src/lib/event_config.c:418 + #, c-format + msgid "Invalid boolean value '%s'" + msgstr "Valore booleano '%s' non valido" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:390 ++#: ../src/lib/event_config.c:424 + msgid "Unsupported option type" + msgstr "Tipo di opzione non supportata" + +-#: ../src/lib/event_config.c:463 ++#: ../src/lib/event_config.c:497 + msgid "Reporting disabled because the rating does not contain a number." + msgstr "" + "Il riporto è stato disabilitato poichè la classificazione non contiene alcun " + "numero." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:464 ++#: ../src/lib/event_config.c:498 + msgid "Please report this problem to ABRT project developers." + msgstr "Prego segnalare questo problema agli sviluppatori del progetto ABRT." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:470 ++#: ../src/lib/event_config.c:504 + msgid "" + "The backtrace is incomplete, please make sure you provide the steps to " + "reproduce." +@@ -1213,19 +1273,19 @@ msgstr "" + "riprodurre il crash." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:471 ++#: ../src/lib/event_config.c:505 + msgid "The backtrace probably can't help developer to diagnose the bug." + msgstr "" + "Il backtrace probabilmente non può aiutare gli sviluppatori a diagnosticare " + "il bug." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:477 ++#: ../src/lib/event_config.c:511 + msgid "Reporting disabled because the backtrace is unusable." + msgstr "Notifica disabilitata poichè il backtrace è inutilizzabile." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:481 ++#: ../src/lib/event_config.c:515 + #, c-format + msgid "" + "Please try to install debuginfo manually using the command: \"debuginfo-" +@@ -1235,13 +1295,28 @@ msgstr "" + "\"debuginfo-install %s\" e riprovare." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:483 ++#: ../src/lib/event_config.c:517 + msgid "A proper debuginfo is probably missing or the coredump is corrupted." + msgstr "" + "Un corretto debuginfo è probabilmente mancante o il coredump è corrotto." + ++#: ../src/lib/iso_date_string.c:48 ++#, c-format ++msgid "String doesn't seem to be a date: '%s'" ++msgstr "La stringa non è una data: '%s'" ++ ++#: ../src/lib/iso_date_string.c:53 ++#, c-format ++msgid "The date: '%s' has unrecognized suffix: '%s'" ++msgstr "La data: '%s' possiede un suffisso non riconosciuto: '%s'" ++ ++#: ../src/lib/iso_date_string.c:58 ++#, c-format ++msgid "The date: '%s' is out of UNIX time stamp range" ++msgstr "La data: '%s' non rientra nell’intervallo del timestamp di UNIX" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:354 ++#: ../src/lib/ureport.c:395 + #, c-format + msgid "Your problem seems to be caused by %s\n" + "\n" +@@ -1251,30 +1326,40 @@ msgstr "Il problema sembra causato da %s⏎\n" + "%s\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:357 ++#: ../src/lib/ureport.c:398 + msgid "Your problem seems to be caused by one of the following:\n" + msgstr "Il problema sembra causato da uno dei seguenti:\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:528 ++#: ../src/lib/ureport.c:570 + #, c-format + msgid "Failed to upload uReport to the server '%s' with curl: %s" + msgstr "Fallito il caricamento dell'uReport sul server '%s' con curl: %s" + ++#: ../src/lib/ureport.c:574 ++#, c-format ++msgid "Failed to upload uReport to the server '%s'" ++msgstr "Caricamento uReport sul server '%s’ non riuscito" ++ ++#: ../src/lib/ureport.c:577 ++#, c-format ++msgid "Error: %s" ++msgstr "Errore: %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:534 ++#: ../src/lib/ureport.c:584 + #, c-format + msgid "The URL '%s' does not exist (got error 404 from server)" + msgstr "L'URL '%s' non esiste (errore 404 dal server)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:540 ++#: ../src/lib/ureport.c:590 + #, c-format + msgid "The server at '%s' encountered an internal error (got error 500)" + msgstr "Il server in '%s' ha riscontrato un errore interno (errore 500)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:546 ++#: ../src/lib/ureport.c:596 + #, c-format + msgid "The server at '%s' currently can't handle the request (got error 503)" + msgstr "" +@@ -1282,19 +1367,19 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #. can't print better error message +-#: ../src/lib/ureport.c:555 ++#: ../src/lib/ureport.c:605 + #, c-format + msgid "Unexpected HTTP response from '%s': %d" + msgstr "Risposta HTTP non prevista da '%s': %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:564 ++#: ../src/lib/ureport.c:614 + #, c-format + msgid "Unable to parse response from ureport server at '%s'" + msgstr "Impossibile analizzare la risposta dal server ureport in'%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:574 ++#: ../src/lib/ureport.c:624 + #, c-format + msgid "The response from '%s' has invalid format" + msgstr "La risposta da '%s' ha formato invalido" +@@ -1302,18 +1387,18 @@ msgstr "La risposta da '%s' ha formato invalido" + # translation auto-copied from project libreport, version master, document libreport + #. HTTP CODE 202 means that call was successful but the response + #. has an error message +-#: ../src/lib/ureport.c:580 ++#: ../src/lib/ureport.c:630 + #, c-format + msgid "Type mismatch has been detected in the response from '%s'" + msgstr "Tipo non corrispondente è stato rilevato nella risposta da '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:766 ../src/plugins/reporter-rhtsupport.c:198 ++#: ../src/lib/ureport.c:820 ../src/plugins/reporter-rhtsupport.c:233 + msgid "Failed on submitting the problem" + msgstr "Fallito nell'invio del problema" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:808 ++#: ../src/lib/ureport.c:862 + #, c-format + msgid "The server at '%s' responded with an error: '%s'" + msgstr "Il server in '%s' ha risposto con un errore: '%s'" +@@ -1339,6 +1424,32 @@ msgid "Essential element '%s' is missing, can't continue" + msgstr "L'elemento essenziale '%s' è mancante, impossibile continuare" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:478 ../src/plugins/reporter-bugzilla.c:355 ++#, c-format ++msgid "Can't parse backtrace: %s" ++msgstr "Non si può analizzare il backtrace: %s" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:489 ../src/plugins/reporter-bugzilla.c:366 ++msgid "Can't generate stacktrace description (no crash thread?)" ++msgstr "" ++"Non si riesce a generare la descrizione dello stacktrace (nessuna thread del " ++"crash?)" ++ ++#: ../src/lib/reported_to.c:52 ++msgid "Report result label mustn't be empty string." ++msgstr "L’etichetta risultato report non deve essere una stringa vuota." ++ ++#: ../src/lib/reported_to.c:58 ++msgid "Report result label mustn't contain ':' character." ++msgstr "L’etichetta risultato report deve contenere il carattere ‘:’." ++ ++#: ../src/lib/reported_to.c:141 ++#, c-format ++msgid "Ignored invalid ISO date of report result '%s'" ++msgstr "Data ISO non valida del risultato report '%s’ ignorata" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/run_event.c:791 + #, c-format + msgid "('%s' was killed by signal %u)\n" +@@ -1424,13 +1535,14 @@ msgstr "Riporta sul bug tracker di Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:3 +-msgid "Bugzilla URL" +-msgstr "URL di Bugzilla" ++#: ../src/plugins/report_Uploader.xml.in.h:6 ++msgid "User name" ++msgstr "Nome utente" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:4 +-msgid "Address of Bugzilla server" +-msgstr "Indizzo del server Bugzilla" ++msgid "Bugzilla account user name" ++msgstr "Nome utente per l'account di Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:5 +@@ -1443,48 +1555,23 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:6 +-#: ../src/plugins/report_Uploader.xml.in.h:6 +-msgid "User name" +-msgstr "Nome utente" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:7 +-msgid "Bugzilla account user name" +-msgstr "Nome utente per l'account di Bugzilla" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:5 + #: ../src/plugins/report_Uploader.xml.in.h:8 + msgid "Password" + msgstr "Password" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:9 ++#: ../src/plugins/report_Bugzilla.xml.in.h:7 + msgid "Bugzilla account password" + msgstr "Password account di bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:10 +-#: ../src/plugins/report_RHTSupport.xml.in.h:7 +-#: ../src/plugins/report_uReport.xml.in.h:7 +-msgid "Verify SSL" +-msgstr "Verifica SSL" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:11 +-#: ../src/plugins/report_RHTSupport.xml.in.h:8 +-#: ../src/plugins/report_uReport.xml.in.h:8 +-msgid "Check SSL key validity" +-msgstr "Controlla la validità della chiave SSL" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++#: ../src/plugins/report_Bugzilla.xml.in.h:8 + msgid "Restrict access" + msgstr "Restringi accesso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++#: ../src/plugins/report_Bugzilla.xml.in.h:9 + msgid "" + "Restrict access to the created bugzilla ticket allowing only users from " + "specified groups to view it (see advanced settings for more details)" +@@ -1494,12 +1581,50 @@ msgstr "" + "maggiori dettagli)" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:10 ++msgid "Groups" ++msgstr "Gruppi" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:11 ++msgid "" ++"Restrict the access to specified groups <a href=\"https://github.com/abrt/" ++"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++msgstr "" ++"Restringi l'accesso a gruppi specifici <a href=\"https://github.com/abrt/" ++"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++msgid "Bugzilla URL" ++msgstr "URL di Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++msgid "Address of Bugzilla server" ++msgstr "Indizzo del server Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:14 ++#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_uReport.xml.in.h:7 ++msgid "Verify SSL" ++msgstr "Verifica SSL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_uReport.xml.in.h:8 ++msgid "Check SSL key validity" ++msgstr "Controlla la validità della chiave SSL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:16 + msgid "Bugzilla product" + msgstr "Prodotto Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_Bugzilla.xml.in.h:17 + msgid "" + "Specify this only if you needed different product than specified in /etc/os-" + "release" +@@ -1508,12 +1633,12 @@ msgstr "" + "in /etc/os-release" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:16 ++#: ../src/plugins/report_Bugzilla.xml.in.h:18 + msgid "Bugzilla product version" + msgstr "Versione del prodotto Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:17 ++#: ../src/plugins/report_Bugzilla.xml.in.h:19 + msgid "" + "Specify this only if you needed different product version than specified in /" + "etc/os-release" +@@ -1522,7 +1647,7 @@ msgstr "" + "quella specificata in /etc/os-release" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:18 ++#: ../src/plugins/report_Bugzilla.xml.in.h:20 + #: ../src/plugins/report_Kerneloops.xml.in.h:5 + #: ../src/plugins/report_RHTSupport.xml.in.h:13 + #: ../src/plugins/report_Uploader.xml.in.h:10 +@@ -1532,7 +1657,7 @@ msgid "HTTP Proxy" + msgstr "Proxy HTTP" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:19 ++#: ../src/plugins/report_Bugzilla.xml.in.h:21 + #: ../src/plugins/report_Kerneloops.xml.in.h:6 + #: ../src/plugins/report_RHTSupport.xml.in.h:14 + #: ../src/plugins/report_Uploader.xml.in.h:11 +@@ -1542,7 +1667,7 @@ msgid "Sets the proxy server to use for HTTP" + msgstr "Imposta il server proxy da usare per HTTP" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:20 ++#: ../src/plugins/report_Bugzilla.xml.in.h:22 + #: ../src/plugins/report_Kerneloops.xml.in.h:7 + #: ../src/plugins/report_RHTSupport.xml.in.h:15 + #: ../src/plugins/report_Uploader.xml.in.h:12 +@@ -1552,7 +1677,7 @@ msgid "HTTPS Proxy" + msgstr "Proxy HTTPS" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:21 ++#: ../src/plugins/report_Bugzilla.xml.in.h:23 + #: ../src/plugins/report_Kerneloops.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:16 + #: ../src/plugins/report_Uploader.xml.in.h:13 +@@ -1562,20 +1687,6 @@ msgid "Sets the proxy server to use for HTTPS" + msgstr "Imposta il server proxy da usare per HTTPS" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:22 +-msgid "Groups" +-msgstr "Gruppi" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:23 +-msgid "" +-"Restrict the access to specified groups <a href=\"https://github.com/abrt/" +-"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +-msgstr "" +-"Restringi l'accesso a gruppi specifici <a href=\"https://github.com/abrt/" +-"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +- +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report.c:37 + msgid "" + "& [-v] --target TARGET --ticket ID FILE...\n" +@@ -1610,20 +1721,7 @@ msgid "Ticket/case ID" + msgstr "ID caso/ticket" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:355 +-#, c-format +-msgid "Can't parse backtrace: %s" +-msgstr "Non si può analizzare il backtrace: %s" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:366 +-msgid "Can't generate stacktrace description (no crash thread?)" +-msgstr "" +-"Non si riesce a generare la descrizione dello stacktrace (nessuna thread del " +-"crash?)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:764 ++#: ../src/plugins/reporter-bugzilla.c:762 + msgid "" + "Warning, private ticket groups already specified as cmdline argument, " + "ignoring the env variable and configuration" +@@ -1632,37 +1730,37 @@ msgstr "" + "argomento di cmdline, la configurazione e la variabile env verranno ignorati" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:775 +-#: ../src/plugins/reporter-rhtsupport.c:342 ++#: ../src/plugins/reporter-bugzilla.c:773 ++#: ../src/plugins/reporter-rhtsupport.c:377 + msgid "Can't continue without login" + msgstr "Non si può continuare senza login" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:788 +-#: ../src/plugins/reporter-rhtsupport.c:355 ++#: ../src/plugins/reporter-bugzilla.c:786 ++#: ../src/plugins/reporter-rhtsupport.c:390 + msgid "Can't continue without password" + msgstr "Non si può continuare senza password" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:797 ++#: ../src/plugins/reporter-bugzilla.c:795 + #, c-format + msgid "Logging into Bugzilla at %s" + msgstr "Accesso in corso in Bugzilla in %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:801 ++#: ../src/plugins/reporter-bugzilla.c:799 + msgid "Invalid password or login. Please enter your BZ login:" + msgstr "Password o login invalida. Inserire il proprio login di BZ:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:804 +-#: ../src/plugins/reporter-rhtsupport.c:369 ++#: ../src/plugins/reporter-bugzilla.c:802 ++#: ../src/plugins/reporter-rhtsupport.c:404 + #, c-format + msgid "Invalid password or login. Please enter the password for '%s':" + msgstr "Password o login non validi. Digitare la password per '%s':" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:823 ++#: ../src/plugins/reporter-bugzilla.c:821 + msgid "" + "\n" + "& [-vbf] [-g GROUP-NAME]... [-c CONFFILE]... [-F FMTFILE] [-A FMTFILE2] -d " +@@ -1753,77 +1851,78 @@ msgstr "" + "Se non specificato, CONFFILE eseguirà un default su " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:896 +-#: ../src/plugins/reporter-rhtsupport.c:472 ++#: ../src/plugins/reporter-bugzilla.c:894 ++#: ../src/plugins/reporter-rhtsupport.c:511 + msgid "Configuration file (may be given many times)" + msgstr "File di configurazione (può essere dato numerose volte)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:897 ++#: ../src/plugins/reporter-bugzilla.c:895 + msgid "Formatting file for initial comment" + msgstr "Formattando il file per commento iniziale" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:898 ++#: ../src/plugins/reporter-bugzilla.c:896 + msgid "Formatting file for duplicates" + msgstr "Formattando il file per i duplicati" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-bugzilla.c:897 + msgid "Attach FILEs [to bug with this ID]" + msgstr "Allega FILE [su bug con questo ID]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:900 ++#: ../src/plugins/reporter-bugzilla.c:898 + msgid "When creating bug, attach binary files too" + msgstr "Durante la creazione del bug, allega anche i file binari" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:901 +-#: ../src/plugins/reporter-rhtsupport.c:474 ++#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-rhtsupport.c:513 + msgid "Force reporting even if this problem is already reported" + msgstr "Forza il riporto anche se questo problema è già stato notificato." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:902 ++#: ../src/plugins/reporter-bugzilla.c:900 + msgid "Add bugzilla user to CC list [of bug with this ID]" + msgstr "Aggiungi l'utente bugzilla alla lista CC (del bug con questo ID)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:903 ++#: ../src/plugins/reporter-bugzilla.c:901 + msgid "Print BUG_ID which has given DUPHASH" + msgstr "Stampa BUG_ID che ha dato DUPHASH" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:904 ++#: ../src/plugins/reporter-bugzilla.c:902 + msgid "A name of bug tracker for an additional URL from 'reported_to'" + msgstr "Un nome del bug tracker per un URL aggiuntivo di 'reported_to'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:905 ++#: ../src/plugins/reporter-bugzilla.c:903 + msgid "Restrict access to this group only" + msgstr "Restringi l'accesso solo a questo gruppo" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:906 ++#: ../src/plugins/reporter-bugzilla.c:904 ../src/plugins/reporter-mailx.c:284 ++#: ../src/plugins/reporter-rhtsupport.c:517 + msgid "Debug" + msgstr "Debug" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:948 ++#: ../src/plugins/reporter-bugzilla.c:949 + msgid "Looking for similar problems in bugzilla" + msgstr "Ricerca di problemi simili in bugzilla " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:975 ++#: ../src/plugins/reporter-bugzilla.c:976 + msgid "Login is not provided by configuration. Please enter your BZ login:" + msgstr "" + "Il login non è incluso nella configurazione. Per cortesia inserisci il tuo " + "login BZ:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:981 +-#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-bugzilla.c:982 ++#: ../src/plugins/reporter-rhtsupport.c:551 + #, c-format + msgid "" + "Password is not provided by configuration. Please enter the password for " +@@ -1833,7 +1932,7 @@ msgstr "" + "password per '%s':" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1000 ++#: ../src/plugins/reporter-bugzilla.c:1001 + msgid "" + "Can't get Bugzilla ID because this problem has not yet been reported to " + "Bugzilla." +@@ -1842,7 +1941,7 @@ msgstr "" + "ancora riportato a Bugzilla." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1007 ++#: ../src/plugins/reporter-bugzilla.c:1008 + #, c-format + msgid "" + "This problem has been reported to Bugzilla '%s' which differs from the " +@@ -1852,89 +1951,112 @@ msgstr "" + "configurato '%s'." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1011 ++#: ../src/plugins/reporter-bugzilla.c:1012 + #, c-format + msgid "Malformed url to Bugzilla '%s'." + msgstr "URL malformato a Bugzilla '%s'." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1015 ++#: ../src/plugins/reporter-bugzilla.c:1016 + #, c-format + msgid "Using Bugzilla ID '%s'" + msgstr "Utllizzando Bugzilla ID '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1049 +-#: ../src/plugins/reporter-bugzilla.c:1341 ++#: ../src/plugins/reporter-bugzilla.c:1050 ++#: ../src/plugins/reporter-bugzilla.c:1220 ++#: ../src/plugins/reporter-bugzilla.c:1379 + msgid "Logging out" + msgstr "Uscita in corso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1100 ++#: ../src/plugins/reporter-bugzilla.c:1101 + msgid "Can't determine Bugzilla Product from problem data." + msgstr "" + "Non si riesce a determinare il Prodotto Bugzilla dai dati del problema" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1151 ++#: ../src/plugins/reporter-bugzilla.c:1152 + msgid "Checking for duplicates" + msgstr "Controllo presenza duplicati in corso" + ++#: ../src/plugins/reporter-bugzilla.c:1201 ++#, c-format ++msgid "" ++"You have requested to make your data accessible only to a specific group and " ++"this bug is a duplicate of bug: %s/%u In case of bug duplicates a new " ++"comment is added to the original bug report but access to the comments " ++"cannot be restricted to a specific group. Would you like to open a new bug " ++"report and close it as DUPLICATE of the original one? Otherwise, the bug " ++"reporting procedure will be terminated." ++msgstr "" ++"L’utente ha richiesto di rendere accessibile i dati solo a un gruppo " ++"specifico e questo bug è un duplicato del bug: %s/%u In caso di bug " ++"duplicati, viene aggiunto un nuovo commento al report del bug originale, ma " ++"l’accesso ai commenti non può essere limitato a un gruppo specifico. Aprire " ++"un nuovo report del bug e chiuderlo come DUPLICATO di quello originale? " ++"Altrimenti, la procedura di segnalazione del bug viene interrotta." ++ + # translation auto-copied from project libreport, version master, document libreport + #. Create new bug +-#: ../src/plugins/reporter-bugzilla.c:1197 ++#: ../src/plugins/reporter-bugzilla.c:1228 + msgid "Creating a new bug" + msgstr "Creazione di un nuovo bug in corso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1218 ++#: ../src/plugins/reporter-bugzilla.c:1249 + msgid "Failed to create a new bug." + msgstr "Non riuscita la creazione di un nuovo bug" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1229 ++#: ../src/plugins/reporter-bugzilla.c:1260 + #, c-format + msgid "Adding External URL to bug %i" + msgstr "Aggiunta URL esterno al bug %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1235 ++#: ../src/plugins/reporter-bugzilla.c:1266 + #, c-format + msgid "Adding attachments to bug %i" + msgstr "Aggiunta di allegati al bug %i in corso" + ++#: ../src/plugins/reporter-bugzilla.c:1280 ++#, c-format ++msgid "Closing bug %i as duplicate of bug %i" ++msgstr "Chiusura del bug %i come duplicato del bug %i" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1254 ++#: ../src/plugins/reporter-bugzilla.c:1292 + #, c-format + msgid "Bug is already reported: %i" + msgstr "Il bug è già stato riportato: %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1297 ++#: ../src/plugins/reporter-bugzilla.c:1335 + #, c-format + msgid "Adding %s to CC list" + msgstr "Si aggiunge %s alla lista CC" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1314 ++#: ../src/plugins/reporter-bugzilla.c:1352 + #, c-format + msgid "Adding new comment to bug %d" + msgstr "Aggiunta di nuovo commento al bug %d in corso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1328 ++#: ../src/plugins/reporter-bugzilla.c:1366 + msgid "Attaching better backtrace" + msgstr "Associazione di miglior backtrace in corso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1336 ++#: ../src/plugins/reporter-bugzilla.c:1374 + msgid "Found the same comment in the bug history, not adding a new one" + msgstr "" + "Trovato lo stesso commento nella cronologia del bug, nessun commento nuovo " + "aggiunto" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1344 ++#: ../src/plugins/reporter-bugzilla.c:1382 + #, c-format + msgid "Status: %s%s%s %s/show_bug.cgi?id=%u" + msgstr "Stato: %s%s%s %s/show_bug.cgi?id=%u" +@@ -1972,12 +2094,12 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/reporter-kerneloops.c:167 +-#: ../src/plugins/reporter-ureport.c:74 ++#: ../src/plugins/reporter-ureport.c:79 + msgid "Configuration file" + msgstr "File di configurazione" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:59 ++#: ../src/plugins/reporter-mailx.c:83 + #, c-format + msgid "" + "Email address of %s was not specified. Would you like to do so now? If not, " +@@ -1987,50 +2109,58 @@ msgstr "" + "In caso contrario usare '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:66 ++#: ../src/plugins/reporter-mailx.c:90 + #, c-format + msgid "Please, type email address of %s:" + msgstr "Digitare l'indirizzo email di %s:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:73 ++#: ../src/plugins/reporter-mailx.c:97 + #, c-format + msgid "Can't continue without email address of %s" + msgstr "Impossibile continuare senza l'indirizzo email di %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:135 ++#: ../src/plugins/reporter-mailx.c:206 ../src/plugins/reporter-mailx.c:211 + msgid "Sending an email..." + msgstr "Invio di una email in corso..." + ++#: ../src/plugins/reporter-mailx.c:209 ++#, c-format ++msgid "Sending a notification email to: %s" ++msgstr "Invio email di notifica a: %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:158 ++#: ../src/plugins/reporter-mailx.c:237 + #, c-format + msgid "Email was sent to: %s" + msgstr "L'email è stata inviata a: %s" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:178 ++#: ../src/plugins/reporter-mailx.c:258 + msgid "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Sends contents of a problem directory DIR via email\n" + "\n" + "If not specified, CONFFILE defaults to " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" +-"Invia i contenuti di una directory problematica DIR tramite email\n" ++"Invia i contenuti della directory di un problema DIR via email\n" + "\n" + "Se non specificato, CONFFILE esegue il default su " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:199 ../src/plugins/reporter-upload.c:250 ++#: ../src/plugins/reporter-mailx.c:281 ../src/plugins/reporter-upload.c:189 + msgid "Config file" + msgstr "File di config" + ++#: ../src/plugins/reporter-mailx.c:282 ++msgid "Formatting file for an email" ++msgstr "Formattazione file per una email" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:200 ++#: ../src/plugins/reporter-mailx.c:283 + msgid "Notify only (Do not mark the report as sent)" + msgstr "Notifica soltanto (Non impostare il report come inviato)." + +@@ -2074,37 +2204,37 @@ msgstr "" + "file:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was appended to %s" + msgstr "Il riporto è stato aggiunto a %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was stored to %s" + msgstr "Il riporto è stato archiviato su %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:259 +-#: ../src/plugins/reporter-ureport.c:237 ++#: ../src/plugins/reporter-rhtsupport.c:294 ++#: ../src/plugins/reporter-ureport.c:297 + #, c-format + msgid "Server responded with an error: '%s'" + msgstr "Il server ha risposto con un errore: '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:319 ++#: ../src/plugins/reporter-rhtsupport.c:354 + msgid "Do you still want to create a RHTSupport ticket?" + msgstr "Si desidera ancora creare un ticket per RHTSupport?" + +-#: ../src/plugins/reporter-rhtsupport.c:367 ++#: ../src/plugins/reporter-rhtsupport.c:402 + msgid "Invalid password or login. Please enter your Red Hat login:" + msgstr "Password o login invalidi. Inserire il login di Red Hat:" + +-#: ../src/plugins/reporter-rhtsupport.c:435 ++#: ../src/plugins/reporter-rhtsupport.c:471 + msgid "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -2113,99 +2243,131 @@ msgid "" + "If not specified, CONFFILE defaults to " + msgstr "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" +-"o:\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" ++"or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +-"Reports a problem to RHTSupport.\n" ++"Riporta un problema su RHTSupport.\n" + "\n" +-"If not specified, CONFFILE defaults to " ++"Se non specificato, CONFFILE esegue il default su " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:473 ++#: ../src/plugins/reporter-rhtsupport.c:512 + msgid "Upload FILEs [to case with this ID]" + msgstr "Carica i FILE [sul caso con questo ID]" + +-#: ../src/plugins/reporter-rhtsupport.c:475 ++#: ../src/plugins/reporter-rhtsupport.c:514 + msgid "Submit uReport before creating a new case" + msgstr "Inviare un uReport prima di creare un nuovo caso" + +-#: ../src/plugins/reporter-rhtsupport.c:476 ++#: ../src/plugins/reporter-rhtsupport.c:515 + msgid "Configuration file for uReport" + msgstr "File di configurazione per uReport" + ++#: ../src/plugins/reporter-rhtsupport.c:516 ++msgid "Formatting file for a new case" ++msgstr "Formattazione file per un nuovo caso" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:504 ++#: ../src/plugins/reporter-rhtsupport.c:545 + msgid "Login is not provided by configuration. Please enter your RHTS login:" + msgstr "" + "Il login non è incluso nella configurazione. Inserisci il tuo login RHTS:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:573 ++#: ../src/plugins/reporter-rhtsupport.c:614 + #, c-format + msgid "Attaching '%s' to case '%s'" + msgstr "Associazione di '%s' al caso '%s' in corso" + +-#: ../src/plugins/reporter-rhtsupport.c:610 ++#: ../src/plugins/reporter-rhtsupport.c:651 + msgid "Sending ABRT crash statistics data" + msgstr "Invio dati sul crash di ABRT" + ++#: ../src/plugins/reporter-rhtsupport.c:674 ++msgid "" ++"The problem has only occurred once and the ability to reproduce the problem " ++"is unknown. Please ensure you will be able to provide detailed information " ++"to our Support Team. Would you like to continue and open a new support case?" ++msgstr "" ++"Il problema si è verificato solo una volta e non è sicuro sia possibile " ++"riprodurlo. Assicurarsi di fornire informazioni dettagliate al team di " ++"supporto. Continuare e aprire un nuovo caso di supporto?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:690 ++#, c-format ++msgid "" ++"The crashed program was released by '%s'. Would you like to report the " ++"problem to Red Hat Support?" ++msgstr "" ++"Il programma arrestato è stato rilasciato da \"%s\". Riportare il problema " ++"al supporto Red Hat?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:708 ++#, c-format ++msgid "" ++"The program '%s' does not appear to be provided by Red Hat. Would you like " ++"to report the problem to Red Hat Support?" ++msgstr "" ++"Il programma \"%s\" non sembra essere fornito da Red Hat. Riportare il " ++"problema al supporto Red Hat?" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/reporter-rhtsupport.c:725 ++msgid "Can't create a temporary directory in " ++msgstr "Impossibile creare una directory temporanea in" ++ + # translation auto-copied from project libreport, version master, document libreport + #. Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing + #. error msg is already logged by dd_opendir +-#. Gzipping e.g. 0.5gig coredump takes a while. Let client know what we are doing +-#: ../src/plugins/reporter-rhtsupport.c:621 +-#: ../src/plugins/reporter-upload.c:52 ++#. Compressing e.g. 0.5gig coredump takes a while. Let client know what we are doing ++#: ../src/plugins/reporter-rhtsupport.c:793 ++#: ../src/plugins/reporter-upload.c:103 + msgid "Compressing data" + msgstr "Compressione dati in corso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:656 +-msgid "Can't create a temporary directory in " +-msgstr "Impossibile creare una directory temporanea in" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:665 ++#: ../src/plugins/reporter-rhtsupport.c:801 + msgid "Can't create temporary file in " + msgstr "Impossibile creare il file temporaneo in" + + # translation auto-copied from project libreport, version master, document libreport + #. Check for hints and show them if we have something +-#: ../src/plugins/reporter-rhtsupport.c:676 ++#: ../src/plugins/reporter-rhtsupport.c:812 + msgid "Checking for hints" + msgstr "Controllo per suggerimenti in corso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:686 ++#: ../src/plugins/reporter-rhtsupport.c:822 + msgid "Creating a new case" + msgstr "Sto creando un nuovo caso" + + # translation auto-copied from project libreport, version master, document libreport + #. How can we help user sorting out this problem? +-#: ../src/plugins/reporter-rhtsupport.c:697 ++#: ../src/plugins/reporter-rhtsupport.c:833 + msgid "Can't determine RH Support Product from problem data." + msgstr "" + "Non si può determinare il prodotto di supporto RH dai dati del problema" + +-#: ../src/plugins/reporter-rhtsupport.c:753 ++#: ../src/plugins/reporter-rhtsupport.c:889 + msgid "Linking ABRT crash statistics record with the case" + msgstr "Associazione record statistiche crash di ABRT con il caso" + +-#: ../src/plugins/reporter-rhtsupport.c:766 ++#: ../src/plugins/reporter-rhtsupport.c:902 + #, c-format + msgid "Linking ABRT crash statistics record with contact email: '%s'" + msgstr "" + "Associazione record statistiche crash di ABRT con indirizzo email: '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:790 ++#: ../src/plugins/reporter-rhtsupport.c:926 + #, c-format + msgid "Adding comment to case '%s'" + msgstr "Aggiunta commento al caso '%s'" + + # translation auto-copied from project libreport, version master, document libreport + #. Attach the tarball of -d DIR +-#: ../src/plugins/reporter-rhtsupport.c:808 ++#: ../src/plugins/reporter-rhtsupport.c:944 + #, c-format + msgid "Attaching problem data to case '%s'" + msgstr "Assegnazione in corso, dei dati del problema al caso '%s'" +@@ -2221,49 +2383,55 @@ msgid "Updates which possibly help: " + msgstr "Aggiornmenti che possono essere utili:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:30 ++#: ../src/plugins/reporter-upload.c:29 + msgid "Can't continue without URL" + msgstr "Impossibile continuare senza URL" + +-#: ../src/plugins/reporter-upload.c:61 +-msgid "Upload URL is not provided by configuration. Please enter upload URL:" +-msgstr "" +-"La configurazione non fornisce un URL di caricamento. Inserire un URL di " +-"caricamento:" +- + #. Be permissive and nice, ask only once and don't check + #. the result. User can dismiss this prompt but the upload + #. may work somehow??? +-#: ../src/plugins/reporter-upload.c:164 ++#: ../src/plugins/reporter-upload.c:51 + msgid "Please enter password for uploading:" + msgstr "Inserire una password per il caricamento:" + + # translation auto-copied from project libreport, version master, document libreport + #. success +-#: ../src/plugins/reporter-upload.c:181 ++#: ../src/plugins/reporter-upload.c:120 + #, c-format + msgid "Archive is created: '%s'" + msgstr "Archivio creato: '%s'" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:222 ++#: ../src/plugins/reporter-upload.c:159 + msgid "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Uploads compressed tarball of problem directory DIR to URL.\n" + "If URL is not specified, creates tarball in " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" +-"Carica il tarball compresso della directory che descrive il problema DIR su " +-"URL.\n" +-"Se l'URL non è stato specificato creare il tarball in " ++"Carica il tarball compresso della directory del problema DIR nell’URL.\n" ++"Se non viene specificato un URL, crea la tarball su " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:251 ++#: ../src/plugins/reporter-upload.c:190 + msgid "Base URL to upload to" + msgstr "URL di base sul quale eseguire il caricamento" + ++#: ../src/plugins/reporter-upload.c:191 ++msgid "SSH public key file" ++msgstr "File a chiave pubblica SSH" ++ ++#: ../src/plugins/reporter-upload.c:192 ++msgid "SSH private key file" ++msgstr "File a chiave privata SSH" ++ ++#: ../src/plugins/reporter-upload.c:221 ++msgid "" ++"Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:" ++"" ++msgstr "Inserire un URL (SCP, FTP, ecc.) dove esportare i dati del problema:" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Kerneloops.xml.in.h:1 + msgid "Kerneloops.org" +@@ -2389,11 +2557,11 @@ msgstr "Nome utente del cliente Red Hat" + msgid "Red Hat customer password" + msgstr "Password cliente Red Hat" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:9 ++#: ../src/plugins/report_RHTSupport.xml.in.h:7 + msgid "Submit uReport" + msgstr "Invia uReport" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:10 ++#: ../src/plugins/report_RHTSupport.xml.in.h:8 + msgid "" + "Submit <a href=\"https://access.redhat.com/articles/642323\">micro-" + "report</a> when creating a new case." +@@ -2402,12 +2570,12 @@ msgstr "" + "report</a> quando crei un nuovo caso." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_RHTSupport.xml.in.h:9 + msgid "RH Portal URL" + msgstr "URL del portale di RH" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_RHTSupport.xml.in.h:10 + msgid "Address of the Red Hat support portal" + msgstr "Indirizzo del portale di supporto di Red Hat" + +@@ -2464,6 +2632,22 @@ msgstr "Proxy FTP" + msgid "Sets the proxy server to use for FTP" + msgstr "Imposta il server proxy da usare per FTP" + ++#: ../src/plugins/report_Uploader.xml.in.h:16 ++msgid "SSH Public key file" ++msgstr "File a chiave pubblica SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:17 ++msgid "Use this field to specify SSH public keyfile" ++msgstr "Utilizzare questo campo per specificare il file a chiave pubblica SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:18 ++msgid "SSH Private key file" ++msgstr "File a chiave privata SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:19 ++msgid "Use this field to specify SSH private keyfile" ++msgstr "Utilizzare questo campo per specificare il file a chiave privata SSH" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_uReport.xml.in.h:1 + msgid "uReport" +@@ -2549,52 +2733,52 @@ msgid "Bugzilla couldn't find parent of bug %d" + msgstr "Bugzilla non è stato in grado di trovare il genitore del bug %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/rhbz.c:893 ++#: ../src/plugins/rhbz.c:916 + msgid "Bug.search(quicksearch) return value did not contain member 'bugs'" + msgstr "" + "Bug.search(quicksearch) ha ritornato un valore che non contiene il membro " + "'bugs'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:68 ++#: ../src/plugins/reporter-ureport.c:73 + msgid "Specify server URL" + msgstr "Specifica l'URL del server" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:70 ++#: ../src/plugins/reporter-ureport.c:75 + msgid "Allow insecure connection to ureport server" + msgstr "Permetti connessione insicura al server ureport" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:71 ++#: ../src/plugins/reporter-ureport.c:76 + msgid "Use client authentication" + msgstr "Utilizza l'autenticazione del client" + +-#: ../src/plugins/reporter-ureport.c:72 ++#: ../src/plugins/reporter-ureport.c:77 + msgid "Use HTTP Authentication" + msgstr "Usa l'autenticazione HTTP" + +-#: ../src/plugins/reporter-ureport.c:73 ++#: ../src/plugins/reporter-ureport.c:78 + msgid "Additional files included in 'auth' key" + msgstr "File aggiuntivi inclusi in 'auth'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:76 ++#: ../src/plugins/reporter-ureport.c:81 + msgid "bthash of uReport to attach (conflicts with -A)" + msgstr "bthash di uReport da allegare (in conflitto con -A)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:78 ++#: ../src/plugins/reporter-ureport.c:83 + msgid "attach to a bthash from reported_to (conflicts with -a)" + msgstr "allega a un bthash di reported_to (in conflitto con -a)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:80 ++#: ../src/plugins/reporter-ureport.c:85 + msgid "contact e-mail address (requires -a|-A, conflicts with -E)" + msgstr "indirizzo e-mail (ha bisogno di -a|-A, in conflitto con -E)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:82 ++#: ../src/plugins/reporter-ureport.c:87 + msgid "" + "contact e-mail address from environment or configuration file (requires -a|-" + "A, conflicts with -e)" +@@ -2603,22 +2787,52 @@ msgstr "" + "in conflitto con -e)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:84 ++#: ../src/plugins/reporter-ureport.c:89 + msgid "attach RHBZ bug (requires -a|-A, conflicts with -B)" + msgstr "allega bug RHBZ (necessita di -a|-A, in conflitto con -B)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:86 ++#: ../src/plugins/reporter-ureport.c:91 + msgid "" + "attach last RHBZ bug from reported_to (requires -a|-A, conflicts with -b)" + msgstr "" + "allega ultimo bug RHBZ di reported_to (necessita di -a|-A, in conflitto con -" + "b)" + +-#: ../src/plugins/reporter-ureport.c:91 ++#: ../src/plugins/reporter-ureport.c:95 ++msgid "attach value (requires -a|-A and -T, conflicts with -L)" ++msgstr "allega valore (richiede -a|-A e -T, in conflitto con -L)" ++ ++#: ../src/plugins/reporter-ureport.c:97 ++msgid "" ++"attach data of FIELD [URL] of the last report result (requires -a|-A, -r and " ++"-T, conflicts with -l)" ++msgstr "" ++"allega dati del CAMPO [URL] dell’ultimo risultato del report (richiede -a|-" ++"A, -r e -T, in conflitto con -l)" ++ ++#: ../src/plugins/reporter-ureport.c:100 ++msgid "" ++"use REPORT_RESULT_TYPE when looking for FIELD in reported_to (used only with " ++"-L)" ++msgstr "" ++"usa REPORT_RESULT_TYPE quando si cerca il CAMPO in reported_to (utilizzato " ++"solo con -L)" ++ ++#: ../src/plugins/reporter-ureport.c:102 ++msgid "" ++"attach DATA as ureporte attachment ATTACHMENT_TYPE (used only with -l|-L)" ++msgstr "" ++"allega DATI come allegato non riportato ATTACHMENT_TYPE (utilizzato solo con " ++"-l|-L)" ++ ++#: ../src/plugins/reporter-ureport.c:107 + msgid "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2629,38 +2843,51 @@ msgid "" + msgstr "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" + "\n" +-"Carica un micro report o aggiungi un allegato ad un micro report\n" ++"Carica un micro-report o aggiunge un allegato a un micro-report\n" + "\n" + "Legge la configurazione predefinita da " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:144 ++#: ../src/plugins/reporter-ureport.c:179 + msgid "This problem does not have an uReport assigned." + msgstr "Questo problema non ha un uReport assegnato" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:157 ++#: ../src/plugins/reporter-ureport.c:192 + msgid "This problem has not been reported to Bugzilla." + msgstr "Questo problema non è stato riportato in Bugzilla." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:161 ++#: ../src/plugins/reporter-ureport.c:196 + #, c-format + msgid "Unable to find bug ID in bugzilla URL '%s'" + msgstr "Impossibile trovare l'ID del bug nell'URL di bugzilla '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:166 ++#: ../src/plugins/reporter-ureport.c:201 + #, c-format + msgid "Unable to parse bug ID from bugzilla URL '%s'" + msgstr "Impossibile trovare l'ID del bug nell'URL di bugzilla '%s'" + ++#: ../src/plugins/reporter-ureport.c:211 ++#, c-format ++msgid "This problem has not been reported to '%s'." ++msgstr "Questo problema non è stato riportato su ‘%s’." ++ ++#: ../src/plugins/reporter-ureport.c:216 ++#, c-format ++msgid "The report result '%s' is missing URL." ++msgstr "Il risultato del report '%s' non ha un URL." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:179 ++#: ../src/plugins/reporter-ureport.c:233 + msgid "" + "Neither environment variable 'uReport_ContactEmail' nor configuration option " + "'ContactEmail' is set" +@@ -2668,22 +2895,22 @@ msgstr "" + "La variabile dell'ambiente 'uReport_ContactEmail' e l'opzione di " + "configurazione 'ContactEmail' non sono stati impostati" + +-#: ../src/plugins/reporter-ureport.c:185 ++#: ../src/plugins/reporter-ureport.c:239 + msgid "You need to specify bug ID, contact email or both" + msgstr "Specificare l'ID di un bug, una email di contatto o entrambi" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:203 ++#: ../src/plugins/reporter-ureport.c:263 + msgid "You need to specify bthash of the uReport to attach." + msgstr "Occorre specificare il bthash dell'uReport da allegare." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:208 ++#: ../src/plugins/reporter-ureport.c:268 + msgid "Not uploading an empty uReport" + msgstr "Non si carica un uReport vuoto" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:229 ++#: ../src/plugins/reporter-ureport.c:289 + msgid "This problem has already been reported." + msgstr "Questo problema è già stato segnalato." + +@@ -2851,7 +3078,18 @@ msgid "Analyze the problem locally and send information via email" + msgstr "" + "Analizzare il problema localmente e inviare le informazioni tramite email" + +-# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_uReport.xml.in.h:1 ++msgid "Submit anonymous crash report" ++msgstr "Invia rapporto di arresto anonimo" ++ ++#: ../src/workflows/workflow_uReport.xml.in.h:2 ++msgid "" ++"Submit anonymous crash report - I do not want to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Invia rapporto di arresto anonimo. Non voglio essere contattato dal supporto " ++"Red Hat" ++ + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:1 + #: ../src/workflows/workflow_RHELKerneloops.xml.in.h:1 + #: ../src/workflows/workflow_RHELPython.xml.in.h:1 +@@ -2859,58 +3097,65 @@ msgstr "" + #: ../src/workflows/workflow_RHELxorg.xml.in.h:1 + #: ../src/workflows/workflow_RHELLibreport.xml.in.h:1 + #: ../src/workflows/workflow_RHELJava.xml.in.h:1 +-msgid "Report to Red Hat Customer Portal" +-msgstr "Segnalare al Portale Clienti di Red Hat" ++msgid "Ask Red Hat Support for help" ++msgstr "Richiedi il supporto di Red Hat" + +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:2 ++#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 ++#: ../src/workflows/workflow_RHELPython.xml.in.h:2 ++#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 ++#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 ++#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 ++#: ../src/workflows/workflow_RHELJava.xml.in.h:2 ++msgid "" ++"Create new Red Hat Support case - I would like to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Crea nuovo caso per il supporto Red Hat. Voglio essere contattato dal " ++"supporto Red Hat" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 ++msgid "Report to Red Hat Bugzilla" ++msgstr "Segnala a Red Hat Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:2 + msgid "Process the C/C++ crash using the Red Hat infrastructure" + msgstr "Analizza il crash C/C++ usando l'infrastruttura di Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:2 + msgid "Process the kerneloops using the Red Hat infrastructure" + msgstr "Analizza i kerneloop usando l'infrastruttura di Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELPython.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:2 + msgid "Process the python exception using the Red Hat infrastructure" + msgstr "Analizza l'eccezione di python usando l'infrastruttura di Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:2 + msgid "Process the kernel crash using the Red Hat infrastructure" + msgstr "Analizza il crash del kernel usando l'infrastruttura di Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:2 + msgid "Process the X Server problem using the Red Hat infrastructure" + msgstr "Analizza il problema del server X usando l'infrastruttura di Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:2 + msgid "Process the problem using the Red Hat infrastructure" + msgstr "Processa il problema usando l'infrastruttura di Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELJava.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:2 + msgid "Process the Java exception using the Red Hat infrastructure" + msgstr "Processa l'eccezione di Java usando l'infrastruttura di Red Hat" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 +-msgid "Report to Red Hat Bugzilla" +-msgstr "Segnala a Red Hat Bugzilla" +diff --git a/po/ja.po b/po/ja.po +index 5c96c49..76b1ab3 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -1,17 +1,19 @@ + # Noriko Mizumoto , 2015. #zanata ++# Aiko Sasaki , 2016. #zanata ++# Kenzo Moriguchi , 2016. #zanata + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2015-07-14 15:18+0200\n" ++"POT-Creation-Date: 2016-06-29 15:25+0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2015-07-19 09:37-0400\n" +-"Last-Translator: Noriko Mizumoto \n" ++"PO-Revision-Date: 2016-08-19 02:11-0400\n" ++"Last-Translator: Aiko Sasaki \n" + "Language-Team: Japanese\n" + "Language: ja\n" +-"X-Generator: Zanata 3.6.2\n" ++"X-Generator: Zanata 3.9.5\n" + "Plural-Forms: nplurals=1; plural=0\n" + + # translation auto-copied from project libreport, version master, document libreport +@@ -130,12 +132,12 @@ msgstr "# クラッシュの理由" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/cli/cli-report.c:170 + msgid "# os-release configuration file from root dir" +-msgstr "# ルートディレクトリから os-release 設定ファイル" ++msgstr "# ルートディレクトリーから os-release 設定ファイル" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/cli/cli-report.c:175 + msgid "# Release string of the operating system from root dir" +-msgstr "# ルートディレクトリからオペレーティングシステムのリリース文字列" ++msgstr "# ルートディレクトリーからオペレーティングシステムのリリース文字列" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/cli/cli-report.c:183 +@@ -207,37 +209,31 @@ msgstr "実行するワークフローの選択:" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:87 +-#, python-brace-format + msgid "Extracting cpio from {0}" + msgstr "cpio を {0} から抽出中" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:92 +-#, python-brace-format + msgid "Can't write to '{0}': {1}" + msgstr "「{0}」 に書き込みできません: {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:107 +-#, python-brace-format + msgid "Can't extract package '{0}'" + msgstr "パッケージ「{0}」を抽出できません" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:115 +-#, python-brace-format + msgid "Caching files from {0} made from {1}" + msgstr "{0} にある {1} から作成されたファイルをキャッシュ中" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:134 +-#, python-brace-format + msgid "Can't extract files from '{0}'" + msgstr "「{0}」からファイルを抽出できません" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:147 +-#, python-brace-format + msgid "Can't remove '{0}': {1}" + msgstr "「{0}」を削除できません: {1}" + +@@ -246,7 +242,6 @@ msgstr "「{0}」を削除できません: {1}" + #. % (self.downloaded_pkgs + 1, self.total_pkgs, name, pct) + #. ) + #: ../src/client-python/debuginfo.py:194 ../src/client-python/debuginfo.py:205 +-#, python-brace-format + msgid "Downloading ({0} of {1}) {2}: {3:3}%" + msgstr "ダウンロード中 ({0} / {1}) {2}: {3:3}%" + +@@ -273,7 +268,7 @@ msgstr "yum の初期化でエラー発生 (YumBase.doConfigSetup): '{0!s}'" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:325 + msgid "Error: can't make cachedir, exiting" +-msgstr "エラー: キャッシュディレクトリを作成できません、終了します" ++msgstr "エラー: キャッシュディレクトリーを作成できません、終了します" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:334 +@@ -284,7 +279,7 @@ msgstr "リポジトリー '{0!s}' を無効化できません: {1!s}" + #. This takes some time, let user know what we are doing + #: ../src/client-python/debuginfo.py:337 + msgid "Setting up yum repositories" +-msgstr "yum リポジトリの設定中" ++msgstr "yum リポジトリーの設定中" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:354 +@@ -293,7 +288,6 @@ msgstr "非同期ダウンロードを無効化できません、出力に加工 + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:356 +-#, python-brace-format + msgid "Can't setup {0}: {1}, disabling" + msgstr "{0} を設定できません: {1}、 無効にしています" + +@@ -304,7 +298,7 @@ msgstr "{0} を設定できません: {1}、 無効にしています" + #. we have "paused": + #: ../src/client-python/debuginfo.py:363 + msgid "Looking for needed packages in repositories" +-msgstr "必要なパッケージをリポジトリで検索中" ++msgstr "必要なパッケージをリポジトリーで検索中" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:367 +@@ -318,19 +312,16 @@ msgstr "ファイル一覧の取得中にエラーが発生: '{0!s}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:416 +-#, python-brace-format + msgid "Can't find packages for {0} debuginfo files" + msgstr "{0} debuginfo ファイルのパッケージが見つかりません" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:418 +-#, python-brace-format + msgid "Packages to download: {0}" + msgstr "ダウンロードするパッケージ: {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:419 +-#, python-brace-format + msgid "Downloading {0:.2f}Mb, installed size: {1:.2f}Mb. Continue?" + msgstr "ダウンロード中 {0:.2f}Mb、 インストールサイズ: {1:.2f}Mb、 続行しますか?" + +@@ -342,28 +333,24 @@ msgstr "ユーザーによってダウンロードが取り消されました" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:434 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in tmp dir '{0}' ({1:.2f}Mb left). Continue?" +-msgstr "警告: 十分な空き容量が一時ディレクトリ '{0}' にありません (残り {1:.2f}MB)。続行しますか?" ++msgstr "警告: 十分な空き容量が一時ディレクトリー '{0}' にありません (残り {1:.2f}MB)。続行しますか?" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:443 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in cache dir '{0}' ({1:.2f}Mb left). " + "Continue?" +-msgstr "警告: 十分な空き容量がキャッシュディレクトリ '{0}' にありません (残り {1:.2f}MB)。続行しますか?" ++msgstr "警告: 十分な空き容量がキャッシュディレクトリー '{0}' にありません (残り {1:.2f}MB)。続行しますか?" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:469 +-#, python-brace-format + msgid "Cannot copy file '{0}': {1}" + msgstr "ファイル '{0}' をコピーできません: {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:487 +-#, python-brace-format + msgid "Downloading package {0} failed" + msgstr "パッケージ {0} のダウンロードに失敗しました " + +@@ -378,7 +365,6 @@ msgstr "解凍に失敗しました、 ダウンロードを中止していま + #. but it was appearing even if no packages were in fact extracted + #. (say, when there was one package, and it has download error). + #: ../src/client-python/debuginfo.py:504 +-#, python-brace-format + msgid "Removing {0}" + msgstr "{0} を削除中" + +@@ -440,7 +426,7 @@ msgid "C_onfigure" + msgstr "設定(_O)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3472 ++#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3718 + msgid "_Close" + msgstr "閉じる(_C)" + +@@ -471,7 +457,7 @@ msgstr "シークレットサービスが利用できません、設定は保存 + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gtk-helpers/event_config_dialog.c:321 + #: ../src/gtk-helpers/workflow_config_dialog.c:86 +-#: ../src/gui-wizard-gtk/wizard.c:822 ../src/gui-wizard-gtk/wizard.c:3101 ++#: ../src/gui-wizard-gtk/wizard.c:844 ../src/gui-wizard-gtk/wizard.c:3325 + msgid "_Cancel" + msgstr "キャンセル(_C)" + +@@ -550,7 +536,7 @@ msgstr "" + msgid "Alternate GUI file" + msgstr "代替の GUI ファイル" + +-#: ../src/gui-wizard-gtk/wizard.c:354 ++#: ../src/gui-wizard-gtk/wizard.c:378 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide the " +@@ -563,7 +549,7 @@ msgstr "" + "\n" + "設定についての詳細を見る: https://access.redhat.com/site/articles/718083" + +-#: ../src/gui-wizard-gtk/wizard.c:357 ++#: ../src/gui-wizard-gtk/wizard.c:381 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide " +@@ -576,76 +562,93 @@ msgstr "" + "\n" + "設定についての詳細は見る" + +-#: ../src/gui-wizard-gtk/wizard.c:373 ++#: ../src/gui-wizard-gtk/wizard.c:397 + #, c-format + msgid "Con_figure %s" + msgstr "%s の設定 (_F)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:400 ++#: ../src/gui-wizard-gtk/wizard.c:424 + #, c-format + msgid "" + "Need writable directory, but '%s' is not writable. Move it to '%s' and " + "operate on the moved data?" +-msgstr "書き込み可能なディレクトリが必要ですが、「%s」は書き込みできません。 「%s」に移動してから移動したデータで操作してみてください。" ++msgstr "書き込み可能なディレクトリーが必要ですが、「%s」は書き込みできません。 「%s」に移動してから移動したデータで操作してみてください。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:813 ++#: ../src/gui-wizard-gtk/wizard.c:835 + msgid "View/edit a text file" + msgstr "テキストファイルの表示/編集" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:821 ++#: ../src/gui-wizard-gtk/wizard.c:843 + msgid "_Save" + msgstr "保存(_S)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1040 ++#: ../src/gui-wizard-gtk/wizard.c:1067 + msgid "" + "No reporting targets are defined for this problem. Check configuration in /" + "etc/libreport/*" + msgstr "この問題に対する報告ターゲットが定義されていません。 /etc/libreport/* にある設定を確認してください。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1077 ++#: ../src/gui-wizard-gtk/wizard.c:1104 + #, c-format + msgid "(requires: %s)" + msgstr "(必須: %s)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1091 ++#: ../src/gui-wizard-gtk/wizard.c:1118 + #, c-format + msgid "(not needed, data already exist: %s)" + msgstr "(必要ありません、データがすでに存在しません: %s)" + ++#: ../src/gui-wizard-gtk/wizard.c:1217 ++msgid "" ++"Since crashes without a known reproducer can be difficult to diagnose, " ++"please provide a comprehensive description of the problem you have " ++"encountered." ++msgstr "既知の再現ツールなしでクラッシュを診断することは容易でない場合があるため、発生した問題についての総合的な説明を記入してください。" ++ ++#: ../src/gui-wizard-gtk/wizard.c:1224 ++msgid "" ++"Please provide a short description of the problem and please include the " ++"steps you have used to reproduce the problem." ++msgstr "問題の簡単な説明を記入し、問題の再現手順を記載してください。" ++ ++#: ../src/gui-wizard-gtk/wizard.c:1231 ++msgid "Please provide the steps you have used to reproduce the problem." ++msgstr "問題の再現手順を記載してください。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1277 ++#: ../src/gui-wizard-gtk/wizard.c:1349 + msgid "(click here to view/edit)" + msgstr "(ここをクリックして 表示/編集)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1288 ++#: ../src/gui-wizard-gtk/wizard.c:1360 + #, c-format + msgid "(binary file, %llu bytes)" + msgstr "(バイナリファイル、 %llu バイト)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1395 ../src/report-newt/report-newt.c:334 ++#: ../src/gui-wizard-gtk/wizard.c:1467 ../src/report-newt/report-newt.c:334 + msgid "(no description)" + msgstr "(説明なし)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1403 ++#: ../src/gui-wizard-gtk/wizard.c:1475 + #, c-format + msgid "%llu bytes, %u files" + msgstr "%llu バイト、 %u ファイル" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1647 ++#: ../src/gui-wizard-gtk/wizard.c:1752 + msgid "Processing was canceled" + msgstr "処理が中断されました" + +-#: ../src/gui-wizard-gtk/wizard.c:1851 ++#: ../src/gui-wizard-gtk/wizard.c:1956 + msgid "" + "Processing of the problem failed. This can have many reasons but there are " + "three most common:\n" +@@ -658,7 +661,7 @@ msgstr "" + "\t▫ 破損データによる問題\n" + "\t▫ 無効な設定" + +-#: ../src/gui-wizard-gtk/wizard.c:1860 ++#: ../src/gui-wizard-gtk/wizard.c:1965 + msgid "" + "If you want to update the configuration and try to report again, please open " + "Preferences item\n" +@@ -670,50 +673,61 @@ msgstr "" + "Repeat ボタン" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1978 ++#: ../src/gui-wizard-gtk/wizard.c:2089 + msgid "Processing was interrupted because the problem is not reportable." + msgstr "問題が報告可能な形式ではなかったため、処理が中断されました。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1988 ../src/gui-wizard-gtk/wizard.c:2057 ++#: ../src/gui-wizard-gtk/wizard.c:2099 ../src/gui-wizard-gtk/wizard.c:2168 + msgid "Processing failed." + msgstr "処理に失敗しました。" + + # translation auto-copied from project libreport, version master, document libreport + #. No next event, go to progress page and finish +-#: ../src/gui-wizard-gtk/wizard.c:1995 ../src/gui-wizard-gtk/wizard.c:2818 ++#: ../src/gui-wizard-gtk/wizard.c:2106 ../src/gui-wizard-gtk/wizard.c:3040 + msgid "Processing finished." + msgstr "処理が完了しました。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1996 ++#: ../src/gui-wizard-gtk/wizard.c:2107 + msgid "Processing finished, please proceed to the next step." + msgstr "処理が完了しました。次のステップに進んでください。" + + # translation auto-copied from project libreport, version master, document libreport + #. TODO: better msg? +-#: ../src/gui-wizard-gtk/wizard.c:2054 ++#: ../src/gui-wizard-gtk/wizard.c:2165 + #, c-format + msgid "No processing for event '%s' is defined" + msgstr "イベント '%s' のプロセッシングは定義されていません。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2068 ++#: ../src/gui-wizard-gtk/wizard.c:2179 + msgid "Processing interrupted: can't continue without writable directory." +-msgstr "処理を中断しました: 書き込み可能なディレクトリなしで続行できません。" ++msgstr "処理を中断しました: 書き込み可能なディレクトリーなしで続行できません。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2105 ++#: ../src/gui-wizard-gtk/wizard.c:2216 + msgid "Processing..." + msgstr "処理しています..." + ++#: ../src/gui-wizard-gtk/wizard.c:2297 ++msgid "" ++"Possible sensitive data detected, feel free to edit the report and remove " ++"them." ++msgstr "機密の可能性があるデータを検出しました。機密情報はレポートを編集するといつでも削除できます。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2198 ++#: ../src/gui-wizard-gtk/wizard.c:2337 + msgid "Cannot check backtrace rating because of invalid event name" + msgstr "無効なイベント名のためバックトレースのレーティングを確認できません" + ++#: ../src/gui-wizard-gtk/wizard.c:2869 ++#, c-format ++msgid "Failed to save file '%s'" ++msgstr "ファイル '%s' の保存に失敗しました" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2838 ++#: ../src/gui-wizard-gtk/wizard.c:3060 + #, c-format + msgid "" + "Event '%s' requires permission to send possibly sensitive data.\n" +@@ -722,112 +736,133 @@ msgstr "イベント '%s' はおそらく機微な情報を送信する権限が + "続行したいですか?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2886 ++#: ../src/gui-wizard-gtk/wizard.c:3108 + #, c-format + msgid "This problem should not be reported (it is likely a known problem). %s" + msgstr "この問題は報告されるべきではありません (おそらく既知の問題と思われます)。 %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3102 ++#: ../src/gui-wizard-gtk/wizard.c:3326 + msgid "_Open" + msgstr "開く(_O)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3124 ++#: ../src/gui-wizard-gtk/wizard.c:3348 + #, c-format + msgid "'%s' is not an ordinary file" + msgstr "「%s」は普通のファイルではありません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3138 ++#: ../src/gui-wizard-gtk/wizard.c:3362 + msgid "You are trying to copy a file onto itself" + msgstr "ファイルをそのファイル自体にコピーしようとしています" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3145 ++#: ../src/gui-wizard-gtk/wizard.c:3369 + #, c-format + msgid "Can't copy '%s': %s" + msgstr "「%s」をコピーできません: %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3160 ++#: ../src/gui-wizard-gtk/wizard.c:3384 + #, c-format + msgid "Item '%s' already exists and is not modifiable" + msgstr "アイテム「%s」はすでに存在しているため変更できません" + ++#: ../src/gui-wizard-gtk/wizard.c:3542 ++msgid "I have experienced this problem for the first time" ++msgstr "この問題が発生したのは初めてです" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3545 ++msgid "I can reproduce this problem" ++msgstr "この問題を再現できます" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3548 ++msgid "This problem occurs repeatedly" ++msgstr "この問題は繰り返し発生しています" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3314 ++#: ../src/gui-wizard-gtk/wizard.c:3560 + msgid "Include" + msgstr "含む" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3325 ++#: ../src/gui-wizard-gtk/wizard.c:3571 + msgid "Name" + msgstr "名前" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3335 ++#: ../src/gui-wizard-gtk/wizard.c:3581 + msgid "Value" + msgstr "値" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3369 ++#: ../src/gui-wizard-gtk/wizard.c:3615 + msgid "Problem description" + msgstr "問題の説明" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3370 ++#: ../src/gui-wizard-gtk/wizard.c:3616 + msgid "Select how to report this problem" + msgstr "この問題を報告する方法を選択してください" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3371 ++#: ../src/gui-wizard-gtk/wizard.c:3617 + msgid "Provide additional information" + msgstr "その他の情報の提供" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3372 ++#: ../src/gui-wizard-gtk/wizard.c:3618 + msgid "Review the data" + msgstr "データのレビュー" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3373 ++#: ../src/gui-wizard-gtk/wizard.c:3619 + msgid "Confirm data to report" + msgstr "報告するデータの確認" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3374 ++#: ../src/gui-wizard-gtk/wizard.c:3620 + msgid "Processing" + msgstr "処理しています" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3375 ++#: ../src/gui-wizard-gtk/wizard.c:3621 + msgid "Processing done" + msgstr "処理が完了しました" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3474 ++#: ../src/gui-wizard-gtk/wizard.c:3720 + msgid "_Stop" + msgstr "中止 (_S)" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3477 ++#: ../src/gui-wizard-gtk/wizard.c:3723 + msgid "Upload for analysis" + msgstr "分析のためにアップロードする" + + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3480 ++#: ../src/gui-wizard-gtk/wizard.c:3726 + msgid "Repeat" + msgstr "繰り返す" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3483 ++#: ../src/gui-wizard-gtk/wizard.c:3729 + msgid "_Forward" + msgstr "転送 (_F)" + +-#: ../src/gui-wizard-gtk/wizard.c:3575 ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.c:3780 ++msgid "Restrict access to the report" ++msgstr "レポートへのアクセスを制限する" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3785 ++msgid "Learn more about restricted access in the configuration" ++msgstr "設定内の制限されたアクセスについて詳しく知る" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3844 + msgid "" + "In order to enable the built-in screencasting functionality the package fros-" + "gnome has to be installed. Please run the following command if you want to " +@@ -840,30 +875,8 @@ msgstr "" + "\n" + "su -c \"yum install fros-gnome\"" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:1 +-msgid "" +-"Possible sensitive data detected, feel free to edit the report and remove " +-"them." +-msgstr "機密の可能性があるデータを検出しました。機密情報はレポートを編集するといつでも削除できます。" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:2 +-msgid "Restrict access to the report" +-msgstr "レポートへのアクセスを制限する" +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:3 +-msgid "" +-"No one except Red Hat employees will be allowed to see the report with " +-"restricted access (not even you)" +-msgstr "アクセスが禁止されたレポートは Red Hat 従業員を除き誰の閲覧も許可されません (レポート報告者も含む)" +- + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:4 +-msgid "Read more about reports with restricted access" +-msgstr "制限されたアクセスの報告の詳細を参照する" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++#: ../src/gui-wizard-gtk/wizard.glade.h:1 + msgid "" + "On the following screens, you will be asked to describe how the problem " + "occurred, to choose how to analyze the problem (if needed), to review " +@@ -873,12 +886,12 @@ msgstr "" + "以下の画面で、問題が発生した順序の説明、問題分析法の選択(必要な場合)、収集データの再確認、及び問題報告先の選択などを依頼されます。「進む」を押して継続します。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++#: ../src/gui-wizard-gtk/wizard.glade.h:2 + msgid "Details" + msgstr "詳細" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:7 ++#: ../src/gui-wizard-gtk/wizard.glade.h:3 + msgid "" + "How did this problem happen (step-by-step)? How can it be reproduced? Any " + "additional comments useful for diagnosing the problem? Please use English if " +@@ -887,19 +900,38 @@ msgstr "" + "この問題がどのようにして発生したか順を追って説明してください。 再現方法を説明してください。 問題の診断に役立つそうなコメントが他にありますか? " + "できれば英語でお願いします。" + ++#: ../src/gui-wizard-gtk/wizard.glade.h:4 ++msgid "How reproducible is this problem?" ++msgstr "この問題は再現可能ですか?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++msgid "How it can be reproduced (one step per line)?" ++msgstr "どのように再現できますか (1 行に 1 手順)?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++msgid "" ++"Please add a comprehensive description of the problem you have. This is a " ++"very long place holder." ++msgstr "問題の総合的な説明を記入してください。これは非常に長いプレースホルダーです。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:8 ++#: ../src/gui-wizard-gtk/wizard.glade.h:7 + msgid "You need to fill the how to before you can proceed..." + msgstr "方法を記入した後に次に進むことができます..." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++#: ../src/gui-wizard-gtk/wizard.glade.h:8 + msgid "" + "Your comments are not private. They may be included into publicly " + "visible problem reports." + msgstr "コメントはプライベートではありません。公共に見える問題報告に含まれるかも知れません。" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++msgid "I don't know what caused this problem" ++msgstr "この問題の原因がわかりません。" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:10 + msgid "If you don't know how to describe it, you can" + msgstr "それを説明する方法がわからなければ、次のことができます。" +@@ -911,64 +943,59 @@ msgstr "スクリーンキャストの追加" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:12 +-msgid "I don't know what caused this problem" +-msgstr "この問題の原因がわかりません。" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Use this button to generate more informative backtrace after you installed " + "additional debug packages" + msgstr "追加のデバッグパッケージをインストールした後に、このボタンを使用してより情報を持つバックトレースを生成します" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:14 ++#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Please review the data before it gets reported. Depending on reporter " + "chosen, it may end up publicly visible." + msgstr "報告する前にデータを確認してください。選択した報告先によっては、一般公開される可能性があります。" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:15 ++#: ../src/gui-wizard-gtk/wizard.glade.h:14 + msgid "Forbidden words" + msgstr "禁止用語" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:16 ++#: ../src/gui-wizard-gtk/wizard.glade.h:15 + msgid "Custom" + msgstr "カスタム" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:17 ++#: ../src/gui-wizard-gtk/wizard.glade.h:16 + msgid "Clear the search bar to see the list of security sensitive words." + msgstr "検索バーを消去して危険性のある用語の一覧を表示します。" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:18 ++#: ../src/gui-wizard-gtk/wizard.glade.h:17 + msgid "file" + msgstr "ファイル" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:19 ++#: ../src/gui-wizard-gtk/wizard.glade.h:18 + msgid "data" + msgstr "データ" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:20 ++#: ../src/gui-wizard-gtk/wizard.glade.h:19 + msgid "Search" + msgstr "検索" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:21 ++#: ../src/gui-wizard-gtk/wizard.glade.h:20 + msgid "Size:" + msgstr "サイズ: " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:22 ++#: ../src/gui-wizard-gtk/wizard.glade.h:21 + msgid "Attach a file" + msgstr "ファイルの添付" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:23 ++#: ../src/gui-wizard-gtk/wizard.glade.h:22 + msgid "I reviewed the data and _agree with submitting it" + msgstr "データを見直しました、 送信に同意します。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:24 ++#: ../src/gui-wizard-gtk/wizard.glade.h:23 + msgid "" + "If you are reporting to a remote server, make sure you removed all private " + "data (such as usernames and passwords). Backtrace, command line, environment " +@@ -978,22 +1005,22 @@ msgstr "" + "バックトレース、 コマンドライン、 環境変数などは特に注意が必要な事項になります。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:25 ++#: ../src/gui-wizard-gtk/wizard.glade.h:24 + msgid "Processing did not start yet" + msgstr "処理がまだ開始していません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:26 ++#: ../src/gui-wizard-gtk/wizard.glade.h:25 + msgid "Show log" + msgstr "ログの表示" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:27 ++#: ../src/gui-wizard-gtk/wizard.glade.h:26 + msgid "Reporting has finished. You can close this window now." + msgstr "報告は終了しました。この画面を今閉じることができます。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:28 ++#: ../src/gui-wizard-gtk/wizard.glade.h:27 + msgid "" + "If you want to report the problem to a different destination, collect " + "additional information, or provide a better problem description and repeat " +@@ -1002,19 +1029,19 @@ msgstr "" + "異なる送信先に問題を報告したい場合は、追加情報を収集するか、又はより良い問題説明を提供して報告プロセスを繰り返した上で、「進む」を押します。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1007 ++#: ../src/include/internal_libreport.h:1046 + msgid "Be verbose" + msgstr "冗長な出力" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1008 +-#: ../src/plugins/reporter-bugzilla.c:895 ++#: ../src/include/internal_libreport.h:1047 ++#: ../src/plugins/reporter-bugzilla.c:893 + #: ../src/plugins/reporter-kerneloops.c:166 +-#: ../src/plugins/reporter-mailx.c:198 ../src/plugins/reporter-print.c:56 +-#: ../src/plugins/reporter-rhtsupport.c:471 +-#: ../src/plugins/reporter-upload.c:249 ++#: ../src/plugins/reporter-mailx.c:280 ../src/plugins/reporter-print.c:56 ++#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-upload.c:188 + msgid "Problem directory" +-msgstr "問題ディレクトリ" ++msgstr "問題ディレクトリー" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/abrt_sock.c:160 +@@ -1035,7 +1062,7 @@ msgstr "権限がありません" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/abrt_sock.c:208 + msgid "not a problem directory" +-msgstr "問題ディレクトリではありません" ++msgstr "問題ディレクトリーではありません" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/abrt_sock.c:217 +@@ -1070,7 +1097,7 @@ msgid "'%s' is not correct file name" + msgstr "'%s' は正しいファイル名ではありません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/create_dump_dir.c:153 ++#: ../src/lib/create_dump_dir.c:150 + #, c-format + msgid "uid value is not valid: '%s'" + msgstr "UID 値が無効です: '%s'" +@@ -1081,85 +1108,115 @@ msgstr "UID 値が無効です: '%s'" + msgid "Uploaded: %llu of %llu kbytes" + msgstr "アップロード済み: 合計 %llu キロバイトの内 %llu キロバイト" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/curl.c:635 ++#: ../src/lib/curl.c:636 ++msgid "Ignoring URL without scheme and hostname" ++msgstr "スキームおよびホスト名なしの URL を無視しています" ++ ++#. Do not include the path part of the URL as it can contain sensitive data ++#. * in case of typos ++#: ../src/lib/curl.c:666 + #, c-format +-msgid "Sending %s to %s" +-msgstr "%s を %s に送信しています" ++msgid "Sending %s to %s//%s" ++msgstr "%s を %s//%s に送信しています" + +-#: ../src/lib/curl.c:659 ++#: ../src/lib/curl.c:690 + #, c-format +-msgid "Please enter user name for '%s':" +-msgstr "'%s' のユーザー名を入力してください:" ++msgid "Please enter user name for '%s//%s':" ++msgstr "'%s//%s' のユーザー名を入力してください:" + +-#: ../src/lib/curl.c:665 ++#: ../src/lib/curl.c:696 + #, c-format +-msgid "Please enter password for '%s':" +-msgstr "'%s' のパスワードを入力してください:" ++msgid "Please enter password for '%s//%s@%s':" ++msgstr "'%s//%s@%s' のパスワードを入力してください:" + +-# translation auto-copied from project libreport, version master, document libreport + #. This ends up a "reporting status message" in abrtd +-#: ../src/lib/curl.c:688 ++#: ../src/lib/curl.c:719 ++#, c-format ++msgid "Successfully created %s" ++msgstr "%s が正常に作成されました" ++ ++#: ../src/lib/dump_dir.c:1545 ++msgid "Failed to open TAR writer" ++msgstr "TAR writer をオープンできませんでした" ++ ++#: ../src/lib/dump_dir.c:1571 ++msgid "Failed to finalize TAR archive" ++msgstr " TAR アーカイブを完了できませんでした" ++ ++#: ../src/lib/dump_dir.c:1581 ++msgid "Failed to close TAR writer" ++msgstr "TAR writer をクローズできませんでした" ++ ++#: ../src/lib/dump_dir.c:1591 + #, c-format +-msgid "Successfully sent %s to %s" +-msgstr "%s を %s に正常に送信しました" ++msgid "gzip killed with signal %d" ++msgstr "gzip がシグナル %d によりキルされました" ++ ++#: ../src/lib/dump_dir.c:1597 ++#, c-format ++msgid "gzip exited with %d" ++msgstr "gzip が %d で終了しました" ++ ++#: ../src/lib/dump_dir.c:1600 ++msgid "gzip process failed" ++msgstr "gzip プロセスが失敗しました" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:348 ++#: ../src/lib/event_config.c:382 + msgid "Missing mandatory value" + msgstr "必須の値がありません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:356 ++#: ../src/lib/event_config.c:390 + #, c-format + msgid "Invalid utf8 character '%c'" + msgstr "無効な utf8 文字 '%c'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:369 ++#: ../src/lib/event_config.c:403 + #, c-format + msgid "Invalid number '%s'" + msgstr "無効な数字 '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:384 ++#: ../src/lib/event_config.c:418 + #, c-format + msgid "Invalid boolean value '%s'" + msgstr "無効な boolean 値 '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:390 ++#: ../src/lib/event_config.c:424 + msgid "Unsupported option type" + msgstr "サポートされていないオプションタイプ" + +-#: ../src/lib/event_config.c:463 ++#: ../src/lib/event_config.c:497 + msgid "Reporting disabled because the rating does not contain a number." + msgstr "レーティングに数字がないため、報告機能が無効になっています。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:464 ++#: ../src/lib/event_config.c:498 + msgid "Please report this problem to ABRT project developers." + msgstr "この問題を ABRT プロジェクト開発者に連絡してください。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:470 ++#: ../src/lib/event_config.c:504 + msgid "" + "The backtrace is incomplete, please make sure you provide the steps to " + "reproduce." + msgstr "バックトレースが不完全です。再現手順が書かれているかどうか確認してください。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:471 ++#: ../src/lib/event_config.c:505 + msgid "The backtrace probably can't help developer to diagnose the bug." + msgstr "おそらくこのバックトレースはバグを診断するときに開発者の役に立ちません。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:477 ++#: ../src/lib/event_config.c:511 + msgid "Reporting disabled because the backtrace is unusable." + msgstr "バックトレースが利用できないため、報告機能が無効になっています。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:481 ++#: ../src/lib/event_config.c:515 + #, c-format + msgid "" + "Please try to install debuginfo manually using the command: \"debuginfo-" +@@ -1167,12 +1224,27 @@ msgid "" + msgstr "次のコマンドを使用して手動で debuginfo をインストールして、再び試してください: \"debuginfo-install %s\"" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:483 ++#: ../src/lib/event_config.c:517 + msgid "A proper debuginfo is probably missing or the coredump is corrupted." + msgstr "適切な debuginfo がおそらく見つかりません、またはコアダンプが破損しています。" + ++#: ../src/lib/iso_date_string.c:48 ++#, c-format ++msgid "String doesn't seem to be a date: '%s'" ++msgstr "文字列は日付ではないようです: '%s'" ++ ++#: ../src/lib/iso_date_string.c:53 ++#, c-format ++msgid "The date: '%s' has unrecognized suffix: '%s'" ++msgstr "日付: '%s' には認識されない接尾辞があります: '%s'" ++ ++#: ../src/lib/iso_date_string.c:58 ++#, c-format ++msgid "The date: '%s' is out of UNIX time stamp range" ++msgstr "日付: '%s' が UNIX タイムスタンプの範囲外にあります" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:354 ++#: ../src/lib/ureport.c:395 + #, c-format + msgid "Your problem seems to be caused by %s\n" + "\n" +@@ -1182,49 +1254,59 @@ msgstr "あなたの問題は %s により引き起こされた可能性があ + "%s\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:357 ++#: ../src/lib/ureport.c:398 + msgid "Your problem seems to be caused by one of the following:\n" + msgstr "あなたの問題は以下のどれかにより引き起こされた可能性があります:\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:528 ++#: ../src/lib/ureport.c:570 + #, c-format + msgid "Failed to upload uReport to the server '%s' with curl: %s" + msgstr "サーバー '%s' に curl を用いた uReport のアップロードに失敗しました: %s" + ++#: ../src/lib/ureport.c:574 ++#, c-format ++msgid "Failed to upload uReport to the server '%s'" ++msgstr "uReport のサーバー '%s' へのアップロードに失敗しました" ++ ++#: ../src/lib/ureport.c:577 ++#, c-format ++msgid "Error: %s" ++msgstr "エラー: %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:534 ++#: ../src/lib/ureport.c:584 + #, c-format + msgid "The URL '%s' does not exist (got error 404 from server)" + msgstr "URL '%s' が存在しません (サーバーからエラー 404 の応答)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:540 ++#: ../src/lib/ureport.c:590 + #, c-format + msgid "The server at '%s' encountered an internal error (got error 500)" + msgstr "'%s' のサーバーが内部エラーになりました (エラー 500)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:546 ++#: ../src/lib/ureport.c:596 + #, c-format + msgid "The server at '%s' currently can't handle the request (got error 503)" + msgstr "'%s' のサーバーが現在リクエストを処理できません (エラー 503)" + + # translation auto-copied from project libreport, version master, document libreport + #. can't print better error message +-#: ../src/lib/ureport.c:555 ++#: ../src/lib/ureport.c:605 + #, c-format + msgid "Unexpected HTTP response from '%s': %d" + msgstr "'%s' より予期しない HTTP 応答です: %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:564 ++#: ../src/lib/ureport.c:614 + #, c-format + msgid "Unable to parse response from ureport server at '%s'" + msgstr "'%s' の uReport サーバーからの応答を構文解析できません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:574 ++#: ../src/lib/ureport.c:624 + #, c-format + msgid "The response from '%s' has invalid format" + msgstr "'%s' からの応答が無効な形式です" +@@ -1232,18 +1314,18 @@ msgstr "'%s' からの応答が無効な形式です" + # translation auto-copied from project libreport, version master, document libreport + #. HTTP CODE 202 means that call was successful but the response + #. has an error message +-#: ../src/lib/ureport.c:580 ++#: ../src/lib/ureport.c:630 + #, c-format + msgid "Type mismatch has been detected in the response from '%s'" + msgstr "型の不一致が '%s' からの応答に検出されました" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:766 ../src/plugins/reporter-rhtsupport.c:198 ++#: ../src/lib/ureport.c:820 ../src/plugins/reporter-rhtsupport.c:233 + msgid "Failed on submitting the problem" + msgstr "問題の提出に失敗しました" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:808 ++#: ../src/lib/ureport.c:862 + #, c-format + msgid "The server at '%s' responded with an error: '%s'" + msgstr "'%s' のサーバーがエラーを応答しました: '%s'" +@@ -1269,6 +1351,30 @@ msgid "Essential element '%s' is missing, can't continue" + msgstr "必須エレメントの「%s」がありません、 続行できません" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:478 ../src/plugins/reporter-bugzilla.c:355 ++#, c-format ++msgid "Can't parse backtrace: %s" ++msgstr "バックトレースを解析できません: %s" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:489 ../src/plugins/reporter-bugzilla.c:366 ++msgid "Can't generate stacktrace description (no crash thread?)" ++msgstr "スタックトレースの説明を生成できません (クラッシュスレッドがありませんか?)。" ++ ++#: ../src/lib/reported_to.c:52 ++msgid "Report result label mustn't be empty string." ++msgstr "レポート結果ラベルに空白の文字列を設定できません。" ++ ++#: ../src/lib/reported_to.c:58 ++msgid "Report result label mustn't contain ':' character." ++msgstr "レポート結果ラベルに ':' 文字を含めることはできません。" ++ ++#: ../src/lib/reported_to.c:141 ++#, c-format ++msgid "Ignored invalid ISO date of report result '%s'" ++msgstr "レポート結果 '%s' の無効な ISO 日付が無視されました" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/run_event.c:791 + #, c-format + msgid "('%s' was killed by signal %u)\n" +@@ -1346,13 +1452,14 @@ msgstr "Bugzilla バグトラッカーに報告する" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:3 +-msgid "Bugzilla URL" +-msgstr "Bugzilla URL" ++#: ../src/plugins/report_Uploader.xml.in.h:6 ++msgid "User name" ++msgstr "ユーザー名" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:4 +-msgid "Address of Bugzilla server" +-msgstr "Bugzilla サーバーのアドレス" ++msgid "Bugzilla account user name" ++msgstr "Bugzilla アカウントのユーザー名" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:5 +@@ -1365,131 +1472,130 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:6 +-#: ../src/plugins/report_Uploader.xml.in.h:6 +-msgid "User name" +-msgstr "ユーザー名" ++#: ../src/plugins/report_RHTSupport.xml.in.h:5 ++#: ../src/plugins/report_Uploader.xml.in.h:8 ++msgid "Password" ++msgstr "パスワード" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:7 +-msgid "Bugzilla account user name" +-msgstr "Bugzilla アカウントのユーザー名" ++msgid "Bugzilla account password" ++msgstr "Bugzilla アカウントのパスワード" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:8 +-#: ../src/plugins/report_RHTSupport.xml.in.h:5 +-#: ../src/plugins/report_Uploader.xml.in.h:8 +-msgid "Password" +-msgstr "パスワード" ++msgid "Restrict access" ++msgstr "アクセス制限" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:9 +-msgid "Bugzilla account password" +-msgstr "Bugzilla アカウントのパスワード" ++msgid "" ++"Restrict access to the created bugzilla ticket allowing only users from " ++"specified groups to view it (see advanced settings for more details)" ++msgstr "" ++"作成した Bugzilla チケットのアクセスを制限します。指定されたグループのユーザーのみが参照できます (詳細は高度な設定を参照してください)。" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:10 +-#: ../src/plugins/report_RHTSupport.xml.in.h:7 +-#: ../src/plugins/report_uReport.xml.in.h:7 +-msgid "Verify SSL" +-msgstr "SSL を照合する" ++msgid "Groups" ++msgstr "グループ" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:11 +-#: ../src/plugins/report_RHTSupport.xml.in.h:8 +-#: ../src/plugins/report_uReport.xml.in.h:8 +-msgid "Check SSL key validity" +-msgstr "SSL キーの妥当性をチェックする" ++msgid "" ++"Restrict the access to specified groups <a href=\"https://github.com/abrt/" ++"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++msgstr "" ++"アクセス権を指定されたグループ <a href=\"https://github.com/abrt/abrt/wiki/FAQ#creating-" ++"private-bugzilla-tickets\">?</a> に制限します。" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:12 +-msgid "Restrict access" +-msgstr "アクセス制限" ++msgid "Bugzilla URL" ++msgstr "Bugzilla URL" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:13 +-msgid "" +-"Restrict access to the created bugzilla ticket allowing only users from " +-"specified groups to view it (see advanced settings for more details)" +-msgstr "" +-"作成した Bugzilla チケットのアクセスを制限します。指定されたグループのユーザーのみが参照できます (詳細は高度な設定を参照してください)。" ++msgid "Address of Bugzilla server" ++msgstr "Bugzilla サーバーのアドレス" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:14 ++#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_uReport.xml.in.h:7 ++msgid "Verify SSL" ++msgstr "SSL を照合する" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_uReport.xml.in.h:8 ++msgid "Check SSL key validity" ++msgstr "SSL キーの妥当性をチェックする" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:16 + msgid "Bugzilla product" + msgstr "Bugzilla 製品" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_Bugzilla.xml.in.h:17 + msgid "" + "Specify this only if you needed different product than specified in /etc/os-" + "release" + msgstr "/etc/os-release に指定された製品と異なる製品が必要な場合のみ指定してください" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:16 ++#: ../src/plugins/report_Bugzilla.xml.in.h:18 + msgid "Bugzilla product version" + msgstr "Bugzilla 製品バージョン" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:17 ++#: ../src/plugins/report_Bugzilla.xml.in.h:19 + msgid "" + "Specify this only if you needed different product version than specified in /" + "etc/os-release" + msgstr "/etc/os-release に指定された製品バージョンと異なる製品が必要な場合のみ指定してください" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:18 ++#: ../src/plugins/report_Bugzilla.xml.in.h:20 + #: ../src/plugins/report_Kerneloops.xml.in.h:5 + #: ../src/plugins/report_RHTSupport.xml.in.h:13 + #: ../src/plugins/report_Uploader.xml.in.h:10 + #: ../src/plugins/report_uReport.xml.in.h:9 + #: ../src/plugins/report_EmergencyAnalysis.xml.in.h:4 + msgid "HTTP Proxy" +-msgstr "HTTP プロキシ" ++msgstr "HTTP プロキシー" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:19 ++#: ../src/plugins/report_Bugzilla.xml.in.h:21 + #: ../src/plugins/report_Kerneloops.xml.in.h:6 + #: ../src/plugins/report_RHTSupport.xml.in.h:14 + #: ../src/plugins/report_Uploader.xml.in.h:11 + #: ../src/plugins/report_uReport.xml.in.h:10 + #: ../src/plugins/report_EmergencyAnalysis.xml.in.h:5 + msgid "Sets the proxy server to use for HTTP" +-msgstr "HTTP のために使用するプロキシサーバーを設定する" ++msgstr "HTTP のために使用するプロキシーサーバーを設定する" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:20 ++#: ../src/plugins/report_Bugzilla.xml.in.h:22 + #: ../src/plugins/report_Kerneloops.xml.in.h:7 + #: ../src/plugins/report_RHTSupport.xml.in.h:15 + #: ../src/plugins/report_Uploader.xml.in.h:12 + #: ../src/plugins/report_uReport.xml.in.h:11 + #: ../src/plugins/report_EmergencyAnalysis.xml.in.h:6 + msgid "HTTPS Proxy" +-msgstr "HTTPS プロキシ" ++msgstr "HTTPS プロキシー" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:21 ++#: ../src/plugins/report_Bugzilla.xml.in.h:23 + #: ../src/plugins/report_Kerneloops.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:16 + #: ../src/plugins/report_Uploader.xml.in.h:13 + #: ../src/plugins/report_uReport.xml.in.h:12 + #: ../src/plugins/report_EmergencyAnalysis.xml.in.h:7 + msgid "Sets the proxy server to use for HTTPS" +-msgstr "HTTPS のために使用するプロキシサーバーを設定する" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:22 +-msgid "Groups" +-msgstr "グループ" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:23 +-msgid "" +-"Restrict the access to specified groups <a href=\"https://github.com/abrt/" +-"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +-msgstr "" +-"アクセス権を指定されたグループ <a href=\"https://github.com/abrt/abrt/wiki/FAQ#creating-" +-"private-bugzilla-tickets\">?</a> に制限します。" ++msgstr "HTTPS のために使用するプロキシーサーバーを設定する" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report.c:37 +@@ -1526,55 +1632,44 @@ msgid "Ticket/case ID" + msgstr "チケット/ケース ID" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:355 +-#, c-format +-msgid "Can't parse backtrace: %s" +-msgstr "バックトレースを解析できません: %s" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:366 +-msgid "Can't generate stacktrace description (no crash thread?)" +-msgstr "スタックトレースの説明を生成できません (クラッシュスレッドがありませんか?)。" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:764 ++#: ../src/plugins/reporter-bugzilla.c:762 + msgid "" + "Warning, private ticket groups already specified as cmdline argument, " + "ignoring the env variable and configuration" + msgstr "警告、プライベートチケットがすでにコマンドライン引数として指定されています。環境変数と設定を無視します。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:775 +-#: ../src/plugins/reporter-rhtsupport.c:342 ++#: ../src/plugins/reporter-bugzilla.c:773 ++#: ../src/plugins/reporter-rhtsupport.c:377 + msgid "Can't continue without login" + msgstr "ログインせずに続行できません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:788 +-#: ../src/plugins/reporter-rhtsupport.c:355 ++#: ../src/plugins/reporter-bugzilla.c:786 ++#: ../src/plugins/reporter-rhtsupport.c:390 + msgid "Can't continue without password" + msgstr "パスワードなしで続行できません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:797 ++#: ../src/plugins/reporter-bugzilla.c:795 + #, c-format + msgid "Logging into Bugzilla at %s" + msgstr "%s にある Bugzilla にログインしています" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:801 ++#: ../src/plugins/reporter-bugzilla.c:799 + msgid "Invalid password or login. Please enter your BZ login:" + msgstr "無効なパスワードまたはログイン名です。あなたの BZ ログイン名を入力してください:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:804 +-#: ../src/plugins/reporter-rhtsupport.c:369 ++#: ../src/plugins/reporter-bugzilla.c:802 ++#: ../src/plugins/reporter-rhtsupport.c:404 + #, c-format + msgid "Invalid password or login. Please enter the password for '%s':" + msgstr "無効なパスワードまたはログイン名です。'%s' のパスワードを入力してください:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:823 ++#: ../src/plugins/reporter-bugzilla.c:821 + msgid "" + "\n" + "& [-vbf] [-g GROUP-NAME]... [-c CONFFILE]... [-F FMTFILE] [-A FMTFILE2] -d " +@@ -1630,7 +1725,7 @@ msgstr "" + "\n" + "問題を Bugzilla に報告します。\n" + "\n" +-"このツールは DIR で指定したディレクトリを読み込みます。\n" ++"このツールは DIR で指定したディレクトリーを読み込みます。\n" + "そして、 Bugzilla にログインし、'Whiteboard' において同じ \n" + "ABRT ハッシュ値 (16進の文字列) を持つバグを検索します。\n" + "\n" +@@ -1646,7 +1741,7 @@ msgstr "" + "'reported_to' 要素内に記録されます。\n" + "\n" + "オプション -t により Bugzilla サイトにすでに作成されたバグに FILE をアップロードします。\n" +-"バグ ID が -d DIR で指定されたディレクトリから取得されます。\n" ++"バグ ID が -d DIR で指定されたディレクトリーから取得されます。\n" + "DIR にある問題データがまだ Bugzilla に報告されていなければ、アップロードが失敗します。\n" + "\n" + "オプション -tID により Bugzilla サイトにおいて指定された ID を持つバグに\n" +@@ -1661,75 +1756,76 @@ msgstr "" + "指定されなければ、CONFFILE が初期値になります。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:896 +-#: ../src/plugins/reporter-rhtsupport.c:472 ++#: ../src/plugins/reporter-bugzilla.c:894 ++#: ../src/plugins/reporter-rhtsupport.c:511 + msgid "Configuration file (may be given many times)" + msgstr "設定ファイル (何回でも供給可能)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:897 ++#: ../src/plugins/reporter-bugzilla.c:895 + msgid "Formatting file for initial comment" + msgstr "初期コメントのためにファイルを整形しています" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:898 ++#: ../src/plugins/reporter-bugzilla.c:896 + msgid "Formatting file for duplicates" + msgstr "重複のためにファイルを整形しています" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-bugzilla.c:897 + msgid "Attach FILEs [to bug with this ID]" + msgstr "FILEs を添付する [この ID を持つバグに] " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:900 ++#: ../src/plugins/reporter-bugzilla.c:898 + msgid "When creating bug, attach binary files too" + msgstr "バグを作成する時には、バイナリファイルも添付して下さい" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:901 +-#: ../src/plugins/reporter-rhtsupport.c:474 ++#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-rhtsupport.c:513 + msgid "Force reporting even if this problem is already reported" + msgstr "この問題がすでに報告されている場合でも強制的に報告します" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:902 ++#: ../src/plugins/reporter-bugzilla.c:900 + msgid "Add bugzilla user to CC list [of bug with this ID]" + msgstr "bugzilla ユーザーを [この ID を持つバグの] CC 一覧に追加する" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:903 ++#: ../src/plugins/reporter-bugzilla.c:901 + msgid "Print BUG_ID which has given DUPHASH" + msgstr "指定された DUPHASH を持つ BUG_ID を表示します" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:904 ++#: ../src/plugins/reporter-bugzilla.c:902 + msgid "A name of bug tracker for an additional URL from 'reported_to'" + msgstr "'reported_to' からの追加 URL 用のバグトラッカーの名前" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:905 ++#: ../src/plugins/reporter-bugzilla.c:903 + msgid "Restrict access to this group only" + msgstr "アクセスをこのグループのみに制限する" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:906 ++#: ../src/plugins/reporter-bugzilla.c:904 ../src/plugins/reporter-mailx.c:284 ++#: ../src/plugins/reporter-rhtsupport.c:517 + msgid "Debug" + msgstr "デバッグ" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:948 ++#: ../src/plugins/reporter-bugzilla.c:949 + msgid "Looking for similar problems in bugzilla" + msgstr "Bugzilla において同様の問題を検索中" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:975 ++#: ../src/plugins/reporter-bugzilla.c:976 + msgid "Login is not provided by configuration. Please enter your BZ login:" + msgstr "ログイン情報が設定により指定されていません。BZ ログイン情報を入力してください:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:981 +-#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-bugzilla.c:982 ++#: ../src/plugins/reporter-rhtsupport.c:551 + #, c-format + msgid "" + "Password is not provided by configuration. Please enter the password for " +@@ -1737,14 +1833,14 @@ msgid "" + msgstr "パスワードが設定されていません。'%s' 向けのパスワードを入力してください:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1000 ++#: ../src/plugins/reporter-bugzilla.c:1001 + msgid "" + "Can't get Bugzilla ID because this problem has not yet been reported to " + "Bugzilla." + msgstr "この問題がまだ Bugzilla に報告されていないので Bugzilla ID を取得できません。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1007 ++#: ../src/plugins/reporter-bugzilla.c:1008 + #, c-format + msgid "" + "This problem has been reported to Bugzilla '%s' which differs from the " +@@ -1752,86 +1848,106 @@ msgid "" + msgstr "この問題が Bugzilla '%s' に報告されました。設定された Bugzilla '%s' から変更されました。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1011 ++#: ../src/plugins/reporter-bugzilla.c:1012 + #, c-format + msgid "Malformed url to Bugzilla '%s'." + msgstr "Bugzilla '%s' の不正な形式の URL。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1015 ++#: ../src/plugins/reporter-bugzilla.c:1016 + #, c-format + msgid "Using Bugzilla ID '%s'" + msgstr "Bugzilla ID '%s' を使用しています" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1049 +-#: ../src/plugins/reporter-bugzilla.c:1341 ++#: ../src/plugins/reporter-bugzilla.c:1050 ++#: ../src/plugins/reporter-bugzilla.c:1220 ++#: ../src/plugins/reporter-bugzilla.c:1379 + msgid "Logging out" + msgstr "ログアウトしています" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1100 ++#: ../src/plugins/reporter-bugzilla.c:1101 + msgid "Can't determine Bugzilla Product from problem data." + msgstr "問題データから Bugzilla 製品を判断できません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1151 ++#: ../src/plugins/reporter-bugzilla.c:1152 + msgid "Checking for duplicates" + msgstr "重複をチェックしています" + ++#: ../src/plugins/reporter-bugzilla.c:1201 ++#, c-format ++msgid "" ++"You have requested to make your data accessible only to a specific group and " ++"this bug is a duplicate of bug: %s/%u In case of bug duplicates a new " ++"comment is added to the original bug report but access to the comments " ++"cannot be restricted to a specific group. Would you like to open a new bug " ++"report and close it as DUPLICATE of the original one? Otherwise, the bug " ++"reporting procedure will be terminated." ++msgstr "" ++"データにアクセスできるのを特定グループのみにする要求が出されましたが、このバグはバグ %s/%u " ++"の重複です。バグが重複する場合は新規のコメントが元のバグレポートに追加されますが、この場合、コメントへのアクセスを特定グループに制限できません。新規のバグレポートをオープンし、元のバグレポートの重複としてこのバグをクローズしますか? " ++"そうしない場合、バグレポート手順は終了します。" ++ + # translation auto-copied from project libreport, version master, document libreport + #. Create new bug +-#: ../src/plugins/reporter-bugzilla.c:1197 ++#: ../src/plugins/reporter-bugzilla.c:1228 + msgid "Creating a new bug" + msgstr "新しいバグを作成しています" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1218 ++#: ../src/plugins/reporter-bugzilla.c:1249 + msgid "Failed to create a new bug." + msgstr "新規バグの作成に失敗しました。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1229 ++#: ../src/plugins/reporter-bugzilla.c:1260 + #, c-format + msgid "Adding External URL to bug %i" + msgstr "外部 URL をバグ %i に追加します" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1235 ++#: ../src/plugins/reporter-bugzilla.c:1266 + #, c-format + msgid "Adding attachments to bug %i" + msgstr "バグ %i に添付ファイルを追加しています" + ++#: ../src/plugins/reporter-bugzilla.c:1280 ++#, c-format ++msgid "Closing bug %i as duplicate of bug %i" ++msgstr "バグ %i をバグ %i の重複としてクローズしています" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1254 ++#: ../src/plugins/reporter-bugzilla.c:1292 + #, c-format + msgid "Bug is already reported: %i" + msgstr "バグは既に報告済みです: %i " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1297 ++#: ../src/plugins/reporter-bugzilla.c:1335 + #, c-format + msgid "Adding %s to CC list" + msgstr "%s を CC 一覧に追加しています" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1314 ++#: ../src/plugins/reporter-bugzilla.c:1352 + #, c-format + msgid "Adding new comment to bug %d" + msgstr "新しいコメントをバグ %d に追加しています" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1328 ++#: ../src/plugins/reporter-bugzilla.c:1366 + msgid "Attaching better backtrace" + msgstr "より適したバックトレースを添付中" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1336 ++#: ../src/plugins/reporter-bugzilla.c:1374 + msgid "Found the same comment in the bug history, not adding a new one" + msgstr "バグ履歴に同じコメントが見つかりました、 新しいコメントは追加しません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1344 ++#: ../src/plugins/reporter-bugzilla.c:1382 + #, c-format + msgid "Status: %s%s%s %s/show_bug.cgi?id=%u" + msgstr "状態: %s%s%s %s/show_bug.cgi?id=%u" +@@ -1869,12 +1985,12 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/reporter-kerneloops.c:167 +-#: ../src/plugins/reporter-ureport.c:74 ++#: ../src/plugins/reporter-ureport.c:79 + msgid "Configuration file" + msgstr "設定ファイル" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:59 ++#: ../src/plugins/reporter-mailx.c:83 + #, c-format + msgid "" + "Email address of %s was not specified. Would you like to do so now? If not, " +@@ -1882,50 +1998,58 @@ msgid "" + msgstr "%s の電子メールアドレスが指定されませんでした。今すぐ設定したいですか? 設定しなければ、'%s' が使用されます。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:66 ++#: ../src/plugins/reporter-mailx.c:90 + #, c-format + msgid "Please, type email address of %s:" + msgstr "%s の電子メールアドレスを入力してください:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:73 ++#: ../src/plugins/reporter-mailx.c:97 + #, c-format + msgid "Can't continue without email address of %s" + msgstr "%s の電子メールアドレスなしで続行できません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:135 ++#: ../src/plugins/reporter-mailx.c:206 ../src/plugins/reporter-mailx.c:211 + msgid "Sending an email..." + msgstr "電子メールを送信しています... " + ++#: ../src/plugins/reporter-mailx.c:209 ++#, c-format ++msgid "Sending a notification email to: %s" ++msgstr "電子メール通知を送信しています: %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:158 ++#: ../src/plugins/reporter-mailx.c:237 + #, c-format + msgid "Email was sent to: %s" + msgstr "電子メールが送信されました: %s" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:178 ++#: ../src/plugins/reporter-mailx.c:258 + msgid "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Sends contents of a problem directory DIR via email\n" + "\n" + "If not specified, CONFFILE defaults to " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" +-"電子メールで問題の DIR ディレクトリのコンテンツを送信します\n" ++"電子メールで問題の DIR ディレクトリーのコンテンツを送信します\n" + "\n" +-"指定しない場合、 CONFFILE は次にデフォルト設定されます" ++"指定しない場合、 CONFFILE により次のようにデフォルト設定されます。 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:199 ../src/plugins/reporter-upload.c:250 ++#: ../src/plugins/reporter-mailx.c:281 ../src/plugins/reporter-upload.c:189 + msgid "Config file" + msgstr "設定ファイル" + ++#: ../src/plugins/reporter-mailx.c:282 ++msgid "Formatting file for an email" ++msgstr "電子メールのためにファイルを整形しています" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:200 ++#: ../src/plugins/reporter-mailx.c:283 + msgid "Notify only (Do not mark the report as sent)" + msgstr "通知のみ(報告を送信としてマークしません)" + +@@ -1966,37 +2090,37 @@ msgid "Can't open '%s' for writing. Please select another file:" + msgstr "書き込みに「%s」を開くことができません。 別のファイルを選択してください:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was appended to %s" + msgstr "報告は %s に追記されました" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was stored to %s" + msgstr "報告は %s に保存されました" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:259 +-#: ../src/plugins/reporter-ureport.c:237 ++#: ../src/plugins/reporter-rhtsupport.c:294 ++#: ../src/plugins/reporter-ureport.c:297 + #, c-format + msgid "Server responded with an error: '%s'" + msgstr "サーバーがエラーを応答しました: '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:319 ++#: ../src/plugins/reporter-rhtsupport.c:354 + msgid "Do you still want to create a RHTSupport ticket?" + msgstr "RHTSupport チケットを本当に作成しますか?" + +-#: ../src/plugins/reporter-rhtsupport.c:367 ++#: ../src/plugins/reporter-rhtsupport.c:402 + msgid "Invalid password or login. Please enter your Red Hat login:" + msgstr "パスワードまたはログインが無効です。Red Hat ログインを入力してください:" + +-#: ../src/plugins/reporter-rhtsupport.c:435 ++#: ../src/plugins/reporter-rhtsupport.c:471 + msgid "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -2005,96 +2129,123 @@ msgid "" + "If not specified, CONFFILE defaults to " + msgstr "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" + "RHTSupport に問題を報告します。\n" + "\n" +-"指定しない場合、CONFFILE は次にデフォルト設定されます " ++"指定しない場合、CONFFILE は次にデフォルト設定されます" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:473 ++#: ../src/plugins/reporter-rhtsupport.c:512 + msgid "Upload FILEs [to case with this ID]" + msgstr " [この ID が付いたケースへ] FILE をアップロードします" + +-#: ../src/plugins/reporter-rhtsupport.c:475 ++#: ../src/plugins/reporter-rhtsupport.c:514 + msgid "Submit uReport before creating a new case" + msgstr "新規ケースを作成する前に uReport を送信します" + +-#: ../src/plugins/reporter-rhtsupport.c:476 ++#: ../src/plugins/reporter-rhtsupport.c:515 + msgid "Configuration file for uReport" + msgstr "uReport の設定ファイル" + ++#: ../src/plugins/reporter-rhtsupport.c:516 ++msgid "Formatting file for a new case" ++msgstr "新規ケースのためにファイルを整形しています" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:504 ++#: ../src/plugins/reporter-rhtsupport.c:545 + msgid "Login is not provided by configuration. Please enter your RHTS login:" + msgstr "ログイン情報が設定により指定されていません。RHTS ログイン情報を入力してください:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:573 ++#: ../src/plugins/reporter-rhtsupport.c:614 + #, c-format + msgid "Attaching '%s' to case '%s'" + msgstr "'%s' をケース '%s' に添付しています" + +-#: ../src/plugins/reporter-rhtsupport.c:610 ++#: ../src/plugins/reporter-rhtsupport.c:651 + msgid "Sending ABRT crash statistics data" + msgstr "ABRT クラッシュ統計データの送信中" + ++#: ../src/plugins/reporter-rhtsupport.c:674 ++msgid "" ++"The problem has only occurred once and the ability to reproduce the problem " ++"is unknown. Please ensure you will be able to provide detailed information " ++"to our Support Team. Would you like to continue and open a new support case?" ++msgstr "" ++"問題が 1 " ++"回発生しましたが、この問題を再現できるかどうかは不明です。必ず詳細情報をサポートチームに送ってください。このままサポートケースを作成しますか?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:690 ++#, c-format ++msgid "" ++"The crashed program was released by '%s'. Would you like to report the " ++"problem to Red Hat Support?" ++msgstr "クラッシュしたプログラムは '%s' によってリリースされました。問題を Red Hat サポートに報告しますか?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:708 ++#, c-format ++msgid "" ++"The program '%s' does not appear to be provided by Red Hat. Would you like " ++"to report the problem to Red Hat Support?" ++msgstr "プログラム '%s' は Red Hat によって提供されたものではないようです。問題を Red Hat サポートに報告しますか?" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/reporter-rhtsupport.c:725 ++msgid "Can't create a temporary directory in " ++msgstr "次の場所に一時ディレクトリーを作成できません。" ++ + # translation auto-copied from project libreport, version master, document libreport + #. Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing + #. error msg is already logged by dd_opendir +-#. Gzipping e.g. 0.5gig coredump takes a while. Let client know what we are doing +-#: ../src/plugins/reporter-rhtsupport.c:621 +-#: ../src/plugins/reporter-upload.c:52 ++#. Compressing e.g. 0.5gig coredump takes a while. Let client know what we are doing ++#: ../src/plugins/reporter-rhtsupport.c:793 ++#: ../src/plugins/reporter-upload.c:103 + msgid "Compressing data" + msgstr "データの圧縮" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:656 +-msgid "Can't create a temporary directory in " +-msgstr "次の場所に一時ディレクトリを作成できません。" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:665 ++#: ../src/plugins/reporter-rhtsupport.c:801 + msgid "Can't create temporary file in " + msgstr "次の場所に一時ファイルを作成できません。" + + # translation auto-copied from project libreport, version master, document libreport + #. Check for hints and show them if we have something +-#: ../src/plugins/reporter-rhtsupport.c:676 ++#: ../src/plugins/reporter-rhtsupport.c:812 + msgid "Checking for hints" + msgstr "ヒントを確認中" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:686 ++#: ../src/plugins/reporter-rhtsupport.c:822 + msgid "Creating a new case" + msgstr "新規ケースの作成中" + + # translation auto-copied from project libreport, version master, document libreport + #. How can we help user sorting out this problem? +-#: ../src/plugins/reporter-rhtsupport.c:697 ++#: ../src/plugins/reporter-rhtsupport.c:833 + msgid "Can't determine RH Support Product from problem data." + msgstr "問題データから RH サポート製品を判断できません" + +-#: ../src/plugins/reporter-rhtsupport.c:753 ++#: ../src/plugins/reporter-rhtsupport.c:889 + msgid "Linking ABRT crash statistics record with the case" + msgstr "ABRT クラッシュ統計記録をケースにリンク中" + +-#: ../src/plugins/reporter-rhtsupport.c:766 ++#: ../src/plugins/reporter-rhtsupport.c:902 + #, c-format + msgid "Linking ABRT crash statistics record with contact email: '%s'" + msgstr "ABRT クラッシュ統計記録を連絡先メールアドレスにリンク中: '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:790 ++#: ../src/plugins/reporter-rhtsupport.c:926 + #, c-format + msgid "Adding comment to case '%s'" + msgstr "ケース '%s' にコメントを追加中" + + # translation auto-copied from project libreport, version master, document libreport + #. Attach the tarball of -d DIR +-#: ../src/plugins/reporter-rhtsupport.c:808 ++#: ../src/plugins/reporter-rhtsupport.c:944 + #, c-format + msgid "Attaching problem data to case '%s'" + msgstr "問題データをケース '%s' に添付中" +@@ -2110,46 +2261,55 @@ msgid "Updates which possibly help: " + msgstr "役に立つ可能性のある更新:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:30 ++#: ../src/plugins/reporter-upload.c:29 + msgid "Can't continue without URL" + msgstr "URL なしで続行できません" + +-#: ../src/plugins/reporter-upload.c:61 +-msgid "Upload URL is not provided by configuration. Please enter upload URL:" +-msgstr "アップロード URL が設定で指定されていません。アップロード URL を入力してください:" +- + #. Be permissive and nice, ask only once and don't check + #. the result. User can dismiss this prompt but the upload + #. may work somehow??? +-#: ../src/plugins/reporter-upload.c:164 ++#: ../src/plugins/reporter-upload.c:51 + msgid "Please enter password for uploading:" + msgstr "パスワードを入力してアップロードを行います:" + + # translation auto-copied from project libreport, version master, document libreport + #. success +-#: ../src/plugins/reporter-upload.c:181 ++#: ../src/plugins/reporter-upload.c:120 + #, c-format + msgid "Archive is created: '%s'" + msgstr "アーカイブが作成されました: '%s' " + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:222 ++#: ../src/plugins/reporter-upload.c:159 + msgid "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Uploads compressed tarball of problem directory DIR to URL.\n" + "If URL is not specified, creates tarball in " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" +-"問題ディレクトリ DIR の圧縮済み tar ファイルを URL にアップロードします。\n" +-"URL を指定しない場合、以下のものが tar ファイルに含まれます。" ++"問題ディレクトリー DIR の圧縮済み tar ファイルを URL にアップロードします。\n" ++"URL を指定しない場合、以下のものが tar ファイルに含まれます。 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:251 ++#: ../src/plugins/reporter-upload.c:190 + msgid "Base URL to upload to" + msgstr "アップロード先のベース URL" + ++#: ../src/plugins/reporter-upload.c:191 ++msgid "SSH public key file" ++msgstr "SSH 公開鍵ファイル" ++ ++#: ../src/plugins/reporter-upload.c:192 ++msgid "SSH private key file" ++msgstr "SSH 秘密鍵ファイル" ++ ++#: ../src/plugins/reporter-upload.c:221 ++msgid "" ++"Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:" ++"" ++msgstr "問題データのエクスポート先となる URL (scp、ftp など) を入力してください:" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Kerneloops.xml.in.h:1 + msgid "Kerneloops.org" +@@ -2275,11 +2435,11 @@ msgstr "Red Hat カスタマーユーザー名" + msgid "Red Hat customer password" + msgstr "Red Hat カスタマーパスワード" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:9 ++#: ../src/plugins/report_RHTSupport.xml.in.h:7 + msgid "Submit uReport" + msgstr "uReport の送信" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:10 ++#: ../src/plugins/report_RHTSupport.xml.in.h:8 + msgid "" + "Submit <a href=\"https://access.redhat.com/articles/642323\">micro-" + "report</a> when creating a new case." +@@ -2288,12 +2448,12 @@ msgstr "" + "report</a> を送信します。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_RHTSupport.xml.in.h:9 + msgid "RH Portal URL" + msgstr "RH ポータルの URL" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_RHTSupport.xml.in.h:10 + msgid "Address of the Red Hat support portal" + msgstr "Red Hat サポートポータルのアドレス" + +@@ -2340,13 +2500,29 @@ msgstr "URL にパスワードを入れたくない場合はこのフィール + #: ../src/plugins/report_Uploader.xml.in.h:14 + #: ../src/plugins/report_EmergencyAnalysis.xml.in.h:8 + msgid "FTP Proxy" +-msgstr "FTP プロキシ" ++msgstr "FTP プロキシー" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Uploader.xml.in.h:15 + #: ../src/plugins/report_EmergencyAnalysis.xml.in.h:9 + msgid "Sets the proxy server to use for FTP" +-msgstr "FTP のために使用するプロキシサーバーを設定する" ++msgstr "FTP のために使用するプロキシーサーバーを設定する" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:16 ++msgid "SSH Public key file" ++msgstr "SSH 公開鍵ファイル" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:17 ++msgid "Use this field to specify SSH public keyfile" ++msgstr "このフィールドを使用して SSH 公開鍵ファイルを指定します" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:18 ++msgid "SSH Private key file" ++msgstr "SSH 秘密鍵ファイル" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:19 ++msgid "Use this field to specify SSH private keyfile" ++msgstr "このフィールドを使用して SSH 秘密鍵ファイルを指定します" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_uReport.xml.in.h:1 +@@ -2426,73 +2602,97 @@ msgstr "新しいバグ id: %i" + #: ../src/plugins/rhbz.c:770 + #, c-format + msgid "Bugzilla couldn't find parent of bug %d" +-msgstr "Bugzilla はバグ %d の親を見つけることが出来ません" ++msgstr "Bugzilla はバグ %d の親を見つけることができません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/rhbz.c:893 ++#: ../src/plugins/rhbz.c:916 + msgid "Bug.search(quicksearch) return value did not contain member 'bugs'" + msgstr "Bug.search(quicksearch) の返り値がメンバー 'bugs' を含みません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:68 ++#: ../src/plugins/reporter-ureport.c:73 + msgid "Specify server URL" + msgstr "サーバーの URL を指定します" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:70 ++#: ../src/plugins/reporter-ureport.c:75 + msgid "Allow insecure connection to ureport server" + msgstr "uReport サーバーに非セキュアな接続を許可する" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:71 ++#: ../src/plugins/reporter-ureport.c:76 + msgid "Use client authentication" + msgstr "クライアント認証を使用する" + +-#: ../src/plugins/reporter-ureport.c:72 ++#: ../src/plugins/reporter-ureport.c:77 + msgid "Use HTTP Authentication" + msgstr "HTTP 認証を使用する" + +-#: ../src/plugins/reporter-ureport.c:73 ++#: ../src/plugins/reporter-ureport.c:78 + msgid "Additional files included in 'auth' key" + msgstr "'auth' キーに含ませる追加ファイル" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:76 ++#: ../src/plugins/reporter-ureport.c:81 + msgid "bthash of uReport to attach (conflicts with -A)" + msgstr "添付する uReport の bthash (-A と競合)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:78 ++#: ../src/plugins/reporter-ureport.c:83 + msgid "attach to a bthash from reported_to (conflicts with -a)" + msgstr "reported_to からの bthash に添付する (-a と競合)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:80 ++#: ../src/plugins/reporter-ureport.c:85 + msgid "contact e-mail address (requires -a|-A, conflicts with -E)" + msgstr "連絡先メールアドレス (-a|-A が必須、-E と競合)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:82 ++#: ../src/plugins/reporter-ureport.c:87 + msgid "" + "contact e-mail address from environment or configuration file (requires -a|-" + "A, conflicts with -e)" + msgstr "環境または設定ファイルからの連絡先メールアドレス (-a|-A が必須、-e と競合)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:84 ++#: ../src/plugins/reporter-ureport.c:89 + msgid "attach RHBZ bug (requires -a|-A, conflicts with -B)" + msgstr "RHBZ バグの添付 (-a|-A が必須、-B と競合)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:86 ++#: ../src/plugins/reporter-ureport.c:91 + msgid "" + "attach last RHBZ bug from reported_to (requires -a|-A, conflicts with -b)" + msgstr "reported_to からの最新の RHBZ を添付する (-a|-A が必須、-b と競合)" + +-#: ../src/plugins/reporter-ureport.c:91 ++#: ../src/plugins/reporter-ureport.c:95 ++msgid "attach value (requires -a|-A and -T, conflicts with -L)" ++msgstr "値の添付 (-a|-A と -T が必須、-L と競合)" ++ ++#: ../src/plugins/reporter-ureport.c:97 ++msgid "" ++"attach data of FIELD [URL] of the last report result (requires -a|-A, -r and " ++"-T, conflicts with -l)" ++msgstr "最新のレポート結果の FIELD [URL] のデータを添付 (-a|-A、 -r および -T が必須、-l と競合)" ++ ++#: ../src/plugins/reporter-ureport.c:100 ++msgid "" ++"use REPORT_RESULT_TYPE when looking for FIELD in reported_to (used only with " ++"-L)" ++msgstr "reported_to で FIELD を検索中に REPORT_RESULT_TYPE を使用 (-L のみと共に使用)" ++ ++#: ../src/plugins/reporter-ureport.c:102 ++msgid "" ++"attach DATA as ureporte attachment ATTACHMENT_TYPE (used only with -l|-L)" ++msgstr "ureporte 添付 ATTACHMENT_TYPE として DATA を添付 (-l|-L のみと共に使用)" ++ ++#: ../src/plugins/reporter-ureport.c:107 + msgid "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2503,59 +2703,72 @@ msgid "" + msgstr "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" + "\n" + "micro report を送信する、または micro report に添付ファイルを追加します\n" + "\n" +-"デフォルト設定を次から読み込みます" ++"デフォルト設定を次から読み込みます " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:144 ++#: ../src/plugins/reporter-ureport.c:179 + msgid "This problem does not have an uReport assigned." + msgstr "この問題は uReport が添付されていません。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:157 ++#: ../src/plugins/reporter-ureport.c:192 + msgid "This problem has not been reported to Bugzilla." + msgstr "この問題は Bugzilla に報告されていません。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:161 ++#: ../src/plugins/reporter-ureport.c:196 + #, c-format + msgid "Unable to find bug ID in bugzilla URL '%s'" + msgstr "bugzilla URL '%s' にバグ ID を見つけられません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:166 ++#: ../src/plugins/reporter-ureport.c:201 + #, c-format + msgid "Unable to parse bug ID from bugzilla URL '%s'" + msgstr "bugzilla URL '%s' からバグ ID を構文解析できません" + ++#: ../src/plugins/reporter-ureport.c:211 ++#, c-format ++msgid "This problem has not been reported to '%s'." ++msgstr "この問題は '%s' に報告されていません。" ++ ++#: ../src/plugins/reporter-ureport.c:216 ++#, c-format ++msgid "The report result '%s' is missing URL." ++msgstr "レポート結果 '%s' に URL がありません。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:179 ++#: ../src/plugins/reporter-ureport.c:233 + msgid "" + "Neither environment variable 'uReport_ContactEmail' nor configuration option " + "'ContactEmail' is set" + msgstr "環境変数 'uReport_ContactEmail' および設定オプション 'ContactEmail' のいずれも設定されていません" + +-#: ../src/plugins/reporter-ureport.c:185 ++#: ../src/plugins/reporter-ureport.c:239 + msgid "You need to specify bug ID, contact email or both" + msgstr "バグ ID か連絡先メールアドレスのいずれかまたは両方を指定する必要があります" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:203 ++#: ../src/plugins/reporter-ureport.c:263 + msgid "You need to specify bthash of the uReport to attach." + msgstr "添付する uReport の bthash を指定する必要があります。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:208 ++#: ../src/plugins/reporter-ureport.c:268 + msgid "Not uploading an empty uReport" + msgstr "空の uReport をアップロードしません" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:229 ++#: ../src/plugins/reporter-ureport.c:289 + msgid "This problem has already been reported." + msgstr "この問題はすでに報告されています。" + +@@ -2719,7 +2932,16 @@ msgstr "電子メールで問題データを送信する" + msgid "Analyze the problem locally and send information via email" + msgstr "問題をローカルに分析し。情報を電子メールで送信する" + +-# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_uReport.xml.in.h:1 ++msgid "Submit anonymous crash report" ++msgstr "匿名クラッシュレポートの提出" ++ ++#: ../src/workflows/workflow_uReport.xml.in.h:2 ++msgid "" ++"Submit anonymous crash report - I do not want to be contacted by Red Hat " ++"Support" ++msgstr "匿名クラッシュレポートの提出: Red Hat サポートから連絡を受けることを希望しません" ++ + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:1 + #: ../src/workflows/workflow_RHELKerneloops.xml.in.h:1 + #: ../src/workflows/workflow_RHELPython.xml.in.h:1 +@@ -2727,58 +2949,63 @@ msgstr "問題をローカルに分析し。情報を電子メールで送信す + #: ../src/workflows/workflow_RHELxorg.xml.in.h:1 + #: ../src/workflows/workflow_RHELLibreport.xml.in.h:1 + #: ../src/workflows/workflow_RHELJava.xml.in.h:1 +-msgid "Report to Red Hat Customer Portal" +-msgstr "Red Hat カスタマーポータルに報告する" ++msgid "Ask Red Hat Support for help" ++msgstr "Red Hat サポートの支援を依頼する" + +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:2 ++#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 ++#: ../src/workflows/workflow_RHELPython.xml.in.h:2 ++#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 ++#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 ++#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 ++#: ../src/workflows/workflow_RHELJava.xml.in.h:2 ++msgid "" ++"Create new Red Hat Support case - I would like to be contacted by Red Hat " ++"Support" ++msgstr "新規 Red Hat サポートケースの作成: Red Hat サポートから連絡を受けることを希望します" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 ++msgid "Report to Red Hat Bugzilla" ++msgstr "Red Hat Bugzilla に報告します" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:2 + msgid "Process the C/C++ crash using the Red Hat infrastructure" + msgstr "Red Hat インフラストラクチャーを使用して C/C++ クラッシュを処理する" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:2 + msgid "Process the kerneloops using the Red Hat infrastructure" + msgstr "Red Hat インフラストラクチャーを使用して kerneloops を処理する" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELPython.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:2 + msgid "Process the python exception using the Red Hat infrastructure" + msgstr "Red Hat インフラストラクチャーを使用して Python 例外を処理する" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:2 + msgid "Process the kernel crash using the Red Hat infrastructure" + msgstr "Red Hat インフラストラクチャーを使用して kernel クラッシュを処理する" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:2 + msgid "Process the X Server problem using the Red Hat infrastructure" + msgstr "Red Hat インフラストラクチャーを使用して X サーバーの問題を処理する" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:2 + msgid "Process the problem using the Red Hat infrastructure" + msgstr "Red Hat インフラストラクチャーを使って問題を処理します" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELJava.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:2 + msgid "Process the Java exception using the Red Hat infrastructure" + msgstr "Red Hat インフラストラクチャーを使って Java 例外を処理します" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 +-msgid "Report to Red Hat Bugzilla" +-msgstr "Red Hat Bugzilla に報告します" +diff --git a/po/ko.po b/po/ko.po +index 2da3f04..e29c911 100644 +--- a/po/ko.po ++++ b/po/ko.po +@@ -1,17 +1,18 @@ + # Eun-Ju Kim , 2015. #zanata ++# Eun-Ju Kim , 2016. #zanata + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2015-07-14 15:18+0200\n" ++"POT-Creation-Date: 2016-06-29 15:25+0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2015-07-28 03:19-0400\n" ++"PO-Revision-Date: 2016-08-22 06:40-0400\n" + "Last-Translator: Eun-Ju Kim \n" + "Language-Team: Korean\n" + "Language: ko\n" +-"X-Generator: Zanata 3.6.2\n" ++"X-Generator: Zanata 3.9.5\n" + "Plural-Forms: nplurals=1; plural=0\n" + + #: ../src/cli/cli.c:63 +@@ -196,37 +197,31 @@ msgstr "실행할 워크플로 선택:" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:87 +-#, python-brace-format + msgid "Extracting cpio from {0}" + msgstr "{0}에서 cpio 추출 중 " + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:92 +-#, python-brace-format + msgid "Can't write to '{0}': {1}" + msgstr "'{0}'에 작성할 수 없음: {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:107 +-#, python-brace-format + msgid "Can't extract package '{0}'" + msgstr "패키지 '{0}'을(를) 추출할 수 없습니다 " + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:115 +-#, python-brace-format + msgid "Caching files from {0} made from {1}" + msgstr "{1}에서 만들어진 {0}에서 파일을 캐시 중 " + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:134 +-#, python-brace-format + msgid "Can't extract files from '{0}'" + msgstr "'{0}'에서 파일을 추출할 수 없음 " + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:147 +-#, python-brace-format + msgid "Can't remove '{0}': {1}" + msgstr "'{0}'을(를) 제거할 수 없음: {1}" + +@@ -235,7 +230,6 @@ msgstr "'{0}'을(를) 제거할 수 없음: {1}" + #. % (self.downloaded_pkgs + 1, self.total_pkgs, name, pct) + #. ) + #: ../src/client-python/debuginfo.py:194 ../src/client-python/debuginfo.py:205 +-#, python-brace-format + msgid "Downloading ({0} of {1}) {2}: {3:3}%" + msgstr "{2} 다운로드 중 ({1}중 {0}): {3:3}%" + +@@ -278,7 +272,6 @@ msgstr "비동기 다운로드를 비활성화할 수 없습니다. 출력에 + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:356 +-#, python-brace-format + msgid "Can't setup {0}: {1}, disabling" + msgstr "{0}을 설정할 수 없습니다: {1}, 비활성화 중 " + +@@ -303,19 +296,16 @@ msgstr "파일 목록을 가져오는 도중 오류가 발생했습니다: '{0!s + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:416 +-#, python-brace-format + msgid "Can't find packages for {0} debuginfo files" + msgstr "{0} 디버그 정보 파일에 해당하는 패키지를 찾을 수 없습니다 " + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:418 +-#, python-brace-format + msgid "Packages to download: {0}" + msgstr "다운로드할 패키지: {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:419 +-#, python-brace-format + msgid "Downloading {0:.2f}Mb, installed size: {1:.2f}Mb. Continue?" + msgstr "{0:.2f}Mb 다운로드 중, 설치 크기: {1:.2f}Mb. 계속 진행하시겠습니까? " + +@@ -326,26 +316,22 @@ msgid "Download cancelled by user" + msgstr "사용자에 의해 다운로드가 취소되있습니다 " + + #: ../src/client-python/debuginfo.py:434 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in tmp dir '{0}' ({1:.2f}Mb left). Continue?" + msgstr "경고: 임시 디렉토리 '{0}'에 충분한 여유 공간이 없습니다 ({1:.2f}Mb 남음). 계속하시겠습니까? " + + #: ../src/client-python/debuginfo.py:443 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in cache dir '{0}' ({1:.2f}Mb left). " + "Continue?" + msgstr "경고: 캐시 디렉토리 '{0}'에 충분한 여유 공간이 없습니다 ({1:.2f}Mb 남음). 계속하시겠습니까?" + + #: ../src/client-python/debuginfo.py:469 +-#, python-brace-format + msgid "Cannot copy file '{0}': {1}" + msgstr "파일 '{0}'을/를 복사할 수 없습니다: {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:487 +-#, python-brace-format + msgid "Downloading package {0} failed" + msgstr "패키지 {0} 다운로드에 실패했습니다 " + +@@ -360,7 +346,6 @@ msgstr "압축 풀기에 실패했습니다, 다운로드를 취소합니다..." + #. but it was appearing even if no packages were in fact extracted + #. (say, when there was one package, and it has download error). + #: ../src/client-python/debuginfo.py:504 +-#, python-brace-format + msgid "Removing {0}" + msgstr "{0} 제거 중 " + +@@ -414,7 +399,7 @@ msgstr "이벤트" + msgid "C_onfigure" + msgstr "설정(_O)" + +-#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3472 ++#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3718 + msgid "_Close" + msgstr "종료(_C) " + +@@ -443,7 +428,7 @@ msgstr "비밀 서비스를 사용할 수 없습니다. 설정이 저장되지 + + #: ../src/gtk-helpers/event_config_dialog.c:321 + #: ../src/gtk-helpers/workflow_config_dialog.c:86 +-#: ../src/gui-wizard-gtk/wizard.c:822 ../src/gui-wizard-gtk/wizard.c:3101 ++#: ../src/gui-wizard-gtk/wizard.c:844 ../src/gui-wizard-gtk/wizard.c:3325 + msgid "_Cancel" + msgstr "취소(_C) " + +@@ -513,7 +498,7 @@ msgstr "" + msgid "Alternate GUI file" + msgstr "대체 GUI 파일 " + +-#: ../src/gui-wizard-gtk/wizard.c:354 ++#: ../src/gui-wizard-gtk/wizard.c:378 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide the " +@@ -526,7 +511,7 @@ msgstr "" + "\n" + "설정에 대한 자세한 내용은 https://access.redhat.com/site/articles/718083에서 참조하십시오." + +-#: ../src/gui-wizard-gtk/wizard.c:357 ++#: ../src/gui-wizard-gtk/wizard.c:381 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide " +@@ -540,13 +525,13 @@ msgstr "" + "에서 설정에 대한 자세한 내용을 " + "참조하십시오" + +-#: ../src/gui-wizard-gtk/wizard.c:373 ++#: ../src/gui-wizard-gtk/wizard.c:397 + #, c-format + msgid "Con_figure %s" + msgstr "%s 설정(_F)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:400 ++#: ../src/gui-wizard-gtk/wizard.c:424 + #, c-format + msgid "" + "Need writable directory, but '%s' is not writable. Move it to '%s' and " +@@ -554,57 +539,74 @@ msgid "" + msgstr "쓰기 가능한 디렉토리가 필요하지만 '%s'는 쓰기 불가능합니다. '%s'로 이동하여 이동한 데이터에서 작동해 보십시오. " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:813 ++#: ../src/gui-wizard-gtk/wizard.c:835 + msgid "View/edit a text file" + msgstr "텍스트 파일 보기/편집 " + +-#: ../src/gui-wizard-gtk/wizard.c:821 ++#: ../src/gui-wizard-gtk/wizard.c:843 + msgid "_Save" + msgstr "저장 (_S)" + +-#: ../src/gui-wizard-gtk/wizard.c:1040 ++#: ../src/gui-wizard-gtk/wizard.c:1067 + msgid "" + "No reporting targets are defined for this problem. Check configuration in /" + "etc/libreport/*" + msgstr "이 문제에 대한 보고 대상이 지정되어 있지 않습니다. /etc/libreport/*에서 설정을 확인하십시오" + +-#: ../src/gui-wizard-gtk/wizard.c:1077 ++#: ../src/gui-wizard-gtk/wizard.c:1104 + #, c-format + msgid "(requires: %s)" + msgstr "(필수: %s)" + +-#: ../src/gui-wizard-gtk/wizard.c:1091 ++#: ../src/gui-wizard-gtk/wizard.c:1118 + #, c-format + msgid "(not needed, data already exist: %s)" + msgstr "(필요하지 않음, 데이터가 이미 존재합니다: %s)" + ++#: ../src/gui-wizard-gtk/wizard.c:1217 ++msgid "" ++"Since crashes without a known reproducer can be difficult to diagnose, " ++"please provide a comprehensive description of the problem you have " ++"encountered." ++msgstr "문제를 재생하지 않고 크래시를 진단하는 것은 어렵기 때문에 발생한 문제에 대한 종합적인 설명을 기재해 주십시오." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1224 ++msgid "" ++"Please provide a short description of the problem and please include the " ++"steps you have used to reproduce the problem." ++msgstr "문제에 대한 간단한 설명과 문제를 재현하는데 사용한 절차를 기입해 주십시오." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1231 ++msgid "Please provide the steps you have used to reproduce the problem." ++msgstr "문제를 재현하는데 사용한 절차를 기입해 주십시오." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1277 ++#: ../src/gui-wizard-gtk/wizard.c:1349 + msgid "(click here to view/edit)" + msgstr "(보기/편집하려면 여기를 클릭) " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1288 ++#: ../src/gui-wizard-gtk/wizard.c:1360 + #, c-format + msgid "(binary file, %llu bytes)" + msgstr "(바이너리 파일, %llu 바이트) " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1395 ../src/report-newt/report-newt.c:334 ++#: ../src/gui-wizard-gtk/wizard.c:1467 ../src/report-newt/report-newt.c:334 + msgid "(no description)" + msgstr "(설명 없음) " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1403 ++#: ../src/gui-wizard-gtk/wizard.c:1475 + #, c-format + msgid "%llu bytes, %u files" + msgstr "%llu 바이트, %u 파일 " + +-#: ../src/gui-wizard-gtk/wizard.c:1647 ++#: ../src/gui-wizard-gtk/wizard.c:1752 + msgid "Processing was canceled" + msgstr "작업 처리가 취소되었습니다" + +-#: ../src/gui-wizard-gtk/wizard.c:1851 ++#: ../src/gui-wizard-gtk/wizard.c:1956 + msgid "" + "Processing of the problem failed. This can have many reasons but there are " + "three most common:\n" +@@ -617,7 +619,7 @@ msgstr "" + "\t▫ 손상된 데이터에 의한 문제\n" + "\t▫ 잘못된 설정" + +-#: ../src/gui-wizard-gtk/wizard.c:1860 ++#: ../src/gui-wizard-gtk/wizard.c:1965 + msgid "" + "If you want to update the configuration and try to report again, please open " + "Preferences item\n" +@@ -627,43 +629,54 @@ msgstr "" + "설정을 업데이트하고 다시 보고하려면 애플리케이션 메뉴에 있는 환경 설정 항목을 열고\n" + "설정 변경 사항을 적용한 후 반복 실행 버튼을 클릭합니다." + +-#: ../src/gui-wizard-gtk/wizard.c:1978 ++#: ../src/gui-wizard-gtk/wizard.c:2089 + msgid "Processing was interrupted because the problem is not reportable." + msgstr "문제를 보고할 수 없기 때문에 작업 처리가 중단되었습니다." + +-#: ../src/gui-wizard-gtk/wizard.c:1988 ../src/gui-wizard-gtk/wizard.c:2057 ++#: ../src/gui-wizard-gtk/wizard.c:2099 ../src/gui-wizard-gtk/wizard.c:2168 + msgid "Processing failed." + msgstr "작업 처리에 실패했습니다." + + #. No next event, go to progress page and finish +-#: ../src/gui-wizard-gtk/wizard.c:1995 ../src/gui-wizard-gtk/wizard.c:2818 ++#: ../src/gui-wizard-gtk/wizard.c:2106 ../src/gui-wizard-gtk/wizard.c:3040 + msgid "Processing finished." + msgstr "작업 처리가 완료되었습니다." + +-#: ../src/gui-wizard-gtk/wizard.c:1996 ++#: ../src/gui-wizard-gtk/wizard.c:2107 + msgid "Processing finished, please proceed to the next step." + msgstr "작업 처리가 완료되었습니다. 다음 단계로 이동하십시오." + + # translation auto-copied from project libreport, version master, document libreport + #. TODO: better msg? +-#: ../src/gui-wizard-gtk/wizard.c:2054 ++#: ../src/gui-wizard-gtk/wizard.c:2165 + #, c-format + msgid "No processing for event '%s' is defined" + msgstr "이벤트 '%s'에 대한 처리가 정의되지 않음 " + +-#: ../src/gui-wizard-gtk/wizard.c:2068 ++#: ../src/gui-wizard-gtk/wizard.c:2179 + msgid "Processing interrupted: can't continue without writable directory." + msgstr "작업 처리가 중단되었습니다: 쓰기 가능한 디렉토리없이 계속 진행할 수 없습니다." + +-#: ../src/gui-wizard-gtk/wizard.c:2105 ++#: ../src/gui-wizard-gtk/wizard.c:2216 + msgid "Processing..." + msgstr "처리 중..." + +-#: ../src/gui-wizard-gtk/wizard.c:2198 ++#: ../src/gui-wizard-gtk/wizard.c:2297 ++msgid "" ++"Possible sensitive data detected, feel free to edit the report and remove " ++"them." ++msgstr "보안 가능성이있는 데이터를 감지했습니다. 언제든지 보고서를 편집 및 삭제할 수 있습니다." ++ ++#: ../src/gui-wizard-gtk/wizard.c:2337 + msgid "Cannot check backtrace rating because of invalid event name" + msgstr "잘못된 이벤트 이름으로 인해 백트레이스 등급을 확인할 수 없습니다" + +-#: ../src/gui-wizard-gtk/wizard.c:2838 ++#: ../src/gui-wizard-gtk/wizard.c:2869 ++#, c-format ++msgid "Failed to save file '%s'" ++msgstr "파일 '%s' 저장에 실패했습니다" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3060 + #, c-format + msgid "" + "Event '%s' requires permission to send possibly sensitive data.\n" +@@ -671,105 +684,125 @@ msgid "" + msgstr "이벤트 '%s'에는 중요한 정보를 전송할 수 있는 권한이 필요합니다.\n" + "계속 진행하시겠습니까?" + +-#: ../src/gui-wizard-gtk/wizard.c:2886 ++#: ../src/gui-wizard-gtk/wizard.c:3108 + #, c-format + msgid "This problem should not be reported (it is likely a known problem). %s" + msgstr "이 문제는 보고하지 않아도 됩니다 (이미 알려진 문제입니다). %s" + +-#: ../src/gui-wizard-gtk/wizard.c:3102 ++#: ../src/gui-wizard-gtk/wizard.c:3326 + msgid "_Open" + msgstr "열기(_O)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3124 ++#: ../src/gui-wizard-gtk/wizard.c:3348 + #, c-format + msgid "'%s' is not an ordinary file" + msgstr "'%s'은(는) 정상적인 파일이 아님 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3138 ++#: ../src/gui-wizard-gtk/wizard.c:3362 + msgid "You are trying to copy a file onto itself" + msgstr "파일을 파일 자체에 복사하려고 합니다 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3145 ++#: ../src/gui-wizard-gtk/wizard.c:3369 + #, c-format + msgid "Can't copy '%s': %s" + msgstr "'%s'을(를) 복사할 수 없습니다: %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3160 ++#: ../src/gui-wizard-gtk/wizard.c:3384 + #, c-format + msgid "Item '%s' already exists and is not modifiable" + msgstr "항목 '%s'이 이미 존재하고 있기 때문에 변경할 수 없습니다 " + ++#: ../src/gui-wizard-gtk/wizard.c:3542 ++msgid "I have experienced this problem for the first time" ++msgstr "처음으로 이러한 문제가 발생했습니다" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3545 ++msgid "I can reproduce this problem" ++msgstr "문제를 재현할 수 있습니다" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3548 ++msgid "This problem occurs repeatedly" ++msgstr "문제가 반복적으로 발생합니다" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3314 ++#: ../src/gui-wizard-gtk/wizard.c:3560 + msgid "Include" + msgstr "포함 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3325 ++#: ../src/gui-wizard-gtk/wizard.c:3571 + msgid "Name" + msgstr "이름" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3335 ++#: ../src/gui-wizard-gtk/wizard.c:3581 + msgid "Value" + msgstr "값 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3369 ++#: ../src/gui-wizard-gtk/wizard.c:3615 + msgid "Problem description" + msgstr "문제 설명 " + +-#: ../src/gui-wizard-gtk/wizard.c:3370 ++#: ../src/gui-wizard-gtk/wizard.c:3616 + msgid "Select how to report this problem" + msgstr "이 문제를 보고할 방법을 선택하십시오" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3371 ++#: ../src/gui-wizard-gtk/wizard.c:3617 + msgid "Provide additional information" + msgstr "추가 정보 제공 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3372 ++#: ../src/gui-wizard-gtk/wizard.c:3618 + msgid "Review the data" + msgstr "데이터 검토 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3373 ++#: ../src/gui-wizard-gtk/wizard.c:3619 + msgid "Confirm data to report" + msgstr "보고할 데이터 확인 " + +-#: ../src/gui-wizard-gtk/wizard.c:3374 ++#: ../src/gui-wizard-gtk/wizard.c:3620 + msgid "Processing" + msgstr "처리중" + +-#: ../src/gui-wizard-gtk/wizard.c:3375 ++#: ../src/gui-wizard-gtk/wizard.c:3621 + msgid "Processing done" + msgstr "처리 완료" + +-#: ../src/gui-wizard-gtk/wizard.c:3474 ++#: ../src/gui-wizard-gtk/wizard.c:3720 + msgid "_Stop" + msgstr "중지(_S)" + + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3477 ++#: ../src/gui-wizard-gtk/wizard.c:3723 + msgid "Upload for analysis" + msgstr "분석을 위해 업로드" + + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3480 ++#: ../src/gui-wizard-gtk/wizard.c:3726 + msgid "Repeat" + msgstr "반복 실행" + + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3483 ++#: ../src/gui-wizard-gtk/wizard.c:3729 + msgid "_Forward" + msgstr "다음(_F)" + +-#: ../src/gui-wizard-gtk/wizard.c:3575 ++#: ../src/gui-wizard-gtk/wizard.c:3780 ++msgid "Restrict access to the report" ++msgstr "보고서로의 액세스 제한" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3785 ++msgid "Learn more about restricted access in the configuration" ++msgstr "설정 시 제한된 액세스에 대해 자세히 알아보기" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3844 + msgid "" + "In order to enable the built-in screencasting functionality the package fros-" + "gnome has to be installed. Please run the following command if you want to " +@@ -781,28 +814,8 @@ msgstr "" + "\n" + "su -c \"yum install fros-gnome\"" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:1 +-msgid "" +-"Possible sensitive data detected, feel free to edit the report and remove " +-"them." +-msgstr "보안 가능성이있는 데이터를 감지했습니다. 언제든지 보고서를 편집 및 삭제할 수 있습니다." +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:2 +-msgid "Restrict access to the report" +-msgstr "보고서로의 액세스 제한" +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:3 +-msgid "" +-"No one except Red Hat employees will be allowed to see the report with " +-"restricted access (not even you)" +-msgstr "액세스가 제한된 보고서는 Red Hat 직원을 제외한 어느 누구도 볼 수 없습니다 (보고서 보고자 포함)" +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:4 +-msgid "Read more about reports with restricted access" +-msgstr "액세스 제한된 보고서의 자세한 내용" +- + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++#: ../src/gui-wizard-gtk/wizard.glade.h:1 + msgid "" + "On the following screens, you will be asked to describe how the problem " + "occurred, to choose how to analyze the problem (if needed), to review " +@@ -813,12 +826,12 @@ msgstr "" + "후 문제를 보고할 위치를 선택합니다. '앞으로'를 클릭하여 계속 진행합니다. " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++#: ../src/gui-wizard-gtk/wizard.glade.h:2 + msgid "Details" + msgstr "상세 정보" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:7 ++#: ../src/gui-wizard-gtk/wizard.glade.h:3 + msgid "" + "How did this problem happen (step-by-step)? How can it be reproduced? Any " + "additional comments useful for diagnosing the problem? Please use English if " +@@ -827,18 +840,37 @@ msgstr "" + "이 문제가 어떻게 발생했는지 단계별로 설명합니다. 재현 방법을 설명합니다. 문제 진단에 도움이 될 추가 주석이 있습니까? 있다면 영어로 " + "설명해 주십시오. " + ++#: ../src/gui-wizard-gtk/wizard.glade.h:4 ++msgid "How reproducible is this problem?" ++msgstr "문제를 어떻게 재현 가능합니까?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++msgid "How it can be reproduced (one step per line)?" ++msgstr "문제를 어떻게 재현할 수 있습니까 (한 줄에 한 단계)?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++msgid "" ++"Please add a comprehensive description of the problem you have. This is a " ++"very long place holder." ++msgstr "문제의 종합적인 설명을 기재하십시오. 이는 매우 긴 자리 표시자입니다." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:8 ++#: ../src/gui-wizard-gtk/wizard.glade.h:7 + msgid "You need to fill the how to before you can proceed..." + msgstr "처리하기 전 방법란을 작성하셔야 합니다... " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++#: ../src/gui-wizard-gtk/wizard.glade.h:8 + msgid "" + "Your comments are not private. They may be included into publicly " + "visible problem reports." + msgstr "귀하의 의견은 비공개되지 않습니다. 이는 공개되어 볼 수 있는 문제 보고에 포함됩니다. " + ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++msgid "I don't know what caused this problem" ++msgstr "이 문제의 원인을 알 수 없습니다. " ++ + #: ../src/gui-wizard-gtk/wizard.glade.h:10 + msgid "If you don't know how to describe it, you can" + msgstr "어떻게 설명해야 할 지를 모르는 경우 다음을 할 수 있습니다" +@@ -849,63 +881,58 @@ msgstr "스크린캐스트 추가" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:12 +-msgid "I don't know what caused this problem" +-msgstr "이 문제의 원인을 알 수 없습니다. " +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Use this button to generate more informative backtrace after you installed " + "additional debug packages" + msgstr "이 버튼을 사용하여 추가 디버그 패키지를 설치 후 보다 많은 백트레이스 정보를 생성합니다 " + +-#: ../src/gui-wizard-gtk/wizard.glade.h:14 ++#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Please review the data before it gets reported. Depending on reporter " + "chosen, it may end up publicly visible." + msgstr "보고하기 전 데이터를 확인하십시오. 선택한 보고 대상에 따라 공개될 수 있습니다." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:15 ++#: ../src/gui-wizard-gtk/wizard.glade.h:14 + msgid "Forbidden words" + msgstr "금지된 문자" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:16 ++#: ../src/gui-wizard-gtk/wizard.glade.h:15 + msgid "Custom" + msgstr "사용자 지정" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:17 ++#: ../src/gui-wizard-gtk/wizard.glade.h:16 + msgid "Clear the search bar to see the list of security sensitive words." + msgstr "검색 창을 삭제하고 보안 위험이 있는 용어 목록을 확인합니다." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:18 ++#: ../src/gui-wizard-gtk/wizard.glade.h:17 + msgid "file" + msgstr "파일" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:19 ++#: ../src/gui-wizard-gtk/wizard.glade.h:18 + msgid "data" + msgstr "데이터" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:20 ++#: ../src/gui-wizard-gtk/wizard.glade.h:19 + msgid "Search" + msgstr "검색 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:21 ++#: ../src/gui-wizard-gtk/wizard.glade.h:20 + msgid "Size:" + msgstr "크기: " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:22 ++#: ../src/gui-wizard-gtk/wizard.glade.h:21 + msgid "Attach a file" + msgstr "파일 첨부 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:23 ++#: ../src/gui-wizard-gtk/wizard.glade.h:22 + msgid "I reviewed the data and _agree with submitting it" + msgstr "데이터를 검색했습니다. 데이터 전송에 동의합니다." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:24 ++#: ../src/gui-wizard-gtk/wizard.glade.h:23 + msgid "" + "If you are reporting to a remote server, make sure you removed all private " + "data (such as usernames and passwords). Backtrace, command line, environment " +@@ -914,22 +941,22 @@ msgstr "" + "원격 서버에 보고하는 경우, 모든 개인 데이터 (사용자 이름과 암호 등)가 삭제되었는지 확인합니다. 백트레이스, 명령행, 환경 변수 등은 " + "검사해야 하는 일반적 항목입니다. " + +-#: ../src/gui-wizard-gtk/wizard.glade.h:25 ++#: ../src/gui-wizard-gtk/wizard.glade.h:24 + msgid "Processing did not start yet" + msgstr "작업 처리를 아직 시작하지 않았습니다." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:26 ++#: ../src/gui-wizard-gtk/wizard.glade.h:25 + msgid "Show log" + msgstr "로그 보기 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:27 ++#: ../src/gui-wizard-gtk/wizard.glade.h:26 + msgid "Reporting has finished. You can close this window now." + msgstr "문제 보고가 완료되었습니다. 이제 이 창을 닫으실 수 있습니다. " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:28 ++#: ../src/gui-wizard-gtk/wizard.glade.h:27 + msgid "" + "If you want to report the problem to a different destination, collect " + "additional information, or provide a better problem description and repeat " +@@ -938,16 +965,16 @@ msgstr "" + "다른 장소에 문제를 보고하고자 할 경우 추가 정보를 수집하거나 보다 상세하게 문제를 설명하여 보고 절차를 반복 실행한 후 '앞으로'를 " + "누릅니다. " + +-#: ../src/include/internal_libreport.h:1007 ++#: ../src/include/internal_libreport.h:1046 + msgid "Be verbose" + msgstr "자세한 정보 표시" + +-#: ../src/include/internal_libreport.h:1008 +-#: ../src/plugins/reporter-bugzilla.c:895 ++#: ../src/include/internal_libreport.h:1047 ++#: ../src/plugins/reporter-bugzilla.c:893 + #: ../src/plugins/reporter-kerneloops.c:166 +-#: ../src/plugins/reporter-mailx.c:198 ../src/plugins/reporter-print.c:56 +-#: ../src/plugins/reporter-rhtsupport.c:471 +-#: ../src/plugins/reporter-upload.c:249 ++#: ../src/plugins/reporter-mailx.c:280 ../src/plugins/reporter-print.c:56 ++#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-upload.c:188 + msgid "Problem directory" + msgstr "문제 디렉토리 " + +@@ -997,7 +1024,7 @@ msgstr "필요한 항목이 누락되어 있습니다: '%s'" + msgid "'%s' is not correct file name" + msgstr "'%s'은/는 올바른 파일 이름이 아닙니다" + +-#: ../src/lib/create_dump_dir.c:153 ++#: ../src/lib/create_dump_dir.c:150 + #, c-format + msgid "uid value is not valid: '%s'" + msgstr "UID 값이 올바르지 않습니다: '%s'" +@@ -1008,93 +1035,138 @@ msgstr "UID 값이 올바르지 않습니다: '%s'" + msgid "Uploaded: %llu of %llu kbytes" + msgstr "업로드됨: %llu 중 %llu 킬로바이트 " + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/curl.c:635 ++#: ../src/lib/curl.c:636 ++msgid "Ignoring URL without scheme and hostname" ++msgstr "체계 및 호스트 이름없이 URL 무시" ++ ++#. Do not include the path part of the URL as it can contain sensitive data ++#. * in case of typos ++#: ../src/lib/curl.c:666 + #, c-format +-msgid "Sending %s to %s" +-msgstr "%s을(를) %s에 전송 중 " ++msgid "Sending %s to %s//%s" ++msgstr "%s//%s에 %s을/를 전송" + +-#: ../src/lib/curl.c:659 ++#: ../src/lib/curl.c:690 + #, c-format +-msgid "Please enter user name for '%s':" +-msgstr "'%s'의 사용자 이름을 입력하십시오:" ++msgid "Please enter user name for '%s//%s':" ++msgstr "'%s//%s'의 사용자 이름을 입력하십시오:" + +-#: ../src/lib/curl.c:665 ++#: ../src/lib/curl.c:696 + #, c-format +-msgid "Please enter password for '%s':" +-msgstr "'%s'의 암호를 입력하십시오:" ++msgid "Please enter password for '%s//%s@%s':" ++msgstr "'%s//%s@%s'의 암호를 입력하십시오:" + +-# translation auto-copied from project libreport, version master, document libreport + #. This ends up a "reporting status message" in abrtd +-#: ../src/lib/curl.c:688 ++#: ../src/lib/curl.c:719 + #, c-format +-msgid "Successfully sent %s to %s" +-msgstr "%s을(를) %s에 성공적으로 전송 " ++msgid "Successfully created %s" ++msgstr "%s이/가 성공적으로 생성되었습니다" ++ ++#: ../src/lib/dump_dir.c:1545 ++msgid "Failed to open TAR writer" ++msgstr "TAR writer 열기 실패" ++ ++#: ../src/lib/dump_dir.c:1571 ++msgid "Failed to finalize TAR archive" ++msgstr "TAR archive 종료 실패" ++ ++#: ../src/lib/dump_dir.c:1581 ++msgid "Failed to close TAR writer" ++msgstr "TAR writer 닫기 실패" ++ ++#: ../src/lib/dump_dir.c:1591 ++#, c-format ++msgid "gzip killed with signal %d" ++msgstr "%d 신호로 gzip이 종료되었습니다" ++ ++#: ../src/lib/dump_dir.c:1597 ++#, c-format ++msgid "gzip exited with %d" ++msgstr "%d로 gzip이 종료되었습니다" ++ ++#: ../src/lib/dump_dir.c:1600 ++msgid "gzip process failed" ++msgstr "gzip 프로세스 실패" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:348 ++#: ../src/lib/event_config.c:382 + msgid "Missing mandatory value" + msgstr "필요한 값 누락 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:356 ++#: ../src/lib/event_config.c:390 + #, c-format + msgid "Invalid utf8 character '%c'" + msgstr "잘못된 utf8 문자 '%c' " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:369 ++#: ../src/lib/event_config.c:403 + #, c-format + msgid "Invalid number '%s'" + msgstr "잘못된 번호 '%s' " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:384 ++#: ../src/lib/event_config.c:418 + #, c-format + msgid "Invalid boolean value '%s'" + msgstr "잘못된 부울 값 '%s' " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:390 ++#: ../src/lib/event_config.c:424 + msgid "Unsupported option type" + msgstr "지원되지 않는 옵션 유형 " + +-#: ../src/lib/event_config.c:463 ++#: ../src/lib/event_config.c:497 + msgid "Reporting disabled because the rating does not contain a number." + msgstr "등급에 숫자가 포함되어 있지 않기 때문에 보고가 비활성화되어 있습니다." + +-#: ../src/lib/event_config.c:464 ++#: ../src/lib/event_config.c:498 + msgid "Please report this problem to ABRT project developers." + msgstr "이 문제를 ABRT 개발자에게 보고해 주십시오." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:470 ++#: ../src/lib/event_config.c:504 + msgid "" + "The backtrace is incomplete, please make sure you provide the steps to " + "reproduce." + msgstr "백트레이스가 불완전합니다. 재현을 위해 올바른 단계를 제공했는지 확인하십시오. " + +-#: ../src/lib/event_config.c:471 ++#: ../src/lib/event_config.c:505 + msgid "The backtrace probably can't help developer to diagnose the bug." + msgstr "백트레이스로 버그를 진단하는 것은 개발자에게 도움이 되지 않습니다." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:477 ++#: ../src/lib/event_config.c:511 + msgid "Reporting disabled because the backtrace is unusable." + msgstr "백트레이스가 비활성화되었기 때문에 보고가 비활성화되었습니다. " + +-#: ../src/lib/event_config.c:481 ++#: ../src/lib/event_config.c:515 + #, c-format + msgid "" + "Please try to install debuginfo manually using the command: \"debuginfo-" + "install %s\" and try again." + msgstr "\"debuginfo-install %s\" 명령을 사용하여 수동으로 디버그 정보를 설치한 후 다시 시도해 보십시오." + +-#: ../src/lib/event_config.c:483 ++#: ../src/lib/event_config.c:517 + msgid "A proper debuginfo is probably missing or the coredump is corrupted." + msgstr "올바른 디버그 정보가 누락되어 있거나 코어 덤프가 손상되어 있습니다." + +-#: ../src/lib/ureport.c:354 ++#: ../src/lib/iso_date_string.c:48 ++#, c-format ++msgid "String doesn't seem to be a date: '%s'" ++msgstr "문자열에 날짜가 표시되어 있지 않습니다: '%s'" ++ ++#: ../src/lib/iso_date_string.c:53 ++#, c-format ++msgid "The date: '%s' has unrecognized suffix: '%s'" ++msgstr "날짜 '%s'에는 알 수 없는 접미사가 있습니다: '%s'" ++ ++#: ../src/lib/iso_date_string.c:58 ++#, c-format ++msgid "The date: '%s' is out of UNIX time stamp range" ++msgstr "날짜 '%s'은/는 UNIX 타임 스탬프 범위 밖에 있습니다" ++ ++#: ../src/lib/ureport.c:395 + #, c-format + msgid "Your problem seems to be caused by %s\n" + "\n" +@@ -1103,58 +1175,68 @@ msgstr "%s(으)로 인해 문제가 발생한 것 같습니다\n" + "\n" + "%s\n" + +-#: ../src/lib/ureport.c:357 ++#: ../src/lib/ureport.c:398 + msgid "Your problem seems to be caused by one of the following:\n" + msgstr "다음 중 한 가지 원인으로 인해 문제가 발생한 것 같습니다:\n" + +-#: ../src/lib/ureport.c:528 ++#: ../src/lib/ureport.c:570 + #, c-format + msgid "Failed to upload uReport to the server '%s' with curl: %s" + msgstr "curl이 있는 서버 '%s'에 uReport를 업로드하지 못했습니다" + +-#: ../src/lib/ureport.c:534 ++#: ../src/lib/ureport.c:574 ++#, c-format ++msgid "Failed to upload uReport to the server '%s'" ++msgstr "서버 '%s'에 uReport를 업로드하지 못했습니다" ++ ++#: ../src/lib/ureport.c:577 ++#, c-format ++msgid "Error: %s" ++msgstr "오류: %s" ++ ++#: ../src/lib/ureport.c:584 + #, c-format + msgid "The URL '%s' does not exist (got error 404 from server)" + msgstr " URL '%s' 이 존재하지 않습니다 (404 서버 오류)" + +-#: ../src/lib/ureport.c:540 ++#: ../src/lib/ureport.c:590 + #, c-format + msgid "The server at '%s' encountered an internal error (got error 500)" + msgstr " '%s' 서버에서 내부 오류가 발생했습니다 (500 오류)" + +-#: ../src/lib/ureport.c:546 ++#: ../src/lib/ureport.c:596 + #, c-format + msgid "The server at '%s' currently can't handle the request (got error 503)" + msgstr "'%s' 서버에서 요청을 처리할 수 없습니다 (503 오류)" + + #. can't print better error message +-#: ../src/lib/ureport.c:555 ++#: ../src/lib/ureport.c:605 + #, c-format + msgid "Unexpected HTTP response from '%s': %d" + msgstr "'%s'에서 예상치 못한 HTTP 응답: %d" + +-#: ../src/lib/ureport.c:564 ++#: ../src/lib/ureport.c:614 + #, c-format + msgid "Unable to parse response from ureport server at '%s'" + msgstr "'%s'의 ureport 서버에서 응답을 구문 분석할 수 없습니다" + +-#: ../src/lib/ureport.c:574 ++#: ../src/lib/ureport.c:624 + #, c-format + msgid "The response from '%s' has invalid format" + msgstr "'%s'에서의 응답에 잘못된 형식이 있습니다" + + #. HTTP CODE 202 means that call was successful but the response + #. has an error message +-#: ../src/lib/ureport.c:580 ++#: ../src/lib/ureport.c:630 + #, c-format + msgid "Type mismatch has been detected in the response from '%s'" + msgstr "'%s'의 응답에서 형식이 일치하지 않음이 감지되었습니다" + +-#: ../src/lib/ureport.c:766 ../src/plugins/reporter-rhtsupport.c:198 ++#: ../src/lib/ureport.c:820 ../src/plugins/reporter-rhtsupport.c:233 + msgid "Failed on submitting the problem" + msgstr "문제 전송 실패" + +-#: ../src/lib/ureport.c:808 ++#: ../src/lib/ureport.c:862 + #, c-format + msgid "The server at '%s' responded with an error: '%s'" + msgstr "'%s'에 있는 서버에서 오류가 발생했습니다: '%s'" +@@ -1178,6 +1260,28 @@ msgstr "사용법: " + msgid "Essential element '%s' is missing, can't continue" + msgstr "필수 요소 '%s'가 누락되어 있습니다, 계속 진행할 수 없습니다 " + ++#: ../src/lib/problem_report.c:478 ../src/plugins/reporter-bugzilla.c:355 ++#, c-format ++msgid "Can't parse backtrace: %s" ++msgstr "백트레이스를 구문 분석할 수 없음: %s" ++ ++#: ../src/lib/problem_report.c:489 ../src/plugins/reporter-bugzilla.c:366 ++msgid "Can't generate stacktrace description (no crash thread?)" ++msgstr "스택 트레이스 설명을 생성할 수 없음 (크래시 스레드가 없음?)" ++ ++#: ../src/lib/reported_to.c:52 ++msgid "Report result label mustn't be empty string." ++msgstr "보고 결과 레이블을 비워둘 수 없습니다." ++ ++#: ../src/lib/reported_to.c:58 ++msgid "Report result label mustn't contain ':' character." ++msgstr "보고 결과 레이블에 ':'을 포함해서는 안됩니다." ++ ++#: ../src/lib/reported_to.c:141 ++#, c-format ++msgid "Ignored invalid ISO date of report result '%s'" ++msgstr "보고 결과 '%s'의 잘못된 ISO 날짜가 무시되었습니다" ++ + #: ../src/lib/run_event.c:791 + #, c-format + msgid "('%s' was killed by signal %u)\n" +@@ -1245,13 +1349,14 @@ msgstr "Bugzilla 버그 추적기에 보고 " + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:3 +-msgid "Bugzilla URL" +-msgstr "Bugzilla URL " ++#: ../src/plugins/report_Uploader.xml.in.h:6 ++msgid "User name" ++msgstr "사용자 이름 " + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:4 +-msgid "Address of Bugzilla server" +-msgstr "Bugzilla 서버 주소 " ++msgid "Bugzilla account user name" ++msgstr "Bugzilla 계정 사용자 이름 " + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:5 +@@ -1264,73 +1369,84 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:6 +-#: ../src/plugins/report_Uploader.xml.in.h:6 +-msgid "User name" +-msgstr "사용자 이름 " +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:7 +-msgid "Bugzilla account user name" +-msgstr "Bugzilla 계정 사용자 이름 " +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:5 + #: ../src/plugins/report_Uploader.xml.in.h:8 + msgid "Password" + msgstr "암호 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:9 ++#: ../src/plugins/report_Bugzilla.xml.in.h:7 + msgid "Bugzilla account password" + msgstr "Bugzilla 계정 암호 " + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:10 +-#: ../src/plugins/report_RHTSupport.xml.in.h:7 +-#: ../src/plugins/report_uReport.xml.in.h:7 +-msgid "Verify SSL" +-msgstr "SSL 확인 " +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:11 +-#: ../src/plugins/report_RHTSupport.xml.in.h:8 +-#: ../src/plugins/report_uReport.xml.in.h:8 +-msgid "Check SSL key validity" +-msgstr "SSL 키 유효성 확인 " +- +-#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++#: ../src/plugins/report_Bugzilla.xml.in.h:8 + msgid "Restrict access" + msgstr "액세스 제한" + +-#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++#: ../src/plugins/report_Bugzilla.xml.in.h:9 + msgid "" + "Restrict access to the created bugzilla ticket allowing only users from " + "specified groups to view it (see advanced settings for more details)" + msgstr "" + "지정된 그룹의 사용자만 볼 수 있도록 작성한 bugzilla 티켓으로의 액세스를 제한합니다. (보다 자세한 내용은 고급 설정에서 참조)" + ++#: ../src/plugins/report_Bugzilla.xml.in.h:10 ++msgid "Groups" ++msgstr "그룹" ++ ++#: ../src/plugins/report_Bugzilla.xml.in.h:11 ++msgid "" ++"Restrict the access to specified groups <a href=\"https://github.com/abrt/" ++"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++msgstr "" ++"지정된 그룹 <a href=\"https://github.com/abrt/abrt/wiki/FAQ#creating-private-" ++"bugzilla-tickets\">?</a>에 액세스를 제한" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++msgid "Bugzilla URL" ++msgstr "Bugzilla URL " ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++msgid "Address of Bugzilla server" ++msgstr "Bugzilla 서버 주소 " ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:14 ++#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_uReport.xml.in.h:7 ++msgid "Verify SSL" ++msgstr "SSL 확인 " ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_uReport.xml.in.h:8 ++msgid "Check SSL key validity" ++msgstr "SSL 키 유효성 확인 " ++ ++#: ../src/plugins/report_Bugzilla.xml.in.h:16 + msgid "Bugzilla product" + msgstr "Bugzilla 제품" + +-#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_Bugzilla.xml.in.h:17 + msgid "" + "Specify this only if you needed different product than specified in /etc/os-" + "release" + msgstr "/etc/os-release에 지정된 것과 다른 제품이 필요할 경우에만 지정합니다" + +-#: ../src/plugins/report_Bugzilla.xml.in.h:16 ++#: ../src/plugins/report_Bugzilla.xml.in.h:18 + msgid "Bugzilla product version" + msgstr "Bugzilla 제품 버전" + +-#: ../src/plugins/report_Bugzilla.xml.in.h:17 ++#: ../src/plugins/report_Bugzilla.xml.in.h:19 + msgid "" + "Specify this only if you needed different product version than specified in /" + "etc/os-release" + msgstr "/etc/os-release에 지정된 것과 다른 제품 버전이 필요한 경우에만 지정합니다" + +-#: ../src/plugins/report_Bugzilla.xml.in.h:18 ++#: ../src/plugins/report_Bugzilla.xml.in.h:20 + #: ../src/plugins/report_Kerneloops.xml.in.h:5 + #: ../src/plugins/report_RHTSupport.xml.in.h:13 + #: ../src/plugins/report_Uploader.xml.in.h:10 +@@ -1339,7 +1455,7 @@ msgstr "/etc/os-release에 지정된 것과 다른 제품 버전이 필요한 + msgid "HTTP Proxy" + msgstr "HTTP 프록시" + +-#: ../src/plugins/report_Bugzilla.xml.in.h:19 ++#: ../src/plugins/report_Bugzilla.xml.in.h:21 + #: ../src/plugins/report_Kerneloops.xml.in.h:6 + #: ../src/plugins/report_RHTSupport.xml.in.h:14 + #: ../src/plugins/report_Uploader.xml.in.h:11 +@@ -1348,7 +1464,7 @@ msgstr "HTTP 프록시" + msgid "Sets the proxy server to use for HTTP" + msgstr "HTTP에 사용할 프록시 서버를 설정" + +-#: ../src/plugins/report_Bugzilla.xml.in.h:20 ++#: ../src/plugins/report_Bugzilla.xml.in.h:22 + #: ../src/plugins/report_Kerneloops.xml.in.h:7 + #: ../src/plugins/report_RHTSupport.xml.in.h:15 + #: ../src/plugins/report_Uploader.xml.in.h:12 +@@ -1357,7 +1473,7 @@ msgstr "HTTP에 사용할 프록시 서버를 설정" + msgid "HTTPS Proxy" + msgstr "HTTPS 프록시" + +-#: ../src/plugins/report_Bugzilla.xml.in.h:21 ++#: ../src/plugins/report_Bugzilla.xml.in.h:23 + #: ../src/plugins/report_Kerneloops.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:16 + #: ../src/plugins/report_Uploader.xml.in.h:13 +@@ -1366,18 +1482,6 @@ msgstr "HTTPS 프록시" + msgid "Sets the proxy server to use for HTTPS" + msgstr "HTTPS에 사용할 프록시 서버를 설정" + +-#: ../src/plugins/report_Bugzilla.xml.in.h:22 +-msgid "Groups" +-msgstr "그룹" +- +-#: ../src/plugins/report_Bugzilla.xml.in.h:23 +-msgid "" +-"Restrict the access to specified groups <a href=\"https://github.com/abrt/" +-"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +-msgstr "" +-"지정된 그룹 <a href=\"https://github.com/abrt/abrt/wiki/FAQ#creating-private-" +-"bugzilla-tickets\">?</a>에 액세스를 제한" +- + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report.c:37 + msgid "" +@@ -1411,48 +1515,39 @@ msgstr "'strata' 또는 'bugzilla' " + msgid "Ticket/case ID" + msgstr "티켓/사례 ID " + +-#: ../src/plugins/reporter-bugzilla.c:355 +-#, c-format +-msgid "Can't parse backtrace: %s" +-msgstr "백트레이스를 구문 분석할 수 없음: %s" +- +-#: ../src/plugins/reporter-bugzilla.c:366 +-msgid "Can't generate stacktrace description (no crash thread?)" +-msgstr "스택 트레이스 설명을 생성할 수 없음 (크래시 스레드가 없음?)" +- +-#: ../src/plugins/reporter-bugzilla.c:764 ++#: ../src/plugins/reporter-bugzilla.c:762 + msgid "" + "Warning, private ticket groups already specified as cmdline argument, " + "ignoring the env variable and configuration" + msgstr "경고: 비공개 티켓 그룹이 환경 변수 및 설정을 무시하고 이미 cmdline 인수로 지정되어 있습니다" + +-#: ../src/plugins/reporter-bugzilla.c:775 +-#: ../src/plugins/reporter-rhtsupport.c:342 ++#: ../src/plugins/reporter-bugzilla.c:773 ++#: ../src/plugins/reporter-rhtsupport.c:377 + msgid "Can't continue without login" + msgstr "로그인없이 계속 진행할 수 없습니다" + +-#: ../src/plugins/reporter-bugzilla.c:788 +-#: ../src/plugins/reporter-rhtsupport.c:355 ++#: ../src/plugins/reporter-bugzilla.c:786 ++#: ../src/plugins/reporter-rhtsupport.c:390 + msgid "Can't continue without password" + msgstr "암호없이 계속 진행할 수 없습니다" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:797 ++#: ../src/plugins/reporter-bugzilla.c:795 + #, c-format + msgid "Logging into Bugzilla at %s" + msgstr "%s에 있는 Bugzilla에 로그인 " + +-#: ../src/plugins/reporter-bugzilla.c:801 ++#: ../src/plugins/reporter-bugzilla.c:799 + msgid "Invalid password or login. Please enter your BZ login:" + msgstr "암호 또는 로그인이 잘못되었습니다. BZ 로그인을 입력하십시오:" + +-#: ../src/plugins/reporter-bugzilla.c:804 +-#: ../src/plugins/reporter-rhtsupport.c:369 ++#: ../src/plugins/reporter-bugzilla.c:802 ++#: ../src/plugins/reporter-rhtsupport.c:404 + #, c-format + msgid "Invalid password or login. Please enter the password for '%s':" + msgstr "암호 또는 로그인이 잘못되었습니다. '%s'의 암호를 입력하십시오:" + +-#: ../src/plugins/reporter-bugzilla.c:823 ++#: ../src/plugins/reporter-bugzilla.c:821 + msgid "" + "\n" + "& [-vbf] [-g GROUP-NAME]... [-c CONFFILE]... [-F FMTFILE] [-A FMTFILE2] -d " +@@ -1538,159 +1633,180 @@ msgstr "" + "지정되어 있지 않을 경우 CONFFILE이 기본값이 됩니다" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:896 +-#: ../src/plugins/reporter-rhtsupport.c:472 ++#: ../src/plugins/reporter-bugzilla.c:894 ++#: ../src/plugins/reporter-rhtsupport.c:511 + msgid "Configuration file (may be given many times)" + msgstr "설정 파일 (여러번 주어질 수 있음) " + +-#: ../src/plugins/reporter-bugzilla.c:897 ++#: ../src/plugins/reporter-bugzilla.c:895 + msgid "Formatting file for initial comment" + msgstr "초기 코멘트에 대한 파일을 포맷하고 있습니다" + +-#: ../src/plugins/reporter-bugzilla.c:898 ++#: ../src/plugins/reporter-bugzilla.c:896 + msgid "Formatting file for duplicates" + msgstr "중복 확인을 위해 파일을 포맷하고 있습니다" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-bugzilla.c:897 + msgid "Attach FILEs [to bug with this ID]" + msgstr "FILE 추가 [이 ID를 갖는 버그에] " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:900 ++#: ../src/plugins/reporter-bugzilla.c:898 + msgid "When creating bug, attach binary files too" + msgstr "버그 생성 시 바이너리 파일도 첨부합니다 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:901 +-#: ../src/plugins/reporter-rhtsupport.c:474 ++#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-rhtsupport.c:513 + msgid "Force reporting even if this problem is already reported" + msgstr "이 문제가 이미 보고되어 있는 경우에도 강제로 보고합니다 " + +-#: ../src/plugins/reporter-bugzilla.c:902 ++#: ../src/plugins/reporter-bugzilla.c:900 + msgid "Add bugzilla user to CC list [of bug with this ID]" + msgstr "CC 목록에 bugzilla 사용자 [이 ID를 갖는 버그] 추가" + +-#: ../src/plugins/reporter-bugzilla.c:903 ++#: ../src/plugins/reporter-bugzilla.c:901 + msgid "Print BUG_ID which has given DUPHASH" + msgstr "지정된 DUPHASH가 있는 BUG_ID 출력" + +-#: ../src/plugins/reporter-bugzilla.c:904 ++#: ../src/plugins/reporter-bugzilla.c:902 + msgid "A name of bug tracker for an additional URL from 'reported_to'" + msgstr "'reported_to'에서 추가 URL을 위한 버그 트래커 이름 " + +-#: ../src/plugins/reporter-bugzilla.c:905 ++#: ../src/plugins/reporter-bugzilla.c:903 + msgid "Restrict access to this group only" + msgstr "이 그룹에게만 액세스를 제한합니다" + +-#: ../src/plugins/reporter-bugzilla.c:906 ++#: ../src/plugins/reporter-bugzilla.c:904 ../src/plugins/reporter-mailx.c:284 ++#: ../src/plugins/reporter-rhtsupport.c:517 + msgid "Debug" + msgstr "디버그 " + +-#: ../src/plugins/reporter-bugzilla.c:948 ++#: ../src/plugins/reporter-bugzilla.c:949 + msgid "Looking for similar problems in bugzilla" + msgstr "bugzilla에서 비슷한 문제를 검색 중" + +-#: ../src/plugins/reporter-bugzilla.c:975 ++#: ../src/plugins/reporter-bugzilla.c:976 + msgid "Login is not provided by configuration. Please enter your BZ login:" + msgstr "설정에서 로그인이 지정되어 있지 않습니다. BZ 로그인 정보를 입력하십시오:" + +-#: ../src/plugins/reporter-bugzilla.c:981 +-#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-bugzilla.c:982 ++#: ../src/plugins/reporter-rhtsupport.c:551 + #, c-format + msgid "" + "Password is not provided by configuration. Please enter the password for " + "'%s':" + msgstr "설정에서 암호가 지정되어 있지 않습니다. '%s'에 해당하는 암호를 입력하십시오:" + +-#: ../src/plugins/reporter-bugzilla.c:1000 ++#: ../src/plugins/reporter-bugzilla.c:1001 + msgid "" + "Can't get Bugzilla ID because this problem has not yet been reported to " + "Bugzilla." + msgstr "이 문제가 Bugzilla에 보고되어 있지 않기 때문에 Bugzilla ID를 가져올 수 없습니다." + +-#: ../src/plugins/reporter-bugzilla.c:1007 ++#: ../src/plugins/reporter-bugzilla.c:1008 + #, c-format + msgid "" + "This problem has been reported to Bugzilla '%s' which differs from the " + "configured Bugzilla '%s'." + msgstr "이 문제는 설정된 Bugzilla '%s'와 다르며 Bugzilla '%s'에 보고되어 있습니다." + +-#: ../src/plugins/reporter-bugzilla.c:1011 ++#: ../src/plugins/reporter-bugzilla.c:1012 + #, c-format + msgid "Malformed url to Bugzilla '%s'." + msgstr "Bugzilla '%s'에 URL 형식이 잘못되었습니다." + +-#: ../src/plugins/reporter-bugzilla.c:1015 ++#: ../src/plugins/reporter-bugzilla.c:1016 + #, c-format + msgid "Using Bugzilla ID '%s'" + msgstr "Bugzilla ID '%s' 사용" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1049 +-#: ../src/plugins/reporter-bugzilla.c:1341 ++#: ../src/plugins/reporter-bugzilla.c:1050 ++#: ../src/plugins/reporter-bugzilla.c:1220 ++#: ../src/plugins/reporter-bugzilla.c:1379 + msgid "Logging out" + msgstr "로그 아웃 " + +-#: ../src/plugins/reporter-bugzilla.c:1100 ++#: ../src/plugins/reporter-bugzilla.c:1101 + msgid "Can't determine Bugzilla Product from problem data." + msgstr "문제 데이터에서 Bugzilla 제품을 지정할 수 없습니다." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1151 ++#: ../src/plugins/reporter-bugzilla.c:1152 + msgid "Checking for duplicates" + msgstr "중복 확인 중 " + ++#: ../src/plugins/reporter-bugzilla.c:1201 ++#, c-format ++msgid "" ++"You have requested to make your data accessible only to a specific group and " ++"this bug is a duplicate of bug: %s/%u In case of bug duplicates a new " ++"comment is added to the original bug report but access to the comments " ++"cannot be restricted to a specific group. Would you like to open a new bug " ++"report and close it as DUPLICATE of the original one? Otherwise, the bug " ++"reporting procedure will be terminated." ++msgstr "" ++"특정 그룹의 데이터에만 액세스할 수 있도록 요청되었으며 이 버그는 중복된 버그입니다: %s/%u 중복된 버그의 경우 기존 버그 리포트에 " ++"새로운 코멘트가 추가되지만 이러한 코멘트에 특정 그룹만 액세스할 수 있도록 제한할 수 없습니다. 새 버그 리포트를 작성하고 이를 기존의 " ++"것과 중복된 것으로 하여 종료하시겠습니까? 그렇지 않을 경우 버그 보고 절차는 종료됩니다." ++ + # translation auto-copied from project libreport, version master, document libreport + #. Create new bug +-#: ../src/plugins/reporter-bugzilla.c:1197 ++#: ../src/plugins/reporter-bugzilla.c:1228 + msgid "Creating a new bug" + msgstr "새 버그 생성 중 " + +-#: ../src/plugins/reporter-bugzilla.c:1218 ++#: ../src/plugins/reporter-bugzilla.c:1249 + msgid "Failed to create a new bug." + msgstr "새 버그 생성에 실패했습니다." + +-#: ../src/plugins/reporter-bugzilla.c:1229 ++#: ../src/plugins/reporter-bugzilla.c:1260 + #, c-format + msgid "Adding External URL to bug %i" + msgstr "버그 %i에 외부 URL을 추가" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1235 ++#: ../src/plugins/reporter-bugzilla.c:1266 + #, c-format + msgid "Adding attachments to bug %i" + msgstr "버그 %i에 첨부 파일을 추가합니다 " + ++#: ../src/plugins/reporter-bugzilla.c:1280 ++#, c-format ++msgid "Closing bug %i as duplicate of bug %i" ++msgstr "버그 %i 와 중복되어 버그 %i 을/를 종료 중" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1254 ++#: ../src/plugins/reporter-bugzilla.c:1292 + #, c-format + msgid "Bug is already reported: %i" + msgstr "이미 버그가 보고되었음: %i " + +-#: ../src/plugins/reporter-bugzilla.c:1297 ++#: ../src/plugins/reporter-bugzilla.c:1335 + #, c-format + msgid "Adding %s to CC list" + msgstr "CC 목록에 %s 추가" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1314 ++#: ../src/plugins/reporter-bugzilla.c:1352 + #, c-format + msgid "Adding new comment to bug %d" + msgstr "버그 %d에 새로운 코멘트 추가 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1328 ++#: ../src/plugins/reporter-bugzilla.c:1366 + msgid "Attaching better backtrace" + msgstr "더 적당한 백트레이스를 첨부 중 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1336 ++#: ../src/plugins/reporter-bugzilla.c:1374 + msgid "Found the same comment in the bug history, not adding a new one" + msgstr "버그 기록에 동일한 주석이 발견된 경우 새 주석을 추가하지 않습니다 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1344 ++#: ../src/plugins/reporter-bugzilla.c:1382 + #, c-format + msgid "Status: %s%s%s %s/show_bug.cgi?id=%u" + msgstr "상태: %s%s%s %s/show_bug.cgi?id=%u" +@@ -1728,59 +1844,67 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/reporter-kerneloops.c:167 +-#: ../src/plugins/reporter-ureport.c:74 ++#: ../src/plugins/reporter-ureport.c:79 + msgid "Configuration file" + msgstr "설정 파일 " + +-#: ../src/plugins/reporter-mailx.c:59 ++#: ../src/plugins/reporter-mailx.c:83 + #, c-format + msgid "" + "Email address of %s was not specified. Would you like to do so now? If not, " + "'%s' is to be used" + msgstr "%s의 이메일 주소가 지정되어 있지 않습니다. 지금 지정하시겠습니까? 지정하지 않을 경우 '%s'이/가 사용됩니다" + +-#: ../src/plugins/reporter-mailx.c:66 ++#: ../src/plugins/reporter-mailx.c:90 + #, c-format + msgid "Please, type email address of %s:" + msgstr "%s의 이메일 주소를 입력해 주십시오:" + +-#: ../src/plugins/reporter-mailx.c:73 ++#: ../src/plugins/reporter-mailx.c:97 + #, c-format + msgid "Can't continue without email address of %s" + msgstr "%s의 이메일 주소 없이 계속 진행할 수 없습니다" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:135 ++#: ../src/plugins/reporter-mailx.c:206 ../src/plugins/reporter-mailx.c:211 + msgid "Sending an email..." + msgstr "이메일 전송 중... " + ++#: ../src/plugins/reporter-mailx.c:209 ++#, c-format ++msgid "Sending a notification email to: %s" ++msgstr "안내 이메일 전송 중: %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:158 ++#: ../src/plugins/reporter-mailx.c:237 + #, c-format + msgid "Email was sent to: %s" + msgstr "이메일이 전송되었습니다: %s" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:178 ++#: ../src/plugins/reporter-mailx.c:258 + msgid "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Sends contents of a problem directory DIR via email\n" + "\n" + "If not specified, CONFFILE defaults to " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "이메일을 통해 문제 디렉토리 DIR의 내용을 전송합니다 \n" + "\n" + "지정하지 않을 경우, CONFFILE에 따라 다음과 같이 기본 설정됩니다. " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:199 ../src/plugins/reporter-upload.c:250 ++#: ../src/plugins/reporter-mailx.c:281 ../src/plugins/reporter-upload.c:189 + msgid "Config file" + msgstr "설정 파일 " + +-#: ../src/plugins/reporter-mailx.c:200 ++#: ../src/plugins/reporter-mailx.c:282 ++msgid "Formatting file for an email" ++msgstr "이메일 용 파일 포맷 중" ++ ++#: ../src/plugins/reporter-mailx.c:283 + msgid "Notify only (Do not mark the report as sent)" + msgstr "알림 만 실행 (보고서를 전송으로 표시하지 않음)" + +@@ -1821,36 +1945,36 @@ msgid "Can't open '%s' for writing. Please select another file:" + msgstr "쓰기를 위한 '%s'을(를) 열 수 없습니다. 다른 파일을 선택하십시오: " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was appended to %s" + msgstr "보고서는 %s에 첨부되어 있음 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was stored to %s" + msgstr "보고서는 %s에 저장되어 있음 " + +-#: ../src/plugins/reporter-rhtsupport.c:259 +-#: ../src/plugins/reporter-ureport.c:237 ++#: ../src/plugins/reporter-rhtsupport.c:294 ++#: ../src/plugins/reporter-ureport.c:297 + #, c-format + msgid "Server responded with an error: '%s'" + msgstr "서버에 오류가 발생했습니다: '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:319 ++#: ../src/plugins/reporter-rhtsupport.c:354 + msgid "Do you still want to create a RHTSupport ticket?" + msgstr "RHTSupport 티켓을 정말로 생성하시겠습니까? " + +-#: ../src/plugins/reporter-rhtsupport.c:367 ++#: ../src/plugins/reporter-rhtsupport.c:402 + msgid "Invalid password or login. Please enter your Red Hat login:" + msgstr "암호 또는 로그인이 잘못되었습니다. Red Hat 로그인을 입력하십시오:" + +-#: ../src/plugins/reporter-rhtsupport.c:435 ++#: ../src/plugins/reporter-rhtsupport.c:471 + msgid "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -1859,7 +1983,7 @@ msgid "" + "If not specified, CONFFILE defaults to " + msgstr "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "또는:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -1868,79 +1992,106 @@ msgstr "" + "지정하지 않을 경우, CONFFILE이 기본값으로 사용됩니다 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:473 ++#: ../src/plugins/reporter-rhtsupport.c:512 + msgid "Upload FILEs [to case with this ID]" + msgstr "FILE 업로드 [이 ID를 갖는 사례에] " + +-#: ../src/plugins/reporter-rhtsupport.c:475 ++#: ../src/plugins/reporter-rhtsupport.c:514 + msgid "Submit uReport before creating a new case" + msgstr "새 기술 문의를 생성하기 전 uReport 전송" + +-#: ../src/plugins/reporter-rhtsupport.c:476 ++#: ../src/plugins/reporter-rhtsupport.c:515 + msgid "Configuration file for uReport" + msgstr "uReport의 설정 파일" + +-#: ../src/plugins/reporter-rhtsupport.c:504 ++#: ../src/plugins/reporter-rhtsupport.c:516 ++msgid "Formatting file for a new case" ++msgstr "새 기술 문의 용 파일을 포맷 중" ++ ++#: ../src/plugins/reporter-rhtsupport.c:545 + msgid "Login is not provided by configuration. Please enter your RHTS login:" + msgstr "설정에서 로그인이 지정되어 있지 않습니다. RHTS 로그인을 입력하십시오:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:573 ++#: ../src/plugins/reporter-rhtsupport.c:614 + #, c-format + msgid "Attaching '%s' to case '%s'" + msgstr "'%s'을(를) 사례 '%s'에 추가 중 " + +-#: ../src/plugins/reporter-rhtsupport.c:610 ++#: ../src/plugins/reporter-rhtsupport.c:651 + msgid "Sending ABRT crash statistics data" + msgstr "ABRT 크래시 통계 데이터 전송" + ++#: ../src/plugins/reporter-rhtsupport.c:674 ++msgid "" ++"The problem has only occurred once and the ability to reproduce the problem " ++"is unknown. Please ensure you will be able to provide detailed information " ++"to our Support Team. Would you like to continue and open a new support case?" ++msgstr "" ++"문제가 한 번 발생했지만 이러한 문제를 재현 가능한 지를 알 수 없습니다. 지원팀에 상세한 정보를 보내주시기 바랍니다. 새로운 기술 " ++"문의를 생성하시겠습니까?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:690 ++#, c-format ++msgid "" ++"The crashed program was released by '%s'. Would you like to report the " ++"problem to Red Hat Support?" ++msgstr "크래시된 프로그램은 '%s'에 의해 발표되었습니다. Red Hat 지원팀에 문제를 보고하시겠습니까?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:708 ++#, c-format ++msgid "" ++"The program '%s' does not appear to be provided by Red Hat. Would you like " ++"to report the problem to Red Hat Support?" ++msgstr "프로그램 '%s'은/는 Red Hat에서 제공되는 것으로 표시되지 않습니다. Red Hat 지원팀에 문제를 보고하시겠습니까?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:725 ++msgid "Can't create a temporary directory in " ++msgstr "임시 디렉토리를 생성할 수 없습니다" ++ + # translation auto-copied from project libreport, version master, document libreport + #. Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing + #. error msg is already logged by dd_opendir +-#. Gzipping e.g. 0.5gig coredump takes a while. Let client know what we are doing +-#: ../src/plugins/reporter-rhtsupport.c:621 +-#: ../src/plugins/reporter-upload.c:52 ++#. Compressing e.g. 0.5gig coredump takes a while. Let client know what we are doing ++#: ../src/plugins/reporter-rhtsupport.c:793 ++#: ../src/plugins/reporter-upload.c:103 + msgid "Compressing data" + msgstr "데이터 압축 중 " + +-#: ../src/plugins/reporter-rhtsupport.c:656 +-msgid "Can't create a temporary directory in " +-msgstr "임시 디렉토리를 생성할 수 없습니다" +- +-#: ../src/plugins/reporter-rhtsupport.c:665 ++#: ../src/plugins/reporter-rhtsupport.c:801 + msgid "Can't create temporary file in " + msgstr "임시 파일을 생성할 수 없습니다" + + #. Check for hints and show them if we have something +-#: ../src/plugins/reporter-rhtsupport.c:676 ++#: ../src/plugins/reporter-rhtsupport.c:812 + msgid "Checking for hints" + msgstr "힌트 확인 중" + +-#: ../src/plugins/reporter-rhtsupport.c:686 ++#: ../src/plugins/reporter-rhtsupport.c:822 + msgid "Creating a new case" + msgstr "새 기술 문의 생성" + + #. How can we help user sorting out this problem? +-#: ../src/plugins/reporter-rhtsupport.c:697 ++#: ../src/plugins/reporter-rhtsupport.c:833 + msgid "Can't determine RH Support Product from problem data." + msgstr "문제 데이터에서 RH 지원 제품을 지정할 수 없습니다." + +-#: ../src/plugins/reporter-rhtsupport.c:753 ++#: ../src/plugins/reporter-rhtsupport.c:889 + msgid "Linking ABRT crash statistics record with the case" + msgstr "ABRT 크래시 통계 기록을 기술 문의에 연결 중" + +-#: ../src/plugins/reporter-rhtsupport.c:766 ++#: ../src/plugins/reporter-rhtsupport.c:902 + #, c-format + msgid "Linking ABRT crash statistics record with contact email: '%s'" + msgstr "ABRT 크래시 통계 기록을 담당자의 이메일 주소에 연결 중: '%s'" + +-#: ../src/plugins/reporter-rhtsupport.c:790 ++#: ../src/plugins/reporter-rhtsupport.c:926 + #, c-format + msgid "Adding comment to case '%s'" + msgstr "기술 문의 '%s'에 코멘트 추가 중" + + #. Attach the tarball of -d DIR +-#: ../src/plugins/reporter-rhtsupport.c:808 ++#: ../src/plugins/reporter-rhtsupport.c:944 + #, c-format + msgid "Attaching problem data to case '%s'" + msgstr "기술 문의 '%s'에 문제 데이터를 첨부 중" +@@ -1955,45 +2106,55 @@ msgstr "관련 가능성이 있는 문서: " + msgid "Updates which possibly help: " + msgstr "도움이 될 수 있는 업데이트: " + +-#: ../src/plugins/reporter-upload.c:30 ++#: ../src/plugins/reporter-upload.c:29 + msgid "Can't continue without URL" + msgstr "URL 없이 계속 진행할 수 없습니다" + +-#: ../src/plugins/reporter-upload.c:61 +-msgid "Upload URL is not provided by configuration. Please enter upload URL:" +-msgstr "설정에서 업로드 URL이 지정되어 있지 않습니다. 업로드 URL을 입력하십시오:" +- + #. Be permissive and nice, ask only once and don't check + #. the result. User can dismiss this prompt but the upload + #. may work somehow??? +-#: ../src/plugins/reporter-upload.c:164 ++#: ../src/plugins/reporter-upload.c:51 + msgid "Please enter password for uploading:" + msgstr "업로드를 위해 암호를 입력하십시오:" + + # translation auto-copied from project libreport, version master, document libreport + #. success +-#: ../src/plugins/reporter-upload.c:181 ++#: ../src/plugins/reporter-upload.c:120 + #, c-format + msgid "Archive is created: '%s'" + msgstr "아카이브가 생성됨: '%s' " + +-#: ../src/plugins/reporter-upload.c:222 ++#: ../src/plugins/reporter-upload.c:159 + msgid "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Uploads compressed tarball of problem directory DIR to URL.\n" + "If URL is not specified, creates tarball in " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "문제 디렉토리 DIR의 압축된 타볼을 URL에 업로드합니다.\n" + "URL이 지정되어 있지 않을 경우 타볼을 생성합니다 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:251 ++#: ../src/plugins/reporter-upload.c:190 + msgid "Base URL to upload to" + msgstr "업로드할 기본 URL " + ++#: ../src/plugins/reporter-upload.c:191 ++msgid "SSH public key file" ++msgstr "SSH 공개 키 파일" ++ ++#: ../src/plugins/reporter-upload.c:192 ++msgid "SSH private key file" ++msgstr "SSH 개인 키 파일" ++ ++#: ../src/plugins/reporter-upload.c:221 ++msgid "" ++"Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:" ++"" ++msgstr "문제 데이터를 내보내기할 URL (scp, ftp 등)을 입력하십시오:" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Kerneloops.xml.in.h:1 + msgid "Kerneloops.org" +@@ -2119,11 +2280,11 @@ msgstr "Red Hat 고객 사용자 이름 " + msgid "Red Hat customer password" + msgstr "Red Hat 고객 암호 " + +-#: ../src/plugins/report_RHTSupport.xml.in.h:9 ++#: ../src/plugins/report_RHTSupport.xml.in.h:7 + msgid "Submit uReport" + msgstr "uReport 제출" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:10 ++#: ../src/plugins/report_RHTSupport.xml.in.h:8 + msgid "" + "Submit <a href=\"https://access.redhat.com/articles/642323\">micro-" + "report</a> when creating a new case." +@@ -2132,12 +2293,12 @@ msgstr "" + "642323\">micro-report</a> 에 전송합니다." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_RHTSupport.xml.in.h:9 + msgid "RH Portal URL" + msgstr "RH 포털 URL " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_RHTSupport.xml.in.h:10 + msgid "Address of the Red Hat support portal" + msgstr "Red Hat 지원 포털 주소 " + +@@ -2189,6 +2350,22 @@ msgstr "FTP 프록시" + msgid "Sets the proxy server to use for FTP" + msgstr "FTP 용으로 사용할 프록시 서버 설정" + ++#: ../src/plugins/report_Uploader.xml.in.h:16 ++msgid "SSH Public key file" ++msgstr "SSH 공개 키 파일" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:17 ++msgid "Use this field to specify SSH public keyfile" ++msgstr "이 필드에 SSH 공개 키 파일을 지정합니다" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:18 ++msgid "SSH Private key file" ++msgstr "SSH 개인 키 파일" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:19 ++msgid "Use this field to specify SSH private keyfile" ++msgstr "이 필드에 SSH 비공개 키파일을 지정합니다" ++ + #: ../src/plugins/report_uReport.xml.in.h:1 + msgid "uReport" + msgstr "uReport" +@@ -2262,61 +2439,85 @@ msgstr "새 버그 id: %i " + msgid "Bugzilla couldn't find parent of bug %d" + msgstr "Bugzilla는 버그 %d의 부모 버그를 찾을 수 없습니다 " + +-#: ../src/plugins/rhbz.c:893 ++#: ../src/plugins/rhbz.c:916 + msgid "Bug.search(quicksearch) return value did not contain member 'bugs'" + msgstr "Bug.search(quicksearch)의 반환값에는 멤버 'bugs'가 포함되어 있지 않습니다" + +-#: ../src/plugins/reporter-ureport.c:68 ++#: ../src/plugins/reporter-ureport.c:73 + msgid "Specify server URL" + msgstr "서버 URL 지정" + +-#: ../src/plugins/reporter-ureport.c:70 ++#: ../src/plugins/reporter-ureport.c:75 + msgid "Allow insecure connection to ureport server" + msgstr "ureport 서버에 비보안 연결 허용" + +-#: ../src/plugins/reporter-ureport.c:71 ++#: ../src/plugins/reporter-ureport.c:76 + msgid "Use client authentication" + msgstr "클라이언트 인증 사용" + +-#: ../src/plugins/reporter-ureport.c:72 ++#: ../src/plugins/reporter-ureport.c:77 + msgid "Use HTTP Authentication" + msgstr "HTTP 인증 사용" + +-#: ../src/plugins/reporter-ureport.c:73 ++#: ../src/plugins/reporter-ureport.c:78 + msgid "Additional files included in 'auth' key" + msgstr "'auth' 키에 포함할 추가 파일" + +-#: ../src/plugins/reporter-ureport.c:76 ++#: ../src/plugins/reporter-ureport.c:81 + msgid "bthash of uReport to attach (conflicts with -A)" + msgstr "첨부할 uReport의 bthash (-A와 충돌)" + +-#: ../src/plugins/reporter-ureport.c:78 ++#: ../src/plugins/reporter-ureport.c:83 + msgid "attach to a bthash from reported_to (conflicts with -a)" + msgstr "reported_to에서 bthash에 첨부 ( -a와 충돌)" + +-#: ../src/plugins/reporter-ureport.c:80 ++#: ../src/plugins/reporter-ureport.c:85 + msgid "contact e-mail address (requires -a|-A, conflicts with -E)" + msgstr "담당자 이메일 주소 (-a|-A 필수, -E와 충돌)" + +-#: ../src/plugins/reporter-ureport.c:82 ++#: ../src/plugins/reporter-ureport.c:87 + msgid "" + "contact e-mail address from environment or configuration file (requires -a|-" + "A, conflicts with -e)" + msgstr "환경 또는 설정 파일에 있는 담당자 이메일 주소 (-a|-A 필수, -e와 충돌)" + +-#: ../src/plugins/reporter-ureport.c:84 ++#: ../src/plugins/reporter-ureport.c:89 + msgid "attach RHBZ bug (requires -a|-A, conflicts with -B)" + msgstr "RHBZ 버그 첨부 (-a|-A 필수, -B와 충돌)" + +-#: ../src/plugins/reporter-ureport.c:86 ++#: ../src/plugins/reporter-ureport.c:91 + msgid "" + "attach last RHBZ bug from reported_to (requires -a|-A, conflicts with -b)" + msgstr "reported_to에서 최신 RHBZ 버그 첨부 (-a|-A 필수, -b와 충돌)" + +-#: ../src/plugins/reporter-ureport.c:91 ++#: ../src/plugins/reporter-ureport.c:95 ++msgid "attach value (requires -a|-A and -T, conflicts with -L)" ++msgstr "값 첨부 (r -a|-A 및 -T 필수, -L과 충돌)" ++ ++#: ../src/plugins/reporter-ureport.c:97 ++msgid "" ++"attach data of FIELD [URL] of the last report result (requires -a|-A, -r and " ++"-T, conflicts with -l)" ++msgstr "마지막 보고 결과의 FIELD [URL]에 날짜 첨부 (-a|-A , -r 및 -T 필수, -l과 충돌)" ++ ++#: ../src/plugins/reporter-ureport.c:100 ++msgid "" ++"use REPORT_RESULT_TYPE when looking for FIELD in reported_to (used only with " ++"-L)" ++msgstr "reported_to에서 FIELD 검색 시 REPORT_RESULT_TYPE을 사용 (-L과만 사용)" ++ ++#: ../src/plugins/reporter-ureport.c:102 ++msgid "" ++"attach DATA as ureporte attachment ATTACHMENT_TYPE (used only with -l|-L)" ++msgstr "ureporte 첨부 ATTACHMENT_TYPE으로 DATA 첨부 (-l|-L과만 사용)" ++ ++#: ../src/plugins/reporter-ureport.c:107 + msgid "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2327,6 +2528,9 @@ msgid "" + msgstr "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2335,43 +2539,53 @@ msgstr "" + "\n" + "기본 설정을 불러옵니다" + +-#: ../src/plugins/reporter-ureport.c:144 ++#: ../src/plugins/reporter-ureport.c:179 + msgid "This problem does not have an uReport assigned." + msgstr "이 문제에는 uReport가 지정되어 있지 않습니다." + +-#: ../src/plugins/reporter-ureport.c:157 ++#: ../src/plugins/reporter-ureport.c:192 + msgid "This problem has not been reported to Bugzilla." + msgstr "이 문제는 Bugzilla에 보고되어 있지 않습니다." + +-#: ../src/plugins/reporter-ureport.c:161 ++#: ../src/plugins/reporter-ureport.c:196 + #, c-format + msgid "Unable to find bug ID in bugzilla URL '%s'" + msgstr "bugzilla URL '%s'에서 bug ID를 찾을 수 없습니다" + +-#: ../src/plugins/reporter-ureport.c:166 ++#: ../src/plugins/reporter-ureport.c:201 + #, c-format + msgid "Unable to parse bug ID from bugzilla URL '%s'" + msgstr "bugzilla URL '%s'에서 bug ID룰 구문 분석할 수 없습니다" + +-#: ../src/plugins/reporter-ureport.c:179 ++#: ../src/plugins/reporter-ureport.c:211 ++#, c-format ++msgid "This problem has not been reported to '%s'." ++msgstr "이 문제는 '%s'에 보고되어 있지 않습니다." ++ ++#: ../src/plugins/reporter-ureport.c:216 ++#, c-format ++msgid "The report result '%s' is missing URL." ++msgstr "보고 결과 %s'에 URL이 누락되어 있습니다." ++ ++#: ../src/plugins/reporter-ureport.c:233 + msgid "" + "Neither environment variable 'uReport_ContactEmail' nor configuration option " + "'ContactEmail' is set" + msgstr "환경 변수 'uReport_ContactEmail' 또는 설정 옵션 'ContactEmail'이 설정되어 있지 않습니다" + +-#: ../src/plugins/reporter-ureport.c:185 ++#: ../src/plugins/reporter-ureport.c:239 + msgid "You need to specify bug ID, contact email or both" + msgstr "버그 ID 또는 이메일 주소 중 하나 또는 모두를 지정해야 합니다" + +-#: ../src/plugins/reporter-ureport.c:203 ++#: ../src/plugins/reporter-ureport.c:263 + msgid "You need to specify bthash of the uReport to attach." + msgstr "첨부할 uReport의 bthash를 지정해야 합니다." + +-#: ../src/plugins/reporter-ureport.c:208 ++#: ../src/plugins/reporter-ureport.c:268 + msgid "Not uploading an empty uReport" + msgstr "빈 uReport를 업로드하지 않습니다" + +-#: ../src/plugins/reporter-ureport.c:229 ++#: ../src/plugins/reporter-ureport.c:289 + msgid "This problem has already been reported." + msgstr "이미 문제가 보고되었습니다." + +@@ -2519,6 +2733,16 @@ msgstr "이메일을 통해 문제 데이터 전송" + msgid "Analyze the problem locally and send information via email" + msgstr "문제를 로컬로 분석하여 정보를 이메일로 전송" + ++#: ../src/workflows/workflow_uReport.xml.in.h:1 ++msgid "Submit anonymous crash report" ++msgstr "익명으로 크래시 보고서 제출" ++ ++#: ../src/workflows/workflow_uReport.xml.in.h:2 ++msgid "" ++"Submit anonymous crash report - I do not want to be contacted by Red Hat " ++"Support" ++msgstr "익명으로 크래시 보고서 제출 - Red Hat 지원팀으로 부터 연락을 받고 싶지 않습니다." ++ + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:1 + #: ../src/workflows/workflow_RHELKerneloops.xml.in.h:1 + #: ../src/workflows/workflow_RHELPython.xml.in.h:1 +@@ -2526,50 +2750,55 @@ msgstr "문제를 로컬로 분석하여 정보를 이메일로 전송" + #: ../src/workflows/workflow_RHELxorg.xml.in.h:1 + #: ../src/workflows/workflow_RHELLibreport.xml.in.h:1 + #: ../src/workflows/workflow_RHELJava.xml.in.h:1 +-msgid "Report to Red Hat Customer Portal" +-msgstr "Red Hat 고객 포털에 보고" ++msgid "Ask Red Hat Support for help" ++msgstr "Red Hat 지원팀에 문의" + + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:2 ++#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 ++#: ../src/workflows/workflow_RHELPython.xml.in.h:2 ++#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 ++#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 ++#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 ++#: ../src/workflows/workflow_RHELJava.xml.in.h:2 ++msgid "" ++"Create new Red Hat Support case - I would like to be contacted by Red Hat " ++"Support" ++msgstr "새 Red Hat 기술 지원 생성 - Red Hat 기술 지원에서 연락을 받고자 합니다" ++ ++#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 ++msgid "Report to Red Hat Bugzilla" ++msgstr "Red Hat Bugzilla에 보고" ++ + #: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:2 + msgid "Process the C/C++ crash using the Red Hat infrastructure" + msgstr "Red Hat 인프라를 사용하여 C/C++ 크래시를 처리" + +-#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:2 + msgid "Process the kerneloops using the Red Hat infrastructure" + msgstr "Red Hat 인프라를 사용하여 kerneloops를 처리" + +-#: ../src/workflows/workflow_RHELPython.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:2 + msgid "Process the python exception using the Red Hat infrastructure" + msgstr "Red Hat 인프라를 사용하여 python 예외를 처리" + +-#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:2 + msgid "Process the kernel crash using the Red Hat infrastructure" + msgstr "Red Hat 인프라를 사용하여 커널 크래시를 처리" + +-#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:2 + msgid "Process the X Server problem using the Red Hat infrastructure" + msgstr "Red Hat 인프라를 사용하여 X 서버 문제를 처리" + +-#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:2 + msgid "Process the problem using the Red Hat infrastructure" + msgstr "Red Hat 인프라를 사용하여 문제를 처리" + +-#: ../src/workflows/workflow_RHELJava.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:2 + msgid "Process the Java exception using the Red Hat infrastructure" + msgstr "Red Hat 인프라를 사용하여 Java 예외를 처리" +- +-#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 +-msgid "Report to Red Hat Bugzilla" +-msgstr "Red Hat Bugzilla에 보고" +diff --git a/po/pt_BR.po b/po/pt_BR.po +index afd30ab..0e0fe2c 100644 +--- a/po/pt_BR.po ++++ b/po/pt_BR.po +@@ -1,17 +1,20 @@ + # Gcintra , 2015. #zanata ++# Frederico Henrique Gonçalves Lima , 2016. #zanata ++# Maria Andrada , 2016. #zanata + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2015-07-14 15:18+0200\n" ++"POT-Creation-Date: 2016-06-29 15:25+0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2015-07-19 07:12-0400\n" +-"Last-Translator: Gcintra \n" ++"PO-Revision-Date: 2016-08-03 03:19-0400\n" ++"Last-Translator: Frederico Henrique Gonçalves Lima \n" + "Language-Team: Portuguese (Brazil)\n" + "Language: pt-BR\n" +-"X-Generator: Zanata 3.6.2\n" ++"X-Generator: Zanata 3.9.5\n" + "Plural-Forms: nplurals=2; plural=(n != 1)\n" + + # translation auto-copied from project libreport, version master, document libreport +@@ -212,37 +215,31 @@ msgstr "Selecione um workflow para executar:" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:87 +-#, python-brace-format + msgid "Extracting cpio from {0}" + msgstr "Extraindo cpio de {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:92 +-#, python-brace-format + msgid "Can't write to '{0}': {1}" + msgstr "Não foi possível gravar em '{0}': {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:107 +-#, python-brace-format + msgid "Can't extract package '{0}'" + msgstr "Não foi possível extrair pacote '{0}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:115 +-#, python-brace-format + msgid "Caching files from {0} made from {1}" + msgstr "Obtendo arquivos de {0} feitos a partir de {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:134 +-#, python-brace-format + msgid "Can't extract files from '{0}'" + msgstr "Não foi possível extrair arquivos de '{0}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:147 +-#, python-brace-format + msgid "Can't remove '{0}': {1}" + msgstr "Não foi possível remover '{0}': {1}" + +@@ -251,7 +248,6 @@ msgstr "Não foi possível remover '{0}': {1}" + #. % (self.downloaded_pkgs + 1, self.total_pkgs, name, pct) + #. ) + #: ../src/client-python/debuginfo.py:194 ../src/client-python/debuginfo.py:205 +-#, python-brace-format + msgid "Downloading ({0} of {1}) {2}: {3:3}%" + msgstr "Baixando o ({0} de {1}) {2}: {3:3}%" + +@@ -302,7 +298,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:356 +-#, python-brace-format + msgid "Can't setup {0}: {1}, disabling" + msgstr "Não foi possível configurar {0}: {1}, desabilitando" + +@@ -327,19 +322,16 @@ msgstr "Erro ao recuperar listas de arquivo: '{0!s}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:416 +-#, python-brace-format + msgid "Can't find packages for {0} debuginfo files" + msgstr "Não é possível encontrar pacotes para os arquivos {0} debuginfo" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:418 +-#, python-brace-format + msgid "Packages to download: {0}" + msgstr "Pacotes para baixar: {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:419 +-#, python-brace-format + msgid "Downloading {0:.2f}Mb, installed size: {1:.2f}Mb. Continue?" + msgstr "Baixando {0:.2f}Mb, tamanho instalado: {1:.2f}Mb. Continuar?" + +@@ -351,7 +343,6 @@ msgstr "Baixar cancelado pelo usuário" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:434 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in tmp dir '{0}' ({1:.2f}Mb left). Continue?" + msgstr "" +@@ -360,7 +351,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:443 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in cache dir '{0}' ({1:.2f}Mb left). " + "Continue?" +@@ -370,13 +360,11 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:469 +-#, python-brace-format + msgid "Cannot copy file '{0}': {1}" + msgstr "Não é possível copiar o arquivo '{0}': {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:487 +-#, python-brace-format + msgid "Downloading package {0} failed" + msgstr "Download de pacote {0} falhou" + +@@ -391,7 +379,6 @@ msgstr "Desempacotamento falhou, abortando download..." + #. but it was appearing even if no packages were in fact extracted + #. (say, when there was one package, and it has download error). + #: ../src/client-python/debuginfo.py:504 +-#, python-brace-format + msgid "Removing {0}" + msgstr "Removendo {0}" + +@@ -453,7 +440,7 @@ msgid "C_onfigure" + msgstr "C_onfigurar" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3472 ++#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3718 + msgid "_Close" + msgstr "_Fechado" + +@@ -485,7 +472,7 @@ msgstr "" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gtk-helpers/event_config_dialog.c:321 + #: ../src/gtk-helpers/workflow_config_dialog.c:86 +-#: ../src/gui-wizard-gtk/wizard.c:822 ../src/gui-wizard-gtk/wizard.c:3101 ++#: ../src/gui-wizard-gtk/wizard.c:844 ../src/gui-wizard-gtk/wizard.c:3325 + msgid "_Cancel" + msgstr "_Cancelar" + +@@ -573,7 +560,7 @@ msgstr "" + msgid "Alternate GUI file" + msgstr "Arquivo GUI alternativo" + +-#: ../src/gui-wizard-gtk/wizard.c:354 ++#: ../src/gui-wizard-gtk/wizard.c:378 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide the " +@@ -587,7 +574,7 @@ msgstr "" + "\n" + "Leia sobre a configuração em: https://access.redhat.com/site/articles/718083" + +-#: ../src/gui-wizard-gtk/wizard.c:357 ++#: ../src/gui-wizard-gtk/wizard.c:381 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide " +@@ -602,13 +589,13 @@ msgstr "" + "Leia mais sobre a " + "configuração" + +-#: ../src/gui-wizard-gtk/wizard.c:373 ++#: ../src/gui-wizard-gtk/wizard.c:397 + #, c-format + msgid "Con_figure %s" + msgstr "Con_figure %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:400 ++#: ../src/gui-wizard-gtk/wizard.c:424 + #, c-format + msgid "" + "Need writable directory, but '%s' is not writable. Move it to '%s' and " +@@ -618,17 +605,17 @@ msgstr "" + "e opere em dados modificados?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:813 ++#: ../src/gui-wizard-gtk/wizard.c:835 + msgid "View/edit a text file" + msgstr "Visualizar/editar um arquivo de texto" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:821 ++#: ../src/gui-wizard-gtk/wizard.c:843 + msgid "_Save" + msgstr "_Salvar" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1040 ++#: ../src/gui-wizard-gtk/wizard.c:1067 + msgid "" + "No reporting targets are defined for this problem. Check configuration in /" + "etc/libreport/*" +@@ -637,45 +624,68 @@ msgstr "" + "configuração em /etc/libreport/*" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1077 ++#: ../src/gui-wizard-gtk/wizard.c:1104 + #, c-format + msgid "(requires: %s)" + msgstr "(depende de: %s)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1091 ++#: ../src/gui-wizard-gtk/wizard.c:1118 + #, c-format + msgid "(not needed, data already exist: %s)" + msgstr "(não é necessário, dados já existem: %s)" + ++#: ../src/gui-wizard-gtk/wizard.c:1217 ++msgid "" ++"Since crashes without a known reproducer can be difficult to diagnose, " ++"please provide a comprehensive description of the problem you have " ++"encountered." ++msgstr "" ++"Uma vez que quebras sem um reprodutor conhecido pode ser difícil de " ++"diagnosticar, por favor fornece uma descrição detalhada sobre o problema que " ++"você encontrou." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1224 ++msgid "" ++"Please provide a short description of the problem and please include the " ++"steps you have used to reproduce the problem." ++msgstr "" ++"Por favor forneça uma breve descrição do problema e por favor inclua os " ++"passos que você utilizou para reproduzir o problema." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1231 ++msgid "Please provide the steps you have used to reproduce the problem." ++msgstr "" ++"Por favor forneça os passos que você utilizou para reproduzir o problema." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1277 ++#: ../src/gui-wizard-gtk/wizard.c:1349 + msgid "(click here to view/edit)" + msgstr "(clique aqui para ver/editar)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1288 ++#: ../src/gui-wizard-gtk/wizard.c:1360 + #, c-format + msgid "(binary file, %llu bytes)" + msgstr "(arquivo binário, %llu bytes)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1395 ../src/report-newt/report-newt.c:334 ++#: ../src/gui-wizard-gtk/wizard.c:1467 ../src/report-newt/report-newt.c:334 + msgid "(no description)" + msgstr "(sem descrição)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1403 ++#: ../src/gui-wizard-gtk/wizard.c:1475 + #, c-format + msgid "%llu bytes, %u files" + msgstr "%llu bytes, %u arquivos" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1647 ++#: ../src/gui-wizard-gtk/wizard.c:1752 + msgid "Processing was canceled" + msgstr "O processamento foi cancelado" + +-#: ../src/gui-wizard-gtk/wizard.c:1851 ++#: ../src/gui-wizard-gtk/wizard.c:1956 + msgid "" + "Processing of the problem failed. This can have many reasons but there are " + "three most common:\n" +@@ -689,7 +699,7 @@ msgstr "" + "\t▫ dados do problema corrompidos\n" + "\t▫ configuração inválida" + +-#: ../src/gui-wizard-gtk/wizard.c:1860 ++#: ../src/gui-wizard-gtk/wizard.c:1965 + msgid "" + "If you want to update the configuration and try to report again, please open " + "Preferences item\n" +@@ -702,54 +712,67 @@ msgstr "" + "em Repetir" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1978 ++#: ../src/gui-wizard-gtk/wizard.c:2089 + msgid "Processing was interrupted because the problem is not reportable." + msgstr "O processamento foi interrompido porque o problema não é reportável." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1988 ../src/gui-wizard-gtk/wizard.c:2057 ++#: ../src/gui-wizard-gtk/wizard.c:2099 ../src/gui-wizard-gtk/wizard.c:2168 + msgid "Processing failed." + msgstr "O processamento falhou" + + # translation auto-copied from project libreport, version master, document libreport + #. No next event, go to progress page and finish +-#: ../src/gui-wizard-gtk/wizard.c:1995 ../src/gui-wizard-gtk/wizard.c:2818 ++#: ../src/gui-wizard-gtk/wizard.c:2106 ../src/gui-wizard-gtk/wizard.c:3040 + msgid "Processing finished." + msgstr "Processamento finalizado" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1996 ++#: ../src/gui-wizard-gtk/wizard.c:2107 + msgid "Processing finished, please proceed to the next step." + msgstr "Processamento finalizado, por favor proceda à próxima etapa." + + # translation auto-copied from project libreport, version master, document libreport + #. TODO: better msg? +-#: ../src/gui-wizard-gtk/wizard.c:2054 ++#: ../src/gui-wizard-gtk/wizard.c:2165 + #, c-format + msgid "No processing for event '%s' is defined" + msgstr "Nenhum processamento para o evento '%s' está definido" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2068 ++#: ../src/gui-wizard-gtk/wizard.c:2179 + msgid "Processing interrupted: can't continue without writable directory." + msgstr "" + "Processamento interrompido: não é possível continuar sem uma pasta com " + "permissão de escrita." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2105 ++#: ../src/gui-wizard-gtk/wizard.c:2216 + msgid "Processing..." + msgstr "Processando..." + ++#: ../src/gui-wizard-gtk/wizard.c:2297 ++msgid "" ++"Possible sensitive data detected, feel free to edit the report and remove " ++"them." ++msgstr "" ++"Dados sensíveis possíveis detectados, sinta-se a vontade para editar o " ++"relatório e removê-los." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2198 ++#: ../src/gui-wizard-gtk/wizard.c:2337 + msgid "Cannot check backtrace rating because of invalid event name" + msgstr "" + "Não é possível checar a avaliação do backtrace devido a um nome de evento " + "inválido" + ++#: ../src/gui-wizard-gtk/wizard.c:2869 ++#, c-format ++msgid "Failed to save file '%s'" ++msgstr "Falha ao salvar o arquivo '%s'" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2838 ++#: ../src/gui-wizard-gtk/wizard.c:3060 + #, c-format + msgid "" + "Event '%s' requires permission to send possibly sensitive data.\n" +@@ -760,7 +783,7 @@ msgstr "" + "Você deseja continuar?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2886 ++#: ../src/gui-wizard-gtk/wizard.c:3108 + #, c-format + msgid "This problem should not be reported (it is likely a known problem). %s" + msgstr "" +@@ -768,106 +791,127 @@ msgstr "" + "%s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3102 ++#: ../src/gui-wizard-gtk/wizard.c:3326 + msgid "_Open" + msgstr "_Abrir" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3124 ++#: ../src/gui-wizard-gtk/wizard.c:3348 + #, c-format + msgid "'%s' is not an ordinary file" + msgstr "'%s' não é um arquivo comum" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3138 ++#: ../src/gui-wizard-gtk/wizard.c:3362 + msgid "You are trying to copy a file onto itself" + msgstr "Você está tentando copiar um arquivo nele mesmo." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3145 ++#: ../src/gui-wizard-gtk/wizard.c:3369 + #, c-format + msgid "Can't copy '%s': %s" + msgstr "Não é possível copiar '%s': %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3160 ++#: ../src/gui-wizard-gtk/wizard.c:3384 + #, c-format + msgid "Item '%s' already exists and is not modifiable" + msgstr "O item '%s' já existe e não é modificável" + ++#: ../src/gui-wizard-gtk/wizard.c:3542 ++msgid "I have experienced this problem for the first time" ++msgstr "Eu experimentei esse problema pela primeira vez" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3545 ++msgid "I can reproduce this problem" ++msgstr "Eu posso reproduzir esse problema" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3548 ++msgid "This problem occurs repeatedly" ++msgstr "Esse problema ocorre repetidamente" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3314 ++#: ../src/gui-wizard-gtk/wizard.c:3560 + msgid "Include" + msgstr "Incluir" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3325 ++#: ../src/gui-wizard-gtk/wizard.c:3571 + msgid "Name" + msgstr "Nome: " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3335 ++#: ../src/gui-wizard-gtk/wizard.c:3581 + msgid "Value" + msgstr "Valor" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3369 ++#: ../src/gui-wizard-gtk/wizard.c:3615 + msgid "Problem description" + msgstr "Descrição do Problema" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3370 ++#: ../src/gui-wizard-gtk/wizard.c:3616 + msgid "Select how to report this problem" + msgstr "Selecione como relatar esse problema" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3371 ++#: ../src/gui-wizard-gtk/wizard.c:3617 + msgid "Provide additional information" + msgstr "Fornecer informações adicionais" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3372 ++#: ../src/gui-wizard-gtk/wizard.c:3618 + msgid "Review the data" + msgstr "Revisar os dados" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3373 ++#: ../src/gui-wizard-gtk/wizard.c:3619 + msgid "Confirm data to report" + msgstr "Confirmar dados para reportar" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3374 ++#: ../src/gui-wizard-gtk/wizard.c:3620 + msgid "Processing" + msgstr "Processando" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3375 ++#: ../src/gui-wizard-gtk/wizard.c:3621 + msgid "Processing done" + msgstr "Processamento feito" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3474 ++#: ../src/gui-wizard-gtk/wizard.c:3720 + msgid "_Stop" + msgstr "_Parar" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3477 ++#: ../src/gui-wizard-gtk/wizard.c:3723 + msgid "Upload for analysis" + msgstr "Enviar para análise" + + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3480 ++#: ../src/gui-wizard-gtk/wizard.c:3726 + msgid "Repeat" + msgstr "Repetir" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3483 ++#: ../src/gui-wizard-gtk/wizard.c:3729 + msgid "_Forward" + msgstr "_Avançado" + +-#: ../src/gui-wizard-gtk/wizard.c:3575 ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.c:3780 ++msgid "Restrict access to the report" ++msgstr "Acesso restrito a este relatório" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3785 ++msgid "Learn more about restricted access in the configuration" ++msgstr "Saiba mais sobre acesso restrito nas configurações" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3844 + msgid "" + "In order to enable the built-in screencasting functionality the package fros-" + "gnome has to be installed. Please run the following command if you want to " +@@ -881,34 +925,8 @@ msgstr "" + "\n" + "su -c \"yum install fros-gnome\"" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:1 +-msgid "" +-"Possible sensitive data detected, feel free to edit the report and remove " +-"them." +-msgstr "" +-"Dados sensíveis possíveis detectados, sinta-se a vontade para editar o " +-"relatório e removê-los." +- + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:2 +-msgid "Restrict access to the report" +-msgstr "Acesso restrito a este relatório" +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:3 +-msgid "" +-"No one except Red Hat employees will be allowed to see the report with " +-"restricted access (not even you)" +-msgstr "" +-"Ninguém exceto membros da Red Hat terá permissão para ver o relatório com " +-"acesso restrito (nem mesmo você)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:4 +-msgid "Read more about reports with restricted access" +-msgstr "Leia mais sobre relatório com acesso restrito" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++#: ../src/gui-wizard-gtk/wizard.glade.h:1 + msgid "" + "On the following screens, you will be asked to describe how the problem " + "occurred, to choose how to analyze the problem (if needed), to review " +@@ -921,12 +939,12 @@ msgstr "" + "reportado. Clique em 'Encaminhar' para proceder." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++#: ../src/gui-wizard-gtk/wizard.glade.h:2 + msgid "Details" + msgstr "Detalhes" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:7 ++#: ../src/gui-wizard-gtk/wizard.glade.h:3 + msgid "" + "How did this problem happen (step-by-step)? How can it be reproduced? Any " + "additional comments useful for diagnosing the problem? Please use English if " +@@ -936,13 +954,29 @@ msgstr "" + "Qualquer comentário extra útil para diagnosticar o problema? Por favor use o " + "idioma Inglês se possível." + ++#: ../src/gui-wizard-gtk/wizard.glade.h:4 ++msgid "How reproducible is this problem?" ++msgstr "Quão reproduzível é este problema?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++msgid "How it can be reproduced (one step per line)?" ++msgstr "Como ele pode ser reproduzido (um passo por linha)?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++msgid "" ++"Please add a comprehensive description of the problem you have. This is a " ++"very long place holder." ++msgstr "" ++"Por favor forneça uma descrição detalhada do problema que você teve. Este é " ++"um espaço reservado muito grande." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:8 ++#: ../src/gui-wizard-gtk/wizard.glade.h:7 + msgid "You need to fill the how to before you can proceed..." + msgstr "Você precisa preencher antes de continuar..." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++#: ../src/gui-wizard-gtk/wizard.glade.h:8 + msgid "" + "Your comments are not private. They may be included into publicly " + "visible problem reports." +@@ -951,6 +985,11 @@ msgstr "" + "relatos de problemas publicamente visíveis." + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++msgid "I don't know what caused this problem" ++msgstr "Eu não sei o que causou o problema" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:10 + msgid "If you don't know how to describe it, you can" + msgstr "Se você não sabe como descrevê-lo, você pode" +@@ -962,11 +1001,6 @@ msgstr "Adicionar um screencast" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:12 +-msgid "I don't know what caused this problem" +-msgstr "Eu não sei o que causou o problema" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Use this button to generate more informative backtrace after you installed " + "additional debug packages" +@@ -975,7 +1009,7 @@ msgstr "" + "instalados os pacotes adicionais de debug" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:14 ++#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Please review the data before it gets reported. Depending on reporter " + "chosen, it may end up publicly visible." +@@ -983,48 +1017,48 @@ msgstr "" + "Por favor analise os dados antes deles serem reportados. Dependendo do " + "destino escolhido, eles podem acabar visíveis publicamente." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:15 ++#: ../src/gui-wizard-gtk/wizard.glade.h:14 + msgid "Forbidden words" + msgstr "Palavras proibidas" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:16 ++#: ../src/gui-wizard-gtk/wizard.glade.h:15 + msgid "Custom" + msgstr "Personalizado" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:17 ++#: ../src/gui-wizard-gtk/wizard.glade.h:16 + msgid "Clear the search bar to see the list of security sensitive words." + msgstr "" + "Limpar a barra de busca para ver a lista de palavras sensíveis de segurança." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:18 ++#: ../src/gui-wizard-gtk/wizard.glade.h:17 + msgid "file" + msgstr "arquivo" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:19 ++#: ../src/gui-wizard-gtk/wizard.glade.h:18 + msgid "data" + msgstr "dados" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:20 ++#: ../src/gui-wizard-gtk/wizard.glade.h:19 + msgid "Search" + msgstr "Busca" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:21 ++#: ../src/gui-wizard-gtk/wizard.glade.h:20 + msgid "Size:" + msgstr "Tamanho:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:22 ++#: ../src/gui-wizard-gtk/wizard.glade.h:21 + msgid "Attach a file" + msgstr "Anexar um arquivo" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:23 ++#: ../src/gui-wizard-gtk/wizard.glade.h:22 + msgid "I reviewed the data and _agree with submitting it" + msgstr "Eu revisei os dados e _concordo em submetê-lo" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:24 ++#: ../src/gui-wizard-gtk/wizard.glade.h:23 + msgid "" + "If you are reporting to a remote server, make sure you removed all private " + "data (such as usernames and passwords). Backtrace, command line, environment " +@@ -1036,22 +1070,22 @@ msgstr "" + "precisam ser examinados." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:25 ++#: ../src/gui-wizard-gtk/wizard.glade.h:24 + msgid "Processing did not start yet" + msgstr "O processamento ainda não foi iniciado" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:26 ++#: ../src/gui-wizard-gtk/wizard.glade.h:25 + msgid "Show log" + msgstr "Exibir log" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:27 ++#: ../src/gui-wizard-gtk/wizard.glade.h:26 + msgid "Reporting has finished. You can close this window now." + msgstr "O relatório foi finalizado. Você pode fechar esta janela agora." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:28 ++#: ../src/gui-wizard-gtk/wizard.glade.h:27 + msgid "" + "If you want to report the problem to a different destination, collect " + "additional information, or provide a better problem description and repeat " +@@ -1062,17 +1096,17 @@ msgstr "" + "de relatório, pressione 'Encaminhar'." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1007 ++#: ../src/include/internal_libreport.h:1046 + msgid "Be verbose" + msgstr "Detalhado" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1008 +-#: ../src/plugins/reporter-bugzilla.c:895 ++#: ../src/include/internal_libreport.h:1047 ++#: ../src/plugins/reporter-bugzilla.c:893 + #: ../src/plugins/reporter-kerneloops.c:166 +-#: ../src/plugins/reporter-mailx.c:198 ../src/plugins/reporter-print.c:56 +-#: ../src/plugins/reporter-rhtsupport.c:471 +-#: ../src/plugins/reporter-upload.c:249 ++#: ../src/plugins/reporter-mailx.c:280 ../src/plugins/reporter-print.c:56 ++#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-upload.c:188 + msgid "Problem directory" + msgstr "Diretório do problema" + +@@ -1130,7 +1164,7 @@ msgid "'%s' is not correct file name" + msgstr "'%s' não é o nome de arquivo correto" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/create_dump_dir.c:153 ++#: ../src/lib/create_dump_dir.c:150 + #, c-format + msgid "uid value is not valid: '%s'" + msgstr "O valor uid não é válido: '%s'" +@@ -1141,69 +1175,99 @@ msgstr "O valor uid não é válido: '%s'" + msgid "Uploaded: %llu of %llu kbytes" + msgstr "Enviado: %llu de %llu kbytes" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/curl.c:635 ++#: ../src/lib/curl.c:636 ++msgid "Ignoring URL without scheme and hostname" ++msgstr "Ignorando URL sem esquema e nome de host" ++ ++#. Do not include the path part of the URL as it can contain sensitive data ++#. * in case of typos ++#: ../src/lib/curl.c:666 + #, c-format +-msgid "Sending %s to %s" +-msgstr "Enviando %s ao %s" ++msgid "Sending %s to %s//%s" ++msgstr "Enviando %s para %s//%s" + +-#: ../src/lib/curl.c:659 ++#: ../src/lib/curl.c:690 + #, c-format +-msgid "Please enter user name for '%s':" +-msgstr "Por favor insira o nome para '%s'" ++msgid "Please enter user name for '%s//%s':" ++msgstr "Por favor insira o nome de usuário para '%s//%s':" + +-#: ../src/lib/curl.c:665 ++#: ../src/lib/curl.c:696 + #, c-format +-msgid "Please enter password for '%s':" +-msgstr "Por favor entre com a senha para '%s':" ++msgid "Please enter password for '%s//%s@%s':" ++msgstr "Por favor insira a senha para '%s//%s@%s':" + +-# translation auto-copied from project libreport, version master, document libreport + #. This ends up a "reporting status message" in abrtd +-#: ../src/lib/curl.c:688 ++#: ../src/lib/curl.c:719 + #, c-format +-msgid "Successfully sent %s to %s" +-msgstr "Enviado com sucesso %s ao %s" ++msgid "Successfully created %s" ++msgstr "%s criado com êxito " ++ ++#: ../src/lib/dump_dir.c:1545 ++msgid "Failed to open TAR writer" ++msgstr "Falha ao abrir o escritor TAR " ++ ++#: ../src/lib/dump_dir.c:1571 ++msgid "Failed to finalize TAR archive" ++msgstr "Falha ao finalizar o arquivo TAR" ++ ++#: ../src/lib/dump_dir.c:1581 ++msgid "Failed to close TAR writer" ++msgstr "Falha ao fechar o escritor TAR" ++ ++#: ../src/lib/dump_dir.c:1591 ++#, c-format ++msgid "gzip killed with signal %d" ++msgstr "gzip interrompido com signal %d" ++ ++#: ../src/lib/dump_dir.c:1597 ++#, c-format ++msgid "gzip exited with %d" ++msgstr "gzip encerrado com %d" ++ ++#: ../src/lib/dump_dir.c:1600 ++msgid "gzip process failed" ++msgstr "falha no processo gzip" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:348 ++#: ../src/lib/event_config.c:382 + msgid "Missing mandatory value" + msgstr "Faltando valor obrigatório" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:356 ++#: ../src/lib/event_config.c:390 + #, c-format + msgid "Invalid utf8 character '%c'" + msgstr "Caractere utf8 '%c' inválido" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:369 ++#: ../src/lib/event_config.c:403 + #, c-format + msgid "Invalid number '%s'" + msgstr "Número inválido '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:384 ++#: ../src/lib/event_config.c:418 + #, c-format + msgid "Invalid boolean value '%s'" + msgstr "Valor boleano inválido '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:390 ++#: ../src/lib/event_config.c:424 + msgid "Unsupported option type" + msgstr "Tipo de opção não suportada" + +-#: ../src/lib/event_config.c:463 ++#: ../src/lib/event_config.c:497 + msgid "Reporting disabled because the rating does not contain a number." + msgstr "Relatório desabilitado, porque a classificação não contém um número." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:464 ++#: ../src/lib/event_config.c:498 + msgid "Please report this problem to ABRT project developers." + msgstr "" + "Por favor relate esse problema para os desenvolvedores do projeto ABRT." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:470 ++#: ../src/lib/event_config.c:504 + msgid "" + "The backtrace is incomplete, please make sure you provide the steps to " + "reproduce." +@@ -1212,19 +1276,19 @@ msgstr "" + "passos para a reprodução. " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:471 ++#: ../src/lib/event_config.c:505 + msgid "The backtrace probably can't help developer to diagnose the bug." + msgstr "" + "O backtrace provavelmente não pode ajudar o desenvolvedor a diagnosticar o " + "bug." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:477 ++#: ../src/lib/event_config.c:511 + msgid "Reporting disabled because the backtrace is unusable." + msgstr "Relatório desabilitado, porque o backtrace está inutilizado." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:481 ++#: ../src/lib/event_config.c:515 + #, c-format + msgid "" + "Please try to install debuginfo manually using the command: \"debuginfo-" +@@ -1234,14 +1298,29 @@ msgstr "" + "\"debuginfo-install %s\" e tente novamente." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:483 ++#: ../src/lib/event_config.c:517 + msgid "A proper debuginfo is probably missing or the coredump is corrupted." + msgstr "" + "O debuginfo adequado provavelmente está faltando ou o arquivo do travamento " + "está corrompido." + ++#: ../src/lib/iso_date_string.c:48 ++#, c-format ++msgid "String doesn't seem to be a date: '%s'" ++msgstr "Cadeia de caracteres não parecer ser uma data: '%s'" ++ ++#: ../src/lib/iso_date_string.c:53 ++#, c-format ++msgid "The date: '%s' has unrecognized suffix: '%s'" ++msgstr "A data: '%s' tem sufixo não reconhecido: '%s'" ++ ++#: ../src/lib/iso_date_string.c:58 ++#, c-format ++msgid "The date: '%s' is out of UNIX time stamp range" ++msgstr "A data: '%s' está fora do intervalo do carimbo de data/hora UNIX " ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:354 ++#: ../src/lib/ureport.c:395 + #, c-format + msgid "Your problem seems to be caused by %s\n" + "\n" +@@ -1251,30 +1330,40 @@ msgstr "Seu problema parece ser causado por %s\n" + "%s\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:357 ++#: ../src/lib/ureport.c:398 + msgid "Your problem seems to be caused by one of the following:\n" + msgstr "Seu problema parece ser causado por um dos seguintes:\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:528 ++#: ../src/lib/ureport.c:570 + #, c-format + msgid "Failed to upload uReport to the server '%s' with curl: %s" + msgstr "Falha ao enviar uReport para o servidor '%s' com curl: %s" + ++#: ../src/lib/ureport.c:574 ++#, c-format ++msgid "Failed to upload uReport to the server '%s'" ++msgstr "Falha ao carregar uReport no servidor '%s'" ++ ++#: ../src/lib/ureport.c:577 ++#, c-format ++msgid "Error: %s" ++msgstr "Erro: %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:534 ++#: ../src/lib/ureport.c:584 + #, c-format + msgid "The URL '%s' does not exist (got error 404 from server)" + msgstr "A URL '%s' não existe (recebido erro 404 do servidor)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:540 ++#: ../src/lib/ureport.c:590 + #, c-format + msgid "The server at '%s' encountered an internal error (got error 500)" + msgstr "O servidor em '%s' encontrou um erro interno (recebido erro 500)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:546 ++#: ../src/lib/ureport.c:596 + #, c-format + msgid "The server at '%s' currently can't handle the request (got error 503)" + msgstr "" +@@ -1283,19 +1372,19 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #. can't print better error message +-#: ../src/lib/ureport.c:555 ++#: ../src/lib/ureport.c:605 + #, c-format + msgid "Unexpected HTTP response from '%s': %d" + msgstr "Resposta HTTP inesperada de '%s': %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:564 ++#: ../src/lib/ureport.c:614 + #, c-format + msgid "Unable to parse response from ureport server at '%s'" + msgstr "Incapaz de analisar a resposta do servidor ureport em '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:574 ++#: ../src/lib/ureport.c:624 + #, c-format + msgid "The response from '%s' has invalid format" + msgstr "A resposta de '%s' tem um formato inválido" +@@ -1303,18 +1392,18 @@ msgstr "A resposta de '%s' tem um formato inválido" + # translation auto-copied from project libreport, version master, document libreport + #. HTTP CODE 202 means that call was successful but the response + #. has an error message +-#: ../src/lib/ureport.c:580 ++#: ../src/lib/ureport.c:630 + #, c-format + msgid "Type mismatch has been detected in the response from '%s'" + msgstr "Incompatibilidade de tipo foi detectada na reposta de '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:766 ../src/plugins/reporter-rhtsupport.c:198 ++#: ../src/lib/ureport.c:820 ../src/plugins/reporter-rhtsupport.c:233 + msgid "Failed on submitting the problem" + msgstr "Falha ao enviar o problema" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:808 ++#: ../src/lib/ureport.c:862 + #, c-format + msgid "The server at '%s' responded with an error: '%s'" + msgstr "O servidor em '%s' respondeu com um erro: '%s'" +@@ -1340,6 +1429,32 @@ msgid "Essential element '%s' is missing, can't continue" + msgstr "Elementos essenciais '%s' estão faltando, não é possível continuar" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:478 ../src/plugins/reporter-bugzilla.c:355 ++#, c-format ++msgid "Can't parse backtrace: %s" ++msgstr "Não foi possível analisar o backtrace: %s" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:489 ../src/plugins/reporter-bugzilla.c:366 ++msgid "Can't generate stacktrace description (no crash thread?)" ++msgstr "Não é possível gerar pilha descrição trace (sem segmento colidir?)" ++ ++#: ../src/lib/reported_to.c:52 ++msgid "Report result label mustn't be empty string." ++msgstr "" ++"Rótulo do resultado de relatório não pode ser uma cadeia de caracteres vazia." ++" " ++ ++#: ../src/lib/reported_to.c:58 ++msgid "Report result label mustn't contain ':' character." ++msgstr "Rótulo do resultado de relatório não pode conter o carácter ':' " ++ ++#: ../src/lib/reported_to.c:141 ++#, c-format ++msgid "Ignored invalid ISO date of report result '%s'" ++msgstr "Data ISO inválida ignorada do resultado do relatório '%s'" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/run_event.c:791 + #, c-format + msgid "('%s' was killed by signal %u)\n" +@@ -1421,13 +1536,14 @@ msgstr "Relatar no acompanhador de bugs Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:3 +-msgid "Bugzilla URL" +-msgstr "URL do Bugzilla" ++#: ../src/plugins/report_Uploader.xml.in.h:6 ++msgid "User name" ++msgstr "Nome de Usuário" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:4 +-msgid "Address of Bugzilla server" +-msgstr "Endereço do servidor Bugzilla" ++msgid "Bugzilla account user name" ++msgstr "Nome de usuário da conta do Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:5 +@@ -1440,48 +1556,23 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:6 +-#: ../src/plugins/report_Uploader.xml.in.h:6 +-msgid "User name" +-msgstr "Nome de Usuário" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:7 +-msgid "Bugzilla account user name" +-msgstr "Nome de usuário da conta do Bugzilla" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:5 + #: ../src/plugins/report_Uploader.xml.in.h:8 + msgid "Password" + msgstr "Senha" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:9 ++#: ../src/plugins/report_Bugzilla.xml.in.h:7 + msgid "Bugzilla account password" + msgstr "Senha da conta do Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:10 +-#: ../src/plugins/report_RHTSupport.xml.in.h:7 +-#: ../src/plugins/report_uReport.xml.in.h:7 +-msgid "Verify SSL" +-msgstr "Verificar o SSL" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:11 +-#: ../src/plugins/report_RHTSupport.xml.in.h:8 +-#: ../src/plugins/report_uReport.xml.in.h:8 +-msgid "Check SSL key validity" +-msgstr "Verifique a validade da chave SSL" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++#: ../src/plugins/report_Bugzilla.xml.in.h:8 + msgid "Restrict access" + msgstr "Acesso restrito" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++#: ../src/plugins/report_Bugzilla.xml.in.h:9 + msgid "" + "Restrict access to the created bugzilla ticket allowing only users from " + "specified groups to view it (see advanced settings for more details)" +@@ -1491,12 +1582,50 @@ msgstr "" + "mais detalhes)" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:10 ++msgid "Groups" ++msgstr "Grupos" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:11 ++msgid "" ++"Restrict the access to specified groups <a href=\"https://github.com/abrt/" ++"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++msgstr "" ++"Restringir o acesso a grupos específicos <a href=\"https://github.com/" ++"abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:12 ++msgid "Bugzilla URL" ++msgstr "URL do Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:13 ++msgid "Address of Bugzilla server" ++msgstr "Endereço do servidor Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:14 ++#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_uReport.xml.in.h:7 ++msgid "Verify SSL" ++msgstr "Verificar o SSL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_uReport.xml.in.h:8 ++msgid "Check SSL key validity" ++msgstr "Verifique a validade da chave SSL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:16 + msgid "Bugzilla product" + msgstr "Produto Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_Bugzilla.xml.in.h:17 + msgid "" + "Specify this only if you needed different product than specified in /etc/os-" + "release" +@@ -1505,12 +1634,12 @@ msgstr "" + "especificado em /etc/os-release" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:16 ++#: ../src/plugins/report_Bugzilla.xml.in.h:18 + msgid "Bugzilla product version" + msgstr "Versão do produto Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:17 ++#: ../src/plugins/report_Bugzilla.xml.in.h:19 + msgid "" + "Specify this only if you needed different product version than specified in /" + "etc/os-release" +@@ -1519,7 +1648,7 @@ msgstr "" + "especificado em /etc/os-release" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:18 ++#: ../src/plugins/report_Bugzilla.xml.in.h:20 + #: ../src/plugins/report_Kerneloops.xml.in.h:5 + #: ../src/plugins/report_RHTSupport.xml.in.h:13 + #: ../src/plugins/report_Uploader.xml.in.h:10 +@@ -1529,7 +1658,7 @@ msgid "HTTP Proxy" + msgstr "Proxy HTTP" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:19 ++#: ../src/plugins/report_Bugzilla.xml.in.h:21 + #: ../src/plugins/report_Kerneloops.xml.in.h:6 + #: ../src/plugins/report_RHTSupport.xml.in.h:14 + #: ../src/plugins/report_Uploader.xml.in.h:11 +@@ -1539,7 +1668,7 @@ msgid "Sets the proxy server to use for HTTP" + msgstr "Configura o servidor proxy para usar HTTP" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:20 ++#: ../src/plugins/report_Bugzilla.xml.in.h:22 + #: ../src/plugins/report_Kerneloops.xml.in.h:7 + #: ../src/plugins/report_RHTSupport.xml.in.h:15 + #: ../src/plugins/report_Uploader.xml.in.h:12 +@@ -1549,7 +1678,7 @@ msgid "HTTPS Proxy" + msgstr "Proxy HTTPS" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:21 ++#: ../src/plugins/report_Bugzilla.xml.in.h:23 + #: ../src/plugins/report_Kerneloops.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:16 + #: ../src/plugins/report_Uploader.xml.in.h:13 +@@ -1559,20 +1688,6 @@ msgid "Sets the proxy server to use for HTTPS" + msgstr "Configura o servidor proxy para usar HTTPS" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:22 +-msgid "Groups" +-msgstr "Grupos" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:23 +-msgid "" +-"Restrict the access to specified groups <a href=\"https://github.com/abrt/" +-"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +-msgstr "" +-"Restringir o acesso a grupos específicos <a href=\"https://github.com/" +-"abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +- +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report.c:37 + msgid "" + "& [-v] --target TARGET --ticket ID FILE...\n" +@@ -1607,18 +1722,7 @@ msgid "Ticket/case ID" + msgstr "ID do Tíquete/caso" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:355 +-#, c-format +-msgid "Can't parse backtrace: %s" +-msgstr "Não foi possível analisar o backtrace: %s" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:366 +-msgid "Can't generate stacktrace description (no crash thread?)" +-msgstr "Não é possível gerar pilha descrição trace (sem segmento colidir?)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:764 ++#: ../src/plugins/reporter-bugzilla.c:762 + msgid "" + "Warning, private ticket groups already specified as cmdline argument, " + "ignoring the env variable and configuration" +@@ -1627,37 +1731,37 @@ msgstr "" + "cmdline, ignorando a variável e configuração env" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:775 +-#: ../src/plugins/reporter-rhtsupport.c:342 ++#: ../src/plugins/reporter-bugzilla.c:773 ++#: ../src/plugins/reporter-rhtsupport.c:377 + msgid "Can't continue without login" + msgstr "Não é possível continuar sem realizar login" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:788 +-#: ../src/plugins/reporter-rhtsupport.c:355 ++#: ../src/plugins/reporter-bugzilla.c:786 ++#: ../src/plugins/reporter-rhtsupport.c:390 + msgid "Can't continue without password" + msgstr "Não é possível continuar sem senha" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:797 ++#: ../src/plugins/reporter-bugzilla.c:795 + #, c-format + msgid "Logging into Bugzilla at %s" + msgstr "Autenticando-se no Bugzilla no %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:801 ++#: ../src/plugins/reporter-bugzilla.c:799 + msgid "Invalid password or login. Please enter your BZ login:" + msgstr "Usuário ou senha inválidos. Por favor digite seu login BZ:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:804 +-#: ../src/plugins/reporter-rhtsupport.c:369 ++#: ../src/plugins/reporter-bugzilla.c:802 ++#: ../src/plugins/reporter-rhtsupport.c:404 + #, c-format + msgid "Invalid password or login. Please enter the password for '%s':" + msgstr "Usuário ou senha inválidos. Por favor digite a sua senha para '%s':" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:823 ++#: ../src/plugins/reporter-bugzilla.c:821 + msgid "" + "\n" + "& [-vbf] [-g GROUP-NAME]... [-c CONFFILE]... [-F FMTFILE] [-A FMTFILE2] -d " +@@ -1741,76 +1845,77 @@ msgstr "" + "Caso não seja especificado, padrão CONFFILE" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:896 +-#: ../src/plugins/reporter-rhtsupport.c:472 ++#: ../src/plugins/reporter-bugzilla.c:894 ++#: ../src/plugins/reporter-rhtsupport.c:511 + msgid "Configuration file (may be given many times)" + msgstr "Arquivo de configuração (pode ser mencionado várias vezes)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:897 ++#: ../src/plugins/reporter-bugzilla.c:895 + msgid "Formatting file for initial comment" + msgstr "Formatando arquivo para comentário inicial" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:898 ++#: ../src/plugins/reporter-bugzilla.c:896 + msgid "Formatting file for duplicates" + msgstr "Formatando arquivos para duplicatas" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-bugzilla.c:897 + msgid "Attach FILEs [to bug with this ID]" + msgstr "Anexar FILEs [ao bug com esta ID]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:900 ++#: ../src/plugins/reporter-bugzilla.c:898 + msgid "When creating bug, attach binary files too" + msgstr "Ao criar o bug, anexe também os arquivos binários." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:901 +-#: ../src/plugins/reporter-rhtsupport.c:474 ++#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-rhtsupport.c:513 + msgid "Force reporting even if this problem is already reported" + msgstr "Forçar reportar até mesmo se este problema já for reportado." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:902 ++#: ../src/plugins/reporter-bugzilla.c:900 + msgid "Add bugzilla user to CC list [of bug with this ID]" + msgstr "Adicionar usuário do bugzilla para a lista CC [do bug com esse ID]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:903 ++#: ../src/plugins/reporter-bugzilla.c:901 + msgid "Print BUG_ID which has given DUPHASH" + msgstr "Gravar BUG_ID que deu DUPHASH" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:904 ++#: ../src/plugins/reporter-bugzilla.c:902 + msgid "A name of bug tracker for an additional URL from 'reported_to'" + msgstr "Um nome de bug rastreado para uma URL adicional de 'reported_to'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:905 ++#: ../src/plugins/reporter-bugzilla.c:903 + msgid "Restrict access to this group only" + msgstr "Acesso restrito a este grupo apenas" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:906 ++#: ../src/plugins/reporter-bugzilla.c:904 ../src/plugins/reporter-mailx.c:284 ++#: ../src/plugins/reporter-rhtsupport.c:517 + msgid "Debug" + msgstr "Depurar" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:948 ++#: ../src/plugins/reporter-bugzilla.c:949 + msgid "Looking for similar problems in bugzilla" + msgstr "Procurando por problemas similares no bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:975 ++#: ../src/plugins/reporter-bugzilla.c:976 + msgid "Login is not provided by configuration. Please enter your BZ login:" + msgstr "" + "O login não é fornecido pela configuração. Por favor digite seu login do BZ:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:981 +-#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-bugzilla.c:982 ++#: ../src/plugins/reporter-rhtsupport.c:551 + #, c-format + msgid "" + "Password is not provided by configuration. Please enter the password for " +@@ -1820,7 +1925,7 @@ msgstr "" + "para '%s':" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1000 ++#: ../src/plugins/reporter-bugzilla.c:1001 + msgid "" + "Can't get Bugzilla ID because this problem has not yet been reported to " + "Bugzilla." +@@ -1829,7 +1934,7 @@ msgstr "" + "relado ao Bugzilla." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1007 ++#: ../src/plugins/reporter-bugzilla.c:1008 + #, c-format + msgid "" + "This problem has been reported to Bugzilla '%s' which differs from the " +@@ -1839,87 +1944,110 @@ msgstr "" + "'%s' configurado." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1011 ++#: ../src/plugins/reporter-bugzilla.c:1012 + #, c-format + msgid "Malformed url to Bugzilla '%s'." + msgstr "Url disforme para o Bugzilla '%s'." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1015 ++#: ../src/plugins/reporter-bugzilla.c:1016 + #, c-format + msgid "Using Bugzilla ID '%s'" + msgstr "Utilizando o ID do Bugzilla '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1049 +-#: ../src/plugins/reporter-bugzilla.c:1341 ++#: ../src/plugins/reporter-bugzilla.c:1050 ++#: ../src/plugins/reporter-bugzilla.c:1220 ++#: ../src/plugins/reporter-bugzilla.c:1379 + msgid "Logging out" + msgstr "Saindo" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1100 ++#: ../src/plugins/reporter-bugzilla.c:1101 + msgid "Can't determine Bugzilla Product from problem data." + msgstr "Não foi possível determinar o Produto Bugzilla dos dados do problema." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1151 ++#: ../src/plugins/reporter-bugzilla.c:1152 + msgid "Checking for duplicates" + msgstr "Verificando por duplicados" + ++#: ../src/plugins/reporter-bugzilla.c:1201 ++#, c-format ++msgid "" ++"You have requested to make your data accessible only to a specific group and " ++"this bug is a duplicate of bug: %s/%u In case of bug duplicates a new " ++"comment is added to the original bug report but access to the comments " ++"cannot be restricted to a specific group. Would you like to open a new bug " ++"report and close it as DUPLICATE of the original one? Otherwise, the bug " ++"reporting procedure will be terminated." ++msgstr "" ++"Você solicitou que seus dados sejam acessíveis somente a um grupo específico " ++"e este bug é uma duplicata do bug: %s/%u No caso de duplicatas de bug, um " ++"novo comentário é adicionado ao relatório de erro original porém o acesso " ++"aos comentários não podem ser restritos a um grupo específico. Você gostaria " ++"de abrir um novo relatório de erro e fecha-lo como DUPLICATA do original? " ++"Caso contrário, o procedimento de relatório de erros será finalizado. " ++ + # translation auto-copied from project libreport, version master, document libreport + #. Create new bug +-#: ../src/plugins/reporter-bugzilla.c:1197 ++#: ../src/plugins/reporter-bugzilla.c:1228 + msgid "Creating a new bug" + msgstr "Criando um novo bug" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1218 ++#: ../src/plugins/reporter-bugzilla.c:1249 + msgid "Failed to create a new bug." + msgstr "Falha ao criar novo bug." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1229 ++#: ../src/plugins/reporter-bugzilla.c:1260 + #, c-format + msgid "Adding External URL to bug %i" + msgstr "Adicionando URL Externa para bug %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1235 ++#: ../src/plugins/reporter-bugzilla.c:1266 + #, c-format + msgid "Adding attachments to bug %i" + msgstr "Adicionar anexos no bug %i" + ++#: ../src/plugins/reporter-bugzilla.c:1280 ++#, c-format ++msgid "Closing bug %i as duplicate of bug %i" ++msgstr "Fechando bug %i como duplicata do bug %i" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1254 ++#: ../src/plugins/reporter-bugzilla.c:1292 + #, c-format + msgid "Bug is already reported: %i" + msgstr "O bug já foi relatado: %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1297 ++#: ../src/plugins/reporter-bugzilla.c:1335 + #, c-format + msgid "Adding %s to CC list" + msgstr "Adicionando %s para a lista CC" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1314 ++#: ../src/plugins/reporter-bugzilla.c:1352 + #, c-format + msgid "Adding new comment to bug %d" + msgstr "Adicionar novo comentário ao bug %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1328 ++#: ../src/plugins/reporter-bugzilla.c:1366 + msgid "Attaching better backtrace" + msgstr "Anexar um backtrace melhor" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1336 ++#: ../src/plugins/reporter-bugzilla.c:1374 + msgid "Found the same comment in the bug history, not adding a new one" + msgstr "" + "Encontrar o mesmo comentário no histórico do erro, sem adicionar um novo" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1344 ++#: ../src/plugins/reporter-bugzilla.c:1382 + #, c-format + msgid "Status: %s%s%s %s/show_bug.cgi?id=%u" + msgstr "Status: %s%s%s %s/show_bug.cgi?id=%u" +@@ -1957,12 +2085,12 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/reporter-kerneloops.c:167 +-#: ../src/plugins/reporter-ureport.c:74 ++#: ../src/plugins/reporter-ureport.c:79 + msgid "Configuration file" + msgstr "Arquivo de configuração" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:59 ++#: ../src/plugins/reporter-mailx.c:83 + #, c-format + msgid "" + "Email address of %s was not specified. Would you like to do so now? If not, " +@@ -1972,50 +2100,58 @@ msgstr "" + "não, '%s' está a ser usado" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:66 ++#: ../src/plugins/reporter-mailx.c:90 + #, c-format + msgid "Please, type email address of %s:" + msgstr "Por favor, digite o endereço de e-mail %s:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:73 ++#: ../src/plugins/reporter-mailx.c:97 + #, c-format + msgid "Can't continue without email address of %s" + msgstr "Não é possível continuar sem endereço de e-mail %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:135 ++#: ../src/plugins/reporter-mailx.c:206 ../src/plugins/reporter-mailx.c:211 + msgid "Sending an email..." + msgstr "Enviando um e-mail..." + ++#: ../src/plugins/reporter-mailx.c:209 ++#, c-format ++msgid "Sending a notification email to: %s" ++msgstr "Enviando um e-mail de notificação para: %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:158 ++#: ../src/plugins/reporter-mailx.c:237 + #, c-format + msgid "Email was sent to: %s" + msgstr "O email foi enviado para: %s" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:178 ++#: ../src/plugins/reporter-mailx.c:258 + msgid "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Sends contents of a problem directory DIR via email\n" + "\n" + "If not specified, CONFFILE defaults to " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Envia conteúdo de um DIR de diretório de problema via email\n" + "\n" + "Se não for especificado, o CONFFILE padroniza para" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:199 ../src/plugins/reporter-upload.c:250 ++#: ../src/plugins/reporter-mailx.c:281 ../src/plugins/reporter-upload.c:189 + msgid "Config file" + msgstr "Arquivo config" + ++#: ../src/plugins/reporter-mailx.c:282 ++msgid "Formatting file for an email" ++msgstr "Formatando arquivo para um email" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:200 ++#: ../src/plugins/reporter-mailx.c:283 + msgid "Notify only (Do not mark the report as sent)" + msgstr "Notifique apenas (Não marque o relatório como enviado)" + +@@ -2058,37 +2194,37 @@ msgstr "" + "Não é possível abrir '%s' para gravar. Por favor selecione outro arquivo:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was appended to %s" + msgstr "O relatório foi anexado a %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was stored to %s" + msgstr "O relatório foi armazenado ao %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:259 +-#: ../src/plugins/reporter-ureport.c:237 ++#: ../src/plugins/reporter-rhtsupport.c:294 ++#: ../src/plugins/reporter-ureport.c:297 + #, c-format + msgid "Server responded with an error: '%s'" + msgstr "O servidor respondeu com um erro: '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:319 ++#: ../src/plugins/reporter-rhtsupport.c:354 + msgid "Do you still want to create a RHTSupport ticket?" + msgstr "Você ainda quer criar um tiquete RHTSupport" + +-#: ../src/plugins/reporter-rhtsupport.c:367 ++#: ../src/plugins/reporter-rhtsupport.c:402 + msgid "Invalid password or login. Please enter your Red Hat login:" + msgstr "Usuário ou senha inválidos. Por favor digite seu login Red Hat:" + +-#: ../src/plugins/reporter-rhtsupport.c:435 ++#: ../src/plugins/reporter-rhtsupport.c:471 + msgid "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -2097,87 +2233,120 @@ msgid "" + "If not specified, CONFFILE defaults to " + msgstr "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" +-"or:\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" ++"ou:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" + "Relata um problema para RHTSupport.\n" + "\n" +-"Caso não seja especificado, CONFFILE se torna padrão em" ++"Caso não seja especificado, CONFFILE padroniza para" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:473 ++#: ../src/plugins/reporter-rhtsupport.c:512 + msgid "Upload FILEs [to case with this ID]" + msgstr "Faz Upload FILEs [à pasta com esta ID]" + +-#: ../src/plugins/reporter-rhtsupport.c:475 ++#: ../src/plugins/reporter-rhtsupport.c:514 + msgid "Submit uReport before creating a new case" + msgstr "Submeta o uReport antes de criar um novo caso" + +-#: ../src/plugins/reporter-rhtsupport.c:476 ++#: ../src/plugins/reporter-rhtsupport.c:515 + msgid "Configuration file for uReport" + msgstr "Arquivo de Configuração para uReport" + ++#: ../src/plugins/reporter-rhtsupport.c:516 ++msgid "Formatting file for a new case" ++msgstr "Formatando arquivo para um novo caso" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:504 ++#: ../src/plugins/reporter-rhtsupport.c:545 + msgid "Login is not provided by configuration. Please enter your RHTS login:" + msgstr "" + "O login não é fornecido pela configuração. Por favor digite seu login do " + "BHTS:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:573 ++#: ../src/plugins/reporter-rhtsupport.c:614 + #, c-format + msgid "Attaching '%s' to case '%s'" + msgstr "Anexar '%s' à pasta '%s'" + +-#: ../src/plugins/reporter-rhtsupport.c:610 ++#: ../src/plugins/reporter-rhtsupport.c:651 + msgid "Sending ABRT crash statistics data" + msgstr "Enviando dados de estatística de travamento do ABRT" + ++#: ../src/plugins/reporter-rhtsupport.c:674 ++msgid "" ++"The problem has only occurred once and the ability to reproduce the problem " ++"is unknown. Please ensure you will be able to provide detailed information " ++"to our Support Team. Would you like to continue and open a new support case?" ++msgstr "" ++"O problema só ocorreu uma vez e a habilidade para reproduzir o problema é " ++"desconhecida. Por favor tenha certeza que você será capaz de fornecer " ++"informações detalhadas à nossa Equipe de Suporte. Você gostaria de continuar " ++"e abrir um novo caso de suporte?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:690 ++#, c-format ++msgid "" ++"The crashed program was released by '%s'. Would you like to report the " ++"problem to Red Hat Support?" ++msgstr "" ++"O programa quebrado foi lançado por '%s'. Você gostaria de relatar o " ++"problema ao Suporte Red Hat?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:708 ++#, c-format ++msgid "" ++"The program '%s' does not appear to be provided by Red Hat. Would you like " ++"to report the problem to Red Hat Support?" ++msgstr "" ++"O programa '%s' não aparenta ser fornecido pela Red Hat. Gostaria de relatar " ++"o problema ao Suporte Red Hat?" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/reporter-rhtsupport.c:725 ++msgid "Can't create a temporary directory in " ++msgstr "Não é possível criar um diretório temporário no" ++ + # translation auto-copied from project libreport, version master, document libreport + #. Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing + #. error msg is already logged by dd_opendir +-#. Gzipping e.g. 0.5gig coredump takes a while. Let client know what we are doing +-#: ../src/plugins/reporter-rhtsupport.c:621 +-#: ../src/plugins/reporter-upload.c:52 ++#. Compressing e.g. 0.5gig coredump takes a while. Let client know what we are doing ++#: ../src/plugins/reporter-rhtsupport.c:793 ++#: ../src/plugins/reporter-upload.c:103 + msgid "Compressing data" + msgstr "Compactando dados" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:656 +-msgid "Can't create a temporary directory in " +-msgstr "Não é possível criar um diretório temporário no" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:665 ++#: ../src/plugins/reporter-rhtsupport.c:801 + msgid "Can't create temporary file in " + msgstr "Não é possível criar arquivo temporário no" + + # translation auto-copied from project libreport, version master, document libreport + #. Check for hints and show them if we have something +-#: ../src/plugins/reporter-rhtsupport.c:676 ++#: ../src/plugins/reporter-rhtsupport.c:812 + msgid "Checking for hints" + msgstr "Verificando dicas" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:686 ++#: ../src/plugins/reporter-rhtsupport.c:822 + msgid "Creating a new case" + msgstr "Criando um novo caso" + + # translation auto-copied from project libreport, version master, document libreport + #. How can we help user sorting out this problem? +-#: ../src/plugins/reporter-rhtsupport.c:697 ++#: ../src/plugins/reporter-rhtsupport.c:833 + msgid "Can't determine RH Support Product from problem data." + msgstr "" + "Não foi possível determinar o Produto de Suporte RH dos dados do problema." + +-#: ../src/plugins/reporter-rhtsupport.c:753 ++#: ../src/plugins/reporter-rhtsupport.c:889 + msgid "Linking ABRT crash statistics record with the case" + msgstr "" + "Vinculando histórico dos dados de estatística de travamento do ABRT ao caso" + +-#: ../src/plugins/reporter-rhtsupport.c:766 ++#: ../src/plugins/reporter-rhtsupport.c:902 + #, c-format + msgid "Linking ABRT crash statistics record with contact email: '%s'" + msgstr "" +@@ -2185,14 +2354,14 @@ msgstr "" + "contato: '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:790 ++#: ../src/plugins/reporter-rhtsupport.c:926 + #, c-format + msgid "Adding comment to case '%s'" + msgstr "Adicionando comentário ao caso '%s'" + + # translation auto-copied from project libreport, version master, document libreport + #. Attach the tarball of -d DIR +-#: ../src/plugins/reporter-rhtsupport.c:808 ++#: ../src/plugins/reporter-rhtsupport.c:944 + #, c-format + msgid "Attaching problem data to case '%s'" + msgstr "Anexando dados do problema para o caso '%s'" +@@ -2208,48 +2377,57 @@ msgid "Updates which possibly help: " + msgstr "Atualizações que podem ajudar:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:30 ++#: ../src/plugins/reporter-upload.c:29 + msgid "Can't continue without URL" + msgstr "Não é possível continuar sem URL" + +-#: ../src/plugins/reporter-upload.c:61 +-msgid "Upload URL is not provided by configuration. Please enter upload URL:" +-msgstr "" +-"A URL de carregamento não foi fornecida pela configuração. Por favor " +-"carregue a URL:" +- + #. Be permissive and nice, ask only once and don't check + #. the result. User can dismiss this prompt but the upload + #. may work somehow??? +-#: ../src/plugins/reporter-upload.c:164 ++#: ../src/plugins/reporter-upload.c:51 + msgid "Please enter password for uploading:" + msgstr "Por favor insira a senha para carregamento:" + + # translation auto-copied from project libreport, version master, document libreport + #. success +-#: ../src/plugins/reporter-upload.c:181 ++#: ../src/plugins/reporter-upload.c:120 + #, c-format + msgid "Archive is created: '%s'" + msgstr "Arquivo está criado: '%s'" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:222 ++#: ../src/plugins/reporter-upload.c:159 + msgid "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Uploads compressed tarball of problem directory DIR to URL.\n" + "If URL is not specified, creates tarball in " + msgstr "" +-"& [-V] DIR-d [-c ConfFile] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" +-"Envios comprimido tarball do diretório problmea DIR para URL.\n" +-"Se a URL não for especificado, criar tarball em" ++"Envia tarball comprimido do diretório problema DIR para URL.\n" ++"Se URL não for especificado, criar tarball em " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:251 ++#: ../src/plugins/reporter-upload.c:190 + msgid "Base URL to upload to" + msgstr "URL base para fazer upload à" + ++#: ../src/plugins/reporter-upload.c:191 ++msgid "SSH public key file" ++msgstr "Arquivo de chave publica SSH" ++ ++#: ../src/plugins/reporter-upload.c:192 ++msgid "SSH private key file" ++msgstr "Arquivo de chave privada SSH" ++ ++#: ../src/plugins/reporter-upload.c:221 ++msgid "" ++"Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:" ++"" ++msgstr "" ++"Por favor insira uma URL (scp, ftp, etc.) de onde os dados do problema serão " ++"exportados:" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Kerneloops.xml.in.h:1 + msgid "Kerneloops.org" +@@ -2375,11 +2553,11 @@ msgstr "Nome de usuário de cliente Red Hat" + msgid "Red Hat customer password" + msgstr "Senha do cliente Red Hat" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:9 ++#: ../src/plugins/report_RHTSupport.xml.in.h:7 + msgid "Submit uReport" + msgstr "Submeter uReport" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:10 ++#: ../src/plugins/report_RHTSupport.xml.in.h:8 + msgid "" + "Submit <a href=\"https://access.redhat.com/articles/642323\">micro-" + "report</a> when creating a new case." +@@ -2388,12 +2566,12 @@ msgstr "" + "report</a> when creating a new case." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_RHTSupport.xml.in.h:9 + msgid "RH Portal URL" + msgstr "URL do Portal Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_RHTSupport.xml.in.h:10 + msgid "Address of the Red Hat support portal" + msgstr "Endereço" + +@@ -2450,6 +2628,22 @@ msgstr "Proxy FTP" + msgid "Sets the proxy server to use for FTP" + msgstr "Configura o servidor proxy para utilizar FTP" + ++#: ../src/plugins/report_Uploader.xml.in.h:16 ++msgid "SSH Public key file" ++msgstr "Arquivo de chave publica SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:17 ++msgid "Use this field to specify SSH public keyfile" ++msgstr "Use este campo para especificar arquivo de chave pública SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:18 ++msgid "SSH Private key file" ++msgstr "Arquivo de chave privada SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:19 ++msgid "Use this field to specify SSH private keyfile" ++msgstr "Use este campo para especificar arquivo de chave privada SSH" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_uReport.xml.in.h:1 + msgid "uReport" +@@ -2535,51 +2729,51 @@ msgid "Bugzilla couldn't find parent of bug %d" + msgstr "O bugzilla não pôde encontrar a categoria pai do bug %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/rhbz.c:893 ++#: ../src/plugins/rhbz.c:916 + msgid "Bug.search(quicksearch) return value did not contain member 'bugs'" + msgstr "" + "Bug.search(quicksearch) retornou um valor que não contém o membro 'bugs'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:68 ++#: ../src/plugins/reporter-ureport.c:73 + msgid "Specify server URL" + msgstr "Especifique URL do servidor" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:70 ++#: ../src/plugins/reporter-ureport.c:75 + msgid "Allow insecure connection to ureport server" + msgstr "Permitir conexão insegura ao servidor ureport" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:71 ++#: ../src/plugins/reporter-ureport.c:76 + msgid "Use client authentication" + msgstr "Usar autenticação de cliente" + +-#: ../src/plugins/reporter-ureport.c:72 ++#: ../src/plugins/reporter-ureport.c:77 + msgid "Use HTTP Authentication" + msgstr "Utilizar autenticação HTTP" + +-#: ../src/plugins/reporter-ureport.c:73 ++#: ../src/plugins/reporter-ureport.c:78 + msgid "Additional files included in 'auth' key" + msgstr "Arquivos adicionais inclusos na chave 'auth'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:76 ++#: ../src/plugins/reporter-ureport.c:81 + msgid "bthash of uReport to attach (conflicts with -A)" + msgstr "bthash do uReport para anexar (conflita com -A)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:78 ++#: ../src/plugins/reporter-ureport.c:83 + msgid "attach to a bthash from reported_to (conflicts with -a)" + msgstr "anexar ao bthash do reported_to (conflita com -a)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:80 ++#: ../src/plugins/reporter-ureport.c:85 + msgid "contact e-mail address (requires -a|-A, conflicts with -E)" + msgstr "endereço de e-mail para contato (requer -a|-A, conflita como -E)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:82 ++#: ../src/plugins/reporter-ureport.c:87 + msgid "" + "contact e-mail address from environment or configuration file (requires -a|-" + "A, conflicts with -e)" +@@ -2588,21 +2782,50 @@ msgstr "" + "(requer -a|-A, conflita com -e)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:84 ++#: ../src/plugins/reporter-ureport.c:89 + msgid "attach RHBZ bug (requires -a|-A, conflicts with -B)" + msgstr "anexar o erro RHBZ (requer -a|-A, conflita com -B)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:86 ++#: ../src/plugins/reporter-ureport.c:91 + msgid "" + "attach last RHBZ bug from reported_to (requires -a|-A, conflicts with -b)" + msgstr "" + "anexar último erro RHBZ do reported_to (requer -a|-A, conflita com -b)" + +-#: ../src/plugins/reporter-ureport.c:91 ++#: ../src/plugins/reporter-ureport.c:95 ++msgid "attach value (requires -a|-A and -T, conflicts with -L)" ++msgstr "anexar valor (requer -a|-A e -T, conflita com -L)" ++ ++#: ../src/plugins/reporter-ureport.c:97 ++msgid "" ++"attach data of FIELD [URL] of the last report result (requires -a|-A, -r and " ++"-T, conflicts with -l)" ++msgstr "" ++"anexar dados de CAMPO [URL] do resultado do último relatório (requer -a|-A, -" ++"r e -T, conflita com -l)" ++ ++#: ../src/plugins/reporter-ureport.c:100 ++msgid "" ++"use REPORT_RESULT_TYPE when looking for FIELD in reported_to (used only with " ++"-L)" ++msgstr "" ++"use REPORT_RESULT_TYPE quando procurar por CAMPO no reported_to (usado " ++"somente com -L)" ++ ++#: ../src/plugins/reporter-ureport.c:102 ++msgid "" ++"attach DATA as ureporte attachment ATTACHMENT_TYPE (used only with -l|-L)" ++msgstr "" ++"anexar DADOS como anexos ureporte ATTACHMENT_TYPE (usado somente com -l|-L)" ++ ++#: ../src/plugins/reporter-ureport.c:107 + msgid "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2613,38 +2836,51 @@ msgid "" + msgstr "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" + "\n" +-"Carregar relatório micro ou adicionar um anexo em uma reportagem macro\n" ++"Enviar o micro relatório ou adicionar um anexo para uma micro relatório\n" + "\n" + "Lê a configuração padrão a partir de " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:144 ++#: ../src/plugins/reporter-ureport.c:179 + msgid "This problem does not have an uReport assigned." + msgstr "Esse problema não tem um uReport assinalado." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:157 ++#: ../src/plugins/reporter-ureport.c:192 + msgid "This problem has not been reported to Bugzilla." + msgstr "Este problema não foi relatado ao Bugzilla." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:161 ++#: ../src/plugins/reporter-ureport.c:196 + #, c-format + msgid "Unable to find bug ID in bugzilla URL '%s'" + msgstr "Não foi possível encontrar o ID do bug na url do Bugzilla '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:166 ++#: ../src/plugins/reporter-ureport.c:201 + #, c-format + msgid "Unable to parse bug ID from bugzilla URL '%s'" + msgstr "Não foi possível analisar o ID do bug da url do Bugzilla '%s'" + ++#: ../src/plugins/reporter-ureport.c:211 ++#, c-format ++msgid "This problem has not been reported to '%s'." ++msgstr "Este problema não foi relatado a '%s'." ++ ++#: ../src/plugins/reporter-ureport.c:216 ++#, c-format ++msgid "The report result '%s' is missing URL." ++msgstr "O resultado do relatório '%s' está faltando URL." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:179 ++#: ../src/plugins/reporter-ureport.c:233 + msgid "" + "Neither environment variable 'uReport_ContactEmail' nor configuration option " + "'ContactEmail' is set" +@@ -2652,22 +2888,22 @@ msgstr "" + "Nem a variável do ambiente 'uReport_ContactEmail' nem a opção de " + "configuração 'ContactEmail' está configurada" + +-#: ../src/plugins/reporter-ureport.c:185 ++#: ../src/plugins/reporter-ureport.c:239 + msgid "You need to specify bug ID, contact email or both" + msgstr "Você precisa especificar um ID de erros, email de contato ou ambos." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:203 ++#: ../src/plugins/reporter-ureport.c:263 + msgid "You need to specify bthash of the uReport to attach." + msgstr "Você precisar especificar o bthash do uReport para analisar." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:208 ++#: ../src/plugins/reporter-ureport.c:268 + msgid "Not uploading an empty uReport" + msgstr "Não enviando um uReport vazio" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:229 ++#: ../src/plugins/reporter-ureport.c:289 + msgid "This problem has already been reported." + msgstr "Este problema já foi reportado." + +@@ -2835,7 +3071,18 @@ msgstr "Enviar os dados do problema via email" + msgid "Analyze the problem locally and send information via email" + msgstr "Analisar o problema localmente e enviar as informações via email" + +-# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_uReport.xml.in.h:1 ++msgid "Submit anonymous crash report" ++msgstr "Enviar relatório de quebra anônimo" ++ ++#: ../src/workflows/workflow_uReport.xml.in.h:2 ++msgid "" ++"Submit anonymous crash report - I do not want to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Enviar relatório de quebra anônimo - Eu não quero ser contactado pelo " ++"Suporte Red Hat" ++ + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:1 + #: ../src/workflows/workflow_RHELKerneloops.xml.in.h:1 + #: ../src/workflows/workflow_RHELPython.xml.in.h:1 +@@ -2843,59 +3090,66 @@ msgstr "Analisar o problema localmente e enviar as informações via email" + #: ../src/workflows/workflow_RHELxorg.xml.in.h:1 + #: ../src/workflows/workflow_RHELLibreport.xml.in.h:1 + #: ../src/workflows/workflow_RHELJava.xml.in.h:1 +-msgid "Report to Red Hat Customer Portal" +-msgstr "Relatar ao Red Hat Customer Portal" ++msgid "Ask Red Hat Support for help" ++msgstr "Peça ajuda ao Suporte Red Hat" + +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:2 ++#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 ++#: ../src/workflows/workflow_RHELPython.xml.in.h:2 ++#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 ++#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 ++#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 ++#: ../src/workflows/workflow_RHELJava.xml.in.h:2 ++msgid "" ++"Create new Red Hat Support case - I would like to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Criar novo caso de Suporte Red Hat - Eu gostaria de ser contactado pelo " ++"Suporte Red Hat" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 ++msgid "Report to Red Hat Bugzilla" ++msgstr "Relatar para Red Hat Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:2 + msgid "Process the C/C++ crash using the Red Hat infrastructure" + msgstr "Processar a quebra do C/C++ utilizando a infraestrutura da Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:2 + msgid "Process the kerneloops using the Red Hat infrastructure" + msgstr "Processar o kerneloops utilizando a infraestrutura da Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELPython.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:2 + msgid "Process the python exception using the Red Hat infrastructure" + msgstr "Processar a exceção do python utilizando a infraestrutura da Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:2 + msgid "Process the kernel crash using the Red Hat infrastructure" + msgstr "Processar a quebra do Kernel utilizando a infraestrutura da Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:2 + msgid "Process the X Server problem using the Red Hat infrastructure" + msgstr "" + "Processar o problema do Servidor X utilizando a infraestrutura da Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:2 + msgid "Process the problem using the Red Hat infrastructure" + msgstr "Processar o problema utilizando a infraestrutura da Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELJava.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:2 + msgid "Process the Java exception using the Red Hat infrastructure" + msgstr "Processar a exceção do Java utilizando a infraestrutura da Red Hat" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 +-msgid "Report to Red Hat Bugzilla" +-msgstr "Relatar para Red Hat Bugzilla" +diff --git a/po/ru.po b/po/ru.po +index 609cc15..4f51381 100644 +--- a/po/ru.po ++++ b/po/ru.po +@@ -1,17 +1,19 @@ + # yuliya , 2015. #zanata ++# Terry Chuang , 2016. #zanata ++# yuliya , 2016. #zanata + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2015-07-14 15:18+0200\n" ++"POT-Creation-Date: 2016-06-29 15:25+0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2015-07-20 01:04-0400\n" +-"Last-Translator: yuliya \n" ++"PO-Revision-Date: 2016-09-01 06:05-0400\n" ++"Last-Translator: Copied by Zanata \n" + "Language-Team: Russian\n" + "Language: ru\n" +-"X-Generator: Zanata 3.6.2\n" ++"X-Generator: Zanata 3.9.5\n" + "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " + "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +@@ -210,37 +212,31 @@ msgstr "Выберите рабочий поток:" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:87 +-#, python-brace-format + msgid "Extracting cpio from {0}" + msgstr "Извлечение cpio из {0}..." + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:92 +-#, python-brace-format + msgid "Can't write to '{0}': {1}" + msgstr "Ошибка записи в \"{0}\": {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:107 +-#, python-brace-format + msgid "Can't extract package '{0}'" + msgstr "Не удалось извлечь пакет \"{0}\"." + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:115 +-#, python-brace-format + msgid "Caching files from {0} made from {1}" + msgstr "Кэширование файлов из {0} из {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:134 +-#, python-brace-format + msgid "Can't extract files from '{0}'" + msgstr "Не удалось извлечь файлы из \"{0}\"" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:147 +-#, python-brace-format + msgid "Can't remove '{0}': {1}" + msgstr "Не удалось удалить \"{0}\": {1}" + +@@ -249,7 +245,6 @@ msgstr "Не удалось удалить \"{0}\": {1}" + #. % (self.downloaded_pkgs + 1, self.total_pkgs, name, pct) + #. ) + #: ../src/client-python/debuginfo.py:194 ../src/client-python/debuginfo.py:205 +-#, python-brace-format + msgid "Downloading ({0} of {1}) {2}: {3:3}%" + msgstr "Загружается ({0} из {1}) {2}: {3:3}%" + +@@ -299,7 +294,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:356 +-#, python-brace-format + msgid "Can't setup {0}: {1}, disabling" + msgstr "Не удалось настроить {0}: {1}. Отключается..." + +@@ -324,19 +318,16 @@ msgstr "Ошибка получения списка файлов: \"{0!s}\"" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:416 +-#, python-brace-format + msgid "Can't find packages for {0} debuginfo files" + msgstr "Не найдены пакеты для {0} файлов debuginfo" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:418 +-#, python-brace-format + msgid "Packages to download: {0}" + msgstr "Пакеты для загрузки: {0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:419 +-#, python-brace-format + msgid "Downloading {0:.2f}Mb, installed size: {1:.2f}Mb. Continue?" + msgstr "" + "Будет загружено {0:.2f} МБ, установленный размер: {1:.2f} МБ. Продолжить?" +@@ -349,7 +340,6 @@ msgstr "Загрузка отменена пользователем" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:434 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in tmp dir '{0}' ({1:.2f}Mb left). Continue?" + msgstr "" +@@ -358,7 +348,6 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:443 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in cache dir '{0}' ({1:.2f}Mb left). " + "Continue?" +@@ -368,13 +357,11 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:469 +-#, python-brace-format + msgid "Cannot copy file '{0}': {1}" + msgstr "Не удалось скопировать файл '{0}': {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:487 +-#, python-brace-format + msgid "Downloading package {0} failed" + msgstr "Не удалось загрузить пакет {0}" + +@@ -389,7 +376,6 @@ msgstr "Ошибка распаковки. Загрузка отменяется + #. but it was appearing even if no packages were in fact extracted + #. (say, when there was one package, and it has download error). + #: ../src/client-python/debuginfo.py:504 +-#, python-brace-format + msgid "Removing {0}" + msgstr "Удаление {0}" + +@@ -451,7 +437,7 @@ msgid "C_onfigure" + msgstr "Н_астроить" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3472 ++#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3718 + msgid "_Close" + msgstr "_Закрыть" + +@@ -482,7 +468,7 @@ msgstr "Secret Service недоступен. Ваши настройки не б + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gtk-helpers/event_config_dialog.c:321 + #: ../src/gtk-helpers/workflow_config_dialog.c:86 +-#: ../src/gui-wizard-gtk/wizard.c:822 ../src/gui-wizard-gtk/wizard.c:3101 ++#: ../src/gui-wizard-gtk/wizard.c:844 ../src/gui-wizard-gtk/wizard.c:3325 + msgid "_Cancel" + msgstr "_Отмена" + +@@ -567,7 +553,7 @@ msgstr "" + msgid "Alternate GUI file" + msgstr "Файл GUI" + +-#: ../src/gui-wizard-gtk/wizard.c:354 ++#: ../src/gui-wizard-gtk/wizard.c:378 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide the " +@@ -582,7 +568,7 @@ msgstr "" + "Для получения информации о настройке доступа обратитесь к статье https://" + "access.redhat.com/site/articles/718083" + +-#: ../src/gui-wizard-gtk/wizard.c:357 ++#: ../src/gui-wizard-gtk/wizard.c:381 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide " +@@ -596,13 +582,13 @@ msgstr "" + "\n" + "Узнать больше" + +-#: ../src/gui-wizard-gtk/wizard.c:373 ++#: ../src/gui-wizard-gtk/wizard.c:397 + #, c-format + msgid "Con_figure %s" + msgstr "_Настроить %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:400 ++#: ../src/gui-wizard-gtk/wizard.c:424 + #, c-format + msgid "" + "Need writable directory, but '%s' is not writable. Move it to '%s' and " +@@ -612,17 +598,17 @@ msgstr "" + "новом месте?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:813 ++#: ../src/gui-wizard-gtk/wizard.c:835 + msgid "View/edit a text file" + msgstr "Просмотр/правка файла" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:821 ++#: ../src/gui-wizard-gtk/wizard.c:843 + msgid "_Save" + msgstr "_Сохранить" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1040 ++#: ../src/gui-wizard-gtk/wizard.c:1067 + msgid "" + "No reporting targets are defined for this problem. Check configuration in /" + "etc/libreport/*" +@@ -631,45 +617,66 @@ msgstr "" + "конфигурацию в /etc/libreport/*" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1077 ++#: ../src/gui-wizard-gtk/wizard.c:1104 + #, c-format + msgid "(requires: %s)" + msgstr "(требуется: %s)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1091 ++#: ../src/gui-wizard-gtk/wizard.c:1118 + #, c-format + msgid "(not needed, data already exist: %s)" + msgstr "(нет необходимости, данные уже существуют: %s)" + ++#: ../src/gui-wizard-gtk/wizard.c:1217 ++msgid "" ++"Since crashes without a known reproducer can be difficult to diagnose, " ++"please provide a comprehensive description of the problem you have " ++"encountered." ++msgstr "" ++"Поскольку сбои, шаги для воспроизведения которых неизвестны, бывает сложно " ++"диагностировать, предоставьте подробное описание возникшей проблемы." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1224 ++msgid "" ++"Please provide a short description of the problem and please include the " ++"steps you have used to reproduce the problem." ++msgstr "" ++"Введите краткое описание проблемы и укажите шаги, которые вы выполнили для " ++"воспроизведения проблемы." ++ ++#: ../src/gui-wizard-gtk/wizard.c:1231 ++msgid "Please provide the steps you have used to reproduce the problem." ++msgstr "Укажите шаги, которые вы выполнили для воспроизведения проблемы." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1277 ++#: ../src/gui-wizard-gtk/wizard.c:1349 + msgid "(click here to view/edit)" + msgstr "(нажмите для просмотра и изменения)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1288 ++#: ../src/gui-wizard-gtk/wizard.c:1360 + #, c-format + msgid "(binary file, %llu bytes)" + msgstr "(двоичный файл, %llu байт)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1395 ../src/report-newt/report-newt.c:334 ++#: ../src/gui-wizard-gtk/wizard.c:1467 ../src/report-newt/report-newt.c:334 + msgid "(no description)" + msgstr "(нет описания)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1403 ++#: ../src/gui-wizard-gtk/wizard.c:1475 + #, c-format + msgid "%llu bytes, %u files" + msgstr "%llu Б, файлов: %u" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1647 ++#: ../src/gui-wizard-gtk/wizard.c:1752 + msgid "Processing was canceled" + msgstr "Обработка была отменена" + +-#: ../src/gui-wizard-gtk/wizard.c:1851 ++#: ../src/gui-wizard-gtk/wizard.c:1956 + msgid "" + "Processing of the problem failed. This can have many reasons but there are " + "three most common:\n" +@@ -683,7 +690,7 @@ msgstr "" + " ▫ данные об ошибке повреждены\n" + " ▫ неверные настройки" + +-#: ../src/gui-wizard-gtk/wizard.c:1860 ++#: ../src/gui-wizard-gtk/wizard.c:1965 + msgid "" + "If you want to update the configuration and try to report again, please open " + "Preferences item\n" +@@ -695,53 +702,65 @@ msgstr "" + "Повторить ." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1978 ++#: ../src/gui-wizard-gtk/wizard.c:2089 + msgid "Processing was interrupted because the problem is not reportable." + msgstr "" + "Обработка была прервана, потому что об этой проблеме не нужно сообщать." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1988 ../src/gui-wizard-gtk/wizard.c:2057 ++#: ../src/gui-wizard-gtk/wizard.c:2099 ../src/gui-wizard-gtk/wizard.c:2168 + msgid "Processing failed." + msgstr "Ошибка обработки." + + # translation auto-copied from project libreport, version master, document libreport + #. No next event, go to progress page and finish +-#: ../src/gui-wizard-gtk/wizard.c:1995 ../src/gui-wizard-gtk/wizard.c:2818 ++#: ../src/gui-wizard-gtk/wizard.c:2106 ../src/gui-wizard-gtk/wizard.c:3040 + msgid "Processing finished." + msgstr "Обработка завершена." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1996 ++#: ../src/gui-wizard-gtk/wizard.c:2107 + msgid "Processing finished, please proceed to the next step." + msgstr "Обработка завершена. Перейдите к следующему шагу." + + # translation auto-copied from project libreport, version master, document libreport + #. TODO: better msg? +-#: ../src/gui-wizard-gtk/wizard.c:2054 ++#: ../src/gui-wizard-gtk/wizard.c:2165 + #, c-format + msgid "No processing for event '%s' is defined" + msgstr "Не задан метод обработки события «%s»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2068 ++#: ../src/gui-wizard-gtk/wizard.c:2179 + msgid "Processing interrupted: can't continue without writable directory." + msgstr "Обработка прервана: необходимо разрешить запись в каталог." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2105 ++#: ../src/gui-wizard-gtk/wizard.c:2216 + msgid "Processing..." + msgstr "Обработка..." + ++#: ../src/gui-wizard-gtk/wizard.c:2297 ++msgid "" ++"Possible sensitive data detected, feel free to edit the report and remove " ++"them." ++msgstr "" ++"Обнаружены возможные конфиденциальные данные. Вы можете изъять их из отчета." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2198 ++#: ../src/gui-wizard-gtk/wizard.c:2337 + msgid "Cannot check backtrace rating because of invalid event name" + msgstr "" + "Невозможно проверить рейтинг трассировки, так как неверно указано имя " + "события" + ++#: ../src/gui-wizard-gtk/wizard.c:2869 ++#, c-format ++msgid "Failed to save file '%s'" ++msgstr "Не удалось сохранить файл %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2838 ++#: ../src/gui-wizard-gtk/wizard.c:3060 + #, c-format + msgid "" + "Event '%s' requires permission to send possibly sensitive data.\n" +@@ -751,112 +770,133 @@ msgstr "" + "данных. Вы хотите продолжить?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2886 ++#: ../src/gui-wizard-gtk/wizard.c:3108 + #, c-format + msgid "This problem should not be reported (it is likely a known problem). %s" + msgstr "Похоже, это — известная проблема и сообщать о ней не требуется. %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3102 ++#: ../src/gui-wizard-gtk/wizard.c:3326 + msgid "_Open" + msgstr "_Открыть" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3124 ++#: ../src/gui-wizard-gtk/wizard.c:3348 + #, c-format + msgid "'%s' is not an ordinary file" + msgstr "«%s» не является текстовым файлом" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3138 ++#: ../src/gui-wizard-gtk/wizard.c:3362 + msgid "You are trying to copy a file onto itself" + msgstr "Вы пытаетесь осуществить копирование в тот же файл" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3145 ++#: ../src/gui-wizard-gtk/wizard.c:3369 + #, c-format + msgid "Can't copy '%s': %s" + msgstr "Копирование «%s» невозможно: %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3160 ++#: ../src/gui-wizard-gtk/wizard.c:3384 + #, c-format + msgid "Item '%s' already exists and is not modifiable" + msgstr "«%s» уже существует и не может быть изменён" + ++#: ../src/gui-wizard-gtk/wizard.c:3542 ++msgid "I have experienced this problem for the first time" ++msgstr "Эта проблема возникла у меня впервые" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3545 ++msgid "I can reproduce this problem" ++msgstr "Я могу воспроизвести эту проблему" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3548 ++msgid "This problem occurs repeatedly" ++msgstr "Эта проблема возникает постоянно" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3314 ++#: ../src/gui-wizard-gtk/wizard.c:3560 + msgid "Include" + msgstr "Включить" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3325 ++#: ../src/gui-wizard-gtk/wizard.c:3571 + msgid "Name" + msgstr "Имя" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3335 ++#: ../src/gui-wizard-gtk/wizard.c:3581 + msgid "Value" + msgstr "Значение" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3369 ++#: ../src/gui-wizard-gtk/wizard.c:3615 + msgid "Problem description" + msgstr "Описание проблемы" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3370 ++#: ../src/gui-wizard-gtk/wizard.c:3616 + msgid "Select how to report this problem" + msgstr "Выберите способ отправки отчета" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3371 ++#: ../src/gui-wizard-gtk/wizard.c:3617 + msgid "Provide additional information" + msgstr "Дополнительные сведения" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3372 ++#: ../src/gui-wizard-gtk/wizard.c:3618 + msgid "Review the data" + msgstr "Просмотр информации" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3373 ++#: ../src/gui-wizard-gtk/wizard.c:3619 + msgid "Confirm data to report" + msgstr "Подтвердите отправку данных" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3374 ++#: ../src/gui-wizard-gtk/wizard.c:3620 + msgid "Processing" + msgstr "Обработка" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3375 ++#: ../src/gui-wizard-gtk/wizard.c:3621 + msgid "Processing done" + msgstr "Обработка завершена" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3474 ++#: ../src/gui-wizard-gtk/wizard.c:3720 + msgid "_Stop" + msgstr "О_становить" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3477 ++#: ../src/gui-wizard-gtk/wizard.c:3723 + msgid "Upload for analysis" + msgstr "Загрузка для дальнейшего изучения" + + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3480 ++#: ../src/gui-wizard-gtk/wizard.c:3726 + msgid "Repeat" + msgstr "Повторить" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3483 ++#: ../src/gui-wizard-gtk/wizard.c:3729 + msgid "_Forward" + msgstr "_Вперед" + +-#: ../src/gui-wizard-gtk/wizard.c:3575 ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.c:3780 ++msgid "Restrict access to the report" ++msgstr "Ограничить доступ к отчету" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3785 ++msgid "Learn more about restricted access in the configuration" ++msgstr "Узнать больше об ограниченном доступе в конфигурации" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3844 + msgid "" + "In order to enable the built-in screencasting functionality the package fros-" + "gnome has to be installed. Please run the following command if you want to " +@@ -868,33 +908,8 @@ msgstr "" + "\n" + "su -c \"yum install fros-gnome\"" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:1 +-msgid "" +-"Possible sensitive data detected, feel free to edit the report and remove " +-"them." +-msgstr "" +-"Обнаружены возможные конфиденциальные данные. Вы можете изъять их из отчета." +- + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:2 +-msgid "Restrict access to the report" +-msgstr "Ограничить доступ к отчету" +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:3 +-msgid "" +-"No one except Red Hat employees will be allowed to see the report with " +-"restricted access (not even you)" +-msgstr "" +-"Ни у кого, кроме персонала Red Hat, не будет доступа к отчету с ограниченным " +-"доступом (даже у вас)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:4 +-msgid "Read more about reports with restricted access" +-msgstr "Узнать больше об ограничении доступа" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++#: ../src/gui-wizard-gtk/wizard.glade.h:1 + msgid "" + "On the following screens, you will be asked to describe how the problem " + "occurred, to choose how to analyze the problem (if needed), to review " +@@ -906,12 +921,12 @@ msgstr "" + "«Вперёд» для продолжения." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++#: ../src/gui-wizard-gtk/wizard.glade.h:2 + msgid "Details" + msgstr "Подробности" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:7 ++#: ../src/gui-wizard-gtk/wizard.glade.h:3 + msgid "" + "How did this problem happen (step-by-step)? How can it be reproduced? Any " + "additional comments useful for diagnosing the problem? Please use English if " +@@ -921,13 +936,30 @@ msgstr "" + "ситуацию. Добавьте комментарии, которые смогут помочь при диагностике " + "(желательно на английском)." + ++#: ../src/gui-wizard-gtk/wizard.glade.h:4 ++msgid "How reproducible is this problem?" ++msgstr "Можно ли воспроизвести эту проблему?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++msgid "How it can be reproduced (one step per line)?" ++msgstr "" ++"Как ее можно воспроизвести (указывайте каждый шаг в отдельной строке)?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++msgid "" ++"Please add a comprehensive description of the problem you have. This is a " ++"very long place holder." ++msgstr "" ++"Добавьте подробное описание возникшей проблемы. Это очень длинный " ++"заполнитель." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:8 ++#: ../src/gui-wizard-gtk/wizard.glade.h:7 + msgid "You need to fill the how to before you can proceed..." + msgstr "Для продолжения необходимо заполнить поле." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++#: ../src/gui-wizard-gtk/wizard.glade.h:8 + msgid "" + "Your comments are not private. They may be included into publicly " + "visible problem reports." +@@ -936,6 +968,11 @@ msgstr "" + "общедоступные отчёты." + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++msgid "I don't know what caused this problem" ++msgstr "Я не знаю, что вызвало эту проблему" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:10 + msgid "If you don't know how to describe it, you can" + msgstr "Если вы затрудняетесь с описанием, можно:" +@@ -947,11 +984,6 @@ msgstr "Добавить вещание с экрана" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:12 +-msgid "I don't know what caused this problem" +-msgstr "Я не знаю, что вызвало эту проблему" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Use this button to generate more informative backtrace after you installed " + "additional debug packages" +@@ -960,7 +992,7 @@ msgstr "" + "дополнительных пакетов отладки." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:14 ++#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Please review the data before it gets reported. Depending on reporter " + "chosen, it may end up publicly visible." +@@ -969,49 +1001,49 @@ msgstr "" + "зависимости от метода формирования отчетности они могут оказаться в открытом " + "доступе." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:15 ++#: ../src/gui-wizard-gtk/wizard.glade.h:14 + msgid "Forbidden words" + msgstr "Запрещенные слова" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:16 ++#: ../src/gui-wizard-gtk/wizard.glade.h:15 + msgid "Custom" + msgstr "Дополнительно" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:17 ++#: ../src/gui-wizard-gtk/wizard.glade.h:16 + msgid "Clear the search bar to see the list of security sensitive words." + msgstr "" + "Очистите строку поиска для просмотра списка слов, которые могут быть связаны " + "с конфиденциальными данными." + +-#: ../src/gui-wizard-gtk/wizard.glade.h:18 ++#: ../src/gui-wizard-gtk/wizard.glade.h:17 + msgid "file" + msgstr "файл" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:19 ++#: ../src/gui-wizard-gtk/wizard.glade.h:18 + msgid "data" + msgstr "данные" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:20 ++#: ../src/gui-wizard-gtk/wizard.glade.h:19 + msgid "Search" + msgstr "Поиск" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:21 ++#: ../src/gui-wizard-gtk/wizard.glade.h:20 + msgid "Size:" + msgstr "Размер:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:22 ++#: ../src/gui-wizard-gtk/wizard.glade.h:21 + msgid "Attach a file" + msgstr "Вложить файл" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:23 ++#: ../src/gui-wizard-gtk/wizard.glade.h:22 + msgid "I reviewed the data and _agree with submitting it" + msgstr "Я ознакомился с информацией и разрешаю её передачу" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:24 ++#: ../src/gui-wizard-gtk/wizard.glade.h:23 + msgid "" + "If you are reporting to a remote server, make sure you removed all private " + "data (such as usernames and passwords). Backtrace, command line, environment " +@@ -1022,22 +1054,22 @@ msgstr "" + "переменные окружения могут содержать такие данные." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:25 ++#: ../src/gui-wizard-gtk/wizard.glade.h:24 + msgid "Processing did not start yet" + msgstr "Обработка еще не началась" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:26 ++#: ../src/gui-wizard-gtk/wizard.glade.h:25 + msgid "Show log" + msgstr "Показать журнал" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:27 ++#: ../src/gui-wizard-gtk/wizard.glade.h:26 + msgid "Reporting has finished. You can close this window now." + msgstr "Отчёт отправлен. Можно закрыть окно." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:28 ++#: ../src/gui-wizard-gtk/wizard.glade.h:27 + msgid "" + "If you want to report the problem to a different destination, collect " + "additional information, or provide a better problem description and repeat " +@@ -1047,17 +1079,17 @@ msgstr "" + "создайте его заново, нажав «Вперед»." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1007 ++#: ../src/include/internal_libreport.h:1046 + msgid "Be verbose" + msgstr "Опишите подробно" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1008 +-#: ../src/plugins/reporter-bugzilla.c:895 ++#: ../src/include/internal_libreport.h:1047 ++#: ../src/plugins/reporter-bugzilla.c:893 + #: ../src/plugins/reporter-kerneloops.c:166 +-#: ../src/plugins/reporter-mailx.c:198 ../src/plugins/reporter-print.c:56 +-#: ../src/plugins/reporter-rhtsupport.c:471 +-#: ../src/plugins/reporter-upload.c:249 ++#: ../src/plugins/reporter-mailx.c:280 ../src/plugins/reporter-print.c:56 ++#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-upload.c:188 + msgid "Problem directory" + msgstr "Проблемный каталог" + +@@ -1115,7 +1147,7 @@ msgid "'%s' is not correct file name" + msgstr "Неверное имя файла: «%s»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/create_dump_dir.c:153 ++#: ../src/lib/create_dump_dir.c:150 + #, c-format + msgid "uid value is not valid: '%s'" + msgstr "Неверный UID: «%s»" +@@ -1126,87 +1158,117 @@ msgstr "Неверный UID: «%s»" + msgid "Uploaded: %llu of %llu kbytes" + msgstr "Отправлено %llu из %llu КБ" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/curl.c:635 ++#: ../src/lib/curl.c:636 ++msgid "Ignoring URL without scheme and hostname" ++msgstr "Игнорирование URL без схемы и имени хоста" ++ ++#. Do not include the path part of the URL as it can contain sensitive data ++#. * in case of typos ++#: ../src/lib/curl.c:666 + #, c-format +-msgid "Sending %s to %s" +-msgstr "%s отправляется в %s..." ++msgid "Sending %s to %s//%s" ++msgstr "Отправка %s на %s//%s" + +-#: ../src/lib/curl.c:659 ++#: ../src/lib/curl.c:690 + #, c-format +-msgid "Please enter user name for '%s':" +-msgstr "Введите имя пользователя для «%s»" ++msgid "Please enter user name for '%s//%s':" ++msgstr "Введите имя пользователя для %s//%s:" + +-#: ../src/lib/curl.c:665 ++#: ../src/lib/curl.c:696 + #, c-format +-msgid "Please enter password for '%s':" +-msgstr "Введите пароль для «%s»" ++msgid "Please enter password for '%s//%s@%s':" ++msgstr "Введите пароль для %s//%s@%s:" + +-# translation auto-copied from project libreport, version master, document libreport + #. This ends up a "reporting status message" in abrtd +-#: ../src/lib/curl.c:688 ++#: ../src/lib/curl.c:719 + #, c-format +-msgid "Successfully sent %s to %s" +-msgstr "%s успешно отправлен в %s" ++msgid "Successfully created %s" ++msgstr "Успешно создано: %s" ++ ++#: ../src/lib/dump_dir.c:1545 ++msgid "Failed to open TAR writer" ++msgstr "Не удалось открыть редактор TAR" ++ ++#: ../src/lib/dump_dir.c:1571 ++msgid "Failed to finalize TAR archive" ++msgstr "Не удалось финализировать архив TAR" ++ ++#: ../src/lib/dump_dir.c:1581 ++msgid "Failed to close TAR writer" ++msgstr "Не удалось закрыть редактор TAR" ++ ++#: ../src/lib/dump_dir.c:1591 ++#, c-format ++msgid "gzip killed with signal %d" ++msgstr "gzip прерван с сигналом %d" ++ ++#: ../src/lib/dump_dir.c:1597 ++#, c-format ++msgid "gzip exited with %d" ++msgstr "gzip завершился с кодом выхода %d" ++ ++#: ../src/lib/dump_dir.c:1600 ++msgid "gzip process failed" ++msgstr "ошибка процесса gzip" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:348 ++#: ../src/lib/event_config.c:382 + msgid "Missing mandatory value" + msgstr "Заполните обязательные поля" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:356 ++#: ../src/lib/event_config.c:390 + #, c-format + msgid "Invalid utf8 character '%c'" + msgstr "Недопустимый символ UTF8 \"%c\"" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:369 ++#: ../src/lib/event_config.c:403 + #, c-format + msgid "Invalid number '%s'" + msgstr "Недопустимый номер «%s»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:384 ++#: ../src/lib/event_config.c:418 + #, c-format + msgid "Invalid boolean value '%s'" + msgstr "Неверное логическое значение: «%s»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:390 ++#: ../src/lib/event_config.c:424 + msgid "Unsupported option type" + msgstr "Неподдерживаемый тип параметра" + +-#: ../src/lib/event_config.c:463 ++#: ../src/lib/event_config.c:497 + msgid "Reporting disabled because the rating does not contain a number." + msgstr "Формирование отчета отменено, так как рейтинг не содержит число." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:464 ++#: ../src/lib/event_config.c:498 + msgid "Please report this problem to ABRT project developers." + msgstr "Сообщите о проблеме в проект разработчиков ABRT." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:470 ++#: ../src/lib/event_config.c:504 + msgid "" + "The backtrace is incomplete, please make sure you provide the steps to " + "reproduce." + msgstr "Неполный протокол сбоя. Опишите действия, которые привели к ошибке." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:471 ++#: ../src/lib/event_config.c:505 + msgid "The backtrace probably can't help developer to diagnose the bug." + msgstr "" + "Вероятно, данные трассировки не помогут разработчику идентифицировать ошибку." + "" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:477 ++#: ../src/lib/event_config.c:511 + msgid "Reporting disabled because the backtrace is unusable." + msgstr "Формирование отчета отменено в силу непригодности протокола сбоя." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:481 ++#: ../src/lib/event_config.c:515 + #, c-format + msgid "" + "Please try to install debuginfo manually using the command: \"debuginfo-" +@@ -1216,12 +1278,27 @@ msgstr "" + "«debuginfo-install %s»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:483 ++#: ../src/lib/event_config.c:517 + msgid "A proper debuginfo is probably missing or the coredump is corrupted." + msgstr "Вероятно, отсутствует debuginfo или дамп памяти поврежден." + ++#: ../src/lib/iso_date_string.c:48 ++#, c-format ++msgid "String doesn't seem to be a date: '%s'" ++msgstr "Строка не является датой: %s" ++ ++#: ../src/lib/iso_date_string.c:53 ++#, c-format ++msgid "The date: '%s' has unrecognized suffix: '%s'" ++msgstr "Дата «%s» имеет нераспознанный суффикс: %s" ++ ++#: ../src/lib/iso_date_string.c:58 ++#, c-format ++msgid "The date: '%s' is out of UNIX time stamp range" ++msgstr "Дата «%s» вне диапазона меток времени UNIX" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:354 ++#: ../src/lib/ureport.c:395 + #, c-format + msgid "Your problem seems to be caused by %s\n" + "\n" +@@ -1231,49 +1308,59 @@ msgstr "Возможно, ошибка вызвана %s\n" + "%s\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:357 ++#: ../src/lib/ureport.c:398 + msgid "Your problem seems to be caused by one of the following:\n" + msgstr "Ваша ошибка, по-видимому, вызвана чем-то из перечисленного:\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:528 ++#: ../src/lib/ureport.c:570 + #, c-format + msgid "Failed to upload uReport to the server '%s' with curl: %s" +-msgstr "Ошибка отправки отчёта на сервер «%s» посредством cURL: %s" ++msgstr "Не удалось передать uReport на сервер «%s» с помощью cURL: %s" ++ ++#: ../src/lib/ureport.c:574 ++#, c-format ++msgid "Failed to upload uReport to the server '%s'" ++msgstr "Не удалось передать uReport на сервер «%s»" ++ ++#: ../src/lib/ureport.c:577 ++#, c-format ++msgid "Error: %s" ++msgstr "Ошибка: %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:534 ++#: ../src/lib/ureport.c:584 + #, c-format + msgid "The URL '%s' does not exist (got error 404 from server)" + msgstr "«%s» не существует (ошибка 404)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:540 ++#: ../src/lib/ureport.c:590 + #, c-format + msgid "The server at '%s' encountered an internal error (got error 500)" + msgstr "Внутренняя ошибка сервера «%s» (ошибка 500)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:546 ++#: ../src/lib/ureport.c:596 + #, c-format + msgid "The server at '%s' currently can't handle the request (got error 503)" + msgstr "Сервер «%s» не может обработать запрос (ошибка 503)" + + # translation auto-copied from project libreport, version master, document libreport + #. can't print better error message +-#: ../src/lib/ureport.c:555 ++#: ../src/lib/ureport.c:605 + #, c-format + msgid "Unexpected HTTP response from '%s': %d" + msgstr "Неожиданный ответ «%s»: %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:564 ++#: ../src/lib/ureport.c:614 + #, c-format + msgid "Unable to parse response from ureport server at '%s'" + msgstr "Не удалось обработать ответ сервера ureport «%s»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:574 ++#: ../src/lib/ureport.c:624 + #, c-format + msgid "The response from '%s' has invalid format" + msgstr "Неверный формат ответа «%s»" +@@ -1281,18 +1368,18 @@ msgstr "Неверный формат ответа «%s»" + # translation auto-copied from project libreport, version master, document libreport + #. HTTP CODE 202 means that call was successful but the response + #. has an error message +-#: ../src/lib/ureport.c:580 ++#: ../src/lib/ureport.c:630 + #, c-format + msgid "Type mismatch has been detected in the response from '%s'" + msgstr "Обнаружено несоответствие типов в ответе «%s»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:766 ../src/plugins/reporter-rhtsupport.c:198 ++#: ../src/lib/ureport.c:820 ../src/plugins/reporter-rhtsupport.c:233 + msgid "Failed on submitting the problem" + msgstr "Не удалось отправить сообщение об ошибке" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:808 ++#: ../src/lib/ureport.c:862 + #, c-format + msgid "The server at '%s' responded with an error: '%s'" + msgstr "Сервер «%s» вернул ошибку: «%s»" +@@ -1318,6 +1405,30 @@ msgid "Essential element '%s' is missing, can't continue" + msgstr "Отсутствует обязательный элемент «%s». Продолжение невозможно..." + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:478 ../src/plugins/reporter-bugzilla.c:355 ++#, c-format ++msgid "Can't parse backtrace: %s" ++msgstr "Не удалось обработать данные трассировки: %s" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:489 ../src/plugins/reporter-bugzilla.c:366 ++msgid "Can't generate stacktrace description (no crash thread?)" ++msgstr "Не удается создать описание трассировки стека (нет сбойной цепочки?)" ++ ++#: ../src/lib/reported_to.c:52 ++msgid "Report result label mustn't be empty string." ++msgstr "Метка результата отчета не должна быть пустой строкой." ++ ++#: ../src/lib/reported_to.c:58 ++msgid "Report result label mustn't contain ':' character." ++msgstr "Метка результата отчета не должна содержать двоеточие (:)." ++ ++#: ../src/lib/reported_to.c:141 ++#, c-format ++msgid "Ignored invalid ISO date of report result '%s'" ++msgstr "Недопустимая дата ISO в результате отчета «%s» проигнорирована" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/run_event.c:791 + #, c-format + msgid "('%s' was killed by signal %u)\n" +@@ -1402,13 +1513,14 @@ msgstr "Отправить в Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:3 +-msgid "Bugzilla URL" +-msgstr "Адрес Bugzilla" ++#: ../src/plugins/report_Uploader.xml.in.h:6 ++msgid "User name" ++msgstr "Имя пользователя" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:4 +-msgid "Address of Bugzilla server" +-msgstr "Адрес сервера Bugzilla" ++msgid "Bugzilla account user name" ++msgstr "Пользователь Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:5 +@@ -1421,62 +1533,75 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:6 +-#: ../src/plugins/report_Uploader.xml.in.h:6 +-msgid "User name" +-msgstr "Имя пользователя" ++#: ../src/plugins/report_RHTSupport.xml.in.h:5 ++#: ../src/plugins/report_Uploader.xml.in.h:8 ++msgid "Password" ++msgstr "Пароль" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:7 +-msgid "Bugzilla account user name" +-msgstr "Пользователь Bugzilla" ++msgid "Bugzilla account password" ++msgstr "Пароль в Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:8 +-#: ../src/plugins/report_RHTSupport.xml.in.h:5 +-#: ../src/plugins/report_Uploader.xml.in.h:8 +-msgid "Password" +-msgstr "Пароль" ++msgid "Restrict access" ++msgstr "Ограничить доступ" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:9 +-msgid "Bugzilla account password" +-msgstr "Пароль в Bugzilla" ++msgid "" ++"Restrict access to the created bugzilla ticket allowing only users from " ++"specified groups to view it (see advanced settings for more details)" ++msgstr "" ++"Ограничить доступ к запросу в Bugzilla, допуская для просмотра лишь " ++"пользователей из указанных групп (см. дополнительные настройки)" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:10 +-#: ../src/plugins/report_RHTSupport.xml.in.h:7 +-#: ../src/plugins/report_uReport.xml.in.h:7 +-msgid "Verify SSL" +-msgstr "Проверить SSL" ++msgid "Groups" ++msgstr "Группы" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:11 +-#: ../src/plugins/report_RHTSupport.xml.in.h:8 +-#: ../src/plugins/report_uReport.xml.in.h:8 +-msgid "Check SSL key validity" +-msgstr "Проверить ключ SSL" ++msgid "" ++"Restrict the access to specified groups <a href=\"https://github.com/abrt/" ++"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++msgstr "" ++"Предоставить доступ лишь указанным группам <a href=\"https://github.com/" ++"abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:12 +-msgid "Restrict access" +-msgstr "Ограничить доступ" ++msgid "Bugzilla URL" ++msgstr "Адрес Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:13 +-msgid "" +-"Restrict access to the created bugzilla ticket allowing only users from " +-"specified groups to view it (see advanced settings for more details)" +-msgstr "" +-"Ограничить доступ к запросу в Bugzilla, допуская для просмотра лишь " +-"пользователей из указанных групп (см. дополнительные настройки)" ++msgid "Address of Bugzilla server" ++msgstr "Адрес сервера Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:14 ++#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_uReport.xml.in.h:7 ++msgid "Verify SSL" ++msgstr "Проверить SSL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_uReport.xml.in.h:8 ++msgid "Check SSL key validity" ++msgstr "Проверить ключ SSL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:16 + msgid "Bugzilla product" + msgstr "Продукт в Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_Bugzilla.xml.in.h:17 + msgid "" + "Specify this only if you needed different product than specified in /etc/os-" + "release" +@@ -1484,19 +1609,19 @@ msgstr "" + "Укажите, только если продукт отличается от указанного в /etc/os-release" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:16 ++#: ../src/plugins/report_Bugzilla.xml.in.h:18 + msgid "Bugzilla product version" + msgstr "Версия продукта в Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:17 ++#: ../src/plugins/report_Bugzilla.xml.in.h:19 + msgid "" + "Specify this only if you needed different product version than specified in /" + "etc/os-release" + msgstr "Укажите, если версия отличается от указанной в /etc/os-release" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:18 ++#: ../src/plugins/report_Bugzilla.xml.in.h:20 + #: ../src/plugins/report_Kerneloops.xml.in.h:5 + #: ../src/plugins/report_RHTSupport.xml.in.h:13 + #: ../src/plugins/report_Uploader.xml.in.h:10 +@@ -1506,7 +1631,7 @@ msgid "HTTP Proxy" + msgstr "HTTP-прокси" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:19 ++#: ../src/plugins/report_Bugzilla.xml.in.h:21 + #: ../src/plugins/report_Kerneloops.xml.in.h:6 + #: ../src/plugins/report_RHTSupport.xml.in.h:14 + #: ../src/plugins/report_Uploader.xml.in.h:11 +@@ -1516,7 +1641,7 @@ msgid "Sets the proxy server to use for HTTP" + msgstr "Выбирает прокси-сервер для использования с HTTP" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:20 ++#: ../src/plugins/report_Bugzilla.xml.in.h:22 + #: ../src/plugins/report_Kerneloops.xml.in.h:7 + #: ../src/plugins/report_RHTSupport.xml.in.h:15 + #: ../src/plugins/report_Uploader.xml.in.h:12 +@@ -1526,7 +1651,7 @@ msgid "HTTPS Proxy" + msgstr "HTTPS-прокси" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:21 ++#: ../src/plugins/report_Bugzilla.xml.in.h:23 + #: ../src/plugins/report_Kerneloops.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:16 + #: ../src/plugins/report_Uploader.xml.in.h:13 +@@ -1536,20 +1661,6 @@ msgid "Sets the proxy server to use for HTTPS" + msgstr "Выбирает прокси-сервер для использования с HTTPS" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:22 +-msgid "Groups" +-msgstr "Группы" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:23 +-msgid "" +-"Restrict the access to specified groups <a href=\"https://github.com/abrt/" +-"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +-msgstr "" +-"Предоставить доступ лишь указанным группам <a href=\"https://github.com/" +-"abrt/abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +- +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report.c:37 + msgid "" + "& [-v] --target TARGET --ticket ID FILE...\n" +@@ -1583,18 +1694,7 @@ msgid "Ticket/case ID" + msgstr "ID запроса" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:355 +-#, c-format +-msgid "Can't parse backtrace: %s" +-msgstr "Не удалось обработать данные трассировки: %s" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:366 +-msgid "Can't generate stacktrace description (no crash thread?)" +-msgstr "Не удается создать описание трассировки стека (нет сбойной цепочки?)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:764 ++#: ../src/plugins/reporter-bugzilla.c:762 + msgid "" + "Warning, private ticket groups already specified as cmdline argument, " + "ignoring the env variable and configuration" +@@ -1604,37 +1704,37 @@ msgstr "" + "игнорироваться." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:775 +-#: ../src/plugins/reporter-rhtsupport.c:342 ++#: ../src/plugins/reporter-bugzilla.c:773 ++#: ../src/plugins/reporter-rhtsupport.c:377 + msgid "Can't continue without login" + msgstr "Необходимо указать имя" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:788 +-#: ../src/plugins/reporter-rhtsupport.c:355 ++#: ../src/plugins/reporter-bugzilla.c:786 ++#: ../src/plugins/reporter-rhtsupport.c:390 + msgid "Can't continue without password" + msgstr "Необходимо указать пароль" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:797 ++#: ../src/plugins/reporter-bugzilla.c:795 + #, c-format + msgid "Logging into Bugzilla at %s" + msgstr "Вход в Bugzilla: %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:801 ++#: ../src/plugins/reporter-bugzilla.c:799 + msgid "Invalid password or login. Please enter your BZ login:" + msgstr "Неверное имя или пароль. Пожалуйста, введите ваше имя в Bugzilla:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:804 +-#: ../src/plugins/reporter-rhtsupport.c:369 ++#: ../src/plugins/reporter-bugzilla.c:802 ++#: ../src/plugins/reporter-rhtsupport.c:404 + #, c-format + msgid "Invalid password or login. Please enter the password for '%s':" + msgstr "Неверное имя или пароль. Пожалуйста, введите пароль для «%s»:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:823 ++#: ../src/plugins/reporter-bugzilla.c:821 + msgid "" + "\n" + "& [-vbf] [-g GROUP-NAME]... [-c CONFFILE]... [-F FMTFILE] [-A FMTFILE2] -d " +@@ -1718,75 +1818,76 @@ msgstr "" + "Если CONFILE не задан, по умолчанию используется" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:896 +-#: ../src/plugins/reporter-rhtsupport.c:472 ++#: ../src/plugins/reporter-bugzilla.c:894 ++#: ../src/plugins/reporter-rhtsupport.c:511 + msgid "Configuration file (may be given many times)" + msgstr "Файл конфигурации (может быть несколько)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:897 ++#: ../src/plugins/reporter-bugzilla.c:895 + msgid "Formatting file for initial comment" + msgstr "Подготовка файла для первого комментария" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:898 ++#: ../src/plugins/reporter-bugzilla.c:896 + msgid "Formatting file for duplicates" + msgstr "Подготавливается файл для повторных сообщений" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-bugzilla.c:897 + msgid "Attach FILEs [to bug with this ID]" + msgstr "Вложить файлы [в запрос с этим ID]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:900 ++#: ../src/plugins/reporter-bugzilla.c:898 + msgid "When creating bug, attach binary files too" + msgstr "Включать двоичные файлы" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:901 +-#: ../src/plugins/reporter-rhtsupport.c:474 ++#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-rhtsupport.c:513 + msgid "Force reporting even if this problem is already reported" + msgstr "Создать отчёт, даже если об этой проблеме уже сообщалось" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:902 ++#: ../src/plugins/reporter-bugzilla.c:900 + msgid "Add bugzilla user to CC list [of bug with this ID]" + msgstr "Добавить пользователя в список получателей [в запросе с данным ID]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:903 ++#: ../src/plugins/reporter-bugzilla.c:901 + msgid "Print BUG_ID which has given DUPHASH" + msgstr "Вывести BUG_ID, вернувший DUPHASH" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:904 ++#: ../src/plugins/reporter-bugzilla.c:902 + msgid "A name of bug tracker for an additional URL from 'reported_to'" + msgstr "Система отслеживания ошибок для адреса из поля «reported_to»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:905 ++#: ../src/plugins/reporter-bugzilla.c:903 + msgid "Restrict access to this group only" + msgstr "Ограничить доступ только этой группой" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:906 ++#: ../src/plugins/reporter-bugzilla.c:904 ../src/plugins/reporter-mailx.c:284 ++#: ../src/plugins/reporter-rhtsupport.c:517 + msgid "Debug" + msgstr "Отладка" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:948 ++#: ../src/plugins/reporter-bugzilla.c:949 + msgid "Looking for similar problems in bugzilla" + msgstr "Поиск похожих ошибок в Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:975 ++#: ../src/plugins/reporter-bugzilla.c:976 + msgid "Login is not provided by configuration. Please enter your BZ login:" + msgstr "В конфигурации не задано имя пользователя Bugzilla. Введите имя:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:981 +-#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-bugzilla.c:982 ++#: ../src/plugins/reporter-rhtsupport.c:551 + #, c-format + msgid "" + "Password is not provided by configuration. Please enter the password for " +@@ -1794,7 +1895,7 @@ msgid "" + msgstr "В конфигурации не задан пароль «%s». Введите пароль:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1000 ++#: ../src/plugins/reporter-bugzilla.c:1001 + msgid "" + "Can't get Bugzilla ID because this problem has not yet been reported to " + "Bugzilla." +@@ -1803,7 +1904,7 @@ msgstr "" + "сообщалось." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1007 ++#: ../src/plugins/reporter-bugzilla.c:1008 + #, c-format + msgid "" + "This problem has been reported to Bugzilla '%s' which differs from the " +@@ -1813,87 +1914,111 @@ msgstr "" + "настроенного Bugzilla «%s»." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1011 ++#: ../src/plugins/reporter-bugzilla.c:1012 + #, c-format + msgid "Malformed url to Bugzilla '%s'." + msgstr "Неверно сформированный адрес в Bugzilla «%s»." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1015 ++#: ../src/plugins/reporter-bugzilla.c:1016 + #, c-format + msgid "Using Bugzilla ID '%s'" + msgstr "Используется ID Bugzilla «%s»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1049 +-#: ../src/plugins/reporter-bugzilla.c:1341 ++#: ../src/plugins/reporter-bugzilla.c:1050 ++#: ../src/plugins/reporter-bugzilla.c:1220 ++#: ../src/plugins/reporter-bugzilla.c:1379 + msgid "Logging out" + msgstr "Выход" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1100 ++#: ../src/plugins/reporter-bugzilla.c:1101 + msgid "Can't determine Bugzilla Product from problem data." + msgstr "" + "Не удалось определить продукт исходя из предоставленных данных об ошибке." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1151 ++#: ../src/plugins/reporter-bugzilla.c:1152 + msgid "Checking for duplicates" + msgstr "Поиск дубликатов" + ++#: ../src/plugins/reporter-bugzilla.c:1201 ++#, c-format ++msgid "" ++"You have requested to make your data accessible only to a specific group and " ++"this bug is a duplicate of bug: %s/%u In case of bug duplicates a new " ++"comment is added to the original bug report but access to the comments " ++"cannot be restricted to a specific group. Would you like to open a new bug " ++"report and close it as DUPLICATE of the original one? Otherwise, the bug " ++"reporting procedure will be terminated." ++msgstr "" ++"Вы запросили сделать ваши данные доступными только для определенной группы, " ++"а эта ошибка является дубликатом следующей ошибки: %s/%u В случае " ++"дублирующихся ошибок к исходному отчету об ошибке добавляется новый " ++"комментарий, но доступ к комментариям не может быть ограничен определенной " ++"группой. Хотите открыть новый отчет об ошибке и закрыть его как ДУБЛИКАТ " ++"исходного отчета? В противном случае процедура создания отчета об ошибке " ++"будет прервана." ++ + # translation auto-copied from project libreport, version master, document libreport + #. Create new bug +-#: ../src/plugins/reporter-bugzilla.c:1197 ++#: ../src/plugins/reporter-bugzilla.c:1228 + msgid "Creating a new bug" + msgstr "Создаётся новый запрос" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1218 ++#: ../src/plugins/reporter-bugzilla.c:1249 + msgid "Failed to create a new bug." + msgstr "Не удалось создать новый запрос" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1229 ++#: ../src/plugins/reporter-bugzilla.c:1260 + #, c-format + msgid "Adding External URL to bug %i" + msgstr "Добавление внешних ссылок в отчет %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1235 ++#: ../src/plugins/reporter-bugzilla.c:1266 + #, c-format + msgid "Adding attachments to bug %i" + msgstr "Присоединяются файлы к %i" + ++#: ../src/plugins/reporter-bugzilla.c:1280 ++#, c-format ++msgid "Closing bug %i as duplicate of bug %i" ++msgstr "Закрытие ошибки %i как дубликата ошибки %i" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1254 ++#: ../src/plugins/reporter-bugzilla.c:1292 + #, c-format + msgid "Bug is already reported: %i" + msgstr "Запрос уже существует: %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1297 ++#: ../src/plugins/reporter-bugzilla.c:1335 + #, c-format + msgid "Adding %s to CC list" + msgstr "%s добавляется в список получателей копии" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1314 ++#: ../src/plugins/reporter-bugzilla.c:1352 + #, c-format + msgid "Adding new comment to bug %d" + msgstr "Добавление комментария в %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1328 ++#: ../src/plugins/reporter-bugzilla.c:1366 + msgid "Attaching better backtrace" + msgstr "Добавление более подходящего протокола..." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1336 ++#: ../src/plugins/reporter-bugzilla.c:1374 + msgid "Found the same comment in the bug history, not adding a new one" + msgstr "Этот комментарий уже есть в отчете. Добавление отменено." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1344 ++#: ../src/plugins/reporter-bugzilla.c:1382 + #, c-format + msgid "Status: %s%s%s %s/show_bug.cgi?id=%u" + msgstr "Статус: %s%s%s %s/show_bug.cgi?id=%u" +@@ -1931,12 +2056,12 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/reporter-kerneloops.c:167 +-#: ../src/plugins/reporter-ureport.c:74 ++#: ../src/plugins/reporter-ureport.c:79 + msgid "Configuration file" + msgstr "Файл конфигурации" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:59 ++#: ../src/plugins/reporter-mailx.c:83 + #, c-format + msgid "" + "Email address of %s was not specified. Would you like to do so now? If not, " +@@ -1946,50 +2071,58 @@ msgstr "" + "выбран «%s»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:66 ++#: ../src/plugins/reporter-mailx.c:90 + #, c-format + msgid "Please, type email address of %s:" + msgstr "Введите электронный адрес %s:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:73 ++#: ../src/plugins/reporter-mailx.c:97 + #, c-format + msgid "Can't continue without email address of %s" + msgstr "Для продолжения необходимо ввести электронный адрес %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:135 ++#: ../src/plugins/reporter-mailx.c:206 ../src/plugins/reporter-mailx.c:211 + msgid "Sending an email..." + msgstr "Отправляется сообщение..." + ++#: ../src/plugins/reporter-mailx.c:209 ++#, c-format ++msgid "Sending a notification email to: %s" ++msgstr "Отправка письма с уведомлением на: %s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:158 ++#: ../src/plugins/reporter-mailx.c:237 + #, c-format + msgid "Email was sent to: %s" + msgstr "Сообщение отправлено на адрес %s" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:178 ++#: ../src/plugins/reporter-mailx.c:258 + msgid "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Sends contents of a problem directory DIR via email\n" + "\n" + "If not specified, CONFFILE defaults to " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" +-"Отправляет содержимое каталога DIR по электронной почте.\n" ++"Отправляет содержимое каталога с данными ошибки DIR по электронной почте.\n" + "\n" +-"Если CONFILE не задан, по умолчанию используется " ++"Если значение CONFFILE не указано, по умолчанию используется " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:199 ../src/plugins/reporter-upload.c:250 ++#: ../src/plugins/reporter-mailx.c:281 ../src/plugins/reporter-upload.c:189 + msgid "Config file" + msgstr "Файл конфигурации" + ++#: ../src/plugins/reporter-mailx.c:282 ++msgid "Formatting file for an email" ++msgstr "Форматирование файла для электронного письма" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:200 ++#: ../src/plugins/reporter-mailx.c:283 + msgid "Notify only (Do not mark the report as sent)" + msgstr "Только оповестить(не отмечать отчёт как отправленный)" + +@@ -2031,37 +2164,37 @@ msgid "Can't open '%s' for writing. Please select another file:" + msgstr "Не удалось открыть «%s» для записи. Выберите другой файл:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was appended to %s" + msgstr "Отчёт добавлен в %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was stored to %s" + msgstr "Отчёт сохранён в %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:259 +-#: ../src/plugins/reporter-ureport.c:237 ++#: ../src/plugins/reporter-rhtsupport.c:294 ++#: ../src/plugins/reporter-ureport.c:297 + #, c-format + msgid "Server responded with an error: '%s'" + msgstr "Сервер вернул ошибку: «%s»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:319 ++#: ../src/plugins/reporter-rhtsupport.c:354 + msgid "Do you still want to create a RHTSupport ticket?" + msgstr "Вы все еще хотите создать запрос RHTSupport?" + +-#: ../src/plugins/reporter-rhtsupport.c:367 ++#: ../src/plugins/reporter-rhtsupport.c:402 + msgid "Invalid password or login. Please enter your Red Hat login:" + msgstr "Неверное имя или пароль. Введите ваше имя Red Hat:" + +-#: ../src/plugins/reporter-rhtsupport.c:435 ++#: ../src/plugins/reporter-rhtsupport.c:471 + msgid "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -2070,98 +2203,130 @@ msgid "" + "If not specified, CONFFILE defaults to " + msgstr "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" +-"или\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" ++"или:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +-"Отправляет отчет в службу технической поддержки Red Hat.\n" ++"Отправляет сведения о проблеме в RHTSupport.\n" + "\n" +-"Если файл CONFILE не задан, по умолчанию используется" ++"Если значение CONFFILE не указано, по умолчанию используется " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:473 ++#: ../src/plugins/reporter-rhtsupport.c:512 + msgid "Upload FILEs [to case with this ID]" + msgstr "Добавить файлы в запрос с этим идентификатором" + +-#: ../src/plugins/reporter-rhtsupport.c:475 ++#: ../src/plugins/reporter-rhtsupport.c:514 + msgid "Submit uReport before creating a new case" + msgstr "Отправить uReport, прежде чем создать отчет" + +-#: ../src/plugins/reporter-rhtsupport.c:476 ++#: ../src/plugins/reporter-rhtsupport.c:515 + msgid "Configuration file for uReport" + msgstr "Файл конфигурации uReport" + ++#: ../src/plugins/reporter-rhtsupport.c:516 ++msgid "Formatting file for a new case" ++msgstr "Форматирование файла для новой заявки" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:504 ++#: ../src/plugins/reporter-rhtsupport.c:545 + msgid "Login is not provided by configuration. Please enter your RHTS login:" + msgstr "В конфигурации не задано имя пользователя RHTS. Введите имя:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:573 ++#: ../src/plugins/reporter-rhtsupport.c:614 + #, c-format + msgid "Attaching '%s' to case '%s'" + msgstr "Добавление «%s» в запрос «%s»" + +-#: ../src/plugins/reporter-rhtsupport.c:610 ++#: ../src/plugins/reporter-rhtsupport.c:651 + msgid "Sending ABRT crash statistics data" + msgstr "Отправка статистических данных ABRT о сбое" + ++#: ../src/plugins/reporter-rhtsupport.c:674 ++msgid "" ++"The problem has only occurred once and the ability to reproduce the problem " ++"is unknown. Please ensure you will be able to provide detailed information " ++"to our Support Team. Would you like to continue and open a new support case?" ++msgstr "" ++"Проблема возникла только один раз, и способ ее воспроизведения неизвестен. " ++"Убедитесь, что сможете предоставить подробную информацию нашей команде " ++"поддержки. Хотите продолжить и открыть новую заявку для службы поддержки?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:690 ++#, c-format ++msgid "" ++"The crashed program was released by '%s'. Would you like to report the " ++"problem to Red Hat Support?" ++msgstr "" ++"Программа, в которой произошел сбой, была выпущена «%s». Хотите сообщить о " ++"проблеме в службу поддержки Red Hat?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:708 ++#, c-format ++msgid "" ++"The program '%s' does not appear to be provided by Red Hat. Would you like " ++"to report the problem to Red Hat Support?" ++msgstr "" ++"Программа %s не предоставляется Red Hat. Хотите сообщить о проблеме в службу " ++"поддержки Red Hat?" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/reporter-rhtsupport.c:725 ++msgid "Can't create a temporary directory in " ++msgstr "Не удалось создать временный каталог в " ++ + # translation auto-copied from project libreport, version master, document libreport + #. Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing + #. error msg is already logged by dd_opendir +-#. Gzipping e.g. 0.5gig coredump takes a while. Let client know what we are doing +-#: ../src/plugins/reporter-rhtsupport.c:621 +-#: ../src/plugins/reporter-upload.c:52 ++#. Compressing e.g. 0.5gig coredump takes a while. Let client know what we are doing ++#: ../src/plugins/reporter-rhtsupport.c:793 ++#: ../src/plugins/reporter-upload.c:103 + msgid "Compressing data" + msgstr "Сжатие данных..." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:656 +-msgid "Can't create a temporary directory in " +-msgstr "Не удалось создать временный каталог в " +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:665 ++#: ../src/plugins/reporter-rhtsupport.c:801 + msgid "Can't create temporary file in " + msgstr "Не удалось создать временный файл в " + + # translation auto-copied from project libreport, version master, document libreport + #. Check for hints and show them if we have something +-#: ../src/plugins/reporter-rhtsupport.c:676 ++#: ../src/plugins/reporter-rhtsupport.c:812 + msgid "Checking for hints" + msgstr "Поиск существующих решений" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:686 ++#: ../src/plugins/reporter-rhtsupport.c:822 + msgid "Creating a new case" + msgstr "Создание нового запроса" + + # translation auto-copied from project libreport, version master, document libreport + #. How can we help user sorting out this problem? +-#: ../src/plugins/reporter-rhtsupport.c:697 ++#: ../src/plugins/reporter-rhtsupport.c:833 + msgid "Can't determine RH Support Product from problem data." + msgstr "" + "Не удалось определить продукт в списке технической поддержки Red Hat исходя " + "из данных об ошибке." + +-#: ../src/plugins/reporter-rhtsupport.c:753 ++#: ../src/plugins/reporter-rhtsupport.c:889 + msgid "Linking ABRT crash statistics record with the case" + msgstr "Связывание статистических данных ABRT с отчетом" + +-#: ../src/plugins/reporter-rhtsupport.c:766 ++#: ../src/plugins/reporter-rhtsupport.c:902 + #, c-format + msgid "Linking ABRT crash statistics record with contact email: '%s'" + msgstr "Связывание статистики ABRT с адресом %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:790 ++#: ../src/plugins/reporter-rhtsupport.c:926 + #, c-format + msgid "Adding comment to case '%s'" + msgstr "Добавление комментария к отчету «%s»" + + # translation auto-copied from project libreport, version master, document libreport + #. Attach the tarball of -d DIR +-#: ../src/plugins/reporter-rhtsupport.c:808 ++#: ../src/plugins/reporter-rhtsupport.c:944 + #, c-format + msgid "Attaching problem data to case '%s'" + msgstr "Присоединение данных об ошибке к «%s»" +@@ -2177,46 +2342,57 @@ msgid "Updates which possibly help: " + msgstr "Подходящие обновления:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:30 ++#: ../src/plugins/reporter-upload.c:29 + msgid "Can't continue without URL" + msgstr "Для продолжения необходимо указать URL" + +-#: ../src/plugins/reporter-upload.c:61 +-msgid "Upload URL is not provided by configuration. Please enter upload URL:" +-msgstr "Необходимо указать URL для отправки данных:" +- + #. Be permissive and nice, ask only once and don't check + #. the result. User can dismiss this prompt but the upload + #. may work somehow??? +-#: ../src/plugins/reporter-upload.c:164 ++#: ../src/plugins/reporter-upload.c:51 + msgid "Please enter password for uploading:" + msgstr "Чтобы отправить, введите пароль:" + + # translation auto-copied from project libreport, version master, document libreport + #. success +-#: ../src/plugins/reporter-upload.c:181 ++#: ../src/plugins/reporter-upload.c:120 + #, c-format + msgid "Archive is created: '%s'" + msgstr "Создан архив «%s»" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:222 ++#: ../src/plugins/reporter-upload.c:159 + msgid "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Uploads compressed tarball of problem directory DIR to URL.\n" + "If URL is not specified, creates tarball in " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" +-"Отправляет архив *.tar каталога DIR на заданный URL. \n" +-"Если адрес не задан, архив будет создан в " ++"Отправляет сжатый tar-архив каталога с данными ошибки DIR на URL-адрес.\n" ++"Если URL не указан, создает tar-архив в " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:251 ++#: ../src/plugins/reporter-upload.c:190 + msgid "Base URL to upload to" + msgstr "Базовый URL для размещения файлов" + ++#: ../src/plugins/reporter-upload.c:191 ++msgid "SSH public key file" ++msgstr "Файл открытого ключа SSH" ++ ++#: ../src/plugins/reporter-upload.c:192 ++msgid "SSH private key file" ++msgstr "Файл закрытого ключа SSH" ++ ++#: ../src/plugins/reporter-upload.c:221 ++msgid "" ++"Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:" ++"" ++msgstr "" ++"Введите URL-адрес (scp, ftp и др.), на который будут экспортированы данные " ++"проблемы:" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Kerneloops.xml.in.h:1 + msgid "Kerneloops.org" +@@ -2342,11 +2518,11 @@ msgstr "Имя пользователя Red Hat" + msgid "Red Hat customer password" + msgstr "Пароль пользователя Red Hat" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:9 ++#: ../src/plugins/report_RHTSupport.xml.in.h:7 + msgid "Submit uReport" + msgstr "Отправлять uReport" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:10 ++#: ../src/plugins/report_RHTSupport.xml.in.h:8 + msgid "" + "Submit <a href=\"https://access.redhat.com/articles/642323\">micro-" + "report</a> when creating a new case." +@@ -2355,18 +2531,18 @@ msgstr "" + "642323\">микроотчет</a> при создании нового запроса." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_RHTSupport.xml.in.h:9 + msgid "RH Portal URL" + msgstr "Адрес портала Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_RHTSupport.xml.in.h:10 + msgid "Address of the Red Hat support portal" + msgstr "Адрес портала поддержки Red Hat" + + #: ../src/plugins/report_Uploader.xml.in.h:1 + msgid "Report Uploader" +-msgstr "Report Uploader" ++msgstr "Средство отправки отчетов" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Uploader.xml.in.h:2 +@@ -2416,6 +2592,22 @@ msgstr "FTP-прокси" + msgid "Sets the proxy server to use for FTP" + msgstr "Выбирает прокси-сервер для использования с FTP" + ++#: ../src/plugins/report_Uploader.xml.in.h:16 ++msgid "SSH Public key file" ++msgstr "Файл открытого ключа SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:17 ++msgid "Use this field to specify SSH public keyfile" ++msgstr "В этом поле укажите файл открытого ключа SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:18 ++msgid "SSH Private key file" ++msgstr "Файл закрытого ключа SSH" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:19 ++msgid "Use this field to specify SSH private keyfile" ++msgstr "В этом поле укажите файл закрытого ключа SSH" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_uReport.xml.in.h:1 + msgid "uReport" +@@ -2499,51 +2691,51 @@ msgid "Bugzilla couldn't find parent of bug %d" + msgstr "Родительский запрос для %d не найден." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/rhbz.c:893 ++#: ../src/plugins/rhbz.c:916 + msgid "Bug.search(quicksearch) return value did not contain member 'bugs'" + msgstr "Поиск Bug.search(quicksearch) не вернул результатов типа 'bugs'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:68 ++#: ../src/plugins/reporter-ureport.c:73 + msgid "Specify server URL" + msgstr "Укажите URL сервера" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:70 ++#: ../src/plugins/reporter-ureport.c:75 + msgid "Allow insecure connection to ureport server" + msgstr "Разрешить небезопасное соединение с сервером ureport" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:71 ++#: ../src/plugins/reporter-ureport.c:76 + msgid "Use client authentication" + msgstr "Использовать аутентификацию клиента" + +-#: ../src/plugins/reporter-ureport.c:72 ++#: ../src/plugins/reporter-ureport.c:77 + msgid "Use HTTP Authentication" + msgstr "Использовать аутентификацию HTTP" + +-#: ../src/plugins/reporter-ureport.c:73 ++#: ../src/plugins/reporter-ureport.c:78 + msgid "Additional files included in 'auth' key" + msgstr "Дополнительные файлы в ключе «auth»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:76 ++#: ../src/plugins/reporter-ureport.c:81 + msgid "bthash of uReport to attach (conflicts with -A)" + msgstr "bthash uReport для вложения (не используется вместе с -A)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:78 ++#: ../src/plugins/reporter-ureport.c:83 + msgid "attach to a bthash from reported_to (conflicts with -a)" + msgstr "вложить bthash из «reported_to» (не используется вместе с -a)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:80 ++#: ../src/plugins/reporter-ureport.c:85 + msgid "contact e-mail address (requires -a|-A, conflicts with -E)" + msgstr "" + "контактный электронный адрес (требует -a|-A, не используется вместе с -E)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:82 ++#: ../src/plugins/reporter-ureport.c:87 + msgid "" + "contact e-mail address from environment or configuration file (requires -a|-" + "A, conflicts with -e)" +@@ -2552,22 +2744,52 @@ msgstr "" + "a|-A, не используется вместе с -e)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:84 ++#: ../src/plugins/reporter-ureport.c:89 + msgid "attach RHBZ bug (requires -a|-A, conflicts with -B)" + msgstr "вложить отчет Bugzilla (требует -a|-A, не используется вместе с -B)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:86 ++#: ../src/plugins/reporter-ureport.c:91 + msgid "" + "attach last RHBZ bug from reported_to (requires -a|-A, conflicts with -b)" + msgstr "" + "вложить последний отчет Bugzilla из reported_to (требует -a|-A, не " + "используется вместе с -b)" + +-#: ../src/plugins/reporter-ureport.c:91 ++#: ../src/plugins/reporter-ureport.c:95 ++msgid "attach value (requires -a|-A and -T, conflicts with -L)" ++msgstr "присоединить значение (требует -a|-A и -T, конфликтует с -L)" ++ ++#: ../src/plugins/reporter-ureport.c:97 ++msgid "" ++"attach data of FIELD [URL] of the last report result (requires -a|-A, -r and " ++"-T, conflicts with -l)" ++msgstr "" ++"присоединить данные поля FIELD [URL] из результата последнего отчета " ++"(требует -a|-A, -r и -T, конфликтует с -l)" ++ ++#: ../src/plugins/reporter-ureport.c:100 ++msgid "" ++"use REPORT_RESULT_TYPE when looking for FIELD in reported_to (used only with " ++"-L)" ++msgstr "" ++"использовать REPORT_RESULT_TYPE при поиске FIELD в поле reported_to " ++"(используется только с -L)" ++ ++#: ../src/plugins/reporter-ureport.c:102 ++msgid "" ++"attach DATA as ureporte attachment ATTACHMENT_TYPE (used only with -l|-L)" ++msgstr "" ++"присоединить DATA как вложение ATTACHMENT_TYPE для ureport (используется " ++"только с -l|-L)" ++ ++#: ../src/plugins/reporter-ureport.c:107 + msgid "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2578,39 +2800,52 @@ msgid "" + msgstr "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" + "\n" +-"Позволяет отправить микроотчет или добавить вложение.\n" ++"Отправляет микроотчет или добавляет вложение к микроотчету.\n" + "\n" +-"По умолчанию получает настройки из" ++"Считывает конфигурацию по умолчанию из " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:144 ++#: ../src/plugins/reporter-ureport.c:179 + msgid "This problem does not have an uReport assigned." + msgstr "Эта ошибка не генерирует uReport." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:157 ++#: ../src/plugins/reporter-ureport.c:192 + msgid "This problem has not been reported to Bugzilla." + msgstr "Об этой ошибке не сообщалось в Bugzilla." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:161 ++#: ../src/plugins/reporter-ureport.c:196 + #, c-format + msgid "Unable to find bug ID in bugzilla URL '%s'" + msgstr "Не удалось найти идентификатор отчета в ссылке Bugzilla «%s»" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:166 ++#: ../src/plugins/reporter-ureport.c:201 + #, c-format + msgid "Unable to parse bug ID from bugzilla URL '%s'" + msgstr "" + "Не удалось извлечь идентификатор отчета из адресной строки Bugzilla «%s»" + ++#: ../src/plugins/reporter-ureport.c:211 ++#, c-format ++msgid "This problem has not been reported to '%s'." ++msgstr "Отчет об этой проблеме не отправлялся в %s." ++ ++#: ../src/plugins/reporter-ureport.c:216 ++#, c-format ++msgid "The report result '%s' is missing URL." ++msgstr "В результате отчета «%s» отсутствует URL." ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:179 ++#: ../src/plugins/reporter-ureport.c:233 + msgid "" + "Neither environment variable 'uReport_ContactEmail' nor configuration option " + "'ContactEmail' is set" +@@ -2618,22 +2853,22 @@ msgstr "" + "Не заданы значения переменной окружения uReport_ContactEmail и параметра " + "ContactEmail" + +-#: ../src/plugins/reporter-ureport.c:185 ++#: ../src/plugins/reporter-ureport.c:239 + msgid "You need to specify bug ID, contact email or both" + msgstr "Необходимо указать ID отчета, электронный адрес или и то, и другое." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:203 ++#: ../src/plugins/reporter-ureport.c:263 + msgid "You need to specify bthash of the uReport to attach." + msgstr "Необходимо указать uReport bthash." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:208 ++#: ../src/plugins/reporter-ureport.c:268 + msgid "Not uploading an empty uReport" + msgstr "Пустой uReport не может быть отправлен." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:229 ++#: ../src/plugins/reporter-ureport.c:289 + msgid "This problem has already been reported." + msgstr "Об этой ошибке уже сообщено." + +@@ -2802,7 +3037,18 @@ msgid "Analyze the problem locally and send information via email" + msgstr "" + "Проанализировать проблему локально и отправить данные по электронной почте" + +-# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_uReport.xml.in.h:1 ++msgid "Submit anonymous crash report" ++msgstr "Отправить анонимный отчет о сбое" ++ ++#: ../src/workflows/workflow_uReport.xml.in.h:2 ++msgid "" ++"Submit anonymous crash report - I do not want to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Отправить анонимный отчет о сбое — я не хочу, чтобы служба поддержки Red Hat " ++"со мной связывалась" ++ + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:1 + #: ../src/workflows/workflow_RHELKerneloops.xml.in.h:1 + #: ../src/workflows/workflow_RHELPython.xml.in.h:1 +@@ -2810,58 +3056,65 @@ msgstr "" + #: ../src/workflows/workflow_RHELxorg.xml.in.h:1 + #: ../src/workflows/workflow_RHELLibreport.xml.in.h:1 + #: ../src/workflows/workflow_RHELJava.xml.in.h:1 +-msgid "Report to Red Hat Customer Portal" +-msgstr "Сообщить через портал пользователей Red Hat" ++msgid "Ask Red Hat Support for help" ++msgstr "Попросить помощь в службе поддержки Red Hat" + +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:2 ++#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 ++#: ../src/workflows/workflow_RHELPython.xml.in.h:2 ++#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 ++#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 ++#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 ++#: ../src/workflows/workflow_RHELJava.xml.in.h:2 ++msgid "" ++"Create new Red Hat Support case - I would like to be contacted by Red Hat " ++"Support" ++msgstr "" ++"Создать новую заявку для службы поддержки Red Hat Support — я хочу, чтобы " ++"служба поддержки Red Hat со мной связалась" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 ++msgid "Report to Red Hat Bugzilla" ++msgstr "Отправить в Red Hat Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:2 + msgid "Process the C/C++ crash using the Red Hat infrastructure" + msgstr "Проанализировать сбой C/C++ с использованием средств Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:2 + msgid "Process the kerneloops using the Red Hat infrastructure" + msgstr "Проанализировать kerneloops с использованием средств Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELPython.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:2 + msgid "Process the python exception using the Red Hat infrastructure" + msgstr "Проанализировать исключение Python с использованием средств Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:2 + msgid "Process the kernel crash using the Red Hat infrastructure" + msgstr "Проанализировать сбой ядра с использованием средств Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:2 + msgid "Process the X Server problem using the Red Hat infrastructure" + msgstr "Проанализировать ошибку X Server с использованием средств Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:2 + msgid "Process the problem using the Red Hat infrastructure" + msgstr "Обработать ошибку, используя средства Red Hat" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELJava.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:2 + msgid "Process the Java exception using the Red Hat infrastructure" + msgstr "Обработать исключение Java, используя средства Red Hat" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 +-msgid "Report to Red Hat Bugzilla" +-msgstr "Отправить в Red Hat Bugzilla" +diff --git a/po/zh_CN.po b/po/zh_CN.po +index b7193d1..27ef92d 100644 +--- a/po/zh_CN.po ++++ b/po/zh_CN.po +@@ -1,17 +1,18 @@ + # Leah Liu , 2015. #zanata ++# Leah Liu , 2016. #zanata + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2015-07-14 15:18+0200\n" ++"POT-Creation-Date: 2016-06-29 15:25+0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2015-07-19 08:13-0400\n" ++"PO-Revision-Date: 2016-08-24 12:54-0400\n" + "Last-Translator: Leah Liu \n" + "Language-Team: Chinese (China)\n" + "Language: zh-CN\n" +-"X-Generator: Zanata 3.6.2\n" ++"X-Generator: Zanata 3.9.5\n" + "Plural-Forms: nplurals=1; plural=0\n" + + # translation auto-copied from project libreport, version master, document libreport +@@ -22,10 +23,10 @@ msgid "" + " or: & [-vspy] -d PROBLEM_DIR\n" + " or: & [-vspy] -x PROBLEM_DIR" + msgstr "" +-"& [-vsp] -L[前缀] [问题目录]\n" +-" or: & [-vspy] -e 事件 问题目录\n" +-" or: & [-vspy] -d 问题目录\n" +-" or: & [-vspy] -x 问题目录" ++"& [-vsp] -L[PREFIX] [PROBLEM_DIR]\n" ++" or: & [-vspy] -e EVENT PROBLEM_DIR\n" ++" or: & [-vspy] -d PROBLEM_DIR\n" ++" or: & [-vspy] -x PROBLEM_DIR" + + # translation auto-copied from project libreport, version master, document libreport + #. short_name long_name value parameter_name help +@@ -207,37 +208,31 @@ msgstr "选择要运行的工作流:" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:87 +-#, python-brace-format + msgid "Extracting cpio from {0}" + msgstr "从 {0} 中提取 cpio" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:92 +-#, python-brace-format + msgid "Can't write to '{0}': {1}" + msgstr "无法写入 '{0}':{1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:107 +-#, python-brace-format + msgid "Can't extract package '{0}'" + msgstr "无法提取软件包 '{0}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:115 +-#, python-brace-format + msgid "Caching files from {0} made from {1}" + msgstr "从 {0} 缓存来自 {1} 的文件" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:134 +-#, python-brace-format + msgid "Can't extract files from '{0}'" + msgstr "无法从 '{0}' 中提取文件" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:147 +-#, python-brace-format + msgid "Can't remove '{0}': {1}" + msgstr "无法删除 '{0}':{1}" + +@@ -246,7 +241,6 @@ msgstr "无法删除 '{0}':{1}" + #. % (self.downloaded_pkgs + 1, self.total_pkgs, name, pct) + #. ) + #: ../src/client-python/debuginfo.py:194 ../src/client-python/debuginfo.py:205 +-#, python-brace-format + msgid "Downloading ({0} of {1}) {2}: {3:3}%" + msgstr "下载({1} 中的 {0}){2}:{3:3}%" + +@@ -293,7 +287,6 @@ msgstr "无法禁用异步下载,输出可能存在假象!" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:356 +-#, python-brace-format + msgid "Can't setup {0}: {1}, disabling" + msgstr "无法设置 {0}:{1},禁用" + +@@ -318,19 +311,16 @@ msgstr "检索文件列表出错:'{0!s}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:416 +-#, python-brace-format + msgid "Can't find packages for {0} debuginfo files" + msgstr "无法为 {0} debuginfo 文件找到软件包" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:418 +-#, python-brace-format + msgid "Packages to download: {0}" + msgstr "要下载的软件包:{0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:419 +-#, python-brace-format + msgid "Downloading {0:.2f}Mb, installed size: {1:.2f}Mb. Continue?" + msgstr "正在下载 {0:.2f}Mb,已安装:{1:.2f}Mb。继续吗?" + +@@ -342,14 +332,12 @@ msgstr "用户取消下载" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:434 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in tmp dir '{0}' ({1:.2f}Mb left). Continue?" + msgstr "警告:临时目录 '{0}' (剩余 {1:.2f}Mb)没有足够的空闲空间。继续?" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:443 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in cache dir '{0}' ({1:.2f}Mb left). " + "Continue?" +@@ -357,13 +345,11 @@ msgstr "警告:缓存目录 '{0}' (剩余 {1:.2f}Mb) 中没有足够的空闲 + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:469 +-#, python-brace-format + msgid "Cannot copy file '{0}': {1}" + msgstr "无法复制文件 '{0}': {1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:487 +-#, python-brace-format + msgid "Downloading package {0} failed" + msgstr "下载软件包 {0} 失败" + +@@ -378,7 +364,6 @@ msgstr "提取失败,中断下载......" + #. but it was appearing even if no packages were in fact extracted + #. (say, when there was one package, and it has download error). + #: ../src/client-python/debuginfo.py:504 +-#, python-brace-format + msgid "Removing {0}" + msgstr "正在删除 {0}" + +@@ -440,7 +425,7 @@ msgid "C_onfigure" + msgstr "配置(_O)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3472 ++#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3718 + msgid "_Close" + msgstr "关闭(_C)" + +@@ -471,7 +456,7 @@ msgstr "保密服务不可用,您的设置将不会被保存!" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gtk-helpers/event_config_dialog.c:321 + #: ../src/gtk-helpers/workflow_config_dialog.c:86 +-#: ../src/gui-wizard-gtk/wizard.c:822 ../src/gui-wizard-gtk/wizard.c:3101 ++#: ../src/gui-wizard-gtk/wizard.c:844 ../src/gui-wizard-gtk/wizard.c:3325 + msgid "_Cancel" + msgstr "取消(_C)" + +@@ -550,7 +535,7 @@ msgstr "" + msgid "Alternate GUI file" + msgstr "备用 GUI 文件" + +-#: ../src/gui-wizard-gtk/wizard.c:354 ++#: ../src/gui-wizard-gtk/wizard.c:378 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide the " +@@ -563,7 +548,7 @@ msgstr "" + "\n" + "有关配置的详情,请参考:https://access.redhat.com/site/articles/718083" + +-#: ../src/gui-wizard-gtk/wizard.c:357 ++#: ../src/gui-wizard-gtk/wizard.c:381 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide " +@@ -576,13 +561,13 @@ msgstr "" + "\n" + "了解更多有关配置的信息" + +-#: ../src/gui-wizard-gtk/wizard.c:373 ++#: ../src/gui-wizard-gtk/wizard.c:397 + #, c-format + msgid "Con_figure %s" + msgstr "配置(_f)%s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:400 ++#: ../src/gui-wizard-gtk/wizard.c:424 + #, c-format + msgid "" + "Need writable directory, but '%s' is not writable. Move it to '%s' and " +@@ -590,62 +575,79 @@ msgid "" + msgstr "需要可写入的目录,但 '%s' 不是可写入目录。将其移动到 '%s',并在移动后的数据中进行操作。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:813 ++#: ../src/gui-wizard-gtk/wizard.c:835 + msgid "View/edit a text file" + msgstr "查看/编辑文本文件" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:821 ++#: ../src/gui-wizard-gtk/wizard.c:843 + msgid "_Save" + msgstr "保存(_S)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1040 ++#: ../src/gui-wizard-gtk/wizard.c:1067 + msgid "" + "No reporting targets are defined for this problem. Check configuration in /" + "etc/libreport/*" + msgstr "尚未给此类问题指定报告目的地。检查位于 /etc/libreport/* 中的配置文件" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1077 ++#: ../src/gui-wizard-gtk/wizard.c:1104 + #, c-format + msgid "(requires: %s)" + msgstr "(需要: %s)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1091 ++#: ../src/gui-wizard-gtk/wizard.c:1118 + #, c-format + msgid "(not needed, data already exist: %s)" + msgstr "(不必要,数据已经存在: %s)" + ++#: ../src/gui-wizard-gtk/wizard.c:1217 ++msgid "" ++"Since crashes without a known reproducer can be difficult to diagnose, " ++"please provide a comprehensive description of the problem you have " ++"encountered." ++msgstr "由于系统故障无法出现,因此很难诊断,请提供您所遇到问题之完整描述。" ++ ++#: ../src/gui-wizard-gtk/wizard.c:1224 ++msgid "" ++"Please provide a short description of the problem and please include the " ++"steps you have used to reproduce the problem." ++msgstr "请提供该问题之简短描述,并包括您重现此问题的步骤。" ++ ++#: ../src/gui-wizard-gtk/wizard.c:1231 ++msgid "Please provide the steps you have used to reproduce the problem." ++msgstr "请提供用来重现此问题的步骤。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1277 ++#: ../src/gui-wizard-gtk/wizard.c:1349 + msgid "(click here to view/edit)" + msgstr "(点击这里查看/编辑)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1288 ++#: ../src/gui-wizard-gtk/wizard.c:1360 + #, c-format + msgid "(binary file, %llu bytes)" + msgstr "(二进制文件,%llu字节)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1395 ../src/report-newt/report-newt.c:334 ++#: ../src/gui-wizard-gtk/wizard.c:1467 ../src/report-newt/report-newt.c:334 + msgid "(no description)" + msgstr "(没有说明)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1403 ++#: ../src/gui-wizard-gtk/wizard.c:1475 + #, c-format + msgid "%llu bytes, %u files" + msgstr "%llu字节,%u个文件" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1647 ++#: ../src/gui-wizard-gtk/wizard.c:1752 + msgid "Processing was canceled" + msgstr "处理被取消" + +-#: ../src/gui-wizard-gtk/wizard.c:1851 ++#: ../src/gui-wizard-gtk/wizard.c:1956 + msgid "" + "Processing of the problem failed. This can have many reasons but there are " + "three most common:\n" +@@ -658,7 +660,7 @@ msgstr "" + "\t▫ 问题数据受损\n" + "\t▫ 无效配置" + +-#: ../src/gui-wizard-gtk/wizard.c:1860 ++#: ../src/gui-wizard-gtk/wizard.c:1965 + msgid "" + "If you want to update the configuration and try to report again, please open " + "Preferences item\n" +@@ -668,50 +670,61 @@ msgstr "如果要更新配置并尝试再次报告问题,请打开应用程序 + "并在应用配置更改后,点击 重新报告 按钮。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1978 ++#: ../src/gui-wizard-gtk/wizard.c:2089 + msgid "Processing was interrupted because the problem is not reportable." + msgstr "由于无法报告该问题而中断处理。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1988 ../src/gui-wizard-gtk/wizard.c:2057 ++#: ../src/gui-wizard-gtk/wizard.c:2099 ../src/gui-wizard-gtk/wizard.c:2168 + msgid "Processing failed." + msgstr "处理失败。" + + # translation auto-copied from project libreport, version master, document libreport + #. No next event, go to progress page and finish +-#: ../src/gui-wizard-gtk/wizard.c:1995 ../src/gui-wizard-gtk/wizard.c:2818 ++#: ../src/gui-wizard-gtk/wizard.c:2106 ../src/gui-wizard-gtk/wizard.c:3040 + msgid "Processing finished." + msgstr "处理结束。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1996 ++#: ../src/gui-wizard-gtk/wizard.c:2107 + msgid "Processing finished, please proceed to the next step." + msgstr "处理结束,请前往下一步骤。" + + # translation auto-copied from project libreport, version master, document libreport + #. TODO: better msg? +-#: ../src/gui-wizard-gtk/wizard.c:2054 ++#: ../src/gui-wizard-gtk/wizard.c:2165 + #, c-format + msgid "No processing for event '%s' is defined" + msgstr "没有定义针对事件 `%s' 的处理" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2068 ++#: ../src/gui-wizard-gtk/wizard.c:2179 + msgid "Processing interrupted: can't continue without writable directory." + msgstr "处理被中断: 目录不可写入,无法继续。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2105 ++#: ../src/gui-wizard-gtk/wizard.c:2216 + msgid "Processing..." + msgstr "处理中……" + ++#: ../src/gui-wizard-gtk/wizard.c:2297 ++msgid "" ++"Possible sensitive data detected, feel free to edit the report and remove " ++"them." ++msgstr "探测到可能的敏感数据,请根据需要编辑报告并删除该数据。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2198 ++#: ../src/gui-wizard-gtk/wizard.c:2337 + msgid "Cannot check backtrace rating because of invalid event name" + msgstr "由于无效的事件名,无法检查回溯评级" + ++#: ../src/gui-wizard-gtk/wizard.c:2869 ++#, c-format ++msgid "Failed to save file '%s'" ++msgstr "保存文件 '%s' 失败" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2838 ++#: ../src/gui-wizard-gtk/wizard.c:3060 + #, c-format + msgid "" + "Event '%s' requires permission to send possibly sensitive data.\n" +@@ -720,112 +733,133 @@ msgstr "事件 '%s' 请求允许发布可能包含敏感数据的文件。\n" + "您想要继续吗?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2886 ++#: ../src/gui-wizard-gtk/wizard.c:3108 + #, c-format + msgid "This problem should not be reported (it is likely a known problem). %s" + msgstr "该问题可能不应该汇报 (很有可能为已知问题)。%s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3102 ++#: ../src/gui-wizard-gtk/wizard.c:3326 + msgid "_Open" + msgstr "打开(_O)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3124 ++#: ../src/gui-wizard-gtk/wizard.c:3348 + #, c-format + msgid "'%s' is not an ordinary file" + msgstr "'%s' 不是普通文件" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3138 ++#: ../src/gui-wizard-gtk/wizard.c:3362 + msgid "You are trying to copy a file onto itself" + msgstr "您正在将文件复制到它本身" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3145 ++#: ../src/gui-wizard-gtk/wizard.c:3369 + #, c-format + msgid "Can't copy '%s': %s" + msgstr "无法复制 '%s':%s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3160 ++#: ../src/gui-wizard-gtk/wizard.c:3384 + #, c-format + msgid "Item '%s' already exists and is not modifiable" + msgstr "项目 '%s' 已存在且不可修改" + ++#: ../src/gui-wizard-gtk/wizard.c:3542 ++msgid "I have experienced this problem for the first time" ++msgstr "我是第一次遇到这个问题" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3545 ++msgid "I can reproduce this problem" ++msgstr "我可以重现这个问题" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3548 ++msgid "This problem occurs repeatedly" ++msgstr "这个问题反复出现" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3314 ++#: ../src/gui-wizard-gtk/wizard.c:3560 + msgid "Include" + msgstr "包括" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3325 ++#: ../src/gui-wizard-gtk/wizard.c:3571 + msgid "Name" + msgstr "名称" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3335 ++#: ../src/gui-wizard-gtk/wizard.c:3581 + msgid "Value" + msgstr "值" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3369 ++#: ../src/gui-wizard-gtk/wizard.c:3615 + msgid "Problem description" + msgstr "问题描述" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3370 ++#: ../src/gui-wizard-gtk/wizard.c:3616 + msgid "Select how to report this problem" + msgstr "选择如何汇报此问题" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3371 ++#: ../src/gui-wizard-gtk/wizard.c:3617 + msgid "Provide additional information" + msgstr "提供附加信息" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3372 ++#: ../src/gui-wizard-gtk/wizard.c:3618 + msgid "Review the data" + msgstr "审核数据" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3373 ++#: ../src/gui-wizard-gtk/wizard.c:3619 + msgid "Confirm data to report" + msgstr "确认要上传的汇报数据" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3374 ++#: ../src/gui-wizard-gtk/wizard.c:3620 + msgid "Processing" + msgstr "处理中" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3375 ++#: ../src/gui-wizard-gtk/wizard.c:3621 + msgid "Processing done" + msgstr "处理完成" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3474 ++#: ../src/gui-wizard-gtk/wizard.c:3720 + msgid "_Stop" + msgstr "停止(_S)" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3477 ++#: ../src/gui-wizard-gtk/wizard.c:3723 + msgid "Upload for analysis" + msgstr "上传并分析" + + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3480 ++#: ../src/gui-wizard-gtk/wizard.c:3726 + msgid "Repeat" + msgstr "重新报告" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3483 ++#: ../src/gui-wizard-gtk/wizard.c:3729 + msgid "_Forward" + msgstr "转发(_F)" + +-#: ../src/gui-wizard-gtk/wizard.c:3575 ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.c:3780 ++msgid "Restrict access to the report" ++msgstr "限制报告访问" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3785 ++msgid "Learn more about restricted access in the configuration" ++msgstr "了解更多有关配置中限制访问的信息" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3844 + msgid "" + "In order to enable the built-in screencasting functionality the package fros-" + "gnome has to be installed. Please run the following command if you want to " +@@ -837,30 +871,8 @@ msgstr "" + "\n" + "su -c \"yum install fros-gnome\"" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:1 +-msgid "" +-"Possible sensitive data detected, feel free to edit the report and remove " +-"them." +-msgstr "探测到可能的敏感数据,请根据需要编辑报告并删除该数据。" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:2 +-msgid "Restrict access to the report" +-msgstr "限制报告访问" +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:3 +-msgid "" +-"No one except Red Hat employees will be allowed to see the report with " +-"restricted access (not even you)" +-msgstr "除 Red Hat 员工外,不允许任何人查看有限制访问的报告(您也不可以)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:4 +-msgid "Read more about reports with restricted access" +-msgstr "阅读更多关于限制访问的内容" +- + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++#: ../src/gui-wizard-gtk/wizard.glade.h:1 + msgid "" + "On the following screens, you will be asked to describe how the problem " + "occurred, to choose how to analyze the problem (if needed), to review " +@@ -869,31 +881,50 @@ msgid "" + msgstr "在下面的页面中,会询问您该问题是如何发生的,选择如何分析该问题(如果有必要),查看收集的信息,并选择向哪里报告该问题。点击“前进”继续。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++#: ../src/gui-wizard-gtk/wizard.glade.h:2 + msgid "Details" + msgstr "详情" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:7 ++#: ../src/gui-wizard-gtk/wizard.glade.h:3 + msgid "" + "How did this problem happen (step-by-step)? How can it be reproduced? Any " + "additional comments useful for diagnosing the problem? Please use English if " + "possible." + msgstr "这个问题是如何发生的(具体步骤)?怎样才可以复制?是否有其他可帮助诊断该问题的附加注释?请尽量使用英语。" + ++#: ../src/gui-wizard-gtk/wizard.glade.h:4 ++msgid "How reproducible is this problem?" ++msgstr "如何重现这个问题?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++msgid "How it can be reproduced (one step per line)?" ++msgstr "如何重现这个问题(每行一步)?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++msgid "" ++"Please add a comprehensive description of the problem you have. This is a " ++"very long place holder." ++msgstr "请添加有关您所遇到问题的详细描述。在这里可以输入大量内容。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:8 ++#: ../src/gui-wizard-gtk/wizard.glade.h:7 + msgid "You need to fill the how to before you can proceed..." + msgstr "执行前您需要填写如何进行......" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++#: ../src/gui-wizard-gtk/wizard.glade.h:8 + msgid "" + "Your comments are not private. They may be included into publicly " + "visible problem reports." + msgstr "您的注释不是保密的。会将其包含在公开的问题报告中。" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++msgid "I don't know what caused this problem" ++msgstr "我不知道造成这个问题的原因" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:10 + msgid "If you don't know how to describe it, you can" + msgstr "如果您不知道如何描述,您可以" +@@ -905,64 +936,59 @@ msgstr "添加屏幕录像" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:12 +-msgid "I don't know what caused this problem" +-msgstr "我不知道造成这个问题的原因" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Use this button to generate more informative backtrace after you installed " + "additional debug packages" + msgstr "在您安装附加调试包后使用这个按钮来生成更多回溯信息" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:14 ++#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Please review the data before it gets reported. Depending on reporter " + "chosen, it may end up publicly visible." + msgstr "请在报告前检查数据。取决于选择的报告程序,内容可能会公开可见。" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:15 ++#: ../src/gui-wizard-gtk/wizard.glade.h:14 + msgid "Forbidden words" + msgstr "禁用单词" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:16 ++#: ../src/gui-wizard-gtk/wizard.glade.h:15 + msgid "Custom" + msgstr "自定义" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:17 ++#: ../src/gui-wizard-gtk/wizard.glade.h:16 + msgid "Clear the search bar to see the list of security sensitive words." + msgstr "清除搜索栏查看安全性敏感词列表" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:18 ++#: ../src/gui-wizard-gtk/wizard.glade.h:17 + msgid "file" + msgstr "文件" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:19 ++#: ../src/gui-wizard-gtk/wizard.glade.h:18 + msgid "data" + msgstr "数据" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:20 ++#: ../src/gui-wizard-gtk/wizard.glade.h:19 + msgid "Search" + msgstr "搜索" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:21 ++#: ../src/gui-wizard-gtk/wizard.glade.h:20 + msgid "Size:" + msgstr "大小:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:22 ++#: ../src/gui-wizard-gtk/wizard.glade.h:21 + msgid "Attach a file" + msgstr "附加文件" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:23 ++#: ../src/gui-wizard-gtk/wizard.glade.h:22 + msgid "I reviewed the data and _agree with submitting it" + msgstr "我已经检查了数据并且同意提交(_A)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:24 ++#: ../src/gui-wizard-gtk/wizard.glade.h:23 + msgid "" + "If you are reporting to a remote server, make sure you removed all private " + "data (such as usernames and passwords). Backtrace, command line, environment " +@@ -970,22 +996,22 @@ msgid "" + msgstr "如果您是要向远程服务器报告,请确定删除所有私人数据(不如用户名和密码)。Backtrace、命令行、环境变量是检查所需的常规项目。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:25 ++#: ../src/gui-wizard-gtk/wizard.glade.h:24 + msgid "Processing did not start yet" + msgstr "处理尚未开始" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:26 ++#: ../src/gui-wizard-gtk/wizard.glade.h:25 + msgid "Show log" + msgstr "显示日志" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:27 ++#: ../src/gui-wizard-gtk/wizard.glade.h:26 + msgid "Reporting has finished. You can close this window now." + msgstr "汇报已完成,您现在可以关闭这个窗口了。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:28 ++#: ../src/gui-wizard-gtk/wizard.glade.h:27 + msgid "" + "If you want to report the problem to a different destination, collect " + "additional information, or provide a better problem description and repeat " +@@ -993,17 +1019,17 @@ msgid "" + msgstr "如果您要向不同的地点报告这个问题、收集附加信息或者更好地描述这个问题并重复报告过程,请按“前进”。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1007 ++#: ../src/include/internal_libreport.h:1046 + msgid "Be verbose" + msgstr "详细输出" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1008 +-#: ../src/plugins/reporter-bugzilla.c:895 ++#: ../src/include/internal_libreport.h:1047 ++#: ../src/plugins/reporter-bugzilla.c:893 + #: ../src/plugins/reporter-kerneloops.c:166 +-#: ../src/plugins/reporter-mailx.c:198 ../src/plugins/reporter-print.c:56 +-#: ../src/plugins/reporter-rhtsupport.c:471 +-#: ../src/plugins/reporter-upload.c:249 ++#: ../src/plugins/reporter-mailx.c:280 ../src/plugins/reporter-print.c:56 ++#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-upload.c:188 + msgid "Problem directory" + msgstr "问题目录" + +@@ -1061,7 +1087,7 @@ msgid "'%s' is not correct file name" + msgstr "'%s' 不是正确的文件名" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/create_dump_dir.c:153 ++#: ../src/lib/create_dump_dir.c:150 + #, c-format + msgid "uid value is not valid: '%s'" + msgstr "UID 值无效: '%s'" +@@ -1072,85 +1098,115 @@ msgstr "UID 值无效: '%s'" + msgid "Uploaded: %llu of %llu kbytes" + msgstr "上传的:%llu kb 中的 %llu" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/curl.c:635 ++#: ../src/lib/curl.c:636 ++msgid "Ignoring URL without scheme and hostname" ++msgstr "将忽略没有方案和主机名的 URL" ++ ++#. Do not include the path part of the URL as it can contain sensitive data ++#. * in case of typos ++#: ../src/lib/curl.c:666 + #, c-format +-msgid "Sending %s to %s" +-msgstr "向 %s 发送 %s" ++msgid "Sending %s to %s//%s" ++msgstr "正在将 %s 发送至 %s//%s" + +-#: ../src/lib/curl.c:659 ++#: ../src/lib/curl.c:690 + #, c-format +-msgid "Please enter user name for '%s':" +-msgstr "请为 '%s' 输入用户名:" ++msgid "Please enter user name for '%s//%s':" ++msgstr "请为 '%s//%s' 输入用户名称:" + +-#: ../src/lib/curl.c:665 ++#: ../src/lib/curl.c:696 + #, c-format +-msgid "Please enter password for '%s':" +-msgstr "请为 '%s' 输入密码:" ++msgid "Please enter password for '%s//%s@%s':" ++msgstr "请为 '%s//%s@%s' 输入密码:" + +-# translation auto-copied from project libreport, version master, document libreport + #. This ends up a "reporting status message" in abrtd +-#: ../src/lib/curl.c:688 ++#: ../src/lib/curl.c:719 ++#, c-format ++msgid "Successfully created %s" ++msgstr "成功创建 %s" ++ ++#: ../src/lib/dump_dir.c:1545 ++msgid "Failed to open TAR writer" ++msgstr "打开 TAR 写入程序失败" ++ ++#: ../src/lib/dump_dir.c:1571 ++msgid "Failed to finalize TAR archive" ++msgstr "完成 TAR 归档失败" ++ ++#: ../src/lib/dump_dir.c:1581 ++msgid "Failed to close TAR writer" ++msgstr "关闭 TAR 写入程序失败" ++ ++#: ../src/lib/dump_dir.c:1591 ++#, c-format ++msgid "gzip killed with signal %d" ++msgstr "使用信号 %d 杀死 gzip" ++ ++#: ../src/lib/dump_dir.c:1597 + #, c-format +-msgid "Successfully sent %s to %s" +-msgstr "成功向 %s 发送 %s" ++msgid "gzip exited with %d" ++msgstr "使用 %d 退出 gzip" ++ ++#: ../src/lib/dump_dir.c:1600 ++msgid "gzip process failed" ++msgstr "gzip 进程失败" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:348 ++#: ../src/lib/event_config.c:382 + msgid "Missing mandatory value" + msgstr "缺少必需值" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:356 ++#: ../src/lib/event_config.c:390 + #, c-format + msgid "Invalid utf8 character '%c'" + msgstr "无效的 utf8 字符 ‘%c'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:369 ++#: ../src/lib/event_config.c:403 + #, c-format + msgid "Invalid number '%s'" + msgstr "无效的数字 '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:384 ++#: ../src/lib/event_config.c:418 + #, c-format + msgid "Invalid boolean value '%s'" + msgstr "无效的布尔值 '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:390 ++#: ../src/lib/event_config.c:424 + msgid "Unsupported option type" + msgstr "不支持的操作类型" + +-#: ../src/lib/event_config.c:463 ++#: ../src/lib/event_config.c:497 + msgid "Reporting disabled because the rating does not contain a number." + msgstr "由于分级栏中不包含数字而禁用报告。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:464 ++#: ../src/lib/event_config.c:498 + msgid "Please report this problem to ABRT project developers." + msgstr "请报告此问题给 ABRT 项目开发者。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:470 ++#: ../src/lib/event_config.c:504 + msgid "" + "The backtrace is incomplete, please make sure you provide the steps to " + "reproduce." + msgstr "回溯是不完整的,请确定您提供了重复该错误的完整步骤。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:471 ++#: ../src/lib/event_config.c:505 + msgid "The backtrace probably can't help developer to diagnose the bug." + msgstr "该回溯可能无法帮助开发者诊断 Bug。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:477 ++#: ../src/lib/event_config.c:511 + msgid "Reporting disabled because the backtrace is unusable." + msgstr "由于回溯不可用,已禁用汇报。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:481 ++#: ../src/lib/event_config.c:515 + #, c-format + msgid "" + "Please try to install debuginfo manually using the command: \"debuginfo-" +@@ -1158,12 +1214,27 @@ msgid "" + msgstr "请尝试使用命令: \"debuginfo-install %s\" 手动安装除错信息并再次尝试。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:483 ++#: ../src/lib/event_config.c:517 + msgid "A proper debuginfo is probably missing or the coredump is corrupted." + msgstr "可能丢失了正确的出错信息或者内核转储被污染。" + ++#: ../src/lib/iso_date_string.c:48 ++#, c-format ++msgid "String doesn't seem to be a date: '%s'" ++msgstr "字符串好像不是一个日期:'%s'" ++ ++#: ../src/lib/iso_date_string.c:53 ++#, c-format ++msgid "The date: '%s' has unrecognized suffix: '%s'" ++msgstr "日期:'%s' 包含无法识别的后缀:'%s'" ++ ++#: ../src/lib/iso_date_string.c:58 ++#, c-format ++msgid "The date: '%s' is out of UNIX time stamp range" ++msgstr "日期:'%s' 在 UNIX 时间戳范围以外" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:354 ++#: ../src/lib/ureport.c:395 + #, c-format + msgid "Your problem seems to be caused by %s\n" + "\n" +@@ -1173,49 +1244,59 @@ msgstr "您的问题似乎由 %s 导致\n" + "%s\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:357 ++#: ../src/lib/ureport.c:398 + msgid "Your problem seems to be caused by one of the following:\n" + msgstr "您的问题似乎由以下原因之一导致:\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:528 ++#: ../src/lib/ureport.c:570 + #, c-format + msgid "Failed to upload uReport to the server '%s' with curl: %s" + msgstr "无法使用 curl 上传 uReport 至服务器 '%s':%s" + ++#: ../src/lib/ureport.c:574 ++#, c-format ++msgid "Failed to upload uReport to the server '%s'" ++msgstr "将 uReport 上传到服务器 '%s' 失败" ++ ++#: ../src/lib/ureport.c:577 ++#, c-format ++msgid "Error: %s" ++msgstr "错误:%s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:534 ++#: ../src/lib/ureport.c:584 + #, c-format + msgid "The URL '%s' does not exist (got error 404 from server)" + msgstr "URL '%s' 不存在(服务器返回错误 404)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:540 ++#: ../src/lib/ureport.c:590 + #, c-format + msgid "The server at '%s' encountered an internal error (got error 500)" + msgstr "位于 '%s' 的服务器遇到内部错误(得知错误 500)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:546 ++#: ../src/lib/ureport.c:596 + #, c-format + msgid "The server at '%s' currently can't handle the request (got error 503)" + msgstr "位于 '%s' 的服务器当前无法处理请求(得到错误 503)" + + # translation auto-copied from project libreport, version master, document libreport + #. can't print better error message +-#: ../src/lib/ureport.c:555 ++#: ../src/lib/ureport.c:605 + #, c-format + msgid "Unexpected HTTP response from '%s': %d" + msgstr "'%s' 中的意外 HTTP 响应:%d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:564 ++#: ../src/lib/ureport.c:614 + #, c-format + msgid "Unable to parse response from ureport server at '%s'" + msgstr "无法解析位于 '%s' 的 ureport 服务器的响应" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:574 ++#: ../src/lib/ureport.c:624 + #, c-format + msgid "The response from '%s' has invalid format" + msgstr "来自 '%s' 的响应包含无效格式" +@@ -1223,18 +1304,18 @@ msgstr "来自 '%s' 的响应包含无效格式" + # translation auto-copied from project libreport, version master, document libreport + #. HTTP CODE 202 means that call was successful but the response + #. has an error message +-#: ../src/lib/ureport.c:580 ++#: ../src/lib/ureport.c:630 + #, c-format + msgid "Type mismatch has been detected in the response from '%s'" + msgstr "在从 '%s' 得到的响应中检测到类型不匹配" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:766 ../src/plugins/reporter-rhtsupport.c:198 ++#: ../src/lib/ureport.c:820 ../src/plugins/reporter-rhtsupport.c:233 + msgid "Failed on submitting the problem" + msgstr "提交问题失败" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:808 ++#: ../src/lib/ureport.c:862 + #, c-format + msgid "The server at '%s' responded with an error: '%s'" + msgstr "位于 '%s' 的服务器响应错误:'%s'" +@@ -1260,6 +1341,30 @@ msgid "Essential element '%s' is missing, can't continue" + msgstr "缺少重要元素 '%s',无法继续。" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:478 ../src/plugins/reporter-bugzilla.c:355 ++#, c-format ++msgid "Can't parse backtrace: %s" ++msgstr "无法解析回溯:%s" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:489 ../src/plugins/reporter-bugzilla.c:366 ++msgid "Can't generate stacktrace description (no crash thread?)" ++msgstr "无法生成堆栈跟踪描述 (没有崩溃线程?)" ++ ++#: ../src/lib/reported_to.c:52 ++msgid "Report result label mustn't be empty string." ++msgstr "报告结果标签不得为空白字符串。" ++ ++#: ../src/lib/reported_to.c:58 ++msgid "Report result label mustn't contain ':' character." ++msgstr "报告结果标签不得包含 ':' 字符。" ++ ++#: ../src/lib/reported_to.c:141 ++#, c-format ++msgid "Ignored invalid ISO date of report result '%s'" ++msgstr "忽略报告结果 '%s' 的无效 ISO 日期" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/run_event.c:791 + #, c-format + msgid "('%s' was killed by signal %u)\n" +@@ -1337,13 +1442,14 @@ msgstr "汇报至 Bugzilla 缺陷跟踪系统" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:3 +-msgid "Bugzilla URL" +-msgstr "Bugzilla URL" ++#: ../src/plugins/report_Uploader.xml.in.h:6 ++msgid "User name" ++msgstr "用户名" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:4 +-msgid "Address of Bugzilla server" +-msgstr "Bugzilla 服务器地址" ++msgid "Bugzilla account user name" ++msgstr "Bugzilla 账户用户名" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:5 +@@ -1356,79 +1462,92 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:6 +-#: ../src/plugins/report_Uploader.xml.in.h:6 +-msgid "User name" +-msgstr "用户名" ++#: ../src/plugins/report_RHTSupport.xml.in.h:5 ++#: ../src/plugins/report_Uploader.xml.in.h:8 ++msgid "Password" ++msgstr "密码" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:7 +-msgid "Bugzilla account user name" +-msgstr "Bugzilla 账户用户名" ++msgid "Bugzilla account password" ++msgstr "Bugzilla 账户密码" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:8 +-#: ../src/plugins/report_RHTSupport.xml.in.h:5 +-#: ../src/plugins/report_Uploader.xml.in.h:8 +-msgid "Password" +-msgstr "密码" ++msgid "Restrict access" ++msgstr "访问限制" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:9 +-msgid "Bugzilla account password" +-msgstr "Bugzilla 账户密码" ++msgid "" ++"Restrict access to the created bugzilla ticket allowing only users from " ++"specified groups to view it (see advanced settings for more details)" ++msgstr "通过用户组限制可访问 Bug 的用户(了解更多请进入高级选项)" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:10 +-#: ../src/plugins/report_RHTSupport.xml.in.h:7 +-#: ../src/plugins/report_uReport.xml.in.h:7 +-msgid "Verify SSL" +-msgstr "确认 SSL" ++msgid "Groups" ++msgstr "组" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:11 +-#: ../src/plugins/report_RHTSupport.xml.in.h:8 +-#: ../src/plugins/report_uReport.xml.in.h:8 +-msgid "Check SSL key validity" +-msgstr "查看 SSL 密钥是否可用" ++msgid "" ++"Restrict the access to specified groups <a href=\"https://github.com/abrt/" ++"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++msgstr "" ++"仅限特定组访问 <a href=\"https://github.com/abrt/abrt/wiki/FAQ#creating-private-" ++"bugzilla-tickets\">?</a>" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:12 +-msgid "Restrict access" +-msgstr "访问限制" ++msgid "Bugzilla URL" ++msgstr "Bugzilla URL" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:13 +-msgid "" +-"Restrict access to the created bugzilla ticket allowing only users from " +-"specified groups to view it (see advanced settings for more details)" +-msgstr "通过用户组限制可访问 Bug 的用户(了解更多请进入高级选项)" ++msgid "Address of Bugzilla server" ++msgstr "Bugzilla 服务器地址" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:14 ++#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_uReport.xml.in.h:7 ++msgid "Verify SSL" ++msgstr "确认 SSL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_uReport.xml.in.h:8 ++msgid "Check SSL key validity" ++msgstr "查看 SSL 密钥是否可用" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:16 + msgid "Bugzilla product" + msgstr "Bugzilla 产品" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_Bugzilla.xml.in.h:17 + msgid "" + "Specify this only if you needed different product than specified in /etc/os-" + "release" + msgstr "只当您使用的产品和 /etc/os-release 中不同时在此处特别指出" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:16 ++#: ../src/plugins/report_Bugzilla.xml.in.h:18 + msgid "Bugzilla product version" + msgstr "Bugzilla 产品版本" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:17 ++#: ../src/plugins/report_Bugzilla.xml.in.h:19 + msgid "" + "Specify this only if you needed different product version than specified in /" + "etc/os-release" + msgstr "只当您所使用产品版本和 /etc/os-release 中不同时在此特别指出" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:18 ++#: ../src/plugins/report_Bugzilla.xml.in.h:20 + #: ../src/plugins/report_Kerneloops.xml.in.h:5 + #: ../src/plugins/report_RHTSupport.xml.in.h:13 + #: ../src/plugins/report_Uploader.xml.in.h:10 +@@ -1438,7 +1557,7 @@ msgid "HTTP Proxy" + msgstr "HTTP 代理" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:19 ++#: ../src/plugins/report_Bugzilla.xml.in.h:21 + #: ../src/plugins/report_Kerneloops.xml.in.h:6 + #: ../src/plugins/report_RHTSupport.xml.in.h:14 + #: ../src/plugins/report_Uploader.xml.in.h:11 +@@ -1448,7 +1567,7 @@ msgid "Sets the proxy server to use for HTTP" + msgstr "设定用于 HTTP 的代理服务器" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:20 ++#: ../src/plugins/report_Bugzilla.xml.in.h:22 + #: ../src/plugins/report_Kerneloops.xml.in.h:7 + #: ../src/plugins/report_RHTSupport.xml.in.h:15 + #: ../src/plugins/report_Uploader.xml.in.h:12 +@@ -1458,7 +1577,7 @@ msgid "HTTPS Proxy" + msgstr "HTTPS 代理" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:21 ++#: ../src/plugins/report_Bugzilla.xml.in.h:23 + #: ../src/plugins/report_Kerneloops.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:16 + #: ../src/plugins/report_Uploader.xml.in.h:13 +@@ -1468,20 +1587,6 @@ msgid "Sets the proxy server to use for HTTPS" + msgstr "设定用于 HTTPS 的代理服务器" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:22 +-msgid "Groups" +-msgstr "组" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:23 +-msgid "" +-"Restrict the access to specified groups <a href=\"https://github.com/abrt/" +-"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +-msgstr "" +-"仅限特定组访问 <a href=\"https://github.com/abrt/abrt/wiki/FAQ#creating-private-" +-"bugzilla-tickets\">?</a>" +- +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report.c:37 + msgid "" + "& [-v] --target TARGET --ticket ID FILE...\n" +@@ -1515,55 +1620,44 @@ msgid "Ticket/case ID" + msgstr "Ticket/案例 ID" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:355 +-#, c-format +-msgid "Can't parse backtrace: %s" +-msgstr "无法解析回溯:%s" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:366 +-msgid "Can't generate stacktrace description (no crash thread?)" +-msgstr "无法生成堆栈跟踪描述 (没有崩溃线程?)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:764 ++#: ../src/plugins/reporter-bugzilla.c:762 + msgid "" + "Warning, private ticket groups already specified as cmdline argument, " + "ignoring the env variable and configuration" + msgstr "警告,已在命令行参数指定私有标签组,忽略环境变量和配置" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:775 +-#: ../src/plugins/reporter-rhtsupport.c:342 ++#: ../src/plugins/reporter-bugzilla.c:773 ++#: ../src/plugins/reporter-rhtsupport.c:377 + msgid "Can't continue without login" + msgstr "需要登录名才可继续" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:788 +-#: ../src/plugins/reporter-rhtsupport.c:355 ++#: ../src/plugins/reporter-bugzilla.c:786 ++#: ../src/plugins/reporter-rhtsupport.c:390 + msgid "Can't continue without password" + msgstr "需要密码才可继续" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:797 ++#: ../src/plugins/reporter-bugzilla.c:795 + #, c-format + msgid "Logging into Bugzilla at %s" + msgstr "在 %s 登录到 Bugzilla" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:801 ++#: ../src/plugins/reporter-bugzilla.c:799 + msgid "Invalid password or login. Please enter your BZ login:" + msgstr "无效的密码或登录名。请输入您的 BZ 登录名:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:804 +-#: ../src/plugins/reporter-rhtsupport.c:369 ++#: ../src/plugins/reporter-bugzilla.c:802 ++#: ../src/plugins/reporter-rhtsupport.c:404 + #, c-format + msgid "Invalid password or login. Please enter the password for '%s':" + msgstr "无效的密码或登录名。请输入 '%s' 的密码:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:823 ++#: ../src/plugins/reporter-bugzilla.c:821 + msgid "" + "\n" + "& [-vbf] [-g GROUP-NAME]... [-c CONFFILE]... [-F FMTFILE] [-A FMTFILE2] -d " +@@ -1645,75 +1739,76 @@ msgstr "" + "如果未指定,配置文件默认为" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:896 +-#: ../src/plugins/reporter-rhtsupport.c:472 ++#: ../src/plugins/reporter-bugzilla.c:894 ++#: ../src/plugins/reporter-rhtsupport.c:511 + msgid "Configuration file (may be given many times)" + msgstr "配置文件(可在任意时间给出)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:897 ++#: ../src/plugins/reporter-bugzilla.c:895 + msgid "Formatting file for initial comment" + msgstr "格式化文件用于首次评论" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:898 ++#: ../src/plugins/reporter-bugzilla.c:896 + msgid "Formatting file for duplicates" + msgstr "格式化文件用于副本" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-bugzilla.c:897 + msgid "Attach FILEs [to bug with this ID]" + msgstr "附加 FILE [可选指定 ID 的 Bug]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:900 ++#: ../src/plugins/reporter-bugzilla.c:898 + msgid "When creating bug, attach binary files too" + msgstr "生成 Bug 时也请附加二进制文件" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:901 +-#: ../src/plugins/reporter-rhtsupport.c:474 ++#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-rhtsupport.c:513 + msgid "Force reporting even if this problem is already reported" + msgstr "即使已经报告过该问题依然强行报告" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:902 ++#: ../src/plugins/reporter-bugzilla.c:900 + msgid "Add bugzilla user to CC list [of bug with this ID]" + msgstr "添加 Bugzilla 用户到[可选指定 ID 的 Bug]抄送列表上" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:903 ++#: ../src/plugins/reporter-bugzilla.c:901 + msgid "Print BUG_ID which has given DUPHASH" + msgstr "打印具备 DUPHASH 的 BUG_ID" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:904 ++#: ../src/plugins/reporter-bugzilla.c:902 + msgid "A name of bug tracker for an additional URL from 'reported_to'" + msgstr "''reported_to'中附加 URL 所指 Bug 跟踪系统的名字" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:905 ++#: ../src/plugins/reporter-bugzilla.c:903 + msgid "Restrict access to this group only" + msgstr "仅限此组访问" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:906 ++#: ../src/plugins/reporter-bugzilla.c:904 ../src/plugins/reporter-mailx.c:284 ++#: ../src/plugins/reporter-rhtsupport.c:517 + msgid "Debug" + msgstr "除错" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:948 ++#: ../src/plugins/reporter-bugzilla.c:949 + msgid "Looking for similar problems in bugzilla" + msgstr "正在 Bugzilla 中寻找类似问题" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:975 ++#: ../src/plugins/reporter-bugzilla.c:976 + msgid "Login is not provided by configuration. Please enter your BZ login:" + msgstr "配置中未提供登录信息。请输入您的 BZ 登录名:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:981 +-#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-bugzilla.c:982 ++#: ../src/plugins/reporter-rhtsupport.c:551 + #, c-format + msgid "" + "Password is not provided by configuration. Please enter the password for " +@@ -1721,14 +1816,14 @@ msgid "" + msgstr "配置中未提供密码。请输入用于 '%s' 的密码:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1000 ++#: ../src/plugins/reporter-bugzilla.c:1001 + msgid "" + "Can't get Bugzilla ID because this problem has not yet been reported to " + "Bugzilla." + msgstr "无法取得 Bugzilla ID 因为该问题尚未汇报至 Bugzilla。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1007 ++#: ../src/plugins/reporter-bugzilla.c:1008 + #, c-format + msgid "" + "This problem has been reported to Bugzilla '%s' which differs from the " +@@ -1736,86 +1831,106 @@ msgid "" + msgstr "该问题已经汇报至 Bugzilla '%s' ,与预配置 Bugzilla '%s' 不同。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1011 ++#: ../src/plugins/reporter-bugzilla.c:1012 + #, c-format + msgid "Malformed url to Bugzilla '%s'." + msgstr "连接至 Bugzilla '%s' 的 URL 不规范。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1015 ++#: ../src/plugins/reporter-bugzilla.c:1016 + #, c-format + msgid "Using Bugzilla ID '%s'" + msgstr "使用 Bugzilla ID '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1049 +-#: ../src/plugins/reporter-bugzilla.c:1341 ++#: ../src/plugins/reporter-bugzilla.c:1050 ++#: ../src/plugins/reporter-bugzilla.c:1220 ++#: ../src/plugins/reporter-bugzilla.c:1379 + msgid "Logging out" + msgstr "正在退出" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1100 ++#: ../src/plugins/reporter-bugzilla.c:1101 + msgid "Can't determine Bugzilla Product from problem data." + msgstr "无法从问题数据中确定 Bugzilla 产品。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1151 ++#: ../src/plugins/reporter-bugzilla.c:1152 + msgid "Checking for duplicates" + msgstr "正在检查该问题是否已经汇报" + ++#: ../src/plugins/reporter-bugzilla.c:1201 ++#, c-format ++msgid "" ++"You have requested to make your data accessible only to a specific group and " ++"this bug is a duplicate of bug: %s/%u In case of bug duplicates a new " ++"comment is added to the original bug report but access to the comments " ++"cannot be restricted to a specific group. Would you like to open a new bug " ++"report and close it as DUPLICATE of the original one? Otherwise, the bug " ++"reporting procedure will be terminated." ++msgstr "" ++"您要求只能由特定组访问您的数据,且这个 bug 是 bug %s/%u 的重复。如果出现 bug 重复,可在最初的 bug " ++"报告中添加一条新注释,但那些注释仅限具体组可以访问。是否要新建一个 bug 报告,并将最初的那个报告作为 DUPLICATE 关闭。否则会终止 bug " ++"报告过程。" ++ + # translation auto-copied from project libreport, version master, document libreport + #. Create new bug +-#: ../src/plugins/reporter-bugzilla.c:1197 ++#: ../src/plugins/reporter-bugzilla.c:1228 + msgid "Creating a new bug" + msgstr "正在创建新 Bug" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1218 ++#: ../src/plugins/reporter-bugzilla.c:1249 + msgid "Failed to create a new bug." + msgstr "创建新 Bug 失败。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1229 ++#: ../src/plugins/reporter-bugzilla.c:1260 + #, c-format + msgid "Adding External URL to bug %i" + msgstr "添加外部 URL 至 Bug %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1235 ++#: ../src/plugins/reporter-bugzilla.c:1266 + #, c-format + msgid "Adding attachments to bug %i" + msgstr "在 Bug %i 中添加附件" + ++#: ../src/plugins/reporter-bugzilla.c:1280 ++#, c-format ++msgid "Closing bug %i as duplicate of bug %i" ++msgstr "将 bug %i 作为 bug %i 的重复 bug 关闭" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1254 ++#: ../src/plugins/reporter-bugzilla.c:1292 + #, c-format + msgid "Bug is already reported: %i" + msgstr "该 Bug 之前已经被汇报至:%i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1297 ++#: ../src/plugins/reporter-bugzilla.c:1335 + #, c-format + msgid "Adding %s to CC list" + msgstr "正在添加 %s 至抄送列表" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1314 ++#: ../src/plugins/reporter-bugzilla.c:1352 + #, c-format + msgid "Adding new comment to bug %d" + msgstr "正在向 Bug %d 中添加新留言" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1328 ++#: ../src/plugins/reporter-bugzilla.c:1366 + msgid "Attaching better backtrace" + msgstr "附加更好的 backtrace" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1336 ++#: ../src/plugins/reporter-bugzilla.c:1374 + msgid "Found the same comment in the bug history, not adding a new one" + msgstr "如果在 Bug 历史记录中找到相同的注释则不要再添加" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1344 ++#: ../src/plugins/reporter-bugzilla.c:1382 + #, c-format + msgid "Status: %s%s%s %s/show_bug.cgi?id=%u" + msgstr "状态:%s%s%s %s/show_bug.cgi?id=%u" +@@ -1853,12 +1968,12 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/reporter-kerneloops.c:167 +-#: ../src/plugins/reporter-ureport.c:74 ++#: ../src/plugins/reporter-ureport.c:79 + msgid "Configuration file" + msgstr "配置文件" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:59 ++#: ../src/plugins/reporter-mailx.c:83 + #, c-format + msgid "" + "Email address of %s was not specified. Would you like to do so now? If not, " +@@ -1866,50 +1981,58 @@ msgid "" + msgstr "未指定 %s 的电子邮箱。您想要现在制定吗?如果不,将使用 '%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:66 ++#: ../src/plugins/reporter-mailx.c:90 + #, c-format + msgid "Please, type email address of %s:" + msgstr "请输入 %s 的电子邮箱:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:73 ++#: ../src/plugins/reporter-mailx.c:97 + #, c-format + msgid "Can't continue without email address of %s" + msgstr "需要 %s 的电子邮箱才可继续" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:135 ++#: ../src/plugins/reporter-mailx.c:206 ../src/plugins/reporter-mailx.c:211 + msgid "Sending an email..." + msgstr "发送电子邮件......" + ++#: ../src/plugins/reporter-mailx.c:209 ++#, c-format ++msgid "Sending a notification email to: %s" ++msgstr "向 %s 发送通知邮件" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:158 ++#: ../src/plugins/reporter-mailx.c:237 + #, c-format + msgid "Email was sent to: %s" + msgstr "已发送电子邮件至:%s" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:178 ++#: ../src/plugins/reporter-mailx.c:258 + msgid "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Sends contents of a problem directory DIR via email\n" + "\n" + "If not specified, CONFFILE defaults to " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" +-"使用电子邮件发送问题目录 DIR 中的内容\n" ++"Sends contents of a problem directory DIR via email\n" + "\n" +-"如未指定,则 CONFFILE 默认为" ++"If not specified, CONFFILE defaults to " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:199 ../src/plugins/reporter-upload.c:250 ++#: ../src/plugins/reporter-mailx.c:281 ../src/plugins/reporter-upload.c:189 + msgid "Config file" + msgstr "配置文件" + ++#: ../src/plugins/reporter-mailx.c:282 ++msgid "Formatting file for an email" ++msgstr "为某个电子邮件格式化文件" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:200 ++#: ../src/plugins/reporter-mailx.c:283 + msgid "Notify only (Do not mark the report as sent)" + msgstr "仅通知(不将报告标记为已发送)" + +@@ -1950,37 +2073,37 @@ msgid "Can't open '%s' for writing. Please select another file:" + msgstr "无法打开 '%s' 进行编写。请选择另一个文件:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was appended to %s" + msgstr "报告已被附加至 %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was stored to %s" + msgstr "报告已被保存至 %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:259 +-#: ../src/plugins/reporter-ureport.c:237 ++#: ../src/plugins/reporter-rhtsupport.c:294 ++#: ../src/plugins/reporter-ureport.c:297 + #, c-format + msgid "Server responded with an error: '%s'" + msgstr "服务响应错误:'%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:319 ++#: ../src/plugins/reporter-rhtsupport.c:354 + msgid "Do you still want to create a RHTSupport ticket?" + msgstr "您还想生成 RHTSupport ticket 吗?" + +-#: ../src/plugins/reporter-rhtsupport.c:367 ++#: ../src/plugins/reporter-rhtsupport.c:402 + msgid "Invalid password or login. Please enter your Red Hat login:" +-msgstr "无效密码或登录。请输入您的 Red Hat 登录:" ++msgstr "无效密码或登录。请输入您的红帽登录:" + +-#: ../src/plugins/reporter-rhtsupport.c:435 ++#: ../src/plugins/reporter-rhtsupport.c:471 + msgid "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -1989,96 +2112,121 @@ msgid "" + "If not specified, CONFFILE defaults to " + msgstr "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" +-"或者:\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" ++"or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +-"向 RHTSupport 报告问题。\n" ++"Reports a problem to RHTSupport.\n" + "\n" +-"如果未指定,则 CONFFILE 默认为" ++"If not specified, CONFFILE defaults to " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:473 ++#: ../src/plugins/reporter-rhtsupport.c:512 + msgid "Upload FILEs [to case with this ID]" + msgstr "将 FILE 上传【到使用这个 ID 的问题单】" + +-#: ../src/plugins/reporter-rhtsupport.c:475 ++#: ../src/plugins/reporter-rhtsupport.c:514 + msgid "Submit uReport before creating a new case" + msgstr "创建新问题单前请提交 uReport" + +-#: ../src/plugins/reporter-rhtsupport.c:476 ++#: ../src/plugins/reporter-rhtsupport.c:515 + msgid "Configuration file for uReport" + msgstr "为 uReport 配置文件" + ++#: ../src/plugins/reporter-rhtsupport.c:516 ++msgid "Formatting file for a new case" ++msgstr "为新问题单格式化文件" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:504 ++#: ../src/plugins/reporter-rhtsupport.c:545 + msgid "Login is not provided by configuration. Please enter your RHTS login:" + msgstr "配置中未提供登录信息。请输入您的 RHTS 登录名:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:573 ++#: ../src/plugins/reporter-rhtsupport.c:614 + #, c-format + msgid "Attaching '%s' to case '%s'" + msgstr "在问题单 '%s' 中附加 '%s'" + +-#: ../src/plugins/reporter-rhtsupport.c:610 ++#: ../src/plugins/reporter-rhtsupport.c:651 + msgid "Sending ABRT crash statistics data" + msgstr "正在发送 ABRT 崩溃统计数据" + ++#: ../src/plugins/reporter-rhtsupport.c:674 ++msgid "" ++"The problem has only occurred once and the ability to reproduce the problem " ++"is unknown. Please ensure you will be able to provide detailed information " ++"to our Support Team. Would you like to continue and open a new support case?" ++msgstr "这个问题出现过一次,但尚不了解如何重现此问题。请确保可以为我们的支持团队提供详细信息。要继续并建立新支持问题单吗?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:690 ++#, c-format ++msgid "" ++"The crashed program was released by '%s'. Would you like to report the " ++"problem to Red Hat Support?" ++msgstr "'%s' 已发布有故障的程序。是否要向红帽支持报告这个问题?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:708 ++#, c-format ++msgid "" ++"The program '%s' does not appear to be provided by Red Hat. Would you like " ++"to report the problem to Red Hat Support?" ++msgstr "红帽未提供 '%s'。是否要向红帽报告这个问题?" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/reporter-rhtsupport.c:725 ++msgid "Can't create a temporary directory in " ++msgstr "无法创建临时目录于" ++ + # translation auto-copied from project libreport, version master, document libreport + #. Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing + #. error msg is already logged by dd_opendir +-#. Gzipping e.g. 0.5gig coredump takes a while. Let client know what we are doing +-#: ../src/plugins/reporter-rhtsupport.c:621 +-#: ../src/plugins/reporter-upload.c:52 ++#. Compressing e.g. 0.5gig coredump takes a while. Let client know what we are doing ++#: ../src/plugins/reporter-rhtsupport.c:793 ++#: ../src/plugins/reporter-upload.c:103 + msgid "Compressing data" + msgstr "正在压缩数据" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:656 +-msgid "Can't create a temporary directory in " +-msgstr "无法创建临时目录于" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:665 ++#: ../src/plugins/reporter-rhtsupport.c:801 + msgid "Can't create temporary file in " + msgstr "无法创建临时文件于" + + # translation auto-copied from project libreport, version master, document libreport + #. Check for hints and show them if we have something +-#: ../src/plugins/reporter-rhtsupport.c:676 ++#: ../src/plugins/reporter-rhtsupport.c:812 + msgid "Checking for hints" + msgstr "检查是否有提示" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:686 ++#: ../src/plugins/reporter-rhtsupport.c:822 + msgid "Creating a new case" + msgstr "创建一个新个案" + + # translation auto-copied from project libreport, version master, document libreport + #. How can we help user sorting out this problem? +-#: ../src/plugins/reporter-rhtsupport.c:697 ++#: ../src/plugins/reporter-rhtsupport.c:833 + msgid "Can't determine RH Support Product from problem data." + msgstr "无法确定问题数据中的红帽支持产品。" + +-#: ../src/plugins/reporter-rhtsupport.c:753 ++#: ../src/plugins/reporter-rhtsupport.c:889 + msgid "Linking ABRT crash statistics record with the case" + msgstr "正在将 ABRT 崩溃统计记录与该问题单关联" + +-#: ../src/plugins/reporter-rhtsupport.c:766 ++#: ../src/plugins/reporter-rhtsupport.c:902 + #, c-format + msgid "Linking ABRT crash statistics record with contact email: '%s'" + msgstr "正在将 ABRT 崩溃统计记录与联系人电子邮件关联:'%s'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:790 ++#: ../src/plugins/reporter-rhtsupport.c:926 + #, c-format + msgid "Adding comment to case '%s'" + msgstr "添加评论至个案 '%s'" + + # translation auto-copied from project libreport, version master, document libreport + #. Attach the tarball of -d DIR +-#: ../src/plugins/reporter-rhtsupport.c:808 ++#: ../src/plugins/reporter-rhtsupport.c:944 + #, c-format + msgid "Attaching problem data to case '%s'" + msgstr "添加问题数据至个案 '%s'" +@@ -2094,46 +2242,55 @@ msgid "Updates which possibly help: " + msgstr "可能有帮助的更新:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:30 ++#: ../src/plugins/reporter-upload.c:29 + msgid "Can't continue without URL" + msgstr "需要 URL 才可继续" + +-#: ../src/plugins/reporter-upload.c:61 +-msgid "Upload URL is not provided by configuration. Please enter upload URL:" +-msgstr "配置文件未提供上传 URL。请输入上传 URL:" +- + #. Be permissive and nice, ask only once and don't check + #. the result. User can dismiss this prompt but the upload + #. may work somehow??? +-#: ../src/plugins/reporter-upload.c:164 ++#: ../src/plugins/reporter-upload.c:51 + msgid "Please enter password for uploading:" + msgstr "请输入上传所需密码:" + + # translation auto-copied from project libreport, version master, document libreport + #. success +-#: ../src/plugins/reporter-upload.c:181 ++#: ../src/plugins/reporter-upload.c:120 + #, c-format + msgid "Archive is created: '%s'" + msgstr "生成归档:'%s'" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:222 ++#: ../src/plugins/reporter-upload.c:159 + msgid "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Uploads compressed tarball of problem directory DIR to URL.\n" + "If URL is not specified, creates tarball in " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" +-"将指定问题目录的压缩档案包上传至指定 URL。\n" +-"如果未指定 URL,创建压缩档案包 " ++"Uploads compressed tarball of problem directory DIR to URL.\n" ++"If URL is not specified, creates tarball in " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:251 ++#: ../src/plugins/reporter-upload.c:190 + msgid "Base URL to upload to" + msgstr "要上传的基本 URL" + ++#: ../src/plugins/reporter-upload.c:191 ++msgid "SSH public key file" ++msgstr "SSH 公钥文件" ++ ++#: ../src/plugins/reporter-upload.c:192 ++msgid "SSH private key file" ++msgstr "SSH 私钥文件" ++ ++#: ../src/plugins/reporter-upload.c:221 ++msgid "" ++"Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:" ++"" ++msgstr "请输入要导出问题数据的 URL(scp、ftp 等等):" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Kerneloops.xml.in.h:1 + msgid "Kerneloops.org" +@@ -2259,11 +2416,11 @@ msgstr "Red Hat 客户用户名" + msgid "Red Hat customer password" + msgstr "Red Hat 客户密码" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:9 ++#: ../src/plugins/report_RHTSupport.xml.in.h:7 + msgid "Submit uReport" + msgstr "提交 uReport" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:10 ++#: ../src/plugins/report_RHTSupport.xml.in.h:8 + msgid "" + "Submit <a href=\"https://access.redhat.com/articles/642323\">micro-" + "report</a> when creating a new case." +@@ -2272,12 +2429,12 @@ msgstr "" + "report</a>" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_RHTSupport.xml.in.h:9 + msgid "RH Portal URL" + msgstr "Red Hat 门户网站 URL" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_RHTSupport.xml.in.h:10 + msgid "Address of the Red Hat support portal" + msgstr "Red Hat 支持门户网站地址" + +@@ -2332,6 +2489,22 @@ msgstr "FTP 代理服务器" + msgid "Sets the proxy server to use for FTP" + msgstr "设定用于 FTP 的代理服务器" + ++#: ../src/plugins/report_Uploader.xml.in.h:16 ++msgid "SSH Public key file" ++msgstr "SSH 公钥文件" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:17 ++msgid "Use this field to specify SSH public keyfile" ++msgstr "使用这个字段指定 SSH 公钥文件" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:18 ++msgid "SSH Private key file" ++msgstr "SSH 私钥文件" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:19 ++msgid "Use this field to specify SSH private keyfile" ++msgstr "使用这个字段指定 SSH 私钥文件" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_uReport.xml.in.h:1 + msgid "uReport" +@@ -2413,70 +2586,94 @@ msgid "Bugzilla couldn't find parent of bug %d" + msgstr "Bugzilla 无法找到 Bug %d 的父类 Bug" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/rhbz.c:893 ++#: ../src/plugins/rhbz.c:916 + msgid "Bug.search(quicksearch) return value did not contain member 'bugs'" + msgstr "Bug.search(quicksearch) 返回值未包含成员 'bugs'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:68 ++#: ../src/plugins/reporter-ureport.c:73 + msgid "Specify server URL" + msgstr "指定服务器 URL" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:70 ++#: ../src/plugins/reporter-ureport.c:75 + msgid "Allow insecure connection to ureport server" + msgstr "允许使用非加密链接到 uReport 服务器" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:71 ++#: ../src/plugins/reporter-ureport.c:76 + msgid "Use client authentication" + msgstr "使用用户认证" + +-#: ../src/plugins/reporter-ureport.c:72 ++#: ../src/plugins/reporter-ureport.c:77 + msgid "Use HTTP Authentication" + msgstr "使用 HTTP 认证" + +-#: ../src/plugins/reporter-ureport.c:73 ++#: ../src/plugins/reporter-ureport.c:78 + msgid "Additional files included in 'auth' key" + msgstr "'auth' 密钥中包含的附加文件" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:76 ++#: ../src/plugins/reporter-ureport.c:81 + msgid "bthash of uReport to attach (conflicts with -A)" + msgstr "要附加的 uReport 的 bthash (与 -A 冲突)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:78 ++#: ../src/plugins/reporter-ureport.c:83 + msgid "attach to a bthash from reported_to (conflicts with -a)" + msgstr "从 reported_to 附加到 bthash (与 -a 冲突)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:80 ++#: ../src/plugins/reporter-ureport.c:85 + msgid "contact e-mail address (requires -a|-A, conflicts with -E)" + msgstr "联系电子邮件地址 (需要 -a|-A,与 -E 冲突)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:82 ++#: ../src/plugins/reporter-ureport.c:87 + msgid "" + "contact e-mail address from environment or configuration file (requires -a|-" + "A, conflicts with -e)" + msgstr "联系来自环境或配置文件中的电邮地址(需要 -a|-A,与 -e 冲突)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:84 ++#: ../src/plugins/reporter-ureport.c:89 + msgid "attach RHBZ bug (requires -a|-A, conflicts with -B)" + msgstr "附上 RHBZ bug (需要 -a|-A,与 -B 冲突)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:86 ++#: ../src/plugins/reporter-ureport.c:91 + msgid "" + "attach last RHBZ bug from reported_to (requires -a|-A, conflicts with -b)" + msgstr "从 reported_to 附加最新 RHBZ 问题 (需要 -a|-A,与 -b 冲突)" + +-#: ../src/plugins/reporter-ureport.c:91 ++#: ../src/plugins/reporter-ureport.c:95 ++msgid "attach value (requires -a|-A and -T, conflicts with -L)" ++msgstr "添加值 (需要 -a|-A 和 -T,与 -L 冲突)" ++ ++#: ../src/plugins/reporter-ureport.c:97 ++msgid "" ++"attach data of FIELD [URL] of the last report result (requires -a|-A, -r and " ++"-T, conflicts with -l)" ++msgstr "在最新报告结果中添加 FIELD [URL] 中的数据(需要 -a|-A、-r 和 -T,与 -l 冲突)" ++ ++#: ../src/plugins/reporter-ureport.c:100 ++msgid "" ++"use REPORT_RESULT_TYPE when looking for FIELD in reported_to (used only with " ++"-L)" ++msgstr "在 reported_to 中查找 FIELD 时使用 REPORT_RESULT_TYPE(仅可与 -L 配合使用)" ++ ++#: ../src/plugins/reporter-ureport.c:102 ++msgid "" ++"attach DATA as ureporte attachment ATTACHMENT_TYPE (used only with -l|-L)" ++msgstr "将 DATA 作为 ureporte 附件 ATTACHMENT_TYPE 添加(仅与 -l|-L 配合使用)" ++ ++#: ../src/plugins/reporter-ureport.c:107 + msgid "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2487,59 +2684,72 @@ msgid "" + msgstr "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" + "\n" +-"上传微报告或者微报告中添加附件\n" ++"Upload micro report or add an attachment to a micro report\n" + "\n" +-"读取默认配置于" ++"Reads the default configuration from " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:144 ++#: ../src/plugins/reporter-ureport.c:179 + msgid "This problem does not have an uReport assigned." + msgstr "该问题没有指派一个 uReport。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:157 ++#: ../src/plugins/reporter-ureport.c:192 + msgid "This problem has not been reported to Bugzilla." + msgstr "该问题尚未汇报至 Bugzilla。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:161 ++#: ../src/plugins/reporter-ureport.c:196 + #, c-format + msgid "Unable to find bug ID in bugzilla URL '%s'" + msgstr "无法在 Bugzilla URL '%s' 中找到 Bug ID" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:166 ++#: ../src/plugins/reporter-ureport.c:201 + #, c-format + msgid "Unable to parse bug ID from bugzilla URL '%s'" + msgstr "无法处理来自 Bugzilla URL '%s' 中的 Bug ID" + ++#: ../src/plugins/reporter-ureport.c:211 ++#, c-format ++msgid "This problem has not been reported to '%s'." ++msgstr "已向 '%s' 报告了这个问题。" ++ ++#: ../src/plugins/reporter-ureport.c:216 ++#, c-format ++msgid "The report result '%s' is missing URL." ++msgstr "报告结果 '%s' 缺少 URL。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:179 ++#: ../src/plugins/reporter-ureport.c:233 + msgid "" + "Neither environment variable 'uReport_ContactEmail' nor configuration option " + "'ContactEmail' is set" + msgstr "环境变量 'uReport_ContactEmail' 和配置选项 'ContactEmail' 都未设置" + +-#: ../src/plugins/reporter-ureport.c:185 ++#: ../src/plugins/reporter-ureport.c:239 + msgid "You need to specify bug ID, contact email or both" + msgstr "需要指定 bug ID、联系人电子邮件,或者二者均需指定。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:203 ++#: ../src/plugins/reporter-ureport.c:263 + msgid "You need to specify bthash of the uReport to attach." + msgstr "需要在附件中指定要添加 uReport 的 bthash。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:208 ++#: ../src/plugins/reporter-ureport.c:268 + msgid "Not uploading an empty uReport" + msgstr "无法上传空白的 uReport" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:229 ++#: ../src/plugins/reporter-ureport.c:289 + msgid "This problem has already been reported." + msgstr "已报告该问题。" + +@@ -2703,7 +2913,16 @@ msgstr "通过电子邮件发送该问题数据" + msgid "Analyze the problem locally and send information via email" + msgstr "本地分析该问题并通过电子邮件发送信息" + +-# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_uReport.xml.in.h:1 ++msgid "Submit anonymous crash report" ++msgstr "提交匿名故障报告" ++ ++#: ../src/workflows/workflow_uReport.xml.in.h:2 ++msgid "" ++"Submit anonymous crash report - I do not want to be contacted by Red Hat " ++"Support" ++msgstr "提交匿名故障报告,使用 -l 是不希望红帽支持团队与其联络。" ++ + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:1 + #: ../src/workflows/workflow_RHELKerneloops.xml.in.h:1 + #: ../src/workflows/workflow_RHELPython.xml.in.h:1 +@@ -2711,58 +2930,63 @@ msgstr "本地分析该问题并通过电子邮件发送信息" + #: ../src/workflows/workflow_RHELxorg.xml.in.h:1 + #: ../src/workflows/workflow_RHELLibreport.xml.in.h:1 + #: ../src/workflows/workflow_RHELJava.xml.in.h:1 +-msgid "Report to Red Hat Customer Portal" +-msgstr "向客户门户网站提交报告" ++msgid "Ask Red Hat Support for help" ++msgstr "向红帽支持寻求帮助" + +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:2 ++#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 ++#: ../src/workflows/workflow_RHELPython.xml.in.h:2 ++#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 ++#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 ++#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 ++#: ../src/workflows/workflow_RHELJava.xml.in.h:2 ++msgid "" ++"Create new Red Hat Support case - I would like to be contacted by Red Hat " ++"Support" ++msgstr "生成新的红帽支持问题单 - 希望红帽支持团队与我联络" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 ++msgid "Report to Red Hat Bugzilla" ++msgstr "向红帽 Bugzilla 提交报告" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:2 + msgid "Process the C/C++ crash using the Red Hat infrastructure" + msgstr "使用红帽基础架构处理 C/C++ 崩溃" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:2 + msgid "Process the kerneloops using the Red Hat infrastructure" + msgstr "使用红帽基础架构处理内核故障" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELPython.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:2 + msgid "Process the python exception using the Red Hat infrastructure" + msgstr "使用红帽基础架构处理 Python 异常" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:2 + msgid "Process the kernel crash using the Red Hat infrastructure" + msgstr "使用红帽基础架构处理内核崩溃" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:2 + msgid "Process the X Server problem using the Red Hat infrastructure" + msgstr "使用红帽基础架构处理 X 服务器问题" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:2 + msgid "Process the problem using the Red Hat infrastructure" + msgstr "使用红帽基础架构处理问题" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELJava.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:2 + msgid "Process the Java exception using the Red Hat infrastructure" + msgstr "使用红帽基础架构处理 Java 异常" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 +-msgid "Report to Red Hat Bugzilla" +-msgstr "向红帽 Bugzilla 提交报告" +diff --git a/po/zh_TW.po b/po/zh_TW.po +index 731c9b2..cb166fa 100644 +--- a/po/zh_TW.po ++++ b/po/zh_TW.po +@@ -1,17 +1,19 @@ + # Terry Chuang , 2015. #zanata ++# Chester Cheng , 2016. #zanata ++# Terry Chuang , 2016. #zanata + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2015-07-14 15:18+0200\n" ++"POT-Creation-Date: 2016-06-29 15:25+0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2015-07-17 07:46-0400\n" +-"Last-Translator: Terry Chuang \n" ++"PO-Revision-Date: 2016-09-01 05:29-0400\n" ++"Last-Translator: Copied by Zanata \n" + "Language-Team: Chinese (Taiwan)\n" + "Language: zh-TW\n" +-"X-Generator: Zanata 3.6.2\n" ++"X-Generator: Zanata 3.9.5\n" + "Plural-Forms: nplurals=1; plural=0\n" + + # translation auto-copied from project libreport, version master, document libreport +@@ -207,37 +209,31 @@ msgstr "選取要執行的工作流程:" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:87 +-#, python-brace-format + msgid "Extracting cpio from {0}" + msgstr "從 {0} 抽取 cpio" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:92 +-#, python-brace-format + msgid "Can't write to '{0}': {1}" + msgstr "無法寫入「{0}」:{1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:107 +-#, python-brace-format + msgid "Can't extract package '{0}'" + msgstr "無法抽出套件「{0}」" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:115 +-#, python-brace-format + msgid "Caching files from {0} made from {1}" + msgstr "將來自 {0} 的檔案放入快取,這是由 {1} 所產生" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:134 +-#, python-brace-format + msgid "Can't extract files from '{0}'" + msgstr "無法從「{0}」抽出檔案" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:147 +-#, python-brace-format + msgid "Can't remove '{0}': {1}" + msgstr "無法移除「{0}」:{1}" + +@@ -246,7 +242,6 @@ msgstr "無法移除「{0}」:{1}" + #. % (self.downloaded_pkgs + 1, self.total_pkgs, name, pct) + #. ) + #: ../src/client-python/debuginfo.py:194 ../src/client-python/debuginfo.py:205 +-#, python-brace-format + msgid "Downloading ({0} of {1}) {2}: {3:3}%" + msgstr "正在下載 ({0} / {1}) {2}:{3:3}%" + +@@ -293,7 +288,6 @@ msgstr "無法停用 async 下載,輸出可能包含人為瑕疵!" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:356 +-#, python-brace-format + msgid "Can't setup {0}: {1}, disabling" + msgstr "無法設置 {0}: {1},改停用" + +@@ -318,19 +312,16 @@ msgstr "擷取檔案清單時發生錯誤:'{0!s}'" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:416 +-#, python-brace-format + msgid "Can't find packages for {0} debuginfo files" + msgstr "找不到 {0} 個 debuginfo 檔案的套件" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:418 +-#, python-brace-format + msgid "Packages to download: {0}" + msgstr "要下載的軟體包:{0}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:419 +-#, python-brace-format + msgid "Downloading {0:.2f}Mb, installed size: {1:.2f}Mb. Continue?" + msgstr "下載 {0:.2f}Mb,已安裝大小:{1:.2f}Mb。是否繼續?" + +@@ -342,14 +333,12 @@ msgstr "下載程序已被使用者中斷" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:434 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in tmp dir '{0}' ({1:.2f}Mb left). Continue?" + msgstr "警告:暫存目錄「{0}」中的可用空間不足 (剩下 {1:.2f}Mb)。是否繼續?" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:443 +-#, python-brace-format + msgid "" + "Warning: Not enough free space in cache dir '{0}' ({1:.2f}Mb left). " + "Continue?" +@@ -357,13 +346,11 @@ msgstr "警告:快取目錄「{0}」中的可用空間不足 (剩下 {1:.2f}Mb + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:469 +-#, python-brace-format + msgid "Cannot copy file '{0}': {1}" + msgstr "無法複製檔案「{0}」:{1}" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/client-python/debuginfo.py:487 +-#, python-brace-format + msgid "Downloading package {0} failed" + msgstr "下載套件 {0} 失敗" + +@@ -378,7 +365,6 @@ msgstr "解壓縮失敗,放棄下載……" + #. but it was appearing even if no packages were in fact extracted + #. (say, when there was one package, and it has download error). + #: ../src/client-python/debuginfo.py:504 +-#, python-brace-format + msgid "Removing {0}" + msgstr "正在移除 {0}" + +@@ -440,7 +426,7 @@ msgid "C_onfigure" + msgstr "設定(_O)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3472 ++#: ../src/gtk-helpers/config_dialog.c:361 ../src/gui-wizard-gtk/wizard.c:3718 + msgid "_Close" + msgstr "關閉(_C)" + +@@ -471,7 +457,7 @@ msgstr "無法使用祕密服務,不會儲存您的設定!" + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gtk-helpers/event_config_dialog.c:321 + #: ../src/gtk-helpers/workflow_config_dialog.c:86 +-#: ../src/gui-wizard-gtk/wizard.c:822 ../src/gui-wizard-gtk/wizard.c:3101 ++#: ../src/gui-wizard-gtk/wizard.c:844 ../src/gui-wizard-gtk/wizard.c:3325 + msgid "_Cancel" + msgstr "取消(_C)" + +@@ -550,7 +536,7 @@ msgstr "" + msgid "Alternate GUI file" + msgstr "其他 GUI 檔案" + +-#: ../src/gui-wizard-gtk/wizard.c:354 ++#: ../src/gui-wizard-gtk/wizard.c:378 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide the " +@@ -563,7 +549,7 @@ msgstr "" + "\n" + "欲取得更多有關於此配置的相關資訊,請參閱:https://access.redhat.com/site/articles/718083" + +-#: ../src/gui-wizard-gtk/wizard.c:357 ++#: ../src/gui-wizard-gtk/wizard.c:381 + #, c-format + msgid "" + "%s is not properly configured. You can configure it now or provide " +@@ -577,13 +563,13 @@ msgstr "" + "取得更多有關於此配置的相關資訊" + +-#: ../src/gui-wizard-gtk/wizard.c:373 ++#: ../src/gui-wizard-gtk/wizard.c:397 + #, c-format + msgid "Con_figure %s" + msgstr "配置 %s(_F)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:400 ++#: ../src/gui-wizard-gtk/wizard.c:424 + #, c-format + msgid "" + "Need writable directory, but '%s' is not writable. Move it to '%s' and " +@@ -591,62 +577,79 @@ msgid "" + msgstr "需要可寫入的目錄,但「%s」並不是可寫入的目錄。將它移到「%s」並在移動後的資料中操作。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:813 ++#: ../src/gui-wizard-gtk/wizard.c:835 + msgid "View/edit a text file" + msgstr "檢視或編輯文字檔案" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:821 ++#: ../src/gui-wizard-gtk/wizard.c:843 + msgid "_Save" + msgstr "儲存(_S)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1040 ++#: ../src/gui-wizard-gtk/wizard.c:1067 + msgid "" + "No reporting targets are defined for this problem. Check configuration in /" + "etc/libreport/*" + msgstr "此問題未定義回報目標。請確認 /etc/libreport/* 中的組態" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1077 ++#: ../src/gui-wizard-gtk/wizard.c:1104 + #, c-format + msgid "(requires: %s)" + msgstr "(需要:%s)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1091 ++#: ../src/gui-wizard-gtk/wizard.c:1118 + #, c-format + msgid "(not needed, data already exist: %s)" + msgstr "(不需要,資料已經存在:%s)" + ++#: ../src/gui-wizard-gtk/wizard.c:1217 ++msgid "" ++"Since crashes without a known reproducer can be difficult to diagnose, " ++"please provide a comprehensive description of the problem you have " ++"encountered." ++msgstr "由於未提供重現步驟的當機情形有時較難以診斷,因此請就您遇到的問題提供完整描述。" ++ ++#: ../src/gui-wizard-gtk/wizard.c:1224 ++msgid "" ++"Please provide a short description of the problem and please include the " ++"steps you have used to reproduce the problem." ++msgstr "請簡短描述問題,並請包括您在重現問題時所採取的步驟。" ++ ++#: ../src/gui-wizard-gtk/wizard.c:1231 ++msgid "Please provide the steps you have used to reproduce the problem." ++msgstr "請提供您在重現問題時所採取的步驟。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1277 ++#: ../src/gui-wizard-gtk/wizard.c:1349 + msgid "(click here to view/edit)" + msgstr "(請點擊此處以檢視或編輯)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1288 ++#: ../src/gui-wizard-gtk/wizard.c:1360 + #, c-format + msgid "(binary file, %llu bytes)" + msgstr "(二元檔,%llu 位元組)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1395 ../src/report-newt/report-newt.c:334 ++#: ../src/gui-wizard-gtk/wizard.c:1467 ../src/report-newt/report-newt.c:334 + msgid "(no description)" + msgstr "(無描述)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1403 ++#: ../src/gui-wizard-gtk/wizard.c:1475 + #, c-format + msgid "%llu bytes, %u files" + msgstr "%llu 位元組,%u 個檔案" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1647 ++#: ../src/gui-wizard-gtk/wizard.c:1752 + msgid "Processing was canceled" + msgstr "已取消處理" + +-#: ../src/gui-wizard-gtk/wizard.c:1851 ++#: ../src/gui-wizard-gtk/wizard.c:1956 + msgid "" + "Processing of the problem failed. This can have many reasons but there are " + "three most common:\n" +@@ -659,7 +662,7 @@ msgstr "" + "\t▫ 問題資料損毀\n" + "\t▫ 配置無效" + +-#: ../src/gui-wizard-gtk/wizard.c:1860 ++#: ../src/gui-wizard-gtk/wizard.c:1965 + msgid "" + "If you want to update the configuration and try to report again, please open " + "Preferences item\n" +@@ -669,50 +672,61 @@ msgstr "若您希望更新配置並重新嘗試回報,請開啟應用程式選 + "項目,並在套用配置變更之後按下重複按鈕。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1978 ++#: ../src/gui-wizard-gtk/wizard.c:2089 + msgid "Processing was interrupted because the problem is not reportable." + msgstr "處理程序因問題無法回報而中斷。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1988 ../src/gui-wizard-gtk/wizard.c:2057 ++#: ../src/gui-wizard-gtk/wizard.c:2099 ../src/gui-wizard-gtk/wizard.c:2168 + msgid "Processing failed." + msgstr "處理失敗。" + + # translation auto-copied from project libreport, version master, document libreport + #. No next event, go to progress page and finish +-#: ../src/gui-wizard-gtk/wizard.c:1995 ../src/gui-wizard-gtk/wizard.c:2818 ++#: ../src/gui-wizard-gtk/wizard.c:2106 ../src/gui-wizard-gtk/wizard.c:3040 + msgid "Processing finished." + msgstr "處理完成。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:1996 ++#: ../src/gui-wizard-gtk/wizard.c:2107 + msgid "Processing finished, please proceed to the next step." + msgstr "處理完成,請繼續下個步驟。" + + # translation auto-copied from project libreport, version master, document libreport + #. TODO: better msg? +-#: ../src/gui-wizard-gtk/wizard.c:2054 ++#: ../src/gui-wizard-gtk/wizard.c:2165 + #, c-format + msgid "No processing for event '%s' is defined" + msgstr "未定義「%s」事件的處理動作" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2068 ++#: ../src/gui-wizard-gtk/wizard.c:2179 + msgid "Processing interrupted: can't continue without writable directory." + msgstr "處理中斷:若無可寫入的目錄便無法繼續" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2105 ++#: ../src/gui-wizard-gtk/wizard.c:2216 + msgid "Processing..." + msgstr "處理中..." + ++#: ../src/gui-wizard-gtk/wizard.c:2297 ++msgid "" ++"Possible sensitive data detected, feel free to edit the report and remove " ++"them." ++msgstr "已偵測到可能的敏感資料,請視需求編輯與移除報告。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2198 ++#: ../src/gui-wizard-gtk/wizard.c:2337 + msgid "Cannot check backtrace rating because of invalid event name" + msgstr "因為事件名稱無效而無法檢查追蹤資訊評等" + ++#: ../src/gui-wizard-gtk/wizard.c:2869 ++#, c-format ++msgid "Failed to save file '%s'" ++msgstr "無法儲存檔案「%s」" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2838 ++#: ../src/gui-wizard-gtk/wizard.c:3060 + #, c-format + msgid "" + "Event '%s' requires permission to send possibly sensitive data.\n" +@@ -721,112 +735,133 @@ msgstr "事件「%s」要求傳送可能具敏感資訊資料的許可。\n" + "您是否要繼續?" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:2886 ++#: ../src/gui-wizard-gtk/wizard.c:3108 + #, c-format + msgid "This problem should not be reported (it is likely a known problem). %s" + msgstr "此問題不應回報 (這很類似已知問題)。%s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3102 ++#: ../src/gui-wizard-gtk/wizard.c:3326 + msgid "_Open" + msgstr "開啟(_O)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3124 ++#: ../src/gui-wizard-gtk/wizard.c:3348 + #, c-format + msgid "'%s' is not an ordinary file" + msgstr "「%s」不是一般檔案" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3138 ++#: ../src/gui-wizard-gtk/wizard.c:3362 + msgid "You are trying to copy a file onto itself" + msgstr "您正試著將檔案複製到檔案自身之上" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3145 ++#: ../src/gui-wizard-gtk/wizard.c:3369 + #, c-format + msgid "Can't copy '%s': %s" + msgstr "無法複製「%s」:%s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3160 ++#: ../src/gui-wizard-gtk/wizard.c:3384 + #, c-format + msgid "Item '%s' already exists and is not modifiable" + msgstr "項目「%s」已存在,無法修改" + ++#: ../src/gui-wizard-gtk/wizard.c:3542 ++msgid "I have experienced this problem for the first time" ++msgstr "我第一次遇到這個問題" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3545 ++msgid "I can reproduce this problem" ++msgstr "我可以重現這個問題" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3548 ++msgid "This problem occurs repeatedly" ++msgstr "這個問題重複出現" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3314 ++#: ../src/gui-wizard-gtk/wizard.c:3560 + msgid "Include" + msgstr "包含" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3325 ++#: ../src/gui-wizard-gtk/wizard.c:3571 + msgid "Name" + msgstr "名稱" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3335 ++#: ../src/gui-wizard-gtk/wizard.c:3581 + msgid "Value" + msgstr "值" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3369 ++#: ../src/gui-wizard-gtk/wizard.c:3615 + msgid "Problem description" + msgstr "問題描述" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3370 ++#: ../src/gui-wizard-gtk/wizard.c:3616 + msgid "Select how to report this problem" + msgstr "請選取回報此問題的方式" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3371 ++#: ../src/gui-wizard-gtk/wizard.c:3617 + msgid "Provide additional information" + msgstr "提供額外資訊" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3372 ++#: ../src/gui-wizard-gtk/wizard.c:3618 + msgid "Review the data" + msgstr "檢視資料" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3373 ++#: ../src/gui-wizard-gtk/wizard.c:3619 + msgid "Confirm data to report" + msgstr "確認欲回報的資料" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3374 ++#: ../src/gui-wizard-gtk/wizard.c:3620 + msgid "Processing" + msgstr "處理中" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3375 ++#: ../src/gui-wizard-gtk/wizard.c:3621 + msgid "Processing done" + msgstr "處理完成" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.c:3474 ++#: ../src/gui-wizard-gtk/wizard.c:3720 + msgid "_Stop" + msgstr "停止(_S)" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3477 ++#: ../src/gui-wizard-gtk/wizard.c:3723 + msgid "Upload for analysis" + msgstr "上傳以供分析" + + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3480 ++#: ../src/gui-wizard-gtk/wizard.c:3726 + msgid "Repeat" + msgstr "重複" + + # translation auto-copied from project libreport, version master, document libreport + #. else gtk_widget_hide won't work +-#: ../src/gui-wizard-gtk/wizard.c:3483 ++#: ../src/gui-wizard-gtk/wizard.c:3729 + msgid "_Forward" + msgstr "前進(_F)" + +-#: ../src/gui-wizard-gtk/wizard.c:3575 ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.c:3780 ++msgid "Restrict access to the report" ++msgstr "限制報告的存取" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3785 ++msgid "Learn more about restricted access in the configuration" ++msgstr "瞭解更多有關組態中的受限存取" ++ ++#: ../src/gui-wizard-gtk/wizard.c:3844 + msgid "" + "In order to enable the built-in screencasting functionality the package fros-" + "gnome has to be installed. Please run the following command if you want to " +@@ -838,30 +873,8 @@ msgstr "" + "\n" + "su -c \"yum install fros-gnome\"" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:1 +-msgid "" +-"Possible sensitive data detected, feel free to edit the report and remove " +-"them." +-msgstr "已偵測到可能的敏感資料,請視需求編輯與移除報告。" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:2 +-msgid "Restrict access to the report" +-msgstr "限制報告的存取" +- +-#: ../src/gui-wizard-gtk/wizard.glade.h:3 +-msgid "" +-"No one except Red Hat employees will be allowed to see the report with " +-"restricted access (not even you)" +-msgstr "除了擁有特殊權限的 Red Hat 員工之外,沒有人能看見此報告(您也無法看見)" +- + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:4 +-msgid "Read more about reports with restricted access" +-msgstr "瞭解更多有關限制存取的資訊" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++#: ../src/gui-wizard-gtk/wizard.glade.h:1 + msgid "" + "On the following screens, you will be asked to describe how the problem " + "occurred, to choose how to analyze the problem (if needed), to review " +@@ -871,31 +884,50 @@ msgstr "" + "在接下來的畫面上,您將會被要求描述問題如何發生、選擇如何分析問題 (若有需要)、檢視蒐集的資料,以及選擇問題該向哪回報。請按下「下一步」以繼續進行。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++#: ../src/gui-wizard-gtk/wizard.glade.h:2 + msgid "Details" + msgstr "詳情" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:7 ++#: ../src/gui-wizard-gtk/wizard.glade.h:3 + msgid "" + "How did this problem happen (step-by-step)? How can it be reproduced? Any " + "additional comments useful for diagnosing the problem? Please use English if " + "possible." + msgstr "這問題是怎麼發生的 (詳述步驟)?如何再次產生此問題?任何說明可以幫助我們診斷問題?請儘可能使用英文。" + ++#: ../src/gui-wizard-gtk/wizard.glade.h:4 ++msgid "How reproducible is this problem?" ++msgstr "這個問題容易重現嗎?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:5 ++msgid "How it can be reproduced (one step per line)?" ++msgstr "可以如何重現問題 (每行一個步驟)?" ++ ++#: ../src/gui-wizard-gtk/wizard.glade.h:6 ++msgid "" ++"Please add a comprehensive description of the problem you have. This is a " ++"very long place holder." ++msgstr "請加入問題的完整描述,這個預留位置很長。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:8 ++#: ../src/gui-wizard-gtk/wizard.glade.h:7 + msgid "You need to fill the how to before you can proceed..." + msgstr "在繼續進行之前,您必須填入相關資訊..." + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++#: ../src/gui-wizard-gtk/wizard.glade.h:8 + msgid "" + "Your comments are not private. They may be included into publicly " + "visible problem reports." + msgstr "您的評註並非隱私資訊。 它們可能納入能被公開查看的問題回報中。" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/gui-wizard-gtk/wizard.glade.h:9 ++msgid "I don't know what caused this problem" ++msgstr "我不知道這問題是什麼造成的" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:10 + msgid "If you don't know how to describe it, you can" + msgstr "若您不知道如何描述,您可以" +@@ -907,64 +939,59 @@ msgstr "加入螢幕執演" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/gui-wizard-gtk/wizard.glade.h:12 +-msgid "I don't know what caused this problem" +-msgstr "我不知道這問題是什麼造成的" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Use this button to generate more informative backtrace after you installed " + "additional debug packages" + msgstr "使用此按鈕讓您在安裝額外的除錯套件後,產生更多追蹤訊息" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:14 ++#: ../src/gui-wizard-gtk/wizard.glade.h:13 + msgid "" + "Please review the data before it gets reported. Depending on reporter " + "chosen, it may end up publicly visible." + msgstr "在問題回報之前,請先檢視資料。根據回報者的選擇而定,您提供的資料最後可能供大眾公開檢視。" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:15 ++#: ../src/gui-wizard-gtk/wizard.glade.h:14 + msgid "Forbidden words" + msgstr "禁止的字串" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:16 ++#: ../src/gui-wizard-gtk/wizard.glade.h:15 + msgid "Custom" + msgstr "自訂" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:17 ++#: ../src/gui-wizard-gtk/wizard.glade.h:16 + msgid "Clear the search bar to see the list of security sensitive words." + msgstr "清除搜尋列以查看安全性敏感字串的清單。" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:18 ++#: ../src/gui-wizard-gtk/wizard.glade.h:17 + msgid "file" + msgstr "檔案" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:19 ++#: ../src/gui-wizard-gtk/wizard.glade.h:18 + msgid "data" + msgstr "資料" + +-#: ../src/gui-wizard-gtk/wizard.glade.h:20 ++#: ../src/gui-wizard-gtk/wizard.glade.h:19 + msgid "Search" + msgstr "搜尋" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:21 ++#: ../src/gui-wizard-gtk/wizard.glade.h:20 + msgid "Size:" + msgstr "大小:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:22 ++#: ../src/gui-wizard-gtk/wizard.glade.h:21 + msgid "Attach a file" + msgstr "附加檔案" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:23 ++#: ../src/gui-wizard-gtk/wizard.glade.h:22 + msgid "I reviewed the data and _agree with submitting it" + msgstr "我已檢視資料,並同意提交資料(_A)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:24 ++#: ../src/gui-wizard-gtk/wizard.glade.h:23 + msgid "" + "If you are reporting to a remote server, make sure you removed all private " + "data (such as usernames and passwords). Backtrace, command line, environment " +@@ -972,22 +999,22 @@ msgid "" + msgstr "如果您已回報了遠端伺服器,請確定您已移除所有私人資料 (例如使用者名稱與密碼)。追蹤資訊、指令列、環境變數等通常是需要檢視的東西。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:25 ++#: ../src/gui-wizard-gtk/wizard.glade.h:24 + msgid "Processing did not start yet" + msgstr "尚未開始處理" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:26 ++#: ../src/gui-wizard-gtk/wizard.glade.h:25 + msgid "Show log" + msgstr "顯示記錄" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:27 ++#: ../src/gui-wizard-gtk/wizard.glade.h:26 + msgid "Reporting has finished. You can close this window now." + msgstr "回報已完成。您現在可將此視窗關閉。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/gui-wizard-gtk/wizard.glade.h:28 ++#: ../src/gui-wizard-gtk/wizard.glade.h:27 + msgid "" + "If you want to report the problem to a different destination, collect " + "additional information, or provide a better problem description and repeat " +@@ -995,17 +1022,17 @@ msgid "" + msgstr "若您希望將問題回報至不同的目的地,請蒐集額外資訊,或提供較詳盡的問題描述、重複回報程序,並按下「下一步」。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1007 ++#: ../src/include/internal_libreport.h:1046 + msgid "Be verbose" + msgstr "詳盡" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/include/internal_libreport.h:1008 +-#: ../src/plugins/reporter-bugzilla.c:895 ++#: ../src/include/internal_libreport.h:1047 ++#: ../src/plugins/reporter-bugzilla.c:893 + #: ../src/plugins/reporter-kerneloops.c:166 +-#: ../src/plugins/reporter-mailx.c:198 ../src/plugins/reporter-print.c:56 +-#: ../src/plugins/reporter-rhtsupport.c:471 +-#: ../src/plugins/reporter-upload.c:249 ++#: ../src/plugins/reporter-mailx.c:280 ../src/plugins/reporter-print.c:56 ++#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-upload.c:188 + msgid "Problem directory" + msgstr "問題目錄" + +@@ -1063,7 +1090,7 @@ msgid "'%s' is not correct file name" + msgstr "「%s」不是個正確的檔案名稱" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/create_dump_dir.c:153 ++#: ../src/lib/create_dump_dir.c:150 + #, c-format + msgid "uid value is not valid: '%s'" + msgstr "UID 值無效:「%s」" +@@ -1074,85 +1101,115 @@ msgstr "UID 值無效:「%s」" + msgid "Uploaded: %llu of %llu kbytes" + msgstr "已上傳:%llu / %llu 位元組" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/curl.c:635 ++#: ../src/lib/curl.c:636 ++msgid "Ignoring URL without scheme and hostname" ++msgstr "忽略沒有格式和主機名稱的 URL" ++ ++#. Do not include the path part of the URL as it can contain sensitive data ++#. * in case of typos ++#: ../src/lib/curl.c:666 + #, c-format +-msgid "Sending %s to %s" +-msgstr "正將 %s 傳送至 %s" ++msgid "Sending %s to %s//%s" ++msgstr "將 %s 傳送至 %s//%s" + +-#: ../src/lib/curl.c:659 ++#: ../src/lib/curl.c:690 + #, c-format +-msgid "Please enter user name for '%s':" +-msgstr "請輸入「%s」的使用者名稱:" ++msgid "Please enter user name for '%s//%s':" ++msgstr "請輸入「%s//%s」的使用者名稱:" + +-#: ../src/lib/curl.c:665 ++#: ../src/lib/curl.c:696 + #, c-format +-msgid "Please enter password for '%s':" +-msgstr "請輸入「%s」的密碼:" ++msgid "Please enter password for '%s//%s@%s':" ++msgstr "請輸入「%s//%s@%s」的密碼:" + +-# translation auto-copied from project libreport, version master, document libreport + #. This ends up a "reporting status message" in abrtd +-#: ../src/lib/curl.c:688 ++#: ../src/lib/curl.c:719 ++#, c-format ++msgid "Successfully created %s" ++msgstr "已成功建立 %s" ++ ++#: ../src/lib/dump_dir.c:1545 ++msgid "Failed to open TAR writer" ++msgstr "無法開啟 TAR 寫入器" ++ ++#: ../src/lib/dump_dir.c:1571 ++msgid "Failed to finalize TAR archive" ++msgstr "無法完成 TAR 封存檔案" ++ ++#: ../src/lib/dump_dir.c:1581 ++msgid "Failed to close TAR writer" ++msgstr "無法關閉 TAR 寫入器" ++ ++#: ../src/lib/dump_dir.c:1591 + #, c-format +-msgid "Successfully sent %s to %s" +-msgstr "已成功將 %s 傳送至 %s" ++msgid "gzip killed with signal %d" ++msgstr "被訊號 %d 截殺的 GZIP" ++ ++#: ../src/lib/dump_dir.c:1597 ++#, c-format ++msgid "gzip exited with %d" ++msgstr "與 %d 一同退出的 GZIP" ++ ++#: ../src/lib/dump_dir.c:1600 ++msgid "gzip process failed" ++msgstr "失敗的 GZIP 處理" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:348 ++#: ../src/lib/event_config.c:382 + msgid "Missing mandatory value" + msgstr "遺失必要的值" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:356 ++#: ../src/lib/event_config.c:390 + #, c-format + msgid "Invalid utf8 character '%c'" + msgstr "無效的 utf8 字元「%c」" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:369 ++#: ../src/lib/event_config.c:403 + #, c-format + msgid "Invalid number '%s'" + msgstr "無效的數字「%s」" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:384 ++#: ../src/lib/event_config.c:418 + #, c-format + msgid "Invalid boolean value '%s'" + msgstr "無效的布林值「%s」" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:390 ++#: ../src/lib/event_config.c:424 + msgid "Unsupported option type" + msgstr "不受支援的選項類型" + +-#: ../src/lib/event_config.c:463 ++#: ../src/lib/event_config.c:497 + msgid "Reporting disabled because the rating does not contain a number." + msgstr "回報已停用,因為評分未包含數字。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:464 ++#: ../src/lib/event_config.c:498 + msgid "Please report this problem to ABRT project developers." + msgstr "請將此問題回報給 ABRT 專案開發者。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:470 ++#: ../src/lib/event_config.c:504 + msgid "" + "The backtrace is incomplete, please make sure you provide the steps to " + "reproduce." + msgstr "追蹤資訊不完整,請確認您已提供能夠重現問題的步驟。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:471 ++#: ../src/lib/event_config.c:505 + msgid "The backtrace probably can't help developer to diagnose the bug." + msgstr "追蹤資訊可能無法幫助開發者診斷臭蟲所在。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:477 ++#: ../src/lib/event_config.c:511 + msgid "Reporting disabled because the backtrace is unusable." + msgstr "已停用回報,因為無法使用追蹤功能。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:481 ++#: ../src/lib/event_config.c:515 + #, c-format + msgid "" + "Please try to install debuginfo manually using the command: \"debuginfo-" +@@ -1160,12 +1217,27 @@ msgid "" + msgstr "請試著使用指令:\"debuginfo-install %s\" 來手動安裝 debugifo,並再重試一次。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/event_config.c:483 ++#: ../src/lib/event_config.c:517 + msgid "A proper debuginfo is probably missing or the coredump is corrupted." + msgstr "可能遺失適當的 debuginfo,或是核心傾印資料已損毀。" + ++#: ../src/lib/iso_date_string.c:48 ++#, c-format ++msgid "String doesn't seem to be a date: '%s'" ++msgstr "字串似乎不是日期:「%s」" ++ ++#: ../src/lib/iso_date_string.c:53 ++#, c-format ++msgid "The date: '%s' has unrecognized suffix: '%s'" ++msgstr "日期「%s」含有無法辨識的尾碼:「%s」" ++ ++#: ../src/lib/iso_date_string.c:58 ++#, c-format ++msgid "The date: '%s' is out of UNIX time stamp range" ++msgstr "日期「%s」超出 UNIX 時間戳記範圍" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:354 ++#: ../src/lib/ureport.c:395 + #, c-format + msgid "Your problem seems to be caused by %s\n" + "\n" +@@ -1175,49 +1247,59 @@ msgstr "您的問題似乎起因於 %s\n" + "%s\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:357 ++#: ../src/lib/ureport.c:398 + msgid "Your problem seems to be caused by one of the following:\n" + msgstr "您的問題似乎由下列問題之一所導致:\n" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:528 ++#: ../src/lib/ureport.c:570 + #, c-format + msgid "Failed to upload uReport to the server '%s' with curl: %s" + msgstr "無法以 curl 上傳 uReport 至伺服器「%s」:%s" + ++#: ../src/lib/ureport.c:574 ++#, c-format ++msgid "Failed to upload uReport to the server '%s'" ++msgstr "無法上傳 uReport 至伺服器「%s」" ++ ++#: ../src/lib/ureport.c:577 ++#, c-format ++msgid "Error: %s" ++msgstr "錯誤:%s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:534 ++#: ../src/lib/ureport.c:584 + #, c-format + msgid "The URL '%s' does not exist (got error 404 from server)" + msgstr "URL「%s」不存在 (伺服器給予 404 錯誤)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:540 ++#: ../src/lib/ureport.c:590 + #, c-format + msgid "The server at '%s' encountered an internal error (got error 500)" + msgstr "於「%s」的伺服器遭遇內部錯誤 (得到 500 錯誤)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:546 ++#: ../src/lib/ureport.c:596 + #, c-format + msgid "The server at '%s' currently can't handle the request (got error 503)" + msgstr "「%s」的伺服器目前無法處理請求 (取得錯誤碼 503)" + + # translation auto-copied from project libreport, version master, document libreport + #. can't print better error message +-#: ../src/lib/ureport.c:555 ++#: ../src/lib/ureport.c:605 + #, c-format + msgid "Unexpected HTTP response from '%s': %d" + msgstr "「%s」傳來未預期的 HTTP 回應:%d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:564 ++#: ../src/lib/ureport.c:614 + #, c-format + msgid "Unable to parse response from ureport server at '%s'" + msgstr "無法解析來自「%s」ureport 伺服器的回應" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:574 ++#: ../src/lib/ureport.c:624 + #, c-format + msgid "The response from '%s' has invalid format" + msgstr "「%s」給予的回應為無效格式" +@@ -1225,18 +1307,18 @@ msgstr "「%s」給予的回應為無效格式" + # translation auto-copied from project libreport, version master, document libreport + #. HTTP CODE 202 means that call was successful but the response + #. has an error message +-#: ../src/lib/ureport.c:580 ++#: ../src/lib/ureport.c:630 + #, c-format + msgid "Type mismatch has been detected in the response from '%s'" + msgstr "偵測到「%s」的回應中其類型並不相符" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:766 ../src/plugins/reporter-rhtsupport.c:198 ++#: ../src/lib/ureport.c:820 ../src/plugins/reporter-rhtsupport.c:233 + msgid "Failed on submitting the problem" + msgstr "提交問題時失敗" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/lib/ureport.c:808 ++#: ../src/lib/ureport.c:862 + #, c-format + msgid "The server at '%s' responded with an error: '%s'" + msgstr "於「%s」的伺服器以錯誤回應:「%s」" +@@ -1262,6 +1344,30 @@ msgid "Essential element '%s' is missing, can't continue" + msgstr "找不到必要元素「%s」,無法繼續" + + # translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:478 ../src/plugins/reporter-bugzilla.c:355 ++#, c-format ++msgid "Can't parse backtrace: %s" ++msgstr "無法解析追蹤資訊:%s" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/lib/problem_report.c:489 ../src/plugins/reporter-bugzilla.c:366 ++msgid "Can't generate stacktrace description (no crash thread?)" ++msgstr "無法產生堆疊追蹤描述 (無崩潰的執行序?)" ++ ++#: ../src/lib/reported_to.c:52 ++msgid "Report result label mustn't be empty string." ++msgstr "報告結果標籤不可為空白字串。" ++ ++#: ../src/lib/reported_to.c:58 ++msgid "Report result label mustn't contain ':' character." ++msgstr "報告結果標籤不可含有「:」字元。" ++ ++#: ../src/lib/reported_to.c:141 ++#, c-format ++msgid "Ignored invalid ISO date of report result '%s'" ++msgstr "已忽略報告結果「%s」的無效 ISO 日期" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/lib/run_event.c:791 + #, c-format + msgid "('%s' was killed by signal %u)\n" +@@ -1339,13 +1445,14 @@ msgstr "回報至 Bugzilla 臭蟲追蹤器" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:3 +-msgid "Bugzilla URL" +-msgstr "Bugzilla URL" ++#: ../src/plugins/report_Uploader.xml.in.h:6 ++msgid "User name" ++msgstr "使用者名稱" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:4 +-msgid "Address of Bugzilla server" +-msgstr "Bugzilla " ++msgid "Bugzilla account user name" ++msgstr "Bugzilla 帳號使用者名稱" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:5 +@@ -1358,79 +1465,92 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:6 +-#: ../src/plugins/report_Uploader.xml.in.h:6 +-msgid "User name" +-msgstr "使用者名稱" ++#: ../src/plugins/report_RHTSupport.xml.in.h:5 ++#: ../src/plugins/report_Uploader.xml.in.h:8 ++msgid "Password" ++msgstr "密碼" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:7 +-msgid "Bugzilla account user name" +-msgstr "Bugzilla 帳號使用者名稱" ++msgid "Bugzilla account password" ++msgstr "Bugzilla 帳號密碼" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:8 +-#: ../src/plugins/report_RHTSupport.xml.in.h:5 +-#: ../src/plugins/report_Uploader.xml.in.h:8 +-msgid "Password" +-msgstr "密碼" ++msgid "Restrict access" ++msgstr "限制存取" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:9 +-msgid "Bugzilla account password" +-msgstr "Bugzilla 帳號密碼" ++msgid "" ++"Restrict access to the created bugzilla ticket allowing only users from " ++"specified groups to view it (see advanced settings for more details)" ++msgstr "限制所建立的 bugzilla 申請單之存取狀況,僅讓特定群組的使用者可以檢視 (請見進階設定瞭解更多細節)" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:10 +-#: ../src/plugins/report_RHTSupport.xml.in.h:7 +-#: ../src/plugins/report_uReport.xml.in.h:7 +-msgid "Verify SSL" +-msgstr "驗證 SSL" ++msgid "Groups" ++msgstr "群組" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:11 +-#: ../src/plugins/report_RHTSupport.xml.in.h:8 +-#: ../src/plugins/report_uReport.xml.in.h:8 +-msgid "Check SSL key validity" +-msgstr "檢查 SSL 金鑰是否有效" ++msgid "" ++"Restrict the access to specified groups <a href=\"https://github.com/abrt/" ++"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" ++msgstr "" ++"限制只讓特定群組存取 <a href=\"https://github.com/abrt/abrt/wiki/FAQ#creating-" ++"private-bugzilla-tickets\">?</a>" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:12 +-msgid "Restrict access" +-msgstr "限制存取" ++msgid "Bugzilla URL" ++msgstr "Bugzilla URL" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:13 +-msgid "" +-"Restrict access to the created bugzilla ticket allowing only users from " +-"specified groups to view it (see advanced settings for more details)" +-msgstr "限制所建立的 bugzilla 申請單之存取狀況,僅讓特定群組的使用者可以檢視 (請見進階設定瞭解更多細節)" ++msgid "Address of Bugzilla server" ++msgstr "Bugzilla " + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Bugzilla.xml.in.h:14 ++#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_uReport.xml.in.h:7 ++msgid "Verify SSL" ++msgstr "驗證 SSL" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_uReport.xml.in.h:8 ++msgid "Check SSL key validity" ++msgstr "檢查 SSL 金鑰是否有效" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/report_Bugzilla.xml.in.h:16 + msgid "Bugzilla product" + msgstr "Bugzilla 產品" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:15 ++#: ../src/plugins/report_Bugzilla.xml.in.h:17 + msgid "" + "Specify this only if you needed different product than specified in /etc/os-" + "release" + msgstr "若您需要的產品與 /etc/os-release 中指定的不同,才請您指定此參數" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:16 ++#: ../src/plugins/report_Bugzilla.xml.in.h:18 + msgid "Bugzilla product version" + msgstr "Bugzilla 產品版本" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:17 ++#: ../src/plugins/report_Bugzilla.xml.in.h:19 + msgid "" + "Specify this only if you needed different product version than specified in /" + "etc/os-release" + msgstr "若您需要的產品版本與 /etc/os-release 中指定的不同,才請您指定此參數" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:18 ++#: ../src/plugins/report_Bugzilla.xml.in.h:20 + #: ../src/plugins/report_Kerneloops.xml.in.h:5 + #: ../src/plugins/report_RHTSupport.xml.in.h:13 + #: ../src/plugins/report_Uploader.xml.in.h:10 +@@ -1440,7 +1560,7 @@ msgid "HTTP Proxy" + msgstr "HTTP 代理" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:19 ++#: ../src/plugins/report_Bugzilla.xml.in.h:21 + #: ../src/plugins/report_Kerneloops.xml.in.h:6 + #: ../src/plugins/report_RHTSupport.xml.in.h:14 + #: ../src/plugins/report_Uploader.xml.in.h:11 +@@ -1450,7 +1570,7 @@ msgid "Sets the proxy server to use for HTTP" + msgstr "設定 HTTP 所要使用的代理伺服器" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:20 ++#: ../src/plugins/report_Bugzilla.xml.in.h:22 + #: ../src/plugins/report_Kerneloops.xml.in.h:7 + #: ../src/plugins/report_RHTSupport.xml.in.h:15 + #: ../src/plugins/report_Uploader.xml.in.h:12 +@@ -1460,7 +1580,7 @@ msgid "HTTPS Proxy" + msgstr "HTTPS 代理" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:21 ++#: ../src/plugins/report_Bugzilla.xml.in.h:23 + #: ../src/plugins/report_Kerneloops.xml.in.h:8 + #: ../src/plugins/report_RHTSupport.xml.in.h:16 + #: ../src/plugins/report_Uploader.xml.in.h:13 +@@ -1470,20 +1590,6 @@ msgid "Sets the proxy server to use for HTTPS" + msgstr "設定 HTTPS 所要使用的代理伺服器" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:22 +-msgid "Groups" +-msgstr "群組" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_Bugzilla.xml.in.h:23 +-msgid "" +-"Restrict the access to specified groups <a href=\"https://github.com/abrt/" +-"abrt/wiki/FAQ#creating-private-bugzilla-tickets\">?</a>" +-msgstr "" +-"限制只讓特定群組存取 <a href=\"https://github.com/abrt/abrt/wiki/FAQ#creating-" +-"private-bugzilla-tickets\">?</a>" +- +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report.c:37 + msgid "" + "& [-v] --target TARGET --ticket ID FILE...\n" +@@ -1517,55 +1623,44 @@ msgid "Ticket/case ID" + msgstr "申請單/專案 ID" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:355 +-#, c-format +-msgid "Can't parse backtrace: %s" +-msgstr "無法解析追蹤資訊:%s" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:366 +-msgid "Can't generate stacktrace description (no crash thread?)" +-msgstr "無法產生堆疊追蹤描述 (無崩潰的執行序?)" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:764 ++#: ../src/plugins/reporter-bugzilla.c:762 + msgid "" + "Warning, private ticket groups already specified as cmdline argument, " + "ignoring the env variable and configuration" + msgstr "警告,私人請單群組已指定成 cmdline 引數,忽略環境變數與組態設定" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:775 +-#: ../src/plugins/reporter-rhtsupport.c:342 ++#: ../src/plugins/reporter-bugzilla.c:773 ++#: ../src/plugins/reporter-rhtsupport.c:377 + msgid "Can't continue without login" + msgstr "無法沒有登入資訊就繼續" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:788 +-#: ../src/plugins/reporter-rhtsupport.c:355 ++#: ../src/plugins/reporter-bugzilla.c:786 ++#: ../src/plugins/reporter-rhtsupport.c:390 + msgid "Can't continue without password" + msgstr "無法沒有密碼就繼續" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:797 ++#: ../src/plugins/reporter-bugzilla.c:795 + #, c-format + msgid "Logging into Bugzilla at %s" + msgstr "登入 Bugzilla 於 %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:801 ++#: ../src/plugins/reporter-bugzilla.c:799 + msgid "Invalid password or login. Please enter your BZ login:" + msgstr "無效的密碼或登入名稱。請輸入您的 Bugzilla 登入資訊:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:804 +-#: ../src/plugins/reporter-rhtsupport.c:369 ++#: ../src/plugins/reporter-bugzilla.c:802 ++#: ../src/plugins/reporter-rhtsupport.c:404 + #, c-format + msgid "Invalid password or login. Please enter the password for '%s':" + msgstr "無效的密碼或登入名稱。請輸入「%s」的密碼:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:823 ++#: ../src/plugins/reporter-bugzilla.c:821 + msgid "" + "\n" + "& [-vbf] [-g GROUP-NAME]... [-c CONFFILE]... [-F FMTFILE] [-A FMTFILE2] -d " +@@ -1651,75 +1746,76 @@ msgstr "" + "如果未特別指定,CONFFILE 預設值為 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:896 +-#: ../src/plugins/reporter-rhtsupport.c:472 ++#: ../src/plugins/reporter-bugzilla.c:894 ++#: ../src/plugins/reporter-rhtsupport.c:511 + msgid "Configuration file (may be given many times)" + msgstr "組態檔 (可能會提供多次)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:897 ++#: ../src/plugins/reporter-bugzilla.c:895 + msgid "Formatting file for initial comment" + msgstr "正為初次評註格式化檔案" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:898 ++#: ../src/plugins/reporter-bugzilla.c:896 + msgid "Formatting file for duplicates" + msgstr "正為重複項目格式化檔案" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-bugzilla.c:897 + msgid "Attach FILEs [to bug with this ID]" + msgstr "附加 FILE [至含有此 ID 的臭蟲報告]" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:900 ++#: ../src/plugins/reporter-bugzilla.c:898 + msgid "When creating bug, attach binary files too" + msgstr "當建立臭蟲回報時,亦請附加二元檔案" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:901 +-#: ../src/plugins/reporter-rhtsupport.c:474 ++#: ../src/plugins/reporter-bugzilla.c:899 ++#: ../src/plugins/reporter-rhtsupport.c:513 + msgid "Force reporting even if this problem is already reported" + msgstr "即使此問題已經回報過,仍然回報此問題" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:902 ++#: ../src/plugins/reporter-bugzilla.c:900 + msgid "Add bugzilla user to CC list [of bug with this ID]" + msgstr "加入 bugzilla 使用者至 [有此 ID 的臭蟲報告] 寄件副本清單" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:903 ++#: ../src/plugins/reporter-bugzilla.c:901 + msgid "Print BUG_ID which has given DUPHASH" + msgstr "列印具給定 DUPHASH 的 BUG_ID" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:904 ++#: ../src/plugins/reporter-bugzilla.c:902 + msgid "A name of bug tracker for an additional URL from 'reported_to'" + msgstr "「reported_to」中額外 URL 的臭蟲追蹤器名稱" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:905 ++#: ../src/plugins/reporter-bugzilla.c:903 + msgid "Restrict access to this group only" + msgstr "限制僅有群組可存取" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:906 ++#: ../src/plugins/reporter-bugzilla.c:904 ../src/plugins/reporter-mailx.c:284 ++#: ../src/plugins/reporter-rhtsupport.c:517 + msgid "Debug" + msgstr "除錯" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:948 ++#: ../src/plugins/reporter-bugzilla.c:949 + msgid "Looking for similar problems in bugzilla" + msgstr "查詢 bugzilla 中是否有類似問題" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:975 ++#: ../src/plugins/reporter-bugzilla.c:976 + msgid "Login is not provided by configuration. Please enter your BZ login:" + msgstr "登入資訊未由組態提供。請輸入您的 Bugzilla 登入資訊:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:981 +-#: ../src/plugins/reporter-rhtsupport.c:510 ++#: ../src/plugins/reporter-bugzilla.c:982 ++#: ../src/plugins/reporter-rhtsupport.c:551 + #, c-format + msgid "" + "Password is not provided by configuration. Please enter the password for " +@@ -1727,14 +1823,14 @@ msgid "" + msgstr "密碼未由組態提供。請輸入「%s」的密碼:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1000 ++#: ../src/plugins/reporter-bugzilla.c:1001 + msgid "" + "Can't get Bugzilla ID because this problem has not yet been reported to " + "Bugzilla." + msgstr "無法取得 Bugzilla ID,因為此問題尚未回報至 Bugzilla。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1007 ++#: ../src/plugins/reporter-bugzilla.c:1008 + #, c-format + msgid "" + "This problem has been reported to Bugzilla '%s' which differs from the " +@@ -1742,86 +1838,105 @@ msgid "" + msgstr "此問題尚未回報至 Bugzilla「%s」,而不是設定中的 Bugzilla「%s」。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1011 ++#: ../src/plugins/reporter-bugzilla.c:1012 + #, c-format + msgid "Malformed url to Bugzilla '%s'." + msgstr "格式不良的 Bugzilla「%s」URL" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1015 ++#: ../src/plugins/reporter-bugzilla.c:1016 + #, c-format + msgid "Using Bugzilla ID '%s'" + msgstr "正使用 Bugzilla ID「%s」" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1049 +-#: ../src/plugins/reporter-bugzilla.c:1341 ++#: ../src/plugins/reporter-bugzilla.c:1050 ++#: ../src/plugins/reporter-bugzilla.c:1220 ++#: ../src/plugins/reporter-bugzilla.c:1379 + msgid "Logging out" + msgstr "登出" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1100 ++#: ../src/plugins/reporter-bugzilla.c:1101 + msgid "Can't determine Bugzilla Product from problem data." + msgstr "無法從問題資料判定 Bugzilla 產品。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1151 ++#: ../src/plugins/reporter-bugzilla.c:1152 + msgid "Checking for duplicates" + msgstr "檢查是否有重複" + ++#: ../src/plugins/reporter-bugzilla.c:1201 ++#, c-format ++msgid "" ++"You have requested to make your data accessible only to a specific group and " ++"this bug is a duplicate of bug: %s/%u In case of bug duplicates a new " ++"comment is added to the original bug report but access to the comments " ++"cannot be restricted to a specific group. Would you like to open a new bug " ++"report and close it as DUPLICATE of the original one? Otherwise, the bug " ++"reporting procedure will be terminated." ++msgstr "" ++"您已請求只允許特定群組存取您的資料,而此臭蟲是 %s/%u " ++"的重複臭蟲。如果臭蟲重複,新的評註便會加到原始的臭蟲報告中,但評註無法限制只供特定群組存取。您是否要開始新的臭蟲報告,並將其視為原始報告的重複項來關閉?否則,臭蟲報告程序將會終止。" ++ + # translation auto-copied from project libreport, version master, document libreport + #. Create new bug +-#: ../src/plugins/reporter-bugzilla.c:1197 ++#: ../src/plugins/reporter-bugzilla.c:1228 + msgid "Creating a new bug" + msgstr "建立新的臭蟲回報" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1218 ++#: ../src/plugins/reporter-bugzilla.c:1249 + msgid "Failed to create a new bug." + msgstr "建立新臭蟲回報失敗。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1229 ++#: ../src/plugins/reporter-bugzilla.c:1260 + #, c-format + msgid "Adding External URL to bug %i" + msgstr "正加入外部 URL 至臭蟲 %i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1235 ++#: ../src/plugins/reporter-bugzilla.c:1266 + #, c-format + msgid "Adding attachments to bug %i" + msgstr "正加入附件至臭蟲 %i" + ++#: ../src/plugins/reporter-bugzilla.c:1280 ++#, c-format ++msgid "Closing bug %i as duplicate of bug %i" ++msgstr "將臭蟲 %i 視為臭蟲 %i 的重複並關閉" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1254 ++#: ../src/plugins/reporter-bugzilla.c:1292 + #, c-format + msgid "Bug is already reported: %i" + msgstr "臭蟲已回報過:%i" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1297 ++#: ../src/plugins/reporter-bugzilla.c:1335 + #, c-format + msgid "Adding %s to CC list" + msgstr "正將 %s 加入寄件副本 (CC) 清單" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1314 ++#: ../src/plugins/reporter-bugzilla.c:1352 + #, c-format + msgid "Adding new comment to bug %d" + msgstr "正新增評註至臭蟲 %d" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1328 ++#: ../src/plugins/reporter-bugzilla.c:1366 + msgid "Attaching better backtrace" + msgstr "正附上更好的追蹤資料" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1336 ++#: ../src/plugins/reporter-bugzilla.c:1374 + msgid "Found the same comment in the bug history, not adding a new one" + msgstr "在臭蟲歷史中尋找同樣的評註,而不是新增評註" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-bugzilla.c:1344 ++#: ../src/plugins/reporter-bugzilla.c:1382 + #, c-format + msgid "Status: %s%s%s %s/show_bug.cgi?id=%u" + msgstr "狀態:%s%s%s %s/show_bug.cgi?id=%u" +@@ -1858,12 +1973,12 @@ msgstr "" + + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/reporter-kerneloops.c:167 +-#: ../src/plugins/reporter-ureport.c:74 ++#: ../src/plugins/reporter-ureport.c:79 + msgid "Configuration file" + msgstr "組態檔" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:59 ++#: ../src/plugins/reporter-mailx.c:83 + #, c-format + msgid "" + "Email address of %s was not specified. Would you like to do so now? If not, " +@@ -1871,50 +1986,58 @@ msgid "" + msgstr "%s 的電子郵件位址尚未指定。您是否想要馬上設定?如果不是,則使用「%s」" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:66 ++#: ../src/plugins/reporter-mailx.c:90 + #, c-format + msgid "Please, type email address of %s:" + msgstr "請輸入 %s 的電子信箱位址" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:73 ++#: ../src/plugins/reporter-mailx.c:97 + #, c-format + msgid "Can't continue without email address of %s" + msgstr "若沒有 %s 的電子郵件位址則無法繼續" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:135 ++#: ../src/plugins/reporter-mailx.c:206 ../src/plugins/reporter-mailx.c:211 + msgid "Sending an email..." + msgstr "傳送電子郵件..." + ++#: ../src/plugins/reporter-mailx.c:209 ++#, c-format ++msgid "Sending a notification email to: %s" ++msgstr "將通知電子郵件傳送至:%s" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:158 ++#: ../src/plugins/reporter-mailx.c:237 + #, c-format + msgid "Email was sent to: %s" + msgstr "電子郵件已送往:%s" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:178 ++#: ../src/plugins/reporter-mailx.c:258 + msgid "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" + "Sends contents of a problem directory DIR via email\n" + "\n" + "If not specified, CONFFILE defaults to " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE]\n" ++"& [-v] -d DIR [-c CONFFILE] [-F FMTFILE]\n" + "\n" +-"透過電子郵件發送問題目錄 DIR 的內容\n" ++"透過電子郵件傳送問題目錄 DIR 的內容\n" + "\n" +-"如果不指定的話,CONFFILE 預設為 " ++"如未指定,CONFFILE 會預設為 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:199 ../src/plugins/reporter-upload.c:250 ++#: ../src/plugins/reporter-mailx.c:281 ../src/plugins/reporter-upload.c:189 + msgid "Config file" + msgstr "組態檔" + ++#: ../src/plugins/reporter-mailx.c:282 ++msgid "Formatting file for an email" ++msgstr "正為電子郵件格式化檔案" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-mailx.c:200 ++#: ../src/plugins/reporter-mailx.c:283 + msgid "Notify only (Do not mark the report as sent)" + msgstr "僅通知 (不要將回報標記為已送出)" + +@@ -1955,37 +2078,37 @@ msgid "Can't open '%s' for writing. Please select another file:" + msgstr "無法開啟「%s」以寫入。請選擇其他檔案:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was appended to %s" + msgstr "報告已附加至 %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-print.c:143 ++#: ../src/plugins/reporter-print.c:144 + #, c-format + msgid "The report was stored to %s" + msgstr "報告已儲存至 %s" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:259 +-#: ../src/plugins/reporter-ureport.c:237 ++#: ../src/plugins/reporter-rhtsupport.c:294 ++#: ../src/plugins/reporter-ureport.c:297 + #, c-format + msgid "Server responded with an error: '%s'" + msgstr "伺服器端以錯誤回應:「%s」" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:319 ++#: ../src/plugins/reporter-rhtsupport.c:354 + msgid "Do you still want to create a RHTSupport ticket?" + msgstr "您仍然想建立 RHTSupport 的申請單嗎?" + +-#: ../src/plugins/reporter-rhtsupport.c:367 ++#: ../src/plugins/reporter-rhtsupport.c:402 + msgid "Invalid password or login. Please enter your Red Hat login:" + msgstr "密碼或帳號無效。請輸入您的 Red Hat 帳號:" + +-#: ../src/plugins/reporter-rhtsupport.c:435 ++#: ../src/plugins/reporter-rhtsupport.c:471 + msgid "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" + "or:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +@@ -1994,96 +2117,121 @@ msgid "" + "If not specified, CONFFILE defaults to " + msgstr "" + "\n" +-"& [-v] [-c CONFFILE] -d DIR\n" +-"or:\n" ++"& [-v] [-c CONFFILE] [-F FMTFILE] -d DIR\n" ++"或:\n" + "& [-v] [-c CONFFILE] [-d DIR] -t[ID] [-u -C UR_CONFFILE] FILE...\n" + "\n" +-"向 RHTSupport 回報問題。\n" ++"回報問題給 RHTSupport。\n" + "\n" +-"若未指定,CONFFILE 將會被預設為 " ++"如未指定,CONFFILE 會預設為 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:473 ++#: ../src/plugins/reporter-rhtsupport.c:512 + msgid "Upload FILEs [to case with this ID]" + msgstr "上傳 FILE [至含有此 ID 的案例]" + +-#: ../src/plugins/reporter-rhtsupport.c:475 ++#: ../src/plugins/reporter-rhtsupport.c:514 + msgid "Submit uReport before creating a new case" + msgstr "建立新案例前先提交 uReport" + +-#: ../src/plugins/reporter-rhtsupport.c:476 ++#: ../src/plugins/reporter-rhtsupport.c:515 + msgid "Configuration file for uReport" + msgstr "uReport 的配置檔案" + ++#: ../src/plugins/reporter-rhtsupport.c:516 ++msgid "Formatting file for a new case" ++msgstr "正為新案例格式化檔案" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:504 ++#: ../src/plugins/reporter-rhtsupport.c:545 + msgid "Login is not provided by configuration. Please enter your RHTS login:" + msgstr "登入資訊未由組態提供。請輸入您的 RHTS 登入資訊:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:573 ++#: ../src/plugins/reporter-rhtsupport.c:614 + #, c-format + msgid "Attaching '%s' to case '%s'" + msgstr "正在附加「%s」至案例「%s」" + +-#: ../src/plugins/reporter-rhtsupport.c:610 ++#: ../src/plugins/reporter-rhtsupport.c:651 + msgid "Sending ABRT crash statistics data" + msgstr "正在傳送 ABRT 當機數據資料" + ++#: ../src/plugins/reporter-rhtsupport.c:674 ++msgid "" ++"The problem has only occurred once and the ability to reproduce the problem " ++"is unknown. Please ensure you will be able to provide detailed information " ++"to our Support Team. Would you like to continue and open a new support case?" ++msgstr "問題只出現一次,且不確定是否能重現問題。請確認您能夠提供詳細資訊給我們的支援團隊。您是否要繼續並開立新的支援案例?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:690 ++#, c-format ++msgid "" ++"The crashed program was released by '%s'. Would you like to report the " ++"problem to Red Hat Support?" ++msgstr "當機程式已由「%s」釋出。您是否要將問題回報給 Red Hat 支援部門?" ++ ++#: ../src/plugins/reporter-rhtsupport.c:708 ++#, c-format ++msgid "" ++"The program '%s' does not appear to be provided by Red Hat. Would you like " ++"to report the problem to Red Hat Support?" ++msgstr "程式「%s」似乎不是由 Red Hat 提供。您是否要將問題回報給 Red Hat 支援部門?" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/plugins/reporter-rhtsupport.c:725 ++msgid "Can't create a temporary directory in " ++msgstr "無法建立暫存目錄於" ++ + # translation auto-copied from project libreport, version master, document libreport + #. Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing + #. error msg is already logged by dd_opendir +-#. Gzipping e.g. 0.5gig coredump takes a while. Let client know what we are doing +-#: ../src/plugins/reporter-rhtsupport.c:621 +-#: ../src/plugins/reporter-upload.c:52 ++#. Compressing e.g. 0.5gig coredump takes a while. Let client know what we are doing ++#: ../src/plugins/reporter-rhtsupport.c:793 ++#: ../src/plugins/reporter-upload.c:103 + msgid "Compressing data" + msgstr "正在壓縮資料" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:656 +-msgid "Can't create a temporary directory in " +-msgstr "無法建立暫存目錄於" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:665 ++#: ../src/plugins/reporter-rhtsupport.c:801 + msgid "Can't create temporary file in " + msgstr "無法建立暫存檔於" + + # translation auto-copied from project libreport, version master, document libreport + #. Check for hints and show them if we have something +-#: ../src/plugins/reporter-rhtsupport.c:676 ++#: ../src/plugins/reporter-rhtsupport.c:812 + msgid "Checking for hints" + msgstr "檢查是否有提示" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:686 ++#: ../src/plugins/reporter-rhtsupport.c:822 + msgid "Creating a new case" + msgstr "正在建立新案例" + + # translation auto-copied from project libreport, version master, document libreport + #. How can we help user sorting out this problem? +-#: ../src/plugins/reporter-rhtsupport.c:697 ++#: ../src/plugins/reporter-rhtsupport.c:833 + msgid "Can't determine RH Support Product from problem data." + msgstr "無法從問題資料判定 RH 支援產品。" + +-#: ../src/plugins/reporter-rhtsupport.c:753 ++#: ../src/plugins/reporter-rhtsupport.c:889 + msgid "Linking ABRT crash statistics record with the case" + msgstr "正在為 ABRT 當機數據紀錄與案例進行連結" + +-#: ../src/plugins/reporter-rhtsupport.c:766 ++#: ../src/plugins/reporter-rhtsupport.c:902 + #, c-format + msgid "Linking ABRT crash statistics record with contact email: '%s'" + msgstr "正在為 ABRT 當機數據紀錄與聯絡人電子郵件進行連結:「%s」" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-rhtsupport.c:790 ++#: ../src/plugins/reporter-rhtsupport.c:926 + #, c-format + msgid "Adding comment to case '%s'" + msgstr "正添加評註至案例「%s」" + + # translation auto-copied from project libreport, version master, document libreport + #. Attach the tarball of -d DIR +-#: ../src/plugins/reporter-rhtsupport.c:808 ++#: ../src/plugins/reporter-rhtsupport.c:944 + #, c-format + msgid "Attaching problem data to case '%s'" + msgstr "正附加問題資料至案例「%s」" +@@ -2099,46 +2247,55 @@ msgid "Updates which possibly help: " + msgstr "可能有所幫助的更新:" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:30 ++#: ../src/plugins/reporter-upload.c:29 + msgid "Can't continue without URL" + msgstr "沒有 URL 則無法繼續" + +-#: ../src/plugins/reporter-upload.c:61 +-msgid "Upload URL is not provided by configuration. Please enter upload URL:" +-msgstr "配置未提供上傳 URL。請輸入上傳 URL:" +- + #. Be permissive and nice, ask only once and don't check + #. the result. User can dismiss this prompt but the upload + #. may work somehow??? +-#: ../src/plugins/reporter-upload.c:164 ++#: ../src/plugins/reporter-upload.c:51 + msgid "Please enter password for uploading:" + msgstr "請輸入密碼以進行上傳:" + + # translation auto-copied from project libreport, version master, document libreport + #. success +-#: ../src/plugins/reporter-upload.c:181 ++#: ../src/plugins/reporter-upload.c:120 + #, c-format + msgid "Archive is created: '%s'" + msgstr "封存檔案已建立:「%s」" + +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:222 ++#: ../src/plugins/reporter-upload.c:159 + msgid "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" + "Uploads compressed tarball of problem directory DIR to URL.\n" + "If URL is not specified, creates tarball in " + msgstr "" +-"& [-v] -d DIR [-c CONFFILE] [-u URL]\n" ++"& [-v] -d DIR [-c CONFFILE] [-u URL] [-b FILE] [-r FILE]\n" + "\n" +-"將壓縮的問題目錄 DIR 其 tarball 上傳至 URL。\n" +-"如果沒有指定 URL,則建立 tarball 於 " ++"將問題目錄 DIR 的壓縮 tarball 上傳至 URL。\n" ++"如未指定 URL,會在以下位置建立 tarball: " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-upload.c:251 ++#: ../src/plugins/reporter-upload.c:190 + msgid "Base URL to upload to" + msgstr "欲上傳至的基礎 URL" + ++#: ../src/plugins/reporter-upload.c:191 ++msgid "SSH public key file" ++msgstr "SSH 公開金鑰檔案" ++ ++#: ../src/plugins/reporter-upload.c:192 ++msgid "SSH private key file" ++msgstr "SSH 私密金鑰檔案" ++ ++#: ../src/plugins/reporter-upload.c:221 ++msgid "" ++"Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:" ++"" ++msgstr "請輸入要在其中匯入問題資料的 URL (scp, ftp 等):" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_Kerneloops.xml.in.h:1 + msgid "Kerneloops.org" +@@ -2264,11 +2421,11 @@ msgstr "Red Hat 客戶使用者名稱" + msgid "Red Hat customer password" + msgstr "Red Hat 客戶密碼" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:9 ++#: ../src/plugins/report_RHTSupport.xml.in.h:7 + msgid "Submit uReport" + msgstr "提交 uReport" + +-#: ../src/plugins/report_RHTSupport.xml.in.h:10 ++#: ../src/plugins/report_RHTSupport.xml.in.h:8 + msgid "" + "Submit <a href=\"https://access.redhat.com/articles/642323\">micro-" + "report</a> when creating a new case." +@@ -2277,12 +2434,12 @@ msgstr "" + "report</a>。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:11 ++#: ../src/plugins/report_RHTSupport.xml.in.h:9 + msgid "RH Portal URL" + msgstr "RH 入口 URL" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/report_RHTSupport.xml.in.h:12 ++#: ../src/plugins/report_RHTSupport.xml.in.h:10 + msgid "Address of the Red Hat support portal" + msgstr "Red Hat 支援入口的電子郵件地址" + +@@ -2337,6 +2494,22 @@ msgstr "FTP 代理" + msgid "Sets the proxy server to use for FTP" + msgstr "設定 FTP 所要使用的代理伺服器" + ++#: ../src/plugins/report_Uploader.xml.in.h:16 ++msgid "SSH Public key file" ++msgstr "SSH 公開金鑰檔案" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:17 ++msgid "Use this field to specify SSH public keyfile" ++msgstr "使用此欄位以指定 SSH 公開金鑰檔案" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:18 ++msgid "SSH Private key file" ++msgstr "SSH 私密金鑰檔案" ++ ++#: ../src/plugins/report_Uploader.xml.in.h:19 ++msgid "Use this field to specify SSH private keyfile" ++msgstr "使用此欄位以指定 SSH 私密金鑰檔案" ++ + # translation auto-copied from project libreport, version master, document libreport + #: ../src/plugins/report_uReport.xml.in.h:1 + msgid "uReport" +@@ -2418,70 +2591,94 @@ msgid "Bugzilla couldn't find parent of bug %d" + msgstr "Bugzilla 找不到臭蟲 %d 的親代" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/rhbz.c:893 ++#: ../src/plugins/rhbz.c:916 + msgid "Bug.search(quicksearch) return value did not contain member 'bugs'" + msgstr "Bug.search(quicksearch) 回傳值未包含成員 'bugs'" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:68 ++#: ../src/plugins/reporter-ureport.c:73 + msgid "Specify server URL" + msgstr "指定伺服器 URL" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:70 ++#: ../src/plugins/reporter-ureport.c:75 + msgid "Allow insecure connection to ureport server" + msgstr "允許對 ureport 伺服器的不安全連線" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:71 ++#: ../src/plugins/reporter-ureport.c:76 + msgid "Use client authentication" + msgstr "使用者客戶端身份核對" + +-#: ../src/plugins/reporter-ureport.c:72 ++#: ../src/plugins/reporter-ureport.c:77 + msgid "Use HTTP Authentication" + msgstr "使用 HTTP 認證" + +-#: ../src/plugins/reporter-ureport.c:73 ++#: ../src/plugins/reporter-ureport.c:78 + msgid "Additional files included in 'auth' key" + msgstr "「auth」金鑰中包含了額外檔案" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:76 ++#: ../src/plugins/reporter-ureport.c:81 + msgid "bthash of uReport to attach (conflicts with -A)" + msgstr "要加入為附件的 uReport 之 bthash (與 -A 衝突)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:78 ++#: ../src/plugins/reporter-ureport.c:83 + msgid "attach to a bthash from reported_to (conflicts with -a)" + msgstr "從 reported_to 附加到 bthash (與 -a 衝突)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:80 ++#: ../src/plugins/reporter-ureport.c:85 + msgid "contact e-mail address (requires -a|-A, conflicts with -E)" + msgstr "聯絡人電子郵件位址 (需要 -a|-A,但與 -E 衝突)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:82 ++#: ../src/plugins/reporter-ureport.c:87 + msgid "" + "contact e-mail address from environment or configuration file (requires -a|-" + "A, conflicts with -e)" + msgstr "取自環境變數或組態檔的聯絡人電子郵件位址 (需要 -a|-A,與 -e 衝突)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:84 ++#: ../src/plugins/reporter-ureport.c:89 + msgid "attach RHBZ bug (requires -a|-A, conflicts with -B)" + msgstr "附上 RHBZ 臭蟲 (需要 -a|-A,但與 -B 衝突)" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:86 ++#: ../src/plugins/reporter-ureport.c:91 + msgid "" + "attach last RHBZ bug from reported_to (requires -a|-A, conflicts with -b)" + msgstr "附上上次 reported_to 中的 RHBZ 臭蟲回報 (需要 -a|-A,但與 -b 衝突)" + +-#: ../src/plugins/reporter-ureport.c:91 ++#: ../src/plugins/reporter-ureport.c:95 ++msgid "attach value (requires -a|-A and -T, conflicts with -L)" ++msgstr "附加值 (需要 -a|-A 和 -T,與 -L 衝突)" ++ ++#: ../src/plugins/reporter-ureport.c:97 ++msgid "" ++"attach data of FIELD [URL] of the last report result (requires -a|-A, -r and " ++"-T, conflicts with -l)" ++msgstr "附加上次報告結果中 FIELD [URL] 的資料 (需要 -a|-A、-r 及 -T,與 -l 衝突)" ++ ++#: ../src/plugins/reporter-ureport.c:100 ++msgid "" ++"use REPORT_RESULT_TYPE when looking for FIELD in reported_to (used only with " ++"-L)" ++msgstr "在 reported_to 中尋找 FIELD 時使用 REPORT_RESULT_TYPE (僅與 -L 搭配使用)" ++ ++#: ../src/plugins/reporter-ureport.c:102 ++msgid "" ++"attach DATA as ureporte attachment ATTACHMENT_TYPE (used only with -l|-L)" ++msgstr "附加 DATA 作為 ureporte 附件 ATTACHMENT_TYPE (僅與 -l|-L 搭配使用)" ++ ++#: ../src/plugins/reporter-ureport.c:107 + msgid "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" +@@ -2492,59 +2689,72 @@ msgid "" + msgstr "" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-A -a bthash -B " + "-b bug-id -E -e email] [-d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -r REPORT_RESULT_TYPE -L RESULT_FIELD] [-" ++"d DIR]\n" ++" [-A -a bthash -T ATTACHMENT_TYPE -l DATA] [-d DIR]\n" + "& [-v] [-c FILE] [-u URL] [-k] [-t SOURCE] [-h CREDENTIALS] [-i " + "AUTH_ITEMS]\\\n" + " [-A -a bthash -B -b bug-id -E -e email] [-d DIR]\n" + "\n" +-"上傳微型報告或新增附件至微型報告\n" ++"上傳微報告或將附件加入至微報告中\n" + "\n" +-"讀取來自於此的預設配置:" ++"從以下位置讀取預設組態: " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:144 ++#: ../src/plugins/reporter-ureport.c:179 + msgid "This problem does not have an uReport assigned." + msgstr "此問題沒有指派 uReport。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:157 ++#: ../src/plugins/reporter-ureport.c:192 + msgid "This problem has not been reported to Bugzilla." + msgstr "此問題尚未回報至 Bugzilla。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:161 ++#: ../src/plugins/reporter-ureport.c:196 + #, c-format + msgid "Unable to find bug ID in bugzilla URL '%s'" + msgstr "無法於 bugzilla URL「%s」中找到臭蟲 ID。" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:166 ++#: ../src/plugins/reporter-ureport.c:201 + #, c-format + msgid "Unable to parse bug ID from bugzilla URL '%s'" + msgstr "無法從 bugzilla URL「%s」解析臭蟲 ID。" + ++#: ../src/plugins/reporter-ureport.c:211 ++#, c-format ++msgid "This problem has not been reported to '%s'." ++msgstr "此問題尚未回報至「%s」。" ++ ++#: ../src/plugins/reporter-ureport.c:216 ++#, c-format ++msgid "The report result '%s' is missing URL." ++msgstr "報告結果「%s」缺少 URL。" ++ + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:179 ++#: ../src/plugins/reporter-ureport.c:233 + msgid "" + "Neither environment variable 'uReport_ContactEmail' nor configuration option " + "'ContactEmail' is set" + msgstr "環境變數「uReport_ContactEmail」與組態選項「ContactEmail」皆未設定" + +-#: ../src/plugins/reporter-ureport.c:185 ++#: ../src/plugins/reporter-ureport.c:239 + msgid "You need to specify bug ID, contact email or both" + msgstr "您必須指定臭蟲 ID、聯絡人電子郵件,或這兩者" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:203 ++#: ../src/plugins/reporter-ureport.c:263 + msgid "You need to specify bthash of the uReport to attach." + msgstr "您需要指定要加入附件的 uReport 其 bthash。 " + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:208 ++#: ../src/plugins/reporter-ureport.c:268 + msgid "Not uploading an empty uReport" + msgstr "不上傳空白 uReport" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/plugins/reporter-ureport.c:229 ++#: ../src/plugins/reporter-ureport.c:289 + msgid "This problem has already been reported." + msgstr "此問題已被回報過。" + +@@ -2708,7 +2918,16 @@ msgstr "透過電子郵件傳送問題資料" + msgid "Analyze the problem locally and send information via email" + msgstr "於本機分析問題並透過電子郵件傳送資訊" + +-# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_uReport.xml.in.h:1 ++msgid "Submit anonymous crash report" ++msgstr "提交匿名當機報告" ++ ++#: ../src/workflows/workflow_uReport.xml.in.h:2 ++msgid "" ++"Submit anonymous crash report - I do not want to be contacted by Red Hat " ++"Support" ++msgstr "提交匿名當機報告 – 我不希望 Red Hat 支援部門聯絡我" ++ + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:1 + #: ../src/workflows/workflow_RHELKerneloops.xml.in.h:1 + #: ../src/workflows/workflow_RHELPython.xml.in.h:1 +@@ -2716,58 +2935,63 @@ msgstr "於本機分析問題並透過電子郵件傳送資訊" + #: ../src/workflows/workflow_RHELxorg.xml.in.h:1 + #: ../src/workflows/workflow_RHELLibreport.xml.in.h:1 + #: ../src/workflows/workflow_RHELJava.xml.in.h:1 +-msgid "Report to Red Hat Customer Portal" +-msgstr "回報至 Red Hat 客戶入口" ++msgid "Ask Red Hat Support for help" ++msgstr "向 Red Hat 支援部門尋求協助" + +-# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELCCpp.xml.in.h:2 ++#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 ++#: ../src/workflows/workflow_RHELPython.xml.in.h:2 ++#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 ++#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 ++#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 ++#: ../src/workflows/workflow_RHELJava.xml.in.h:2 ++msgid "" ++"Create new Red Hat Support case - I would like to be contacted by Red Hat " ++"Support" ++msgstr "建立新的 Red Hat 支援案例 – 我希望 Red Hat 支援部門聯絡我" ++ ++# translation auto-copied from project libreport, version master, document libreport ++#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 ++#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 ++msgid "Report to Red Hat Bugzilla" ++msgstr "回報至 Red Hat Bugzilla" ++ ++# translation auto-copied from project libreport, version master, document libreport + #: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:2 + msgid "Process the C/C++ crash using the Red Hat infrastructure" + msgstr "使用 Red Hat 基礎架構處理 C/C++ 崩潰問題" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELKerneloops.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:2 + msgid "Process the kerneloops using the Red Hat infrastructure" + msgstr "使用 Red Hat 基礎架構處理 kerneloops 回報" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELPython.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:2 + msgid "Process the python exception using the Red Hat infrastructure" + msgstr "使用 Red Hat 基礎架構處理 python 例外" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELvmcore.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:2 + msgid "Process the kernel crash using the Red Hat infrastructure" + msgstr "使用 Red Hat 基礎架構處理內核崩潰問題" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELxorg.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:2 + msgid "Process the X Server problem using the Red Hat infrastructure" + msgstr "使用 Red Hat 基礎架構處理 X Server 問題" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELLibreport.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:2 + msgid "Process the problem using the Red Hat infrastructure" + msgstr "使用 Red Hat 基礎架構處理問題" + + # translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELJava.xml.in.h:2 + #: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:2 + msgid "Process the Java exception using the Red Hat infrastructure" + msgstr "使用 Red Hat 基礎架構處理 Java 例外" +- +-# translation auto-copied from project libreport, version master, document libreport +-#: ../src/workflows/workflow_RHELBugzillaCCpp.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaKerneloops.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaPython.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaVmcore.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaXorg.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaLibreport.xml.in.h:1 +-#: ../src/workflows/workflow_RHELBugzillaJava.xml.in.h:1 +-msgid "Report to Red Hat Bugzilla" +-msgstr "回報至 Red Hat Bugzilla" +-- +1.8.3.1 + diff --git a/SOURCES/1000-lib-add-Problem-Format-API.patch b/SOURCES/1000-lib-add-Problem-Format-API.patch deleted file mode 100644 index 0fabf65..0000000 --- a/SOURCES/1000-lib-add-Problem-Format-API.patch +++ /dev/null @@ -1,2244 +0,0 @@ -From 26eae803a52322683daa377006b25a3d59f0acf6 Mon Sep 17 00:00:00 2001 -From: Jakub Filak -Date: Thu, 4 Dec 2014 08:43:17 +0100 -Subject: [PATCH] lib: add Problem Format API - -Related to #303 - -Signed-off-by: Jakub Filak ---- - po/POTFILES.in | 1 + - src/include/Makefile.am | 1 + - src/include/problem_report.h | 225 ++++++++ - src/lib/Makefile.am | 5 +- - src/lib/problem_report.c | 1209 ++++++++++++++++++++++++++++++++++++++++++ - tests/Makefile.am | 3 +- - tests/problem_report.at | 690 ++++++++++++++++++++++++ - tests/testsuite.at | 1 + - 8 files changed, 2133 insertions(+), 2 deletions(-) - create mode 100644 src/include/problem_report.h - create mode 100644 src/lib/problem_report.c - create mode 100644 tests/problem_report.at - -diff --git a/po/POTFILES.in b/po/POTFILES.in -index 00046e2..c597b11 100644 ---- a/po/POTFILES.in -+++ b/po/POTFILES.in -@@ -23,6 +23,7 @@ src/lib/ureport.c - src/lib/make_descr.c - src/lib/parse_options.c - src/lib/problem_data.c -+src/lib/problem_report.c - src/lib/run_event.c - src/plugins/abrt_rh_support.c - src/plugins/report_Bugzilla.xml.in -diff --git a/src/include/Makefile.am b/src/include/Makefile.am -index de44cda..47ba399 100644 ---- a/src/include/Makefile.am -+++ b/src/include/Makefile.am -@@ -5,6 +5,7 @@ libreport_include_HEADERS = \ - dump_dir.h \ - event_config.h \ - problem_data.h \ -+ problem_report.h \ - report.h \ - run_event.h \ - libreport_curl.h \ -diff --git a/src/include/problem_report.h b/src/include/problem_report.h -new file mode 100644 -index 0000000..30781e6 ---- /dev/null -+++ b/src/include/problem_report.h -@@ -0,0 +1,225 @@ -+/* -+ Copyright (C) 2014 ABRT team -+ Copyright (C) 2014 RedHat Inc -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License along -+ with this program; if not, write to the Free Software Foundation, Inc., -+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+*/ -+#ifndef LIBREPORT_PROBLEM_REPORT_H -+#define LIBREPORT_PROBLEM_REPORT_H -+ -+#include -+#include -+#include "problem_data.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#define PR_SEC_SUMMARY "summary" -+#define PR_SEC_DESCRIPTION "description" -+ -+/* -+ * The problem report structure represents a problem data formatted according -+ * to a format string. -+ * -+ * A problem report is composed of well-known sections: -+ * - summary -+ * - descritpion -+ * - attach -+ * -+ * and custom sections accessed by: -+ * problem_report_get_section(); -+ */ -+struct problem_report; -+typedef struct problem_report problem_report_t; -+ -+/* -+ * Helpers for easily switching between FILE and struct strbuf -+ */ -+ -+/* -+ * Type of buffer used by Problem report -+ */ -+typedef FILE problem_report_buffer; -+ -+/* -+ * Wrapper for the proble buffer's formated output function. -+ */ -+#define problem_report_buffer_printf(buf, fmt, ...)\ -+ fprintf((buf), (fmt), ##__VA_ARGS__) -+ -+ -+/* -+ * Get a section buffer -+ * -+ * Use this function if you need to amend something to a formatted section. -+ * -+ * @param self Problem report -+ * @param section_name Name of required section -+ * @return Always valid pointer to a section buffer -+ */ -+problem_report_buffer *problem_report_get_buffer(const problem_report_t *self, -+ const char *section_name); -+ -+/* -+ * Get Summary string -+ * -+ * The returned pointer is valid as long as you perform no further output to -+ * the summary buffer. -+ * -+ * @param self Problem report -+ * @return Non-NULL pointer to summary data -+ */ -+const char *problem_report_get_summary(const problem_report_t *self); -+ -+/* -+ * Get Description string -+ * -+ * The returned pointer is valid as long as you perform no further output to -+ * the description buffer. -+ * -+ * @param self Problem report -+ * @return Non-NULL pointer to description data -+ */ -+const char *problem_report_get_description(const problem_report_t *self); -+ -+/* -+ * Get Section's string -+ * -+ * The returned pointer is valid as long as you perform no further output to -+ * the section's buffer. -+ * -+ * @param self Problem report -+ * @param section_name Name of the required section -+ * @return Non-NULL pointer to description data -+ */ -+const char *problem_report_get_section(const problem_report_t *self, -+ const char *section_name); -+ -+/* -+ * Get GList of the problem data items that are to be attached -+ * -+ * @param self Problem report -+ * @return A pointer to GList (NULL means empty list) -+ */ -+GList *problem_report_get_attachments(const problem_report_t *self); -+ -+/* -+ * Releases all resources allocated by a problem report -+ * -+ * @param self Problem report -+ */ -+void problem_report_free(problem_report_t *self); -+ -+ -+/* -+ * An enum of Extra section flags -+ */ -+enum problem_formatter_section_flags { -+ PFFF_REQUIRED = 1 << 0, ///< section must be present in the format spec -+}; -+ -+/* -+ * The problem formatter structure formats a problem data according to a format -+ * string and stores result a problem report. -+ * -+ * The problem formatter uses '%reason%' as %summary section format string, if -+ * %summary is not provided by a format string. -+ */ -+struct problem_formatter; -+typedef struct problem_formatter problem_formatter_t; -+ -+/* -+ * Constructs a new problem formatter. -+ * -+ * @return Non-NULL pointer to the new problem formatter -+ */ -+problem_formatter_t *problem_formatter_new(void); -+ -+/* -+ * Releases all resources allocated by a problem formatter -+ * -+ * @param self Problem formatter -+ */ -+void problem_formatter_free(problem_formatter_t *self); -+ -+/* -+ * Adds a new recognized section -+ * -+ * The problem formatter ignores a section in the format spec if the section is -+ * not one of the default nor added by this function. -+ * -+ * How the problem formatter handles these extra sections: -+ * -+ * A custom section is something like %description section. %description is the -+ * default section where all text (sub)sections are stored. If the formatter -+ * finds the custom section in format string, then starts storing text -+ * (sub)sections in the custom section. -+ * -+ * (%description) |:: comment -+ * (%description) | -+ * (%description) |Package:: package -+ * (%description) | -+ * (%additiona_info) |%additional_info:: -+ * (%additiona_info) |%reporter% -+ * (%additiona_info) |User:: user_name,uid -+ * (%additiona_info) | -+ * (%additiona_info) |Directories:: root,cwd -+ * -+ * -+ * @param self Problem formatter -+ * @param name Name of the added section -+ * @param flags Info about the added section -+ * @return Zero on success. -EEXIST if the name is already known by the formatter -+ */ -+int problem_formatter_add_section(problem_formatter_t *self, const char *name, int flags); -+ -+/* -+ * Loads a problem format from a string. -+ * -+ * @param self Problem formatter -+ * @param fmt Format -+ * @return Zero on success or number of warnings (e.g. missing section, -+ * unrecognized section). -+ */ -+int problem_formatter_load_string(problem_formatter_t* self, const char *fmt); -+ -+ -+/* -+ * Loads a problem format from a file. -+ * -+ * @param self Problem formatter -+ * @param pat Path to the format file -+ * @return Zero on success or number of warnings (e.g. missing section, -+ * unrecognized section). -+ */ -+int problem_formatter_load_file(problem_formatter_t* self, const char *path); -+ -+/* -+ * Creates a new problem report, formats the data according to the loaded -+ * format string and stores output in the report. -+ * -+ * @param self Problem formatter -+ * @param data Problem data to format -+ * @param report Pointer where the created problem report is to be stored -+ * @return Zero on success, otherwise non-zero value. -+ */ -+int problem_formatter_generate_report(const problem_formatter_t *self, problem_data_t *data, problem_report_t **report); -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif // LIBREPORT_PROBLEM_REPORT_H -diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am -index 7d9722a..a0001ef 100644 ---- a/src/lib/Makefile.am -+++ b/src/lib/Makefile.am -@@ -38,6 +38,7 @@ libreport_la_SOURCES = \ - make_descr.c \ - run_event.c \ - problem_data.c \ -+ problem_report.c \ - create_dump_dir.c \ - abrt_types.c \ - parse_release.c \ -@@ -76,6 +77,7 @@ libreport_la_CPPFLAGS = \ - $(GLIB_CFLAGS) \ - $(GOBJECT_CFLAGS) \ - $(AUGEAS_CFLAGS) \ -+ $(SATYR_CFLAGS) \ - -D_GNU_SOURCE - libreport_la_LDFLAGS = \ - -version-info 0:1:0 -@@ -84,7 +86,8 @@ libreport_la_LIBADD = \ - $(GLIB_LIBS) \ - $(JOURNAL_LIBS) \ - $(GOBJECT_LIBS) \ -- $(AUGEAS_LIBS) -+ $(AUGEAS_LIBS) \ -+ $(SATYR_LIBS) - - libreportconfdir = $(CONF_DIR) - dist_libreportconf_DATA = \ -diff --git a/src/lib/problem_report.c b/src/lib/problem_report.c -new file mode 100644 -index 0000000..0afc1ca ---- /dev/null -+++ b/src/lib/problem_report.c -@@ -0,0 +1,1209 @@ -+/* -+ Copyright (C) 2014 ABRT team -+ Copyright (C) 2014 RedHat Inc -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License along -+ with this program; if not, write to the Free Software Foundation, Inc., -+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+*/ -+ -+#include "problem_report.h" -+#include "internal_libreport.h" -+ -+#include -+#include -+ -+#include -+ -+#define DESTROYED_POINTER (void *)0xdeadbeef -+ -+/* FORMAT: -+ * |%summary:: Hello, world -+ * |Problem description:: %bare_comment -+ * | -+ * |Package:: package -+ * | -+ * |%attach: %binary, backtrace -+ * | -+ * |%additional_info:: -+ * |%reporter% -+ * |User:: user_name,uid -+ * | -+ * |Directories:: root,cwd -+ * -+ * PARSED DATA (list of struct section_t): -+ * { -+ * section_t { -+ * .name = '%summary'; -+ * .items = { 'Hello, world' }; -+ * .children = NULL; -+ * }, -+ * section_t { -+ * .name = '%attach' -+ * .items = { '%binary', 'backtrace' }; -+ * .children = NULL; -+ * }, -+ * section_t { -+ * .name = '%description' -+ * .items = NULL; -+ * .children = { -+ * section_t { -+ * .name = 'Problem description:'; -+ * .items = { '%bare_comment' }; -+ * .children = NULL; -+ * }, -+ * section_t { -+ * .name = ''; -+ * .items = NULL; -+ * .children = NULL; -+ * }, -+ * section_t { -+ * .name = 'Package:'; -+ * .items = { 'package' }; -+ * .children = NULL; -+ * }, -+ * } -+ * }, -+ * section_t { -+ * .name = '%additional_info' -+ * .items = { '%reporter%' }; -+ * .children = { -+ * section_t { -+ * .name = 'User:'; -+ * .items = { 'user_name', 'uid' }; -+ * .children = NULL; -+ * }, -+ * section_t { -+ * .name = ''; -+ * .items = NULL; -+ * .children = NULL; -+ * }, -+ * section_t { -+ * .name = 'Directories:'; -+ * .items = { 'root', 'cwd' }; -+ * .children = NULL; -+ * }, -+ * } -+ * } -+ * } -+ */ -+struct section_t { -+ char *name; ///< name or output text (%summar, 'Package version:'); -+ GList *items; ///< list of file names and special items (%reporter, %binar, ...) -+ GList *children; ///< list of sub sections (struct section_t) -+}; -+ -+typedef struct section_t section_t; -+ -+static section_t * -+section_new(const char *name) -+{ -+ section_t *self = xmalloc(sizeof(*self)); -+ self->name = xstrdup(name); -+ self->items = NULL; -+ self->children = NULL; -+ -+ return self; -+} -+ -+static void -+section_free(section_t *self) -+{ -+ if (self == NULL) -+ return; -+ -+ free(self->name); -+ g_list_free_full(self->items, free); -+ g_list_free_full(self->children, (GDestroyNotify)section_free); -+ -+ free(self); -+} -+ -+static int -+section_name_cmp(section_t *lhs, const char *rhs) -+{ -+ return strcmp((lhs->name + 1), rhs); -+} -+ -+/* Utility functions */ -+ -+static GList* -+split_string_on_char(const char *str, char ch) -+{ -+ GList *list = NULL; -+ for (;;) -+ { -+ const char *delim = strchrnul(str, ch); -+ list = g_list_prepend(list, xstrndup(str, delim - str)); -+ if (*delim == '\0') -+ break; -+ str = delim + 1; -+ } -+ return g_list_reverse(list); -+} -+ -+static int -+compare_item_name(const char *lookup, const char *name) -+{ -+ if (lookup[0] == '-') -+ lookup++; -+ else if (strncmp(lookup, "%bare_", 6) == 0) -+ lookup += 6; -+ return strcmp(lookup, name); -+} -+ -+static int -+is_item_name_in_section(const section_t *lookup, const char *name) -+{ -+ if (g_list_find_custom(lookup->items, name, (GCompareFunc)compare_item_name)) -+ return 0; /* "found it!" */ -+ return 1; -+} -+ -+static bool is_explicit_or_forbidden(const char *name, GList *comment_fmt_spec); -+ -+static int -+is_explicit_or_forbidden_child(const section_t *master_section, const char *name) -+{ -+ if (is_explicit_or_forbidden(name, master_section->children)) -+ return 0; /* "found it!" */ -+ return 1; -+} -+ -+/* For example: 'package' belongs to '%oneline', but 'package' is used in -+ * 'Version of component', so it is not very helpful to include that file once -+ * more in another section -+ */ -+static bool -+is_explicit_or_forbidden(const char *name, GList *comment_fmt_spec) -+{ -+ return g_list_find_custom(comment_fmt_spec, name, (GCompareFunc)is_item_name_in_section) -+ || g_list_find_custom(comment_fmt_spec, name, (GCompareFunc)is_explicit_or_forbidden_child); -+} -+ -+static GList* -+load_stream(FILE *fp) -+{ -+ assert(fp); -+ -+ GList *sections = NULL; -+ section_t *master = section_new("%description"); -+ section_t *sec = NULL; -+ -+ sections = g_list_append(sections, master); -+ -+ char *line; -+ while ((line = xmalloc_fgetline(fp)) != NULL) -+ { -+ /* Skip comments */ -+ char first = *skip_whitespace(line); -+ if (first == '#') -+ goto free_line; -+ -+ /* Handle trailing backslash continuation */ -+ check_continuation: ; -+ unsigned len = strlen(line); -+ if (len && line[len-1] == '\\') -+ { -+ line[len-1] = '\0'; -+ char *next_line = xmalloc_fgetline(fp); -+ if (next_line) -+ { -+ line = append_to_malloced_string(line, next_line); -+ free(next_line); -+ goto check_continuation; -+ } -+ } -+ -+ /* We are reusing line buffer to form temporary -+ * "key\0values\0..." in its beginning -+ */ -+ bool summary_line = false; -+ char *value = NULL; -+ char *src; -+ char *dst; -+ for (src = dst = line; *src; src++) -+ { -+ char c = *src; -+ /* did we reach the value list? */ -+ if (!value && c == ':' && src[1] == ':') -+ { -+ *dst++ = '\0'; /* terminate key */ -+ src += 1; -+ value = dst; /* remember where value starts */ -+ summary_line = (strcmp(line, "%summary") == 0); -+ if (summary_line) -+ { -+ value = (src + 1); -+ break; -+ } -+ continue; -+ } -+ /* skip whitespace in value list */ -+ if (value && isspace(c)) -+ continue; -+ *dst++ = c; /* store next key or value char */ -+ } -+ -+ GList *item_list = NULL; -+ if (summary_line) -+ { -+ /* %summary is special */ -+ item_list = g_list_append(NULL, xstrdup(skip_whitespace(value))); -+ } -+ else -+ { -+ *dst = '\0'; /* terminate value (or key) */ -+ if (value) -+ item_list = split_string_on_char(value, ','); -+ } -+ -+ sec = section_new(line); -+ sec->items = item_list; -+ -+ if (sec->name[0] == '%') -+ { -+ if (!summary_line && strcmp(sec->name, "%attach") != 0) -+ { -+ master->children = g_list_reverse(master->children); -+ master = sec; -+ } -+ -+ sections = g_list_prepend(sections, sec); -+ } -+ else -+ master->children = g_list_prepend(master->children, sec); -+ -+ free_line: -+ free(line); -+ } -+ -+ /* If master equals sec, then master's children list was not yet reversed. -+ * -+ * %description is the default section (i.e is not explicitly mentioned) -+ * and %summary nor %attach cause its children list to reverse. -+ */ -+ if (master == sec || strcmp(master->name, "%description") == 0) -+ master->children = g_list_reverse(master->children); -+ -+ return sections; -+} -+ -+ -+/* Summary generation */ -+ -+#define MAX_OPT_DEPTH 10 -+static int -+format_percented_string(const char *str, problem_data_t *pd, FILE *result) -+{ -+ long old_pos[MAX_OPT_DEPTH] = { 0 }; -+ int okay[MAX_OPT_DEPTH] = { 1 }; -+ long len = 0; -+ int opt_depth = 1; -+ -+ while (*str) { -+ switch (*str) { -+ default: -+ putc(*str, result); -+ len++; -+ str++; -+ break; -+ case '\\': -+ if (str[1]) -+ str++; -+ putc(*str, result); -+ len++; -+ str++; -+ break; -+ case '[': -+ if (str[1] == '[' && opt_depth < MAX_OPT_DEPTH) -+ { -+ old_pos[opt_depth] = len; -+ okay[opt_depth] = 1; -+ opt_depth++; -+ str += 2; -+ } else { -+ putc(*str, result); -+ len++; -+ str++; -+ } -+ break; -+ case ']': -+ if (str[1] == ']' && opt_depth > 1) -+ { -+ opt_depth--; -+ if (!okay[opt_depth]) -+ { -+ fseek(result, old_pos[opt_depth], SEEK_SET); -+ len = old_pos[opt_depth]; -+ } -+ str += 2; -+ } else { -+ putc(*str, result); -+ len++; -+ str++; -+ } -+ break; -+ case '%': ; -+ char *nextpercent = strchr(++str, '%'); -+ if (!nextpercent) -+ { -+ error_msg_and_die("Unterminated %%element%%: '%s'", str - 1); -+ } -+ -+ *nextpercent = '\0'; -+ const problem_item *item = problem_data_get_item_or_NULL(pd, str); -+ *nextpercent = '%'; -+ -+ if (item && (item->flags & CD_FLAG_TXT)) -+ { -+ fputs(item->content, result); -+ len += strlen(item->content); -+ } -+ else -+ okay[opt_depth - 1] = 0; -+ str = nextpercent + 1; -+ break; -+ } -+ } -+ -+ if (opt_depth > 1) -+ { -+ error_msg_and_die("Unbalanced [[ ]] bracket"); -+ } -+ -+ if (!okay[0]) -+ { -+ error_msg("Undefined variable outside of [[ ]] bracket"); -+ } -+ -+ return 0; -+} -+ -+/* BZ comment generation */ -+ -+static int -+append_text(struct strbuf *result, const char *item_name, const char *content, bool print_item_name) -+{ -+ char *eol = strchrnul(content, '\n'); -+ if (eol[0] == '\0' || eol[1] == '\0') -+ { -+ /* one-liner */ -+ int pad = 16 - (strlen(item_name) + 2); -+ if (pad < 0) -+ pad = 0; -+ if (print_item_name) -+ strbuf_append_strf(result, -+ eol[0] == '\0' ? "%s: %*s%s\n" : "%s: %*s%s", -+ item_name, pad, "", content -+ ); -+ else -+ strbuf_append_strf(result, -+ eol[0] == '\0' ? "%s\n" : "%s", -+ content -+ ); -+ } -+ else -+ { -+ /* multi-line item */ -+ if (print_item_name) -+ strbuf_append_strf(result, "%s:\n", item_name); -+ for (;;) -+ { -+ eol = strchrnul(content, '\n'); -+ strbuf_append_strf(result, -+ /* For %bare_multiline_item, we don't want to print colons */ -+ (print_item_name ? ":%.*s\n" : "%.*s\n"), -+ (int)(eol - content), content -+ ); -+ if (eol[0] == '\0' || eol[1] == '\0') -+ break; -+ content = eol + 1; -+ } -+ } -+ return 1; -+} -+ -+static int -+append_short_backtrace(struct strbuf *result, problem_data_t *problem_data, size_t max_text_size, bool print_item_name) -+{ -+ const problem_item *item = problem_data_get_item_or_NULL(problem_data, -+ FILENAME_BACKTRACE); -+ if (!item) -+ return 0; /* "I did not print anything" */ -+ if (!(item->flags & CD_FLAG_TXT)) -+ return 0; /* "I did not print anything" */ -+ -+ char *truncated = NULL; -+ -+ if (strlen(item->content) >= max_text_size) -+ { -+ log_debug("'backtrace' exceeds the text file size, going to append its short version"); -+ -+ char *error_msg = NULL; -+ const char *analyzer = problem_data_get_content_or_NULL(problem_data, FILENAME_ANALYZER); -+ if (!analyzer) -+ { -+ log_debug("Problem data does not contain '"FILENAME_ANALYZER"' file"); -+ return 0; -+ } -+ -+ /* For CCpp crashes, use the GDB-produced backtrace which should be -+ * available by now. sr_abrt_type_from_analyzer returns SR_REPORT_CORE -+ * by default for CCpp crashes. -+ */ -+ enum sr_report_type report_type = sr_abrt_type_from_analyzer(analyzer); -+ if (strcmp(analyzer, "CCpp") == 0) -+ { -+ log_debug("Successfully identified 'CCpp' abrt type"); -+ report_type = SR_REPORT_GDB; -+ } -+ -+ struct sr_stacktrace *backtrace = sr_stacktrace_parse(report_type, -+ item->content, &error_msg); -+ -+ if (!backtrace) -+ { -+ log(_("Can't parse backtrace: %s"), error_msg); -+ free(error_msg); -+ return 0; -+ } -+ -+ /* Get optimized thread stack trace for 10 top most frames */ -+ truncated = sr_stacktrace_to_short_text(backtrace, 10); -+ sr_stacktrace_free(backtrace); -+ -+ if (!truncated) -+ { -+ log(_("Can't generate stacktrace description (no crash thread?)")); -+ return 0; -+ } -+ } -+ else -+ { -+ log_debug("'backtrace' is small enough to be included as is"); -+ } -+ -+ append_text(result, -+ /*item_name:*/ truncated ? "truncated_backtrace" : FILENAME_BACKTRACE, -+ /*content:*/ truncated ? truncated : item->content, -+ print_item_name -+ ); -+ free(truncated); -+ return 1; -+} -+ -+static int -+append_item(struct strbuf *result, const char *item_name, problem_data_t *pd, GList *comment_fmt_spec) -+{ -+ bool print_item_name = (strncmp(item_name, "%bare_", strlen("%bare_")) != 0); -+ if (!print_item_name) -+ item_name += strlen("%bare_"); -+ -+ if (item_name[0] != '%') -+ { -+ struct problem_item *item = problem_data_get_item_or_NULL(pd, item_name); -+ if (!item) -+ return 0; /* "I did not print anything" */ -+ if (!(item->flags & CD_FLAG_TXT)) -+ return 0; /* "I did not print anything" */ -+ -+ char *formatted = problem_item_format(item); -+ char *content = formatted ? formatted : item->content; -+ append_text(result, item_name, content, print_item_name); -+ free(formatted); -+ return 1; /* "I printed something" */ -+ } -+ -+ /* Special item name */ -+ -+ /* Compat with previously-existed ad-hockery: %short_backtrace */ -+ if (strcmp(item_name, "%short_backtrace") == 0) -+ return append_short_backtrace(result, pd, CD_TEXT_ATT_SIZE_BZ, print_item_name); -+ -+ /* Compat with previously-existed ad-hockery: %reporter */ -+ if (strcmp(item_name, "%reporter") == 0) -+ return append_text(result, "reporter", PACKAGE"-"VERSION, print_item_name); -+ -+ /* %oneline,%multiline,%text */ -+ bool oneline = (strcmp(item_name+1, "oneline" ) == 0); -+ bool multiline = (strcmp(item_name+1, "multiline") == 0); -+ bool text = (strcmp(item_name+1, "text" ) == 0); -+ if (!oneline && !multiline && !text) -+ { -+ log("Unknown or unsupported element specifier '%s'", item_name); -+ return 0; /* "I did not print anything" */ -+ } -+ -+ int printed = 0; -+ -+ /* Iterate over _sorted_ items */ -+ GList *sorted_names = g_hash_table_get_keys(pd); -+ sorted_names = g_list_sort(sorted_names, (GCompareFunc)strcmp); -+ -+ /* %text => do as if %oneline, then repeat as if %multiline */ -+ if (text) -+ oneline = 1; -+ -+ again: ; -+ GList *l = sorted_names; -+ while (l) -+ { -+ const char *name = l->data; -+ l = l->next; -+ struct problem_item *item = g_hash_table_lookup(pd, name); -+ if (!item) -+ continue; /* paranoia, won't happen */ -+ -+ if (!(item->flags & CD_FLAG_TXT)) -+ continue; -+ -+ if (is_explicit_or_forbidden(name, comment_fmt_spec)) -+ continue; -+ -+ char *formatted = problem_item_format(item); -+ char *content = formatted ? formatted : item->content; -+ char *eol = strchrnul(content, '\n'); -+ bool is_oneline = (eol[0] == '\0' || eol[1] == '\0'); -+ if (oneline == is_oneline) -+ printed |= append_text(result, name, content, print_item_name); -+ free(formatted); -+ } -+ if (text && oneline) -+ { -+ /* %text, and we just did %oneline. Repeat as if %multiline */ -+ oneline = 0; -+ /*multiline = 1; - not checked in fact, so why bother setting? */ -+ goto again; -+ } -+ -+ g_list_free(sorted_names); /* names themselves are not freed */ -+ -+ return printed; -+} -+ -+#define add_to_section_output(format, ...) \ -+ do { \ -+ for (; empty_lines > 0; --empty_lines) fputc('\n', result); \ -+ empty_lines = 0; \ -+ fprintf(result, format, __VA_ARGS__); \ -+ } while (0) -+ -+static void -+format_section(section_t *section, problem_data_t *pd, GList *comment_fmt_spec, FILE *result) -+{ -+ int empty_lines = -1; -+ -+ for (GList *iter = section->children; iter; iter = g_list_next(iter)) -+ { -+ section_t *child = (section_t *)iter->data; -+ if (child->items) -+ { -+ /* "Text: item[,item]..." */ -+ struct strbuf *output = strbuf_new(); -+ GList *item = child->items; -+ while (item) -+ { -+ const char *str = item->data; -+ item = item->next; -+ if (str[0] == '-') /* "-name", ignore it */ -+ continue; -+ append_item(output, str, pd, comment_fmt_spec); -+ } -+ -+ if (output->len != 0) -+ add_to_section_output((child->name[0] ? "%s:\n%s" : "%s%s"), -+ child->name, output->buf); -+ -+ strbuf_free(output); -+ } -+ else -+ { -+ /* Just "Text" (can be "") */ -+ -+ /* Filter out trailint empty lines */ -+ if (child->name[0] != '\0') -+ add_to_section_output("%s\n", child->name); -+ /* Do not count empty lines, if output wasn't yet produced */ -+ else if (empty_lines >= 0) -+ ++empty_lines; -+ } -+ } -+} -+ -+static GList * -+get_special_items(const char *item_name, problem_data_t *pd, GList *comment_fmt_spec) -+{ -+ /* %oneline,%multiline,%text,%binary */ -+ bool oneline = (strcmp(item_name+1, "oneline" ) == 0); -+ bool multiline = (strcmp(item_name+1, "multiline") == 0); -+ bool text = (strcmp(item_name+1, "text" ) == 0); -+ bool binary = (strcmp(item_name+1, "binary" ) == 0); -+ if (!oneline && !multiline && !text && !binary) -+ { -+ log("Unknown or unsupported element specifier '%s'", item_name); -+ return NULL; -+ } -+ -+ log_debug("Special item_name '%s', iterating for attach...", item_name); -+ GList *result = 0; -+ -+ /* Iterate over _sorted_ items */ -+ GList *sorted_names = g_hash_table_get_keys(pd); -+ sorted_names = g_list_sort(sorted_names, (GCompareFunc)strcmp); -+ -+ GList *l = sorted_names; -+ while (l) -+ { -+ const char *name = l->data; -+ l = l->next; -+ struct problem_item *item = g_hash_table_lookup(pd, name); -+ if (!item) -+ continue; /* paranoia, won't happen */ -+ -+ if (is_explicit_or_forbidden(name, comment_fmt_spec)) -+ continue; -+ -+ if ((item->flags & CD_FLAG_TXT) && !binary) -+ { -+ char *content = item->content; -+ char *eol = strchrnul(content, '\n'); -+ bool is_oneline = (eol[0] == '\0' || eol[1] == '\0'); -+ if (text || oneline == is_oneline) -+ result = g_list_append(result, xstrdup(name)); -+ } -+ else if ((item->flags & CD_FLAG_BIN) && binary) -+ result = g_list_append(result, xstrdup(name)); -+ } -+ -+ g_list_free(sorted_names); /* names themselves are not freed */ -+ -+ -+ log_debug("...Done iterating over '%s' for attach", item_name); -+ -+ return result; -+} -+ -+static GList * -+get_attached_files(problem_data_t *pd, GList *items, GList *comment_fmt_spec) -+{ -+ GList *result = NULL; -+ GList *item = items; -+ while (item != NULL) -+ { -+ const char *item_name = item->data; -+ item = item->next; -+ if (item_name[0] == '-') /* "-name", ignore it */ -+ continue; -+ -+ if (item_name[0] != '%') -+ { -+ result = g_list_append(result, xstrdup(item_name)); -+ continue; -+ } -+ -+ GList *special = get_special_items(item_name, pd, comment_fmt_spec); -+ if (special == NULL) -+ { -+ log_notice("No attachment found for '%s'", item_name); -+ continue; -+ } -+ -+ result = g_list_concat(result, special); -+ } -+ -+ return result; -+} -+ -+/* -+ * Problem Report - memor stream -+ * -+ * A wrapper for POSIX memory stream. -+ * -+ * A memory stream is presented as FILE *. -+ * -+ * A memory stream is associated with a pointer to written data and a pointer -+ * to size of the written data. -+ * -+ * This structure holds all of the used pointers. -+ */ -+struct memstream_buffer -+{ -+ char *msb_buffer; -+ size_t msb_size; -+ FILE *msb_stream; -+}; -+ -+static struct memstream_buffer * -+memstream_buffer_new() -+{ -+ struct memstream_buffer *self = xmalloc(sizeof(*self)); -+ -+ self->msb_buffer = NULL; -+ self->msb_stream = open_memstream(&(self->msb_buffer), &(self->msb_size)); -+ -+ return self; -+} -+ -+static void -+memstream_buffer_free(struct memstream_buffer *self) -+{ -+ if (self == NULL) -+ return; -+ -+ fclose(self->msb_stream); -+ self->msb_stream = DESTROYED_POINTER; -+ -+ free(self->msb_buffer); -+ self->msb_buffer = DESTROYED_POINTER; -+ -+ free(self); -+} -+ -+static FILE * -+memstream_get_stream(struct memstream_buffer *self) -+{ -+ assert(self != NULL); -+ -+ return self->msb_stream; -+} -+ -+static const char * -+memstream_get_string(struct memstream_buffer *self) -+{ -+ assert(self != NULL); -+ assert(self->msb_stream != NULL); -+ -+ fflush(self->msb_stream); -+ -+ return self->msb_buffer; -+} -+ -+ -+/* -+ * Problem Report -+ * -+ * The formated strings are internaly stored in "buffer"s. If a programer wants -+ * to get a formated section data, a getter function extracts those data from -+ * the apropriate buffer and returns them in form of null-terminated string. -+ * -+ * Each section has own buffer. -+ * -+ * There are three common sections that are always present: -+ * 1. summary -+ * 2. description -+ * 3. attach -+ * Buffers of these sections has own structure member for the sake of -+ * efficiency. -+ * -+ * The custom sections hash their buffers stored in a map where key is a -+ * section's name and value is a section's buffer. -+ * -+ * Problem report provides the programers with the possibility to ammend -+ * formated output to any section buffer. -+ */ -+struct problem_report -+{ -+ struct memstream_buffer *pr_sec_summ; ///< %summary buffer -+ struct memstream_buffer *pr_sec_desc; ///< %description buffer -+ GList *pr_attachments; ///< %attach - list of file names -+ GHashTable *pr_sec_custom; ///< map : %(custom section) -> buffer -+}; -+ -+static problem_report_t * -+problem_report_new() -+{ -+ problem_report_t *self = xmalloc(sizeof(*self)); -+ -+ self->pr_sec_summ = memstream_buffer_new(); -+ self->pr_sec_desc = memstream_buffer_new(); -+ self->pr_attachments = NULL; -+ self->pr_sec_custom = NULL; -+ -+ return self; -+} -+ -+static void -+problem_report_initialize_custom_sections(problem_report_t *self) -+{ -+ assert(self != NULL); -+ assert(self->pr_sec_custom == NULL); -+ -+ self->pr_sec_custom = g_hash_table_new_full(g_str_hash, g_str_equal, free, -+ (GDestroyNotify)memstream_buffer_free); -+} -+ -+static void -+problem_report_destroy_custom_sections(problem_report_t *self) -+{ -+ assert(self != NULL); -+ assert(self->pr_sec_custom != NULL); -+ -+ g_hash_table_destroy(self->pr_sec_custom); -+} -+ -+static int -+problem_report_add_custom_section(problem_report_t *self, const char *name) -+{ -+ assert(self != NULL); -+ -+ if (self->pr_sec_custom == NULL) -+ { -+ problem_report_initialize_custom_sections(self); -+ } -+ -+ if (problem_report_get_buffer(self, name)) -+ { -+ log_warning("Custom section already exists : '%s'", name); -+ return -EEXIST; -+ } -+ -+ log_debug("Problem report enriched with section : '%s'", name); -+ g_hash_table_insert(self->pr_sec_custom, xstrdup(name), memstream_buffer_new()); -+ return 0; -+} -+ -+static struct memstream_buffer * -+problem_report_get_section_buffer(const problem_report_t *self, const char *section_name) -+{ -+ if (self->pr_sec_custom == NULL) -+ { -+ log_debug("Couldn't find section '%s': no custom section added", section_name); -+ return NULL; -+ } -+ -+ return (struct memstream_buffer *)g_hash_table_lookup(self->pr_sec_custom, section_name); -+} -+ -+problem_report_buffer * -+problem_report_get_buffer(const problem_report_t *self, const char *section_name) -+{ -+ assert(self != NULL); -+ assert(section_name != NULL); -+ -+ if (strcmp(PR_SEC_SUMMARY, section_name) == 0) -+ return memstream_get_stream(self->pr_sec_summ); -+ -+ if (strcmp(PR_SEC_DESCRIPTION, section_name) == 0) -+ return memstream_get_stream(self->pr_sec_desc); -+ -+ struct memstream_buffer *buf = problem_report_get_section_buffer(self, section_name); -+ return buf == NULL ? NULL : memstream_get_stream(buf); -+} -+ -+const char * -+problem_report_get_summary(const problem_report_t *self) -+{ -+ assert(self != NULL); -+ -+ return memstream_get_string(self->pr_sec_summ); -+} -+ -+const char * -+problem_report_get_description(const problem_report_t *self) -+{ -+ assert(self != NULL); -+ -+ return memstream_get_string(self->pr_sec_desc); -+} -+ -+const char * -+problem_report_get_section(const problem_report_t *self, const char *section_name) -+{ -+ assert(self != NULL); -+ assert(section_name); -+ -+ struct memstream_buffer *buf = problem_report_get_section_buffer(self, section_name); -+ -+ if (buf == NULL) -+ return NULL; -+ -+ return memstream_get_string(buf); -+} -+ -+static void -+problem_report_set_attachments(problem_report_t *self, GList *attachments) -+{ -+ assert(self != NULL); -+ assert(self->pr_attachments == NULL); -+ -+ self->pr_attachments = attachments; -+} -+ -+GList * -+problem_report_get_attachments(const problem_report_t *self) -+{ -+ assert(self != NULL); -+ -+ return self->pr_attachments; -+} -+ -+void -+problem_report_free(problem_report_t *self) -+{ -+ if (self == NULL) -+ return; -+ -+ memstream_buffer_free(self->pr_sec_summ); -+ self->pr_sec_summ = DESTROYED_POINTER; -+ -+ memstream_buffer_free(self->pr_sec_desc); -+ self->pr_sec_desc = DESTROYED_POINTER; -+ -+ g_list_free_full(self->pr_attachments, free); -+ self->pr_attachments = DESTROYED_POINTER; -+ -+ if (self->pr_sec_custom) -+ { -+ problem_report_destroy_custom_sections(self); -+ self->pr_sec_custom = DESTROYED_POINTER; -+ } -+ -+ free(self); -+} -+ -+/* -+ * Problem Formatter - extra section -+ */ -+struct extra_section -+{ -+ char *pfes_name; ///< name with % prefix -+ int pfes_flags; ///< whether is required or not -+}; -+ -+static struct extra_section * -+extra_section_new(const char *name, int flags) -+{ -+ struct extra_section *self = xmalloc(sizeof(*self)); -+ -+ self->pfes_name = xstrdup(name); -+ self->pfes_flags = flags; -+ -+ return self; -+} -+ -+static void -+extra_section_free(struct extra_section *self) -+{ -+ if (self == NULL) -+ return; -+ -+ free(self->pfes_name); -+ self->pfes_name = DESTROYED_POINTER; -+ -+ free(self); -+} -+ -+static int -+extra_section_name_cmp(struct extra_section *lhs, const char *rhs) -+{ -+ return strcmp(lhs->pfes_name, rhs); -+} -+ -+/* -+ * Problem Formatter -+ * -+ * Holds parsed sections lists. -+ */ -+struct problem_formatter -+{ -+ GList *pf_sections; ///< parsed sections (struct section_t) -+ GList *pf_extra_sections; ///< user configured sections (struct extra_section) -+ char *pf_default_summary; ///< default summary format -+}; -+ -+problem_formatter_t * -+problem_formatter_new(void) -+{ -+ problem_formatter_t *self = xzalloc(sizeof(*self)); -+ -+ self->pf_default_summary = xstrdup("%reason%"); -+ -+ return self; -+} -+ -+void -+problem_formatter_free(problem_formatter_t *self) -+{ -+ if (self == NULL) -+ return; -+ -+ g_list_free_full(self->pf_sections, (GDestroyNotify)section_free); -+ self->pf_sections = DESTROYED_POINTER; -+ -+ g_list_free_full(self->pf_extra_sections, (GDestroyNotify)extra_section_free); -+ self->pf_extra_sections = DESTROYED_POINTER; -+ -+ free(self->pf_default_summary); -+ self->pf_default_summary = DESTROYED_POINTER; -+ -+ free(self); -+} -+ -+static int -+problem_formatter_is_section_known(problem_formatter_t *self, const char *name) -+{ -+ return strcmp(name, "summary") == 0 -+ || strcmp(name, "attach") == 0 -+ || strcmp(name, "description") == 0 -+ || NULL != g_list_find_custom(self->pf_extra_sections, name, (GCompareFunc)extra_section_name_cmp); -+} -+ -+// i.e additional_info -> no flags -+int -+problem_formatter_add_section(problem_formatter_t *self, const char *name, int flags) -+{ -+ /* Do not add already added sections */ -+ if (problem_formatter_is_section_known(self, name)) -+ { -+ log_debug("Extra section already exists : '%s' ", name); -+ return -EEXIST; -+ } -+ -+ self->pf_extra_sections = g_list_prepend(self->pf_extra_sections, -+ extra_section_new(name, flags)); -+ -+ return 0; -+} -+ -+// check format validity and produce warnings -+static int -+problem_formatter_validate(problem_formatter_t *self) -+{ -+ int retval = 0; -+ -+ /* Go through all (struct extra_section)s and check whete those having flag -+ * PFFF_REQUIRED are present in the parsed (struct section_t)s. -+ */ -+ for (GList *iter = self->pf_extra_sections; iter; iter = g_list_next(iter)) -+ { -+ struct extra_section *section = (struct extra_section *)iter->data; -+ -+ log_debug("Validating extra section : '%s'", section->pfes_name); -+ -+ if ( (PFFF_REQUIRED & section->pfes_flags) -+ && NULL == g_list_find_custom(self->pf_sections, section->pfes_name, (GCompareFunc)section_name_cmp)) -+ { -+ log_warning("Problem format misses required section : '%s'", section->pfes_name); -+ ++retval; -+ } -+ } -+ -+ /* Go through all the parsed (struct section_t)s check whether are all -+ * known, i.e. each section is either one of the common sections (summary, -+ * description, attach) or is present in the (struct extra_section)s. -+ */ -+ for (GList *iter = self->pf_sections; iter; iter = g_list_next(iter)) -+ { -+ section_t *section = (section_t *)iter->data; -+ -+ if (!problem_formatter_is_section_known(self, (section->name + 1))) -+ { -+ log_warning("Problem format contains unrecognized section : '%s'", section->name); -+ ++retval; -+ } -+ } -+ -+ return retval; -+} -+ -+int -+problem_formatter_load_string(problem_formatter_t *self, const char *fmt) -+{ -+ const size_t len = strlen(fmt); -+ if (len != 0) -+ { -+ FILE *fp = fmemopen((void *)fmt, len, "r"); -+ if (fp == NULL) -+ { -+ error_msg("Not enough memory to open a stream for reading format string."); -+ return -ENOMEM; -+ } -+ -+ self->pf_sections = load_stream(fp); -+ fclose(fp); -+ } -+ -+ return problem_formatter_validate(self); -+} -+ -+int -+problem_formatter_load_file(problem_formatter_t *self, const char *path) -+{ -+ FILE *fp = stdin; -+ if (strcmp(path, "-") != 0) -+ { -+ fp = fopen(path, "r"); -+ if (!fp) -+ return -ENOENT; -+ } -+ -+ self->pf_sections = load_stream(fp); -+ -+ if (fp != stdin) -+ fclose(fp); -+ -+ return problem_formatter_validate(self); -+} -+ -+// generates report -+int -+problem_formatter_generate_report(const problem_formatter_t *self, problem_data_t *data, problem_report_t **report) -+{ -+ problem_report_t *pr = problem_report_new(); -+ -+ for (GList *iter = self->pf_extra_sections; iter; iter = g_list_next(iter)) -+ problem_report_add_custom_section(pr, ((struct extra_section *)iter->data)->pfes_name); -+ -+ bool has_summary = false; -+ for (GList *iter = self->pf_sections; iter; iter = g_list_next(iter)) -+ { -+ section_t *section = (section_t *)iter->data; -+ -+ /* %summary is something special */ -+ if (strcmp(section->name, "%summary") == 0) -+ { -+ has_summary = true; -+ format_percented_string((const char *)section->items->data, data, -+ problem_report_get_buffer(pr, PR_SEC_SUMMARY)); -+ } -+ /* %attach as well */ -+ else if (strcmp(section->name, "%attach") == 0) -+ { -+ problem_report_set_attachments(pr, get_attached_files(data, section->items, self->pf_sections)); -+ } -+ else /* %description or a custom section (e.g. %additional_info) */ -+ { -+ FILE *buffer = problem_report_get_buffer(pr, section->name + 1); -+ -+ if (buffer != NULL) -+ { -+ log_debug("Formatting section : '%s'", section->name); -+ format_section(section, data, self->pf_sections, buffer); -+ } -+ else -+ log_warning("Unsupported section '%s'", section->name); -+ } -+ } -+ -+ if (!has_summary) { -+ log_debug("Problem format misses section '%%summary'. Using the default one : '%s'.", -+ self->pf_default_summary); -+ -+ format_percented_string(self->pf_default_summary, -+ data, problem_report_get_buffer(pr, PR_SEC_SUMMARY)); -+ } -+ -+ *report = pr; -+ return 0; -+} -diff --git a/tests/Makefile.am b/tests/Makefile.am -index eaf1ac2..d1a2b8b 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -43,7 +43,8 @@ TESTSUITE_AT = \ - xfuncs.at \ - string_list.at \ - ureport.at \ -- dump_dir.at -+ dump_dir.at \ -+ problem_report.at - - EXTRA_DIST += $(TESTSUITE_AT) - TESTSUITE = $(srcdir)/testsuite -diff --git a/tests/problem_report.at b/tests/problem_report.at -new file mode 100644 -index 0000000..8bc469f ---- /dev/null -+++ b/tests/problem_report.at -@@ -0,0 +1,690 @@ -+# -*- Autotest -*- -+ -+AT_BANNER([problem report]) -+ -+## ------- ## -+## summary ## -+## ------- ## -+ -+AT_TESTFUN([summary], -+[[ -+#include "problem_report.h" -+#include "internal_libreport.h" -+#include -+ -+int main(int argc, char **argv) -+{ -+ const char *const test_format_result[][2] = { -+ { -+ "%summary:: [abrt] trivial string", -+ "[abrt] trivial string" -+ }, -+ -+ { -+ "%summary:: [abrt] %package%", -+ "[abrt] libreport" -+ }, -+ -+ { -+ "%summary:: [abrt] %package%[[ : %crash_function%()]][[ : %does_not_exist%]][[ : %reason%]][[ TAINTED: %taint_flags%]]", -+ "[abrt] libreport : run_event() : Killed by SIGSEGV" -+ }, -+ -+ { -+ "%summary:: [abrt] %package%[[ : %crash_function%[[ : %does_not_exist%]]()]][[ : %reason%]]", -+ "[abrt] libreport : run_event() : Killed by SIGSEGV" -+ }, -+ -+ { -+ "%summary:: [abrt] %package%[[ : %does_not_exist%[[ : %crash_function%()]]]][[ : %reason%]]", -+ "[abrt] libreport : Killed by SIGSEGV" -+ }, -+ -+ { -+ "%summary:: [[%does_not_exist%]][[%once_more%]][abrt] %package%", -+ "[abrt] libreport" -+ }, -+ -+ { -+ "", -+ "Killed by SIGSEGV" -+ }, -+ }; -+ -+ g_verbose = 3; -+ -+ problem_data_t *data = problem_data_new(); -+ problem_data_add_text_noteditable(data, "package", "libreport"); -+ problem_data_add_text_noteditable(data, "crash_function", "run_event"); -+ problem_data_add_text_noteditable(data, "reason", "Killed by SIGSEGV"); -+ -+ for (size_t i = 0; i < sizeof(test_format_result)/sizeof(*test_format_result); ++i) { -+ problem_formatter_t *pf = problem_formatter_new(); -+ assert(!problem_formatter_load_string(pf, test_format_result[i][0])); -+ -+ problem_report_t *pr = NULL; -+ assert(!problem_formatter_generate_report(pf, data, &pr)); -+ assert(pr != NULL); -+ -+ const char *summary = problem_report_get_summary(pr); -+ assert(summary != NULL); -+ -+ fprintf(stderr, "expected: '%s'\n", test_format_result[i][1]); -+ fprintf(stderr, "result : '%s'\n", summary); -+ -+ assert(strcmp(test_format_result[i][1], summary) == 0); -+ -+ problem_report_free(pr); -+ problem_formatter_free(pf); -+ } -+ -+ problem_data_free(data); -+ -+ return 0; -+} -+]]) -+ -+## ---------- ## -+## desciption ## -+## ---------- ## -+ -+AT_TESTFUN([description], -+[[ -+#include "problem_report.h" -+#include "internal_libreport.h" -+#include -+ -+int main(int argc, char **argv) -+{ -+ const char *const test_format_result[][2] = { -+ { -+ "\n"\ -+ "\n"\ -+ "\n"\ -+ "Single line\n" -+ "\n"\ -+ "\n"\ -+ "\n", -+ -+ "Single line\n" -+ }, -+ -+ { -+ "\n"\ -+ "\n"\ -+ "\n"\ -+ "Comment:: %bare_comment" -+ "\n"\ -+ "\n"\ -+ "\n"\ -+ "Ad-hoc line\n" -+ "\n"\ -+ "\n"\ -+ "\n"\ -+ "Additional:: package,\\\n" -+ "uuid,cwd\\\\" -+ ",user_name" -+ "\n"\ -+ "\n", -+ -+ "Comment:\n" \ -+ "Hello, world!\n" -+ "\n"\ -+ "\n"\ -+ "Ad-hoc line\n" -+ "\n"\ -+ "\n"\ -+ "\n"\ -+ "Additional:\n"\ -+ "package: libreport\n"\ -+ "uuid: 123456789ABCDEF\n"\ -+ "user_name: abrt\n", -+ }, -+ -+ { -+ ":: %bare_description", -+ -+ "I run will_segfault and\n"\ -+ "it crashed as expected\n" -+ }, -+ -+ { -+ "User:: %bare_user_name,uid\n"\ -+ "Additional info:: -uuid,%oneline,-comment,-package", -+ -+ "User:\n"\ -+ "abrt\n"\ -+ "uid: 69\n"\ -+ "Additional info:\n"\ -+ "analyzer: CCpp\n"\ -+ "root: /var/run/mock/abrt\n"\ -+ "type: CCpp\n" -+ }, -+ -+ { -+ ":: %reporter", -+ NULL /* do no check results*/ -+ }, -+ -+ { -+ "Truncated backtrace:: %bare_%short_backtrace", -+ -+ "Truncated backtrace:\n" -+ "Thread no. 0 (7 frames)\n" -+ " #1 crash at will_segfault.c:19\n" -+ " #2 varargs at will_segfault.c:31\n" -+ " #3 inlined at will_segfault.c:40\n" -+ " #4 f at will_segfault.c:45\n" -+ " #5 callback at will_segfault.c:50\n" -+ " #6 call_me_back at libwillcrash.c:8\n" -+ " #7 recursive at will_segfault.c:59\n" -+ }, -+ }; -+ -+ g_verbose = 3; -+ -+ problem_data_t *data = problem_data_new(); -+ problem_data_add_text_noteditable(data, "package", "libreport"); -+ problem_data_add_text_noteditable(data, "analyzer", "CCpp"); -+ problem_data_add_text_noteditable(data, "type", "CCpp"); -+ problem_data_add_text_noteditable(data, "comment", "Hello, world!"); -+ problem_data_add_text_noteditable(data, "uuid", "123456789ABCDEF"); -+ problem_data_add_text_noteditable(data, "uid", "69"); -+ problem_data_add_text_noteditable(data, "user_name", "abrt"); -+ problem_data_add_text_noteditable(data, "root", "/var/run/mock/abrt"); -+ problem_data_add_text_noteditable(data, "description", "I run will_segfault and\nit crashed as expected\n"); -+ problem_data_add_text_noteditable(data, "backtrace", -+"Thread 1 (LWP 11865):\n"\ -+"#0 printf (__fmt=0x400acf \"Result: %d\\n\") at /usr/include/bits/stdio2.h:104\n"\ -+"No locals.\n"\ -+"#1 crash (p=p@entry=0x0) at will_segfault.c:19\n"\ -+"i = \n"\ -+"#2 0x0000000000400964 in varargs (num_args=1, num_args@entry=2) at will_segfault.c:31\n"\ -+"p = \n"\ -+"ap = {{gp_offset = 24, fp_offset = 32767, overflow_arg_area = 0x7fff4fc8a0c0, reg_save_area = 0x7fff4fc8a080}}\n"\ -+"#3 0x00000000004009be in inlined (p=0x0) at will_segfault.c:40\n"\ -+"num = 42\n"\ -+"#4 f (p=p@entry=0x0) at will_segfault.c:45\n"\ -+"No locals.\n"\ -+"#5 0x00000000004009e9 in callback (data=data@entry=0x0) at will_segfault.c:50\n"\ -+"No locals.\n"\ -+"#6 0x00000032f76006f9 in call_me_back (cb=cb@entry=0x4009e0 , data=data@entry=0x0) at libwillcrash.c:8\n"\ -+"res = \n"\ -+"#7 0x0000000000400a14 in recursive (i=i@entry=0) at will_segfault.c:59\n"\ -+"p = \n"\ -+"#8 0x0000000000400a00 in recursive (i=i@entry=1) at will_segfault.c:66\n"\ -+"No locals.\n"\ -+"#9 0x0000000000400a00 in recursive (i=i@entry=2) at will_segfault.c:66\n"\ -+"No locals.\n"\ -+"#10 0x0000000000400775 in main (argc=, argv=) at will_segfault.c:83\n"\ -+"No locals.\n"\ -+"From To Syms Read Shared Object Library\n"\ -+"0x00000032f76005f0 0x00000032f7600712 Yes /lib64/libwillcrash.so.0\n"\ -+"0x0000003245c1f4f0 0x0000003245d6aca4 Yes /lib64/libc.so.6\n"\ -+"0x0000003245800b10 0x000000324581b6d0 Yes /lib64/ld-linux-x86-64.so.2\n"\ -+"$1 = 0x0\n" -+"No symbol \"__glib_assert_msg\" in current context.\n"\ -+"rax 0xf 15\n"\ -+"rbx 0x0 0\n"\ -+"rcx 0x7ff96f752000 140709293531136\n"\ -+"rdx 0x3245fb9a40 215922481728\n"\ -+"rsi 0x7ff96f752000 140709293531136\n"\ -+"rdi 0x1 1\n"\ -+"rbp 0x400a30 0x400a30 <__libc_csu_init>\n"\ -+"rsp 0x7fff4fc8a050 0x7fff4fc8a050\n"\ -+"r8 0xffffffff 4294967295\n"\ -+"r9 0x0 0\n"\ -+"r10 0x22 34\n"\ -+"r11 0x246 582\n"\ -+"r12 0x40079f 4196255\n"\ -+"r13 0x7fff4fc8a210 140734531936784\n"\ -+"r14 0x0 0\n"\ -+"r15 0x0 0\n"\ -+"rip 0x4008ae 0x4008ae \n"\ -+"eflags 0x10246 [ PF ZF IF RF ]\n"\ -+"cs 0x33 51\n"\ -+"ss 0x2b 43\n"\ -+"ds 0x0 0\n"\ -+"es 0x0 0\n"\ -+"fs 0x0 0\n"\ -+"gs 0x0 0\n"\ -+"st0 0 (raw 0x00000000000000000000)\n"\ -+"st1 0 (raw 0x00000000000000000000)\n"\ -+"st2 0 (raw 0x00000000000000000000)\n"\ -+"st3 0 (raw 0x00000000000000000000)\n"\ -+"st4 0 (raw 0x00000000000000000000)\n"\ -+"st5 0 (raw 0x00000000000000000000)\n"\ -+"st6 0 (raw 0x00000000000000000000)\n"\ -+"st7 0 (raw 0x00000000000000000000)\n"\ -+"fctrl 0x37f 895\n"\ -+"fstat 0x0 0\n"\ -+"ftag 0xffff 65535\n"\ -+"fiseg 0x0 0\n"\ -+"fioff 0x0 0\n"\ -+"foseg 0x0 0\n"\ -+"fooff 0x0 0\n"\ -+"fop 0x0 0\n"\ -+"xmm0 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"xmm1 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x2f }, v8_int16 = {0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f}, v4_int32 = {0x2f2f2f2f, 0x2f2f2f2f, 0x2f2f2f2f, 0x2f2f2f2f}, v2_int64 = {0x2f2f2f2f2f2f2f2f, 0x2f2f2f2f2f2f2f2f}, uint128 = 0x2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f}\n"\ -+"xmm2 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"xmm3 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 , 0xff, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff00, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0xff00}, v2_int64 = {0x0, 0xff0000000000}, uint128 = 0x0000ff00000000000000000000000000}\n"\ -+"xmm4 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0xff0000, 0x0}, v2_int64 = {0x0, 0xff0000}, uint128 = 0x0000000000ff00000000000000000000}\n"\ -+"xmm5 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"xmm6 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"xmm7 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"xmm8 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"xmm9 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"xmm10 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"xmm11 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"xmm12 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 , 0xff, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff}, v4_int32 = {0x0, 0x0, 0x0, 0xff0000}, v2_int64 = {0x0, 0xff000000000000}, uint128 = 0x00ff0000000000000000000000000000}\n"\ -+"xmm13 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"xmm14 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"xmm15 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\ -+"mxcsr 0x1f80 [ IM DM ZM OM UM PM ]\n"\ -+"Dump of assembler code for function crash:\n"\ -+" 0x00000000004008a0 <+0>: push %rbx\n"\ -+" 0x00000000004008a1 <+1>: mov %rdi,%rbx\n"\ -+" 0x00000000004008a4 <+4>: mov $0x400ac0,%edi\n"\ -+" 0x00000000004008a9 <+9>: callq 0x4006f0 \n"\ -+" => 0x00000000004008ae <+14>: mov (%rbx),%edx\n"\ -+" 0x00000000004008b0 <+16>: mov $0x400acf,%esi\n"\ -+" 0x00000000004008b5 <+21>: mov $0x1,%edi\n"\ -+" 0x00000000004008ba <+26>: xor %eax,%eax\n"\ -+" 0x00000000004008bc <+28>: callq 0x400740 <__printf_chk@plt>\n"\ -+" 0x00000000004008c1 <+33>: pop %rbx\n"\ -+" 0x00000000004008c2 <+34>: retq\n"\ -+"End of assembler dump.\n" -+ ); -+ -+ for (size_t i = 0; i < sizeof(test_format_result)/sizeof(*test_format_result); ++i) { -+ problem_formatter_t *pf = problem_formatter_new(); -+ assert(!problem_formatter_load_string(pf, test_format_result[i][0])); -+ -+ problem_report_t *pr = NULL; -+ assert(!problem_formatter_generate_report(pf, data, &pr)); -+ assert(pr != NULL); -+ -+ const char *summary = problem_report_get_description(pr); -+ assert(summary != NULL); -+ -+ if (test_format_result[i][1] != NULL) { -+ fprintf(stderr, "####\n"); -+ fprintf(stderr, "expected: '%s'\n", test_format_result[i][1]); -+ fprintf(stderr, "====\n"); -+ fprintf(stderr, "result : '%s'\n", summary); -+ fprintf(stderr, "####\n"); -+ -+ assert(strcmp(test_format_result[i][1], summary) == 0); -+ } -+ -+ problem_report_free(pr); -+ problem_formatter_free(pf); -+ } -+ -+ problem_data_free(data); -+ -+ return 0; -+} -+]]) -+ -+## ------ ## -+## attach ## -+## ------ ## -+ -+AT_TESTFUN([attach], -+[[ -+#include "problem_report.h" -+#include "internal_libreport.h" -+#include -+ -+int main(int argc, char **argv) -+{ -+ g_verbose = 3; -+ -+ const char *fst[] = { "backtrace", "screenshot", "description", NULL }; -+ -+ struct test_case { -+ const char *format; -+ const char *const *files; -+ } cases [] = { -+ { -+ .format = "%attach:: %multiline,%binary,-coredump", -+ .files = fst, -+ } -+ }; -+ -+ problem_data_t *data = problem_data_new(); -+ problem_data_add_text_noteditable(data, "package", "libreport"); -+ problem_data_add_text_noteditable(data, "analyzer", "CCpp"); -+ problem_data_add_text_noteditable(data, "type", "CCpp"); -+ problem_data_add_text_noteditable(data, "comment", "Hello, world!"); -+ problem_data_add_text_noteditable(data, "uuid", "123456789ABCDEF"); -+ problem_data_add_text_noteditable(data, "uid", "69"); -+ problem_data_add_text_noteditable(data, "user_name", "abrt"); -+ problem_data_add_text_noteditable(data, "root", "/var/run/mock/abrt"); -+ problem_data_add_text_noteditable(data, "description", "I run will_segfault and\nit crashed as expected\n"); -+ problem_data_add_file(data, "coredump", "/what/ever/path/to/coredump"); -+ problem_data_add_file(data, "screenshot", "/what/ever/path/to/screenshot"); -+ problem_data_add_text_noteditable(data, "backtrace", -+"Thread 1 (LWP 11865):\n"\ -+"#0 printf (__fmt=0x400acf \"Result: %d\\n\") at /usr/include/bits/stdio2.h:104\n"\ -+"No locals.\n"\ -+"#1 crash (p=p@entry=0x0) at will_segfault.c:19\n"\ -+"i = \n"\ -+"#2 0x0000000000400964 in varargs (num_args=1, num_args@entry=2) at will_segfault.c:31\n"\ -+"p = \n"\ -+"ap = {{gp_offset = 24, fp_offset = 32767, overflow_arg_area = 0x7fff4fc8a0c0, reg_save_area = 0x7fff4fc8a080}}\n"\ -+"#3 0x00000000004009be in inlined (p=0x0) at will_segfault.c:40\n"\ -+"num = 42\n"\ -+"#4 f (p=p@entry=0x0) at will_segfault.c:45\n"\ -+"No locals.\n"\ -+"#5 0x00000000004009e9 in callback (data=data@entry=0x0) at will_segfault.c:50\n"\ -+"No locals.\n"\ -+"#6 0x00000032f76006f9 in call_me_back (cb=cb@entry=0x4009e0 , data=data@entry=0x0) at libwillcrash.c:8\n"\ -+"res = \n"\ -+"#7 0x0000000000400a14 in recursive (i=i@entry=0) at will_segfault.c:59\n"\ -+"p = \n"\ -+"#8 0x0000000000400a00 in recursive (i=i@entry=1) at will_segfault.c:66\n"\ -+"No locals.\n"\ -+"#9 0x0000000000400a00 in recursive (i=i@entry=2) at will_segfault.c:66\n"\ -+"No locals.\n"\ -+"#10 0x0000000000400775 in main (argc=, argv=) at will_segfault.c:83\n"\ -+"No locals.\n"); -+ -+ for (size_t i = 0; i < sizeof(cases)/sizeof(*cases); ++i) { -+ fprintf(stderr, "%s", cases[i].format); -+ -+ problem_formatter_t *pf = problem_formatter_new(); -+ assert(!problem_formatter_load_string(pf, cases[i].format)); -+ -+ problem_report_t *pr = NULL; -+ assert(!problem_formatter_generate_report(pf, data, &pr)); -+ assert(pr != NULL); -+ -+ const char *const *iter = cases[i].files; -+ -+ if (*iter != NULL) { -+ assert(problem_report_get_attachments(pr)); -+ } -+ -+ GList *clone = g_list_copy_deep(problem_report_get_attachments(pr), (GCopyFunc)xstrdup, NULL); -+ -+ while (*iter) { -+ GList *item = g_list_find_custom(clone, *iter, (GCompareFunc)strcmp); -+ -+ if (item == NULL) { -+ fprintf(stderr, "format: '%s'\n", cases[i].format); -+ fprintf(stderr, "missing file: '%s'\n", *iter); -+ abort(); -+ } -+ else { -+ free(item->data); -+ clone = g_list_delete_link(clone, item); -+ } -+ -+ ++iter; -+ } -+ -+ if (clone != NULL) { -+ for (GList *iter = clone; iter; iter = g_list_next(iter)) { -+ fprintf(stderr, "extra : '%s'\n", (const char *)iter->data); -+ } -+ abort(); -+ } -+ -+ problem_report_free(pr); -+ problem_formatter_free(pf); -+ } -+ -+ problem_data_free(data); -+ -+ return 0; -+} -+]]) -+ -+ -+## -------------- ## -+## custom_section ## -+## -------------- ## -+ -+AT_TESTFUN([custom_section], -+[[ -+#include "problem_report.h" -+#include "internal_libreport.h" -+#include -+ -+int main(int argc, char **argv) -+{ -+ g_verbose = 3; -+ -+ struct test_case; -+ struct test_case { -+ const char *section_name; -+ int section_flags; -+ int retval_load; -+ int retval_generate; -+ const char *format; -+ const char *output; -+ } cases [] = { -+ { .section_name = NULL, -+ .section_flags = 0, -+ .retval_load = 1, -+ .retval_generate = 0, -+ .format = -+ "%additional_info::\n" -+ ":: package,\\\n" -+ "uuid,cwd\\\\" -+ ",user_name" -+ , -+ .output = NULL, -+ }, -+ -+ { .section_name = "additional_info", -+ .section_flags = 0, -+ .retval_load = 0, -+ .retval_generate = 0, -+ .format = -+ "%additional_info::\n" -+ ":: package,\\\n" -+ "uuid,cwd\\\\" -+ ",user_name" -+ , -+ .output = -+ "package: libreport\n" -+ "uuid: 0123456789ABCDEF\n" -+ "user_name: abrt\n" -+ , -+ }, -+ -+ { .section_name = "additional_info", -+ .section_flags = PFFF_REQUIRED, -+ .retval_load = 1, -+ .retval_generate = 0, -+ .format = "%summary:: [abrt] %package%\n:: %reporter\n", -+ .output = NULL, -+ }, -+ -+ { .section_name = "additional_info", -+ .section_flags = 0, -+ .retval_load = 0, -+ .retval_generate = 0, -+ .format = "%summary:: [abrt] %package%\n:: %reporter\n", -+ .output = "", -+ }, -+ -+ { .section_name = "additional_info", -+ .section_flags = 0, -+ .retval_load = 0, -+ .retval_generate = 0, -+ .format = -+ "%additional_info:: root\n" -+ "Info:: package,\\\n" -+ "uuid,cwd\\\\" -+ ",user_name" -+ , -+ .output = -+ "Info:\n" -+ "package: libreport\n" -+ "uuid: 0123456789ABCDEF\n" -+ "user_name: abrt\n" -+ , -+ }, -+ }; -+ -+ problem_data_t *data = problem_data_new(); -+ problem_data_add_text_noteditable(data, "package", "libreport"); -+ problem_data_add_text_noteditable(data, "crash_function", "run_event"); -+ problem_data_add_text_noteditable(data, "reason", "Killed by SIGSEGV"); -+ problem_data_add_text_noteditable(data, "uuid", "0123456789ABCDEF"); -+ problem_data_add_text_noteditable(data, "user_name", "abrt"); -+ -+ for (size_t i = 0; i < sizeof(cases)/sizeof(*cases); ++i) { -+ fprintf(stderr, "#### Test case %zd ####\n", i + 1); -+ -+ struct test_case *tcase = cases + i; -+ problem_formatter_t *pf = problem_formatter_new(); -+ -+ if (tcase->section_name != NULL) { -+ problem_formatter_add_section(pf, tcase->section_name, tcase->section_flags); -+ } -+ -+ int r = problem_formatter_load_string(pf, tcase->format); -+ if (r != tcase->retval_load) { -+ fprintf(stderr, "Load : expected : %d , got : %d\n", tcase->retval_load, r); -+ abort(); -+ } -+ -+ if (tcase->retval_load != 0) { -+ goto next_test_case; -+ } -+ -+ problem_report_t *pr = NULL; -+ r = problem_formatter_generate_report(pf, data, &pr); -+ if (r != tcase->retval_generate) { -+ fprintf(stderr, "Generaet : expected : %d , got : %d\n", tcase->retval_generate, r); -+ abort(); -+ } -+ -+ if (tcase->retval_generate != 0) { -+ goto next_test_case; -+ } -+ -+ const char *output = problem_report_get_section(pr, tcase->section_name); -+ assert(output); -+ -+ if (strcmp(output, tcase->output) != 0) { -+ fprintf(stderr, "expected:\n'%s'\n", tcase->output); -+ fprintf(stderr, "result :\n'%s'\n", output); -+ abort(); -+ } -+ -+ problem_report_free(pr); -+ -+next_test_case: -+ problem_formatter_free(pf); -+ fprintf(stderr, "#### Finished - Test case %zd ####\n", i + 1); -+ } -+ -+ problem_data_free(data); -+ -+ return 0; -+} -+]]) -+ -+## ------ ## -+## sanity ## -+## ------ ## -+ -+AT_TESTFUN([sanity], -+[[ -+#include "problem_report.h" -+#include "internal_libreport.h" -+#include -+#include -+ -+void assert_equal_strings(const char *res, const char *exp) -+{ -+ if ( (res == NULL && exp != NULL) -+ || (res != NULL && exp == NULL) -+ || ((res != NULL && exp != NULL) && strcmp(res, exp) != 0) -+ ) { -+ fprintf(stderr, "expected : '%s'\n", exp); -+ fprintf(stderr, "result : '%s'\n", res); -+ abort(); -+ } -+} -+ -+int main(int argc, char **argv) -+{ -+ g_verbose = 3; -+ -+ problem_formatter_t *pf = problem_formatter_new(); -+ -+ assert(problem_formatter_add_section(pf, "summary", 0) == -EEXIST); -+ assert(problem_formatter_add_section(pf, "description", 0) == -EEXIST); -+ assert(problem_formatter_add_section(pf, "attach", 0) == -EEXIST); -+ -+ assert(problem_formatter_add_section(pf, "additional_info", 0) == 0); -+ assert(problem_formatter_add_section(pf, "additional_info", 0) == -EEXIST); -+ -+ problem_data_t *data = problem_data_new(); -+ problem_data_add_text_noteditable(data, "package", "libreport"); -+ problem_data_add_text_noteditable(data, "crash_function", "run_event"); -+ problem_data_add_text_noteditable(data, "reason", "Killed by SIGSEGV"); -+ problem_data_add_text_noteditable(data, "comment", "Hello, world!"); -+ problem_data_add_text_noteditable(data, "root", "/var/run/mock/abrt"); -+ problem_data_add_text_noteditable(data, "user_name", "abrt"); -+ problem_data_add_file(data, "screenshot", "/what/ever/path/to/screenshot"); -+ -+ problem_formatter_load_string(pf, -+ "%summary:: [abrt] %package% : %reason%\n\n" -+ "Description:: %bare_comment\n\n" -+ "%attach:: screenshot\n\n" -+ "%additional_info::\n\n" -+ "User:: root,user_name,uid\n\n\n" -+ ); -+ -+ problem_report_t *pr = NULL; -+ problem_formatter_generate_report(pf, data, &pr); -+ -+ assert_equal_strings(problem_report_get_summary(pr), -+ "[abrt] libreport : Killed by SIGSEGV"); -+ -+ problem_report_buffer_printf(problem_report_get_buffer(pr, PR_SEC_SUMMARY), " - test"); -+ -+ assert_equal_strings(problem_report_get_summary(pr), -+ "[abrt] libreport : Killed by SIGSEGV - test"); -+ -+ -+ assert_equal_strings(problem_report_get_description(pr), -+ "Description:\nHello, world!\n"); -+ -+ problem_report_buffer_printf(problem_report_get_buffer(pr, PR_SEC_DESCRIPTION), "Test line\n"); -+ -+ assert_equal_strings(problem_report_get_description(pr), -+ "Description:\nHello, world!\nTest line\n"); -+ -+ -+ assert_equal_strings(problem_report_get_section(pr, "additional_info"), -+ "User:\n" -+ "root: /var/run/mock/abrt\n" -+ "user_name: abrt\n" -+ ); -+ -+ problem_report_buffer_printf(problem_report_get_buffer(pr, "additional_info"), "uid: 42\n"); -+ -+ assert_equal_strings(problem_report_get_section(pr, "additional_info"), -+ "User:\n" -+ "root: /var/run/mock/abrt\n" -+ "user_name: abrt\n" -+ "uid: 42\n" -+ ); -+ -+ -+ problem_report_free(pr); -+ problem_data_free(data); -+ problem_formatter_free(pf); -+ -+ return 0; -+} -+]]) -diff --git a/tests/testsuite.at b/tests/testsuite.at -index 41107e7..f287b32 100644 ---- a/tests/testsuite.at -+++ b/tests/testsuite.at -@@ -18,3 +18,4 @@ m4_include([report_python.at]) - m4_include([string_list.at]) - m4_include([ureport.at]) - m4_include([dump_dir.at]) -+m4_include([problem_report.at]) --- -1.8.3.1 - diff --git a/SOURCES/1001-bugzilla-port-to-Problem-Format-API.patch b/SOURCES/1001-bugzilla-port-to-Problem-Format-API.patch deleted file mode 100644 index 19e2ed8..0000000 --- a/SOURCES/1001-bugzilla-port-to-Problem-Format-API.patch +++ /dev/null @@ -1,781 +0,0 @@ -From 914bdfee5da272a99d8dc3f68652534eb132e007 Mon Sep 17 00:00:00 2001 -From: Jakub Filak -Date: Thu, 4 Dec 2014 08:45:07 +0100 -Subject: [PATCH] bugzilla: port to Problem Format API - -Related to #303 - -Signed-off-by: Jakub Filak ---- - src/plugins/reporter-bugzilla.c | 691 ++++------------------------------------ - 1 file changed, 59 insertions(+), 632 deletions(-) - -diff --git a/src/plugins/reporter-bugzilla.c b/src/plugins/reporter-bugzilla.c -index 097924e..38f48ef 100644 ---- a/src/plugins/reporter-bugzilla.c -+++ b/src/plugins/reporter-bugzilla.c -@@ -17,515 +17,11 @@ - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - #include "internal_libreport.h" -+#include "problem_report.h" - #include "client.h" - #include "abrt_xmlrpc.h" - #include "rhbz.h" - --#include --#include -- --struct section_t { -- char *name; -- GList *items; --}; --typedef struct section_t section_t; -- -- --/* Utility functions */ -- --static --GList* split_string_on_char(const char *str, char ch) --{ -- GList *list = NULL; -- for (;;) -- { -- const char *delim = strchrnul(str, ch); -- list = g_list_prepend(list, xstrndup(str, delim - str)); -- if (*delim == '\0') -- break; -- str = delim + 1; -- } -- return g_list_reverse(list); --} -- --static --int compare_item_name(const char *lookup, const char *name) --{ -- if (lookup[0] == '-') -- lookup++; -- else if (strncmp(lookup, "%bare_", 6) == 0) -- lookup += 6; -- return strcmp(lookup, name); --} -- --static --int is_item_name_in_section(const section_t *lookup, const char *name) --{ -- if (g_list_find_custom(lookup->items, name, (GCompareFunc)compare_item_name)) -- return 0; /* "found it!" */ -- return 1; --} -- --static --bool is_explicit_or_forbidden(const char *name, GList *comment_fmt_spec) --{ -- return g_list_find_custom(comment_fmt_spec, name, (GCompareFunc)is_item_name_in_section); --} -- --static --GList* load_bzrep_conf_file(const char *path) --{ -- FILE *fp = stdin; -- if (strcmp(path, "-") != 0) -- { -- fp = fopen(path, "r"); -- if (!fp) -- return NULL; -- } -- -- GList *sections = NULL; -- -- char *line; -- while ((line = xmalloc_fgetline(fp)) != NULL) -- { -- /* Skip comments */ -- char first = *skip_whitespace(line); -- if (first == '#') -- goto free_line; -- -- /* Handle trailing backslash continuation */ -- check_continuation: ; -- unsigned len = strlen(line); -- if (len && line[len-1] == '\\') -- { -- line[len-1] = '\0'; -- char *next_line = xmalloc_fgetline(fp); -- if (next_line) -- { -- line = append_to_malloced_string(line, next_line); -- free(next_line); -- goto check_continuation; -- } -- } -- -- /* We are reusing line buffer to form temporary -- * "key\0values\0..." in its beginning -- */ -- bool summary_line = false; -- char *value = NULL; -- char *src; -- char *dst; -- for (src = dst = line; *src; src++) -- { -- char c = *src; -- /* did we reach the value list? */ -- if (!value && c == ':' && src[1] == ':') -- { -- *dst++ = '\0'; /* terminate key */ -- src += 2; -- value = dst; /* remember where value starts */ -- summary_line = (strcmp(line, "%summary") == 0); -- if (summary_line) -- { -- value = src; -- break; -- } -- continue; -- } -- /* skip whitespace in value list */ -- if (value && isspace(c)) -- continue; -- *dst++ = c; /* store next key or value char */ -- } -- -- GList *item_list = NULL; -- if (summary_line) -- { -- /* %summary is special */ -- item_list = g_list_append(NULL, xstrdup(skip_whitespace(value))); -- } -- else -- { -- *dst = '\0'; /* terminate value (or key) */ -- if (value) -- item_list = split_string_on_char(value, ','); -- } -- -- section_t *sec = xzalloc(sizeof(*sec)); -- sec->name = xstrdup(line); -- sec->items = item_list; -- sections = g_list_prepend(sections, sec); -- -- free_line: -- free(line); -- } -- -- if (fp != stdin) -- fclose(fp); -- -- return g_list_reverse(sections); --} -- -- --/* Summary generation */ -- --#define MAX_OPT_DEPTH 10 --static --char *format_percented_string(const char *str, problem_data_t *pd) --{ -- size_t old_pos[MAX_OPT_DEPTH] = { 0 }; -- int okay[MAX_OPT_DEPTH] = { 1 }; -- int opt_depth = 1; -- struct strbuf *result = strbuf_new(); -- -- while (*str) { -- switch (*str) { -- default: -- strbuf_append_char(result, *str); -- str++; -- break; -- case '\\': -- if (str[1]) -- str++; -- strbuf_append_char(result, *str); -- str++; -- break; -- case '[': -- if (str[1] == '[' && opt_depth < MAX_OPT_DEPTH) -- { -- old_pos[opt_depth] = result->len; -- okay[opt_depth] = 1; -- opt_depth++; -- str += 2; -- } else { -- strbuf_append_char(result, *str); -- str++; -- } -- break; -- case ']': -- if (str[1] == ']' && opt_depth > 1) -- { -- opt_depth--; -- if (!okay[opt_depth]) -- { -- result->len = old_pos[opt_depth]; -- result->buf[result->len] = '\0'; -- } -- str += 2; -- } else { -- strbuf_append_char(result, *str); -- str++; -- } -- break; -- case '%': ; -- char *nextpercent = strchr(++str, '%'); -- if (!nextpercent) -- { -- error_msg_and_die("Unterminated %%element%%: '%s'", str - 1); -- } -- -- *nextpercent = '\0'; -- const problem_item *item = problem_data_get_item_or_NULL(pd, str); -- *nextpercent = '%'; -- -- if (item && (item->flags & CD_FLAG_TXT)) -- strbuf_append_str(result, item->content); -- else -- okay[opt_depth - 1] = 0; -- str = nextpercent + 1; -- break; -- } -- } -- -- if (opt_depth > 1) -- { -- error_msg_and_die("Unbalanced [[ ]] bracket"); -- } -- -- if (!okay[0]) -- { -- error_msg("Undefined variable outside of [[ ]] bracket"); -- } -- -- return strbuf_free_nobuf(result); --} -- --static --char *create_summary_string(problem_data_t *pd, GList *comment_fmt_spec) --{ -- GList *l = comment_fmt_spec; -- while (l) -- { -- section_t *sec = l->data; -- l = l->next; -- -- /* Find %summary" */ -- if (strcmp(sec->name, "%summary") != 0) -- continue; -- -- GList *item = sec->items; -- if (!item) -- /* not supposed to happen, there will be at least "" */ -- error_msg_and_die("BUG in %%summary parser"); -- -- const char *str = item->data; -- return format_percented_string(str, pd); -- } -- -- return format_percented_string("%reason%", pd); --} -- -- --/* BZ comment generation */ -- --static --int append_text(struct strbuf *result, const char *item_name, const char *content, bool print_item_name) --{ -- char *eol = strchrnul(content, '\n'); -- if (eol[0] == '\0' || eol[1] == '\0') -- { -- /* one-liner */ -- int pad = 16 - (strlen(item_name) + 2); -- if (pad < 0) -- pad = 0; -- if (print_item_name) -- strbuf_append_strf(result, -- eol[0] == '\0' ? "%s: %*s%s\n" : "%s: %*s%s", -- item_name, pad, "", content -- ); -- else -- strbuf_append_strf(result, -- eol[0] == '\0' ? "%s\n" : "%s", -- content -- ); -- } -- else -- { -- /* multi-line item */ -- if (print_item_name) -- strbuf_append_strf(result, "%s:\n", item_name); -- for (;;) -- { -- eol = strchrnul(content, '\n'); -- strbuf_append_strf(result, -- /* For %bare_multiline_item, we don't want to print colons */ -- (print_item_name ? ":%.*s\n" : "%.*s\n"), -- (int)(eol - content), content -- ); -- if (eol[0] == '\0' || eol[1] == '\0') -- break; -- content = eol + 1; -- } -- } -- return 1; --} -- --static --int append_short_backtrace(struct strbuf *result, problem_data_t *problem_data, size_t max_text_size, bool print_item_name) --{ -- const problem_item *item = problem_data_get_item_or_NULL(problem_data, -- FILENAME_BACKTRACE); -- if (!item) -- return 0; /* "I did not print anything" */ -- if (!(item->flags & CD_FLAG_TXT)) -- return 0; /* "I did not print anything" */ -- -- char *truncated = NULL; -- -- if (strlen(item->content) >= max_text_size) -- { -- char *error_msg = NULL; -- const char *analyzer = problem_data_get_content_or_NULL(problem_data, FILENAME_ANALYZER); -- if (!analyzer) -- return 0; -- -- /* For CCpp crashes, use the GDB-produced backtrace which should be -- * available by now. sr_abrt_type_from_analyzer returns SR_REPORT_CORE -- * by default for CCpp crashes. -- */ -- enum sr_report_type report_type = sr_abrt_type_from_analyzer(analyzer); -- if (strcmp(analyzer, "CCpp") == 0) -- report_type = SR_REPORT_GDB; -- -- struct sr_stacktrace *backtrace = sr_stacktrace_parse(report_type, -- item->content, &error_msg); -- -- if (!backtrace) -- { -- log(_("Can't parse backtrace: %s"), error_msg); -- free(error_msg); -- return 0; -- } -- -- /* Get optimized thread stack trace for 10 top most frames */ -- truncated = sr_stacktrace_to_short_text(backtrace, 10); -- sr_stacktrace_free(backtrace); -- -- if (!truncated) -- { -- log(_("Can't generate stacktrace description (no crash thread?)")); -- return 0; -- } -- } -- -- append_text(result, -- /*item_name:*/ truncated ? "truncated_backtrace" : FILENAME_BACKTRACE, -- /*content:*/ truncated ? truncated : item->content, -- print_item_name -- ); -- free(truncated); -- return 1; --} -- --static --int append_item(struct strbuf *result, const char *item_name, problem_data_t *pd, GList *comment_fmt_spec) --{ -- bool print_item_name = (strncmp(item_name, "%bare_", strlen("%bare_")) != 0); -- if (!print_item_name) -- item_name += strlen("%bare_"); -- -- if (item_name[0] != '%') -- { -- struct problem_item *item = problem_data_get_item_or_NULL(pd, item_name); -- if (!item) -- return 0; /* "I did not print anything" */ -- if (!(item->flags & CD_FLAG_TXT)) -- return 0; /* "I did not print anything" */ -- -- char *formatted = problem_item_format(item); -- char *content = formatted ? formatted : item->content; -- append_text(result, item_name, content, print_item_name); -- free(formatted); -- return 1; /* "I printed something" */ -- } -- -- /* Special item name */ -- -- /* Compat with previously-existed ad-hockery: %short_backtrace */ -- if (strcmp(item_name, "%short_backtrace") == 0) -- return append_short_backtrace(result, pd, CD_TEXT_ATT_SIZE_BZ, print_item_name); -- -- /* Compat with previously-existed ad-hockery: %reporter */ -- if (strcmp(item_name, "%reporter") == 0) -- return append_text(result, "reporter", PACKAGE"-"VERSION, print_item_name); -- -- /* %oneline,%multiline,%text */ -- bool oneline = (strcmp(item_name+1, "oneline" ) == 0); -- bool multiline = (strcmp(item_name+1, "multiline") == 0); -- bool text = (strcmp(item_name+1, "text" ) == 0); -- if (!oneline && !multiline && !text) -- { -- log("Unknown or unsupported element specifier '%s'", item_name); -- return 0; /* "I did not print anything" */ -- } -- -- int printed = 0; -- -- /* Iterate over _sorted_ items */ -- GList *sorted_names = g_hash_table_get_keys(pd); -- sorted_names = g_list_sort(sorted_names, (GCompareFunc)strcmp); -- -- /* %text => do as if %oneline, then repeat as if %multiline */ -- if (text) -- oneline = 1; -- -- again: ; -- GList *l = sorted_names; -- while (l) -- { -- const char *name = l->data; -- l = l->next; -- struct problem_item *item = g_hash_table_lookup(pd, name); -- if (!item) -- continue; /* paranoia, won't happen */ -- -- if (!(item->flags & CD_FLAG_TXT)) -- continue; -- -- if (is_explicit_or_forbidden(name, comment_fmt_spec)) -- continue; -- -- char *formatted = problem_item_format(item); -- char *content = formatted ? formatted : item->content; -- char *eol = strchrnul(content, '\n'); -- bool is_oneline = (eol[0] == '\0' || eol[1] == '\0'); -- if (oneline == is_oneline) -- printed |= append_text(result, name, content, print_item_name); -- free(formatted); -- } -- if (text && oneline) -- { -- /* %text, and we just did %oneline. Repeat as if %multiline */ -- oneline = 0; -- /*multiline = 1; - not checked in fact, so why bother setting? */ -- goto again; -- } -- -- g_list_free(sorted_names); /* names themselves are not freed */ -- -- return printed; --} -- --static --void generate_bz_comment(struct strbuf *result, problem_data_t *pd, GList *comment_fmt_spec) --{ -- bool last_line_is_empty = true; -- GList *l = comment_fmt_spec; -- while (l) -- { -- section_t *sec = l->data; -- l = l->next; -- -- /* Skip special sections such as "%attach" */ -- if (sec->name[0] == '%') -- continue; -- -- if (sec->items) -- { -- /* "Text: item[,item]..." */ -- struct strbuf *output = strbuf_new(); -- GList *item = sec->items; -- while (item) -- { -- const char *str = item->data; -- item = item->next; -- if (str[0] == '-') /* "-name", ignore it */ -- continue; -- append_item(output, str, pd, comment_fmt_spec); -- } -- -- if (output->len != 0) -- { -- strbuf_append_strf(result, -- sec->name[0] ? "%s:\n%s" : "%s%s", -- sec->name, -- output->buf -- ); -- last_line_is_empty = false; -- } -- strbuf_free(output); -- } -- else -- { -- /* Just "Text" (can be "") */ -- -- /* Filter out consecutive empty lines */ -- if (sec->name[0] != '\0' || !last_line_is_empty) -- strbuf_append_strf(result, "%s\n", sec->name); -- last_line_is_empty = (sec->name[0] == '\0'); -- } -- } -- -- /* Nuke any trailing empty lines */ -- while (result->len >= 1 -- && result->buf[result->len-1] == '\n' -- && (result->len == 1 || result->buf[result->len-2] == '\n') -- ) { -- result->buf[--result->len] = '\0'; -- } --} -- -- - /* BZ attachments */ - - static -@@ -573,104 +69,6 @@ int attach_file_item(struct abrt_xmlrpc *ax, const char *bug_id, - return (r == 0); - } - --static --int attach_item(struct abrt_xmlrpc *ax, const char *bug_id, -- const char *item_name, problem_data_t *pd, GList *comment_fmt_spec) --{ -- if (item_name[0] != '%') -- { -- struct problem_item *item = problem_data_get_item_or_NULL(pd, item_name); -- if (!item) -- return 0; -- if (item->flags & CD_FLAG_TXT) -- return attach_text_item(ax, bug_id, item_name, item); -- if (item->flags & CD_FLAG_BIN) -- return attach_file_item(ax, bug_id, item_name, item); -- return 0; -- } -- -- /* Special item name */ -- -- /* %oneline,%multiline,%text,%binary */ -- bool oneline = (strcmp(item_name+1, "oneline" ) == 0); -- bool multiline = (strcmp(item_name+1, "multiline") == 0); -- bool text = (strcmp(item_name+1, "text" ) == 0); -- bool binary = (strcmp(item_name+1, "binary" ) == 0); -- if (!oneline && !multiline && !text && !binary) -- { -- log("Unknown or unsupported element specifier '%s'", item_name); -- return 0; -- } -- -- log_debug("Special item_name '%s', iterating for attach...", item_name); -- int done = 0; -- -- /* Iterate over _sorted_ items */ -- GList *sorted_names = g_hash_table_get_keys(pd); -- sorted_names = g_list_sort(sorted_names, (GCompareFunc)strcmp); -- -- GList *l = sorted_names; -- while (l) -- { -- const char *name = l->data; -- l = l->next; -- struct problem_item *item = g_hash_table_lookup(pd, name); -- if (!item) -- continue; /* paranoia, won't happen */ -- -- if (is_explicit_or_forbidden(name, comment_fmt_spec)) -- continue; -- -- if ((item->flags & CD_FLAG_TXT) && !binary) -- { -- char *content = item->content; -- char *eol = strchrnul(content, '\n'); -- bool is_oneline = (eol[0] == '\0' || eol[1] == '\0'); -- if (text || oneline == is_oneline) -- done |= attach_text_item(ax, bug_id, name, item); -- } -- if ((item->flags & CD_FLAG_BIN) && binary) -- done |= attach_file_item(ax, bug_id, name, item); -- } -- -- g_list_free(sorted_names); /* names themselves are not freed */ -- -- -- log_debug("...Done iterating over '%s' for attach", item_name); -- -- return done; --} -- --static --int attach_files(struct abrt_xmlrpc *ax, const char *bug_id, -- problem_data_t *pd, GList *comment_fmt_spec) --{ -- int done = 0; -- GList *l = comment_fmt_spec; -- while (l) -- { -- section_t *sec = l->data; -- l = l->next; -- -- /* Find %attach" */ -- if (strcmp(sec->name, "%attach") != 0) -- continue; -- -- GList *item = sec->items; -- while (item) -- { -- const char *str = item->data; -- item = item->next; -- if (str[0] == '-') /* "-name", ignore it */ -- continue; -- done |= attach_item(ax, bug_id, str, pd, comment_fmt_spec); -- } -- } -- -- return done; --} -- -- - /* Main */ - - struct bugzilla_struct { -@@ -1102,18 +500,29 @@ int main(int argc, char **argv) - - if (opts & OPT_D) - { -- GList *comment_fmt_spec = load_bzrep_conf_file(fmt_file); -- struct strbuf *bzcomment_buf = strbuf_new(); -- generate_bz_comment(bzcomment_buf, problem_data, comment_fmt_spec); -- char *bzcomment = strbuf_free_nobuf(bzcomment_buf); -- char *summary = create_summary_string(problem_data, comment_fmt_spec); -+ problem_formatter_t *pf = problem_formatter_new(); -+ -+ if (problem_formatter_load_file(pf, fmt_file)) -+ error_msg_and_die("Invalid format file: %s", fmt_file); -+ -+ problem_report_t *pr = NULL; -+ if (problem_formatter_generate_report(pf, problem_data, &pr)) -+ error_msg_and_die("Failed to format bug report from problem data"); -+ - printf("summary: %s\n" - "\n" - "%s" -- , summary, bzcomment -+ "\n" -+ , problem_report_get_summary(pr) -+ , problem_report_get_description(pr) - ); -- free(bzcomment); -- free(summary); -+ -+ puts("attachments:"); -+ for (GList *a = problem_report_get_attachments(pr); a != NULL; a = g_list_next(a)) -+ printf(" %s\n", (const char *)a->data); -+ -+ problem_report_free(pr); -+ problem_formatter_free(pf); - exit(0); - } - -@@ -1196,22 +605,29 @@ int main(int argc, char **argv) - /* Create new bug */ - log(_("Creating a new bug")); - -- GList *comment_fmt_spec = load_bzrep_conf_file(fmt_file); -+ problem_formatter_t *pf = problem_formatter_new(); -+ -+ if (problem_formatter_load_file(pf, fmt_file)) -+ error_msg_and_die("Invalid format file: %s", fmt_file); -+ -+ problem_report_t *pr = NULL; -+ if (problem_formatter_generate_report(pf, problem_data, &pr)) -+ error_msg_and_die("Failed to format problem data"); - -- struct strbuf *bzcomment_buf = strbuf_new(); -- generate_bz_comment(bzcomment_buf, problem_data, comment_fmt_spec); - if (crossver_id >= 0) -- strbuf_append_strf(bzcomment_buf, "\nPotential duplicate: bug %u\n", crossver_id); -- char *bzcomment = strbuf_free_nobuf(bzcomment_buf); -- char *summary = create_summary_string(problem_data, comment_fmt_spec); -+ problem_report_buffer_printf( -+ problem_report_get_buffer(pr, PR_SEC_DESCRIPTION), -+ "\nPotential duplicate: bug %u\n", crossver_id); -+ -+ problem_formatter_free(pf); -+ - int new_id = rhbz_new_bug(client, - problem_data, rhbz.b_product, rhbz.b_product_version, -- summary, bzcomment, -+ problem_report_get_summary(pr), -+ problem_report_get_description(pr), - (rhbz.b_create_private | (opts & OPT_g)), // either we got Bugzilla_CreatePrivate from settings or -g was specified on cmdline - rhbz.b_private_groups - ); -- free(bzcomment); -- free(summary); - - if (new_id == -1) - { -@@ -1236,9 +652,17 @@ int main(int argc, char **argv) - char new_id_str[sizeof(int)*3 + 2]; - sprintf(new_id_str, "%i", new_id); - -- attach_files(client, new_id_str, problem_data, comment_fmt_spec); -- --//TODO: free_comment_fmt_spec(comment_fmt_spec); -+ for (GList *a = problem_report_get_attachments(pr); a != NULL; a = g_list_next(a)) -+ { -+ const char *item_name = (const char *)a->data; -+ struct problem_item *item = problem_data_get_item_or_NULL(problem_data, item_name); -+ if (!item) -+ continue; -+ else if (item->flags & CD_FLAG_TXT) -+ attach_text_item(client, new_id_str, item_name, item); -+ else if (item->flags & CD_FLAG_BIN) -+ attach_file_item(client, new_id_str, item_name, item); -+ } - - bz = new_bug_info(); - bz->bi_status = xstrdup("NEW"); -@@ -1302,18 +726,21 @@ int main(int argc, char **argv) - const char *comment = problem_data_get_content_or_NULL(problem_data, FILENAME_COMMENT); - if (comment && comment[0]) - { -- GList *comment_fmt_spec = load_bzrep_conf_file(fmt_file2); -- struct strbuf *bzcomment_buf = strbuf_new(); -- generate_bz_comment(bzcomment_buf, problem_data, comment_fmt_spec); -- char *bzcomment = strbuf_free_nobuf(bzcomment_buf); --//TODO: free_comment_fmt_spec(comment_fmt_spec); -+ problem_formatter_t *pf = problem_formatter_new(); -+ if (problem_formatter_load_file(pf, fmt_file2)) -+ error_msg_and_die("Invalid duplicate format file: '%s", fmt_file2); -+ -+ problem_report_t *pr; -+ if (problem_formatter_generate_report(pf, problem_data, &pr)) -+ error_msg_and_die("Failed to format duplicate comment from problem data"); -+ -+ const char *bzcomment = problem_report_get_description(pr); - - int dup_comment = is_comment_dup(bz->bi_comments, bzcomment); - if (!dup_comment) - { - log(_("Adding new comment to bug %d"), bz->bi_id); - rhbz_add_comment(client, bz->bi_id, bzcomment, 0); -- free(bzcomment); - - const char *bt = problem_data_get_content_or_NULL(problem_data, FILENAME_BACKTRACE); - unsigned rating = 0; -@@ -1331,10 +758,10 @@ int main(int argc, char **argv) - } - } - else -- { -- free(bzcomment); - log(_("Found the same comment in the bug history, not adding a new one")); -- } -+ -+ problem_report_free(pr); -+ problem_formatter_free(pf); - } - - log_out: --- -1.8.3.1 - diff --git a/SOURCES/1003-lib-created-a-new-lib-file-for-reporters.patch b/SOURCES/1003-lib-created-a-new-lib-file-for-reporters.patch deleted file mode 100644 index 3a38799..0000000 --- a/SOURCES/1003-lib-created-a-new-lib-file-for-reporters.patch +++ /dev/null @@ -1,405 +0,0 @@ -From 10662c5e05c5cd2c60eacd5e4a3c3f3361a0ebd4 Mon Sep 17 00:00:00 2001 -From: Matej Habrnal -Date: Tue, 13 Jan 2015 19:23:08 -0500 -Subject: [PATCH] lib: created a new lib file for reporters - -Moved some functions from rhbz.c to src/lib/reporters.c and src/lib/strbuf.c. - -Related to #272 - -Signed-off-by: Matej Habrnal ---- - po/POTFILES.in | 1 + - src/include/Makefile.am | 3 +- - src/include/internal_libreport.h | 5 +++ - src/include/reporters.h | 36 ++++++++++++++++++ - src/lib/Makefile.am | 3 +- - src/lib/reporters.c | 80 ++++++++++++++++++++++++++++++++++++++++ - src/lib/strbuf.c | 60 ++++++++++++++++++++++++++++++ - src/plugins/rhbz.c | 78 +-------------------------------------- - src/plugins/rhbz.h | 2 - - 9 files changed, 188 insertions(+), 80 deletions(-) - create mode 100644 src/include/reporters.h - create mode 100644 src/lib/reporters.c - -diff --git a/po/POTFILES.in b/po/POTFILES.in -index c597b11..5588540 100644 ---- a/po/POTFILES.in -+++ b/po/POTFILES.in -@@ -24,6 +24,7 @@ src/lib/make_descr.c - src/lib/parse_options.c - src/lib/problem_data.c - src/lib/problem_report.c -+src/lib/reporters.c - src/lib/run_event.c - src/plugins/abrt_rh_support.c - src/plugins/report_Bugzilla.xml.in -diff --git a/src/include/Makefile.am b/src/include/Makefile.am -index 47ba399..a13e04d 100644 ---- a/src/include/Makefile.am -+++ b/src/include/Makefile.am -@@ -15,7 +15,8 @@ libreport_include_HEADERS = \ - file_obj.h \ - internal_libreport.h \ - internal_abrt_dbus.h \ -- xml_parser.h -+ xml_parser.h \ -+ reporters.h - - if BUILD_UREPORT - libreport_include_HEADERS += ureport.h -diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h -index d35d715..b801b1a 100644 ---- a/src/include/internal_libreport.h -+++ b/src/include/internal_libreport.h -@@ -98,6 +98,7 @@ int vdprintf(int d, const char *format, va_list ap); - #include "workflow.h" - #include "file_obj.h" - #include "libreport_types.h" -+#include "reporters.h" - - #ifdef __cplusplus - extern "C" { -@@ -107,6 +108,10 @@ extern "C" { - int prefixcmp(const char *str, const char *prefix); - #define suffixcmp libreport_suffixcmp - int suffixcmp(const char *str, const char *suffix); -+#define trim_all_whitespace libreport_trim_all_whitespace -+char *trim_all_whitespace(const char *str); -+#define shorten_string_to_length libreport_shorten_string_to_length -+char *shorten_string_to_length(const char *str, unsigned length); - #define strtrim libreport_strtrim - char *strtrim(char *str); - #define strtrimch libreport_strtrimch -diff --git a/src/include/reporters.h b/src/include/reporters.h -new file mode 100644 -index 0000000..d415b7f ---- /dev/null -+++ b/src/include/reporters.h -@@ -0,0 +1,36 @@ -+/* -+ Copyright (C) 2014 ABRT team -+ Copyright (C) 2014 RedHat Inc -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License along -+ with this program; if not, write to the Free Software Foundation, Inc., -+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+*/ -+ -+#ifndef REPORTERS_H -+#define REPORTERS_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#define is_comment_dup libreport_is_comment_dup -+int is_comment_dup(GList *comments, const char *comment); -+#define comments_find_best_bt_rating libreport_comments_find_best_bt_rating -+unsigned comments_find_best_bt_rating(GList *comments); -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am -index a0001ef..3ec463f 100644 ---- a/src/lib/Makefile.am -+++ b/src/lib/Makefile.am -@@ -56,7 +56,8 @@ libreport_la_SOURCES = \ - workflow_xml_parser.c \ - config_item_info.c \ - xml_parser.c \ -- libreport_init.c -+ libreport_init.c \ -+ reporters.c - - libreport_la_CPPFLAGS = \ - -I$(srcdir)/../include \ -diff --git a/src/lib/reporters.c b/src/lib/reporters.c -new file mode 100644 -index 0000000..e3305ca ---- /dev/null -+++ b/src/lib/reporters.c -@@ -0,0 +1,80 @@ -+/* -+ String buffer implementation -+ -+ Copyright (C) 2015 RedHat inc. -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License along -+ with this program; if not, write to the Free Software Foundation, Inc., -+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+*/ -+ -+#include "internal_libreport.h" -+ -+int -+is_comment_dup(GList *comments, const char *comment) -+{ -+ char * const trim_comment = trim_all_whitespace(comment); -+ bool same_comments = false; -+ -+ for (GList *l = comments; l && !same_comments; l = l->next) -+ { -+ const char * const comment_body = (const char *) l->data; -+ char * const trim_comment_body = trim_all_whitespace(comment_body); -+ same_comments = (strcmp(trim_comment_body, trim_comment) == 0); -+ free(trim_comment_body); -+ } -+ -+ free(trim_comment); -+ return same_comments; -+} -+ -+unsigned -+comments_find_best_bt_rating(GList *comments) -+{ -+ if (comments == NULL) -+ return 0; -+ -+ unsigned best_rating = 0; -+ for (GList *l = comments; l; l = l->next) -+ { -+ char *comment_body = (char *) l->data; -+ -+ char *start_rating_line = strstr(comment_body, FILENAME_RATING": "); -+ if (!start_rating_line) -+ { -+ log_debug(_("Note does not contain rating")); -+ continue; -+ } -+ -+ start_rating_line += strlen(FILENAME_RATING": "); -+ -+ errno = 0; -+ char *e; -+ long rating = strtoul(start_rating_line, &e, 10); -+ /* -+ * Note: we intentionally check for '\n'. Any other terminator -+ * (even '\0') is not ok in this case. -+ */ -+ if (errno || e == start_rating_line || (*e != '\n' && *e != '\r') || (unsigned long)rating > UINT_MAX) -+ { -+ /* error / no digits / illegal trailing chars */ -+ continue; -+ } -+ -+ if (rating > best_rating) -+ best_rating = rating; -+ } -+ -+ return best_rating; -+} -+ -diff --git a/src/lib/strbuf.c b/src/lib/strbuf.c -index ef8bda8..f0cd1b8 100644 ---- a/src/lib/strbuf.c -+++ b/src/lib/strbuf.c -@@ -37,6 +37,66 @@ int suffixcmp(const char *str, const char *suffix) - return strcmp(str + len_minus_suflen, suffix); - } - -+char *trim_all_whitespace(const char *str) -+{ -+ char *trim = xzalloc(sizeof(char) * strlen(str) + 1); -+ int i = 0; -+ while (*str) -+ { -+ if (!isspace(*str)) -+ trim[i++] = *str; -+ str++; -+ } -+ -+ return trim; -+} -+ -+/* If str is longer than max allowed length then -+ * try to find first ' ' from the end of acceptable long str string -+ * -+ * If ' ' is found replace string after that by "..." -+ * -+ * If ' ' is NOT found in maximal allowed range, cut str string on -+ * lenght (MAX_SUMMARY_LENGTH - strlen("...")) and append "..." -+ * -+ * If MAX_LENGTH is 15 and max allowed cut is 5: -+ * -+ * 0123456789ABCDEF -> 0123456789AB... -+ * 0123456789 BCDEF -> 0123456789 ... -+ * 012345 789ABCDEF -> 012345 789AB... -+ */ -+char * -+shorten_string_to_length(const char *str, unsigned length) -+{ -+ char *dup_str = xstrdup(str); -+ if (strlen(str) > length) -+ { -+ char *max_end = dup_str + (length - strlen("...")); -+ -+ /* maximal number of characters to cut due to attempt cut dup_str -+ * string after last ' ' -+ */ -+ int max_cut = 16; -+ -+ /* start looking for ' ' one char before the last possible character */ -+ char *buf = max_end - 1; -+ while (buf[0] != ' ' && max_cut--) -+ --buf; -+ -+ if (buf[0] != ' ') -+ buf = max_end; -+ else -+ ++buf; -+ -+ buf[0] = '.'; -+ buf[1] = '.'; -+ buf[2] = '.'; -+ buf[3] = '\0'; -+ } -+ -+ return dup_str; -+} -+ - /* - * Trims whitespace characters both from left and right side of a string. - * Modifies the string in-place. Returns the trimmed string. -diff --git a/src/plugins/rhbz.c b/src/plugins/rhbz.c -index bad9ed4..a376c13 100644 ---- a/src/plugins/rhbz.c -+++ b/src/plugins/rhbz.c -@@ -133,41 +133,6 @@ static GList *rhbz_comments(struct abrt_xmlrpc *ax, int bug_id) - return g_list_reverse(comments); - } - --static char *trim_all_whitespace(const char *str) --{ -- func_entry(); -- -- char *trim = xzalloc(sizeof(char) * strlen(str) + 1); -- int i = 0; -- while (*str) -- { -- if (!isspace(*str)) -- trim[i++] = *str; -- str++; -- } -- -- return trim; --} -- --int is_comment_dup(GList *comments, const char *comment) --{ -- func_entry(); -- -- char * const trim_comment = trim_all_whitespace(comment); -- bool same_comments = false; -- -- for (GList *l = comments; l && !same_comments; l = l->next) -- { -- const char * const comment_body = (const char *) l->data; -- char * const trim_comment_body = trim_all_whitespace(comment_body); -- same_comments = (strcmp(trim_comment_body, trim_comment) == 0); -- free(trim_comment_body); -- } -- -- free(trim_comment); -- return same_comments; --} -- - static unsigned find_best_bt_rating_in_comments(GList *comments) - { - func_entry(); -@@ -553,46 +518,7 @@ int rhbz_new_bug(struct abrt_xmlrpc *ax, - if (!duphash) duphash = problem_data_get_content_or_NULL(problem_data, - "global_uuid"); - -- /* If summary is longer than max allowed summary length then -- * try to find first ' ' from the end of acceptable long summary string -- * -- * If ' ' is found replace string after that by "..." -- * -- * If ' ' is NOT found in maximal allowed range, cut summary string on -- * lenght (MAX_SUMMARY_LENGTH - strlen("...")) and append "..." -- * -- * If MAX_SUMMARY_LENGTH is 15 and max allowed cut is 5: -- * -- * 0123456789ABCDEF -> 0123456789AB... -- * 0123456789 BCDEF -> 0123456789 ... -- * 012345 789ABCDEF -> 012345 789AB... -- */ -- char *summary = NULL; -- if (strlen(bzsummary) > MAX_SUMMARY_LENGTH) -- { -- summary = xstrdup(bzsummary); -- char *max_end = summary + (MAX_SUMMARY_LENGTH - strlen("...")); -- -- /* maximal number of characters to cut due to attempt cut summary -- * string after last ' ' -- */ -- int max_cut = 16; -- -- /* start looking for ' ' one char before the last possible character */ -- char *buf = max_end - 1; -- while (buf[0] != ' ' && max_cut--) -- --buf; -- -- if (buf[0] != ' ') -- buf = max_end; -- else -- ++buf; -- -- buf[0] = '.'; -- buf[1] = '.'; -- buf[2] = '.'; -- buf[3] = '\0'; -- } -+ char *summary = shorten_string_to_length(bzsummary, MAX_SUMMARY_LENGTH); - - char *status_whiteboard = xasprintf("abrt_hash:%s", duphash); - -@@ -604,7 +530,7 @@ int rhbz_new_bug(struct abrt_xmlrpc *ax, - abrt_xmlrpc_params_add_string(&env, params, "product", product); - abrt_xmlrpc_params_add_string(&env, params, "component", component); - abrt_xmlrpc_params_add_string(&env, params, "version", version); -- abrt_xmlrpc_params_add_string(&env, params, "summary", (summary ? summary : bzsummary)); -+ abrt_xmlrpc_params_add_string(&env, params, "summary", summary); - abrt_xmlrpc_params_add_string(&env, params, "description", bzcomment); - abrt_xmlrpc_params_add_string(&env, params, "status_whiteboard", status_whiteboard); - -diff --git a/src/plugins/rhbz.h b/src/plugins/rhbz.h -index 976d333..2f91962 100644 ---- a/src/plugins/rhbz.h -+++ b/src/plugins/rhbz.h -@@ -101,8 +101,6 @@ int rhbz_attach_blob(struct abrt_xmlrpc *ax, const char *bug_id, - int rhbz_attach_fd(struct abrt_xmlrpc *ax, const char *bug_id, - const char *att_name, int fd, int flags); - --int is_comment_dup(GList *comments, const char *comment); -- - GList *rhbz_bug_cc(xmlrpc_value *result_xml); - - struct bug_info *rhbz_bug_info(struct abrt_xmlrpc *ax, int bug_id); --- -1.8.3.1 - diff --git a/SOURCES/1005-ureport-set-url-to-public-faf-server.patch b/SOURCES/1005-ureport-set-url-to-public-faf-server.patch deleted file mode 100644 index 953c364..0000000 --- a/SOURCES/1005-ureport-set-url-to-public-faf-server.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 212cc1961c62d9c4e39ae3a13b2fe5525ad78744 Mon Sep 17 00:00:00 2001 -From: Matej Habrnal -Date: Mon, 2 Feb 2015 16:31:51 +0100 -Subject: [PATCH] ureport: set url to public faf server - -Set url to public faf server because the private one doesn't return URL to -known issues, bthash, possible solution etc. - -Signed-off-by: Matej Habrnal ---- - src/plugins/ureport.conf | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/plugins/ureport.conf b/src/plugins/ureport.conf -index e04bf56..4d64ee7 100644 ---- a/src/plugins/ureport.conf -+++ b/src/plugins/ureport.conf -@@ -1,5 +1,5 @@ - # Base URL to uReport server --# URL = http://bug-report.itos.redhat.com -+URL = https://retrace.fedoraproject.org/faf - - # no means that ssl certificates will not be checked - # SSLVerify = no --- -1.8.3.1 - diff --git a/SOURCES/1006-conf-changed-URL-for-sending-uReport.patch b/SOURCES/1006-conf-changed-URL-for-sending-uReport.patch deleted file mode 100644 index 119ecee..0000000 --- a/SOURCES/1006-conf-changed-URL-for-sending-uReport.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 0d4c8deb8252ad8ffb60568cf0cc33a74b8759fc Mon Sep 17 00:00:00 2001 -From: Matej Habrnal -Date: Mon, 2 Feb 2015 21:41:36 +0100 -Subject: [PATCH] conf: changed URL for sending uReport - -Changed faf server url in report_uReport.xml.in. -uReports are sending to https://retrace.fedoraproject.org/faf by default. - -Signed-off-by: Matej Habrnal ---- - src/plugins/report_uReport.xml.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/plugins/report_uReport.xml.in b/src/plugins/report_uReport.xml.in -index 63dfc22..aca857a 100644 ---- a/src/plugins/report_uReport.xml.in -+++ b/src/plugins/report_uReport.xml.in -@@ -11,7 +11,7 @@ - <_label>uReport Server URL - no - <_description>Address of uReport webservice -- http://bug-report.itos.redhat.com -+ https://retrace.fedoraproject.org/faf - -