diff options
author | Karel Klic <kklic@redhat.com> | 2009-11-12 16:58:07 +0100 |
---|---|---|
committer | Karel Klic <kklic@redhat.com> | 2009-11-12 16:58:07 +0100 |
commit | 32cee84a34c005fe0d2863f439007ec633687fa8 (patch) | |
tree | 149ca7014e4295de3788f28ae88e9d9d7003da46 | |
parent | 5a8a8a6c99c9067e0dfcce839c32826a2badff0b (diff) | |
parent | 3938e6e075867ae3a349ba307ee672aa458d2662 (diff) | |
download | abrt-32cee84a34c005fe0d2863f439007ec633687fa8.tar.gz abrt-32cee84a34c005fe0d2863f439007ec633687fa8.tar.xz abrt-32cee84a34c005fe0d2863f439007ec633687fa8.zip |
Merge branch 'master' of ssh://git.fedorahosted.org/git/abrt
56 files changed, 2579 insertions, 1936 deletions
@@ -27,6 +27,7 @@ BuildRequires: polkit-devel BuildRequires: libzip-devel, libtar-devel, bzip2-devel, zlib-devel BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Requires: %{name}-libs = %{version}-%{release} +Prereq: /usr/sbin/groupadd %description %{name} is a tool to help users to detect defects in applications and @@ -241,6 +242,9 @@ desktop-file-install \ %clean rm -rf $RPM_BUILD_ROOT +%pre +/usr/sbin/groupadd -f --system abrt + %post /sbin/chkconfig --add %{name}d @@ -268,7 +272,7 @@ fi %config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf %config(noreplace) %{_sysconfdir}/dbus-1/system.d/dbus-%{name}.conf %{_initrddir}/%{name}d -%dir /var/cache/%{name} +%dir %attr(1775, root, abrt) /var/cache/%{name} %dir /var/cache/%{name}-di %dir /var/run/%{name} %dir %{_sysconfdir}/%{name} @@ -378,7 +382,7 @@ fi %files addon-python %defattr(-,root,root,-) -%{_bindir}/%{name}-pyhook-helper +%attr(2755, root, abrt) %{_bindir}/%{name}-pyhook-helper %config(noreplace) %{_sysconfdir}/%{name}/pyhook.conf %{python_sitearch}/ABRTUtils.so %{_libdir}/%{name}/libPython.so* diff --git a/examples/not_oops1 b/examples/not_oops1 new file mode 100644 index 00000000..63dba803 --- /dev/null +++ b/examples/not_oops1 @@ -0,0 +1,22 @@ +Nov 9 10:19:35 ohm openvpn[1118]: WARNING: Make sure you understand the semantics of --tls-remote before using it (see the man page). +Nov 9 10:19:35 ohm openvpn[1118]: NOTE: the current --script-security setting may allow this configuration to call user-defined scripts +Nov 9 10:19:35 ohm openvpn[1118]: Re-using SSL/TLS context +Nov 9 10:19:35 ohm openvpn[1118]: LZO compression initialized +Nov 9 10:19:35 ohm openvpn[1118]: UDPv4 link local: [undef] +Nov 9 10:19:35 ohm openvpn[1118]: UDPv4 link remote: 216.17.180.2:5000 +Nov 9 10:19:35 ohm openvpn[1118]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:37 ohm openvpn[1122]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:37 ohm openvpn[1118]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:37 ohm restorecond: Unable to watch (/home/kevin/public_html/*) No such file or directory +Nov 9 10:19:39 ohm openvpn[1118]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:39 ohm openvpn[1122]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:41 ohm openvpn[1118]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:42 ohm openvpn[1122]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:43 ohm openvpn[1118]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:43 ohm pulseaudio[1867]: module.c: module-hal-detect is deprecated: Please use module-udev-detect instead of module-hal-detect! +Nov 9 10:19:43 ohm pulseaudio[1867]: module-hal-detect-compat.c: We will now load module-udev-detect. Please make sure to remove module-hal-detect from your configuration. +Nov 9 10:19:44 ohm openvpn[1122]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:45 ohm openvpn[1122]: [UNDEF] Inactivity timeout (--ping-restart), restarting +Nov 9 10:19:45 ohm openvpn[1122]: SIGUSR1[soft,ping-restart] received, process restarting +Nov 9 10:19:46 ohm openvpn[1118]: [UNDEF] Inactivity timeout (--ping-restart), restarting +Nov 9 10:19:46 ohm openvpn[1118]: SIGUSR1[soft,ping-restart] received, process restarting diff --git a/examples/not_oops2 b/examples/not_oops2 new file mode 100644 index 00000000..5293fc1f --- /dev/null +++ b/examples/not_oops2 @@ -0,0 +1,47 @@ +Jan 11 22:31:37 kids1 kernel: [drm] Num pipes: 1 +Jan 11 22:31:38 kids1 kernel: [drm] Setting GART location based on new memorymap +Jan 11 22:31:38 kids1 kernel: [drm] Loading RS690/RS740 Microcode +Jan 11 22:31:38 kids1 kernel: [drm] Num pipes: 1 +Jan 11 22:31:38 kids1 kernel: [drm] writeback test succeeded in 1 usecs +Jan 12 14:32:19 kids1 kernel: [drm] Num pipes: 1 +Jan 12 14:32:21 kids1 kernel: [drm] Setting GART location based on new memorymap +Jan 12 14:32:21 kids1 kernel: [drm] Loading RS690/RS740 Microcode +Jan 12 14:32:21 kids1 kernel: [drm] Num pipes: 1 +Jan 12 14:32:21 kids1 kernel: [drm] writeback test succeeded in 1 usecs +Jan 12 16:12:16 kids1 kernel: [drm] Num pipes: 1 +Jan 12 19:08:41 kids1 kernel: [drm:radeon_set_igpgart] *ERROR* Unable to useIGP GART table size 32768 +Jan 12 19:08:41 kids1 kernel: [drm] Loading RS690/RS740 Microcode +Jan 12 19:08:41 kids1 kernel: BUG: unable to handle kernel NULL pointer dereference at 00000000 +Jan 12 19:08:41 kids1 kernel: IP: [<f88dec25>] :radeon:radeon_cp_init_ring_buffer+0x90/0x302 +Jan 12 19:08:41 kids1 kernel: *pde = 6f5c6067 +Jan 12 19:08:41 kids1 kernel: Oops: 0000 [#1] SMP. +Jan 12 19:08:41 kids1 kernel: Modules linked in: r8169 mii fuse nfsd lockd nfs_acl auth_rpcgss exportfs bridge stp bnep sco l2cap bl +Jan 12 19:08:41 kids1 kernel: Pid: 8003, comm: Xorg Not tainted (2.6.27.9-159.fc10.i686 #1) +Jan 12 19:08:41 kids1 kernel: EIP: 0060:[<f88dec25>] EFLAGS: 00213246 CPU: 1 +Jan 12 19:08:41 kids1 kernel: EIP is at radeon_cp_init_ring_buffer+0x90/0x302 [radeon] +Jan 12 19:08:41 kids1 kernel: EAX: 00000000 EBX: f78b4000 ECX: f78b4000 EDX: 00000000 +Jan 12 19:08:41 kids1 kernel: ESI: f5dbe800 EDI: 00006458 EBP: f0a0cf18 ESP: f0a0cf08 +Jan 12 19:08:41 kids1 kernel: DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 +Jan 12 19:08:41 kids1 kernel: Process Xorg (pid: 8003, ti=f0a0c000 task=f2380000 task.ti=f0a0c000) +Jan 12 19:08:41 kids1 kernel: Stack: f0a0cf18 f78b4000 f5dbe800 00006458 f0a0cf28 f88e11c7 f8911a24 00000000. +Jan 12 19:08:41 kids1 kernel: f0a0cf4c f88745f8 f30c3ba0 f5dbe800 f88e114a f5dbe828 f890fd78 f097ac00. +Jan 12 19:08:41 kids1 kernel: 00000000 f0a0cf68 c049b1c0 00000000 00006458 f097ac00 f097ac00 00000000. +Jan 12 19:08:41 kids1 kernel: Call Trace: +Jan 12 19:08:41 kids1 kernel: [<f88e11c7>] ? radeon_cp_resume+0x7d/0xbc [radeon] +Jan 12 19:08:41 kids1 kernel: [<f88745f8>] ? drm_ioctl+0x1b0/0x225 [drm] +Jan 12 19:08:41 kids1 kernel: [<f88e114a>] ? radeon_cp_resume+0x0/0xbc [radeon] +Jan 12 19:08:41 kids1 kernel: [<c049b1c0>] ? vfs_ioctl+0x50/0x69 +Jan 12 19:08:41 kids1 kernel: [<c049b414>] ? do_vfs_ioctl+0x23b/0x247 +Jan 12 19:08:41 kids1 kernel: [<c0460a56>] ? audit_syscall_entry+0xf9/0x123 +Jan 12 19:08:41 kids1 kernel: [<c049b460>] ? sys_ioctl+0x40/0x5c +Jan 12 19:08:41 kids1 kernel: [<c0403c76>] ? syscall_call+0x7/0xb +Jan 12 19:08:41 kids1 kernel: ======================= +Jan 12 19:08:41 kids1 kernel: Code: 66 31 d2 09 c2 89 d8 e8 fc e7 ff ff 8b 83 cc 00 00 00 8b 53 34 03 10 8b 86 70 02 00 00 2b 50 44 +Jan 12 19:08:41 kids1 kernel: EIP: [<f88dec25>] radeon_cp_init_ring_buffer+0x90/0x302 [radeon] SS:ESP 0068:f0a0cf08 +Jan 12 19:08:41 kids1 kernel: ---[ end trace 81e3cf9431f7af0c ]--- +Nov 9 15:43:47 abrtd: Activating plugin: KerneloopsScanner +Nov 9 15:43:47 abrtd: Scanning syslog... +Nov 9 15:43:47 abrtd: Locked '/var/cache/abrt/kerneloops-1257777827-1.lock' +Nov 9 15:43:47 abrtd: UnLocked '/var/cache/abrt/kerneloops-1257777827-1.lock' +Nov 9 15:43:47 abrt: Kerneloops: Reported 1 kernel oopses to Abrt +Nov 9 15:43:47 This file should not be treated as containing an oops because of the line above diff --git a/examples/oops1 b/examples/oops1 new file mode 100644 index 00000000..e4f02d26 --- /dev/null +++ b/examples/oops1 @@ -0,0 +1,41 @@ +Jan 11 22:31:37 kids1 kernel: [drm] Num pipes: 1 +Jan 11 22:31:38 kids1 kernel: [drm] Setting GART location based on new memorymap +Jan 11 22:31:38 kids1 kernel: [drm] Loading RS690/RS740 Microcode +Jan 11 22:31:38 kids1 kernel: [drm] Num pipes: 1 +Jan 11 22:31:38 kids1 kernel: [drm] writeback test succeeded in 1 usecs +Jan 12 14:32:19 kids1 kernel: [drm] Num pipes: 1 +Jan 12 14:32:21 kids1 kernel: [drm] Setting GART location based on new memorymap +Jan 12 14:32:21 kids1 kernel: [drm] Loading RS690/RS740 Microcode +Jan 12 14:32:21 kids1 kernel: [drm] Num pipes: 1 +Jan 12 14:32:21 kids1 kernel: [drm] writeback test succeeded in 1 usecs +Jan 12 16:12:16 kids1 kernel: [drm] Num pipes: 1 +Jan 12 19:08:41 kids1 kernel: [drm:radeon_set_igpgart] *ERROR* Unable to useIGP GART table size 32768 +Jan 12 19:08:41 kids1 kernel: [drm] Loading RS690/RS740 Microcode +Jan 12 19:08:41 kids1 kernel: BUG: unable to handle kernel NULL pointer dereference at 00000000 +Jan 12 19:08:41 kids1 kernel: IP: [<f88dec25>] :radeon:radeon_cp_init_ring_buffer+0x90/0x302 +Jan 12 19:08:41 kids1 kernel: *pde = 6f5c6067 +Jan 12 19:08:41 kids1 kernel: Oops: 0000 [#1] SMP. +Jan 12 19:08:41 kids1 kernel: Modules linked in: r8169 mii fuse nfsd lockd nfs_acl auth_rpcgss exportfs bridge stp bnep sco l2cap bl +Jan 12 19:08:41 kids1 kernel: Pid: 8003, comm: Xorg Not tainted (2.6.27.9-159.fc10.i686 #1) +Jan 12 19:08:41 kids1 kernel: EIP: 0060:[<f88dec25>] EFLAGS: 00213246 CPU: 1 +Jan 12 19:08:41 kids1 kernel: EIP is at radeon_cp_init_ring_buffer+0x90/0x302 [radeon] +Jan 12 19:08:41 kids1 kernel: EAX: 00000000 EBX: f78b4000 ECX: f78b4000 EDX: 00000000 +Jan 12 19:08:41 kids1 kernel: ESI: f5dbe800 EDI: 00006458 EBP: f0a0cf18 ESP: f0a0cf08 +Jan 12 19:08:41 kids1 kernel: DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 +Jan 12 19:08:41 kids1 kernel: Process Xorg (pid: 8003, ti=f0a0c000 task=f2380000 task.ti=f0a0c000) +Jan 12 19:08:41 kids1 kernel: Stack: f0a0cf18 f78b4000 f5dbe800 00006458 f0a0cf28 f88e11c7 f8911a24 00000000. +Jan 12 19:08:41 kids1 kernel: f0a0cf4c f88745f8 f30c3ba0 f5dbe800 f88e114a f5dbe828 f890fd78 f097ac00. +Jan 12 19:08:41 kids1 kernel: 00000000 f0a0cf68 c049b1c0 00000000 00006458 f097ac00 f097ac00 00000000. +Jan 12 19:08:41 kids1 kernel: Call Trace: +Jan 12 19:08:41 kids1 kernel: [<f88e11c7>] ? radeon_cp_resume+0x7d/0xbc [radeon] +Jan 12 19:08:41 kids1 kernel: [<f88745f8>] ? drm_ioctl+0x1b0/0x225 [drm] +Jan 12 19:08:41 kids1 kernel: [<f88e114a>] ? radeon_cp_resume+0x0/0xbc [radeon] +Jan 12 19:08:41 kids1 kernel: [<c049b1c0>] ? vfs_ioctl+0x50/0x69 +Jan 12 19:08:41 kids1 kernel: [<c049b414>] ? do_vfs_ioctl+0x23b/0x247 +Jan 12 19:08:41 kids1 kernel: [<c0460a56>] ? audit_syscall_entry+0xf9/0x123 +Jan 12 19:08:41 kids1 kernel: [<c049b460>] ? sys_ioctl+0x40/0x5c +Jan 12 19:08:41 kids1 kernel: [<c0403c76>] ? syscall_call+0x7/0xb +Jan 12 19:08:41 kids1 kernel: ======================= +Jan 12 19:08:41 kids1 kernel: Code: 66 31 d2 09 c2 89 d8 e8 fc e7 ff ff 8b 83 cc 00 00 00 8b 53 34 03 10 8b 86 70 02 00 00 2b 50 44 +Jan 12 19:08:41 kids1 kernel: EIP: [<f88dec25>] radeon_cp_init_ring_buffer+0x90/0x302 [radeon] SS:ESP 0068:f0a0cf08 +Jan 12 19:08:41 kids1 kernel: ---[ end trace 81e3cf9431f7af0c ]--- diff --git a/inc/abrtlib.h b/inc/abrtlib.h index f9228d31..257f5571 100644 --- a/inc/abrtlib.h +++ b/inc/abrtlib.h @@ -42,6 +42,8 @@ #include <sstream> #include <iostream> +#include "abrt_types.h" + /* Some libc's forget to declare these, do it ourself */ extern char **environ; #if defined(__GLIBC__) && __GLIBC__ < 2 @@ -201,7 +203,6 @@ bool dot_or_dotdot(const char *filename); char *last_char_is(const char *s, int c); bool string_to_bool(const char *s); - /* C++ style stuff */ std::string ssprintf(const char *format, ...); @@ -217,4 +218,8 @@ to_string(T x) return o.str(); } +std::string popen_and_save_output(const char *cmd); +void parse_args(const char *psArgs, vector_string_t& pArgs, int quote = -1); +void parse_release(const char *pRelease, std::string& pProduct, std::string& pVersion); + #endif diff --git a/lib/Plugins/Bugzilla.cpp b/lib/Plugins/Bugzilla.cpp index ecd4dd67..06f93342 100644 --- a/lib/Plugins/Bugzilla.cpp +++ b/lib/Plugins/Bugzilla.cpp @@ -1,69 +1,25 @@ #include <xmlrpc-c/base.h> #include <xmlrpc-c/client.h> #include "abrtlib.h" +#include "abrt_xmlrpc.h" #include "Bugzilla.h" #include "CrashTypes.h" #include "DebugDump.h" #include "ABRTException.h" #include "CommLayerInner.h" #ifdef HAVE_CONFIG_H - #include <config.h> +# include <config.h> #endif #define XML_RPC_SUFFIX "/xmlrpc.cgi" -static void get_product_and_version(const std::string& pRelease, - std::string& pProduct, - std::string& pVersion) -{ - if (pRelease.find("Rawhide") != std::string::npos) - { - pProduct = "Fedora"; - pVersion = "rawhide"; - return; - } - if (pRelease.find("Fedora") != std::string::npos) - { - pProduct = "Fedora"; - } - else if (pRelease.find("Red Hat Enterprise Linux") != std::string::npos) - { - pProduct = "Red Hat Enterprise Linux "; - } - std::string::size_type pos = pRelease.find("release"); - pos = pRelease.find(" ", pos) + 1; - while (pRelease[pos] != ' ') - { - pVersion += pRelease[pos]; - if (pProduct == "Red Hat Enterprise Linux ") - { - pProduct += pRelease[pos]; - } - pos++; - } -} - static void create_new_bug_description(const map_crash_report_t& pCrashReport, std::string& pDescription) { pDescription = "abrt detected a crash.\n\n"; pDescription += make_description_bz(pCrashReport); } -// FIXME: we still leak memory if this function detects a fault: -// many instances when we leave non-freed or non-xmlrpc_DECREF'ed data behind. -static void throw_if_xml_fault_occurred(xmlrpc_env *env) -{ - if (env->fault_occurred) - { - std::string errmsg = ssprintf("XML-RPC Fault: %s(%d)", env->fault_string, env->fault_code); - xmlrpc_env_clean(env); // this is needed ONLY if fault_occurred - xmlrpc_env_init(env); // just in case user catches ex and _continues_ to use env - error_msg("%s", errmsg.c_str()); // show error in daemon log - throw CABRTException(EXCEP_PLUGIN, errmsg); - } -} - /* * Static namespace for xmlrpc stuff. @@ -72,81 +28,18 @@ static void throw_if_xml_fault_occurred(xmlrpc_env *env) namespace { -struct ctx { - xmlrpc_client* client; - xmlrpc_server_info* server_info; +struct ctx: public abrt_xmlrpc_conn { + ctx(const char* url, bool no_ssl_verify): abrt_xmlrpc_conn(url, no_ssl_verify) {} - ctx(const char* url, bool no_ssl_verify) { new_xmlrpc_client(url, no_ssl_verify); } - ~ctx() { destroy_xmlrpc_client(); } - - void new_xmlrpc_client(const char* url, bool no_ssl_verify); - void destroy_xmlrpc_client(); - - void login(const char* login, const char* passwd); - void logout(); - int32_t check_uuid_in_bugzilla(const char* component, const char* UUID); - bool check_cc_and_reporter(uint32_t bug_id, const char* login); - void add_plus_one_cc(uint32_t bug_id, const char* login); - uint32_t new_bug(const map_crash_report_t& pCrashReport); - void add_attachments(const char* bug_id_str, const map_crash_report_t& pCrashReport); + void login(const char* login, const char* passwd); + void logout(); + int32_t check_uuid_in_bugzilla(const char* component, const char* UUID); + bool check_cc_and_reporter(uint32_t bug_id, const char* login); + void add_plus_one_cc(uint32_t bug_id, const char* login); + uint32_t new_bug(const map_crash_report_t& pCrashReport); + void add_attachments(const char* bug_id_str, const map_crash_report_t& pCrashReport); }; -void ctx::new_xmlrpc_client(const char* url, bool no_ssl_verify) -{ - xmlrpc_env env; - xmlrpc_env_init(&env); - - /* This should be done at program startup, once. - * We do it in abrtd's main */ - /* xmlrpc_client_setup_global_const(&env); */ - - struct xmlrpc_curl_xportparms curlParms; - memset(&curlParms, 0, sizeof(curlParms)); - /* curlParms.network_interface = NULL; - done by memset */ - curlParms.no_ssl_verifypeer = no_ssl_verify; - curlParms.no_ssl_verifyhost = no_ssl_verify; -#ifdef VERSION - curlParms.user_agent = PACKAGE_NAME"/"VERSION; -#else - curlParms.user_agent = "abrt"; -#endif - - struct xmlrpc_clientparms clientParms; - memset(&clientParms, 0, sizeof(clientParms)); - clientParms.transport = "curl"; - clientParms.transportparmsP = &curlParms; - clientParms.transportparm_size = XMLRPC_CXPSIZE(user_agent); - - client = NULL; - xmlrpc_client_create(&env, XMLRPC_CLIENT_NO_FLAGS, - PACKAGE_NAME, VERSION, - &clientParms, XMLRPC_CPSIZE(transportparm_size), - &client); - throw_if_xml_fault_occurred(&env); - - server_info = xmlrpc_server_info_new(&env, url); - if (env.fault_occurred) - { - xmlrpc_client_destroy(client); - client = NULL; - } - throw_if_xml_fault_occurred(&env); -} - -void ctx::destroy_xmlrpc_client() -{ - if (server_info) - { - xmlrpc_server_info_free(server_info); - server_info = NULL; - } - if (client) - { - xmlrpc_client_destroy(client); - client = NULL; - } -} - void ctx::login(const char* login, const char* passwd) { xmlrpc_env env; @@ -156,7 +49,7 @@ void ctx::login(const char* login, const char* passwd) throw_if_xml_fault_occurred(&env); xmlrpc_value* result = NULL; - xmlrpc_client_call2(&env, client, server_info, "User.login", param, &result); + xmlrpc_client_call2(&env, m_pClient, m_pServer_info, "User.login", param, &result); xmlrpc_DECREF(param); if (result) xmlrpc_DECREF(result); @@ -179,7 +72,7 @@ void ctx::logout() throw_if_xml_fault_occurred(&env); xmlrpc_value* result = NULL; - xmlrpc_client_call2(&env, client, server_info, "User.logout", param, &result); + xmlrpc_client_call2(&env, m_pClient, m_pServer_info, "User.logout", param, &result); xmlrpc_DECREF(param); if (result) xmlrpc_DECREF(result); @@ -195,7 +88,7 @@ bool ctx::check_cc_and_reporter(uint32_t bug_id, const char* login) throw_if_xml_fault_occurred(&env); xmlrpc_value* result = NULL; - xmlrpc_client_call2(&env, client, server_info, "bugzilla.getBug", param, &result); + xmlrpc_client_call2(&env, m_pClient, m_pServer_info, "bugzilla.getBug", param, &result); throw_if_xml_fault_occurred(&env); xmlrpc_DECREF(param); @@ -263,7 +156,7 @@ void ctx::add_plus_one_cc(uint32_t bug_id, const char* login) throw_if_xml_fault_occurred(&env); xmlrpc_value* result = NULL; - xmlrpc_client_call2(&env, client, server_info, "Bug.update", param, &result); + xmlrpc_client_call2(&env, m_pClient, m_pServer_info, "Bug.update", param, &result); throw_if_xml_fault_occurred(&env); xmlrpc_DECREF(result); @@ -281,7 +174,7 @@ int32_t ctx::check_uuid_in_bugzilla(const char* component, const char* UUID) throw_if_xml_fault_occurred(&env); xmlrpc_value* result = NULL; - xmlrpc_client_call2(&env, client, server_info, "Bug.search", param, &result); + xmlrpc_client_call2(&env, m_pClient, m_pServer_info, "Bug.search", param, &result); throw_if_xml_fault_occurred(&env); xmlrpc_DECREF(param); @@ -348,7 +241,7 @@ uint32_t ctx::new_bug(const map_crash_report_t& pCrashReport) std::string product; std::string version; - get_product_and_version(release, product, version); + parse_release(release.c_str(), product, version); xmlrpc_value* param = xmlrpc_build_value(&env, "({s:s,s:s,s:s,s:s,s:s,s:s,s:s})", "product", product.c_str(), @@ -362,7 +255,7 @@ uint32_t ctx::new_bug(const map_crash_report_t& pCrashReport) throw_if_xml_fault_occurred(&env); xmlrpc_value* result; - xmlrpc_client_call2(&env, client, server_info, "Bug.create", param, &result); + xmlrpc_client_call2(&env, m_pClient, m_pServer_info, "Bug.create", param, &result); throw_if_xml_fault_occurred(&env); xmlrpc_value* id; @@ -409,7 +302,7 @@ void ctx::add_attachments(const char* bug_id_str, const map_crash_report_t& pCra free(encoded64); throw_if_xml_fault_occurred(&env); - xmlrpc_client_call2(&env, client, server_info, "bugzilla.addAttachment", param, &result); + xmlrpc_client_call2(&env, m_pClient, m_pServer_info, "bugzilla.addAttachment", param, &result); throw_if_xml_fault_occurred(&env); xmlrpc_DECREF(result); xmlrpc_DECREF(param); @@ -444,14 +337,14 @@ std::string CReporterBugzilla::Report(const map_crash_report_t& pCrashReport, std::string BugzillaURL; bool NoSSLVerify; map_plugin_settings_t settings = parse_settings(pSettings); - /* if parse_settings fails it returns an empty map so we need to use defaults*/ - if(!settings.empty()) + /* if parse_settings fails it returns an empty map so we need to use defaults */ + if (!settings.empty()) { Login = settings["Login"]; Password = settings["Password"]; BugzillaXMLRPC = settings["BugzillaXMLRPC"]; BugzillaURL = settings["BugzillaURL"]; - NoSSLVerify = settings["NoSSLVerify"] == "yes"; + NoSSLVerify = string_to_bool(settings["NoSSLVerify"].c_str()); } else { @@ -513,9 +406,9 @@ std::string CReporterBugzilla::Report(const map_crash_report_t& pCrashReport, map_plugin_settings_t CReporterBugzilla::parse_settings(const map_plugin_settings_t& pSettings) { map_plugin_settings_t plugin_settings; - map_plugin_settings_t::const_iterator it; - map_plugin_settings_t::const_iterator end = pSettings.end(); + map_plugin_settings_t::const_iterator end = pSettings.end(); + map_plugin_settings_t::const_iterator it; it = pSettings.find("BugzillaURL"); if (it != end) { @@ -567,6 +460,8 @@ map_plugin_settings_t CReporterBugzilla::parse_settings(const map_plugin_setting void CReporterBugzilla::SetSettings(const map_plugin_settings_t& pSettings) { + m_pSettings = pSettings; + //BUG! This gets called when user's keyring contains login data, //then it takes precedence over /etc/abrt/plugins/Bugzilla.conf. //I got a case when keyring had a STALE password, and there was no way @@ -574,9 +469,8 @@ void CReporterBugzilla::SetSettings(const map_plugin_settings_t& pSettings) //(by hacking abrt source!), I don't know how to purge it from the keyring. //At the very least, log("SOMETHING") here. - map_plugin_settings_t::const_iterator it; map_plugin_settings_t::const_iterator end = pSettings.end(); - + map_plugin_settings_t::const_iterator it; it = pSettings.find("BugzillaURL"); if (it != end) { @@ -614,10 +508,11 @@ void CReporterBugzilla::SetSettings(const map_plugin_settings_t& pSettings) it = pSettings.find("NoSSLVerify"); if (it != end) { - m_bNoSSLVerify = (it->second == "yes"); + m_bNoSSLVerify = string_to_bool(it->second.c_str()); } } +/* Should not be deleted (why?) */ const map_plugin_settings_t& CReporterBugzilla::GetSettings() { m_pSettings["BugzillaURL"] = m_sBugzillaURL; diff --git a/lib/Plugins/Bugzilla.h b/lib/Plugins/Bugzilla.h index 55a5f5f0..9130a698 100644 --- a/lib/Plugins/Bugzilla.h +++ b/lib/Plugins/Bugzilla.h @@ -19,11 +19,13 @@ class CReporterBugzilla : public CReporter public: CReporterBugzilla(); virtual ~CReporterBugzilla(); - virtual void SetSettings(const map_plugin_settings_t& pSettings); - virtual const map_plugin_settings_t& GetSettings(); + virtual std::string Report(const map_crash_report_t& pCrashReport, const map_plugin_settings_t& pSettings, const std::string& pArgs); + + virtual void SetSettings(const map_plugin_settings_t& pSettings); + virtual const map_plugin_settings_t& GetSettings(); }; #endif /* BUGZILLA_H_ */ diff --git a/lib/Plugins/CCpp.cpp b/lib/Plugins/CCpp.cpp index 6d6edd56..82c5677d 100644 --- a/lib/Plugins/CCpp.cpp +++ b/lib/Plugins/CCpp.cpp @@ -127,6 +127,18 @@ static pid_t ExecVP(char** pArgs, uid_t uid, std::string& pOutput) setreuid(uid, uid); setsid(); + /* Nuke everything which may make setlocale() switch to non-POSIX locale: + * we need to avoid having gdb output in some obscure language. + */ + unsetenv("LANG"); + unsetenv("LC_ALL"); + unsetenv("LC_COLLATE"); + unsetenv("LC_CTYPE"); + unsetenv("LC_MESSAGES"); + unsetenv("LC_MONETARY"); + unsetenv("LC_NUMERIC"); + unsetenv("LC_TIME"); + execvp(pArgs[0], pArgs); /* VERB1 since sometimes we expect errors here */ VERB1 perror_msg("Can't execute '%s'", pArgs[0]); @@ -164,6 +176,8 @@ static LineRating rate_line(const char *line) { #define FOUND(x) (strstr(line, x) != NULL) /* see the "enum LineRating" comments for possible combinations */ + if (FOUND(" at ")) + return Good; const char *function = strstr(line, " in "); if (function) { @@ -171,12 +185,6 @@ static LineRating rate_line(const char *line) { function = NULL; } - else - { - bool source_file = FOUND(" at "); - if (source_file) - return Good; - } } bool library = FOUND(" from "); if (function && library) @@ -193,7 +201,7 @@ static LineRating rate_line(const char *line) /* returns number of "stars" to show */ static int rate_backtrace(const char *backtrace) { - int i, len; + int i, j, len; int multiplier = 0; int rating = 0; int best_possible_rating = 0; @@ -210,6 +218,9 @@ static int rate_backtrace(const char *backtrace) if (backtrace[i] == '#') /* this separates frames from each other */ { std::string s(backtrace + i + 1, len); + for (j=0; j<len; j++) /* replace tabs with spaces */ + if (s[j] == '\t') + s[j] = ' '; multiplier++; rating += rate_line(s.c_str()) * multiplier; best_possible_rating += BestRating * multiplier; @@ -969,7 +980,7 @@ void CAnalyzerCCpp::SetSettings(const map_plugin_settings_t& pSettings) it = pSettings.find("MemoryMap"); if (it != end) { - m_bMemoryMap = it->second == "yes"; + m_bMemoryMap = string_to_bool(it->second.c_str()); } it = pSettings.find("DebugInfo"); if (it != end) @@ -986,19 +997,20 @@ void CAnalyzerCCpp::SetSettings(const map_plugin_settings_t& pSettings) it = pSettings.find("InstallDebuginfo"); if (it != end) { - m_bInstallDebugInfo = it->second == "yes"; + m_bInstallDebugInfo = string_to_bool(it->second.c_str()); } } -const map_plugin_settings_t& CAnalyzerCCpp::GetSettings() -{ - m_pSettings["MemoryMap"] = m_bMemoryMap ? "yes" : "no"; - m_pSettings["DebugInfo"] = m_sDebugInfo; - m_pSettings["DebugInfoCacheMB"] = to_string(m_nDebugInfoCacheMB); - m_pSettings["InstallDebugInfo"] = m_bInstallDebugInfo ? "yes" : "no"; - - return m_pSettings; -} +//ok to delete? +//const map_plugin_settings_t& CAnalyzerCCpp::GetSettings() +//{ +// m_pSettings["MemoryMap"] = m_bMemoryMap ? "yes" : "no"; +// m_pSettings["DebugInfo"] = m_sDebugInfo; +// m_pSettings["DebugInfoCacheMB"] = to_string(m_nDebugInfoCacheMB); +// m_pSettings["InstallDebugInfo"] = m_bInstallDebugInfo ? "yes" : "no"; +// +// return m_pSettings; +//} PLUGIN_INFO(ANALYZER, CAnalyzerCCpp, diff --git a/lib/Plugins/CCpp.h b/lib/Plugins/CCpp.h index e2abdece..3fa0d99a 100644 --- a/lib/Plugins/CCpp.h +++ b/lib/Plugins/CCpp.h @@ -44,7 +44,8 @@ class CAnalyzerCCpp : public CAnalyzer virtual void Init(); virtual void DeInit(); virtual void SetSettings(const map_plugin_settings_t& pSettings); - virtual const map_plugin_settings_t& GetSettings(); +//ok to delete? +// virtual const map_plugin_settings_t& GetSettings(); }; #endif /* CCPP */ diff --git a/lib/Plugins/Catcut.cpp b/lib/Plugins/Catcut.cpp index 13fa8a41..e6d16b4f 100644 --- a/lib/Plugins/Catcut.cpp +++ b/lib/Plugins/Catcut.cpp @@ -1,7 +1,8 @@ #include <xmlrpc-c/base.h> #include <xmlrpc-c/client.h> - +#include <curl/curl.h> #include "abrtlib.h" +#include "abrt_xmlrpc.h" #include "Catcut.h" #include "CrashTypes.h" #include "DebugDump.h" @@ -13,108 +14,8 @@ using namespace std; -static xmlrpc_env env; -static xmlrpc_client* client = NULL; -static struct xmlrpc_clientparms clientParms; -static struct xmlrpc_curl_xportparms curlParms; -static xmlrpc_server_info* server_info = NULL; - - -static string login(const char* login, const char* passwd); -//static void logout(); -static void new_xmlrpc_client(const char* url, bool no_ssl_verify); -static void destroy_xmlrpc_client(); -static void create_new_bug_description(const map_crash_report_t& pCrashReport, string& pDescription); -static void get_product_and_version(const string& pRelease, - string& pProduct, - string& pVersion); - - -static void throw_if_xml_fault_occurred() -{ - if (env.fault_occurred) - { - string errmsg = ssprintf("XML-RPC Fault: %s(%d)", env.fault_string, env.fault_code); - error_msg("%s", errmsg.c_str()); // show error in daemon log - throw CABRTException(EXCEP_PLUGIN, errmsg); - } -} - -static void new_xmlrpc_client(const char* url, bool no_ssl_verify) -{ - xmlrpc_env_init(&env); - - /* This should be done at program startup, once. - * We do it in abrtd's main */ - /* xmlrpc_client_setup_global_const(&env); */ - - curlParms.network_interface = NULL; - curlParms.no_ssl_verifypeer = no_ssl_verify; - curlParms.no_ssl_verifyhost = no_ssl_verify; -#ifdef VERSION - curlParms.user_agent = PACKAGE_NAME"/"VERSION; -#else - curlParms.user_agent = "abrt"; -#endif - - clientParms.transport = "curl"; - clientParms.transportparmsP = &curlParms; - clientParms.transportparm_size = XMLRPC_CXPSIZE(user_agent); - - xmlrpc_client_create(&env, XMLRPC_CLIENT_NO_FLAGS, PACKAGE_NAME, VERSION, &clientParms, XMLRPC_CPSIZE(transportparm_size), - &client); - throw_if_xml_fault_occurred(); - - server_info = xmlrpc_server_info_new(&env, url); - throw_if_xml_fault_occurred(); -} - -static void destroy_xmlrpc_client() -{ - xmlrpc_server_info_free(server_info); - xmlrpc_env_clean(&env); - xmlrpc_client_destroy(client); -} - -static string login(const char* login, const char* passwd) -{ - xmlrpc_value* param = xmlrpc_build_value(&env, "(ss)", login, passwd); - throw_if_xml_fault_occurred(); - - xmlrpc_value* result; - xmlrpc_client_call2(&env, client, server_info, "Catcut.auth", param, &result); - throw_if_xml_fault_occurred(); - xmlrpc_DECREF(param); - - xmlrpc_value *cookie_xml; - const char *cookie; - string cookie_str; - xmlrpc_struct_find_value(&env, result, "cookie", &cookie_xml); - throw_if_xml_fault_occurred(); - xmlrpc_read_string(&env, cookie_xml, &cookie); - throw_if_xml_fault_occurred(); - cookie_str = cookie; - /* xmlrpc_read_string returns *malloc'ed ptr*. - * doc is not very clear on it, but I looked in xmlrpc sources. */ - free((void*)cookie); - xmlrpc_DECREF(cookie_xml); - - xmlrpc_DECREF(result); - - return cookie_str; -} - -// catcut does not have it (yet?) -//static void logout() -//{ -// xmlrpc_value* param = xmlrpc_build_value(&env, "(s)", ""); -// throw_if_xml_fault_occurred(); -// -// xmlrpc_value* result = NULL; /* paranoia */ -// xmlrpc_client_call2(&env, client, server_info, "User.logout", param, &result); -// throw_if_xml_fault_occurred(); -//} +//TODO: move to make_descr.cpp static void create_new_bug_description(const map_crash_report_t& pCrashReport, string& pDescription) { string howToReproduce; @@ -167,39 +68,253 @@ static void create_new_bug_description(const map_crash_report_t& pCrashReport, s } } -static void get_product_and_version(const string& pRelease, - string& pProduct, - string& pVersion) +static int +put_stream(const char *pURL, FILE* f, size_t content_length) { - if (pRelease.find("Rawhide") != string::npos) + CURL* curl = curl_easy_init(); + if (!curl) { - pProduct = "Fedora"; - pVersion = "rawhide"; + throw CABRTException(EXCEP_PLUGIN, "put_stream: Curl library error."); + } + /* enable uploading */ + curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); + /* specify target */ + curl_easy_setopt(curl, CURLOPT_URL, pURL); + /* file handle: passed to the default callback, it will fread() it */ + curl_easy_setopt(curl, CURLOPT_READDATA, f); + /* get file size */ + curl_easy_setopt(curl, CURLOPT_INFILESIZE, content_length); + /*everything is done here; result 0 means success*/ + int result = curl_easy_perform(curl); + /* goodbye */ + curl_easy_cleanup(curl); + return result; +} + +static void +send_string(const char *pURL, + const char *pContent, + int retryCount, + int retryDelaySeconds) +{ + if (pURL[0] == '\0') + { + error_msg(_("send_string: URL not specified")); return; } - if (pRelease.find("Fedora") != string::npos) + + do { - pProduct = "Fedora"; + int content_length = strlen(pContent); + FILE* f = fmemopen((void*)pContent, content_length, "r"); + if (!f) + { + throw CABRTException(EXCEP_PLUGIN, "send_string: could not open string stream"); + } + int result = put_stream(pURL, f, content_length); + fclose(f); + if (!result) + return; + update_client(_("Sending failed, try it again: %s"), curl_easy_strerror((CURLcode)result)); } - else if (pRelease.find("Red Hat Enterprise Linux") != string::npos) + /*retry the upload if not succesful, wait a bit before next try*/ + while (--retryCount != 0 && (sleep(retryDelaySeconds), 1)); + + throw CABRTException(EXCEP_PLUGIN, "send_string: could not send string"); +} + +static void +send_file(const char *pURL, + const char *pFilename, + int retryCount, + int retryDelaySeconds) +{ + if (pURL[0] == '\0') { - pProduct = "Red Hat Enterprise Linux "; + error_msg(_("send_file: URL not specified")); + return; } - string::size_type pos = pRelease.find("release"); - pos = pRelease.find(" ", pos) + 1; - while (pRelease[pos] != ' ') + + update_client(_("Sending file %s to %s"), pFilename, pURL); + + do { - pVersion += pRelease[pos]; - if (pProduct == "Red Hat Enterprise Linux ") + FILE* f = fopen(pFilename, "r"); + if (!f) { - pProduct += pRelease[pos]; + throw CABRTException(EXCEP_PLUGIN, "send_file: could not open string stream"); } - pos++; + struct stat buf; + fstat(fileno(f), &buf); /* can't fail */ + int content_length = buf.st_size; + int result = put_stream(pURL, f, content_length); + fclose(f); + if (!result) + return; + update_client(_("Sending failed, try it again: %s"), curl_easy_strerror((CURLcode)result)); } + /*retry the upload if not succesful, wait a bit before next try*/ + while (--retryCount != 0 && (sleep(retryDelaySeconds), 1)); + + throw CABRTException(EXCEP_PLUGIN, "send_file: could not send file"); } -static string new_bug(const char *auth_cookie, const map_crash_report_t& pCrashReport) +static string +resolve_relative_url(const char *url, const char *base) +{ + // if 'url' is relative (not absolute) combine it with 'base' + // (which must be absolute) + // Only works in limited cases: + // 0) url is already absolute + // 1) url starts with two slashes + // 2) url starts with one slash + + const char *colon = strchr(url, ':'); + const char *slash = strchr(url, '/'); + + if (colon && (!slash || colon < slash)) + { + return url; + } + + const char *end_of_protocol = strchr(base, ':'); + string protocol(base, end_of_protocol - base); + + end_of_protocol += 3; /* skip "://" */ + const char *end_of_host = strchr(end_of_protocol, '/'); + string host(end_of_protocol, end_of_host - end_of_protocol); + + if (url[0] == '/') + { + if (url[1] == '/') + { + protocol += ':'; + protocol += url; + return protocol; + } + protocol += "://"; + protocol += host; + protocol += url; + return protocol; + } + throw CABRTException(EXCEP_PLUGIN, "resolve_relative_url: unhandled relative url"); +} + +// +// struct_find_XXXX +// abstract all the busy work of getting a field's value from +// a struct. XXXX is a type. +// Return true/false = the field is in the struct +// If true, return the field's value in 'value'. +// +// This function currently just assumes that the value in the +// field can be read into the type of 'value'. This should probably +// be fixed to either convert the fields value to the type of 'value' +// or error specifically/usefully. +// +// This function probably should be converted to an overloaded function +// (overloaded on the type of 'value'). It could also be a function +// template. +// + +static bool +struct_find_int(xmlrpc_env* env, xmlrpc_value* result, + const char* fieldName, int& value) +{ + xmlrpc_value* an_xmlrpc_value; + xmlrpc_struct_find_value(env, result, fieldName, &an_xmlrpc_value); + throw_if_xml_fault_occurred(env); + if (an_xmlrpc_value) + { + xmlrpc_read_int(env, an_xmlrpc_value, &value); + throw_if_xml_fault_occurred(env); + xmlrpc_DECREF(an_xmlrpc_value); + return true; + } + return false; +} + +static bool +struct_find_string(xmlrpc_env* env, xmlrpc_value* result, + const char* fieldName, string& value) +{ + xmlrpc_value* an_xmlrpc_value; + xmlrpc_struct_find_value(env, result, fieldName, &an_xmlrpc_value); + throw_if_xml_fault_occurred(env); + if (an_xmlrpc_value) + { + const char* value_s; + xmlrpc_read_string(env, an_xmlrpc_value, &value_s); + throw_if_xml_fault_occurred(env); + value = value_s; + xmlrpc_DECREF(an_xmlrpc_value); + free((void*)value_s); + return true; + } + return false; +} + + +/* + * Static namespace for xmlrpc stuff. + * Used mainly to ensure we always destroy xmlrpc client and server_info. + */ + +namespace { + +struct ctx: public abrt_xmlrpc_conn { + ctx(const char* url, bool no_ssl_verify): abrt_xmlrpc_conn(url, no_ssl_verify) {} + + string login(const char* login, const char* passwd); + string new_bug(const char *auth_cookie, const map_crash_report_t& pCrashReport); + string request_upload(const char* auth_cookie, const char* pTicketName, + const char* fileName, const char* description); + void add_attachments(const char* xmlrpc_URL, + const char* auth_cookie, + const char* pTicketName, + const map_crash_report_t& pCrashReport, + int retryCount, + int retryDelaySeconds); +}; + +string +ctx::login(const char* login, const char* passwd) { + xmlrpc_env env; + xmlrpc_env_init(&env); + + xmlrpc_value* param = xmlrpc_build_value(&env, "(ss)", login, passwd); + throw_if_xml_fault_occurred(&env); + + xmlrpc_value* result; + xmlrpc_client_call2(&env, m_pClient, m_pServer_info, "Catcut.auth", param, &result); + xmlrpc_DECREF(param); + throw_if_xml_fault_occurred(&env); + + xmlrpc_value *cookie_xml; + const char *cookie; + string cookie_str; + xmlrpc_struct_find_value(&env, result, "cookie", &cookie_xml); + throw_if_xml_fault_occurred(&env); + xmlrpc_read_string(&env, cookie_xml, &cookie); + throw_if_xml_fault_occurred(&env); + cookie_str = cookie; + /* xmlrpc_read_string returns *malloc'ed ptr*. + * doc is not very clear on it, but I looked in xmlrpc sources. */ + free((void*)cookie); + xmlrpc_DECREF(cookie_xml); + + xmlrpc_DECREF(result); + + return cookie_str; +} + +string +ctx::new_bug(const char *auth_cookie, const map_crash_report_t& pCrashReport) +{ + xmlrpc_env env; + xmlrpc_env_init(&env); + string package = pCrashReport.find(FILENAME_PACKAGE)->second[CD_CONTENT]; string component = pCrashReport.find(FILENAME_COMPONENT)->second[CD_CONTENT]; string release = pCrashReport.find(FILENAME_RELEASE)->second[CD_CONTENT]; @@ -214,7 +329,7 @@ static string new_bug(const char *auth_cookie, const map_crash_report_t& pCrashR string product; string version; - get_product_and_version(release, product, version); + parse_release(release.c_str(), product, version); xmlrpc_value *param = xmlrpc_build_value(&env, "(s{s:s,s:s,s:s,s:s,s:s,s:s,s:s})", auth_cookie, @@ -226,20 +341,20 @@ static string new_bug(const char *auth_cookie, const map_crash_report_t& pCrashR "status_whiteboard", status_whiteboard.c_str(), "platform", arch.c_str() ); - throw_if_xml_fault_occurred(); + throw_if_xml_fault_occurred(&env); xmlrpc_value *result; - xmlrpc_client_call2(&env, client, server_info, "Catcut.createTicket", param, &result); - throw_if_xml_fault_occurred(); + xmlrpc_client_call2(&env, m_pClient, m_pServer_info, "Catcut.createTicket", param, &result); xmlrpc_DECREF(param); + throw_if_xml_fault_occurred(&env); xmlrpc_value *bug_id_xml; const char *bug_id; string bug_id_str; xmlrpc_struct_find_value(&env, result, "ticket", &bug_id_xml); - throw_if_xml_fault_occurred(); + throw_if_xml_fault_occurred(&env); xmlrpc_read_string(&env, bug_id_xml, &bug_id); - throw_if_xml_fault_occurred(); + throw_if_xml_fault_occurred(&env); bug_id_str = bug_id; log("New bug id: %s", bug_id); update_client(_("New bug id: %s"), bug_id); @@ -251,81 +366,177 @@ static string new_bug(const char *auth_cookie, const map_crash_report_t& pCrashR return bug_id_str; } -//static -//void add_attachments(const string& pBugId, const map_crash_report_t& pCrashReport) -//{ -// xmlrpc_value* result = NULL; -// -// map_crash_report_t::const_iterator it = pCrashReport.begin(); -// for (; it != pCrashReport.end(); it++) -// { -// if (it->second[CD_TYPE] == CD_ATT) -// { -// string description = "File: " + it->first; -// const string& to_encode = it->second[CD_CONTENT]; -// char *encoded64 = encode_base64(to_encode.c_str(), to_encode.length()); -// xmlrpc_value* param = xmlrpc_build_value(&env,"(s{s:s,s:s,s:s,s:s})", -// pBugId.c_str(), -// "description", description.c_str(), -// "filename", it->first.c_str(), -// "contenttype", "text/plain", -// "data", encoded64 -// ); -// free(encoded64); -// throw_if_xml_fault_occurred(); -// -//// catcut has this API: -//// struct response requestUpload(string cookie, string ticket, string filename, string description) -////response MUST include "errno", "errmsg" members; if an upload is approved, -////a "URL" MUST be returned in the response. The description string -////should include a brief description of the file. -//// -////The client should upload the file via HTTP PUT to the provided -////URL. The provided URL may be absolute or relative, if relative it must -////be combined with the base URL of the XML-RPC server using the usual -////rules for relative URL's (RFC 3986). -// xmlrpc_client_call2(&env, client, server_info, "catcut.addAttachment", param, &result); -// throw_if_xml_fault_occurred(); -// } -// } -//} +string +ctx::request_upload(const char* auth_cookie, const char* pTicketName, + const char* fileName, const char* description) +{ + xmlrpc_env env; + xmlrpc_env_init(&env); + + xmlrpc_value* param = xmlrpc_build_value(&env, "(ssss)", + auth_cookie, + pTicketName, + fileName, + description); + throw_if_xml_fault_occurred(&env); + + xmlrpc_value* result = NULL; + xmlrpc_client_call2(&env, m_pClient, m_pServer_info, "Catcut.requestUpload", param, &result); + xmlrpc_DECREF(param); + throw_if_xml_fault_occurred(&env); + + string URL; + bool has_URL = struct_find_string(&env, result, "uri", URL); + if (!has_URL || URL == "") + { + int err; + bool has_errno = struct_find_int(&env, result, "errno", err); + if (has_errno && err) + { + string errmsg; + bool has_errmsg = struct_find_string(&env, result, "errmsg", errmsg); + if (has_errmsg) + { + log("error returned by requestUpload: %s", errmsg.c_str()); + update_client(_("error returned by requestUpload: %s"), errmsg.c_str()); + } + else + { + log("error returned by requestUpload: %d", err); + update_client(_("error returned by requestUpload: %d"), err); + } + } + else + { + log("no URL returned by requestUpload, and no err"); + update_client(_("no URL returned by requestUpload, and no errno")); + } + } + + log("requestUpload returned URL: %s", URL.c_str()); + update_client(_("requestUpload returned URL: %s"), URL.c_str()); + + xmlrpc_DECREF(result); + return URL; +} + +void +ctx::add_attachments(const char* xmlrpc_URL, + const char* auth_cookie, + const char* pTicketName, + const map_crash_report_t& pCrashReport, + int retryCount, + int retryDelaySeconds) +{ + + map_crash_report_t::const_iterator it = pCrashReport.begin(); + for (; it != pCrashReport.end(); it++) + { + if (it->second[CD_TYPE] == CD_ATT) + { + update_client(_("Attaching (CD_ATT): %s"), it->first.c_str()); + + string description = "File: " + it->first; + string URL = request_upload(auth_cookie, + pTicketName, + it->first.c_str(), + description.c_str()); + + URL = resolve_relative_url(URL.c_str(), xmlrpc_URL); + + log("rebased URL: %s", URL.c_str()); + update_client(_("rebased URL: %s"), URL.c_str()); + + send_string(URL.c_str(), it->second[CD_CONTENT].c_str(), + retryCount, retryDelaySeconds); + } + else if (it->second[CD_TYPE] == CD_BIN) + { + update_client(_("Attaching (CD_ATT): %s"), it->first.c_str()); + + string description = "File: " + it->first; + string URL = request_upload(auth_cookie, + pTicketName, + it->first.c_str(), + description.c_str()); + + URL = resolve_relative_url(URL.c_str(), xmlrpc_URL); + + log("rebased URL: %s", URL.c_str()); + update_client(_("rebased URL: %s"), URL.c_str()); + + send_file(URL.c_str(), it->second[CD_CONTENT].c_str(), + retryCount, retryDelaySeconds); + } + } +} + +} /* namespace */ + + +/* + * CReporterCatcut + */ CReporterCatcut::CReporterCatcut() : m_sCatcutURL("http://127.0.0.1:8080/catcut/xmlrpc"), - m_bNoSSLVerify(false) + m_bNoSSLVerify(false), + m_nRetryCount(3), + m_nRetryDelay(20) {} CReporterCatcut::~CReporterCatcut() {} string CReporterCatcut::Report(const map_crash_report_t& pCrashReport, - const map_plugin_settings_t& pSettings, const string& pArgs) + const map_plugin_settings_t& pSettings, + const string& pArgs) { update_client(_("Creating new bug...")); try { - new_xmlrpc_client(m_sCatcutURL.c_str(), m_bNoSSLVerify); - string auth_cookie = login(m_sLogin.c_str(), m_sPassword.c_str()); - string bug_id = (auth_cookie != "") ? new_bug(auth_cookie.c_str(), pCrashReport) : ""; -// add_attachments(to_string(bug_id), pCrashReport); -// update_client(_("Logging out...")); -// logout(); - destroy_xmlrpc_client(); - return "New catcut bug ID: " + bug_id; + ctx catcut_server(m_sCatcutURL.c_str(), m_bNoSSLVerify); + string auth_cookie = catcut_server.login(m_sLogin.c_str(), m_sPassword.c_str()); + string message; + if (auth_cookie != "") + { + string ticket_name = catcut_server.new_bug(auth_cookie.c_str(), pCrashReport); + if (ticket_name != "") + { + catcut_server.add_attachments( + m_sCatcutURL.c_str(), + auth_cookie.c_str(), + ticket_name.c_str(), + pCrashReport, + m_nRetryCount, + m_nRetryDelay + ); + message = "New catcut bug ID: " + ticket_name; + } + else + { + message = "Error could not create ticket"; + } + } + else + { + message = "Error could not create ticket"; + } + return message; } catch (CABRTException& e) { - destroy_xmlrpc_client(); - throw CABRTException(EXCEP_PLUGIN, string("CReporterCatcut::Report(): ") + e.what()); + throw CABRTException(EXCEP_PLUGIN, e.what()); } } void CReporterCatcut::SetSettings(const map_plugin_settings_t& pSettings) { - map_plugin_settings_t::const_iterator it; - map_plugin_settings_t::const_iterator end = pSettings.end(); + m_pSettings = pSettings; + map_plugin_settings_t::const_iterator end = pSettings.end(); + map_plugin_settings_t::const_iterator it; it = pSettings.find("CatcutURL"); if (it != end) { @@ -344,18 +555,18 @@ void CReporterCatcut::SetSettings(const map_plugin_settings_t& pSettings) it = pSettings.find("NoSSLVerify"); if (it != end) { - m_bNoSSLVerify = it->second == "yes"; + m_bNoSSLVerify = string_to_bool(it->second.c_str()); + } + it = pSettings.find("RetryCount"); + if (it != end) + { + m_nRetryCount = atoi(it->second.c_str()); + } + it = pSettings.find("RetryDelay"); + if (it != end) + { + m_nRetryDelay = atoi(it->second.c_str()); } -} - -const map_plugin_settings_t& CReporterCatcut::GetSettings() -{ - m_pSettings["CatcutURL"] = m_sCatcutURL; - m_pSettings["Login"] = m_sLogin; - m_pSettings["Password"] = m_sPassword; - m_pSettings["NoSSLVerify"] = m_bNoSSLVerify ? "yes" : "no"; - - return m_pSettings; } PLUGIN_INFO(REPORTER, diff --git a/lib/Plugins/Catcut.h b/lib/Plugins/Catcut.h index 15efdc1d..4fb89e22 100644 --- a/lib/Plugins/Catcut.h +++ b/lib/Plugins/Catcut.h @@ -11,13 +11,14 @@ class CReporterCatcut : public CReporter std::string m_sLogin; std::string m_sPassword; bool m_bNoSSLVerify; + int m_nRetryCount; + int m_nRetryDelay; public: CReporterCatcut(); virtual ~CReporterCatcut(); virtual void SetSettings(const map_plugin_settings_t& pSettings); - virtual const map_plugin_settings_t& GetSettings(); virtual std::string Report(const map_crash_report_t& pCrashReport, const map_plugin_settings_t& pSettings, diff --git a/lib/Plugins/FileTransfer.cpp b/lib/Plugins/FileTransfer.cpp index 72b3b16e..868f54dd 100644 --- a/lib/Plugins/FileTransfer.cpp +++ b/lib/Plugins/FileTransfer.cpp @@ -370,8 +370,11 @@ void CFileTransfer::Run(const char *pActionDir, const char *pArgs) void CFileTransfer::SetSettings(const map_plugin_settings_t& pSettings) { + m_pSettings = pSettings; + map_plugin_settings_t::const_iterator end = pSettings.end(); - map_plugin_settings_t::const_iterator it = pSettings.find("URL"); + map_plugin_settings_t::const_iterator it; + it = pSettings.find("URL"); if (it != end) { m_sURL = it->second; @@ -405,15 +408,16 @@ void CFileTransfer::SetSettings(const map_plugin_settings_t& pSettings) } } -const map_plugin_settings_t& CFileTransfer::GetSettings() -{ - m_pSettings["URL"] = m_sURL; - m_pSettings["RetryCount"] = to_string(m_nRetryCount); - m_pSettings["RetryDelay"] = to_string(m_nRetryDelay); - m_pSettings["ArchiveType"] = m_sArchiveType; - - return m_pSettings; -} +//ok to delete? +//const map_plugin_settings_t& CFileTransfer::GetSettings() +//{ +// m_pSettings["URL"] = m_sURL; +// m_pSettings["RetryCount"] = to_string(m_nRetryCount); +// m_pSettings["RetryDelay"] = to_string(m_nRetryDelay); +// m_pSettings["ArchiveType"] = m_sArchiveType; +// +// return m_pSettings; +//} PLUGIN_INFO(ACTION, CFileTransfer, diff --git a/lib/Plugins/FileTransfer.h b/lib/Plugins/FileTransfer.h index 9caa2567..91207f49 100644 --- a/lib/Plugins/FileTransfer.h +++ b/lib/Plugins/FileTransfer.h @@ -41,7 +41,8 @@ class CFileTransfer : public CAction public: CFileTransfer(); virtual void SetSettings(const map_plugin_settings_t& pSettings); - virtual const map_plugin_settings_t& GetSettings(); +//ok to delete? +// virtual const map_plugin_settings_t& GetSettings(); virtual void Run(const char *pActionDir, const char *pArgs); }; diff --git a/lib/Plugins/KerneloopsReporter.cpp b/lib/Plugins/KerneloopsReporter.cpp index cfb4e050..f7a6cbb8 100644 --- a/lib/Plugins/KerneloopsReporter.cpp +++ b/lib/Plugins/KerneloopsReporter.cpp @@ -118,18 +118,23 @@ std::string CKerneloopsReporter::Report(const map_crash_report_t& pCrashReport, void CKerneloopsReporter::SetSettings(const map_plugin_settings_t& pSettings) { - map_plugin_settings_t::const_iterator it = pSettings.find("SubmitURL"); - if (it != pSettings.end()) { + m_pSettings = pSettings; + + map_plugin_settings_t::const_iterator end = pSettings.end(); + map_plugin_settings_t::const_iterator it; + it = pSettings.find("SubmitURL"); + if (it != end) { m_sSubmitURL = it->second; } } -const map_plugin_settings_t& CKerneloopsReporter::GetSettings() -{ - m_pSettings["SubmitURL"] = m_sSubmitURL; - - return m_pSettings; -} +//ok to delete? +//const map_plugin_settings_t& CKerneloopsReporter::GetSettings() +//{ +// m_pSettings["SubmitURL"] = m_sSubmitURL; +// +// return m_pSettings; +//} PLUGIN_INFO(REPORTER, CKerneloopsReporter, diff --git a/lib/Plugins/KerneloopsReporter.h b/lib/Plugins/KerneloopsReporter.h index 7f6ab8cc..af82afbe 100644 --- a/lib/Plugins/KerneloopsReporter.h +++ b/lib/Plugins/KerneloopsReporter.h @@ -41,7 +41,8 @@ class CKerneloopsReporter : public CReporter CKerneloopsReporter(); virtual void SetSettings(const map_plugin_settings_t& pSettings); - virtual const map_plugin_settings_t& GetSettings(); +//ok to delete? +// virtual const map_plugin_settings_t& GetSettings(); virtual std::string Report(const map_crash_report_t& pCrashReport, const map_plugin_settings_t& pSettings, const std::string& pArgs); diff --git a/lib/Plugins/KerneloopsSysLog.cpp b/lib/Plugins/KerneloopsSysLog.cpp index d28ce399..cb15fccb 100644 --- a/lib/Plugins/KerneloopsSysLog.cpp +++ b/lib/Plugins/KerneloopsSysLog.cpp @@ -75,7 +75,6 @@ struct line_info { int extract_oopses(vector_string_t &oopses, char *buffer, size_t buflen) { char *c; - enum { maybe, no, yes } syslog_format = maybe; int linecount = 0; int lines_info_alloc = 0; struct line_info *lines_info = NULL; @@ -86,86 +85,73 @@ int extract_oopses(vector_string_t &oopses, char *buffer, size_t buflen) buffer[buflen - 1] = '\n'; /* the buffer usually ends with \n, but let's make sure */ c = buffer; while (c < buffer + buflen) { - char v, linelevel; - int len = 0; + char linelevel; char *c9; char *linepointer; c9 = (char*)memchr(c, '\n', buffer + buflen - c); /* a \n will always be found */ assert(c9); - len = c9 - c; + *c9 = '\0'; /* turn the \n into a string termination */ + if (c9 == c) + goto next_line; /* in /var/log/messages, we need to strip the first part off, upto the 3rd ':' */ - if (syslog_format == yes - || (syslog_format == maybe - && len > sizeof("Jul 4 11:11:41") - && c[3] == ' ' && c[6] == ' ' && c[9] == ':' && c[12] == ':' - && (v = (c[5] | c[7]|c[8] | c[10]|c[11] | c[13]|c[14])) <= '9' - && v >= '0' - && (v = (c[5] & c[7]&c[8] & c[10]&c[11] & c[13]&c[14])) <= '9' - && v >= '0' - ) + /* 01234567890123456 */ + if ((c9 - c) > sizeof("Jul 4 11:11:11 ") + && c[3] == ' ' + && (c[4] == ' ' || isdigit(c[4])) + && isdigit(c[5]) + && c[6] == ' ' + && isdigit(c[7]) + && isdigit(c[8]) + && c[9] == ':' + && isdigit(c[10]) + && isdigit(c[11]) + && c[12] == ':' + && isdigit(c[13]) + && isdigit(c[14]) + && c[15] == ' ' ) { /* It's syslog file, not a bare dmesg */ - syslog_format = yes; - - char *c2; - int i; - /* skip non-kernel lines */ - c2 = (char*)memmem(c, len, "kernel:", 7); - if (!c2) - c2 = (char*)memmem(c, len, "abrt:", 5); - if (!c2) + /* Skip over timestamp */ + c += 16; + + /* Skip non-kernel lines */ + char *kernel_str = strstr(c, "kernel: "); + if (kernel_str == NULL) { + /* if we see our own marker: + * "hostname abrt: Kerneloops: Reported 1 kernel oopses to Abrt" + * we know we submitted everything upto here already */ + if (strstr(c, "abrt:") && strstr(c, "Abrt")) { + linecount = 0; + lines_info_alloc = 0; + free(lines_info); + lines_info = NULL; + } goto next_line; - - /* skip to message in "Jan 01 01:23:45 hostname kernel: message" */ - for (i = 0; i < 3; i++) { - c = (char*)memchr(c, ':', len); - if (!c) - goto next_line; - c++; - len = c9 - c; } - c++; - len--; - } else if (len) { - syslog_format = no; + c = kernel_str + sizeof("kernel: ")-1; } - linepointer = c; linelevel = 0; /* store and remove kernel log level */ - if (len >= 3 && *c == '<' && *(c+2) == '>') { - linelevel = *(c+1); + if (*c == '<' && c[1] && c[2] == '>') { + linelevel = c[1]; c += 3; - len -= 3; - linepointer = c; } /* remove jiffies time stamp counter if present */ if (*c == '[') { char *c2, *c3; - c2 = (char*)memchr(c, '.', len); - c3 = (char*)memchr(c, ']', len); + c2 = strchr(c, '.'); + c3 = strchr(c, ']'); if (c2 && c3 && (c2 < c3) && (c3-c) < 14 && (c2-c) < 8) { c = c3 + 1; if (*c == ' ') c++; - len = c9 - c; - linepointer = c; } } - - assert(c + len == c9); - *c9 = '\0'; /* turn the \n into a string termination */ - - /* if we see our own marker, we know we submitted everything upto here already */ - if (len >= 4 && memmem(linepointer, len, "Abrt", 4)) { - linecount = 0; - lines_info_alloc = 0; - free(lines_info); - lines_info = NULL; - } + linepointer = c; if (linecount >= lines_info_alloc) { lines_info_alloc += REALLOC_CHUNK; diff --git a/lib/Plugins/Logger.cpp b/lib/Plugins/Logger.cpp index b2ac1ade..6babc732 100644 --- a/lib/Plugins/Logger.cpp +++ b/lib/Plugins/Logger.cpp @@ -19,9 +19,10 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "Logger.h" #include <fstream> #include <sstream> +#include "abrtlib.h" +#include "Logger.h" #include "DebugDump.h" #include "CommLayerInner.h" #include "ABRTException.h" @@ -33,23 +34,30 @@ CLogger::CLogger() : void CLogger::SetSettings(const map_plugin_settings_t& pSettings) { - if (pSettings.find("LogPath") != pSettings.end()) + m_pSettings = pSettings; + + map_plugin_settings_t::const_iterator end = pSettings.end(); + map_plugin_settings_t::const_iterator it; + it = pSettings.find("LogPath"); + if (it != end) { - m_sLogPath = pSettings.find("LogPath")->second; + m_sLogPath = it->second; } - if (pSettings.find("AppendLogs") != pSettings.end()) + it = pSettings.find("AppendLogs"); + if (it != end) { - m_bAppendLogs = pSettings.find("AppendLogs")->second == "yes"; + m_bAppendLogs = string_to_bool(it->second.c_str()); } } -const map_plugin_settings_t& CLogger::GetSettings() -{ - m_pSettings["LogPath"] = m_sLogPath; - m_pSettings["AppendLogs"] = m_bAppendLogs ? "yes" : "no"; - - return m_pSettings; -} +//ok to delete? +//const map_plugin_settings_t& CLogger::GetSettings() +//{ +// m_pSettings["LogPath"] = m_sLogPath; +// m_pSettings["AppendLogs"] = m_bAppendLogs ? "yes" : "no"; +// +// return m_pSettings; +//} std::string CLogger::Report(const map_crash_report_t& pCrashReport, const map_plugin_settings_t& pSettings, const std::string& pArgs) diff --git a/lib/Plugins/Logger.h b/lib/Plugins/Logger.h index 0969bea6..285e25ba 100644 --- a/lib/Plugins/Logger.h +++ b/lib/Plugins/Logger.h @@ -35,7 +35,8 @@ class CLogger : public CReporter CLogger(); virtual void SetSettings(const map_plugin_settings_t& pSettings); - virtual const map_plugin_settings_t& GetSettings(); +//ok to delete? +// virtual const map_plugin_settings_t& GetSettings(); virtual std::string Report(const map_crash_report_t& pCrashReport, const map_plugin_settings_t& pSettings, const std::string& pArgs); diff --git a/lib/Plugins/Mailx.cpp b/lib/Plugins/Mailx.cpp index f0834049..1979f9e8 100644 --- a/lib/Plugins/Mailx.cpp +++ b/lib/Plugins/Mailx.cpp @@ -201,33 +201,42 @@ std::string CMailx::Report(const map_crash_report_t& pCrashReport, void CMailx::SetSettings(const map_plugin_settings_t& pSettings) { - if (pSettings.find("Subject") != pSettings.end()) + m_pSettings = pSettings; + + map_plugin_settings_t::const_iterator end = pSettings.end(); + map_plugin_settings_t::const_iterator it; + it = pSettings.find("Subject"); + if (it != end) { - m_sSubject = pSettings.find("Subject")->second; + m_sSubject = it->second; } - if (pSettings.find("EmailFrom") != pSettings.end()) + it = pSettings.find("EmailFrom"); + if (it != end) { - m_sEmailFrom = pSettings.find("EmailFrom")->second; + m_sEmailFrom = it->second; } - if (pSettings.find("EmailTo") != pSettings.end()) + it = pSettings.find("EmailTo"); + if (it != end) { - m_sEmailTo = pSettings.find("EmailTo")->second; + m_sEmailTo = it->second; } - if (pSettings.find("SendBinaryData") != pSettings.end()) + it = pSettings.find("SendBinaryData"); + if (it != end) { - m_bSendBinaryData = pSettings.find("SendBinaryData")->second == "yes"; + m_bSendBinaryData = string_to_bool(it->second.c_str()); } } -const map_plugin_settings_t& CMailx::GetSettings() -{ - m_pSettings["Subject"] = m_sSubject; - m_pSettings["EmailFrom"] = m_sEmailFrom; - m_pSettings["EmailTo"] = m_sEmailTo; - m_pSettings["SendBinaryData"] = m_bSendBinaryData ? "yes" : "no"; - - return m_pSettings; -} +//ok to delete? +//const map_plugin_settings_t& CMailx::GetSettings() +//{ +// m_pSettings["Subject"] = m_sSubject; +// m_pSettings["EmailFrom"] = m_sEmailFrom; +// m_pSettings["EmailTo"] = m_sEmailTo; +// m_pSettings["SendBinaryData"] = m_bSendBinaryData ? "yes" : "no"; +// +// return m_pSettings; +//} PLUGIN_INFO(REPORTER, CMailx, diff --git a/lib/Plugins/Mailx.h b/lib/Plugins/Mailx.h index 7af11885..4aa861f1 100644 --- a/lib/Plugins/Mailx.h +++ b/lib/Plugins/Mailx.h @@ -47,7 +47,8 @@ class CMailx : public CReporter CMailx(); virtual void SetSettings(const map_plugin_settings_t& pSettings); - virtual const map_plugin_settings_t& GetSettings(); +//ok to delete? +// virtual const map_plugin_settings_t& GetSettings(); virtual std::string Report(const map_crash_report_t& pCrashReport, const map_plugin_settings_t& pSettings, const std::string& pArgs); diff --git a/lib/Plugins/RunApp.cpp b/lib/Plugins/RunApp.cpp index f816dc23..e525d89c 100644 --- a/lib/Plugins/RunApp.cpp +++ b/lib/Plugins/RunApp.cpp @@ -25,40 +25,11 @@ #include "DebugDump.h" #include "ABRTException.h" #include "CommLayerInner.h" +#include "abrtlib.h" #define COMMAND 0 #define FILENAME 1 -/* TODO: do not duplicate: SOSreport.cpp has same function too */ -static void ParseArgs(const char *psArgs, vector_string_t& pArgs) -{ - unsigned ii; - bool is_quote = false; - std::string item; - - for (ii = 0; psArgs[ii]; ii++) - { - if (psArgs[ii] == '"') - { - is_quote = !is_quote; - } - else if (psArgs[ii] == ',' && !is_quote) - { - pArgs.push_back(item); - item.clear(); - } - else - { - item += psArgs[ii]; - } - } - - if (item.size() != 0) - { - pArgs.push_back(item); - } -} - void CActionRunApp::Run(const char *pActionDir, const char *pArgs) { update_client(_("Executing RunApp plugin...")); @@ -66,7 +37,7 @@ void CActionRunApp::Run(const char *pActionDir, const char *pArgs) std::string output; vector_string_t args; - ParseArgs(pArgs, args); + parse_args(pArgs, args, '"'); FILE *fp = popen(args[COMMAND].c_str(), "r"); if (fp == NULL) diff --git a/lib/Plugins/SOSreport.cpp b/lib/Plugins/SOSreport.cpp index fedc51ab..287c01e9 100644 --- a/lib/Plugins/SOSreport.cpp +++ b/lib/Plugins/SOSreport.cpp @@ -18,7 +18,6 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include <ext/stdio_filebuf.h> #include <fstream> #include <sstream> #include "abrtlib.h" @@ -56,7 +55,7 @@ static std::string ParseFilename(const std::string& pOutput) int filename_start = pOutput.find_first_not_of(" \n\t", p); ErrorCheck(p); - int line_end = pOutput.find_first_of('\n',filename_start); + int line_end = pOutput.find_first_of('\n', filename_start); ErrorCheck(p); int filename_end = pOutput.find_last_not_of(" \n\t", line_end); @@ -65,36 +64,6 @@ static std::string ParseFilename(const std::string& pOutput) return pOutput.substr(filename_start, filename_end - filename_start + 1); } -/* TODO: do not duplicate: RunApp.cpp has same function too */ -static void ParseArgs(const char *psArgs, vector_string_t& pArgs) -{ - unsigned ii; - bool is_quote = false; - std::string item; - - for (ii = 0; psArgs[ii]; ii++) - { - if (psArgs[ii] == '"') - { - is_quote = !is_quote; - } - else if (psArgs[ii] == ',' && !is_quote) - { - pArgs.push_back(item); - item.clear(); - } - else - { - item += psArgs[ii]; - } - } - - if (item.size() != 0) - { - pArgs.push_back(item); - } -} - void CActionSOSreport::Run(const char *pActionDir, const char *pArgs) { update_client(_("Executing SOSreport plugin...")); @@ -108,7 +77,7 @@ void CActionSOSreport::Run(const char *pActionDir, const char *pArgs) std::string command; vector_string_t args; - ParseArgs(pArgs, args); + parse_args(pArgs, args, '"'); if (args.size() == 0 || args[0] == "") { @@ -120,24 +89,11 @@ void CActionSOSreport::Run(const char *pActionDir, const char *pArgs) } update_client(_("running sosreport: %s"), command.c_str()); - FILE *fp = popen(command.c_str(), "r"); - if (fp == NULL) - { - throw CABRTException(EXCEP_PLUGIN, ssprintf("Can't execute '%s'", command.c_str())); - } - -//vda TODO: fix this mess - std::ostringstream output_stream; - __gnu_cxx::stdio_filebuf<char> command_output_buffer(fp, std::ios_base::in); - - output_stream << command << std::endl; - output_stream << &command_output_buffer; - - pclose(fp); + std::string output = command; + output += '\n'; + output += popen_and_save_output(command.c_str()); update_client(_("done running sosreport")); - std::string output = output_stream.str(); - std::string sosreport_filename = ParseFilename(output); std::string sosreport_dd_filename = concat_path_file(pActionDir, "sosreport.tar.bz2"); diff --git a/lib/Plugins/SQLite3.cpp b/lib/Plugins/SQLite3.cpp index ab39d040..3aad0545 100644 --- a/lib/Plugins/SQLite3.cpp +++ b/lib/Plugins/SQLite3.cpp @@ -398,18 +398,24 @@ database_row_t CSQLite3::GetUUIDData(const std::string& pUUID, const std::string void CSQLite3::SetSettings(const map_plugin_settings_t& pSettings) { - if (pSettings.find("DBPath") != pSettings.end()) + m_pSettings = pSettings; + + map_plugin_settings_t::const_iterator end = pSettings.end(); + map_plugin_settings_t::const_iterator it; + it = pSettings.find("DBPath"); + if (it != end) { - m_sDBPath = pSettings.find("DBPath")->second; + m_sDBPath = it->second; } } -const map_plugin_settings_t& CSQLite3::GetSettings() -{ - m_pSettings["DBPath"] = m_sDBPath; - - return m_pSettings; -} +//ok to delete? +//const map_plugin_settings_t& CSQLite3::GetSettings() +//{ +// m_pSettings["DBPath"] = m_sDBPath; +// +// return m_pSettings; +//} PLUGIN_INFO(DATABASE, CSQLite3, diff --git a/lib/Plugins/SQLite3.h b/lib/Plugins/SQLite3.h index 0eb3d086..fc13bd73 100644 --- a/lib/Plugins/SQLite3.h +++ b/lib/Plugins/SQLite3.h @@ -58,7 +58,8 @@ class CSQLite3 : public CDatabase virtual database_row_t GetUUIDData(const std::string& pUUID, const std::string& pUID); virtual void SetSettings(const map_plugin_settings_t& pSettings); - virtual const map_plugin_settings_t& GetSettings(); +//ok to delete? +// virtual const map_plugin_settings_t& GetSettings(); }; #endif /* SQLITE3_H_ */ diff --git a/lib/Plugins/TicketUploader.cpp b/lib/Plugins/TicketUploader.cpp index e380de09..76bda400 100644 --- a/lib/Plugins/TicketUploader.cpp +++ b/lib/Plugins/TicketUploader.cpp @@ -341,9 +341,10 @@ string CTicketUploader::Report(const map_crash_report_t& pCrashReport, void CTicketUploader::SetSettings(const map_plugin_settings_t& pSettings) { + m_pSettings = pSettings; + map_plugin_settings_t::const_iterator end = pSettings.end(); map_plugin_settings_t::const_iterator it; - it = pSettings.find("Customer"); if (it != end) { @@ -362,12 +363,12 @@ void CTicketUploader::SetSettings(const map_plugin_settings_t& pSettings) it = pSettings.find("Encrypt"); if (it != end) { - m_bEncrypt = it->second == "yes"; + m_bEncrypt = string_to_bool(it->second.c_str()); } it = pSettings.find("Upload"); if (it != end) { - m_bUpload = it->second == "yes"; + m_bUpload = string_to_bool(it->second.c_str()); } it = pSettings.find("RetryCount"); if (it != end) @@ -381,18 +382,19 @@ void CTicketUploader::SetSettings(const map_plugin_settings_t& pSettings) } } -const map_plugin_settings_t& CTicketUploader::GetSettings() -{ - m_pSettings["Customer"] = m_sCustomer; - m_pSettings["Ticket"] = m_sTicket; - m_pSettings["URL"] = m_sURL; - m_pSettings["Encrypt"] = m_bEncrypt ? "yes" : "no"; - m_pSettings["Upload"] = m_bEncrypt ? "yes" : "no"; - m_pSettings["RetryCount"] = to_string(m_nRetryCount); - m_pSettings["RetryDelay"] = to_string(m_nRetryDelay); - - return m_pSettings; -} +//ok to delete? +//const map_plugin_settings_t& CTicketUploader::GetSettings() +//{ +// m_pSettings["Customer"] = m_sCustomer; +// m_pSettings["Ticket"] = m_sTicket; +// m_pSettings["URL"] = m_sURL; +// m_pSettings["Encrypt"] = m_bEncrypt ? "yes" : "no"; +// m_pSettings["Upload"] = m_bEncrypt ? "yes" : "no"; +// m_pSettings["RetryCount"] = to_string(m_nRetryCount); +// m_pSettings["RetryDelay"] = to_string(m_nRetryDelay); +// +// return m_pSettings; +//} PLUGIN_INFO(REPORTER, CTicketUploader, diff --git a/lib/Plugins/TicketUploader.h b/lib/Plugins/TicketUploader.h index 9ae3478f..2a7c98af 100644 --- a/lib/Plugins/TicketUploader.h +++ b/lib/Plugins/TicketUploader.h @@ -45,7 +45,8 @@ class CTicketUploader : public CReporter public: CTicketUploader(); virtual ~CTicketUploader(); - virtual const map_plugin_settings_t& GetSettings(); +//ok to delete? +// virtual const map_plugin_settings_t& GetSettings(); virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual std::string Report(const map_crash_report_t& pCrashReport, diff --git a/lib/Utils/DebugDump.cpp b/lib/Utils/DebugDump.cpp index bf793bbf..ba11d965 100644 --- a/lib/Utils/DebugDump.cpp +++ b/lib/Utils/DebugDump.cpp @@ -289,6 +289,13 @@ static void DeleteFileDir(const char *pDir) static bool IsTextFile(const char *name) { + /* Some files in our dump directories are known to always be textual */ + if (strcmp(name, "backtrace") == 0 + || strcmp(name, "cmdline") == 0 + ) { + return true; + } + /* This idiotic library thinks that file containing just "0" is not text (!!) magic_t m = magic_open(MAGIC_MIME_TYPE); @@ -328,15 +335,22 @@ static bool IsTextFile(const char *name) int r = full_read(fd, buf, sizeof(buf)); close(fd); + /* Every once in a while, even a text file contains a few garbled + * or unexpected non-ASCII chars. We should not declare it "binary". + */ + const unsigned RATIO = 50; + unsigned total_chars = r + RATIO; + unsigned bad_chars = 1; /* 1 prevents division by 0 later */ while (--r >= 0) { - if (buf[r] >= 0x7f) - return false; - /* Among control chars, only '\t','\n' etc are allowed */ - if (buf[r] < ' ' && !isspace(buf[r])) - return false; + if (buf[r] >= 0x7f + /* among control chars, only '\t','\n' etc are allowed */ + || (buf[r] < ' ' && !isspace(buf[r])) + ) { + bad_chars++; + } } - return true; + return (total_chars / bad_chars) >= RATIO; } void CDebugDump::Delete() @@ -471,7 +485,7 @@ bool CDebugDump::GetNextFile(std::string& pFileName, std::string& pContent, bool { if (is_regular_file(dent, m_sDebugDumpDir.c_str())) { - std::string fullname = m_sDebugDumpDir + '/' + dent->d_name; + std::string fullname = concat_path_file(m_sDebugDumpDir.c_str(), dent->d_name); pFileName = dent->d_name; if (IsTextFile(fullname.c_str())) diff --git a/lib/Utils/Makefile.am b/lib/Utils/Makefile.am index 68c925fd..f752992d 100644 --- a/lib/Utils/Makefile.am +++ b/lib/Utils/Makefile.am @@ -5,16 +5,20 @@ lib_LTLIBRARIES = libABRTUtils.la # xconnect.cpp libABRTUtils_la_SOURCES = \ + stringops.cpp \ xfuncs.cpp \ encbase64.cpp \ read_write.cpp \ logging.cpp \ copyfd.cpp \ skip_whitespace.cpp \ + popen_and_save_output.cpp \ + parse_release.cpp \ CrashTypesSocket.cpp \ DebugDump.h DebugDump.cpp \ CommLayerInner.h CommLayerInner.cpp \ abrt_dbus.h abrt_dbus.cpp \ + abrt_xmlrpc.h abrt_xmlrpc.cpp \ Plugin.h Plugin.cpp make_descr.cpp \ Polkit.h Polkit.cpp \ Action.h Database.h Reporter.h Analyzer.h \ @@ -30,6 +34,7 @@ libABRTUtils_la_CPPFLAGS = \ -DVAR_RUN=\"$(VAR_RUN)\" \ $(GLIB_CFLAGS) \ $(DBUS_CFLAGS) \ + $(XMLRPC_CFLAGS) $(XMLRPC_CLIENT_CFLAGS) \ $(POLKIT_CFLAGS) \ -D_GNU_SOURCE libABRTUtils_la_LDFLAGS = \ @@ -37,8 +42,10 @@ libABRTUtils_la_LDFLAGS = \ $(DL_LIBS) \ $(DBUS_LIBS) libABRTUtils_la_LIBADD = \ + $(XMLRPC_LIBS) $(XMLRPC_CLIENT_LIBS) \ $(POLKIT_LIBS) + install-data-local: $(mkdir_p) '$(DESTDIR)/$(DEBUG_DUMPS_DIR)' chmod 1777 '$(DESTDIR)/$(DEBUG_DUMPS_DIR)' diff --git a/lib/Utils/abrt_xmlrpc.cpp b/lib/Utils/abrt_xmlrpc.cpp new file mode 100644 index 00000000..11c431b8 --- /dev/null +++ b/lib/Utils/abrt_xmlrpc.cpp @@ -0,0 +1,76 @@ +#if HAVE_CONFIG_H +# include "config.h" +#endif +#include "abrtlib.h" +#include "abrt_xmlrpc.h" +#include "ABRTException.h" + +void throw_if_xml_fault_occurred(xmlrpc_env *env) +{ + if (env->fault_occurred) + { + std::string errmsg = ssprintf("XML-RPC Fault: %s(%d)", env->fault_string, env->fault_code); + xmlrpc_env_clean(env); // this is needed ONLY if fault_occurred + xmlrpc_env_init(env); // just in case user catches ex and _continues_ to use env + error_msg("%s", errmsg.c_str()); // show error in daemon log + throw CABRTException(EXCEP_PLUGIN, errmsg); + } +} + +void abrt_xmlrpc_conn::new_xmlrpc_client(const char* url, bool no_ssl_verify) +{ + m_pClient = NULL; + m_pServer_info = NULL; + + xmlrpc_env env; + xmlrpc_env_init(&env); + + /* This should be done at program startup, once. + * We do it in abrtd's main */ + /* xmlrpc_client_setup_global_const(&env); */ + + struct xmlrpc_curl_xportparms curlParms; + memset(&curlParms, 0, sizeof(curlParms)); + /* curlParms.network_interface = NULL; - done by memset */ + curlParms.no_ssl_verifypeer = no_ssl_verify; + curlParms.no_ssl_verifyhost = no_ssl_verify; +#ifdef VERSION + curlParms.user_agent = PACKAGE_NAME"/"VERSION; +#else + curlParms.user_agent = "abrt"; +#endif + + struct xmlrpc_clientparms clientParms; + memset(&clientParms, 0, sizeof(clientParms)); + clientParms.transport = "curl"; + clientParms.transportparmsP = &curlParms; + clientParms.transportparm_size = XMLRPC_CXPSIZE(user_agent); + + xmlrpc_client_create(&env, XMLRPC_CLIENT_NO_FLAGS, + PACKAGE_NAME, VERSION, + &clientParms, XMLRPC_CPSIZE(transportparm_size), + &m_pClient); + throw_if_xml_fault_occurred(&env); + + m_pServer_info = xmlrpc_server_info_new(&env, url); + if (env.fault_occurred) + { + xmlrpc_client_destroy(m_pClient); + m_pClient = NULL; + } + throw_if_xml_fault_occurred(&env); +} + +void abrt_xmlrpc_conn::destroy_xmlrpc_client() +{ + if (m_pServer_info) + { + xmlrpc_server_info_free(m_pServer_info); + m_pServer_info = NULL; + } + if (m_pClient) + { + xmlrpc_client_destroy(m_pClient); + m_pClient = NULL; + } +} diff --git a/lib/Utils/abrt_xmlrpc.h b/lib/Utils/abrt_xmlrpc.h new file mode 100644 index 00000000..e67ab19a --- /dev/null +++ b/lib/Utils/abrt_xmlrpc.h @@ -0,0 +1,27 @@ +#ifndef ABRT_XMLRPC_H_ +#define ABRT_XMLRPC_H_ 1 + +#include <xmlrpc-c/base.h> +#include <xmlrpc-c/client.h> + +/* + * Simple class holding XMLRPC connection data. + * Used mainly to ensure we always destroy xmlrpc client and server_info + * on return or throw. + */ + +struct abrt_xmlrpc_conn { + xmlrpc_client* m_pClient; + xmlrpc_server_info* m_pServer_info; + + abrt_xmlrpc_conn(const char* url, bool no_ssl_verify) { new_xmlrpc_client(url, no_ssl_verify); } + ~abrt_xmlrpc_conn() { destroy_xmlrpc_client(); } + + void new_xmlrpc_client(const char* url, bool no_ssl_verify); + void destroy_xmlrpc_client(); +}; + +/* Utility function */ +void throw_if_xml_fault_occurred(xmlrpc_env *env); + +#endif diff --git a/lib/Utils/parse_release.cpp b/lib/Utils/parse_release.cpp new file mode 100644 index 00000000..33d3edb1 --- /dev/null +++ b/lib/Utils/parse_release.cpp @@ -0,0 +1,38 @@ +#include "abrtlib.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +using namespace std; + +void parse_release(const char *pRelease, string& pProduct, string& pVersion) +{ + if (strstr(pRelease, "Rawhide")) + { + pProduct = "Fedora"; + pVersion = "rawhide"; + return; + } + if (strstr(pRelease, "Fedora")) + { + pProduct = "Fedora"; + } + else if (strstr(pRelease, "Red Hat Enterprise Linux")) + { + pProduct = "Red Hat Enterprise Linux "; + } + + const char *release = strstr(pRelease, "release"); + const char *space = release ? strchr(release, ' ') : NULL; + + if (space++) while (*space != '\0' && *space != ' ') + { + /* Eat string like "5.2" */ + pVersion += *space; + if (pProduct == "Red Hat Enterprise Linux ") + { + pProduct += *space; + } + space++; + } +} diff --git a/lib/Utils/popen_and_save_output.cpp b/lib/Utils/popen_and_save_output.cpp new file mode 100644 index 00000000..4bcbcac4 --- /dev/null +++ b/lib/Utils/popen_and_save_output.cpp @@ -0,0 +1,30 @@ +/* + * Utility routines. + * + * Licensed under GPLv2 or later, see file COPYING in this tarball for details. + */ +#include "abrtlib.h" + +using namespace std; + +string popen_and_save_output(const char *cmd) +{ + string result; + + FILE *fp = popen(cmd, "r"); + if (fp == NULL) /* fork or pipe failed; or out-of-mem */ + { + return result; + } + + size_t sz; + char buf[BUFSIZ + 1]; + while ((sz = fread(buf, 1, sizeof(buf)-1, fp)) > 0) + { + buf[sz] = '\0'; + result += buf; + } + pclose(fp); + + return result; +} diff --git a/lib/Utils/stringops.cpp b/lib/Utils/stringops.cpp new file mode 100644 index 00000000..1b3793fc --- /dev/null +++ b/lib/Utils/stringops.cpp @@ -0,0 +1,30 @@ +#include "abrtlib.h" + +void parse_args(const char *psArgs, vector_string_t& pArgs, int quote) +{ + unsigned ii; + bool is_quote = false; + std::string item; + + for (ii = 0; psArgs[ii]; ii++) + { + if (quote != -1 && psArgs[ii] == quote) + { + is_quote = !is_quote; + } + else if (psArgs[ii] == ',' && !is_quote) + { + pArgs.push_back(item); + item.clear(); + } + else + { + item += psArgs[ii]; + } + } + + if (item.size() != 0) + { + pArgs.push_back(item); + } +} @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: abrt.master.es\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-11-07 09:49+0000\n" -"PO-Revision-Date: 2009-11-07 09:31-0300\n" +"POT-Creation-Date: 2009-11-10 09:32+0000\n" +"PO-Revision-Date: 2009-11-10 08:31-0300\n" "Last-Translator: Domingo Becker <domingobecker@gmail.com>\n" "Language-Team: Spanish <fedora-trans-es@redhat.com>\n" "MIME-Version: 1.0\n" @@ -102,7 +102,7 @@ msgid "Plugins" msgstr "Complementos" #: ../src/Gui/ccgui.glade.h:10 -#: ../src/Gui/report.glade.h:3 +#: ../src/Gui/report.glade.h:4 msgid "Report" msgstr "Informe" @@ -157,8 +157,8 @@ msgid "Date" msgstr "Fecha" #: ../src/Gui/CCMainWindow.py:91 -msgid "Crash Rate" -msgstr "Tasa de caídas" +msgid "Crash count" +msgstr "Cantidad de caídas" #: ../src/Gui/CCMainWindow.py:93 msgid "User" @@ -223,14 +223,14 @@ msgstr "" msgid "Error getting the report: %s" msgstr "Error al obtener el informe: %s" -#: ../src/Gui/CCReporterDialog.py:173 +#: ../src/Gui/CCReporterDialog.py:177 msgid "Brief description how to reproduce this or what you did..." msgstr "Breve descripción de cómo reproducir esto o lo que hizo..." -#: ../src/Gui/CCReporterDialog.py:201 +#: ../src/Gui/CCReporterDialog.py:219 #, python-format msgid "" -"Reporting disabled because the backtrace is unusable!\n" +"Reporting disabled because the backtrace is unusable.\n" "Please try to install debuginfo manually using command:<span color=\"blue\"> debuginfo-install %s </span>\n" "then use Refresh button to regenerate the backtrace." msgstr "" @@ -239,15 +239,15 @@ msgstr "" "usando el comando <span color=\"blue\"> debuginfo-install %s </span>\n" "y luego use el botón Actualizar para regenerar el trazado." -#: ../src/Gui/CCReporterDialog.py:203 +#: ../src/Gui/CCReporterDialog.py:221 msgid "The bactrace is unusable, you can't report this!" msgstr "¡El trazado es inútil, no puede informar esto!" -#: ../src/Gui/CCReporterDialog.py:209 +#: ../src/Gui/CCReporterDialog.py:227 msgid "The bactrace is incomplete, please make sure you provide good steps to reproduce." msgstr "El trazado está incompleto, por favor, asegúrese de proveer bien los pasos para reproducir el error." -#: ../src/Gui/CCReporterDialog.py:247 +#: ../src/Gui/CCReporterDialog.py:272 #, python-format msgid "" "<b>WARNING</b>, you're about to send data which might contain sensitive information.\n" @@ -289,7 +289,11 @@ msgstr "¡Nada para hidratar!" msgid "Comment" msgstr "Comentario" -#: ../src/Gui/report.glade.h:4 +#: ../src/Gui/report.glade.h:3 +msgid "How to reproduce (in a few simple steps)" +msgstr "Como reproducirlo (en unos pocos y simples pasos)" + +#: ../src/Gui/report.glade.h:5 msgid "Send" msgstr "Enviar" @@ -440,41 +444,41 @@ msgstr "El servicio ABRT no se está ejecutando" msgid "Warning" msgstr "Aviso" -#: ../src/Daemon/Daemon.cpp:531 +#: ../src/Daemon/Daemon.cpp:519 msgid "Report size exceeded the quota. Please check system's MaxCrashReportsSize value in abrt.conf." msgstr "El tamaño del informe excede la cuota. Por favor, verifique el valor de MaxCrashReportsSize del sistema en abrt.conf." -#: ../lib/Plugins/Bugzilla.cpp:316 +#: ../lib/Plugins/Bugzilla.cpp:240 #, c-format msgid "Bug is already reported: %i" msgstr "El error ya ha sido informado: %i" -#: ../lib/Plugins/Bugzilla.cpp:378 +#: ../lib/Plugins/Bugzilla.cpp:302 #, c-format msgid "New bug id: %i" msgstr "Nuevo id del error: %i" -#: ../lib/Plugins/Bugzilla.cpp:471 +#: ../lib/Plugins/Bugzilla.cpp:395 msgid "Checking for duplicates..." msgstr "Chequeando si hay duplicados..." -#: ../lib/Plugins/Bugzilla.cpp:474 +#: ../lib/Plugins/Bugzilla.cpp:398 msgid "Logging into bugzilla..." msgstr "Ingresando a bugzilla..." -#: ../lib/Plugins/Bugzilla.cpp:478 +#: ../lib/Plugins/Bugzilla.cpp:402 msgid "Empty login and password. Please check Bugzilla.conf" msgstr "Usuario y contraseña vacios. Por favor compruebe el archivo Bugzilla.conf" -#: ../lib/Plugins/Bugzilla.cpp:484 +#: ../lib/Plugins/Bugzilla.cpp:408 msgid "Checking CC..." msgstr "Chequeando CC..." -#: ../lib/Plugins/Bugzilla.cpp:493 +#: ../lib/Plugins/Bugzilla.cpp:417 msgid "Creating new bug..." msgstr "Creando un nuevo informe..." -#: ../lib/Plugins/Bugzilla.cpp:497 +#: ../lib/Plugins/Bugzilla.cpp:421 msgid "Logging out..." msgstr "Saliendo..." @@ -482,33 +486,33 @@ msgstr "Saliendo..." msgid "Getting local universal unique identification" msgstr "Obteniendo la identificación única universal local" -#: ../lib/Plugins/CCpp.cpp:228 +#: ../lib/Plugins/CCpp.cpp:254 msgid "Getting backtrace..." msgstr "Obteniendo el backtrace..." -#: ../lib/Plugins/CCpp.cpp:526 -#: ../lib/Plugins/CCpp.cpp:653 +#: ../lib/Plugins/CCpp.cpp:552 +#: ../lib/Plugins/CCpp.cpp:679 msgid "Searching for debug-info packages..." msgstr "Buscando paquetes de información del depurador..." -#: ../lib/Plugins/CCpp.cpp:588 -#: ../lib/Plugins/CCpp.cpp:687 +#: ../lib/Plugins/CCpp.cpp:614 +#: ../lib/Plugins/CCpp.cpp:713 msgid "Downloading and installing debug-info packages..." msgstr "Descargando e instalando paquetes de información del depurador..." -#: ../lib/Plugins/CCpp.cpp:792 +#: ../lib/Plugins/CCpp.cpp:818 msgid "Getting local universal unique identification..." msgstr "Obteniendo la identificación única universal local..." -#: ../lib/Plugins/CCpp.cpp:811 +#: ../lib/Plugins/CCpp.cpp:837 msgid "Getting global universal unique identification..." msgstr "Obteniendo la identificación única universal global..." -#: ../lib/Plugins/CCpp.cpp:856 +#: ../lib/Plugins/CCpp.cpp:882 msgid "Starting report creation..." msgstr "Iniciando la creación del informe..." -#: ../lib/Plugins/CCpp.cpp:886 +#: ../lib/Plugins/CCpp.cpp:912 msgid "Skipping debuginfo installation" msgstr "Omita la instalación de la información de depuración" @@ -1,14 +1,15 @@ -# translation of abrt.master.gu.po to Gujarati +# translation of ABRT.po to Gujarati # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # +#: ../src/Gui/CCReporterDialog.py:191 # Sweta Kothari <swkothar@redhat.com>, 2009. msgid "" msgstr "" -"Project-Id-Version: abrt.master.gu\n" +"Project-Id-Version: ABRT\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-09-29 14:46+0200\n" -"PO-Revision-Date: 2009-09-23 10:59+0530\n" +"POT-Creation-Date: 2009-11-12 03:54+0000\n" +"PO-Revision-Date: 2009-11-12 14:15+0530\n" "Last-Translator: Sweta Kothari <swkothar@redhat.com>\n" "Language-Team: Gujarati\n" "MIME-Version: 1.0\n" @@ -17,39 +18,43 @@ msgstr "" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" -#: src/Gui/ABRTExceptions.py:4 +#: ../src/Gui/ABRTExceptions.py:6 msgid "Another client is already running, trying to wake it." msgstr "બીજો ક્લાઇન્ટ પહેલેથી જ ચાલી રહ્યો છે, તેને ઝગાડવા માટે પ્રયત્ન કરી રહ્યા છે." -#: src/Gui/ABRTExceptions.py:10 +#: ../src/Gui/ABRTExceptions.py:13 msgid "Got unexpected data from daemon (is the database properly updated?)." msgstr "ડિમન માંથી અનિચ્છનીય માહિતી મળી (શું યોગ્ય રીતે ડેટાબેઝ સુધારેલ છે?)." -#: src/Gui/ABRTPlugin.py:26 +#: ../src/Gui/ABRTPlugin.py:55 msgid "Analyzer plugins" msgstr "Analyzer પલ્ગઇનો" -#: src/Gui/ABRTPlugin.py:27 +#: ../src/Gui/ABRTPlugin.py:56 msgid "Action plugins" msgstr "Action પ્લગઇનો" -#: src/Gui/ABRTPlugin.py:28 +#: ../src/Gui/ABRTPlugin.py:57 msgid "Reporter plugins" msgstr "Reporter પ્લગઇનો" -#: src/Gui/ABRTPlugin.py:29 +#: ../src/Gui/ABRTPlugin.py:58 msgid "Database plugins" msgstr "Database પ્લગઇનો" -#: src/Gui/CCDBusBackend.py:143 -msgid "Can't connect to dbus" -msgstr "dbus નું જોડાણ કરી શકતા નથી" +#: ../src/Gui/ABRTPlugin.py:97 +msgid "Plugin name is not set, can't load it's settings" +msgstr "પ્લગઇન નામ સુયોજિત નથી, તેનાં સુયોજનોને લોડ કરી શકાતુ નથી" -#: src/Gui/CCDBusBackend.py:169 -msgid "Please check if abrt daemon is running." -msgstr "મહેરબાની કરીને ચકાસો જો abrt ડિમન ચાલી રહ્યુ હોય." +#: ../src/Gui/CCDBusBackend.py:74 ../src/Gui/CCDBusBackend.py:97 +msgid "Can't connect to system dbus" +msgstr "સિસ્ટમ dbus નું જોડાણ કરી શકતા નથી" -#: src/Gui/CCDBusBackend.py:187 +#: ../src/Gui/CCDBusBackend.py:100 ../src/Gui/CCDBusBackend.py:103 +msgid "Please check if abrt daemon is running" +msgstr "મહેરબાની કરીને ચકાસો જો abrt ડિમન ચાલી રહ્યુ છે" + +#: ../src/Gui/CCDBusBackend.py:155 msgid "" "Daemon did't return valid report info\n" "Debuginfo is missing?" @@ -57,27 +62,47 @@ msgstr "" "ડિમન યોગ્ય અહેલાલ જાણકારી પાછી મળતી નથી\n" "Debuginfo ગુમ થયેલ છે?" -#: src/Gui/ccgui.glade:6 -msgid "Please wait.." -msgstr "મહેરબાની કરીને થોભો.." - -#: src/Gui/ccgui.glade:16 -msgid "Working..." -msgstr "કામ કરી રહ્યુ છે..." - -#: src/Gui/ccgui.glade:49 +#: ../src/Gui/ccgui.glade.h:1 ../src/Gui/report.glade.h:1 msgid " " msgstr " " -#: src/Gui/ccgui.glade:68 +#: ../src/Gui/ccgui.glade.h:2 +msgid "(C) 2009 Red Hat, Inc." +msgstr "(C) 2009 Red Hat, Inc." + +#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:244 +msgid "<b>Not reported!</b>" +msgstr "<b>અહેવાલ થયેલ નથી!</b>" + +#: ../src/Gui/ccgui.glade.h:4 +msgid "<span color=\"white\">Description</span>" +msgstr "<span color=\"white\">વર્ણન</span>" + +#: ../src/Gui/ccgui.glade.h:5 msgid "About ABRT" msgstr "ABRT વિશે" -#: src/Gui/ccgui.glade:74 -msgid "(C) 2009 Red Hat, Inc." -msgstr "(C) 2009 Red Hat, Inc." +#: ../src/Gui/ccgui.glade.h:6 +msgid "Automatic Bug Reporting Tool" +msgstr "Automatic Bug Reporting Tool" + +#: ../src/Gui/ccgui.glade.h:7 +msgid "Delete" +msgstr "કાઢી નાંખો" -#: src/Gui/ccgui.glade:75 +#: ../src/Gui/ccgui.glade.h:8 +msgid "Please wait.." +msgstr "મહેરબાની કરીને થોભો.." + +#: ../src/Gui/ccgui.glade.h:9 +msgid "Plugins" +msgstr "પ્લગઇનો" + +#: ../src/Gui/ccgui.glade.h:10 ../src/Gui/report.glade.h:4 +msgid "Report" +msgstr "અહેવાલ" + +#: ../src/Gui/ccgui.glade.h:11 msgid "" "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 " @@ -105,68 +130,57 @@ msgstr "" "You should have received a copy of the GNU General Public License along with " "this program. If not, see <http://www.gnu.org/licenses/>." -#: src/Gui/ccgui.glade:106 -msgid "Automatic Bug Reporting Tool" -msgstr "Automatic Bug Reporting Tool" - -#: src/Gui/ccgui.glade:118 -msgid "_File" -msgstr "ફાઇલ (_F)" +#: ../src/Gui/ccgui.glade.h:16 +msgid "Working..." +msgstr "કામ કરી રહ્યુ છે..." -#: src/Gui/ccgui.glade:138 +#: ../src/Gui/ccgui.glade.h:17 msgid "_Edit" msgstr "ફેરફાર કરો (_E)" -#: src/Gui/ccgui.glade:146 -msgid "Plugins" -msgstr "પ્લગઇનો" +#: ../src/Gui/ccgui.glade.h:18 +msgid "_File" +msgstr "ફાઇલ (_F)" -#: src/Gui/ccgui.glade:164 +#: ../src/Gui/ccgui.glade.h:19 msgid "_Help" msgstr "મદદ (_H)" -#: src/Gui/ccgui.glade:194 src/Gui/ccgui.glade:195 -msgid "Delete" -msgstr "કાઢી નાંખો" - -#: src/Gui/ccgui.glade:207 src/Gui/ccgui.glade:208 src/Gui/ccgui.glade:335 -#: src/Gui/report.glade:7 src/Gui/report.glade:24 -msgid "Report" -msgstr "અહેવાલ" - -#: src/Gui/ccgui.glade:255 -msgid "<span color=\"white\">Description</span>" -msgstr "<span color=\"white\">વર્ણન</span>" - -#: src/Gui/ccgui.glade:297 src/Gui/CCMainWindow.py:239 -msgid "<b>Not reported!</b>" -msgstr "<b>અહેવાલ થયેલ નથી!</b>" - -#: src/Gui/CCMainWindow.py:80 +#. add pixbuff separatelly +#: ../src/Gui/CCMainWindow.py:80 msgid "Icon" msgstr "ચિહ્ન" -#: src/Gui/CCMainWindow.py:88 +#: ../src/Gui/CCMainWindow.py:88 msgid "Package" msgstr "પેકેજ" -#: src/Gui/CCMainWindow.py:89 +#: ../src/Gui/CCMainWindow.py:89 msgid "Application" msgstr "કાર્યક્રમ" -#: src/Gui/CCMainWindow.py:90 +#: ../src/Gui/CCMainWindow.py:90 msgid "Date" msgstr "તારીખ" -#: src/Gui/CCMainWindow.py:91 -msgid "Crash Rate" -msgstr "Crash Rate" +#: ../src/Gui/CCMainWindow.py:91 +msgid "Crash count" +msgstr "Crash count" -#: src/Gui/CCMainWindow.py:93 +#: ../src/Gui/CCMainWindow.py:93 msgid "User" msgstr "વપરાશકર્તા" -#: src/Gui/CCMainWindow.py:177 +#: ../src/Gui/CCMainWindow.py:160 +#, python-format +msgid "" +"Can't show the settings dialog\n" +"%s" +msgstr "" +"સંવાદ સુયોજનોને બતાવી શકાતા નથી\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:181 #, python-format msgid "" "Unable to finish current task!\n" @@ -175,7 +189,7 @@ msgstr "" "હાલનાં કાર્યને સમાપ્ત કરવાનું અસમર્થ!\n" "%s" -#: src/Gui/CCMainWindow.py:194 +#: ../src/Gui/CCMainWindow.py:198 #, python-format msgid "" "Error while loading the dumplist, please check if abrt daemon is running\n" @@ -185,17 +199,16 @@ msgstr "" "રહ્યુ છે\n" " %s" -#: src/Gui/CCMainWindow.py:204 +#: ../src/Gui/CCMainWindow.py:208 #, python-format msgid "Can't get username for uid %s" msgstr "uid %s માટે વપરાશકર્તાને મેળવી શકાતુ નથી" -#: src/Gui/CCMainWindow.py:231 +#: ../src/Gui/CCMainWindow.py:236 msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n" -msgstr "" -"<b>આ ભંગાણનો અહેવાલ કરી દેવામાં આવ્યો છે, તમે તેની પર અહેવાલને શોધી શકો છો:</b>\n" +msgstr "<b>આ ભંગાણનો અહેવાલ કરી દેવામાં આવ્યો છે, તમે તેની પર અહેવાલને શોધી શકો છો:</b>\n" -#: src/Gui/CCMainWindow.py:291 +#: ../src/Gui/CCMainWindow.py:296 msgid "" "Unable to get report!\n" "Debuginfo is missing?" @@ -203,7 +216,7 @@ msgstr "" "અહેવાલ મેળવવામાં અસમર્થ!\n" "Debuginfo ગુમ થયેલ છે?" -#: src/Gui/CCMainWindow.py:306 +#: ../src/Gui/CCMainWindow.py:314 #, python-format msgid "" "Reporting failed!\n" @@ -212,12 +225,39 @@ msgstr "" "અહેવાલ કરવાનું નિષ્ફળ!\n" "%s" -#: src/Gui/CCMainWindow.py:338 +#: ../src/Gui/CCMainWindow.py:333 ../src/Gui/CCMainWindow.py:360 #, python-format msgid "Error getting the report: %s" msgstr "અહેવાલને મેળવી રહ્યા હોય ત્યારે ભૂલ: %s" -#: src/Gui/CCReporterDialog.py:98 +#: ../src/Gui/CCReporterDialog.py:177 +msgid "Brief description how to reproduce this or what you did..." +msgstr "કેવી રીતે આનું પુન:ઉત્પાદન કરવુ અથવા તમે શુ કર્યુ હતુ તે માટે ટૂંકું વર્ણન..." + +#: ../src/Gui/CCReporterDialog.py:219 +#, python-format +msgid "" +"Reporting disabled because the backtrace is unusable.\n" +"Please try to install debuginfo manually using command:<span color=\"blue\"> " +"debuginfo-install %s </span>\n" +"then use Refresh button to regenerate the backtrace." +msgstr "" +"નિષ્ક્રિય થયેલ છે તેનો અહેવાલ કરી રહ્યા છે કારણ કે backtrace નો ઉપયોગ કરી શકાય તેવો નથી.\n" +"મહેરબાની કરીને આદેશની મદદથી જાતે જ debuginfo ને સ્થાપિત કરવા માટે પ્રયત્ન કરો:<span color=\"blue\"> " +"debuginfo-install %s </span>\n" +"પછી backtrace નો પુન: પ્રયત્ન કરવા માચે તાજુ કરો એ બટનને વાપરો." + +#: ../src/Gui/CCReporterDialog.py:221 +msgid "The bactrace is unusable, you can't report this!" +msgstr "bactrace નો ઉપયોગ કરી શકાય તેવું નથી, આનો તમે અહેવાલ કરી શકતા નથી!" + +#: ../src/Gui/CCReporterDialog.py:227 +msgid "" +"The bactrace is incomplete, please make sure you provide good steps to " +"reproduce." +msgstr "bactrace એ અપૂરતુ છે, મહેરબાની કરીને ખાતરી કરો કે પુન:ઉત્પન્ન કરવા માટે સારાં પગલાઓ પૂરા પાડો છો." + +#: ../src/Gui/CCReporterDialog.py:272 #, python-format msgid "" "<b>WARNING</b>, you're about to send data which might contain sensitive " @@ -227,190 +267,186 @@ msgstr "" "<b>WARNING</b>, તમે માહિતીને મોકલવા વિશે છો કે જે સંવેદનશીલ જાણકારી સમાવી શકે છે.\n" "શું તમે ખરેખર <b>%s</b> ને મોકલવા માંગો છો?\n" -#: src/Gui/CCReporterDialog.py:111 -msgid "Brief description how to reproduce this or what you did..." -msgstr "કેવી રીતે આનું પુન:ઉત્પાદન કરવુ અથવા તમે શુ કર્યુ હતુ તે માટે ટૂંકું વર્ણન..." - -#: src/Gui/dialogs.glade:7 +#: ../src/Gui/dialogs.glade.h:1 msgid "Report done" msgstr "પૂરુ થઇ ગયુ છે તેનો અહેવાલ કરો" -#: src/Gui/dialogs.glade:47 src/Gui/settings.glade:695 -#: src/Gui/settings.glade:785 +#: ../src/Gui/dialogs.glade.h:2 ../src/Gui/settings.glade.h:27 msgid "gtk-ok" msgstr "gtk-ok" -#: src/Gui/PluginSettingsUI.py:17 +#: ../src/Gui/PluginSettingsUI.py:18 msgid "Can't find PluginDialog widget in UI description!" msgstr "UI વર્ણનમાં PluginDialog વિજેટ શોધી શકાતી નથી!" -#: src/Gui/PluginSettingsUI.py:21 +#. we shouldn't get here, but just to be safe +#: ../src/Gui/PluginSettingsUI.py:24 #, python-format msgid "No UI for plugin %s" msgstr "પ્લગઇન %s માટે UI નથી" -#: src/Gui/PluginSettingsUI.py:38 src/Gui/PluginSettingsUI.py:64 +#: ../src/Gui/PluginSettingsUI.py:55 ../src/Gui/PluginSettingsUI.py:81 msgid "combo box is not implemented" msgstr "કોમ્બો બોક્સ નું અમલીકરણ થયેલ નથી" -#: src/Gui/PluginSettingsUI.py:47 +#: ../src/Gui/PluginSettingsUI.py:64 msgid "Nothing to hydrate!" msgstr "hydrate માટે કંઇ નથી!" -#: src/Gui/report.glade:64 +#: ../src/Gui/report.glade.h:2 msgid "Comment" msgstr "ટિપ્પણી" -#: src/Gui/report.glade:104 src/Gui/settings.glade:682 -#: src/Gui/settings.glade:797 -msgid "gtk-cancel" -msgstr "gtk-cancel" +#: ../src/Gui/report.glade.h:3 +msgid "How to reproduce (in a few simple steps)" +msgstr "કેવી રીતે પુન:ઉત્પન્ન કરાય (થોડાં સાદા પગલાઓમાં)" -#: src/Gui/report.glade:119 +#: ../src/Gui/report.glade.h:5 msgid "Send" msgstr "મોકલો" -#: src/Gui/SettingsDialog.py:34 src/Gui/SettingsDialog.py:51 +#: ../src/Gui/SettingsDialog.py:33 ../src/Gui/SettingsDialog.py:50 msgid "<b>Select plugin</b>" msgstr "<b>પ્લગઇનને પસંદ કરો</b>" -#: src/Gui/SettingsDialog.py:37 +#: ../src/Gui/SettingsDialog.py:36 msgid "<b>Select database backend</b>" msgstr "<b>ડેટાબેઝ બેકએન્ડ ને પસંદ કરો</b>" -#: src/Gui/SettingsDialog.py:165 +#: ../src/Gui/SettingsDialog.py:165 msgid "Remove this job" msgstr "આ જોબને દૂર કરો" -#: src/Gui/SettingsDialog.py:208 +#: ../src/Gui/SettingsDialog.py:208 msgid "Remove this action" msgstr "આ ક્રિયાને દૂર કરો" -#: src/Gui/settings.glade:6 -msgid "Settings" -msgstr "સુયોજનો" +#: ../src/Gui/settings.glade.h:1 +msgid "<b>Analyzer plugin</b>" +msgstr "<b>Analyzer પલ્ગઇન</b>" -#: src/Gui/settings.glade:46 src/Gui/settings.glade:55 -#: src/Gui/settings.glade:107 src/Gui/settings.glade:120 -#: src/Gui/settings.glade:133 -msgid "Nothing selected" -msgstr "કંઇ જ પસંદ થયેલ નથી" +#: ../src/Gui/settings.glade.h:2 +msgid "<b>Associated action</b>" +msgstr "<b>સંલગ્ન ક્રિયા</b>" -#: src/Gui/settings.glade:72 -msgid "Web Site:" -msgstr "વેબ સાઇટ:" +#: ../src/Gui/settings.glade.h:3 +msgid "<b>Plugin</b>" +msgstr "<b>પ્લગઇન</b>" -#: src/Gui/settings.glade:84 +#: ../src/Gui/settings.glade.h:4 +msgid "<b>Time (or period)</b>" +msgstr "<b>સમય (અથવા સમયગાળો)</b>" + +#: ../src/Gui/settings.glade.h:5 +msgid "Analyzers, Actions, Reporters" +msgstr "વિશ્લેષકો, ક્રિયાઓ, સંવાદદાતાઓ" + +#: ../src/Gui/settings.glade.h:6 msgid "Author:" msgstr "લેખક:" -#: src/Gui/settings.glade:97 -msgid "Version:" -msgstr "આવૃત્તિ:" - -#: src/Gui/settings.glade:152 -msgid "Plugin Details" -msgstr "પ્લગઇન વિગતો" +#: ../src/Gui/settings.glade.h:7 +msgid "Blacklisted packages: " +msgstr "બ્લેક યાદી થયેલ પેકેજો: " -#: src/Gui/settings.glade:179 +#: ../src/Gui/settings.glade.h:8 msgid "C_onfigure plugin" msgstr "પ્લગઇનને રૂપરેખાંકિત કરો (_o)" -#: src/Gui/settings.glade:191 -msgid "gtk-close" -msgstr "gtk-close" - -#: src/Gui/settings.glade:221 -msgid "Global Settings" -msgstr "વૈશ્ર્વિક સુયોજનો" - -#: src/Gui/settings.glade:240 +#: ../src/Gui/settings.glade.h:9 msgid "Check package GPG signature" msgstr "પેકેજ GPG હસ્તાક્ષરને ચકાસો" -#: src/Gui/settings.glade:256 +#: ../src/Gui/settings.glade.h:10 +msgid "Common" +msgstr "સામાન્ય" + +#: ../src/Gui/settings.glade.h:11 +msgid "Cron" +msgstr "ક્રોન" + +#: ../src/Gui/settings.glade.h:12 msgid "Database backend: " msgstr "ડેટાબેઝ બેકએન્ડ: " -#: src/Gui/settings.glade:281 -msgid "Blacklisted packages: " -msgstr "બ્લેક યાદી થયેલ પેકેજો: " +#: ../src/Gui/settings.glade.h:13 +msgid "Edit blacklisted packages" +msgstr "બ્લેક યાદી થયેલ પેકેજોમાં ફેરફાર કરો" -#: src/Gui/settings.glade:294 -msgid "Max coredump storage size(MB):" -msgstr "મહત્તમ કોરડમ્પ સંગ્રહ માપ(MB):" +#: ../src/Gui/settings.glade.h:14 +msgid "GPG Keys" +msgstr "GPG કીઓ" -#: src/Gui/settings.glade:307 +#: ../src/Gui/settings.glade.h:15 msgid "GPG keys: " msgstr "GPG કીઓ: " -#: src/Gui/settings.glade:349 -msgid "Edit blacklisted packages" -msgstr "બ્લેક યાદી થયેલ પેકેજોમાં ફેરફાર કરો" +#: ../src/Gui/settings.glade.h:16 +msgid "Global Settings" +msgstr "વૈશ્ર્વિક સુયોજનો" -#: src/Gui/settings.glade:408 -msgid "Common" -msgstr "સામાન્ય" +#: ../src/Gui/settings.glade.h:17 +msgid "Max coredump storage size(MB):" +msgstr "મહત્તમ કોરડમ્પ સંગ્રહ માપ(MB):" -#: src/Gui/settings.glade:438 -msgid "<b>Plugin</b>" -msgstr "<b>પ્લગઇન</b>" +#: ../src/Gui/settings.glade.h:18 +msgid "Nothing selected" +msgstr "કંઇ જ પસંદ થયેલ નથી" -#: src/Gui/settings.glade:448 -msgid "<b>Time (or period)</b>" -msgstr "<b>સમય (અથવા સમયગાળો)</b>" +#: ../src/Gui/settings.glade.h:19 +msgid "Plugin Details" +msgstr "પ્લગઇન વિગતો" -#: src/Gui/settings.glade:510 src/Gui/settings.glade:624 -#: src/Gui/settings.glade:761 -msgid "gtk-add" -msgstr "gtk-add" +#: ../src/Gui/settings.glade.h:20 +msgid "Settings" +msgstr "સુયોજનો" -#: src/Gui/settings.glade:534 -msgid "Cron" -msgstr "ક્રોન" +#: ../src/Gui/settings.glade.h:21 +msgid "This function is not implemented yet!" +msgstr "આ વિધેય નું હજુ અમલીકરણ થયેલ નથી!" -#: src/Gui/settings.glade:551 -msgid "<b>Analyzer plugin</b>" -msgstr "<b>Analyzer પલ્ગઇન</b>" +#: ../src/Gui/settings.glade.h:22 +msgid "Version:" +msgstr "આવૃત્તિ:" -#: src/Gui/settings.glade:561 -msgid "<b>Associated action</b>" -msgstr "<b>સંલગ્ન ક્રિયા</b>" +#: ../src/Gui/settings.glade.h:23 +msgid "Web Site:" +msgstr "વેબ સાઇટ:" -#: src/Gui/settings.glade:648 -msgid "Analyzers, Actions, Reporters" -msgstr "વિશ્લેષકો, ક્રિયાઓ, સંવાદદાતાઓ" +#: ../src/Gui/settings.glade.h:24 +msgid "gtk-add" +msgstr "gtk-add" -#: src/Gui/settings.glade:700 -msgid "This function is not implemented yet!" -msgstr "આ વિધેય નું હજુ અમલીકરણ થયેલ નથી!" +#: ../src/Gui/settings.glade.h:25 +msgid "gtk-cancel" +msgstr "gtk-cancel" -#: src/Gui/settings.glade:738 -msgid "GPG Keys" -msgstr "GPG કીઓ" +#: ../src/Gui/settings.glade.h:26 +msgid "gtk-close" +msgstr "gtk-close" -#: src/Gui/settings.glade:773 +#: ../src/Gui/settings.glade.h:28 msgid "gtk-remove" msgstr "gtk-remove" -#: src/Applet/Applet.cpp:71 +#: ../src/Applet/Applet.cpp:79 #, c-format msgid "A crash in package %s has been detected" msgstr "પેકેજ %s માં ભંગાણ ને શોધી દેવામાં આવ્યો છે" -#: src/Applet/Applet.cpp:130 +#: ../src/Applet/Applet.cpp:138 msgid "ABRT service has been started" msgstr "ABRT સેવા પહેલેથી જ શરૂ થયેલ છે" -#: src/Applet/Applet.cpp:132 src/Applet/Applet.cpp:246 +#: ../src/Applet/Applet.cpp:140 ../src/Applet/Applet.cpp:254 msgid "ABRT service is not running" msgstr "ABRT સેવા ચાલી રહી નથી" -#: src/Applet/CCApplet.cpp:185 +#: ../src/Applet/CCApplet.cpp:185 msgid "Warning" msgstr "ચેતવણી" -#: src/Daemon/Daemon.cpp:546 +#: ../src/Daemon/Daemon.cpp:520 msgid "" "Report size exceeded the quota. Please check system's MaxCrashReportsSize " "value in abrt.conf." @@ -418,120 +454,125 @@ msgstr "" "માપ વધારેલ ક્વોટા નો અહેવાલ કરોે. મહેરબાની કરીને abrt.conf માં તમારી " "MaxCrashReportsSize કિંમતને ચકાસો." -#: lib/Plugins/Bugzilla.cpp:83 -msgid "Empty login and password. Please check Bugzilla.conf" -msgstr "ખાલી લોગીન અને પાસવર્ડ. મહેરબાની કરીને Bugzilla.conf ને ચકાસો" - -#: lib/Plugins/Bugzilla.cpp:227 -msgid "Bug is already reported: " -msgstr "ભૂલ પહેલેથી જ અહેવાલ થયેલ છે: " - -#: lib/Plugins/Bugzilla.cpp:282 +#: ../lib/Plugins/Bugzilla.cpp:209 #, c-format -msgid "Binary file %s will not be reported." -msgstr "બાઇનરી ફાઇલ %s અહેવાલ થશે નહિં." +msgid "Bug is already reported: %i" +msgstr "ભૂલ પહેલેથી જ અહેવાલ થયેલ છે: %i" -#: lib/Plugins/Bugzilla.cpp:352 -msgid "New bug id: " -msgstr "નવું ભૂલ id: " +#: ../lib/Plugins/Bugzilla.cpp:271 +#, c-format +msgid "New bug id: %i" +msgstr "નવી ભૂલ id: %i" -#: lib/Plugins/Bugzilla.cpp:421 +#: ../lib/Plugins/Bugzilla.cpp:364 msgid "Checking for duplicates..." msgstr "નકલો માટે ચકાસી રહ્યા છે..." -#: lib/Plugins/Bugzilla.cpp:424 lib/Plugins/Bugzilla.cpp:436 +#: ../lib/Plugins/Bugzilla.cpp:367 msgid "Logging into bugzilla..." msgstr "બગઝીલામાં લોગ કરી રહ્યા છે..." -#: lib/Plugins/Bugzilla.cpp:427 -msgid "Check CC and add coment +1..." -msgstr "CC ને ચકાસો અને coment +1 ને ઉમેરો..." +#: ../lib/Plugins/Bugzilla.cpp:371 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "ખાલી લોગીન અને પાસવર્ડ. મહેરબાની કરીને Bugzilla.conf ને ચકાસો" + +#: ../lib/Plugins/Bugzilla.cpp:377 +msgid "Checking CC..." +msgstr "CC ને ચકાસી રહ્યા છે..." -#: lib/Plugins/Bugzilla.cpp:448 +#: ../lib/Plugins/Bugzilla.cpp:386 msgid "Creating new bug..." msgstr "નવી ભૂલને બનાવી રહ્યા છે..." -#: lib/Plugins/Bugzilla.cpp:453 +#: ../lib/Plugins/Bugzilla.cpp:390 msgid "Logging out..." msgstr "બહાર નીકળી રહ્યા છે..." -#: lib/Plugins/Kerneloops.cpp:37 +#: ../lib/Plugins/Kerneloops.cpp:37 msgid "Getting local universal unique identification" msgstr "સ્થાનિક વિશ્ર્વવ્યાપક અનન્ય ઓળખાણ ને મેળવી રહ્યા છે" -#: lib/Plugins/CCpp.cpp:146 +#: ../lib/Plugins/CCpp.cpp:254 msgid "Getting backtrace..." msgstr "બેકટ્રેસને મેળવી રહ્યા છે..." -#: lib/Plugins/CCpp.cpp:410 +#: ../lib/Plugins/CCpp.cpp:552 ../lib/Plugins/CCpp.cpp:679 msgid "Searching for debug-info packages..." msgstr "ડિબગ-જાણકારી પેકેજો માટે શોધી રહ્યા છે..." -#: lib/Plugins/CCpp.cpp:444 +#: ../lib/Plugins/CCpp.cpp:614 ../lib/Plugins/CCpp.cpp:713 msgid "Downloading and installing debug-info packages..." msgstr "ડિબગ-જાણકારી પેકેજોને સ્થાપિત અને ડાઉનલોડ કરી રહ્યા છે..." -#: lib/Plugins/CCpp.cpp:506 +#: ../lib/Plugins/CCpp.cpp:818 msgid "Getting local universal unique identification..." msgstr "સ્થાનિક વિશ્ર્વવ્યાપક અનન્ય ઓળખાણ ને મેળવી રહ્યા છે..." -#: lib/Plugins/CCpp.cpp:525 +#: ../lib/Plugins/CCpp.cpp:837 msgid "Getting global universal unique identification..." msgstr "વૈશ્ર્વિક વિશ્ર્વવ્યાપક અનન્ય ઓળખાણને મેળવી રહ્યા છે..." -#: lib/Plugins/CCpp.cpp:576 +#: ../lib/Plugins/CCpp.cpp:882 msgid "Starting report creation..." msgstr "અહેવાલ બનાવવાનું શરૂ કરી રહ્યા છે..." -#: lib/Plugins/CCpp.cpp:605 +#: ../lib/Plugins/CCpp.cpp:912 msgid "Skipping debuginfo installation" msgstr "ડિબગ જાણકારી સ્થાપન ને છોડી રહ્યા છે" -#: lib/Plugins/KerneloopsReporter.cpp:101 +#: ../lib/Plugins/KerneloopsReporter.cpp:102 msgid "Creating and submitting a report..." msgstr "અહેવાલને બનાવી અને સોંપી રહ્યા છે..." -#: lib/Plugins/Logger.cpp:58 lib/Plugins/Mailx.cpp:123 +#: ../lib/Plugins/Logger.cpp:65 ../lib/Plugins/Mailx.cpp:124 msgid "Creating a report..." msgstr "અહેવાલને બનાવી રહ્યા છે..." -#: lib/Plugins/RunApp.cpp:62 +#: ../lib/Plugins/RunApp.cpp:64 msgid "Executing RunApp plugin..." msgstr "RunApp પ્લગઇનને ચલાવી રહ્યા છે..." -#: lib/Plugins/FileTransfer.cpp:60 lib/Plugins/FileTransfer.cpp:355 +#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:384 msgid "FileTransfer: URL not specified" msgstr "FileTransfer: URL સ્પષ્ટ થયેલ નથી" -#: lib/Plugins/FileTransfer.cpp:77 +#: ../lib/Plugins/FileTransfer.cpp:67 #, c-format -msgid "Sending archive %s via %s" -msgstr "%s મારફતે પેટી %s ને મોકલી રહ્યા છે" +msgid "Sending archive %s to %s" +msgstr "%s માં પેટી %s ને મોકલી રહ્યા છે" -#: lib/Plugins/FileTransfer.cpp:284 +#: ../lib/Plugins/FileTransfer.cpp:309 msgid "File Transfer: Creating a report..." msgstr "ફાઇલ પરિવહન: અહેવાલને બનાવી રહ્યા છે..." -#: lib/Plugins/FileTransfer.cpp:305 lib/Plugins/FileTransfer.cpp:334 -msgid "CFileTransfer::Run(): Cannot create and send an archive: " -msgstr "CFileTransfer::Run(): બનાવી શકાતો નથી અને પેટીને મોકલો: " +#: ../lib/Plugins/FileTransfer.cpp:334 +#, c-format +msgid "Can't create and send an archive: %s" +msgstr "બનાવી શકાતો નથી અને પેટીને મોકલો: %s" + +#: ../lib/Plugins/FileTransfer.cpp:359 +#, c-format +msgid "Can't create and send an archive %s" +msgstr "બનાવી શકાતો નથી અને પેટી %s ને મોકલો" -#: lib/Plugins/KerneloopsScanner.cpp:79 +#: ../lib/Plugins/KerneloopsScanner.cpp:84 msgid "Creating kernel oops crash reports..." msgstr "કર્નલ oops ભાંગેલ અહેવાલોને બનાવી રહ્યા છે..." -#: lib/Plugins/Mailx.cpp:109 +#: ../lib/Plugins/Mailx.cpp:109 msgid "Sending an email..." msgstr "ઇમેઇલને મોકલી રહ્યા છે..." -#: lib/Plugins/SOSreport.cpp:113 +#: ../lib/Plugins/SOSreport.cpp:100 msgid "Executing SOSreport plugin..." msgstr "SOSreport પ્લગઇન ચાલી રહ્યુ છે..." -#: lib/Plugins/SOSreport.cpp:135 -msgid "running sosreport: " -msgstr "sosreport ચાલી રહ્યુ છે: " +#: ../lib/Plugins/SOSreport.cpp:122 +#, c-format +msgid "running sosreport: %s" +msgstr "sosreport ચાલી રહ્યુ છે: %s" -#: lib/Plugins/SOSreport.cpp:150 +#: ../lib/Plugins/SOSreport.cpp:137 msgid "done running sosreport" msgstr "sosreport ચાલી રહ્યુ છે તે સમાપ્ત થયુ" + @@ -2,59 +2,65 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # +#: ../src/Gui/CCReporterDialog.py:191 # Rajesh Ranjan <rajesh672@gmail.com>, 2009. msgid "" msgstr "" "Project-Id-Version: abrt.master\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-09-29 14:46+0200\n" -"PO-Revision-Date: 2009-09-23 13:49+0530\n" +"POT-Creation-Date: 2009-11-12 03:54+0000\n" +"PO-Revision-Date: 2009-11-12 16:18+0530\n" "Last-Translator: Rajesh Ranjan <rajesh672@gmail.com>\n" "Language-Team: Hindi <hindi.sf.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n\n" +"\n" "\n" "\n" "\n" "\n" "\n" -#: src/Gui/ABRTExceptions.py:4 +#: ../src/Gui/ABRTExceptions.py:6 msgid "Another client is already running, trying to wake it." msgstr "अन्य क्लाइंट पहले से कार्य कर रहा है, इसे फिर से लाने की कोशिश कर रहा है." -#: src/Gui/ABRTExceptions.py:10 +#: ../src/Gui/ABRTExceptions.py:13 msgid "Got unexpected data from daemon (is the database properly updated?)." msgstr "डेमॉन से अप्रत्याशित आँकड़ा पाया (क्या डेटाबेस ठीक से अद्यतन है?)." -#: src/Gui/ABRTPlugin.py:26 +#: ../src/Gui/ABRTPlugin.py:55 msgid "Analyzer plugins" msgstr "विश्लेषक प्लगिन" -#: src/Gui/ABRTPlugin.py:27 +#: ../src/Gui/ABRTPlugin.py:56 msgid "Action plugins" msgstr "क्रिया प्लगिन" -#: src/Gui/ABRTPlugin.py:28 +#: ../src/Gui/ABRTPlugin.py:57 msgid "Reporter plugins" msgstr "रिपोर्टर प्लगिन" -#: src/Gui/ABRTPlugin.py:29 +#: ../src/Gui/ABRTPlugin.py:58 msgid "Database plugins" msgstr "डेटाबेस प्लगिन" -#: src/Gui/CCDBusBackend.py:143 -msgid "Can't connect to dbus" -msgstr "dbus में कनेक्ट नहीं हो सकता है" +#: ../src/Gui/ABRTPlugin.py:97 +msgid "Plugin name is not set, can't load it's settings" +msgstr "प्लगिन नाम सेट नहीं है, इसकी सेटिंग लोड नहीं कर सकता है" + +#: ../src/Gui/CCDBusBackend.py:74 ../src/Gui/CCDBusBackend.py:97 +msgid "Can't connect to system dbus" +msgstr "तंत्र dbus में कनेक्ट नहीं कर सकता है" -#: src/Gui/CCDBusBackend.py:169 -msgid "Please check if abrt daemon is running." -msgstr "कृपया जाँचें यदि abrt डेमॉन अनुपस्थित है." +#: ../src/Gui/CCDBusBackend.py:100 ../src/Gui/CCDBusBackend.py:103 +msgid "Please check if abrt daemon is running" +msgstr "कृपया जाँचें यदि abrt डेमॉन चल रहा है" -#: src/Gui/CCDBusBackend.py:187 +#: ../src/Gui/CCDBusBackend.py:155 msgid "" "Daemon did't return valid report info\n" "Debuginfo is missing?" @@ -62,27 +68,47 @@ msgstr "" "डेमॉन ने वैध रिपोर्ट सूचना नहीं दी\n" "डिबगिइंफो अनुपस्थित है?" -#: src/Gui/ccgui.glade:6 -msgid "Please wait.." -msgstr "कृपया इंतजार करें..." - -#: src/Gui/ccgui.glade:16 -msgid "Working..." -msgstr "कार्य कर रहा है..." - -#: src/Gui/ccgui.glade:49 +#: ../src/Gui/ccgui.glade.h:1 ../src/Gui/report.glade.h:1 msgid " " msgstr " " -#: src/Gui/ccgui.glade:68 +#: ../src/Gui/ccgui.glade.h:2 +msgid "(C) 2009 Red Hat, Inc." +msgstr "(C) 2009 Red Hat, Inc." + +#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:244 +msgid "<b>Not reported!</b>" +msgstr "<b>रिपोर्ट नहीं किया हुआ!</b>" + +#: ../src/Gui/ccgui.glade.h:4 +msgid "<span color=\"white\">Description</span>" +msgstr "<span color=\"white\">विवरण</span>" + +#: ../src/Gui/ccgui.glade.h:5 msgid "About ABRT" msgstr "ABRT का परिचय" -#: src/Gui/ccgui.glade:74 -msgid "(C) 2009 Red Hat, Inc." -msgstr "(C) 2009 Red Hat, Inc." +#: ../src/Gui/ccgui.glade.h:6 +msgid "Automatic Bug Reporting Tool" +msgstr "स्वचालित बग रिपोर्टिंग औजार" -#: src/Gui/ccgui.glade:75 +#: ../src/Gui/ccgui.glade.h:7 +msgid "Delete" +msgstr "मिटाएँ" + +#: ../src/Gui/ccgui.glade.h:8 +msgid "Please wait.." +msgstr "कृपया इंतजार करें..." + +#: ../src/Gui/ccgui.glade.h:9 +msgid "Plugins" +msgstr "प्लगिन" + +#: ../src/Gui/ccgui.glade.h:10 ../src/Gui/report.glade.h:4 +msgid "Report" +msgstr "रिपोर्ट" + +#: ../src/Gui/ccgui.glade.h:11 msgid "" "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 " @@ -110,68 +136,57 @@ msgstr "" "You should have received a copy of the GNU General Public License along with " "this program. If not, see <http://www.gnu.org/licenses/>." -#: src/Gui/ccgui.glade:106 -msgid "Automatic Bug Reporting Tool" -msgstr "स्वचालित बग रिपोर्टिंग औजार" - -#: src/Gui/ccgui.glade:118 -msgid "_File" -msgstr "फ़ाइल (_F)" +#: ../src/Gui/ccgui.glade.h:16 +msgid "Working..." +msgstr "कार्य कर रहा है..." -#: src/Gui/ccgui.glade:138 +#: ../src/Gui/ccgui.glade.h:17 msgid "_Edit" msgstr "संपादन (_E)" -#: src/Gui/ccgui.glade:146 -msgid "Plugins" -msgstr "प्लगिन" +#: ../src/Gui/ccgui.glade.h:18 +msgid "_File" +msgstr "फ़ाइल (_F)" -#: src/Gui/ccgui.glade:164 +#: ../src/Gui/ccgui.glade.h:19 msgid "_Help" msgstr "मदद (_H)" -#: src/Gui/ccgui.glade:194 src/Gui/ccgui.glade:195 -msgid "Delete" -msgstr "मिटाएँ" - -#: src/Gui/ccgui.glade:207 src/Gui/ccgui.glade:208 src/Gui/ccgui.glade:335 -#: src/Gui/report.glade:7 src/Gui/report.glade:24 -msgid "Report" -msgstr "रिपोर्ट" - -#: src/Gui/ccgui.glade:255 -msgid "<span color=\"white\">Description</span>" -msgstr "<span color=\"white\">विवरण</span>" - -#: src/Gui/ccgui.glade:297 src/Gui/CCMainWindow.py:239 -msgid "<b>Not reported!</b>" -msgstr "<b>रिपोर्ट नहीं किया हुआ!</b>" - -#: src/Gui/CCMainWindow.py:80 +#. add pixbuff separatelly +#: ../src/Gui/CCMainWindow.py:80 msgid "Icon" msgstr "प्रतीक" -#: src/Gui/CCMainWindow.py:88 +#: ../src/Gui/CCMainWindow.py:88 msgid "Package" msgstr "पैकेज" -#: src/Gui/CCMainWindow.py:89 +#: ../src/Gui/CCMainWindow.py:89 msgid "Application" msgstr "अनुप्रयोग" -#: src/Gui/CCMainWindow.py:90 +#: ../src/Gui/CCMainWindow.py:90 msgid "Date" msgstr "तारीख़" -#: src/Gui/CCMainWindow.py:91 -msgid "Crash Rate" -msgstr "क्रेश दर" +#: ../src/Gui/CCMainWindow.py:91 +msgid "Crash count" +msgstr "क्रेश गिनती" -#: src/Gui/CCMainWindow.py:93 +#: ../src/Gui/CCMainWindow.py:93 msgid "User" msgstr "उपयोक्ता" -#: src/Gui/CCMainWindow.py:177 +#: ../src/Gui/CCMainWindow.py:160 +#, python-format +msgid "" +"Can't show the settings dialog\n" +"%s" +msgstr "" +"सेटिंग संवाद नहीं दिखा सकता है\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:181 #, python-format msgid "" "Unable to finish current task!\n" @@ -180,7 +195,7 @@ msgstr "" "मौजूदा कार्य समाप्त करने में असमर्थ!\n" "%s" -#: src/Gui/CCMainWindow.py:194 +#: ../src/Gui/CCMainWindow.py:198 #, python-format msgid "" "Error while loading the dumplist, please check if abrt daemon is running\n" @@ -189,16 +204,16 @@ msgstr "" "डंपलिस्ट लोड करने के दौरान त्रुटि, कृपया जाँचें यदि abrt डेमॉन कार्यशील है\n" " %s" -#: src/Gui/CCMainWindow.py:204 +#: ../src/Gui/CCMainWindow.py:208 #, python-format msgid "Can't get username for uid %s" msgstr "%s यूआईडी के लिए उपयोक्तानाम नहीं पा सका" -#: src/Gui/CCMainWindow.py:231 +#: ../src/Gui/CCMainWindow.py:236 msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n" msgstr "<b>यह क्रैश रिपोर्ट किया गया है, आप रिपोर्ट को यहाँ पा सकते हैं:</b>\n" -#: src/Gui/CCMainWindow.py:291 +#: ../src/Gui/CCMainWindow.py:296 msgid "" "Unable to get report!\n" "Debuginfo is missing?" @@ -206,7 +221,7 @@ msgstr "" "रिपोर्ट पाने में असमर्थ!\n" "डिबगइंफो अनुपस्थित है?" -#: src/Gui/CCMainWindow.py:306 +#: ../src/Gui/CCMainWindow.py:314 #, python-format msgid "" "Reporting failed!\n" @@ -215,12 +230,39 @@ msgstr "" "रिपोर्टिंग विफल!\n" "%s" -#: src/Gui/CCMainWindow.py:338 +#: ../src/Gui/CCMainWindow.py:333 ../src/Gui/CCMainWindow.py:360 #, python-format msgid "Error getting the report: %s" msgstr "रिपोर्ट पाने में त्रुटि: %s" -#: src/Gui/CCReporterDialog.py:98 +#: ../src/Gui/CCReporterDialog.py:177 +msgid "Brief description how to reproduce this or what you did..." +msgstr "संक्षिप्त विवरण कि कैसे इसे फिर लाएँ और आपने क्या किया..." + +#: ../src/Gui/CCReporterDialog.py:219 +#, python-format +msgid "" +"Reporting disabled because the backtrace is unusable.\n" +"Please try to install debuginfo manually using command:<span color=\"blue\"> " +"debuginfo-install %s </span>\n" +"then use Refresh button to regenerate the backtrace." +msgstr "" +"रिपोर्टिंग निष्क्रिय किया गया क्योंकि बैकट्रैस अप्रयोज्य है.\n" +"कृपया डिबगइंफो को कमांड के प्रयोग से दस्ती रूप से संस्थापित करने की कोशिश करें:<span color=\"blue\"> " +"debuginfo-install %s </span>\n" +"फिर बैकट्रैस को फिर बनाने के लिए ताज़ा बटन का प्रयोग करें." + +#: ../src/Gui/CCReporterDialog.py:221 +msgid "The bactrace is unusable, you can't report this!" +msgstr "bactrace अप्रयोज्य है, आप इस रिपोर्ट को नहीं पढ़ सकते हैं!" + +#: ../src/Gui/CCReporterDialog.py:227 +msgid "" +"The bactrace is incomplete, please make sure you provide good steps to " +"reproduce." +msgstr "bactrace अपूर्ण है, कृपया सुनिश्चित करें कि आप फिर बनाने के लिए अच्छा चरण देते हैं." + +#: ../src/Gui/CCReporterDialog.py:272 #, python-format msgid "" "<b>WARNING</b>, you're about to send data which might contain sensitive " @@ -230,190 +272,186 @@ msgstr "" "<b>चेतावनी</b>, आप उन आँकड़ों को भेजने वाले हैं जो कि संवेदनशील सूचना समाहित कर सकता है.\n" "क्या आप वाकई भेजना चाहते हैं <b>%s</b>?\n" -#: src/Gui/CCReporterDialog.py:111 -msgid "Brief description how to reproduce this or what you did..." -msgstr "संक्षिप्त विवरण कि कैसे इसे फिर लाएँ और आपने क्या किया..." - -#: src/Gui/dialogs.glade:7 +#: ../src/Gui/dialogs.glade.h:1 msgid "Report done" msgstr "रिपोर्ट संपन्न" -#: src/Gui/dialogs.glade:47 src/Gui/settings.glade:695 -#: src/Gui/settings.glade:785 +#: ../src/Gui/dialogs.glade.h:2 ../src/Gui/settings.glade.h:27 msgid "gtk-ok" msgstr "gtk-ok" -#: src/Gui/PluginSettingsUI.py:17 +#: ../src/Gui/PluginSettingsUI.py:18 msgid "Can't find PluginDialog widget in UI description!" msgstr "PluginDialog विजेट नहीं ढूँढ़ सकता है UI विवरण में!" -#: src/Gui/PluginSettingsUI.py:21 +#. we shouldn't get here, but just to be safe +#: ../src/Gui/PluginSettingsUI.py:24 #, python-format msgid "No UI for plugin %s" msgstr "प्लगिन %s के लिए कोई UI नहीं" -#: src/Gui/PluginSettingsUI.py:38 src/Gui/PluginSettingsUI.py:64 +#: ../src/Gui/PluginSettingsUI.py:55 ../src/Gui/PluginSettingsUI.py:81 msgid "combo box is not implemented" msgstr "कोंबो बॉक्स लागू नहीं है" -#: src/Gui/PluginSettingsUI.py:47 +#: ../src/Gui/PluginSettingsUI.py:64 msgid "Nothing to hydrate!" msgstr "हाइड्रेट करने को कुछ नहीं!" -#: src/Gui/report.glade:64 +#: ../src/Gui/report.glade.h:2 msgid "Comment" msgstr "टिप्पणी" -#: src/Gui/report.glade:104 src/Gui/settings.glade:682 -#: src/Gui/settings.glade:797 -msgid "gtk-cancel" -msgstr "gtk-cancel" +#: ../src/Gui/report.glade.h:3 +msgid "How to reproduce (in a few simple steps)" +msgstr "कैसे फिर तैयार करें (कुछ सरल चरण में)" -#: src/Gui/report.glade:119 +#: ../src/Gui/report.glade.h:5 msgid "Send" msgstr "भेजें" -#: src/Gui/SettingsDialog.py:34 src/Gui/SettingsDialog.py:51 +#: ../src/Gui/SettingsDialog.py:33 ../src/Gui/SettingsDialog.py:50 msgid "<b>Select plugin</b>" msgstr "<b>प्लगिन चुनें</b>" -#: src/Gui/SettingsDialog.py:37 +#: ../src/Gui/SettingsDialog.py:36 msgid "<b>Select database backend</b>" msgstr "<b>डेटाबेस बैकेंड चुनें</b>" -#: src/Gui/SettingsDialog.py:165 +#: ../src/Gui/SettingsDialog.py:165 msgid "Remove this job" msgstr "इस कार्य को हटाएँ" -#: src/Gui/SettingsDialog.py:208 +#: ../src/Gui/SettingsDialog.py:208 msgid "Remove this action" msgstr "इस क्रिया को हटाएँ" -#: src/Gui/settings.glade:6 -msgid "Settings" -msgstr "सेटिंग" +#: ../src/Gui/settings.glade.h:1 +msgid "<b>Analyzer plugin</b>" +msgstr "<b>विश्लेषक प्लगिन</b>" -#: src/Gui/settings.glade:46 src/Gui/settings.glade:55 -#: src/Gui/settings.glade:107 src/Gui/settings.glade:120 -#: src/Gui/settings.glade:133 -msgid "Nothing selected" -msgstr "कुछ नहीं चयनित" +#: ../src/Gui/settings.glade.h:2 +msgid "<b>Associated action</b>" +msgstr "<b>संबंधित क्रिया</b>" -#: src/Gui/settings.glade:72 -msgid "Web Site:" -msgstr "वेब साइट:" +#: ../src/Gui/settings.glade.h:3 +msgid "<b>Plugin</b>" +msgstr "<b>प्लगिन</b>" -#: src/Gui/settings.glade:84 +#: ../src/Gui/settings.glade.h:4 +msgid "<b>Time (or period)</b>" +msgstr "<b>समय (या अवधि)</b>" + +#: ../src/Gui/settings.glade.h:5 +msgid "Analyzers, Actions, Reporters" +msgstr "विश्लेषक, क्रिया, रिपोर्टर" + +#: ../src/Gui/settings.glade.h:6 msgid "Author:" msgstr "लेखकः" -#: src/Gui/settings.glade:97 -msgid "Version:" -msgstr "संस्करण:" - -#: src/Gui/settings.glade:152 -msgid "Plugin Details" -msgstr "प्लगिन विवरण" +#: ../src/Gui/settings.glade.h:7 +msgid "Blacklisted packages: " +msgstr "ब्लैकलिस्टेड संकुल: " -#: src/Gui/settings.glade:179 +#: ../src/Gui/settings.glade.h:8 msgid "C_onfigure plugin" msgstr "प्लगिन विन्यस्त करें (_o)" -#: src/Gui/settings.glade:191 -msgid "gtk-close" -msgstr "gtk-close" - -#: src/Gui/settings.glade:221 -msgid "Global Settings" -msgstr "वैश्विक सेटिंग" - -#: src/Gui/settings.glade:240 +#: ../src/Gui/settings.glade.h:9 msgid "Check package GPG signature" msgstr "संकुल GPG हस्ताक्षर जाँचें" -#: src/Gui/settings.glade:256 +#: ../src/Gui/settings.glade.h:10 +msgid "Common" +msgstr "सामान्य" + +#: ../src/Gui/settings.glade.h:11 +msgid "Cron" +msgstr "क्रॉन" + +#: ../src/Gui/settings.glade.h:12 msgid "Database backend: " msgstr "डेटाबेस बैकेंड" -#: src/Gui/settings.glade:281 -msgid "Blacklisted packages: " -msgstr "ब्लैकलिस्टेड संकुल: " +#: ../src/Gui/settings.glade.h:13 +msgid "Edit blacklisted packages" +msgstr "ब्लैकलिस्टेड संकुल संपादित करें" -#: src/Gui/settings.glade:294 -msgid "Max coredump storage size(MB):" -msgstr "अधिक कोरडंप भंडार आकार (MB):" +#: ../src/Gui/settings.glade.h:14 +msgid "GPG Keys" +msgstr "GPG कुंजी" -#: src/Gui/settings.glade:307 +#: ../src/Gui/settings.glade.h:15 msgid "GPG keys: " msgstr "GPG कुंजी: " -#: src/Gui/settings.glade:349 -msgid "Edit blacklisted packages" -msgstr "ब्लैकलिस्टेड संकुल संपादित करें" +#: ../src/Gui/settings.glade.h:16 +msgid "Global Settings" +msgstr "वैश्विक सेटिंग" -#: src/Gui/settings.glade:408 -msgid "Common" -msgstr "सामान्य" +#: ../src/Gui/settings.glade.h:17 +msgid "Max coredump storage size(MB):" +msgstr "अधिक कोरडंप भंडार आकार (MB):" -#: src/Gui/settings.glade:438 -msgid "<b>Plugin</b>" -msgstr "<b>प्लगिन</b>" +#: ../src/Gui/settings.glade.h:18 +msgid "Nothing selected" +msgstr "कुछ नहीं चयनित" -#: src/Gui/settings.glade:448 -msgid "<b>Time (or period)</b>" -msgstr "<b>समय (या अवधि)</b>" +#: ../src/Gui/settings.glade.h:19 +msgid "Plugin Details" +msgstr "प्लगिन विवरण" -#: src/Gui/settings.glade:510 src/Gui/settings.glade:624 -#: src/Gui/settings.glade:761 -msgid "gtk-add" -msgstr "gtk-add" +#: ../src/Gui/settings.glade.h:20 +msgid "Settings" +msgstr "सेटिंग" -#: src/Gui/settings.glade:534 -msgid "Cron" -msgstr "क्रॉन" +#: ../src/Gui/settings.glade.h:21 +msgid "This function is not implemented yet!" +msgstr "प्रकार्य अभी तक लागू नहीं है!" -#: src/Gui/settings.glade:551 -msgid "<b>Analyzer plugin</b>" -msgstr "<b>विश्लेषक प्लगिन</b>" +#: ../src/Gui/settings.glade.h:22 +msgid "Version:" +msgstr "संस्करण:" -#: src/Gui/settings.glade:561 -msgid "<b>Associated action</b>" -msgstr "<b>संबंधित क्रिया</b>" +#: ../src/Gui/settings.glade.h:23 +msgid "Web Site:" +msgstr "वेब साइट:" -#: src/Gui/settings.glade:648 -msgid "Analyzers, Actions, Reporters" -msgstr "विश्लेषक, क्रिया, रिपोर्टर" +#: ../src/Gui/settings.glade.h:24 +msgid "gtk-add" +msgstr "gtk-add" -#: src/Gui/settings.glade:700 -msgid "This function is not implemented yet!" -msgstr "प्रकार्य अभी तक लागू नहीं है!" +#: ../src/Gui/settings.glade.h:25 +msgid "gtk-cancel" +msgstr "gtk-cancel" -#: src/Gui/settings.glade:738 -msgid "GPG Keys" -msgstr "GPG कुंजी" +#: ../src/Gui/settings.glade.h:26 +msgid "gtk-close" +msgstr "gtk-close" -#: src/Gui/settings.glade:773 +#: ../src/Gui/settings.glade.h:28 msgid "gtk-remove" msgstr "gtk-remove" -#: src/Applet/Applet.cpp:71 +#: ../src/Applet/Applet.cpp:79 #, c-format msgid "A crash in package %s has been detected" msgstr "%s संकुल में क्रैश पता किया गया है!" -#: src/Applet/Applet.cpp:130 +#: ../src/Applet/Applet.cpp:138 msgid "ABRT service has been started" msgstr "ABRT सेवा शुरू की गई है" -#: src/Applet/Applet.cpp:132 src/Applet/Applet.cpp:246 +#: ../src/Applet/Applet.cpp:140 ../src/Applet/Applet.cpp:254 msgid "ABRT service is not running" msgstr "ABRT सेवा नहीं चल रहा है" -#: src/Applet/CCApplet.cpp:185 +#: ../src/Applet/CCApplet.cpp:185 msgid "Warning" msgstr "चेतावनी" -#: src/Daemon/Daemon.cpp:546 +#: ../src/Daemon/Daemon.cpp:520 msgid "" "Report size exceeded the quota. Please check system's MaxCrashReportsSize " "value in abrt.conf." @@ -421,120 +459,125 @@ msgstr "" "कोटा से बढ़ा हुआ आकार रिपोर्ट करें. कृपया सिस्टम के MaxCrashReportsSize मान को abrt." "conf में जाँचें." -#: lib/Plugins/Bugzilla.cpp:83 -msgid "Empty login and password. Please check Bugzilla.conf" -msgstr "रिक्त लॉगिन और कूटशब्द. कृपया Bugzilla.conf जाँचें" - -#: lib/Plugins/Bugzilla.cpp:227 -msgid "Bug is already reported: " -msgstr "बग पहले से रिपोर्ट किया हुआ है: " - -#: lib/Plugins/Bugzilla.cpp:282 +#: ../lib/Plugins/Bugzilla.cpp:209 #, c-format -msgid "Binary file %s will not be reported." -msgstr "द्विपदीय फ़ाइल %s को रिपोर्ट नहीं किया जाएगा." +msgid "Bug is already reported: %i" +msgstr "बग पहले से रिपोर्ट किया हुआ है: %i" -#: lib/Plugins/Bugzilla.cpp:352 -msgid "New bug id: " -msgstr "नया बग id: " +#: ../lib/Plugins/Bugzilla.cpp:271 +#, c-format +msgid "New bug id: %i" +msgstr "नया बग id: %i" -#: lib/Plugins/Bugzilla.cpp:421 +#: ../lib/Plugins/Bugzilla.cpp:364 msgid "Checking for duplicates..." msgstr "अनुकृति के लिए जाँच रहा है..." -#: lib/Plugins/Bugzilla.cpp:424 lib/Plugins/Bugzilla.cpp:436 +#: ../lib/Plugins/Bugzilla.cpp:367 msgid "Logging into bugzilla..." msgstr "बगजिला में लॉगिंग करें..." -#: lib/Plugins/Bugzilla.cpp:427 -msgid "Check CC and add coment +1..." -msgstr "सीसी जाँचें और +1 टिप्पणी जोड़ें..." +#: ../lib/Plugins/Bugzilla.cpp:371 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "रिक्त लॉगिन और कूटशब्द. कृपया Bugzilla.conf जाँचें" + +#: ../lib/Plugins/Bugzilla.cpp:377 +msgid "Checking CC..." +msgstr "सीसी के लिए जाँच रहा है..." -#: lib/Plugins/Bugzilla.cpp:448 +#: ../lib/Plugins/Bugzilla.cpp:386 msgid "Creating new bug..." msgstr "नया बग बना रहा है..." -#: lib/Plugins/Bugzilla.cpp:453 +#: ../lib/Plugins/Bugzilla.cpp:390 msgid "Logging out..." msgstr "लॉगिंग आउट..." -#: lib/Plugins/Kerneloops.cpp:37 +#: ../lib/Plugins/Kerneloops.cpp:37 msgid "Getting local universal unique identification" msgstr "स्थानीय सार्वभौमिक अद्वितीय पहचान पा रहा है..." -#: lib/Plugins/CCpp.cpp:146 +#: ../lib/Plugins/CCpp.cpp:254 msgid "Getting backtrace..." msgstr "बैकट्रैस पा रहा है..." -#: lib/Plugins/CCpp.cpp:410 +#: ../lib/Plugins/CCpp.cpp:552 ../lib/Plugins/CCpp.cpp:679 msgid "Searching for debug-info packages..." msgstr "डिबगइंफो संकुल के लिए खोज रहा है..." -#: lib/Plugins/CCpp.cpp:444 +#: ../lib/Plugins/CCpp.cpp:614 ../lib/Plugins/CCpp.cpp:713 msgid "Downloading and installing debug-info packages..." msgstr "डिबग सूचना संकुल डाउनलोड और संस्थापित किया जा रहा है..." -#: lib/Plugins/CCpp.cpp:506 +#: ../lib/Plugins/CCpp.cpp:818 msgid "Getting local universal unique identification..." msgstr "स्थानीय सार्वभौमिक अद्वितीय पहचान पा रहा है..." -#: lib/Plugins/CCpp.cpp:525 +#: ../lib/Plugins/CCpp.cpp:837 msgid "Getting global universal unique identification..." msgstr "वैश्विक सार्वभौमिक अद्वितीय पहचान पा रहा है..." -#: lib/Plugins/CCpp.cpp:576 +#: ../lib/Plugins/CCpp.cpp:882 msgid "Starting report creation..." msgstr "रिपोर्ट निर्माण आरंभ कर रहा है..." -#: lib/Plugins/CCpp.cpp:605 +#: ../lib/Plugins/CCpp.cpp:912 msgid "Skipping debuginfo installation" msgstr "डिबगइंफो संस्थापन छोड़ें" -#: lib/Plugins/KerneloopsReporter.cpp:101 +#: ../lib/Plugins/KerneloopsReporter.cpp:102 msgid "Creating and submitting a report..." msgstr "कोई रिपोर्ट बना या सुपुर्द कर रहा है..." -#: lib/Plugins/Logger.cpp:58 lib/Plugins/Mailx.cpp:123 +#: ../lib/Plugins/Logger.cpp:65 ../lib/Plugins/Mailx.cpp:124 msgid "Creating a report..." msgstr "कोई रिपोर्ट बना रहा है..." -#: lib/Plugins/RunApp.cpp:62 +#: ../lib/Plugins/RunApp.cpp:64 msgid "Executing RunApp plugin..." msgstr "RunApp प्लगिन चला रहा है..." -#: lib/Plugins/FileTransfer.cpp:60 lib/Plugins/FileTransfer.cpp:355 +#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:384 msgid "FileTransfer: URL not specified" msgstr "FileTransfer: URL निर्दिष्ट नहीं" -#: lib/Plugins/FileTransfer.cpp:77 +#: ../lib/Plugins/FileTransfer.cpp:67 #, c-format -msgid "Sending archive %s via %s" -msgstr "अभिलेख %s को %s के द्वारा भेज रहा है" +msgid "Sending archive %s to %s" +msgstr "अभिलेख %s को %s में भेज रहा है" -#: lib/Plugins/FileTransfer.cpp:284 +#: ../lib/Plugins/FileTransfer.cpp:309 msgid "File Transfer: Creating a report..." msgstr "फ़ाइल हस्तांतरण: कोई रिपोर्ट बना रहा है..." -#: lib/Plugins/FileTransfer.cpp:305 lib/Plugins/FileTransfer.cpp:334 -msgid "CFileTransfer::Run(): Cannot create and send an archive: " -msgstr "CFileTransfer::Run(): एक अभिलेख नहीं बना सकता है और भेज सकता है: " +#: ../lib/Plugins/FileTransfer.cpp:334 +#, c-format +msgid "Can't create and send an archive: %s" +msgstr "अभिलेख बना और भेज नहीं सकता है: %s" + +#: ../lib/Plugins/FileTransfer.cpp:359 +#, c-format +msgid "Can't create and send an archive %s" +msgstr "अभिलेख बना और भेज नहीं सकता है %s" -#: lib/Plugins/KerneloopsScanner.cpp:79 +#: ../lib/Plugins/KerneloopsScanner.cpp:84 msgid "Creating kernel oops crash reports..." msgstr "कर्नेल वूप्स क्रैश रिपोर्ट बना रहा है..." -#: lib/Plugins/Mailx.cpp:109 +#: ../lib/Plugins/Mailx.cpp:109 msgid "Sending an email..." msgstr "कोई ईमेल भेज रहा है..." -#: lib/Plugins/SOSreport.cpp:113 +#: ../lib/Plugins/SOSreport.cpp:100 msgid "Executing SOSreport plugin..." msgstr "SOSreport प्लगिन निष्पादित कर रहा है..." -#: lib/Plugins/SOSreport.cpp:135 -msgid "running sosreport: " -msgstr "sosreport चला रहा है: " +#: ../lib/Plugins/SOSreport.cpp:122 +#, c-format +msgid "running sosreport: %s" +msgstr "sosreport चला रहा है: %s" -#: lib/Plugins/SOSreport.cpp:150 +#: ../lib/Plugins/SOSreport.cpp:137 msgid "done running sosreport" msgstr "sosreport चलाना संपन्न" + @@ -1,21 +1,25 @@ +# translation of abrt.master.po to Dutch # abrt translation to Dutc. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # -# Geert Warrink <geert.warrink@onsnet.nu>, 2009. # +#: ../src/Gui/CCReporterDialog.py:191 +# Geert Warrink <geert.warrink@onsnet.nu>, 2009. +# Richard van der Luit <nippur@fedoraproject.org>, 2009. msgid "" msgstr "" -"Project-Id-Version: abrt\n" +"Project-Id-Version: abrt.master\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-11-07 09:49+0000\n" -"PO-Revision-Date: 2009-11-07 15:35+0100\n" -"Last-Translator: Geert Warrink <geert.warrink@onsnet.nu>\n" -"Language-Team: nl <fedora-trans-list@redhat.com>\n" +"POT-Creation-Date: 2009-11-11 09:31+0000\n" +"PO-Revision-Date: 2009-11-11 13:12+0100\n" +"Last-Translator: Richard van der Luit <nippur@fedoraproject.org>\n" +"Language-Team: Dutch <nl@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../src/Gui/ABRTExceptions.py:6 msgid "Another client is already running, trying to wake it." @@ -23,8 +27,7 @@ msgstr "Andere client draait al, probeer het te wekken." #: ../src/Gui/ABRTExceptions.py:13 msgid "Got unexpected data from daemon (is the database properly updated?)." -msgstr "" -"Kreeg niet verwachte data van daemon (is de database correct vernieuwd?)." +msgstr "Kreeg niet verwachte data van daemon (is de database correct vernieuwd?)." #: ../src/Gui/ABRTPlugin.py:55 msgid "Analyzer plugins" @@ -98,7 +101,7 @@ msgstr "Wacht a.u.b..." msgid "Plugins" msgstr "Plugins" -#: ../src/Gui/ccgui.glade.h:10 ../src/Gui/report.glade.h:3 +#: ../src/Gui/ccgui.glade.h:10 ../src/Gui/report.glade.h:4 msgid "Report" msgstr "Rapport" @@ -164,8 +167,8 @@ msgid "Date" msgstr "Datum" #: ../src/Gui/CCMainWindow.py:91 -msgid "Crash Rate" -msgstr "Crash rate" +msgid "Crash count" +msgstr "Crash count" #: ../src/Gui/CCMainWindow.py:93 msgid "User" @@ -230,28 +233,28 @@ msgstr "" msgid "Error getting the report: %s" msgstr "Fout tijdens het verkrijgen van het rapport: %s" -#: ../src/Gui/CCReporterDialog.py:173 +#: ../src/Gui/CCReporterDialog.py:177 msgid "Brief description how to reproduce this or what you did..." msgstr "Korte beschrijving hoe dit te reproduceren is of wat je deed..." -#: ../src/Gui/CCReporterDialog.py:201 +#: ../src/Gui/CCReporterDialog.py:219 #, python-format msgid "" -"Reporting disabled because the backtrace is unusable!\n" +"Reporting disabled because the backtrace is unusable.\n" "Please try to install debuginfo manually using command:<span color=\"blue\"> " "debuginfo-install %s </span>\n" "then use Refresh button to regenerate the backtrace." msgstr "" -"Rapportage afgebroken omdat de backtrace onbruikbaar is!\n" +"Rapportage uitgeschakeld omdat de backtrace onbruikbaar is!\n" "Probeer a.u.b. debuginfo handmatig te installeren met: <span color=\"blue\"> " "debuginfo-install %s </span>\n" -"en gebruik dan de Verversen knop om de backtrace " +"en gebruik dan de Verversen knop om de backtrace te hergenereren." -#: ../src/Gui/CCReporterDialog.py:203 +#: ../src/Gui/CCReporterDialog.py:221 msgid "The bactrace is unusable, you can't report this!" msgstr "De backtrace in niet bruikbaar, je kunt dit niet rapporteren!" -#: ../src/Gui/CCReporterDialog.py:209 +#: ../src/Gui/CCReporterDialog.py:227 msgid "" "The bactrace is incomplete, please make sure you provide good steps to " "reproduce." @@ -259,7 +262,7 @@ msgstr "" "De backtrace is niet compleet, wees er zeker van om voor het genereren de " "juiste stappen op te volgen." -#: ../src/Gui/CCReporterDialog.py:247 +#: ../src/Gui/CCReporterDialog.py:272 #, python-format msgid "" "<b>WARNING</b>, you're about to send data which might contain sensitive " @@ -300,7 +303,11 @@ msgstr "Kan het niet hard maken!" msgid "Comment" msgstr "Commentaar" -#: ../src/Gui/report.glade.h:4 +#: ../src/Gui/report.glade.h:3 +msgid "How to reproduce (in a few simple steps)" +msgstr "Hoe het te herhalen (in een paar simpele stappen)" + +#: ../src/Gui/report.glade.h:5 msgid "Send" msgstr "Verzenden" @@ -445,7 +452,7 @@ msgstr "ABRT service draait niet" msgid "Warning" msgstr "Waarschuwing" -#: ../src/Daemon/Daemon.cpp:531 +#: ../src/Daemon/Daemon.cpp:520 msgid "" "Report size exceeded the quota. Please check system's MaxCrashReportsSize " "value in abrt.conf." @@ -453,37 +460,37 @@ msgstr "" "Rapport grootte overschreed quota. Controleer a.u.b. MaxCrashReportsSize " "waarde van het systeem in abrt.conf." -#: ../lib/Plugins/Bugzilla.cpp:316 +#: ../lib/Plugins/Bugzilla.cpp:209 #, c-format msgid "Bug is already reported: %i" msgstr "Bug is al aangemeld: %i" -#: ../lib/Plugins/Bugzilla.cpp:378 +#: ../lib/Plugins/Bugzilla.cpp:271 #, c-format msgid "New bug id: %i" msgstr "Nieuwe bug id: %i" -#: ../lib/Plugins/Bugzilla.cpp:471 +#: ../lib/Plugins/Bugzilla.cpp:364 msgid "Checking for duplicates..." msgstr "Controleren voor dubbele..." -#: ../lib/Plugins/Bugzilla.cpp:474 +#: ../lib/Plugins/Bugzilla.cpp:367 msgid "Logging into bugzilla..." msgstr "Inloggen bij bugzilla..." -#: ../lib/Plugins/Bugzilla.cpp:478 +#: ../lib/Plugins/Bugzilla.cpp:371 msgid "Empty login and password. Please check Bugzilla.conf" msgstr "Leeg login en wachtwoord. Check a.u.b. Bugzilla.conf" -#: ../lib/Plugins/Bugzilla.cpp:484 +#: ../lib/Plugins/Bugzilla.cpp:377 msgid "Checking CC..." msgstr "Controleren van CC..." -#: ../lib/Plugins/Bugzilla.cpp:493 +#: ../lib/Plugins/Bugzilla.cpp:386 msgid "Creating new bug..." msgstr "Nieuwe bug aanmaken..." -#: ../lib/Plugins/Bugzilla.cpp:497 +#: ../lib/Plugins/Bugzilla.cpp:390 msgid "Logging out..." msgstr "Uitloggen..." @@ -491,31 +498,31 @@ msgstr "Uitloggen..." msgid "Getting local universal unique identification" msgstr "Verkrijgen van locale universele unieke identificatie" -#: ../lib/Plugins/CCpp.cpp:228 +#: ../lib/Plugins/CCpp.cpp:254 msgid "Getting backtrace..." msgstr "Backtrace ophalen..." -#: ../lib/Plugins/CCpp.cpp:526 ../lib/Plugins/CCpp.cpp:653 +#: ../lib/Plugins/CCpp.cpp:552 ../lib/Plugins/CCpp.cpp:679 msgid "Searching for debug-info packages..." msgstr "Zoeken naar debug-info pakketten..." -#: ../lib/Plugins/CCpp.cpp:588 ../lib/Plugins/CCpp.cpp:687 +#: ../lib/Plugins/CCpp.cpp:614 ../lib/Plugins/CCpp.cpp:713 msgid "Downloading and installing debug-info packages..." msgstr "Downloaden en installeren van debug-info pakketten..." -#: ../lib/Plugins/CCpp.cpp:792 +#: ../lib/Plugins/CCpp.cpp:818 msgid "Getting local universal unique identification..." msgstr "Verkrijgen van locale universele unieke identificatie..." -#: ../lib/Plugins/CCpp.cpp:811 +#: ../lib/Plugins/CCpp.cpp:837 msgid "Getting global universal unique identification..." msgstr "Verkrijgen van golbale universele unieke identificatie..." -#: ../lib/Plugins/CCpp.cpp:856 +#: ../lib/Plugins/CCpp.cpp:882 msgid "Starting report creation..." msgstr "Beginnen met rapport aanmaken..." -#: ../lib/Plugins/CCpp.cpp:886 +#: ../lib/Plugins/CCpp.cpp:912 msgid "Skipping debuginfo installation" msgstr "Sla debuginfo installatie over" @@ -523,7 +530,7 @@ msgstr "Sla debuginfo installatie over" msgid "Creating and submitting a report..." msgstr "Aanmaken en indienen van rapport..." -#: ../lib/Plugins/Logger.cpp:57 ../lib/Plugins/Mailx.cpp:124 +#: ../lib/Plugins/Logger.cpp:65 ../lib/Plugins/Mailx.cpp:124 msgid "Creating a report..." msgstr "Rapport aanmaken..." @@ -531,7 +538,7 @@ msgstr "Rapport aanmaken..." msgid "Executing RunApp plugin..." msgstr "RunApp plugin draaien..." -#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:381 +#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:384 msgid "FileTransfer: URL not specified" msgstr "Bestandsoverdracht: URL niet opgegeven" @@ -575,75 +582,3 @@ msgstr "sosreport draaien: %s" msgid "done running sosreport" msgstr "klaar met het draaien van sosreport" -#~ msgid "gtk-refresh" -#~ msgstr "gtk-refresh" - -#~ msgid "Binary file %s will not be reported." -#~ msgstr "Binair bestand %s wordt niet gerapporteerd." - -#~ msgid "Check CC and add coment +1..." -#~ msgstr "Controleer CC en voeg commentaar toe +1..." - -#~ msgid "Creating an archive..." -#~ msgstr "Aanmaken van een archief..." - -#~ msgid "Pending events: %i" -#~ msgstr "Gebeurtenissen in behandeling: %i" - -#~ msgid "Can't create menu from the description, popup won't be available!\n" -#~ msgstr "" -#~ "Kan geen menu maken van de beschrijving, pop-up zal niet beschikbaar " -#~ "zijn!\n" - -#~ msgid "Getting local/global universal unique identification..." -#~ msgstr "Verkrijgen van locale/globale universele unieke identificatie..." - -#~ msgid "" -#~ "Error while opening plugin settings UI: \n" -#~ "\n" -#~ "%s" -#~ msgstr "" -#~ "Fout tijdens het openen van plugin instellingen UI: \n" -#~ "\n" -#~ "%s" - -#~ msgid "unknown response from settings dialog" -#~ msgstr "onbekende reactie van de instellingen dialoog" - -#~ msgid "Applet is already running." -#~ msgstr "Applet draait al." - -#~ msgid "" -#~ "This is default handler, you should register your own with " -#~ "ConnectCrashHandler" -#~ msgstr "" -#~ "Dit is de standaard afhandeling, je moet je eigen registreren bij " -#~ "ConnectCrashHandler" - -#~ msgid "" -#~ "This is default handler, you should register your own with " -#~ "ConnectQuotaExceedHandler" -#~ msgstr "" -#~ "Dit is de standaard afhandeling, je moet jouw eigen registreren met " -#~ "ConnectQuotaExceedHandler" - -#~ msgid "Out of memory" -#~ msgstr "Geen geheugen beschikbaar" - -#~ msgid "Can't load gui description for SettingsDialog!" -#~ msgstr "Kan gui beschrijving voor SettingsDialog niet laden!" - -#~ msgid "Name" -#~ msgstr "Naam" - -#~ msgid "Enabled" -#~ msgstr "Aangezet" - -#~ msgid "Can't get plugin description" -#~ msgstr "Kan plugin beschrijving niet krijgen." - -#~ msgid "Logging failed, trying to find a bug..." -#~ msgstr "Inloggen mislukte, probeer het probleem te vinden..." - -#~ msgid "Daemon is not running." -#~ msgstr "Daemon draait niet." @@ -2,20 +2,22 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # +#: ../src/Gui/CCReporterDialog.py:191 # Manoj Kumar Giri <mgiri@redhat.com>, 2009. msgid "" msgstr "" "Project-Id-Version: abrt.master.or\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-09-29 14:46+0200\n" -"PO-Revision-Date: 2009-09-25 17:46+0530\n" +"POT-Creation-Date: 2009-11-12 03:54+0000\n" +"PO-Revision-Date: 2009-11-12 18:06+0530\n" "Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n" "Language-Team: Oriya <oriya-it@googlegroups.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n\n" +"\n" "\n" "\n" "\n" @@ -28,39 +30,43 @@ msgstr "" "\n" "\n" -#: src/Gui/ABRTExceptions.py:4 +#: ../src/Gui/ABRTExceptions.py:6 msgid "Another client is already running, trying to wake it." msgstr "ଅନ୍ୟ ଏକ କ୍ଲାଏଣ୍ଟ ପୂର୍ବରୁ ଚାଲୁଅଛି, ଏହାକୁ ଜାଗ୍ରତ କରିବା ପାଇଁ ଚେଷ୍ଟା କରୁଅଛି।" -#: src/Gui/ABRTExceptions.py:10 +#: ../src/Gui/ABRTExceptions.py:13 msgid "Got unexpected data from daemon (is the database properly updated?)." msgstr "ଡେମନରୁ ଅପ୍ରତ୍ୟାଶିତ ତଥ୍ୟ ଗ୍ରହଣ କରୁଅଛି (ତଥ୍ୟାଧାରଟି ସଠିକ ଭାବରେ ଅଦ୍ୟତିତ ହୋଇଛି କି?)." -#: src/Gui/ABRTPlugin.py:26 +#: ../src/Gui/ABRTPlugin.py:55 msgid "Analyzer plugins" msgstr "ବିଶ୍ଳେଷକ ପ୍ଲଗଇନଗୁଡ଼ିକ" -#: src/Gui/ABRTPlugin.py:27 +#: ../src/Gui/ABRTPlugin.py:56 msgid "Action plugins" msgstr "କାର୍ଯ୍ୟ ପ୍ଲଗଇନଗୁଡ଼ିକ" -#: src/Gui/ABRTPlugin.py:28 +#: ../src/Gui/ABRTPlugin.py:57 msgid "Reporter plugins" msgstr "ଖବରକାରୀ ପ୍ଲଗଇନଗୁଡ଼ିକ" -#: src/Gui/ABRTPlugin.py:29 +#: ../src/Gui/ABRTPlugin.py:58 msgid "Database plugins" msgstr "ତଥ୍ୟାଧାର ପ୍ଲଗଇନଗୁଡ଼ିକ" -#: src/Gui/CCDBusBackend.py:143 -msgid "Can't connect to dbus" -msgstr "dbus ସହିତ ସଂଯୋଗ କରିପାରିବେ ନାହିଁ" +#: ../src/Gui/ABRTPlugin.py:97 +msgid "Plugin name is not set, can't load it's settings" +msgstr "ପ୍ଲଗଇନ ନାମକୁ ସେଟ କରାଯାଇନାହିଁ, ଏହାର ସଂରଚନାକୁ ଧାରଣ କରିପାରିବେ ନାହିଁ" + +#: ../src/Gui/CCDBusBackend.py:74 ../src/Gui/CCDBusBackend.py:97 +msgid "Can't connect to system dbus" +msgstr "ତନ୍ତ୍ର dbus ସହିତ ସଂଯୋଗ କରିପାରିବେ ନାହିଁ" -#: src/Gui/CCDBusBackend.py:169 -msgid "Please check if abrt daemon is running." -msgstr "abrt ଡେମନ ଚାଲୁଅଛି କି ନାହିଁ ଦୟାକରି ଯାଞ୍ଚକରନ୍ତୁ।" +#: ../src/Gui/CCDBusBackend.py:100 ../src/Gui/CCDBusBackend.py:103 +msgid "Please check if abrt daemon is running" +msgstr "abrt ଡେମନ ଚାଲୁଅଛି କି ନାହିଁ ଦୟାକରି ଯାଞ୍ଚକରନ୍ତୁ" -#: src/Gui/CCDBusBackend.py:187 +#: ../src/Gui/CCDBusBackend.py:155 msgid "" "Daemon did't return valid report info\n" "Debuginfo is missing?" @@ -68,27 +74,47 @@ msgstr "" "ଡେମନ ବୈଧ ବିବରଣୀ ସୂଚନା ଫେରାଇ ନଥାଏ\n" "ତ୍ରୁଟି ନିବାରଣ ସୂଚନା ଅନୁପସ୍ଥିତ କି?" -#: src/Gui/ccgui.glade:6 -msgid "Please wait.." -msgstr "ଦୟାକରି ଅପେକ୍ଷା କରନ୍ତୁ.." - -#: src/Gui/ccgui.glade:16 -msgid "Working..." -msgstr "କାମକରୁଛି ..." - -#: src/Gui/ccgui.glade:49 +#: ../src/Gui/ccgui.glade.h:1 ../src/Gui/report.glade.h:1 msgid " " msgstr " " -#: src/Gui/ccgui.glade:68 +#: ../src/Gui/ccgui.glade.h:2 +msgid "(C) 2009 Red Hat, Inc." +msgstr "(C) 2009 Red Hat, Inc." + +#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:244 +msgid "<b>Not reported!</b>" +msgstr "<b>ଖବର କରାହୋଇନଥିଲା!</b>" + +#: ../src/Gui/ccgui.glade.h:4 +msgid "<span color=\"white\">Description</span>" +msgstr "<span color=\"white\">ବର୍ଣ୍ଣନା</span>" + +#: ../src/Gui/ccgui.glade.h:5 msgid "About ABRT" msgstr "ABRT ବିଷୟରେ" -#: src/Gui/ccgui.glade:74 -msgid "(C) 2009 Red Hat, Inc." -msgstr "(C) 2009 Red Hat, Inc." +#: ../src/Gui/ccgui.glade.h:6 +msgid "Automatic Bug Reporting Tool" +msgstr "ସ୍ୱୟଂଚାଳିତ ତ୍ରୁଟି ନିବାରଣ ସାଧନ" -#: src/Gui/ccgui.glade:75 +#: ../src/Gui/ccgui.glade.h:7 +msgid "Delete" +msgstr "ଅପସାରଣ କରନ୍ତୁ" + +#: ../src/Gui/ccgui.glade.h:8 +msgid "Please wait.." +msgstr "ଦୟାକରି ଅପେକ୍ଷା କରନ୍ତୁ.." + +#: ../src/Gui/ccgui.glade.h:9 +msgid "Plugins" +msgstr "ପ୍ଲଗଇନଗୁଡ଼ିକ" + +#: ../src/Gui/ccgui.glade.h:10 ../src/Gui/report.glade.h:4 +msgid "Report" +msgstr "ରିପୋର୍ଟ" + +#: ../src/Gui/ccgui.glade.h:11 msgid "" "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 " @@ -114,68 +140,57 @@ msgstr "" " ଆପଣ ଏହି ପ୍ରୋଗ୍ରାମ ସହିତ ଗ୍ନୁ ସାଧାରଣ ସାର୍ବଜନୀନ ଅନୁମତି ପତ୍ର ପାଈଥିବେ. ଯଦି ପାଇନାହାନ୍ତି ତେବେ " "ଏହାକୁ ଦେଖନ୍ତୁ <http://www.gnu.org/licenses/>." -#: src/Gui/ccgui.glade:106 -msgid "Automatic Bug Reporting Tool" -msgstr "ସ୍ୱୟଂଚାଳିତ ତ୍ରୁଟି ନିବାରଣ ସାଧନ" - -#: src/Gui/ccgui.glade:118 -msgid "_File" -msgstr "ଫାଇଲ (_F)" +#: ../src/Gui/ccgui.glade.h:16 +msgid "Working..." +msgstr "କାମକରୁଛି ..." -#: src/Gui/ccgui.glade:138 +#: ../src/Gui/ccgui.glade.h:17 msgid "_Edit" msgstr "ସମ୍ପାଦନ କରନ୍ତୁ (_E)" -#: src/Gui/ccgui.glade:146 -msgid "Plugins" -msgstr "ପ୍ଲଗଇନଗୁଡ଼ିକ" +#: ../src/Gui/ccgui.glade.h:18 +msgid "_File" +msgstr "ଫାଇଲ (_F)" -#: src/Gui/ccgui.glade:164 +#: ../src/Gui/ccgui.glade.h:19 msgid "_Help" msgstr "ସହାୟତା (_H)" -#: src/Gui/ccgui.glade:194 src/Gui/ccgui.glade:195 -msgid "Delete" -msgstr "ଅପସାରଣ କରନ୍ତୁ" - -#: src/Gui/ccgui.glade:207 src/Gui/ccgui.glade:208 src/Gui/ccgui.glade:335 -#: src/Gui/report.glade:7 src/Gui/report.glade:24 -msgid "Report" -msgstr "ରିପୋର୍ଟ" - -#: src/Gui/ccgui.glade:255 -msgid "<span color=\"white\">Description</span>" -msgstr "<span color=\"white\">ବର୍ଣ୍ଣନା</span>" - -#: src/Gui/ccgui.glade:297 src/Gui/CCMainWindow.py:239 -msgid "<b>Not reported!</b>" -msgstr "<b>ଖବର କରାହୋଇନଥିଲା!</b>" - -#: src/Gui/CCMainWindow.py:80 +#. add pixbuff separatelly +#: ../src/Gui/CCMainWindow.py:80 msgid "Icon" msgstr "ଚିତ୍ର ସଂକେତ" -#: src/Gui/CCMainWindow.py:88 +#: ../src/Gui/CCMainWindow.py:88 msgid "Package" msgstr "ପ୍ଯାକେଜ" -#: src/Gui/CCMainWindow.py:89 +#: ../src/Gui/CCMainWindow.py:89 msgid "Application" msgstr "ପ୍ରୟୋଗ" -#: src/Gui/CCMainWindow.py:90 +#: ../src/Gui/CCMainWindow.py:90 msgid "Date" msgstr "ତାରିଖ" -#: src/Gui/CCMainWindow.py:91 -msgid "Crash Rate" -msgstr "କ୍ରାଷ ହାର" +#: ../src/Gui/CCMainWindow.py:91 +msgid "Crash count" +msgstr "କ୍ଷତି ହାର" -#: src/Gui/CCMainWindow.py:93 +#: ../src/Gui/CCMainWindow.py:93 msgid "User" msgstr "ଚାଳକ" -#: src/Gui/CCMainWindow.py:177 +#: ../src/Gui/CCMainWindow.py:160 +#, python-format +msgid "" +"Can't show the settings dialog\n" +"%s" +msgstr "" +"ସଂରଚନା ସଂଳାପକୁ ଦର୍ଶାଇପାରିବେ ନାହିଁ\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:181 #, python-format msgid "" "Unable to finish current task!\n" @@ -184,7 +199,7 @@ msgstr "" "ପ୍ରଚଳିତ କାର୍ଯ୍ୟକୁ ସମାପ୍ତ କରିବାରେ ଅସମର୍ଥ!\n" "%s" -#: src/Gui/CCMainWindow.py:194 +#: ../src/Gui/CCMainWindow.py:198 #, python-format msgid "" "Error while loading the dumplist, please check if abrt daemon is running\n" @@ -193,16 +208,16 @@ msgstr "" "dumplist କୁ ଧାରଣ କରିବା ସମୟରେ ତ୍ରୁଟି, abrt ଡେମନ ଚାଲୁଅଛି କି ନାହିଁ ଦୟାକରି ଯାଞ୍ଚ କରନ୍ତୁ\n" " %s" -#: src/Gui/CCMainWindow.py:204 +#: ../src/Gui/CCMainWindow.py:208 #, python-format msgid "Can't get username for uid %s" msgstr "uid %s ପାଇଁ ଚାଳକ ନାମ ପାଇବେ ନାହିଁ" -#: src/Gui/CCMainWindow.py:231 +#: ../src/Gui/CCMainWindow.py:236 msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n" msgstr "<b>ଏହି ନଷ୍ଟକୁ ଖବର କରାଯାଇଛି, ଆପଣ ସେହି ଖବରଗୁଡ଼ିକୁ ଏଠାରେ ପାଇପାରିବେ:</b>\n" -#: src/Gui/CCMainWindow.py:291 +#: ../src/Gui/CCMainWindow.py:296 msgid "" "Unable to get report!\n" "Debuginfo is missing?" @@ -210,7 +225,7 @@ msgstr "" "ବିବରଣୀ ପ୍ରାପ୍ତ କରିବାରେ ଅସମର୍ଥ!\n" "ତ୍ରୁଟି ନିବରଣୀ ସୂଚନା ଅନୁପସ୍ଥିତ ଅଛି କି?" -#: src/Gui/CCMainWindow.py:306 +#: ../src/Gui/CCMainWindow.py:314 #, python-format msgid "" "Reporting failed!\n" @@ -219,12 +234,41 @@ msgstr "" "ଖବର କରିବାରେ ବିଫଳ!\n" "%s" -#: src/Gui/CCMainWindow.py:338 +#: ../src/Gui/CCMainWindow.py:333 ../src/Gui/CCMainWindow.py:360 #, python-format msgid "Error getting the report: %s" msgstr "ବିବରଣୀ ପାଇବାରେ ତ୍ରୁଟି: %s" -#: src/Gui/CCReporterDialog.py:98 +#: ../src/Gui/CCReporterDialog.py:177 +msgid "Brief description how to reproduce this or what you did..." +msgstr "ଏହାକୁ କିପରି ପୁନଃପ୍ରାପ୍ତି କରାଯିବ ଏବଂ ଆପଣ କଣ କରିଥିଲେ ତାହା ବିଷୟରେ ବିସ୍ତୃତ ବିବରଣୀ ପ୍ରଦାନ କରନ୍ତୁ..." + +#: ../src/Gui/CCReporterDialog.py:219 +#, python-format +msgid "" +"Reporting disabled because the backtrace is unusable.\n" +"Please try to install debuginfo manually using command:<span color=\"blue\"> " +"debuginfo-install %s </span>\n" +"then use Refresh button to regenerate the backtrace." +msgstr "" +"ଖବର କରିବା ପ୍ରକ୍ରିୟାକୁ ନିଷ୍କ୍ରିୟ କରାଯାଇଛି କାରଣ ବ୍ୟାକଟ୍ରେସଟି ବ୍ୟବହାର ଉପଯୋଗୀ ନୁହଁ।\n" +"ଦୟାକରି ତ୍ରୁଟି ନିବାରଣ ସୂଚନାକୁ ଏହି ନିର୍ଦ୍ଦେଶକୁ ବ୍ୟବହାର କରି ହସ୍ତକୃତ ଭାବରେ ସ୍ଥାପନ କରନ୍ତୁ:<span color=\"blue\"> " +"debuginfo-install %s </span>\n" +"ତାପରେ ବ୍ୟାକଟ୍ରେସକୁ ପୁନଃନିର୍ମାଣ କରିବା ପାଇଁ ସତେଜନ କରିବା ବଟନକୁ ବ୍ୟବହାର କରନ୍ତୁ।" + +#: ../src/Gui/CCReporterDialog.py:221 +msgid "The bactrace is unusable, you can't report this!" +msgstr "ବ୍ୟାକ ଟ୍ରେଶଟି ବ୍ୟବହାର ଉପଯୋଗୀ ନୁହଁ, ଆପଣ ଏହାକୁ ଖବର କରି ପାରିବେ ନାହିଁ!" + +#: ../src/Gui/CCReporterDialog.py:227 +msgid "" +"The bactrace is incomplete, please make sure you provide good steps to " +"reproduce." +msgstr "" +"ବ୍ୟାକଟ୍ରେସଟି ସମ୍ପୂର୍ଣ୍ଣ ହୋଇନାହିଁ, ଦୟାକରି ନିଶ୍ଚିତ କରନ୍ତୁ ଯେ ଆପଣ ପୁନଃ ଉତ୍ପାଦନ କରିବା ପାଇଁ " +"ଉତ୍ତମ ପଦକ୍ଷେପ ପ୍ରଦାନ କରିଛନ୍ତି।" + +#: ../src/Gui/CCReporterDialog.py:272 #, python-format msgid "" "<b>WARNING</b>, you're about to send data which might contain sensitive " @@ -234,191 +278,186 @@ msgstr "" "<b>ଚେତାବନୀ</b>, ଆପଣ ତଥ୍ୟ ପଠାଇବାକୁ ଯାଉଛନ୍ତି ଯାହାକି ସମ୍ବେଦନଶୀଳ ସୂଚନା ଧାରଣ କରିଥାଇପାରେ।\n" "ଆପଣ ପ୍ରକୃତରେ ପଠାଇବାକୁ ଚାହୁଁଛନ୍ତି କି <b>%s</b>?\n" -#: src/Gui/CCReporterDialog.py:111 -msgid "Brief description how to reproduce this or what you did..." -msgstr "" -"ଏହାକୁ କିପରି ପୁନଃପ୍ରାପ୍ତି କରାଯିବ ଏବଂ ଆପଣ କଣ କରିଥିଲେ ତାହା ବିଷୟରେ ବିସ୍ତୃତ ବିବରଣୀ ପ୍ରଦାନ କରନ୍ତୁ..." - -#: src/Gui/dialogs.glade:7 +#: ../src/Gui/dialogs.glade.h:1 msgid "Report done" msgstr "ବିବରଣୀ ସମାପ୍ତ ହୋଇଛି" -#: src/Gui/dialogs.glade:47 src/Gui/settings.glade:695 -#: src/Gui/settings.glade:785 +#: ../src/Gui/dialogs.glade.h:2 ../src/Gui/settings.glade.h:27 msgid "gtk-ok" msgstr "gtk-ok" -#: src/Gui/PluginSettingsUI.py:17 +#: ../src/Gui/PluginSettingsUI.py:18 msgid "Can't find PluginDialog widget in UI description!" msgstr "UI ବର୍ଣ୍ଣନାରେ PluginDialog ୱିଜେଟ ଖୋଜିପାଇଲା ନାହିଁ!" -#: src/Gui/PluginSettingsUI.py:21 +#. we shouldn't get here, but just to be safe +#: ../src/Gui/PluginSettingsUI.py:24 #, python-format msgid "No UI for plugin %s" msgstr "ପ୍ଲଗଇନ %s ପାଇଁ କୌଣସି UI ନାହିଁ" -#: src/Gui/PluginSettingsUI.py:38 src/Gui/PluginSettingsUI.py:64 +#: ../src/Gui/PluginSettingsUI.py:55 ../src/Gui/PluginSettingsUI.py:81 msgid "combo box is not implemented" msgstr "କୋମ୍ବୋ ବାକ୍ସଟି କାର୍ଯ୍ୟକାରୀ ହୋଇନାହିଁ" -#: src/Gui/PluginSettingsUI.py:47 +#: ../src/Gui/PluginSettingsUI.py:64 msgid "Nothing to hydrate!" msgstr "hydrate କରିବା ପାଇଁ କିଛି ନାହିଁ!" -#: src/Gui/report.glade:64 +#: ../src/Gui/report.glade.h:2 msgid "Comment" msgstr "ଟିପ୍ପଣୀ" -#: src/Gui/report.glade:104 src/Gui/settings.glade:682 -#: src/Gui/settings.glade:797 -msgid "gtk-cancel" -msgstr "gtk-cancel" +#: ../src/Gui/report.glade.h:3 +msgid "How to reproduce (in a few simple steps)" +msgstr "କିପରି ପୁନଃ ଉତ୍ପାଦନ କରିବି (କିଛି ସରଳ ପଦକ୍ଷେପରେ)" -#: src/Gui/report.glade:119 +#: ../src/Gui/report.glade.h:5 msgid "Send" msgstr "ପଠାନ୍ତୁ" -#: src/Gui/SettingsDialog.py:34 src/Gui/SettingsDialog.py:51 +#: ../src/Gui/SettingsDialog.py:33 ../src/Gui/SettingsDialog.py:50 msgid "<b>Select plugin</b>" msgstr "<b>ପ୍ଲଗଇନ ବାଛନ୍ତୁ</b>" -#: src/Gui/SettingsDialog.py:37 +#: ../src/Gui/SettingsDialog.py:36 msgid "<b>Select database backend</b>" msgstr "<b>ତଥ୍ୟାଧାର ପୃଷ୍ଠଭୂମି ବାଛନ୍ତୁ</b>" -#: src/Gui/SettingsDialog.py:165 +#: ../src/Gui/SettingsDialog.py:165 msgid "Remove this job" msgstr "ଏହି କାର୍ଯ୍ୟକୁ କାଢ଼ନ୍ତୁ" -#: src/Gui/SettingsDialog.py:208 +#: ../src/Gui/SettingsDialog.py:208 msgid "Remove this action" msgstr "ଏହି କାର୍ଯ୍ୟକୁ କାଢ଼ୁଅଛି" -#: src/Gui/settings.glade:6 -msgid "Settings" -msgstr "ସଂରଚନାଗୁଡ଼ିକ" +#: ../src/Gui/settings.glade.h:1 +msgid "<b>Analyzer plugin</b>" +msgstr "<b>ବିଶ୍ଳେଷକ ପ୍ଲଗଇନଗୁଡ଼ିକ</b>" -#: src/Gui/settings.glade:46 src/Gui/settings.glade:55 -#: src/Gui/settings.glade:107 src/Gui/settings.glade:120 -#: src/Gui/settings.glade:133 -msgid "Nothing selected" -msgstr "କିଛି ବଛାହୋଇନାହିଁ" +#: ../src/Gui/settings.glade.h:2 +msgid "<b>Associated action</b>" +msgstr "<b>ସଂଶ୍ଳିଷ୍ଟ କାର୍ଯ୍ୟ</b>" -#: src/Gui/settings.glade:72 -msgid "Web Site:" -msgstr "ୱେବ ସାଇଟ:" +#: ../src/Gui/settings.glade.h:3 +msgid "<b>Plugin</b>" +msgstr "<b>ପ୍ଲଗଇନ</b>" + +#: ../src/Gui/settings.glade.h:4 +msgid "<b>Time (or period)</b>" +msgstr "<b>ସମୟ (ଅଥବା ଅବଧି)</b>" + +#: ../src/Gui/settings.glade.h:5 +msgid "Analyzers, Actions, Reporters" +msgstr "ବିଶ୍ଳେଷକମାନେ, କାର୍ଯ୍ୟଗୁଡ଼ିକ, ବିବରଣୀଗୁଡ଼ିକ" -#: src/Gui/settings.glade:84 +#: ../src/Gui/settings.glade.h:6 msgid "Author:" msgstr "ଲେଖକ:" -#: src/Gui/settings.glade:97 -msgid "Version:" -msgstr "ସଂସ୍କରଣ:" - -#: src/Gui/settings.glade:152 -msgid "Plugin Details" -msgstr "ପ୍ଲଗଇନ ବିବରଣୀଗୁଡ଼ିକ" +#: ../src/Gui/settings.glade.h:7 +msgid "Blacklisted packages: " +msgstr "ବାରଣ ହୋଇଥିବା ପ୍ୟାକେଜଗୁଡ଼ିକ: " -#: src/Gui/settings.glade:179 +#: ../src/Gui/settings.glade.h:8 msgid "C_onfigure plugin" msgstr "ପ୍ଲଗଇନକୁ ବିନ୍ୟାସ କରନ୍ତୁ (_o)" -#: src/Gui/settings.glade:191 -msgid "gtk-close" -msgstr "gtk-close" - -#: src/Gui/settings.glade:221 -msgid "Global Settings" -msgstr "ସର୍ବସାଧାରଣ ସଂରଚନାଗୁଡ଼ିକ" - -#: src/Gui/settings.glade:240 +#: ../src/Gui/settings.glade.h:9 msgid "Check package GPG signature" msgstr "ପ୍ୟାକେଜ GPG ହସ୍ତାକ୍ଷରକୁ ଯାଞ୍ଚକରନ୍ତୁ" -#: src/Gui/settings.glade:256 +#: ../src/Gui/settings.glade.h:10 +msgid "Common" +msgstr "ସାଧାରଣ" + +#: ../src/Gui/settings.glade.h:11 +msgid "Cron" +msgstr "କ୍ରନ" + +#: ../src/Gui/settings.glade.h:12 msgid "Database backend: " msgstr "ତଥ୍ୟାଧାର ପୃଷ୍ଠଭୂମି:" -#: src/Gui/settings.glade:281 -msgid "Blacklisted packages: " -msgstr "ବାରଣ ହୋଇଥିବା ପ୍ୟାକେଜଗୁଡ଼ିକ: " +#: ../src/Gui/settings.glade.h:13 +msgid "Edit blacklisted packages" +msgstr "ବାରଣ ହୋଇଥିବା ପ୍ୟାକେଜଗୁଡ଼ିକୁ ସମ୍ପାଦନ କରନ୍ତୁ" -#: src/Gui/settings.glade:294 -msgid "Max coredump storage size(MB):" -msgstr "ସର୍ବାଧିକ କୋରଡମ୍ପ ଭଣ୍ଡାର ଆକାର (MB):" +#: ../src/Gui/settings.glade.h:14 +msgid "GPG Keys" +msgstr "GPG କିଗୁଡ଼ିକ" -#: src/Gui/settings.glade:307 +#: ../src/Gui/settings.glade.h:15 msgid "GPG keys: " msgstr "GPG କିଗୁଡ଼ିକ:" -#: src/Gui/settings.glade:349 -msgid "Edit blacklisted packages" -msgstr "ବାରଣ ହୋଇଥିବା ପ୍ୟାକେଜଗୁଡ଼ିକୁ ସମ୍ପାଦନ କରନ୍ତୁ" +#: ../src/Gui/settings.glade.h:16 +msgid "Global Settings" +msgstr "ସର୍ବସାଧାରଣ ସଂରଚନାଗୁଡ଼ିକ" -#: src/Gui/settings.glade:408 -msgid "Common" -msgstr "ସାଧାରଣ" +#: ../src/Gui/settings.glade.h:17 +msgid "Max coredump storage size(MB):" +msgstr "ସର୍ବାଧିକ କୋରଡମ୍ପ ଭଣ୍ଡାର ଆକାର (MB):" -#: src/Gui/settings.glade:438 -msgid "<b>Plugin</b>" -msgstr "<b>ପ୍ଲଗଇନ</b>" +#: ../src/Gui/settings.glade.h:18 +msgid "Nothing selected" +msgstr "କିଛି ବଛାହୋଇନାହିଁ" -#: src/Gui/settings.glade:448 -msgid "<b>Time (or period)</b>" -msgstr "<b>ସମୟ (ଅଥବା ଅବଧି)</b>" +#: ../src/Gui/settings.glade.h:19 +msgid "Plugin Details" +msgstr "ପ୍ଲଗଇନ ବିବରଣୀଗୁଡ଼ିକ" -#: src/Gui/settings.glade:510 src/Gui/settings.glade:624 -#: src/Gui/settings.glade:761 -msgid "gtk-add" -msgstr "gtk-add" +#: ../src/Gui/settings.glade.h:20 +msgid "Settings" +msgstr "ସଂରଚନାଗୁଡ଼ିକ" -#: src/Gui/settings.glade:534 -msgid "Cron" -msgstr "କ୍ରନ" +#: ../src/Gui/settings.glade.h:21 +msgid "This function is not implemented yet!" +msgstr "ଏହି କାର୍ଯ୍ୟଟି ଏପର୍ଯ୍ୟନ୍ତ କାର୍ଯ୍ୟକାରୀ ହୋଇନାହିଁ!" -#: src/Gui/settings.glade:551 -msgid "<b>Analyzer plugin</b>" -msgstr "<b>ବିଶ୍ଳେଷକ ପ୍ଲଗଇନଗୁଡ଼ିକ</b>" +#: ../src/Gui/settings.glade.h:22 +msgid "Version:" +msgstr "ସଂସ୍କରଣ:" -#: src/Gui/settings.glade:561 -msgid "<b>Associated action</b>" -msgstr "<b>ସଂଶ୍ଳିଷ୍ଟ କାର୍ଯ୍ୟ</b>" +#: ../src/Gui/settings.glade.h:23 +msgid "Web Site:" +msgstr "ୱେବ ସାଇଟ:" -#: src/Gui/settings.glade:648 -msgid "Analyzers, Actions, Reporters" -msgstr "ବିଶ୍ଳେଷକମାନେ, କାର୍ଯ୍ୟଗୁଡ଼ିକ, ବିବରଣୀଗୁଡ଼ିକ" +#: ../src/Gui/settings.glade.h:24 +msgid "gtk-add" +msgstr "gtk-add" -#: src/Gui/settings.glade:700 -msgid "This function is not implemented yet!" -msgstr "ଏହି କାର୍ଯ୍ୟଟି ଏପର୍ଯ୍ୟନ୍ତ କାର୍ଯ୍ୟକାରୀ ହୋଇନାହିଁ!" +#: ../src/Gui/settings.glade.h:25 +msgid "gtk-cancel" +msgstr "gtk-cancel" -#: src/Gui/settings.glade:738 -msgid "GPG Keys" -msgstr "GPG କିଗୁଡ଼ିକ" +#: ../src/Gui/settings.glade.h:26 +msgid "gtk-close" +msgstr "gtk-close" -#: src/Gui/settings.glade:773 +#: ../src/Gui/settings.glade.h:28 msgid "gtk-remove" msgstr "gtk-remove" -#: src/Applet/Applet.cpp:71 +#: ../src/Applet/Applet.cpp:79 #, c-format msgid "A crash in package %s has been detected" msgstr "ପ୍ୟାକେଜ %s ରେ ଗୋଟିଏ ବିନାଶ ଚିହ୍ନାପଡ଼ିଛି" -#: src/Applet/Applet.cpp:130 +#: ../src/Applet/Applet.cpp:138 msgid "ABRT service has been started" msgstr "ABRT ସର୍ଭିସ ଆରମ୍ଭ ହୋଇସାରିଛି" -#: src/Applet/Applet.cpp:132 src/Applet/Applet.cpp:246 +#: ../src/Applet/Applet.cpp:140 ../src/Applet/Applet.cpp:254 msgid "ABRT service is not running" msgstr "ABRT ସର୍ଭିସଟି ଚାଲୁନାହିଁ" -#: src/Applet/CCApplet.cpp:185 +#: ../src/Applet/CCApplet.cpp:185 msgid "Warning" msgstr "ଚେତାବନୀ" -#: src/Daemon/Daemon.cpp:546 +#: ../src/Daemon/Daemon.cpp:520 msgid "" "Report size exceeded the quota. Please check system's MaxCrashReportsSize " "value in abrt.conf." @@ -426,121 +465,125 @@ msgstr "" "ବିବରଣୀ ଆକାର ସଂରକ୍ଷଣକୁ ଅତିକ୍ରମ କରିଛି। ଦୟାକରି ତନ୍ତ୍ରର MaxCrashReportsSize ମୂଲ୍ୟକୁ abrt.conf " "ରେ ଯାଞ୍ଚ କରନ୍ତୁ।" -#: lib/Plugins/Bugzilla.cpp:83 -msgid "Empty login and password. Please check Bugzilla.conf" -msgstr "ଖାଲି ଲଗଇନ ଏବଂ ପ୍ରବେଶ ସଂକେତ। ଦୟାକରି Bugzilla.conf କୁ ଯାଞ୍ଚ କରନ୍ତୁ" - -#: lib/Plugins/Bugzilla.cpp:227 -msgid "Bug is already reported: " -msgstr "ତ୍ରୁଟିକୁ ପୂର୍ବରୁ ଖବର କରାଯାଇଛି: " - -#: lib/Plugins/Bugzilla.cpp:282 +#: ../lib/Plugins/Bugzilla.cpp:209 #, c-format -msgid "Binary file %s will not be reported." -msgstr "ଦ୍ୱିମିକ ଫାଇଲ %s କୁ ଖବର କରାଯିବ ନାହିଁ।" +msgid "Bug is already reported: %i" +msgstr "ତ୍ରୁଟିକୁ ପୂର୍ବରୁ ଖବର କରାଯାଇଛି: %i" -#: lib/Plugins/Bugzilla.cpp:352 -msgid "New bug id: " -msgstr "ନୂତନ ତ୍ରୁଟି id: " +#: ../lib/Plugins/Bugzilla.cpp:271 +#, c-format +msgid "New bug id: %i" +msgstr "ନୂତନ ତ୍ରୁଟି id: %i" -#: lib/Plugins/Bugzilla.cpp:421 +#: ../lib/Plugins/Bugzilla.cpp:364 msgid "Checking for duplicates..." msgstr "ନକଲିଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରୁଅଛି..." -#: lib/Plugins/Bugzilla.cpp:424 lib/Plugins/Bugzilla.cpp:436 +#: ../lib/Plugins/Bugzilla.cpp:367 msgid "Logging into bugzilla..." msgstr "ବଗଜିଲ୍ଲାରେ ଲଗଇନ କରୁଅଛି..." -#: lib/Plugins/Bugzilla.cpp:427 -msgid "Check CC and add coment +1..." -msgstr "CC ଯାଞ୍ଚ କରନ୍ତୁ ଏବଂ ଟିପ୍ପଣୀ ଯୋଗକରନ୍ତୁ +1..." +#: ../lib/Plugins/Bugzilla.cpp:371 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "ଖାଲି ଲଗଇନ ଏବଂ ପ୍ରବେଶ ସଂକେତ। ଦୟାକରି Bugzilla.conf କୁ ଯାଞ୍ଚ କରନ୍ତୁ" + +#: ../lib/Plugins/Bugzilla.cpp:377 +msgid "Checking CC..." +msgstr "CC କୁ ଯାଞ୍ଚ କରୁଅଛି..." -#: lib/Plugins/Bugzilla.cpp:448 +#: ../lib/Plugins/Bugzilla.cpp:386 msgid "Creating new bug..." msgstr "ନୂତନ ତ୍ରୁଟି ନିର୍ମାଣ କରୁଅଛି..." -#: lib/Plugins/Bugzilla.cpp:453 +#: ../lib/Plugins/Bugzilla.cpp:390 msgid "Logging out..." msgstr "ଲଗଆଉଟ କରୁଅଛି..." -#: lib/Plugins/Kerneloops.cpp:37 +#: ../lib/Plugins/Kerneloops.cpp:37 msgid "Getting local universal unique identification" msgstr "ସ୍ଥାନୀୟ ଜାଗତିକ ଅନନ୍ୟ ପରିଚୟକୁ ଗ୍ରହଣ କରୁଅଛି" -#: lib/Plugins/CCpp.cpp:146 +#: ../lib/Plugins/CCpp.cpp:254 msgid "Getting backtrace..." msgstr "ପଛୁଆ ଯାଞ୍ଚ ବିବରଣୀ ଗ୍ରହଣ କରୁଅଛି..." -#: lib/Plugins/CCpp.cpp:410 +#: ../lib/Plugins/CCpp.cpp:552 ../lib/Plugins/CCpp.cpp:679 msgid "Searching for debug-info packages..." msgstr "ତ୍ରୁଟି-ନିବାରଣ ପ୍ୟାକେଜଗୁଡ଼ିକୁ ସନ୍ଧାନ କରୁଅଛି..." -#: lib/Plugins/CCpp.cpp:444 +#: ../lib/Plugins/CCpp.cpp:614 ../lib/Plugins/CCpp.cpp:713 msgid "Downloading and installing debug-info packages..." msgstr "ତ୍ରୁଟି-ନିବାରଣ ପ୍ୟାକେଜଗୁଡ଼ିକୁ ଆହରଣ କରୁଅଛି ଏବଂ ସ୍ଥାପନ କରୁଅଛି..." -#: lib/Plugins/CCpp.cpp:506 +#: ../lib/Plugins/CCpp.cpp:818 msgid "Getting local universal unique identification..." msgstr "ସ୍ଥାନୀୟ ଜାଗତିକ ଅନନ୍ୟ ପରିଚୟକୁ ଗ୍ରହଣ କରୁଅଛି..." -#: lib/Plugins/CCpp.cpp:525 +#: ../lib/Plugins/CCpp.cpp:837 msgid "Getting global universal unique identification..." msgstr "ଜାଗତିକ ଅନନ୍ୟ ପରିଚୟକୁ ଗ୍ରହଣ କରୁଅଛି..." -#: lib/Plugins/CCpp.cpp:576 +#: ../lib/Plugins/CCpp.cpp:882 msgid "Starting report creation..." msgstr "ବିବରଣୀ ନିର୍ମାଣ ଆରମ୍ଭ କରୁଅଛି..." -#: lib/Plugins/CCpp.cpp:605 +#: ../lib/Plugins/CCpp.cpp:912 msgid "Skipping debuginfo installation" msgstr "ତ୍ରୁଟିନିବାରଣ ସୂଚନା ସ୍ଥାପନକୁ ଏଡ଼ାଇ ଦେଉଛି" -#: lib/Plugins/KerneloopsReporter.cpp:101 +#: ../lib/Plugins/KerneloopsReporter.cpp:102 msgid "Creating and submitting a report..." msgstr "ବିବରଣୀ ନିର୍ମାଣ କରି ଦାଖଲ କରୁଅଛି..." -#: lib/Plugins/Logger.cpp:58 lib/Plugins/Mailx.cpp:123 +#: ../lib/Plugins/Logger.cpp:65 ../lib/Plugins/Mailx.cpp:124 msgid "Creating a report..." msgstr "ବିବରଣୀ ନିର୍ମାଣ କରୁଅଛି..." -#: lib/Plugins/RunApp.cpp:62 +#: ../lib/Plugins/RunApp.cpp:64 msgid "Executing RunApp plugin..." msgstr "RunApp ପ୍ଲଗଇନକୁ ନିଷ୍ପାଦନ କରୁଅଛି..." -#: lib/Plugins/FileTransfer.cpp:60 lib/Plugins/FileTransfer.cpp:355 +#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:384 msgid "FileTransfer: URL not specified" msgstr "ଫାଇଲ ପରିବହନ: URL ଉଲ୍ଲେଖ କରାହୋଇନାହିଁ" -#: lib/Plugins/FileTransfer.cpp:77 +#: ../lib/Plugins/FileTransfer.cpp:67 #, c-format -msgid "Sending archive %s via %s" -msgstr "ଅଭିଲେଖ %s କୁ %s ମାଧ୍ଯମରେ ପଠାଉଛି" +msgid "Sending archive %s to %s" +msgstr "ଅଭିଲେଖ %s କୁ %s ମଧ୍ଯକୁ ପଠାଉଛି" -#: lib/Plugins/FileTransfer.cpp:284 +#: ../lib/Plugins/FileTransfer.cpp:309 msgid "File Transfer: Creating a report..." msgstr "ଫାଇଲ ପରିବହନ: ଗୋଟିଏ ବିବରଣୀ ନିର୍ମାଣ କରୁଅଛି..." -#: lib/Plugins/FileTransfer.cpp:305 lib/Plugins/FileTransfer.cpp:334 -msgid "CFileTransfer::Run(): Cannot create and send an archive: " -msgstr "" -"CFileTransfer::Run(): ଗୋଟିଏ ଅଭିଲେଖ ନିର୍ମାଣ କରି ପାରିବେ ନାହିଁ କିମ୍ବା ପଠାଇପାରିବେ ନାହିଁ: " +#: ../lib/Plugins/FileTransfer.cpp:334 +#, c-format +msgid "Can't create and send an archive: %s" +msgstr "ଗୋଟିଏ ଅଭିଲେଖ ନିର୍ମାଣ କରି ପାରିବେ ନାହିଁ କିମ୍ବା ପଠାଇପାରିବେ ନାହିଁ: %s" + +#: ../lib/Plugins/FileTransfer.cpp:359 +#, c-format +msgid "Can't create and send an archive %s" +msgstr "ଗୋଟିଏ ଅଭିଲେଖ ନିର୍ମାଣ କରି ପାରିବେ ନାହିଁ କିମ୍ବା ପଠାଇପାରିବେ ନାହିଁ: %s" -#: lib/Plugins/KerneloopsScanner.cpp:79 +#: ../lib/Plugins/KerneloopsScanner.cpp:84 msgid "Creating kernel oops crash reports..." msgstr "କର୍ଣ୍ଣଲ oops ନଷ୍ଟ ବିବରଣୀଗୁଡ଼ିକୁ ନିର୍ମାଣ କରୁଅଛି..." -#: lib/Plugins/Mailx.cpp:109 +#: ../lib/Plugins/Mailx.cpp:109 msgid "Sending an email..." msgstr "ଗୋଟିଏ ଇମେଲ ପଠାଉଅଛି..." -#: lib/Plugins/SOSreport.cpp:113 +#: ../lib/Plugins/SOSreport.cpp:100 msgid "Executing SOSreport plugin..." msgstr "SOSreport ପ୍ଲଗଇନକୁ ନିଷ୍ପାଦନ କରୁଅଛି..." -#: lib/Plugins/SOSreport.cpp:135 -msgid "running sosreport: " -msgstr "sosreport ଚାଲୁଅଛି: " +#: ../lib/Plugins/SOSreport.cpp:122 +#, c-format +msgid "running sosreport: %s" +msgstr "sosreport ଚାଲୁଅଛି: %s" -#: lib/Plugins/SOSreport.cpp:150 +#: ../lib/Plugins/SOSreport.cpp:137 msgid "done running sosreport" msgstr "sosreport ଚଲାଇବା ସମାପ୍ତ ହେଲା" + @@ -2,16 +2,17 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # +#: ../src/Gui/CCReporterDialog.py:191 # Jaswinder Singh <jsingh@redhat.com>, 2009. # A S Alam <aalam@users.sf.net>, 2009. msgid "" msgstr "" "Project-Id-Version: abrt.master.pa\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-11-07 09:49+0000\n" -"PO-Revision-Date: 2009-11-07 18:51+0530\n" -"Last-Translator: A S Alam <aalam@users.sf.net>\n" -"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n" +"POT-Creation-Date: 2009-11-12 03:54+0000\n" +"PO-Revision-Date: 2009-11-12 11:27+0530\n" +"Last-Translator: Jaswinder Singh <jsingh@redhat.com>\n" +"Language-Team: Punjabi/Panjabi <kde-i18n-doc@kde.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -98,7 +99,7 @@ msgstr "ਉਡੀਕੋ ਜੀ..." msgid "Plugins" msgstr "ਪਲੱਗਇਨ" -#: ../src/Gui/ccgui.glade.h:10 ../src/Gui/report.glade.h:3 +#: ../src/Gui/ccgui.glade.h:10 ../src/Gui/report.glade.h:4 msgid "Report" msgstr "ਰਿਪੋਰਟ" @@ -162,8 +163,8 @@ msgid "Date" msgstr "ਮਿਤੀ" #: ../src/Gui/CCMainWindow.py:91 -msgid "Crash Rate" -msgstr "ਕਰੈਸ਼ ਰੇਟ" +msgid "Crash count" +msgstr "ਕਰੈਸ਼ ਕਾਊਂਟ" #: ../src/Gui/CCMainWindow.py:93 msgid "User" @@ -227,34 +228,32 @@ msgstr "" msgid "Error getting the report: %s" msgstr "ਰਿਪੋਰਟ ਲੈਣ ਵੇਲੇ ਗਲਤੀ: %s" -#: ../src/Gui/CCReporterDialog.py:173 +#: ../src/Gui/CCReporterDialog.py:177 msgid "Brief description how to reproduce this or what you did..." msgstr "ਇਸ ਨੂੰ ਪੈਦਾ ਕਰਨ ਬਾਰੇ ਸੰਖੇਪ ਜਾਣਕਾਰੀ ਜਾਂ ਤੁਸੀਂ ਕੀ ਕੀਤਾ ਹੈ..." -#: ../src/Gui/CCReporterDialog.py:201 -#, python-format +#: ../src/Gui/CCReporterDialog.py:219, python-format msgid "" -"Reporting disabled because the backtrace is unusable!\n" +"Reporting disabled because the backtrace is unusable.\n" "Please try to install debuginfo manually using command:<span color=\"blue\"> " "debuginfo-install %s </span>\n" "then use Refresh button to regenerate the backtrace." msgstr "" -"ਰਿਪੋਰਟ ਦੇਣੀ ਆਯੋਗ ਹੈ, ਕਿਉਂਕਿ ਬੈਕਟਰੇਸ ਬੇਕਾਰ ਹੈ!\n" -"<span color=\"blue\"> debuginfo-install %s </span>: ਕਮਾਂਡ ਦੀ ਵਰਤੋਂ " -"ਕਰਕੇ ਡੀਬੱਗ-ਜਾਣਕਾਰੀ ਇੰਸਟਾਲ ਕਰਕੇ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ\n" -"ਤਦ ਬੈਕਟਰੇਸ ਮੁੜ-ਬਣਾਉਣ ਲਈ ਤਾਜ਼ਾ ਕਰੋ ਬਟਨ ਵਰਤੋਂ।" +"ਰਿਪੋਰਟ ਦੇਣੀ ਆਯੋਗ ਹੈ ਕਿਉਂਕਿ ਬੈਕਟਰੇਸ ਬੇਕਾਰ ਹੈ!\n" +"ਇਸ ਕਮਾਂਡ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਡੀਬੱਗ-ਜਾਣਕਾਰੀ ਇੰਸਟਾਲ ਕਰਕੇ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ: <span color=\"blue\"> " +"debuginfo-install %s </span>\n ਤਦ ਬੈਕਟਰੇਸ ਮੁੜ-ਬਣਾਉਣ ਲਈ ਤਾਜ਼ਾ ਕਰੋ ਬਟਨ ਵਰਤੋਂ।" -#: ../src/Gui/CCReporterDialog.py:203 +#: ../src/Gui/CCReporterDialog.py:221 msgid "The bactrace is unusable, you can't report this!" msgstr "ਬੈਕਟਰੇਸ ਬੇਕਾਰ ਹੈ, ਤੁਸੀਂ ਇਹ ਰਿਪੋਰਟ ਨਹੀਂ ਭੇਜ ਸਕਦੇ ਹੋ!" -#: ../src/Gui/CCReporterDialog.py:209 +#: ../src/Gui/CCReporterDialog.py:227 msgid "" "The bactrace is incomplete, please make sure you provide good steps to " "reproduce." msgstr "ਬੈਕਟਰੇਸ ਅਧੂਰਾ ਹੈ, ਯਕੀਨੀ ਬਣਾਉ ਕਿ ਤੁਸੀਂ ਇਹ ਬਣਾਉਣ ਲਈ ਠੀਕ ਕਦਮ ਚੁੱਕੇ ਹਨ।" -#: ../src/Gui/CCReporterDialog.py:247 +#: ../src/Gui/CCReporterDialog.py:272 #, python-format msgid "" "<b>WARNING</b>, you're about to send data which might contain sensitive " @@ -294,7 +293,11 @@ msgstr "ਹਾਈਡਰੇਟ ਕਰਨ ਲਈ ਕੁਝ ਨਹੀਂ!" msgid "Comment" msgstr "ਟਿੱਪਣੀ" -#: ../src/Gui/report.glade.h:4 +#: ../src/Gui/report.glade.h:3 +msgid "How to reproduce (in a few simple steps)" +msgstr "ਮੁੜ-ਪੈਦਾ ਕਿਵੇਂ ਕਰਨਾ ਹੈ (ਕੁੱਝ ਸਧਾਰਨ ਪਗਾਂ ਵਿੱਚ)" + +#: ../src/Gui/report.glade.h:5 msgid "Send" msgstr "ਭੇਜੋ" @@ -439,7 +442,7 @@ msgstr "ABRT ਸਰਵਿਸ ਨਹੀਂ ਚੱਲ ਰਹੀ ਹੈ" msgid "Warning" msgstr "ਚੇਤਾਵਨੀ" -#: ../src/Daemon/Daemon.cpp:531 +#: ../src/Daemon/Daemon.cpp:520 msgid "" "Report size exceeded the quota. Please check system's MaxCrashReportsSize " "value in abrt.conf." @@ -447,35 +450,37 @@ msgstr "" "ਰਿਪੋਰਟ ਅਕਾਰ ਦਾ ਕੋਟਾ ਖਤਮ ਹੋ ਗਿਆ ਹੈ। abrt.conf ਵਿੱਚ ਸਿਸਟਮ MaxCrashReportsSize ਮੁੱਲ ਚੈੱਕ " "ਕਰੋ ਜੀ।" -#: ../lib/Plugins/Bugzilla.cpp:316, c-format +#: ../lib/Plugins/Bugzilla.cpp:209 +#, c-format msgid "Bug is already reported: %i" msgstr "ਬੱਗ ਪਹਿਲਾਂ ਹੀ ਰਿਪੋਰਟ ਕੀਤਾ ਹੈ: %i" -#: ../lib/Plugins/Bugzilla.cpp:378, c-format +#: ../lib/Plugins/Bugzilla.cpp:271 +#, c-format msgid "New bug id: %i" msgstr "ਨਵਾਂ ਬੱਗ id: %i" -#: ../lib/Plugins/Bugzilla.cpp:471 +#: ../lib/Plugins/Bugzilla.cpp:364 msgid "Checking for duplicates..." msgstr "ਡੁਪਲੀਕੇਟ ਲਈ ਜਾਂਚ ਜਾਰੀ..." -#: ../lib/Plugins/Bugzilla.cpp:474 +#: ../lib/Plugins/Bugzilla.cpp:367 msgid "Logging into bugzilla..." msgstr "ਬੱਗਜ਼ੀਲਾ ਉੱਤੇ ਲਾਗਇਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ..." -#: ../lib/Plugins/Bugzilla.cpp:478 +#: ../lib/Plugins/Bugzilla.cpp:371 msgid "Empty login and password. Please check Bugzilla.conf" msgstr "ਖਾਲੀ ਲਾਗਇਨ ਅਤੇ ਪਾਸਵਰਡ। Bugzilla.conf ਵੇਖੋ ਜੀ।" -#: ../lib/Plugins/Bugzilla.cpp:484 +#: ../lib/Plugins/Bugzilla.cpp:377 msgid "Checking CC..." msgstr "CC ਚੈੱਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..." -#: ../lib/Plugins/Bugzilla.cpp:493 +#: ../lib/Plugins/Bugzilla.cpp:386 msgid "Creating new bug..." msgstr "ਨਵਾਂ ਬੱਗ ਬਣਾ ਰਿਹਾ ਹੈ..." -#: ../lib/Plugins/Bugzilla.cpp:497 +#: ../lib/Plugins/Bugzilla.cpp:390 msgid "Logging out..." msgstr "ਲਾਗਆਉਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..." @@ -483,31 +488,31 @@ msgstr "ਲਾਗਆਉਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..." msgid "Getting local universal unique identification" msgstr "ਲੋਕਲ ਯੂਨੀਵਰਸਲ ਵਿਲੱਖਣ ਪਛਾਣ ਲਈ ਜਾ ਰਹੀ ਹੈ" -#: ../lib/Plugins/CCpp.cpp:228 +#: ../lib/Plugins/CCpp.cpp:254 msgid "Getting backtrace..." msgstr "ਬੈਕਟਰੇਸ ਲੈ ਰਿਹਾ..." -#: ../lib/Plugins/CCpp.cpp:526 ../lib/Plugins/CCpp.cpp:653 +#: ../lib/Plugins/CCpp.cpp:552 ../lib/Plugins/CCpp.cpp:679 msgid "Searching for debug-info packages..." msgstr "ਡੀਬੱਗ-ਜਾਣਕਾਰੀ ਪੈਕੇਜ ਲਈ ਖੋਜ ਜਾਰੀ..." -#: ../lib/Plugins/CCpp.cpp:588 ../lib/Plugins/CCpp.cpp:687 +#: ../lib/Plugins/CCpp.cpp:614 ../lib/Plugins/CCpp.cpp:713 msgid "Downloading and installing debug-info packages..." msgstr "ਡੀਬੱਗ-ਜਾਣਕਾਰੀ ਪੈਕੇਜ ਡਾਊਨਲੋਡ ਤੇ ਇੰਸਟਾਲ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ..." -#: ../lib/Plugins/CCpp.cpp:792 +#: ../lib/Plugins/CCpp.cpp:818 msgid "Getting local universal unique identification..." msgstr "ਲੋਕਲ ਯੂਨੀਵਰਸਲ ਵਿਲੱਖਣ ਪਛਾਣ ਲਈ ਜਾ ਰਹੀ ਹੈ..." -#: ../lib/Plugins/CCpp.cpp:811 +#: ../lib/Plugins/CCpp.cpp:837 msgid "Getting global universal unique identification..." msgstr "ਗਲੋਬਲ ਯੂਨੀਵਰਸਲ ਵਿਲੱਕਣ ਪਛਾਣ ਲਈ ਜਾ ਰਹੀ ਹੈ..." -#: ../lib/Plugins/CCpp.cpp:856 +#: ../lib/Plugins/CCpp.cpp:882 msgid "Starting report creation..." msgstr "ਰਿਪੋਰਟ ਬਣਾਉਣੀ ਸ਼ੁਰੂ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ..." -#: ../lib/Plugins/CCpp.cpp:886 +#: ../lib/Plugins/CCpp.cpp:912 msgid "Skipping debuginfo installation" msgstr "debuginfo ਇੰਸਟਾਲੇਸ਼ਨ ਛੱਡੀ ਜਾ ਰਹੀ ਹੈ" @@ -515,7 +520,7 @@ msgstr "debuginfo ਇੰਸਟਾਲੇਸ਼ਨ ਛੱਡੀ ਜਾ ਰਹੀ ਹ msgid "Creating and submitting a report..." msgstr "ਇੱਕ ਰਿਪੋਰਟ ਬਣਾਈ ਅਤੇ ਭੇਜੀ ਜਾ ਰਹੀ ਹੈ..." -#: ../lib/Plugins/Logger.cpp:57 ../lib/Plugins/Mailx.cpp:124 +#: ../lib/Plugins/Logger.cpp:65 ../lib/Plugins/Mailx.cpp:124 msgid "Creating a report..." msgstr "ਰਿਪੋਰਟ ਬਣਾਈ ਜਾ ਰਹੀ ਹੈ..." @@ -523,11 +528,12 @@ msgstr "ਰਿਪੋਰਟ ਬਣਾਈ ਜਾ ਰਹੀ ਹੈ..." msgid "Executing RunApp plugin..." msgstr "RunApp ਪਲੱਗਇਨ ਚਲਾਈ ਜਾ ਰਹੀ ਹੈ..." -#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:381 +#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:384 msgid "FileTransfer: URL not specified" msgstr "ਫਾਇਲਟਰਾਂਸਫਰ: URL ਨਹੀਂ ਦਿੱਤਾ" -#: ../lib/Plugins/FileTransfer.cpp:67, c-format +#: ../lib/Plugins/FileTransfer.cpp:67 +#, c-format msgid "Sending archive %s to %s" msgstr "%s ਅਕਾਇਵ %s ਨੂੰ ਭੇਜਿਆ ਜਾ ਰਿਹਾ ਹੈ" @@ -535,11 +541,13 @@ msgstr "%s ਅਕਾਇਵ %s ਨੂੰ ਭੇਜਿਆ ਜਾ ਰਿਹਾ ਹ msgid "File Transfer: Creating a report..." msgstr "ਫਾਇਲ ਟਰਾਂਸਫਰ: ਰਿਪੋਰਟ ਬਣਾਈ ਜਾ ਰਹੀ ਹੈ..." -#: ../lib/Plugins/FileTransfer.cpp:334, c-format +#: ../lib/Plugins/FileTransfer.cpp:334 +#, c-format msgid "Can't create and send an archive: %s" msgstr "%s :ਅਕਾਇਵ ਬਣਾਇਆ ਅਤੇ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" -#: ../lib/Plugins/FileTransfer.cpp:359, c-format +#: ../lib/Plugins/FileTransfer.cpp:359 +#, c-format msgid "Can't create and send an archive %s" msgstr "%s ਅਕਾਇਵ ਬਣਾਇਆ ਅਤੇ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" @@ -555,7 +563,8 @@ msgstr "ਈਮੇਲ ਭੇਜੀ ਜਾ ਰਹੀ ਹੈ..." msgid "Executing SOSreport plugin..." msgstr "SOSreport ਪਲੱਗਇਨ ਚਲਾਈ ਜਾ ਰਹੀ ਹੈ..." -#: ../lib/Plugins/SOSreport.cpp:122, c-format +#: ../lib/Plugins/SOSreport.cpp:122 +#, c-format msgid "running sosreport: %s" msgstr "sosreport ਚਲਾਈ ਜਾ ਰਹੀ ਹੈ: %s " @@ -2,12 +2,13 @@ # Piotr Drąg <piotrdrag@gmail.com>, 2009. # Tomasz Chrzczonowicz <chrzczonowicz@gmail.com>, 2009. # +#: ../src/Gui/CCReporterDialog.py:191 msgid "" msgstr "" "Project-Id-Version: pl\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-11-07 09:22+0000\n" -"PO-Revision-Date: 2009-11-07 10:45+0100\n" +"POT-Creation-Date: 2009-11-09 23:17+0000\n" +"PO-Revision-Date: 2009-11-10 00:19+0100\n" "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n" "Language-Team: Polish <fedora-trans-pl@redhat.com>\n" "MIME-Version: 1.0\n" @@ -96,7 +97,7 @@ msgstr "Proszę czekać..." msgid "Plugins" msgstr "Wtyczki" -#: ../src/Gui/ccgui.glade.h:10 ../src/Gui/report.glade.h:3 +#: ../src/Gui/ccgui.glade.h:10 ../src/Gui/report.glade.h:4 msgid "Report" msgstr "Zgłoś" @@ -164,8 +165,8 @@ msgid "Date" msgstr "Data" #: ../src/Gui/CCMainWindow.py:91 -msgid "Crash Rate" -msgstr "Częstotliwość awarii" +msgid "Crash count" +msgstr "Liczba awarii" #: ../src/Gui/CCMainWindow.py:93 msgid "User" @@ -230,30 +231,30 @@ msgstr "" msgid "Error getting the report: %s" msgstr "Błąd podczas uzyskiwania raportu: %s" -#: ../src/Gui/CCReporterDialog.py:173 +#: ../src/Gui/CCReporterDialog.py:177 msgid "Brief description how to reproduce this or what you did..." msgstr "" "Krótki opis, jak ponownie wywołać tę awarię lub co robił użytkownik (w " "języku angielskim)..." -#: ../src/Gui/CCReporterDialog.py:201 +#: ../src/Gui/CCReporterDialog.py:219 #, python-format msgid "" -"Reporting disabled because the backtrace is unusable!\n" +"Reporting disabled because the backtrace is unusable.\n" "Please try to install debuginfo manually using command:<span color=\"blue\"> " "debuginfo-install %s </span>\n" "then use Refresh button to regenerate the backtrace." msgstr "" "Zgłaszanie zostało wyłączone, ponieważ nie można użyć tego wyjątku.\n" -"Proszę spróbować ręcznie zainstalować pakiet debuginfo używając " -"polecenia:<span color=\"blue\"> debuginfo-install %s </span>\n" +"Proszę spróbować ręcznie zainstalować pakiet debuginfo używając polecenia:" +"<span color=\"blue\"> debuginfo-install %s </span>\n" "a następnie nacisnąć przycisk Odśwież, aby ponownie utworzyć wyjątek." -#: ../src/Gui/CCReporterDialog.py:203 +#: ../src/Gui/CCReporterDialog.py:221 msgid "The bactrace is unusable, you can't report this!" msgstr "Nie można użyć tego wyjątku. Nie można tego zgłosić." -#: ../src/Gui/CCReporterDialog.py:209 +#: ../src/Gui/CCReporterDialog.py:227 msgid "" "The bactrace is incomplete, please make sure you provide good steps to " "reproduce." @@ -261,7 +262,7 @@ msgstr "" "Wyjątek jest niepełny. Proszę upewnić się, że podano właściwe kroki " "ponownego wywołania awarii." -#: ../src/Gui/CCReporterDialog.py:247 +#: ../src/Gui/CCReporterDialog.py:272 #, python-format msgid "" "<b>WARNING</b>, you're about to send data which might contain sensitive " @@ -303,7 +304,13 @@ msgstr "Brak danych do wyświetlenia." msgid "Comment" msgstr "Komentarz" -#: ../src/Gui/report.glade.h:4 +#: ../src/Gui/report.glade.h:3 +msgid "How to reproduce (in a few simple steps)" +msgstr "" +"Jak ponownie wywołać tę awarię (w kilku prostych krokach, w języku " +"angielskim)" + +#: ../src/Gui/report.glade.h:5 msgid "Send" msgstr "Wyślij" @@ -448,7 +455,7 @@ msgstr "Usługa ABRT nie jest uruchomiona" msgid "Warning" msgstr "Ostrzeżenie" -#: ../src/Daemon/Daemon.cpp:531 +#: ../src/Daemon/Daemon.cpp:519 msgid "" "Report size exceeded the quota. Please check system's MaxCrashReportsSize " "value in abrt.conf." @@ -456,37 +463,37 @@ msgstr "" "Wielkość raportu przekroczyła dozwolone ograniczenie. Proszę sprawdzić " "wartość zmiennej MaxCrashReportsSize w pliku abrt.conf" -#: ../lib/Plugins/Bugzilla.cpp:316 +#: ../lib/Plugins/Bugzilla.cpp:240 #, c-format msgid "Bug is already reported: %i" msgstr "Błąd został już wcześniej zgłoszony: %i" -#: ../lib/Plugins/Bugzilla.cpp:378 +#: ../lib/Plugins/Bugzilla.cpp:302 #, c-format msgid "New bug id: %i" msgstr "Identyfikator nowego błędu: %i" -#: ../lib/Plugins/Bugzilla.cpp:471 +#: ../lib/Plugins/Bugzilla.cpp:395 msgid "Checking for duplicates..." msgstr "Sprawdzanie duplikatów..." -#: ../lib/Plugins/Bugzilla.cpp:474 +#: ../lib/Plugins/Bugzilla.cpp:398 msgid "Logging into bugzilla..." msgstr "Logowanie do Bugzilli..." -#: ../lib/Plugins/Bugzilla.cpp:478 +#: ../lib/Plugins/Bugzilla.cpp:402 msgid "Empty login and password. Please check Bugzilla.conf" msgstr "Pola login i hasło są puste. Proszę sprawdzić plik Bugzilla.conf" -#: ../lib/Plugins/Bugzilla.cpp:484 +#: ../lib/Plugins/Bugzilla.cpp:408 msgid "Checking CC..." msgstr "Sprawdzanie listy CC..." -#: ../lib/Plugins/Bugzilla.cpp:493 +#: ../lib/Plugins/Bugzilla.cpp:417 msgid "Creating new bug..." msgstr "Dodawanie nowego błędu..." -#: ../lib/Plugins/Bugzilla.cpp:497 +#: ../lib/Plugins/Bugzilla.cpp:421 msgid "Logging out..." msgstr "Wylogowywanie..." @@ -494,31 +501,31 @@ msgstr "Wylogowywanie..." msgid "Getting local universal unique identification" msgstr "Uzyskiwanie lokalnego uniwersalnego, unikalnego identyfikatora" -#: ../lib/Plugins/CCpp.cpp:228 +#: ../lib/Plugins/CCpp.cpp:254 msgid "Getting backtrace..." msgstr "Uzyskiwanie wyjątku..." -#: ../lib/Plugins/CCpp.cpp:526 ../lib/Plugins/CCpp.cpp:653 +#: ../lib/Plugins/CCpp.cpp:552 ../lib/Plugins/CCpp.cpp:679 msgid "Searching for debug-info packages..." msgstr "Wyszukiwanie pakietów debuginfo..." -#: ../lib/Plugins/CCpp.cpp:588 ../lib/Plugins/CCpp.cpp:687 +#: ../lib/Plugins/CCpp.cpp:614 ../lib/Plugins/CCpp.cpp:713 msgid "Downloading and installing debug-info packages..." msgstr "Pobieranie i instalowanie pakietów debuginfo..." -#: ../lib/Plugins/CCpp.cpp:792 +#: ../lib/Plugins/CCpp.cpp:818 msgid "Getting local universal unique identification..." msgstr "Uzyskiwanie lokalnego uniwersalnego, unikalnego identyfikatora..." -#: ../lib/Plugins/CCpp.cpp:811 +#: ../lib/Plugins/CCpp.cpp:837 msgid "Getting global universal unique identification..." msgstr "Uzyskiwanie globalnego uniwersalnego, unikalnego identyfikatora..." -#: ../lib/Plugins/CCpp.cpp:856 +#: ../lib/Plugins/CCpp.cpp:882 msgid "Starting report creation..." msgstr "Uruchamianie tworzenia raportu..." -#: ../lib/Plugins/CCpp.cpp:886 +#: ../lib/Plugins/CCpp.cpp:912 msgid "Skipping debuginfo installation" msgstr "Pomijanie instalacji pakietu debuginfo" @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: abrt\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-11-08 20:52+0000\n" +"POT-Creation-Date: 2009-11-09 20:50+0000\n" "PO-Revision-Date: \n" "Last-Translator: Rui Gouveia <rui.gouveia@globaltek.pt>\n" "Language-Team: PT <fedora-trans-pt@redhat.com>\n" @@ -97,7 +97,7 @@ msgid "Plugins" msgstr "Plugins" #: ../src/Gui/ccgui.glade.h:10 -#: ../src/Gui/report.glade.h:3 +#: ../src/Gui/report.glade.h:4 msgid "Report" msgstr "Relatório" @@ -149,8 +149,8 @@ msgid "Date" msgstr "Data" #: ../src/Gui/CCMainWindow.py:91 -msgid "Crash Rate" -msgstr "Taxa de Crash" +msgid "Crash count" +msgstr "Contagem de crashes" #: ../src/Gui/CCMainWindow.py:93 msgid "User" @@ -215,14 +215,14 @@ msgstr "" msgid "Error getting the report: %s" msgstr "Erro ao obter o relatório: %s" -#: ../src/Gui/CCReporterDialog.py:173 +#: ../src/Gui/CCReporterDialog.py:177 msgid "Brief description how to reproduce this or what you did..." msgstr "Breve descrição de como reproduzir isto ou o que fez..." -#: ../src/Gui/CCReporterDialog.py:201 +#: ../src/Gui/CCReporterDialog.py:219 #, python-format msgid "" -"Reporting disabled because the backtrace is unusable!\n" +"Reporting disabled because the backtrace is unusable.\n" "Please try to install debuginfo manually using command:<span color=\"blue\"> debuginfo-install %s </span>\n" "then use Refresh button to regenerate the backtrace." msgstr "" @@ -230,15 +230,15 @@ msgstr "" "Por favor, tente instalar o debuginfo manualmente utilizando o comando:<span color=\"blue\"> debuginfo-install %s </span>\n" "depois utilize o botão Recarregar para gerar uma nova traçagem." -#: ../src/Gui/CCReporterDialog.py:203 +#: ../src/Gui/CCReporterDialog.py:221 msgid "The bactrace is unusable, you can't report this!" msgstr "A traçagem não é usável. Você não pode reportar isto!" -#: ../src/Gui/CCReporterDialog.py:209 +#: ../src/Gui/CCReporterDialog.py:227 msgid "The bactrace is incomplete, please make sure you provide good steps to reproduce." msgstr "A traçagem está incompleta. Por favor, garanta que fornece passos adequados para reproduzir." -#: ../src/Gui/CCReporterDialog.py:247 +#: ../src/Gui/CCReporterDialog.py:272 #, python-format msgid "" "<b>WARNING</b>, you're about to send data which might contain sensitive information.\n" @@ -279,7 +279,11 @@ msgstr "Nada para fazer!" msgid "Comment" msgstr "Comentário" -#: ../src/Gui/report.glade.h:4 +#: ../src/Gui/report.glade.h:3 +msgid "How to reproduce (in a few simple steps)" +msgstr "Como reproduzir (em poucos passos simples)" + +#: ../src/Gui/report.glade.h:5 msgid "Send" msgstr "Enviar" @@ -396,7 +400,7 @@ msgstr "Sítio Web:" msgid "gtk-add" msgstr "gtk-add" -#: ../src/Gui/settings.glade.h:26 +#: ../src/Gui/settings.glade.h:25 msgid "gtk-cancel" msgstr "gtk-cancel" @@ -426,41 +430,41 @@ msgstr "O serviço ABRT não está a correr" msgid "Warning" msgstr "Aviso" -#: ../src/Daemon/Daemon.cpp:531 +#: ../src/Daemon/Daemon.cpp:519 msgid "Report size exceeded the quota. Please check system's MaxCrashReportsSize value in abrt.conf." msgstr "O relatório excedeu a cota. Por favor, verifique o valor MaxCrashReportsSize em abrt.conf." -#: ../lib/Plugins/Bugzilla.cpp:316 +#: ../lib/Plugins/Bugzilla.cpp:240 #, c-format msgid "Bug is already reported: %i" msgstr "Erro já foi reportado: %i" -#: ../lib/Plugins/Bugzilla.cpp:378 +#: ../lib/Plugins/Bugzilla.cpp:302 #, c-format msgid "New bug id: %i" msgstr "Novo ID de erro: %i" -#: ../lib/Plugins/Bugzilla.cpp:471 +#: ../lib/Plugins/Bugzilla.cpp:395 msgid "Checking for duplicates..." msgstr "A procurar por duplicados..." -#: ../lib/Plugins/Bugzilla.cpp:474 +#: ../lib/Plugins/Bugzilla.cpp:398 msgid "Logging into bugzilla..." msgstr "A iniciar sessão no bugzilla..." -#: ../lib/Plugins/Bugzilla.cpp:478 +#: ../lib/Plugins/Bugzilla.cpp:402 msgid "Empty login and password. Please check Bugzilla.conf" msgstr "Nome de utilizador e senha vazios. Por favor, verifique Bugzilla.conf" -#: ../lib/Plugins/Bugzilla.cpp:484 +#: ../lib/Plugins/Bugzilla.cpp:408 msgid "Checking CC..." msgstr "A verificar CC..." -#: ../lib/Plugins/Bugzilla.cpp:493 +#: ../lib/Plugins/Bugzilla.cpp:417 msgid "Creating new bug..." msgstr "A criar novo erro..." -#: ../lib/Plugins/Bugzilla.cpp:497 +#: ../lib/Plugins/Bugzilla.cpp:421 msgid "Logging out..." msgstr "A Terminar Sessão..." @@ -468,33 +472,33 @@ msgstr "A Terminar Sessão..." msgid "Getting local universal unique identification" msgstr "A obter identificador único universal local" -#: ../lib/Plugins/CCpp.cpp:228 +#: ../lib/Plugins/CCpp.cpp:254 msgid "Getting backtrace..." msgstr "A obter dados do processo..." -#: ../lib/Plugins/CCpp.cpp:526 -#: ../lib/Plugins/CCpp.cpp:653 +#: ../lib/Plugins/CCpp.cpp:552 +#: ../lib/Plugins/CCpp.cpp:679 msgid "Searching for debug-info packages..." msgstr "A pesquisar por pacotes debug-info..." -#: ../lib/Plugins/CCpp.cpp:588 -#: ../lib/Plugins/CCpp.cpp:687 +#: ../lib/Plugins/CCpp.cpp:614 +#: ../lib/Plugins/CCpp.cpp:713 msgid "Downloading and installing debug-info packages..." msgstr "A transferir e instalar pacotes debug-info..." -#: ../lib/Plugins/CCpp.cpp:792 +#: ../lib/Plugins/CCpp.cpp:818 msgid "Getting local universal unique identification..." msgstr "A obter identificador único universal local..." -#: ../lib/Plugins/CCpp.cpp:811 +#: ../lib/Plugins/CCpp.cpp:837 msgid "Getting global universal unique identification..." msgstr "A obter identificador único universal global..." -#: ../lib/Plugins/CCpp.cpp:856 +#: ../lib/Plugins/CCpp.cpp:882 msgid "Starting report creation..." msgstr "A iniciar a criação do relatório..." -#: ../lib/Plugins/CCpp.cpp:886 +#: ../lib/Plugins/CCpp.cpp:912 msgid "Skipping debuginfo installation" msgstr "A passar à frente a instalação do debuginfo" diff --git a/po/pt_BR.po b/po/pt_BR.po index d59875c7..6a77a961 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: ABRT\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-11-06 15:36+0000\n" -"PO-Revision-Date: 2009-11-06 17:43-0300\n" +"POT-Creation-Date: 2009-11-09 23:24+0000\n" +"PO-Revision-Date: 2009-11-10 00:46-0300\n" "Last-Translator: Igor Pires Soares <igor@projetofedora.org>\n" "Language-Team: Brazilian Portuguese <fedora-trans-pt_br@redhat.com>\n" "MIME-Version: 1.0\n" @@ -102,7 +102,7 @@ msgid "Plugins" msgstr "Plugins" #: ../src/Gui/ccgui.glade.h:10 -#: ../src/Gui/report.glade.h:3 +#: ../src/Gui/report.glade.h:4 msgid "Report" msgstr "Relatar" @@ -154,8 +154,8 @@ msgid "Date" msgstr "Data" #: ../src/Gui/CCMainWindow.py:91 -msgid "Crash Rate" -msgstr "Taxa de travamento" +msgid "Crash count" +msgstr "Contagem de travamentos" #: ../src/Gui/CCMainWindow.py:93 msgid "User" @@ -220,30 +220,30 @@ msgstr "" msgid "Error getting the report: %s" msgstr "Erro ao obter o relatório: %s" -#: ../src/Gui/CCReporterDialog.py:173 +#: ../src/Gui/CCReporterDialog.py:177 msgid "Brief description how to reproduce this or what you did..." msgstr "Breve descrição sobre como reproduzir isto ou o que você fazia..." -#: ../src/Gui/CCReporterDialog.py:201 +#: ../src/Gui/CCReporterDialog.py:219 #, python-format msgid "" -"Reporting disabled because the backtrace is unusable!\n" +"Reporting disabled because the backtrace is unusable.\n" "Please try to install debuginfo manually using command:<span color=\"blue\"> debuginfo-install %s </span>\n" "then use Refresh button to regenerate the backtrace." msgstr "" -"Relato desabilitado porque o backtrace é inutilizável!\n" +"Relato desabilitado porque o backtrace é inutilizável.\n" "Por favor, tente instalar o debuginfo manualmente usando o comando:<span color=\"blue\"> debuginfo-install %s </span>\n" "e depois use o botão Atualizar para regerar o backtrace." -#: ../src/Gui/CCReporterDialog.py:203 +#: ../src/Gui/CCReporterDialog.py:221 msgid "The bactrace is unusable, you can't report this!" msgstr "O backtrace é inutilizável, você não pode reportá-lo!" -#: ../src/Gui/CCReporterDialog.py:209 +#: ../src/Gui/CCReporterDialog.py:227 msgid "The bactrace is incomplete, please make sure you provide good steps to reproduce." msgstr "O backtrace está incompleto. Por favor, certifique-se de fornecer bons passos para a reprodução." -#: ../src/Gui/CCReporterDialog.py:247 +#: ../src/Gui/CCReporterDialog.py:272 #, python-format msgid "" "<b>WARNING</b>, you're about to send data which might contain sensitive information.\n" @@ -284,7 +284,11 @@ msgstr "Nada a ser hidratado!" msgid "Comment" msgstr "Comentário" -#: ../src/Gui/report.glade.h:4 +#: ../src/Gui/report.glade.h:3 +msgid "How to reproduce (in a few simple steps)" +msgstr "Como reproduzir (em alguns passos simples)" + +#: ../src/Gui/report.glade.h:5 msgid "Send" msgstr "Enviar" @@ -431,39 +435,41 @@ msgstr "O serviço do ABRT não está em execução" msgid "Warning" msgstr "Aviso" -#: ../src/Daemon/Daemon.cpp:531 +#: ../src/Daemon/Daemon.cpp:519 msgid "Report size exceeded the quota. Please check system's MaxCrashReportsSize value in abrt.conf." msgstr "O tamanho do relatório excedeu a cota. Por favor, verifique o valor MaxCrashReportsSize do sistema no abrt.conf." -#: ../lib/Plugins/Bugzilla.cpp:316 -msgid "Bug is already reported: " -msgstr "O erro já foi relatado: " +#: ../lib/Plugins/Bugzilla.cpp:240 +#, c-format +msgid "Bug is already reported: %i" +msgstr "O erro já foi relatado: %i" -#: ../lib/Plugins/Bugzilla.cpp:378 -msgid "New bug id: " -msgstr "Novo id do erro: " +#: ../lib/Plugins/Bugzilla.cpp:302 +#, c-format +msgid "New bug id: %i" +msgstr "Novo id do erro: %i" -#: ../lib/Plugins/Bugzilla.cpp:471 +#: ../lib/Plugins/Bugzilla.cpp:395 msgid "Checking for duplicates..." msgstr "Verificando duplicatas..." -#: ../lib/Plugins/Bugzilla.cpp:474 +#: ../lib/Plugins/Bugzilla.cpp:398 msgid "Logging into bugzilla..." msgstr "Autenticando no bugzilla..." -#: ../lib/Plugins/Bugzilla.cpp:478 +#: ../lib/Plugins/Bugzilla.cpp:402 msgid "Empty login and password. Please check Bugzilla.conf" msgstr "Nome de usuário e senha vazios. Por favor, verifique o Bugzilla.conf" -#: ../lib/Plugins/Bugzilla.cpp:484 +#: ../lib/Plugins/Bugzilla.cpp:408 msgid "Checking CC..." msgstr "Verificando CC..." -#: ../lib/Plugins/Bugzilla.cpp:493 +#: ../lib/Plugins/Bugzilla.cpp:417 msgid "Creating new bug..." msgstr "Criando novo erro..." -#: ../lib/Plugins/Bugzilla.cpp:497 +#: ../lib/Plugins/Bugzilla.cpp:421 msgid "Logging out..." msgstr "Encerrando sessão..." @@ -471,33 +477,33 @@ msgstr "Encerrando sessão..." msgid "Getting local universal unique identification" msgstr "Obtendo identificação universal local única" -#: ../lib/Plugins/CCpp.cpp:228 +#: ../lib/Plugins/CCpp.cpp:254 msgid "Getting backtrace..." msgstr "Obtendo backtrace..." -#: ../lib/Plugins/CCpp.cpp:526 -#: ../lib/Plugins/CCpp.cpp:653 +#: ../lib/Plugins/CCpp.cpp:552 +#: ../lib/Plugins/CCpp.cpp:679 msgid "Searching for debug-info packages..." msgstr "Pesquisando por pacotes debug-info..." -#: ../lib/Plugins/CCpp.cpp:588 -#: ../lib/Plugins/CCpp.cpp:687 +#: ../lib/Plugins/CCpp.cpp:614 +#: ../lib/Plugins/CCpp.cpp:713 msgid "Downloading and installing debug-info packages..." msgstr "Baixando e instalando pacotes debug-info..." -#: ../lib/Plugins/CCpp.cpp:792 +#: ../lib/Plugins/CCpp.cpp:818 msgid "Getting local universal unique identification..." msgstr "Obtendo identificação universal local única..." -#: ../lib/Plugins/CCpp.cpp:811 +#: ../lib/Plugins/CCpp.cpp:837 msgid "Getting global universal unique identification..." msgstr "Obtendo identificação universal global única..." -#: ../lib/Plugins/CCpp.cpp:856 +#: ../lib/Plugins/CCpp.cpp:882 msgid "Starting report creation..." msgstr "Iniciando a criação do relatório..." -#: ../lib/Plugins/CCpp.cpp:886 +#: ../lib/Plugins/CCpp.cpp:912 msgid "Skipping debuginfo installation" msgstr "Pulando instalação do debuginfo" @@ -505,7 +511,7 @@ msgstr "Pulando instalação do debuginfo" msgid "Creating and submitting a report..." msgstr "Criando e enviando um relatório..." -#: ../lib/Plugins/Logger.cpp:59 +#: ../lib/Plugins/Logger.cpp:57 #: ../lib/Plugins/Mailx.cpp:124 msgid "Creating a report..." msgstr "Criando um relatório..." @@ -515,7 +521,7 @@ msgid "Executing RunApp plugin..." msgstr "Executando o plugin RunApp..." #: ../lib/Plugins/FileTransfer.cpp:63 -#: ../lib/Plugins/FileTransfer.cpp:384 +#: ../lib/Plugins/FileTransfer.cpp:381 msgid "FileTransfer: URL not specified" msgstr "FileTransfer: URL não especificada" @@ -524,14 +530,19 @@ msgstr "FileTransfer: URL não especificada" msgid "Sending archive %s to %s" msgstr "Enviando o pacote %s para %s" -#: ../lib/Plugins/FileTransfer.cpp:310 +#: ../lib/Plugins/FileTransfer.cpp:309 msgid "File Transfer: Creating a report..." msgstr "File Transfer: Criando um relatório..." -#: ../lib/Plugins/FileTransfer.cpp:335 -#: ../lib/Plugins/FileTransfer.cpp:361 -msgid "CFileTransfer::Run(): Cannot create and send an archive: " -msgstr "CFileTransfer::Run(): Não foi possível criar e enviar o pacote: " +#: ../lib/Plugins/FileTransfer.cpp:334 +#, c-format +msgid "Can't create and send an archive: %s" +msgstr "Não foi possível criar e enviar o pacote: %s" + +#: ../lib/Plugins/FileTransfer.cpp:359 +#, c-format +msgid "Can't create and send an archive %s" +msgstr "Não foi possível criar e enviar o pacote %s" #: ../lib/Plugins/KerneloopsScanner.cpp:84 msgid "Creating kernel oops crash reports..." @@ -546,8 +557,9 @@ msgid "Executing SOSreport plugin..." msgstr "Executando o plugin SOSreport..." #: ../lib/Plugins/SOSreport.cpp:122 -msgid "running sosreport: " -msgstr "executando o sosreport: " +#, c-format +msgid "running sosreport: %s" +msgstr "executando o sosreport: %s" #: ../lib/Plugins/SOSreport.cpp:137 msgid "done running sosreport" @@ -1,58 +1,63 @@ -# translation of ru.po to Russian # translation of ru.po to # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # +#: ../src/Gui/CCReporterDialog.py:191 # Yulia Poyarkova <yulia.poyarkova@redhat.com>, 2009. # Yulia Poyarkova <yulia.poyarkova@gmail.com>, 2009. +# Yulia <ypoyarko@redhat.com>, 2009. msgid "" msgstr "" "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-09-29 14:46+0200\n" -"PO-Revision-Date: 2009-09-23 12:49+1000\n" -"Last-Translator: Yulia Poyarkova <yulia.poyarkova@redhat.com>\n" -"Language-Team: Russian <fedora-trans-ru@redhat.com>\n" +"POT-Creation-Date: 2009-11-11 20:52+0000\n" +"PO-Revision-Date: 2009-11-12 14:55+1100\n" +"Last-Translator: Yulia <ypoyarko@redhat.com>\n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -#: src/Gui/ABRTExceptions.py:4 +#: ../src/Gui/ABRTExceptions.py:6 msgid "Another client is already running, trying to wake it." msgstr "Выполняется другой клиент. Будет выполнена попытка его активировать." -#: src/Gui/ABRTExceptions.py:10 +#: ../src/Gui/ABRTExceptions.py:13 msgid "Got unexpected data from daemon (is the database properly updated?)." msgstr "" "Получены непредвиденные данные от демона. Проверьте, обновлена ли база " "данных." -#: src/Gui/ABRTPlugin.py:26 +#: ../src/Gui/ABRTPlugin.py:55 msgid "Analyzer plugins" msgstr "Модули анализа" -#: src/Gui/ABRTPlugin.py:27 +#: ../src/Gui/ABRTPlugin.py:56 msgid "Action plugins" msgstr "Модули действий" -#: src/Gui/ABRTPlugin.py:28 +#: ../src/Gui/ABRTPlugin.py:57 msgid "Reporter plugins" msgstr "Модули отчётности" -#: src/Gui/ABRTPlugin.py:29 +#: ../src/Gui/ABRTPlugin.py:58 msgid "Database plugins" msgstr "Модули базы данных" -#: src/Gui/CCDBusBackend.py:143 -msgid "Can't connect to dbus" -msgstr "Не удалось подключиться к dbus" +#: ../src/Gui/ABRTPlugin.py:97 +msgid "Plugin name is not set, can't load it's settings" +msgstr "Невозможно загрузить настройки модуля, так как его имя не определено" -#: src/Gui/CCDBusBackend.py:169 -msgid "Please check if abrt daemon is running." -msgstr "Проверьте, выполняется ли демон abrt." +#: ../src/Gui/CCDBusBackend.py:74 ../src/Gui/CCDBusBackend.py:97 +msgid "Can't connect to system dbus" +msgstr "Не удалось подключиться к системной шине dbus" -#: src/Gui/CCDBusBackend.py:187 +#: ../src/Gui/CCDBusBackend.py:100 ../src/Gui/CCDBusBackend.py:103 +msgid "Please check if abrt daemon is running" +msgstr "Убедитесь, что демон abrt выполняется" + +#: ../src/Gui/CCDBusBackend.py:155 msgid "" "Daemon did't return valid report info\n" "Debuginfo is missing?" @@ -60,27 +65,47 @@ msgstr "" "Демон не вернул ожидаемую информацию об отчёте.\n" "Отсутствует debuginfo?" -#: src/Gui/ccgui.glade:6 -msgid "Please wait.." -msgstr "Пожалуйста, подождите..." - -#: src/Gui/ccgui.glade:16 -msgid "Working..." -msgstr "Выполняется..." - -#: src/Gui/ccgui.glade:49 +#: ../src/Gui/ccgui.glade.h:1 ../src/Gui/report.glade.h:1 msgid " " msgstr " " -#: src/Gui/ccgui.glade:68 +#: ../src/Gui/ccgui.glade.h:2 +msgid "(C) 2009 Red Hat, Inc." +msgstr "(C) 2009 Red Hat, Inc." + +#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:244 +msgid "<b>Not reported!</b>" +msgstr "<b>Не сообщено!</b>" + +#: ../src/Gui/ccgui.glade.h:4 +msgid "<span color=\"white\">Description</span>" +msgstr "<span color=\"white\">Описание</span>" + +#: ../src/Gui/ccgui.glade.h:5 msgid "About ABRT" msgstr "Об ABRT" -#: src/Gui/ccgui.glade:74 -msgid "(C) 2009 Red Hat, Inc." -msgstr "(C) 2009 Red Hat, Inc." +#: ../src/Gui/ccgui.glade.h:6 +msgid "Automatic Bug Reporting Tool" +msgstr "Утилита автоматической регистрации ошибок (ABRT)" + +#: ../src/Gui/ccgui.glade.h:7 +msgid "Delete" +msgstr "Удалить" -#: src/Gui/ccgui.glade:75 +#: ../src/Gui/ccgui.glade.h:8 +msgid "Please wait.." +msgstr "Пожалуйста, подождите..." + +#: ../src/Gui/ccgui.glade.h:9 +msgid "Plugins" +msgstr "Модули" + +#: ../src/Gui/ccgui.glade.h:10 ../src/Gui/report.glade.h:4 +msgid "Report" +msgstr "Сообщить" + +#: ../src/Gui/ccgui.glade.h:11 msgid "" "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 " @@ -109,68 +134,57 @@ msgstr "" "Копия лицензии GNU предоставляется вместе с этой программой. \n" "Её также можно найти на сайте <http://www.gnu.org/licenses/>." -#: src/Gui/ccgui.glade:106 -msgid "Automatic Bug Reporting Tool" -msgstr "Утилита автоматической регистрации ошибок (ABRT)" - -#: src/Gui/ccgui.glade:118 -msgid "_File" -msgstr "_Файл" +#: ../src/Gui/ccgui.glade.h:16 +msgid "Working..." +msgstr "Выполняется..." -#: src/Gui/ccgui.glade:138 +#: ../src/Gui/ccgui.glade.h:17 msgid "_Edit" msgstr "_Правка" -#: src/Gui/ccgui.glade:146 -msgid "Plugins" -msgstr "Модули" +#: ../src/Gui/ccgui.glade.h:18 +msgid "_File" +msgstr "_Файл" -#: src/Gui/ccgui.glade:164 +#: ../src/Gui/ccgui.glade.h:19 msgid "_Help" msgstr "_Справка" -#: src/Gui/ccgui.glade:194 src/Gui/ccgui.glade:195 -msgid "Delete" -msgstr "Удалить" - -#: src/Gui/ccgui.glade:207 src/Gui/ccgui.glade:208 src/Gui/ccgui.glade:335 -#: src/Gui/report.glade:7 src/Gui/report.glade:24 -msgid "Report" -msgstr "Сообщить" - -#: src/Gui/ccgui.glade:255 -msgid "<span color=\"white\">Description</span>" -msgstr "<span color=\"white\">Описание</span>" - -#: src/Gui/ccgui.glade:297 src/Gui/CCMainWindow.py:239 -msgid "<b>Not reported!</b>" -msgstr "<b>Не сообщено!</b>" - -#: src/Gui/CCMainWindow.py:80 +#. add pixbuff separatelly +#: ../src/Gui/CCMainWindow.py:80 msgid "Icon" msgstr "Значок" -#: src/Gui/CCMainWindow.py:88 +#: ../src/Gui/CCMainWindow.py:88 msgid "Package" msgstr "Пакет" -#: src/Gui/CCMainWindow.py:89 +#: ../src/Gui/CCMainWindow.py:89 msgid "Application" msgstr "Приложение" -#: src/Gui/CCMainWindow.py:90 +#: ../src/Gui/CCMainWindow.py:90 msgid "Date" msgstr "Дата" -#: src/Gui/CCMainWindow.py:91 -msgid "Crash Rate" -msgstr "Частота сбоев" +#: ../src/Gui/CCMainWindow.py:91 +msgid "Crash count" +msgstr "Счётчик сбоев" -#: src/Gui/CCMainWindow.py:93 +#: ../src/Gui/CCMainWindow.py:93 msgid "User" msgstr "Пользователь" -#: src/Gui/CCMainWindow.py:177 +#: ../src/Gui/CCMainWindow.py:160 +#, python-format +msgid "" +"Can't show the settings dialog\n" +"%s" +msgstr "" +"Не удалось показать окно настроек\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:181 #, python-format msgid "" "Unable to finish current task!\n" @@ -179,7 +193,7 @@ msgstr "" "Не удалось завершить текущую задачу.\n" "%s" -#: src/Gui/CCMainWindow.py:194 +#: ../src/Gui/CCMainWindow.py:198 #, python-format msgid "" "Error while loading the dumplist, please check if abrt daemon is running\n" @@ -188,16 +202,16 @@ msgstr "" "Ошибка при загрузке dumplist. Убедитесь, что демон abrt выполняется\n" " %s" -#: src/Gui/CCMainWindow.py:204 +#: ../src/Gui/CCMainWindow.py:208 #, python-format msgid "Can't get username for uid %s" msgstr "Не удалось получить имя пользователя для UID %s" -#: src/Gui/CCMainWindow.py:231 +#: ../src/Gui/CCMainWindow.py:236 msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n" msgstr "<b>Создан отчёт для этого сбоя. Просмотреть его можно здесь:</b>\n" -#: src/Gui/CCMainWindow.py:291 +#: ../src/Gui/CCMainWindow.py:296 msgid "" "Unable to get report!\n" "Debuginfo is missing?" @@ -205,7 +219,7 @@ msgstr "" "Не удалось получить отчёт!\n" "Отсутствует debuginfo?" -#: src/Gui/CCMainWindow.py:306 +#: ../src/Gui/CCMainWindow.py:314 #, python-format msgid "" "Reporting failed!\n" @@ -214,12 +228,39 @@ msgstr "" "Не удалось отправить отчёт!\n" "%s" -#: src/Gui/CCMainWindow.py:338 +#: ../src/Gui/CCMainWindow.py:333 ../src/Gui/CCMainWindow.py:360 #, python-format msgid "Error getting the report: %s" msgstr "Ошибка при получении отчёта: %s" -#: src/Gui/CCReporterDialog.py:98 +#: ../src/Gui/CCReporterDialog.py:177 +msgid "Brief description how to reproduce this or what you did..." +msgstr "Кратко опишите действия, которые привели к ошибке..." + +#: ../src/Gui/CCReporterDialog.py:219 +#, python-format +msgid "" +"Reporting disabled because the backtrace is unusable.\n" +"Please try to install debuginfo manually using command:<span color=\"blue\"> " +"debuginfo-install %s </span>\n" +"then use Refresh button to regenerate the backtrace." +msgstr "" +"Создание запроса отменено, так как сведения трассировки непригодны.\n" +"Попытайтесь установить debuginfo вручную: <span color=\"blue\"> " +"debuginfo-install %s </span>\n" +"и нажмите кнопку обновления для повторной генерации трассировки." + +#: ../src/Gui/CCReporterDialog.py:221 +msgid "The bactrace is unusable, you can't report this!" +msgstr "Непригодные для использования сведения трассировки. Они не будут отправлены." + +#: ../src/Gui/CCReporterDialog.py:227 +msgid "" +"The bactrace is incomplete, please make sure you provide good steps to " +"reproduce." +msgstr "Неполные сведения трассировки. Убедитесь, что указанные действия действительно помогают воспроизвести ошибку." + +#: ../src/Gui/CCReporterDialog.py:272 #, python-format msgid "" "<b>WARNING</b>, you're about to send data which might contain sensitive " @@ -230,190 +271,186 @@ msgstr "" "содержать конфиденциальную информацию.\n" "Вы действительно хотите отправить <b>%s</b>?\n" -#: src/Gui/CCReporterDialog.py:111 -msgid "Brief description how to reproduce this or what you did..." -msgstr "Кратко опишите действия, которые привели к ошибке..." - -#: src/Gui/dialogs.glade:7 +#: ../src/Gui/dialogs.glade.h:1 msgid "Report done" msgstr "Отчёт отправлен" -#: src/Gui/dialogs.glade:47 src/Gui/settings.glade:695 -#: src/Gui/settings.glade:785 +#: ../src/Gui/dialogs.glade.h:2 ../src/Gui/settings.glade.h:27 msgid "gtk-ok" msgstr "gtk-ok" -#: src/Gui/PluginSettingsUI.py:17 +#: ../src/Gui/PluginSettingsUI.py:18 msgid "Can't find PluginDialog widget in UI description!" msgstr "Не найден виджет PluginDialog в описании UI!" -#: src/Gui/PluginSettingsUI.py:21 +#. we shouldn't get here, but just to be safe +#: ../src/Gui/PluginSettingsUI.py:24 #, python-format msgid "No UI for plugin %s" msgstr "Нет UI для модуля %s" -#: src/Gui/PluginSettingsUI.py:38 src/Gui/PluginSettingsUI.py:64 +#: ../src/Gui/PluginSettingsUI.py:55 ../src/Gui/PluginSettingsUI.py:81 msgid "combo box is not implemented" msgstr "поле ввода недоступно" -#: src/Gui/PluginSettingsUI.py:47 +#: ../src/Gui/PluginSettingsUI.py:64 msgid "Nothing to hydrate!" msgstr "Нет данных для отображения!" -#: src/Gui/report.glade:64 +#: ../src/Gui/report.glade.h:2 msgid "Comment" msgstr "Комментарий" -#: src/Gui/report.glade:104 src/Gui/settings.glade:682 -#: src/Gui/settings.glade:797 -msgid "gtk-cancel" -msgstr "gtk-cancel" +#: ../src/Gui/report.glade.h:3 +msgid "How to reproduce (in a few simple steps)" +msgstr "Как повторить (набор действий)" -#: src/Gui/report.glade:119 +#: ../src/Gui/report.glade.h:5 msgid "Send" msgstr "Отправить" -#: src/Gui/SettingsDialog.py:34 src/Gui/SettingsDialog.py:51 +#: ../src/Gui/SettingsDialog.py:33 ../src/Gui/SettingsDialog.py:50 msgid "<b>Select plugin</b>" msgstr "<b>Выбрать модуль</b>" -#: src/Gui/SettingsDialog.py:37 +#: ../src/Gui/SettingsDialog.py:36 msgid "<b>Select database backend</b>" msgstr "<b>Выбрать базу данных</b>" -#: src/Gui/SettingsDialog.py:165 +#: ../src/Gui/SettingsDialog.py:165 msgid "Remove this job" msgstr "Удалить это задание" -#: src/Gui/SettingsDialog.py:208 +#: ../src/Gui/SettingsDialog.py:208 msgid "Remove this action" msgstr "Удалить это действие" -#: src/Gui/settings.glade:6 -msgid "Settings" -msgstr "Настройки" +#: ../src/Gui/settings.glade.h:1 +msgid "<b>Analyzer plugin</b>" +msgstr "<b>Модуль анализа</b>" -#: src/Gui/settings.glade:46 src/Gui/settings.glade:55 -#: src/Gui/settings.glade:107 src/Gui/settings.glade:120 -#: src/Gui/settings.glade:133 -msgid "Nothing selected" -msgstr "Ничего не выбрано" +#: ../src/Gui/settings.glade.h:2 +msgid "<b>Associated action</b>" +msgstr "<b>Связанное действие</b>" -#: src/Gui/settings.glade:72 -msgid "Web Site:" -msgstr "Веб-сайт:" +#: ../src/Gui/settings.glade.h:3 +msgid "<b>Plugin</b>" +msgstr "<b>Доп. модуль</b>" + +#: ../src/Gui/settings.glade.h:4 +msgid "<b>Time (or period)</b>" +msgstr "<b>Время (период времени)</b>" + +#: ../src/Gui/settings.glade.h:5 +msgid "Analyzers, Actions, Reporters" +msgstr "Анализаторы, действия, создатели отчётов" -#: src/Gui/settings.glade:84 +#: ../src/Gui/settings.glade.h:6 msgid "Author:" msgstr "Автор:" -#: src/Gui/settings.glade:97 -msgid "Version:" -msgstr "Версия:" - -#: src/Gui/settings.glade:152 -msgid "Plugin Details" -msgstr "Свойства модуля" +#: ../src/Gui/settings.glade.h:7 +msgid "Blacklisted packages: " +msgstr "Чёрный список пакетов:" -#: src/Gui/settings.glade:179 +#: ../src/Gui/settings.glade.h:8 msgid "C_onfigure plugin" msgstr "_Настроить модуль" -#: src/Gui/settings.glade:191 -msgid "gtk-close" -msgstr "gtk-close" - -#: src/Gui/settings.glade:221 -msgid "Global Settings" -msgstr "Общие настройки" - -#: src/Gui/settings.glade:240 +#: ../src/Gui/settings.glade.h:9 msgid "Check package GPG signature" msgstr "Проверить GPG-подпись пакета" -#: src/Gui/settings.glade:256 +#: ../src/Gui/settings.glade.h:10 +msgid "Common" +msgstr "Общие" + +#: ../src/Gui/settings.glade.h:11 +msgid "Cron" +msgstr "Cron" + +#: ../src/Gui/settings.glade.h:12 msgid "Database backend: " msgstr "База данных:" -#: src/Gui/settings.glade:281 -msgid "Blacklisted packages: " -msgstr "Чёрный список пакетов:" +#: ../src/Gui/settings.glade.h:13 +msgid "Edit blacklisted packages" +msgstr "Изменить чёрный список пакетов" -#: src/Gui/settings.glade:294 -msgid "Max coredump storage size(MB):" -msgstr "Макс. размер coredump (Мбайт):" +#: ../src/Gui/settings.glade.h:14 +msgid "GPG Keys" +msgstr "Ключи GPG" -#: src/Gui/settings.glade:307 +#: ../src/Gui/settings.glade.h:15 msgid "GPG keys: " msgstr "Ключи GPG:" -#: src/Gui/settings.glade:349 -msgid "Edit blacklisted packages" -msgstr "Изменить чёрный список пакетов" +#: ../src/Gui/settings.glade.h:16 +msgid "Global Settings" +msgstr "Общие настройки" -#: src/Gui/settings.glade:408 -msgid "Common" -msgstr "Общие" +#: ../src/Gui/settings.glade.h:17 +msgid "Max coredump storage size(MB):" +msgstr "Макс. размер coredump (Мбайт):" -#: src/Gui/settings.glade:438 -msgid "<b>Plugin</b>" -msgstr "<b>Доп. модуль</b>" +#: ../src/Gui/settings.glade.h:18 +msgid "Nothing selected" +msgstr "Ничего не выбрано" -#: src/Gui/settings.glade:448 -msgid "<b>Time (or period)</b>" -msgstr "<b>Время (период времени)</b>" +#: ../src/Gui/settings.glade.h:19 +msgid "Plugin Details" +msgstr "Свойства модуля" -#: src/Gui/settings.glade:510 src/Gui/settings.glade:624 -#: src/Gui/settings.glade:761 -msgid "gtk-add" -msgstr "gtk-add" +#: ../src/Gui/settings.glade.h:20 +msgid "Settings" +msgstr "Настройки" -#: src/Gui/settings.glade:534 -msgid "Cron" -msgstr "Cron" +#: ../src/Gui/settings.glade.h:21 +msgid "This function is not implemented yet!" +msgstr "Эта возможность ещё не добавлена!" -#: src/Gui/settings.glade:551 -msgid "<b>Analyzer plugin</b>" -msgstr "<b>Модуль анализа</b>" +#: ../src/Gui/settings.glade.h:22 +msgid "Version:" +msgstr "Версия:" -#: src/Gui/settings.glade:561 -msgid "<b>Associated action</b>" -msgstr "<b>Связанное действие</b>" +#: ../src/Gui/settings.glade.h:23 +msgid "Web Site:" +msgstr "Веб-сайт:" -#: src/Gui/settings.glade:648 -msgid "Analyzers, Actions, Reporters" -msgstr "Анализаторы, действия, создатели отчётов" +#: ../src/Gui/settings.glade.h:24 +msgid "gtk-add" +msgstr "gtk-add" -#: src/Gui/settings.glade:700 -msgid "This function is not implemented yet!" -msgstr "Эта возможность ещё не добавлена!" +#: ../src/Gui/settings.glade.h:25 +msgid "gtk-cancel" +msgstr "gtk-cancel" -#: src/Gui/settings.glade:738 -msgid "GPG Keys" -msgstr "Ключи GPG" +#: ../src/Gui/settings.glade.h:26 +msgid "gtk-close" +msgstr "gtk-close" -#: src/Gui/settings.glade:773 +#: ../src/Gui/settings.glade.h:28 msgid "gtk-remove" msgstr "gtk-remove" -#: src/Applet/Applet.cpp:71 +#: ../src/Applet/Applet.cpp:79 #, c-format msgid "A crash in package %s has been detected" msgstr "Сбой в пакете %s" -#: src/Applet/Applet.cpp:130 +#: ../src/Applet/Applet.cpp:138 msgid "ABRT service has been started" msgstr "Служба ABRT запущена" -#: src/Applet/Applet.cpp:132 src/Applet/Applet.cpp:246 +#: ../src/Applet/Applet.cpp:140 ../src/Applet/Applet.cpp:254 msgid "ABRT service is not running" msgstr "Служба ABRT не работает" -#: src/Applet/CCApplet.cpp:185 +#: ../src/Applet/CCApplet.cpp:185 msgid "Warning" msgstr "Предупреждение" -#: src/Daemon/Daemon.cpp:546 +#: ../src/Daemon/Daemon.cpp:520 msgid "" "Report size exceeded the quota. Please check system's MaxCrashReportsSize " "value in abrt.conf." @@ -421,120 +458,125 @@ msgstr "" "Размер отчёта превысил допустимый. Проверьте значение MaxCrashReportsSize в " "файле abrt.conf" -#: lib/Plugins/Bugzilla.cpp:83 -msgid "Empty login and password. Please check Bugzilla.conf" -msgstr "Пустое имя входа и пароль. Проверьте Bugzilla.conf" - -#: lib/Plugins/Bugzilla.cpp:227 -msgid "Bug is already reported: " -msgstr "Запрос уже создан:" - -#: lib/Plugins/Bugzilla.cpp:282 +#: ../lib/Plugins/Bugzilla.cpp:209 #, c-format -msgid "Binary file %s will not be reported." -msgstr "Запрос не будет создаваться для бинарного файла %s:" +msgid "Bug is already reported: %i" +msgstr "Запрос уже существует: %i" -#: lib/Plugins/Bugzilla.cpp:352 -msgid "New bug id: " -msgstr "Идентификатор запроса:" +#: ../lib/Plugins/Bugzilla.cpp:271 +#, c-format +msgid "New bug id: %i" +msgstr "Новый идентификатор запроса: %i" -#: lib/Plugins/Bugzilla.cpp:421 +#: ../lib/Plugins/Bugzilla.cpp:364 msgid "Checking for duplicates..." msgstr "Проверяется наличие дубликатов..." -#: lib/Plugins/Bugzilla.cpp:424 lib/Plugins/Bugzilla.cpp:436 +#: ../lib/Plugins/Bugzilla.cpp:367 msgid "Logging into bugzilla..." msgstr "Выполняется вход в Bugzilla..." -#: lib/Plugins/Bugzilla.cpp:427 -msgid "Check CC and add coment +1..." -msgstr "Проверьте список CC и добавьте комментарий..." +#: ../lib/Plugins/Bugzilla.cpp:371 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "Пустое имя входа и пароль. Проверьте Bugzilla.conf" + +#: ../lib/Plugins/Bugzilla.cpp:377 +msgid "Checking CC..." +msgstr "Выполняется проверка СС..." -#: lib/Plugins/Bugzilla.cpp:448 +#: ../lib/Plugins/Bugzilla.cpp:386 msgid "Creating new bug..." msgstr "Создаётся новый запрос..." -#: lib/Plugins/Bugzilla.cpp:453 +#: ../lib/Plugins/Bugzilla.cpp:390 msgid "Logging out..." msgstr "Выполняется выход..." -#: lib/Plugins/Kerneloops.cpp:37 +#: ../lib/Plugins/Kerneloops.cpp:37 msgid "Getting local universal unique identification" msgstr "Получение локальных идентификационных данных" -#: lib/Plugins/CCpp.cpp:146 +#: ../lib/Plugins/CCpp.cpp:254 msgid "Getting backtrace..." msgstr "Получение трассировки..." -#: lib/Plugins/CCpp.cpp:410 +#: ../lib/Plugins/CCpp.cpp:552 ../lib/Plugins/CCpp.cpp:679 msgid "Searching for debug-info packages..." msgstr "Выполняется поиск пакетов debug-info..." -#: lib/Plugins/CCpp.cpp:444 +#: ../lib/Plugins/CCpp.cpp:614 ../lib/Plugins/CCpp.cpp:713 msgid "Downloading and installing debug-info packages..." msgstr "Загружаются и устанавливаются пакеты debug-info..." -#: lib/Plugins/CCpp.cpp:506 +#: ../lib/Plugins/CCpp.cpp:818 msgid "Getting local universal unique identification..." msgstr "Получение локальных данных идентификации..." -#: lib/Plugins/CCpp.cpp:525 +#: ../lib/Plugins/CCpp.cpp:837 msgid "Getting global universal unique identification..." msgstr "Получение глобальных данных идентификации..." -#: lib/Plugins/CCpp.cpp:576 +#: ../lib/Plugins/CCpp.cpp:882 msgid "Starting report creation..." msgstr "Начинается создание отчёта..." -#: lib/Plugins/CCpp.cpp:605 +#: ../lib/Plugins/CCpp.cpp:912 msgid "Skipping debuginfo installation" msgstr "Пропускается установка debuginfo" -#: lib/Plugins/KerneloopsReporter.cpp:101 +#: ../lib/Plugins/KerneloopsReporter.cpp:102 msgid "Creating and submitting a report..." msgstr "Создание и отправка отчёта..." -#: lib/Plugins/Logger.cpp:58 lib/Plugins/Mailx.cpp:123 +#: ../lib/Plugins/Logger.cpp:65 ../lib/Plugins/Mailx.cpp:124 msgid "Creating a report..." msgstr "Создаётся отчёт..." -#: lib/Plugins/RunApp.cpp:62 +#: ../lib/Plugins/RunApp.cpp:64 msgid "Executing RunApp plugin..." msgstr "Выполняется модуль RunApp..." -#: lib/Plugins/FileTransfer.cpp:60 lib/Plugins/FileTransfer.cpp:355 +#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:384 msgid "FileTransfer: URL not specified" msgstr "FileTransfer: Не указан URL" -#: lib/Plugins/FileTransfer.cpp:77 +#: ../lib/Plugins/FileTransfer.cpp:67 #, c-format -msgid "Sending archive %s via %s" -msgstr "Архив %s отправляется через %s" +msgid "Sending archive %s to %s" +msgstr "Архив %s отправляется %s" -#: lib/Plugins/FileTransfer.cpp:284 +#: ../lib/Plugins/FileTransfer.cpp:309 msgid "File Transfer: Creating a report..." msgstr "File Transfer: Создаётся отчёт..." -#: lib/Plugins/FileTransfer.cpp:305 lib/Plugins/FileTransfer.cpp:334 -msgid "CFileTransfer::Run(): Cannot create and send an archive: " -msgstr "CFileTransfer::Run(): Не удалось создать и отправить архив: " +#: ../lib/Plugins/FileTransfer.cpp:334 +#, c-format +msgid "Can't create and send an archive: %s" +msgstr "Не удалось создать и отправить архив: %s" + +#: ../lib/Plugins/FileTransfer.cpp:359 +#, c-format +msgid "Can't create and send an archive %s" +msgstr "Не удалось создать и отправить архив: %s" -#: lib/Plugins/KerneloopsScanner.cpp:79 +#: ../lib/Plugins/KerneloopsScanner.cpp:84 msgid "Creating kernel oops crash reports..." msgstr "Создаются отчёты о сбоях ядра..." -#: lib/Plugins/Mailx.cpp:109 +#: ../lib/Plugins/Mailx.cpp:109 msgid "Sending an email..." msgstr "Отправляется почтовое сообщение..." -#: lib/Plugins/SOSreport.cpp:113 +#: ../lib/Plugins/SOSreport.cpp:100 msgid "Executing SOSreport plugin..." msgstr "Запускается модуль SOSreport..." -#: lib/Plugins/SOSreport.cpp:135 -msgid "running sosreport: " -msgstr "выполняется sosreport: " +#: ../lib/Plugins/SOSreport.cpp:122 +#, c-format +msgid "running sosreport: %s" +msgstr "выполняется sosreport: %s" -#: lib/Plugins/SOSreport.cpp:150 +#: ../lib/Plugins/SOSreport.cpp:137 msgid "done running sosreport" msgstr "sosreport завершён" + diff --git a/scripts/dbg_mkrpm b/scripts/dbg_mkrpm index 28b040e5..e5f0fe97 100755 --- a/scripts/dbg_mkrpm +++ b/scripts/dbg_mkrpm @@ -23,5 +23,8 @@ rm -rf "$T" || exit gzip "abrt-$ABRTVER".tar || exit - -./dbg_rpmbuildlocal -bb abrt.spec 2>&1 | tee -a "$0.log" +# Less ugly way to pass exitcode (without bashisms)? +{ ./dbg_rpmbuildlocal -bb abrt.spec 2>&1; echo $? >"EXITCODE"; } | tee -a "$0.log" +ret=`cat EXITCODE` +rm EXITCODE +exit "$ret" diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp index 67e72cca..53c44d3f 100644 --- a/src/Daemon/Daemon.cpp +++ b/src/Daemon/Daemon.cpp @@ -165,18 +165,6 @@ static double GetDirSize(const std::string &pPath, std::string *worst_dir = NULL return size; } -static bool analyzer_has_InformAllUsers(const char *analyzer_name) -{ - CAnalyzer* analyzer = g_pPluginManager->GetAnalyzer(analyzer_name); - if (!analyzer) - return false; - map_plugin_settings_t settings = analyzer->GetSettings(); - map_plugin_settings_t::const_iterator it = settings.find("InformAllUsers"); - if (it == settings.end()) - return false; - return string_to_bool(it->second.c_str()); -} - static void cron_delete_callback_data_cb(gpointer data) { cron_callback_data_t* cronDeleteCallbackData = static_cast<cron_callback_data_t*>(data); @@ -388,23 +376,24 @@ static void FindNewDumps(const char* pPath) switch (res) { case MW_OK: - VERB1 log("Saving into database (%s)", itt->c_str()); + VERB1 log("Saving %s into database", itt->c_str()); RunActionsAndReporters(crashinfo[CD_MWDDD][CD_CONTENT].c_str()); break; case MW_IN_DB: - VERB1 log("Already saved in database (%s)", itt->c_str()); + VERB1 log("%s is already saved in database", itt->c_str()); break; case MW_REPORTED: case MW_OCCURED: + VERB1 log("Already saved crash %s, deleting", itt->c_str()); + DeleteDebugDumpDir(itt->c_str()); + break; case MW_BLACKLISTED: case MW_CORRUPTED: case MW_PACKAGE_ERROR: case MW_GPG_ERROR: case MW_FILE_ERROR: default: -//Perhaps corrupted & bad needs to be logged unconditionally, -//already saved one - only on VERB1 - VERB1 log("Corrupted, bad or already saved crash, deleting"); + log("Corrupted or bad crash %s (res:%d), deleting", itt->c_str(), (int)res); DeleteDebugDumpDir(itt->c_str()); break; } @@ -556,7 +545,6 @@ static gboolean handle_inotify_cb(GIOChannel *gio, GIOCondition condition, gpoin : crashinfo[CD_UID][CD_CONTENT].c_str(); g_pCommLayer->Crash(crashinfo[CD_PACKAGE][CD_CONTENT].c_str(), uid_str); } - //DeleteDebugDumpDir(fullname.c_str()); break; case MW_BLACKLISTED: case MW_CORRUPTED: @@ -670,29 +658,36 @@ static void start_syslog_logging() logmode = LOGMODE_SYSLOG; } -static void ensure_root_writable_dir(const char *dir) +static void ensure_writable_dir(const char *dir, mode_t mode, const char *group) { struct stat sb; - if (mkdir(dir, 0755) != 0 && errno != EEXIST) + if (mkdir(dir, mode) != 0 && errno != EEXIST) perror_msg_and_die("Can't create '%s'", dir); if (stat(dir, &sb) != 0 || !S_ISDIR(sb.st_mode)) error_msg_and_die("'%s' is not a directory", dir); - if ((sb.st_uid != 0 || sb.st_gid != 0) && chown(dir, 0, 0) != 0) + + struct group *gr = getgrnam(group); + if (!gr) + perror_msg_and_die("Can't find group '%s'", group); + + if ((sb.st_uid != 0 || sb.st_gid != gr->gr_gid) && chown(dir, 0, gr->gr_gid) != 0) perror_msg_and_die("Can't set owner 0:0 on '%s'", dir); - /* We can't allow anyone to create dumps: otherwise users can flood - * us with thousands of bogus or malicious dumps */ - /* 07000 bits are setuid, setgit, and sticky, and they must be unset */ - /* 00777 bits are usual "rwxrwxrwx" access rights */ - if ((sb.st_mode & 07777) != 0755 && chmod(dir, 0755) != 0) - perror_msg_and_die("Can't set mode rwxr-xr-x on '%s'", dir); + if ((sb.st_mode & 07777) != mode && chmod(dir, mode) != 0) + perror_msg_and_die("Can't set mode %o on '%s'", mode, dir); } static void sanitize_dump_dir_rights() { - ensure_root_writable_dir(DEBUG_DUMPS_DIR); - ensure_root_writable_dir(DEBUG_DUMPS_DIR"-di"); /* debuginfo cache */ - ensure_root_writable_dir(VAR_RUN"/abrt"); /* temp dir */ + /* We can't allow anyone to create dumps: otherwise users can flood + * us with thousands of bogus or malicious dumps */ + /* 07000 bits are setuid, setgit, and sticky, and they must be unset */ + /* 00777 bits are usual "rwxrwxrwx" access rights */ + ensure_writable_dir(DEBUG_DUMPS_DIR, 0775, "abrt"); + /* debuginfo cache */ + ensure_writable_dir(DEBUG_DUMPS_DIR"-di", 0755, "root"); + /* temp dir */ + ensure_writable_dir(VAR_RUN"/abrt", 0755, "root"); } int main(int argc, char** argv) @@ -806,11 +801,6 @@ int main(int argc, char** argv) pMainloop = g_main_loop_new(NULL, FALSE); /* Watching DEBUG_DUMPS_DIR for new files... */ VERB1 log("Initializing inotify"); -// Enabled again since we have new abrt-pyhook-helper, remove comment when verified to work - /* FIXME: python hook runs with ordinary user privileges, - * so it fails if everyone doesn't have write acces - * to DEBUG_DUMPS_DIR - */ sanitize_dump_dir_rights(); errno = 0; int inotify_fd = inotify_init(); diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp index 6a635642..0bc358e1 100644 --- a/src/Daemon/MiddleWare.cpp +++ b/src/Daemon/MiddleWare.cpp @@ -456,10 +456,9 @@ void DeleteDebugDumpDir(const char *pDebugDumpDir) std::string DeleteCrashInfo(const char *pUUID, const char *pUID) { - database_row_t row; CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase); database->Connect(); - row = database->GetUUIDData(pUUID, pUID); + database_row_t row = database->GetUUIDData(pUUID, pUID); database->Delete(pUUID, pUID); database->DisConnect(); @@ -573,6 +572,21 @@ static mw_result_t SavePackageDescriptionToDebugDump(const char *pExecutable, return MW_OK; } +bool analyzer_has_InformAllUsers(const char *analyzer_name) +{ + CAnalyzer* analyzer = g_pPluginManager->GetAnalyzer(analyzer_name); + if (!analyzer) + { + VERB1 log("Strange, asked for analyzer %s but it doesn't exist?", analyzer_name); + return false; + } + map_plugin_settings_t settings = analyzer->GetSettings(); + map_plugin_settings_t::const_iterator it = settings.find("InformAllUsers"); + if (it == settings.end()) + return false; + return string_to_bool(it->second.c_str()); +} + /** * Execute all action plugins, which are associated to * particular analyzer plugin. @@ -621,14 +635,12 @@ static mw_result_t SaveDebugDumpToDatabase(const char *pUUID, const char *pDebugDumpDir, map_crash_info_t& pCrashInfo) { - mw_result_t res; CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase); - database_row_t row; database->Connect(); database->Insert(pUUID, pUID, pDebugDumpDir, pTime); - row = database->GetUUIDData(pUUID, pUID); + database_row_t row = database->GetUUIDData(pUUID, pUID); database->DisConnect(); - res = GetCrashInfo(pUUID, pUID, pCrashInfo); + mw_result_t res = GetCrashInfo(pUUID, pUID, pCrashInfo); if (row.m_sReported == "1") { log("Crash is already reported"); @@ -646,29 +658,19 @@ std::string getDebugDumpDir(const char *pUUID, const char *pUID) { CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase); - database_row_t row; database->Connect(); - row = database->GetUUIDData(pUUID, pUID); + database_row_t row = database->GetUUIDData(pUUID, pUID); database->DisConnect(); return row.m_sDebugDumpDir; } -mw_result_t SaveDebugDump(const char *pDebugDumpDir) -{ - map_crash_info_t info; - return SaveDebugDump(pDebugDumpDir, info); -} - mw_result_t SaveDebugDump(const char *pDebugDumpDir, map_crash_info_t& pCrashInfo) { - std::string lUUID; std::string UID; std::string time; std::string analyzer; std::string executable; - mw_result_t res; - try { CDebugDump dd; @@ -692,15 +694,17 @@ mw_result_t SaveDebugDump(const char *pDebugDumpDir, { return MW_IN_DB; } - res = SavePackageDescriptionToDebugDump(executable.c_str(), pDebugDumpDir); + mw_result_t res = SavePackageDescriptionToDebugDump(executable.c_str(), pDebugDumpDir); if (res != MW_OK) { return res; } - lUUID = GetLocalUUID(analyzer.c_str(), pDebugDumpDir); - - return SaveDebugDumpToDatabase(lUUID.c_str(), UID.c_str(), time.c_str(), pDebugDumpDir, pCrashInfo); + std::string lUUID = GetLocalUUID(analyzer.c_str(), pDebugDumpDir); + const char *uid_str = analyzer_has_InformAllUsers(analyzer.c_str()) + ? "-1" + : UID.c_str(); + return SaveDebugDumpToDatabase(lUUID.c_str(), uid_str, time.c_str(), pDebugDumpDir, pCrashInfo); } mw_result_t GetCrashInfo(const char *pUUID, @@ -709,16 +713,14 @@ mw_result_t GetCrashInfo(const char *pUUID, { pCrashInfo.clear(); CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase); - database_row_t row; database->Connect(); - row = database->GetUUIDData(pUUID, pUID); + database_row_t row = database->GetUUIDData(pUUID, pUID); database->DisConnect(); std::string package; std::string executable; std::string description; std::string analyzer; - try { CDebugDump dd; @@ -737,6 +739,7 @@ mw_result_t GetCrashInfo(const char *pUUID, } return MW_ERROR; } + add_crash_data_to_crash_info(pCrashInfo, CD_EXECUTABLE, executable); add_crash_data_to_crash_info(pCrashInfo, CD_PACKAGE, package); add_crash_data_to_crash_info(pCrashInfo, CD_DESCRIPTION, description); diff --git a/src/Daemon/MiddleWare.h b/src/Daemon/MiddleWare.h index 0671dd02..ac042def 100644 --- a/src/Daemon/MiddleWare.h +++ b/src/Daemon/MiddleWare.h @@ -120,12 +120,6 @@ void DeleteDebugDumpDir(const char *pDebugDumpDir); std::string DeleteCrashInfo(const char *pUUID, const char *pUID); /** - * Saves debugdump into database. - * @param pDebugDumpDir A debugdump directory. - * @return It return results of operation. See mw_result_t. - */ -mw_result_t SaveDebugDump(const char *pDebugDumpDir); -/** * Saves debugdump into database. If saving is successful, * it fills crash info. * @param pDebugDumpDir A debugdump directory. @@ -171,5 +165,6 @@ void AddAnalyzerActionOrReporter(const char *pAnalyzer, void AddActionOrReporter(const char *pActionOrReporter, const char *pArgs); +bool analyzer_has_InformAllUsers(const char *analyzer_name); #endif /*MIDDLEWARE_H_*/ diff --git a/src/Daemon/Settings.cpp b/src/Daemon/Settings.cpp index d9c9a98b..cefd35a4 100644 --- a/src/Daemon/Settings.cpp +++ b/src/Daemon/Settings.cpp @@ -132,7 +132,7 @@ static void ParseCommon() map_string_t::const_iterator end = s_mapSectionCommon.end(); if (it != end) { - g_settings_bOpenGPGCheck = it->second == "yes"; + g_settings_bOpenGPGCheck = string_to_bool(it->second.c_str()); } it = s_mapSectionCommon.find("OpenGPGPublicKeys"); if (it != end) diff --git a/src/Daemon/abrt-debuginfo-install b/src/Daemon/abrt-debuginfo-install index 6070b74d..b3d72922 100755 --- a/src/Daemon/abrt-debuginfo-install +++ b/src/Daemon/abrt-debuginfo-install @@ -80,22 +80,39 @@ count_words() { echo $# } -cleanup_and_report_missing() { -# Which debuginfo files are still missing, including those we just unpacked? - missing_build_ids=`for build_id in $build_ids; do +print_missing_build_ids() { + for build_id in $build_ids; do build_id1=${build_id:0:2} build_id2=${build_id:2} file="usr/lib/debug/.build-id/$build_id1/$build_id2.debug" test -f "/$file" && continue test -f "$cachedir/$file" && continue echo -n "$build_id " - done` + done +} + +print_missing_debuginfos() { + for build_id in $build_ids; do + build_id1=${build_id:0:2} + build_id2=${build_id:2} + file="usr/lib/debug/.build-id/$build_id1/$build_id2.debug" + if test x"$cachedir" != x"" && test x"$cachedir" != x"/" ; then + test -f "$cachedir/$file" && continue + fi + test -f "/$file" && continue + echo -n "/$file " + done +} + +cleanup_and_report_missing() { +# Which debuginfo files are still missing, including those we just unpacked? + missing_build_ids=`print_missing_build_ids` $debug && echo "missing_build_ids:$missing_build_ids" # If cachedir is specified, tempdir is just a staging area. Delete it if test x"$cachedir" != x""; then $debug && echo "Removing $tempdir" - rm -rf "$tempdir" + $debug || rm -rf "$tempdir" fi for missing in $missing_build_ids; do @@ -105,6 +122,98 @@ cleanup_and_report_missing() { test x"$missing_build_ids" != x"" && echo "`count_words $missing_build_ids` debuginfos can't be found" } +# $1: iteration (1,2...) +print_package_names() { + # We'll run something like: + # yum --enablerepo='*debuginfo*' --quiet provides \ + # /usr/lib/debug/.build-id/bb/11528d59940983f495e9cb099cafb0cb206051.debug \ + # /usr/lib/debug/.build-id/c5/b84c0ad3676509dc30bfa7d42191574dac5b06.debug ... + local yumopts="" + if test x"$1" = x"1"; then + yumopts="-C" + echo "`count_words $missing_debuginfo_files` missing debuginfos, getting package list from cache" >&2 + else + echo "`count_words $missing_debuginfo_files` missing debuginfos, getting package list" >&2 + fi + local cmd="yum $yumopts --enablerepo='*debuginfo*' --quiet provides $missing_debuginfo_files" + echo "$cmd" >"yum_provides.$1.OUT" + local yum_provides_OUT=`$cmd 2>&1` + local err=$? + printf "%s\nexitcode:%s\n" "$yum_provides_OUT" $err >>"yum_provides.$1.OUT" + test $err = 0 || exit 2 + + # The output is pretty machine-unfriendly: + # glibc-debuginfo-2.10.90-24.x86_64 : Debug information for package glibc + # Repo : rawhide-debuginfo + # Matched from: + # Filename : /usr/lib/debug/.build-id/5b/c784c8d63f87dbdeb747a773940956a18ecd2f.debug + # + # 1:dbus-debuginfo-1.2.12-2.fc11.x86_64 : Debug information for package dbus + # Repo : updates-debuginfo + # Matched from: + # Filename : /usr/lib/debug/.build-id/bc/da7d09eb6c9ee380dae0ed3d591d4311decc31.debug + # Need to massage it a lot. + # There can be duplicates (one package may provide many debuginfos). + printf "%s\n" "$yum_provides_OUT" \ + | grep -- -debuginfo- \ + | sed 's/^[0-9]*://' \ + | sed -e 's/ .*//' -e 's/:.*//' \ + | sort | uniq | xargs +} + +download_packages() { + ## Download with one command (too silent): + ## Redirecting, since progress bar stuff only messes up our output + ##yumdownloader --enablerepo='*debuginfo*' --quiet $packages >yumdownloader.OUT 2>&1 + ##err=$? + ##echo "exitcode:$err" >>yumdownloader.OUT + ##test $err = 0 || exit 2 + >yumdownloader.OUT + i=1 + for pkg in $packages; do + echo "Download $i/$num_packages: $pkg" + echo "Download $i/$num_packages: $pkg" >>yumdownloader.OUT + yumdownloader --enablerepo='*debuginfo*' --quiet $pkg >>yumdownloader.OUT 2>&1 + err=$? + echo "exitcode:$err" >>yumdownloader.OUT + echo >>yumdownloader.OUT + test $err = 0 || { echo "Download of $pkg failed!"; sleep 1; } + : $((i++)) + done + + for f in *.rpm; do + # Happens if no .rpm's were downloaded (yumdownloader problem) + # In this case, $f is the literal "*.rpm" string + test -f "$f" || exit 2 + echo "Unpacking: $f" + echo "Processing: $f" >>unpack.OUT + rpm2cpio <"$f" 2>>unpack.OUT | cpio -id >>unpack.OUT 2>&1 + done + + # Copy debuginfo files to cachedir + if test x"$cachedir" != x"" && test -d "$cachedir"; then + for build_id in $build_ids; do + build_id1=${build_id:0:2} + build_id2=${build_id:2} + + file="usr/lib/debug/.build-id/$build_id1/$build_id2.debug" + + test -f "/$file" && continue + test x"$cachedir" != x"/" && test -f "$cachedir/$file" && continue + + if test -f "$file"; then + # file is one of those we just installed. + # Cache it if cachedir is specified. + mkdir -p "$cachedir/usr/lib/debug/.build-id/$build_id1" + # Note: this does not preserve symlinks. This is intentional + $debug && echo Copying2 "$file" to "$cachedir/$file" >&2 + cp --remove-destination "$file" "$cachedir/$file" + continue + fi + done + fi +} + # eu-unstrip output example: # 0x400000+0x209000 23c77451cf6adff77fc1f5ee2a01d75de6511dda@0x40024c - - [exe] @@ -138,113 +247,39 @@ build_ids=`printf "%s\n" "$eu_unstrip_OUT" \ done | sort | uniq | xargs` $debug && echo "build_ids:$build_ids" -# Which debuginfo files are missing? -missing_debuginfo_files=`for build_id in $build_ids; do - build_id1=${build_id:0:2} - build_id2=${build_id:2} - file="usr/lib/debug/.build-id/$build_id1/$build_id2.debug" - if test x"$cachedir" != x"" && test x"$cachedir" != x"/" ; then - test -f "$cachedir/$file" && continue - fi - test -f "/$file" && continue - echo -n "/$file " -done` -$debug && echo "missing_debuginfo_files:$missing_debuginfo_files" - -if test x"$missing_debuginfo_files" = x""; then - cleanup_and_report_missing - exit 0 -fi - -# We'll run something like: -# yum --enablerepo='*debuginfo*' --quiet provides \ -# /usr/lib/debug/.build-id/bb/11528d59940983f495e9cb099cafb0cb206051.debug \ -# /usr/lib/debug/.build-id/c5/b84c0ad3676509dc30bfa7d42191574dac5b06.debug ... -echo "Determining list of packages for `count_words $missing_debuginfo_files` missing debuginfos" -yum_provides_OUT=`yum --enablerepo='*debuginfo*' --quiet provides $missing_debuginfo_files 2>&1` -err=$? -printf "%s\nexitcode:%s\n" "$yum_provides_OUT" $err >yum_provides.OUT -test $err = 0 || exit 2 +# We try to not run yum without -C unless absolutely necessary. +# Therefore we loop. yum is run by print_package_names function, +# on first iteration it is run with -C, on second - without, +# which usually causes yum to download updated filelists, +# which in turn takes several minutes and annoys users. +iter=0 +while true; do + : $((iter++)) + test $iter -gt 2 && break -# The output is pretty machine-unfriendly: -# glibc-debuginfo-2.10.90-24.x86_64 : Debug information for package glibc -# Repo : rawhide-debuginfo -# Matched from: -# Filename : /usr/lib/debug/.build-id/5b/c784c8d63f87dbdeb747a773940956a18ecd2f.debug -# -# 1:dbus-debuginfo-1.2.12-2.fc11.x86_64 : Debug information for package dbus -# Repo : updates-debuginfo -# Matched from: -# Filename : /usr/lib/debug/.build-id/bc/da7d09eb6c9ee380dae0ed3d591d4311decc31.debug -# Need to massage it a lot. -# There can be duplicates (one package may provide many debuginfos). -packages=`printf "%s\n" "$yum_provides_OUT" \ -| grep -- -debuginfo- \ -| sed 's/^[0-9]*://' \ -| sed -e 's/ .*//' -e 's/:.*//' \ -| sort | uniq | xargs` -$debug && echo "packages:$packages" - -# yum may return "" here if it found no packages (say, if coredump is from a new, -# unreleased package fresh from koji). -if test x"$packages" = x""; then - cleanup_and_report_missing - exit 1 -fi - -num_packages=`count_words $packages` -echo "Downloading $num_packages packages" -## Download with one command (too silent): -## Redirecting, since progress bar stuff only messes up our output -##yumdownloader --enablerepo='*debuginfo*' --quiet $packages >yumdownloader.OUT 2>&1 -##err=$? -##echo "exitcode:$err" >>yumdownloader.OUT -##test $err = 0 || exit 2 ->yumdownloader.OUT -i=1 -for pkg in $packages; do - echo "Download $i/$num_packages: $pkg" - echo "Download $i/$num_packages: $pkg" >>yumdownloader.OUT - yumdownloader --enablerepo='*debuginfo*' --quiet $pkg >>yumdownloader.OUT 2>&1 - err=$? - echo "exitcode:$err" >>yumdownloader.OUT - echo >>yumdownloader.OUT - test $err = 0 || { echo "Download of $pkg failed!"; sleep 1; } - : $((i++)) -done + # Analyze $build_ids and check which debuginfos are present + missing_debuginfo_files=`print_missing_debuginfos` + $debug && echo "missing_debuginfo_files:$missing_debuginfo_files" -for f in *.rpm; do - # Happens if no .rpm's were downloaded (yumdownloader problem) - # In this case, $f is the literal "*.rpm" string - test -f "$f" || exit 2 - echo "Unpacking: $f" - echo "Processing: $f" >>unpack.OUT - rpm2cpio <"$f" 2>>unpack.OUT | cpio -id >>unpack.OUT 2>&1 -done + if test x"$missing_debuginfo_files" = x""; then + break + fi -# Copy debuginfo files to cachedir -if test x"$cachedir" != x"" && test -d "$cachedir"; then - for build_id in $build_ids; do - build_id1=${build_id:0:2} - build_id2=${build_id:2} + # Map $missing_debuginfo_files to package names. + # yum is run here. + packages=`print_package_names $iter` + $debug && echo "packages ($iter):$packages" - file="usr/lib/debug/.build-id/$build_id1/$build_id2.debug" + # yum may return "" here if it found no packages (say, if coredump + # is from a new, unreleased package fresh from koji). + if test x"$packages" = x""; then + continue + fi - test -f "/$file" && continue - test x"$cachedir" != x"/" && test -f "$cachedir/$file" && continue - - if test -f "$file"; then - # file is one of those we just installed. - # Cache it if cachedir is specified. - mkdir -p "$cachedir/usr/lib/debug/.build-id/$build_id1" - # Note: this does not preserve symlinks. This is intentional - $debug && echo Copying2 "$file" to "$cachedir/$file" >&2 - cp --remove-destination "$file" "$cachedir/$file" - continue - fi - done -fi -$debug && echo "missing_build_ids:$missing_build_ids" + num_packages=`count_words $packages` + echo "Downloading $num_packages packages" + download_packages +done cleanup_and_report_missing diff --git a/src/Gui/CCMainWindow.py b/src/Gui/CCMainWindow.py index d3a3abd0..31ebb410 100644 --- a/src/Gui/CCMainWindow.py +++ b/src/Gui/CCMainWindow.py @@ -88,7 +88,7 @@ class MainWindow(): columns[0] = gtk.TreeViewColumn(_("Package")) columns[1] = gtk.TreeViewColumn(_("Application")) columns[2] = gtk.TreeViewColumn(_("Date")) - columns[3] = gtk.TreeViewColumn(_("Crash Rate")) + columns[3] = gtk.TreeViewColumn(_("Crash count")) if os.getuid() == 0: column = gtk.TreeViewColumn(_("User")) columns.append(column) diff --git a/src/Gui/CCReporterDialog.py b/src/Gui/CCReporterDialog.py index e1d1c1bb..61e65526 100644 --- a/src/Gui/CCReporterDialog.py +++ b/src/Gui/CCReporterDialog.py @@ -43,6 +43,10 @@ class ReporterDialog(): self.tvComment = self.wTree.get_widget("tvComment") self.tvComment.connect("focus-in-event", self.on_comment_focus_cb) self.comment_changed = False + + # "how to reproduce" textview + self.tevHowToReproduce = self.wTree.get_widget("tevHowToReproduce") + self.how_to_changed = False self.tvReport = self.wTree.get_widget("tvReport") @@ -76,7 +80,7 @@ class ReporterDialog(): # connect the signals self.tvReport.connect_after("size-allocate", self.on_window_resize) self.wTree.get_widget("bSend").connect("clicked", self.on_send_clicked) - # start whit the warning hidden, so it's not visible when there is no rating + # start with the warning hidden, so it's not visible when there is no rating self.wTree.get_widget("ebErrors").hide() self.hydrate() @@ -182,6 +186,20 @@ class ReporterDialog(): self.tvComment.set_buffer(buff) continue + if item == "How to reproduce": + buff = gtk.TextBuffer() + how_to_reproduce = _("") + try: + if self.report[item][CONTENT]: + how_to_reproduce = self.report[item][CONTENT] + self.how_to_changed = True + except Exception, e: + pass + + buff.set_text(how_to_reproduce) + + self.tevHowToReproduce.set_buffer(buff) + continue # if an backtrace has rating use it if item == "rating": try: @@ -198,7 +216,7 @@ class ReporterDialog(): ebErrors.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("red")) if package: lErrors.set_markup( - "<span color=\"white\">%s</span>" % _("Reporting disabled because the backtrace is unusable!\nPlease try to install debuginfo manually using command:<span color=\"blue\"> debuginfo-install %s </span>\nthen use Refresh button to regenerate the backtrace." % package[0:package.rfind('-',0,package.rfind('-'))])) + "<span color=\"white\">%s</span>" % _("Reporting disabled because the backtrace is unusable.\nPlease try to install debuginfo manually using command:<span color=\"blue\"> debuginfo-install %s </span>\nthen use Refresh button to regenerate the backtrace." % package[0:package.rfind('-',0,package.rfind('-'))])) else: lErrors.set_markup("<span color=\"white\">%s</span>" % _("The bactrace is unusable, you can't report this!")) bSend.set_sensitive(False) @@ -232,11 +250,18 @@ class ReporterDialog(): self.report[rowe["item"]][CONTENT] = rowe["content"] else: del self.report[rowe["item"]] + # handle comment if self.comment_changed: buff = self.tvComment.get_buffer() self.report["Comment"] = ['t', 'y', buff.get_text(buff.get_start_iter(),buff.get_end_iter())] else: del self.report["Comment"] + # handle how to reproduce + if self.how_to_changed: + buff = self.tevHowToReproduce.get_buffer() + self.report["How to reproduce"] = ['t', 'y', buff.get_text(buff.get_start_iter(),buff.get_end_iter())] + else: + del self.report["How to reproduce"] def on_send_clicked(self, button): #def on_apply_clicked(self, button, treeview): diff --git a/src/Gui/report.glade b/src/Gui/report.glade index 2ccf1690..ce21acb1 100644 --- a/src/Gui/report.glade +++ b/src/Gui/report.glade @@ -69,7 +69,50 @@ </packing> </child> <child> - <placeholder/> + <widget class="GtkVBox" id="vbox2"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <widget class="GtkEventBox" id="eventbox2"> + <property name="visible">True</property> + <child> + <widget class="GtkLabel" id="lHowToReproduce"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="ypad">2</property> + <property name="label" translatable="yes">How to reproduce (in a few simple steps)</property> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow2"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <widget class="GtkTextView" id="tevHowToReproduce"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="wrap_mode">word</property> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> </child> <child> <widget class="GtkVBox" id="vbox1"> diff --git a/src/Hooks/CCpp.cpp b/src/Hooks/CCpp.cpp index 0f95d05b..3ab8f406 100644 --- a/src/Hooks/CCpp.cpp +++ b/src/Hooks/CCpp.cpp @@ -205,19 +205,19 @@ int main(int argc, char** argv) dd.Close(); perror_msg_and_die("can't open '%s'", path); } - if (copyfd_eof(STDIN_FILENO, fd) < 0) + off_t size = copyfd_eof(STDIN_FILENO, fd); + if (size < 0 || close(fd) != 0) { - /* close(fd); - why bother? */ + unlink(path); dd.Delete(); dd.Close(); /* copyfd_eof logs the error including errno string, * but it does not log file name */ error_msg_and_die("error saving coredump to %s", path); } - /* close(fd); - why bother? */ - /* free(executable); */ + /* free(executable); - why bother? */ /* free(cmdline); */ - log("saved core dump of pid %u to %s", (int)pid, path); + log("saved core dump of pid %u to %s (%llu bytes)", (int)pid, path, (long long)size); } catch (CABRTException& e) { diff --git a/src/Hooks/Makefile.am b/src/Hooks/Makefile.am index 4eb25e2d..e581c25b 100644 --- a/src/Hooks/Makefile.am +++ b/src/Hooks/Makefile.am @@ -57,7 +57,3 @@ abrt_exception_handler.py: # RPM fix: we need to regenerate abrt_exception_handler.py, because it has the default ddir install-data-local: sed s,@DEBUG_DUMP_DIR@,$(DEBUG_DUMPS_DIR),g abrt_exception_handler.py.in > abrt_exception_handler.py - -install-data-hook: - chmod u+s,g+s $(DESTDIR)$(bindir)/abrt-pyhook-helper - diff --git a/src/Hooks/abrt-pyhook-helper.cpp b/src/Hooks/abrt-pyhook-helper.cpp index 8a5a1914..08ccc125 100644 --- a/src/Hooks/abrt-pyhook-helper.cpp +++ b/src/Hooks/abrt-pyhook-helper.cpp @@ -20,6 +20,7 @@ */ #include <getopt.h> +#include <unistd.h> /* We can easily get rid of abrtlib (libABRTUtils.so) usage in this file, * but DebugDump will pull it in anyway */ #include "abrtlib.h" @@ -34,7 +35,6 @@ static char *pid; static char *executable; static char *uuid; static char *cmdline; -static char *loginuid; int main(int argc, char** argv) { @@ -45,7 +45,6 @@ int main(int argc, char** argv) { "executable", required_argument, NULL, 'e' }, { "uuid" , required_argument, NULL, 'u' }, { "cmdline" , required_argument, NULL, 'c' }, - { "loginuid" , required_argument, NULL, 'l' }, { 0 }, }; int opt; @@ -65,9 +64,6 @@ int main(int argc, char** argv) case 'c': cmdline = optarg; break; - case 'l': - loginuid = optarg; - break; default: usage: error_msg_and_die( @@ -77,7 +73,6 @@ int main(int argc, char** argv) " -p,--executable PATH absolute path to the program that crashed\n" " -u,--uuid UUID hash generated from the backtrace\n" " -c,--cmdline TEXT command line of the crashed program\n" - " -l,--loginuid UID login UID\n" ); } } @@ -112,8 +107,11 @@ int main(int argc, char** argv) dd.SaveText("cmdline", cmdline); if (uuid) dd.SaveText("uuid", uuid); - if (loginuid) - dd.SaveText("uid", loginuid); + + char uid[sizeof(int) * 3 + 2]; + sprintf(uid, "%d", (int)getuid()); + dd.SaveText("uid", uid); + dd.SaveText("backtrace", bt); free(bt); dd.Close(); diff --git a/src/Hooks/abrt_exception_handler.py.in b/src/Hooks/abrt_exception_handler.py.in index 010bf12d..5514f1a4 100644 --- a/src/Hooks/abrt_exception_handler.py.in +++ b/src/Hooks/abrt_exception_handler.py.in @@ -114,7 +114,6 @@ def write_dump(pid, tb_uuid, tb): command.append("--executable=%s" % executable) command.append("--uuid=%s" % tb_uuid) command.append("--cmdline=%s" % open("/proc/%s/cmdline" % pid).read().replace('\x00',' ')) - command.append("--loginuid=%s" % open("/proc/%s/loginuid" % pid).readlines()[0]) helper = subprocess.Popen(command, stdin=subprocess.PIPE) helper.communicate(tb) |