summaryrefslogtreecommitdiffstats
path: root/src/Daemon
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-12-14 16:52:38 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-12-14 16:52:38 +0100
commitfdce1d751b45bbd0210b45989f4f4c0e092683dc (patch)
tree81d1dd901eece504a10d05e743eeb43d5eaec04c /src/Daemon
parenta238ed9f6c80054028c6ba48a5fe773f8150c7c6 (diff)
downloadabrt-fdce1d751b45bbd0210b45989f4f4c0e092683dc.tar.gz
abrt-fdce1d751b45bbd0210b45989f4f4c0e092683dc.tar.xz
abrt-fdce1d751b45bbd0210b45989f4f4c0e092683dc.zip
better logging of package and hash checks
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src/Daemon')
-rw-r--r--src/Daemon/MiddleWare.cpp28
-rw-r--r--src/Daemon/RPM.cpp25
-rw-r--r--src/Daemon/RPM.h4
3 files changed, 27 insertions, 30 deletions
diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp
index 5235c172..b597a411 100644
--- a/src/Daemon/MiddleWare.cpp
+++ b/src/Daemon/MiddleWare.cpp
@@ -575,29 +575,35 @@ static mw_result_t SavePackageDescriptionToDebugDump(const char *pExecutable,
}
else
{
- package = GetPackage(pExecutable);
+ char *rpm_pkg = GetPackage(pExecutable);
+ if (rpm_pkg == NULL)
+ {
+ log("Executable '%s' doesn't belong to any package", pExecutable);
+ return MW_PACKAGE_ERROR;
+ }
+
+ package = rpm_pkg;
packageName = package.substr(0, package.rfind("-", package.rfind("-") - 1));
- if (packageName == "" ||
- (g_setBlackList.find(packageName) != g_setBlackList.end()))
+ VERB2 log("Package:'%s' short:'%s'", rpm_pkg, packageName.c_str());
+ free(rpm_pkg);
+
+ if (g_setBlackList.find(packageName) != g_setBlackList.end())
{
- if (packageName == "")
- {
- error_msg("Executable doesn't belong to any package");
- return MW_PACKAGE_ERROR;
- }
- log("Blacklisted package");
+ log("Blacklisted package '%s'", packageName.c_str());
return MW_BLACKLISTED;
}
if (g_settings_bOpenGPGCheck)
{
if (!s_RPM.CheckFingerprint(packageName.c_str()))
{
- error_msg("package isn't signed with proper key");
+ log("Package '%s' isn't signed with proper key", packageName.c_str());
return MW_GPG_ERROR;
}
if (!CheckHash(packageName.c_str(), pExecutable))
{
- error_msg("executable has bad hash");
+ error_msg("Executable '%s' seems to be modified, "
+ "doesn't match one from package '%s'",
+ pExecutable, packageName.c_str());
return MW_GPG_ERROR;
}
}
diff --git a/src/Daemon/RPM.cpp b/src/Daemon/RPM.cpp
index b3cf2c1c..6f05c0b9 100644
--- a/src/Daemon/RPM.cpp
+++ b/src/Daemon/RPM.cpp
@@ -100,16 +100,12 @@ bool CheckHash(const char* pPackage, const char* pPath)
if (strcmp(pPath, rpmfiFN(fi)) == 0)
{
headerHash = rpmfiFDigestHex(fi, &hashAlgo);
+ rpmDoDigest(hashAlgo, pPath, 1, (unsigned char*) computedHash, NULL);
+ ret = (headerHash != "" && headerHash == computedHash);
+ break;
}
}
rpmfiFree(fi);
-
- rpmDoDigest(hashAlgo, pPath, 1, (unsigned char*) computedHash, NULL);
-
- if (headerHash != "" && headerHash == computedHash)
- {
- ret = true;
- }
}
rpmdbFreeIterator(iter);
rpmtsFree(ts);
@@ -118,7 +114,7 @@ bool CheckHash(const char* pPackage, const char* pPath)
std::string GetDescription(const char* pPackage)
{
- std::string pDescription = "";
+ std::string pDescription;
rpmts ts = rpmtsCreate();
rpmdbMatchIterator iter = rpmtsInitIterator(ts, RPMTAG_NAME, pPackage, 0);
Header header = rpmdbNextIterator(iter);
@@ -139,7 +135,7 @@ std::string GetDescription(const char* pPackage)
std::string GetComponent(const char* pFileName)
{
- std::string ret = "";
+ std::string ret;
rpmts ts = rpmtsCreate();
rpmdbMatchIterator iter = rpmtsInitIterator(ts, RPMTAG_BASENAMES, pFileName, 0);
Header header = rpmdbNextIterator(iter);
@@ -161,20 +157,15 @@ std::string GetComponent(const char* pFileName)
return ret;
}
-std::string GetPackage(const char* pFileName)
+char* GetPackage(const char* pFileName)
{
- std::string ret = "";
+ char* ret = NULL;
rpmts ts = rpmtsCreate();
rpmdbMatchIterator iter = rpmtsInitIterator(ts, RPMTAG_BASENAMES, pFileName, 0);
Header header = rpmdbNextIterator(iter);
if (header != NULL)
{
- char* nerv = headerGetNEVR(header, NULL);
- if (nerv != NULL)
- {
- ret = nerv;
- free(nerv);
- }
+ ret = headerGetNEVR(header, NULL);
}
rpmdbFreeIterator(iter);
diff --git a/src/Daemon/RPM.h b/src/Daemon/RPM.h
index 67cd4a29..fed5e43d 100644
--- a/src/Daemon/RPM.h
+++ b/src/Daemon/RPM.h
@@ -82,9 +82,9 @@ std::string GetDescription(const char* pPackage);
* file. If the file doesn't belong to any package, empty string is
* returned.
* @param pFileName A file name.
- * @return A package name.
+ * @return A package name (malloced string)
*/
-std::string GetPackage(const char* pFileName);
+char* GetPackage(const char* pFileName);
/**
* Finds a main package for given file. This package contains particular
* file. If the file doesn't belong to any package, empty string is