Signed-off-by: Nikola Pajkovsky <npajkovs(a)redhat.com>
---
src/include/dump_dir.h | 2 ++
src/lib/copy_file_recursive.c | 4 ++++
src/lib/dirsize.c | 8 ++++++++
src/lib/dump_dir.c | 24 ++++++++++++++++++++++++
4 files changed, 38 insertions(+), 0 deletions(-)
diff --git a/src/include/dump_dir.h b/src/include/dump_dir.h
index 6d77a49..9327aae 100644
--- a/src/include/dump_dir.h
+++ b/src/include/dump_dir.h
@@ -92,6 +92,8 @@ report_result_t *find_in_reported_to(struct dump_dir *dd, const char
*prefix);
void delete_dump_dir(const char *dirname);
+int is_abrt_dump_dir(const char *dirname);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/lib/copy_file_recursive.c b/src/lib/copy_file_recursive.c
index 6bad978..67dd604 100644
--- a/src/lib/copy_file_recursive.c
+++ b/src/lib/copy_file_recursive.c
@@ -84,6 +84,10 @@ int copy_file_recursive(const char *source, const char *dest)
if (dot_or_dotdot(d->d_name))
continue;
+
+ if (!is_abrt_dump_dir(d->d_name))
+ continue;
+
new_source = concat_path_file(source, d->d_name);
new_dest = concat_path_file(dest, d->d_name);
if (copy_file_recursive(new_source, new_dest) < 0)
diff --git a/src/lib/dirsize.c b/src/lib/dirsize.c
index 77dc443..9d52103 100644
--- a/src/lib/dirsize.c
+++ b/src/lib/dirsize.c
@@ -31,6 +31,10 @@ double get_dirsize(const char *pPath)
{
if (dot_or_dotdot(ep->d_name))
continue;
+
+ if (!is_abrt_dump_dir(ep->d_name))
+ continue;
+
char *dname = concat_path_file(pPath, ep->d_name);
if (lstat(dname, &statbuf) != 0)
{
@@ -71,6 +75,10 @@ double get_dirsize_find_largest_dir(
{
if (dot_or_dotdot(ep->d_name))
continue;
+
+ if (!is_abrt_dump_dir(ep->d_name))
+ continue;
+
char *dname = concat_path_file(pPath, ep->d_name);
if (lstat(dname, &statbuf) != 0)
{
diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c
index 1f03043..23c0625 100644
--- a/src/lib/dump_dir.c
+++ b/src/lib/dump_dir.c
@@ -538,6 +538,10 @@ void dd_sanitize_mode_and_owner(struct dump_dir *dd)
{
if (dent->d_name[0] == '.') /* ".lock", ".",
".."? skip */
continue;
+
+ if (!is_abrt_dump_dir(dent->d_name))
+ continue;
+
char *full_path = concat_path_file(dd->dd_dirname, dent->d_name);
struct stat statbuf;
if (lstat(full_path, &statbuf) == 0 && S_ISREG(statbuf.st_mode))
@@ -581,6 +585,10 @@ static int delete_file_dir(const char *dir, bool skip_lock_file)
{
if (dot_or_dotdot(dent->d_name))
continue;
+
+ if (!is_abrt_dump_dir(dent->d_name))
+ continue;
+
if (skip_lock_file && strcmp(dent->d_name, ".lock") == 0)
{
unlink_lock_file = true;
@@ -792,6 +800,9 @@ int dd_get_next_file(struct dump_dir *dd, char **short_name, char
**full_name)
struct dirent *dent;
while ((dent = readdir(dd->next_dir)) != NULL)
{
+ if (!is_abrt_dump_dir(dent->d_name))
+ continue;
+
if (is_regular_file(dent, dd->dd_dirname))
{
if (short_name)
@@ -927,3 +938,16 @@ void delete_dump_dir(const char *dirname)
dd_delete(dd);
}
}
+
+int is_abrt_dump_dir(const char *dirname)
+{
+ if ((strncmp(dirname, "ccpp-", strlen("ccpp-")) != 0)
+ && (strncmp(dirname, "oops-", strlen("oops-")) != 0)
+ && (strncmp(dirname, "python-", strlen("python-")) !=
0))
+ {
+ VERB2 log("'%s' is not an abrt directory", dirname);
+ return 0;
+ }
+
+ return -1;
+}
--
1.7.6.345.g5c2f8