Blob Blame History Raw
From 4a9b4b72b404c2c5ccdaa1b1cbeb9abd34629b5c Mon Sep 17 00:00:00 2001
From: Jakub Filak <jfilak@redhat.com>
Date: Thu, 4 Jun 2015 20:09:08 +0200
Subject: [PATCH] testsuite: add test for dd_stat_for_uid()

Signed-off-by: Jakub Filak <jfilak@redhat.com>
---
 tests/dump_dir.at | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 91 insertions(+)

diff --git a/tests/dump_dir.at b/tests/dump_dir.at
index 0e491ce..6a6e395 100644
--- a/tests/dump_dir.at
+++ b/tests/dump_dir.at
@@ -439,6 +439,97 @@ int main(int argc, char **argv)
 }
 ]])
 
+## ------- ##
+## dd_stat ##
+## ------- ##
+
+AT_TESTFUN([dd_stat],
+[[
+#include "internal_libreport.h"
+#include <errno.h>
+#include <assert.h>
+
+int main(int argc, char **argv)
+{
+    g_verbose = 3;
+
+    char template[] = "/tmp/XXXXXX/dump_dir";
+
+    char *last_slash = strrchr(template, '/');
+    *last_slash = '\0';
+
+    if (mkdtemp(template) == NULL) {
+        perror("mkdtemp()");
+        return EXIT_FAILURE;
+    }
+
+    *last_slash = '/';
+
+    printf("Dump dir path: %s\n", template);
+
+    dd_g_super_user_uid = geteuid();
+
+    struct dump_dir *dd = dd_create(template, (uid_t)-1, 0640);
+    assert(dd != NULL || !"create new");
+    dd_create_basic_files(dd, geteuid(), NULL);
+    dd_save_text(dd, "type", "custom");
+    dd_close(dd);
+    dd = NULL;
+
+    dd = dd_opendir(template, DD_OPEN_FD_ONLY);
+    assert(dd != NULL || !"open fds");
+    {
+        const int fst_stat = dd_stat_for_uid(dd, geteuid());
+
+        assert(fst_stat & DD_STAT_OWNED_BY_UID);
+        assert(fst_stat & DD_STAT_ACCESSIBLE_BY_UID);
+        assert(!(fst_stat & DD_STAT_NO_OWNER));
+    }
+
+    dd = dd_fdopendir(dd, /*for writing*/0);
+    assert(dd != NULL || !"reopen for writing");
+
+    assert(dd_set_owner(dd, geteuid() + 1) == 0);
+    assert(dd_get_owner(dd) == geteuid() + 1);
+
+    {
+        const int scn_stat = dd_stat_for_uid(dd, geteuid() + 2);
+        assert(scn_stat == 0);
+    }
+
+    {
+        const int thr_stat = dd_stat_for_uid(dd, dd_g_super_user_uid);
+        assert(!(thr_stat & DD_STAT_OWNED_BY_UID));
+        assert(thr_stat & DD_STAT_ACCESSIBLE_BY_UID);
+        assert(!(thr_stat & DD_STAT_NO_OWNER));
+    }
+
+    assert(dd_set_no_owner(dd) == 0);
+    assert(dd_get_owner(dd) != geteuid() + 3);
+
+    {
+        const int frt_stat = dd_stat_for_uid(dd, geteuid() + 3);
+        assert(!(frt_stat & DD_STAT_OWNED_BY_UID));
+        assert(frt_stat & DD_STAT_ACCESSIBLE_BY_UID);
+        assert(frt_stat & DD_STAT_NO_OWNER);
+    }
+
+    {
+        const int fft_stat = dd_stat_for_uid(dd, dd_g_super_user_uid);
+        assert(!(fft_stat & DD_STAT_OWNED_BY_UID));
+        assert(fft_stat & DD_STAT_ACCESSIBLE_BY_UID);
+        assert(fft_stat & DD_STAT_NO_OWNER);
+    }
+
+    assert(dd_delete(dd) == 0);
+
+    *last_slash = '\0';
+    assert(rmdir(template) == 0);
+
+    return EXIT_SUCCESS;
+}
+]])
+
 ## -------------- ##
 ## recursive_lock ##
 ## -------------- ##
-- 
2.1.0