summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Klic <kklic@redhat.com>2009-10-19 12:02:40 +0200
committerKarel Klic <kklic@redhat.com>2009-10-19 12:02:40 +0200
commite714cfac17dcdb44c0b47f6f1323eade7fc9a3fe (patch)
tree0806832a14168b3ee356948487a1909956d10a88
parentc9f43d22c5bf1d1bb392ee426c72d383b2241bbe (diff)
parenta0ad2aada47afdc78d6b807e7c51c854d50accda (diff)
downloadabrt-e714cfac17dcdb44c0b47f6f1323eade7fc9a3fe.tar.gz
abrt-e714cfac17dcdb44c0b47f6f1323eade7fc9a3fe.tar.xz
abrt-e714cfac17dcdb44c0b47f6f1323eade7fc9a3fe.zip
Merge branch 'master' of git://git.fedorahosted.org/git/abrt
-rw-r--r--abrt.spec31
-rw-r--r--configure.ac2
-rw-r--r--lib/Plugins/CCpp.cpp212
-rw-r--r--src/CLI/abrt-cli.14
-rw-r--r--src/Daemon/Makefile.am5
-rwxr-xr-xsrc/Daemon/abrt-debuginfo-install175
-rw-r--r--src/Daemon/org.fedoraproject.abrt.policy4
-rw-r--r--src/Gui/ABRTExceptions.py4
-rwxr-xr-x[-rw-r--r--]src/Gui/abrt-gui2
9 files changed, 266 insertions, 173 deletions
diff --git a/abrt.spec b/abrt.spec
index 892653cb..841bfe67 100644
--- a/abrt.spec
+++ b/abrt.spec
@@ -3,8 +3,8 @@
%{!?python_sitearch: %define python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")}
Summary: Automatic bug detection and reporting tool
Name: abrt
-Version: 0.0.9
-Release: 3%{?dist}
+Version: 0.0.10
+Release: 1%{?dist}
License: GPLv2+
Group: Applications/System
URL: https://fedorahosted.org/abrt/
@@ -243,6 +243,7 @@ fi
%defattr(-,root,root,-)
%doc README COPYING
%{_sbindir}/%{name}d
+%{_bindir}/%{name}-debuginfo-install
%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/dbus-%{name}.conf
%{_initrddir}/%{name}d
@@ -358,7 +359,31 @@ fi
%defattr(-,root,root,-)
%changelog
-* Wed Sep 23 2009 jiri Moskovcak <jmoskovc@redhat.com> 0.0.9-2
+* Thu Oct 15 2009 Jiri Moskovcak <jmoskovc@redhat.com> 0.0.10-1
+- new version
+- added more logging (vda.linux@googlemail.com)
+- made polkit policy to be more permissive when installing debuginfo (jmoskovc@redhat.com)
+- lib/Plugins/CCpp.cpp: add build-ids to backtrace (vda.linux@googlemail.com)
+- lib/Plugins/CCpp.cpp: do not use temp file for gdb commands - use -ex CMD instead (vda.linux@googlemail.com)
+- GUI: added refresh button, added sanity check to plugin settings (jmoskovc@redhat.com)
+- Initial man page for abrt-cli (kklic@redhat.com)
+- Added --version, -V, --help, -? options. Fixed crash caused by unknown option. (kklic@redhat.com)
+- Date/time honors current system locale (kklic@redhat.com)
+- fixed saving/reading user config (jmoskovc@redhat.com)
+- SPEC: added gnome-python2-gnomekeyring to requirements (jmoskovc@redhat.com)
+- GUI: call Report() with the latest pluginsettings (jmoskovc@redhat.com)
+- Fix Bug 526220 - [abrt] crash detected in abrt-gui-0.0.9-2.fc12 (vda.linux@googlemail.com)
+- removed unsecure reading/writting from ~HOME directory rhbz#522878 (jmoskovc@redhat.com)
+- error checking added to archive creation (danny@rawhide.localdomain)
+- try using pk-debuginfo-install before falling back to debuginfo-install (vda.linux@googlemail.com)
+- abrt-gui: make "report" toolbar button work even if abrtd is not running (vda.linux@googlemail.com)
+- set LIMIT_MESSAGE to 16k, typo fix and daemon now reads config information from dbus (npajkovs@redhat.com)
+- add support for abrtd autostart (vda.linux@googlemail.com)
+- GUI: reversed the dumplist, so the latest crashes are at the top (jmoskovc@redhat.com)
+- rewrite FileTransfer to use library calls instead of commandline calls for compression (dnovotny@redhat.com)
+- and many minor fixes ..
+
+* Wed Sep 23 2009 Jiri Moskovcak <jmoskovc@redhat.com> 0.0.9-2
- added bug-buddy to provides rhbz#524934
* Tue Sep 22 2009 Jiri Moskovcak <jmoskovc@redhat.com> 0.0.9-1
diff --git a/configure.ac b/configure.ac
index c8c03889..aa9579ba 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([abrt], [0.0.9], [jmoskovc@redhat.com])
+AC_INIT([abrt], [0.0.10], [jmoskovc@redhat.com])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
diff --git a/lib/Plugins/CCpp.cpp b/lib/Plugins/CCpp.cpp
index 34201174..40aadd24 100644
--- a/lib/Plugins/CCpp.cpp
+++ b/lib/Plugins/CCpp.cpp
@@ -87,6 +87,18 @@ static std::string CreateHash(const std::string& pInput)
return hash_str;
}
+static std::string concat_str_vector(char **strings)
+{
+ std::string result;
+ while (*strings)
+ {
+ result += *strings++;
+ if (*strings)
+ result += ' ';
+ }
+ return result;
+}
+
static pid_t ExecVP(char** pArgs, uid_t uid, std::string& pOutput)
{
int pipeout[2];
@@ -107,11 +119,7 @@ static pid_t ExecVP(char** pArgs, uid_t uid, std::string& pOutput)
}
if (child == 0)
{
- VERB1 log("Executing: %s %s %s %s", pArgs[0]
- ,pArgs[1] ? pArgs[1] : ""
- ,pArgs[1] && pArgs[2] ? pArgs[2] : ""
- ,pArgs[1] && pArgs[2] && pArgs[3] ? pArgs[3] : ""
- );
+ VERB1 log("Executing: %s", concat_str_vector(pArgs).c_str());
close(pipeout[0]); /* read side of the pipe */
xmove_fd(pipeout[1], STDOUT_FILENO);
/* Make sure stdin is safely open to nothing */
@@ -164,10 +172,10 @@ static void GetBacktrace(const std::string& pDebugDumpDir, std::string& pBacktra
char* args[9];
args[0] = (char*)"gdb";
args[1] = (char*)"-batch";
- // when/if we'll add support for networked debuginfos
+ // when/if gdb supports it:
// (https://bugzilla.redhat.com/show_bug.cgi?id=528668):
- //args[] = (char*)"-ex";
- //args[] = xasprintf("set debug-file-directory %s", dir);
+ //args[2] = (char*)"-ex";
+ //args[3] = "set debug-file-directory /usr/lib/debug/.build-id:/var/cache/abrt-di/usr/lib/debug/.build-id";
/*
* Unfortunately, "file BINARY_FILE" doesn't work well if BINARY_FILE
* was deleted (as often happens during system updates):
@@ -365,75 +373,9 @@ static std::string run_unstrip_n(const std::string& pDebugDumpDir)
static void InstallDebugInfos(const std::string& pDebugDumpDir, std::string& build_ids)
{
- log("Getting module names, file names, build IDs from core file");
- std::string unstrip_list = run_unstrip_n(pDebugDumpDir);
-
- log("Builting list of missing debuginfos");
- // lines look like this:
- // 0x400000+0x209000 23c77451cf6adff77fc1f5ee2a01d75de6511dda@0x40024c - - [exe]
- // 0x400000+0x209000 ab3c8286aac6c043fd1bb1cc2a0b88ec29517d3e@0x40024c /bin/sleep /usr/lib/debug/bin/sleep.debug [exe]
- // 0x7fff313ff000+0x1000 389c7475e3d5401c55953a425a2042ef62c4c7df@0x7fff313ff2f8 . - linux-vdso.so.1
- vector_string_t missing;
- char *dup = xstrdup(unstrip_list.c_str());
- char *p = dup;
- char c;
- do {
- char* end = strchrnul(p, '\n');
- c = *end;
- *end = '\0';
- char* word2 = strchr(p, ' ');
- if (!word2)
- continue;
- word2++;
- char* endsp = strchr(word2, ' ');
- if (!endsp)
- continue;
- /* endsp points to 2nd space in the line now*/
-
- /* This filters out linux-vdso.so, among others */
- if (strstr(endsp, "[exe]") == NULL && endsp[1] != '/')
- continue;
- *endsp = '\0';
- char* at = strchrnul(word2, '@');
- *at = '\0';
-
- bool file_exists = 1;
- if (word2[0] && word2[1] && is_hexstr(word2))
- {
- struct stat sb;
- char *fn = xasprintf("/usr/lib/debug/.build-id/%.2s/%s.debug", word2, word2 + 2);
- /* Not lstat: this is a symlink and we want link's TARGET to exist */
- file_exists = stat(fn, &sb) == 0 && S_ISREG(sb.st_mode);
- free(fn);
- build_ids += "build-id ";
- build_ids += word2;
- build_ids += file_exists ? " (debuginfo present)\n" : " (debuginfo absent)\n";
- }
- log("build_id:%s exists:%d", word2, (int)file_exists);
- if (!file_exists)
- missing.push_back(word2);
-
- p = end + 1;
- } while (c);
- free(dup);
-
- if (missing.size() == 0)
- {
- log("All debuginfos are present, not installing debuginfo packages");
- return;
- }
- //missing vector is unused for now, but TODO: use it to install only needed debuginfos
-
- std::string package;
- {
- CDebugDump dd;
- dd.Open(pDebugDumpDir);
- dd.LoadText(FILENAME_PACKAGE, package);
- }
-
update_client(_("Searching for debug-info packages..."));
- int pipein[2], pipeout[2];
+ int pipein[2], pipeout[2]; //TODO: get rid of pipein
xpipe(pipein);
xpipe(pipeout);
@@ -454,45 +396,18 @@ static void InstallDebugInfos(const std::string& pDebugDumpDir, std::string& bui
/*close(STDERR_FILENO);*/
setsid();
-/* Honestly, I do not know what is worse, pk-debuginfo-install or debuginfo-install:
-
-# pk-debuginfo-install -y -- coreutils-7.2-4.fc11
-1. Getting sources list...OK. Found 16 enabled and 23 disabled sources.
-2. Finding debugging sources...OK. Found 0 disabled debuginfo repos.
-3. Enabling debugging sources...OK. Enabled 0 debugging sources.
-4. Finding debugging packages...Failed to find the package : more than one package found for
-Failed to find the package : more than one package found for
-FAILED. Found no packages to install.
-5. Disabling sources previously enabled...OK. Disabled 0 debugging sources.
-
-:( FAIL!
-
-# debuginfo-install -y -- coreutils-7.2-4.fc11
-Loaded plugins: refresh-packagekit
-Another application is holding the yum lock, cannot continue
-:( FAIL!
-
-# debuginfo-install -y -- coreutils-7.2-4.fc11
-(second time in a row - it worked)
-
-*/
+ char *coredump = xasprintf("%s/"FILENAME_COREDUMP, pDebugDumpDir.c_str());
+ char *tempdir = xasprintf("/tmp/abrt-%u-%lu", (int)getpid(), (long)time(NULL));
/* log() goes to stderr/syslog, it's ok to use it here */
- VERB1 log("Executing: %s %s %s %s", "pk-debuginfo-install", "-y", "--", package.c_str());
- execlp("pk-debuginfo-install", "pk-debuginfo-install", "-y", "--", package.c_str(), NULL);
- /* fall back */
- VERB1 log("Executing: %s %s %s %s", "debuginfo-install", "-y", "--", package.c_str());
- execlp("debuginfo-install", "debuginfo-install", "-y", "--", package.c_str(), NULL);
+ VERB1 log("Executing: %s %s %s %s", "abrt-debuginfo-install", coredump, tempdir, "/"); // "/var/cache/abrt-di"
+ execlp("abrt-debuginfo-install", "abrt-debuginfo-install", coredump, tempdir, "/", NULL);
exit(1);
}
close(pipein[0]);
close(pipeout[1]);
- /* Should not be needed (we use -y option), but just in case: */
- safe_write(pipein[1], "y\n", sizeof("y\n")-1);
- close(pipein[1]);
-
update_client(_("Downloading and installing debug-info packages..."));
FILE *pipeout_fp = fdopen(pipeout[0], "r");
@@ -503,50 +418,30 @@ Another application is holding the yum lock, cannot continue
return;
}
-/* glx-utils, for example, do not have glx-utils-debuginfo package.
- * Disabled code was causing failures in backtrace decoding.
- * This does not seem to be useful.
- */
-#ifdef COMPLAIN_IF_NO_DEBUGINFO
- bool already_installed = false;
-#endif
char buff[1024];
- std::string packageName = package.substr(0, package.rfind("-", package.rfind("-")-1));
while (fgets(buff, sizeof(buff), pipeout_fp))
{
int last = strlen(buff) - 1;
if (last >= 0 && buff[last] == '\n')
buff[last] = '\0';
- /* log(buff); - update_client logs it too */
- update_client(buff); /* maybe only if buff != ""? */
-
-#ifdef COMPLAIN_IF_NO_DEBUGINFO
- if (already_installed == false)
+ if (strncmp(buff, "MISSING:", 8) == 0)
{
- /* "Package foo-debuginfo-1.2-5.ARCH already installed and latest version" */
- char* pn = strstr(buff, packageName.c_str());
- if (pn)
- {
- char* already_str = strstr(pn, "already installed and latest version");
- if (already_str)
- {
- already_installed = true;
- }
- }
+ build_ids += "Debuginfo absent: ";
+ build_ids += buff + 8;
+ build_ids += "\n";
}
- if (already_installed == false &&
- (strstr(buff, "No debuginfo packages available to install") != NULL ||
- strstr(buff, "Could not find debuginfo for main pkg") != NULL ||
- strstr(buff, "Could not find debuginfo pkg for dependency package") != NULL))
+ const char *p = buff;
+ while (*p == ' ' || *p == '\t')
{
- fclose(pipeout_fp);
- kill(child, SIGTERM);
- wait(NULL);
- throw CABRTException(EXCEP_PLUGIN, std::string(__func__) + ": cannot install debuginfos for " + pPackage);
+ p++;
+ }
+ if (*p)
+ {
+ /* log(buff); - update_client logs it too */
+ update_client(buff);
}
-#endif
}
fclose(pipeout_fp);
@@ -592,35 +487,29 @@ std::string CAnalyzerCCpp::GetGlobalUUID(const std::string& pDebugDumpDir)
static bool DebuginfoCheckPolkit(int uid)
{
- PolkitResult result;
- int child_pid;
-
- child_pid = fork();
-
+ int child_pid = fork();
+ if (child_pid < 0)
+ {
+ perror_msg_and_die("fork");
+ }
if (child_pid == 0)
{
//child
- setuid(uid);
- result = polkit_check_authorization(getpid(),
+ if (setuid(uid))
+ exit(1); //paranoia
+ PolkitResult result = polkit_check_authorization(getpid(),
"org.fedoraproject.abrt.install-debuginfos");
- if (result == PolkitYes)
- {
- exit(0); //authentication OK
- }
- exit(1);
- } else
- {
- //parent
- int status;
-
- waitpid(child_pid, &status, 0);
- if (WEXITSTATUS(status) == 0)
- {
- return true; //authentication OK
- }
- return false;
+ exit(result != PolkitYes); //exit 1 (failure) if not allowed
}
+ //parent
+ int status;
+ if (waitpid(child_pid, &status, 0) > 0 && WEXITSTATUS(status) == 0)
+ {
+ return true; //authorization OK
+ }
+ log("UID %d is not authorized to install debuginfos", uid);
+ return false;
}
void CAnalyzerCCpp::CreateReport(const std::string& pDebugDumpDir, int force)
@@ -663,6 +552,7 @@ void CAnalyzerCCpp::CreateReport(const std::string& pDebugDumpDir, int force)
dd.Open(pDebugDumpDir);
dd.SaveText(FILENAME_BACKTRACE, build_ids + backtrace);
+log("BACKTRACE:'%s'", (build_ids + backtrace).c_str());
if (m_bMemoryMap)
{
dd.SaveText(FILENAME_MEMORYMAP, "memory map of the crashed C/C++ application, not implemented yet");
diff --git a/src/CLI/abrt-cli.1 b/src/CLI/abrt-cli.1
index fb0a7c89..5f132dfa 100644
--- a/src/CLI/abrt-cli.1
+++ b/src/CLI/abrt-cli.1
@@ -2,12 +2,12 @@
.SH NAME
abrt\-cli \- a command line interface to abrt
.SH SYNOPSIS
-.B abrt\-cli
+.B abrt\-cli
[option]
.SH DESCRIPTION
.I abrt\-cli
is a command line tool that manages application crashes catched by
-.I abrtd
+.I abrtd
daemon. It enables access to crash data, and allows to report
crashes depending on active abrt plugins.
.SH OPTIONS
diff --git a/src/Daemon/Makefile.am b/src/Daemon/Makefile.am
index 29c7f1be..0067e5dd 100644
--- a/src/Daemon/Makefile.am
+++ b/src/Daemon/Makefile.am
@@ -1,3 +1,5 @@
+bin_SCRIPTS = abrt-debuginfo-install
+
sbin_PROGRAMS = abrtd
abrtd_SOURCES = \
@@ -43,7 +45,8 @@ comredhatabrtservicedir = ${datadir}/dbus-1/system-services
dist_comredhatabrtservice_DATA = com.redhat.abrt.service
man_MANS = abrtd.8 abrt.conf.5
-EXTRA_DIST = $(man_MANS)
+
+EXTRA_DIST = $(man_MANS) abrt-debuginfo-install
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
diff --git a/src/Daemon/abrt-debuginfo-install b/src/Daemon/abrt-debuginfo-install
new file mode 100755
index 00000000..fe55250a
--- /dev/null
+++ b/src/Daemon/abrt-debuginfo-install
@@ -0,0 +1,175 @@
+#!/bin/sh
+
+core=$1
+tempdir=$2
+cachedir=$3
+debug=false
+
+count_words() {
+ echo $#
+}
+
+exec 2>&1
+
+# Output goes to GUI as debigunfo install log.
+# "MISSING:xxxx" messages result in xxxx being prepended to backtrace
+
+# Exitcodes:
+# 0 - all debuginfos are installed
+# 1 - not all debuginfos are installed
+# 2+ - serious problem
+
+test -f "$core" || exit 2
+# cachedir is optional
+test x"$cachedir" = x"" || test -d "$cachedir" || exit 2
+# tempdir must not exist
+test -e "$tempdir" && exit 2
+
+mkdir "$tempdir" || exit 2
+cd "$tempdir" || exit 2
+$debug && echo "Installing rpms to $tempdir"
+
+# eu-unstrip output example:
+# 0x400000+0x209000 23c77451cf6adff77fc1f5ee2a01d75de6511dda@0x40024c - - [exe]
+# or
+# 0x400000+0x20d000 233aa1a57e9ffda65f53efdaf5e5058657a39993@0x40024c /usr/libexec/im-settings-daemon /usr/lib/debug/usr/libexec/im-settings-daemon.debug [exe]
+# 0x7fff5cdff000+0x1000 0d3eb4326fd7489fcf9b598269f1edc420e2c560@0x7fff5cdff2f8 . - linux-vdso.so.1
+# 0x3d15600000+0x208000 20196628d1bc062279622615cc9955554e5bb227@0x3d156001a0 /usr/lib64/libnotify.so.1.1.3 /usr/lib/debug/usr/lib64/libnotify.so.1.1.3.debug libnotify.so.1
+# 0x7fd8ae931000+0x62d000 dd49f44f958b5a11a1635523b2f09cb2e45c1734@0x7fd8ae9311a0 /usr/lib64/libgtk-x11-2.0.so.0.1600.6 /usr/lib/debug/usr/lib64/libgtk-x11-2.0.so.0.1600.6.debug
+echo "Getting list of build IDs"
+eu_unstrip_OUT=`eu-unstrip "--core=$core" -n 2>&1`
+err=$?
+printf "%s\nexitcode:%s\n" "$eu_unstrip_OUT" $err >eu_unstrip.OUT
+test $err = 0 || exit 2
+
+# Get space-separated list of all build-ids
+# There can be duplicates (observed in real world)
+build_ids=`printf "%s\n" "$eu_unstrip_OUT" \
+| while read junk1 build_id binary_file di_file lib_name junk2; do
+ build_id=${build_id%%@*}
+
+ # This filters out linux-vdso.so, among others
+ test x"$lib_name" != x"[exe]" && test x"${binary_file:0:1}" != x"/" && continue
+ # Sanitize build_id: must be longer than 2 chars
+ test ${#build_id} -le 2 && continue
+ # Sanitize build_id: must have only hex digits
+ test x"${build_id//[0-9a-f]/}" != x"" && continue
+
+ echo "$build_id"
+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
+ if test -f "/$file"; then
+ mkdir -p "$cachedir/usr/lib/debug/.build-id/$build_id1"
+ # Note: this does not preserve symlinks. This is intentional
+ $debug && echo Copying "$file" to "$cachedir/$file" >&2
+ cp "$file" "$cachedir/$file"
+ continue
+ fi
+ fi
+ test -f "/$file" && continue
+ echo -n "/$file "
+done`
+$debug && echo "missing_debuginfo_files:$missing_debuginfo_files"
+
+test x"$missing_debuginfo_files" = x"" && exit 0
+
+# 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
+
+# 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).
+test x"$packages" = x"" && exit 1
+
+# Redirecting, since progress bar stuff only messes up our output
+echo "Downloading `count_words $packages` packages"
+yumdownloader --enablerepo='*debuginfo*' --quiet $packages >yumdownloader.OUT 2>&1
+err=$?
+echo "exitcode:$err" >>yumdownloader.OUT
+test $err = 0 || exit 2
+
+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
+
+# Which debuginfo files are still missing, including those we just unpacked?
+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 x"$cachedir" != x"" \
+ && 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.
+ if test x"$cachedir" != x"" && test -d "$cachedir"; then
+ mkdir -p "$cachedir/usr/lib/debug/.build-id/$build_id1"
+ # Note: this does not preserve symlinks. This is intentional
+ $debug && echo Copying "$file" to "$cachedir/$file" >&2
+ cp --remove-destination "$file" "$cachedir/$file"
+ fi
+ continue
+ fi
+ echo -n "$build_id "
+done`
+$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"
+fi
+
+test x"$missing_build_ids" = x"" && exit 0
+
+for missing in $missing_build_ids; do
+ echo "MISSING:$missing"
+done
+
+echo "`count_words $missing_build_ids` debuginfos can't be found"
+
+exit 1
diff --git a/src/Daemon/org.fedoraproject.abrt.policy b/src/Daemon/org.fedoraproject.abrt.policy
index 1c2c0bb0..9261acdc 100644
--- a/src/Daemon/org.fedoraproject.abrt.policy
+++ b/src/Daemon/org.fedoraproject.abrt.policy
@@ -30,9 +30,9 @@ Copyright (c) 2009 Red Hat inc.
<description>Install debuginfos</description>
<message>Installing debuginfos requires authentication</message>
<defaults>
- <allow_any>no</allow_any>
+ <allow_any>yes</allow_any>
<allow_active>yes</allow_active>
- <allow_inactive>no</allow_inactive>
+ <allow_inactive>yes</allow_inactive>
</defaults>
</action>
</policyconfig>
diff --git a/src/Gui/ABRTExceptions.py b/src/Gui/ABRTExceptions.py
index 30496384..0d357a30 100644
--- a/src/Gui/ABRTExceptions.py
+++ b/src/Gui/ABRTExceptions.py
@@ -14,11 +14,11 @@ class WrongData(Exception):
def __str__(self):
return self.what
-
+
class ConfBackendInitError(Exception):
def __init__(self, msg):
Exception.__init__(self)
self.what = msg
-
+
def __str__(self):
return self.what
diff --git a/src/Gui/abrt-gui b/src/Gui/abrt-gui
index dd0897c0..85bdebbc 100644..100755
--- a/src/Gui/abrt-gui
+++ b/src/Gui/abrt-gui
@@ -1,4 +1,4 @@
-#! /bin/sh
+#!/bin/sh
export PYTHONPATH=/usr/share/abrt
export XLOGNAME=$LOGNAME
exec /usr/bin/python /usr/share/abrt/CCMainWindow.py "$@"