aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2015-10-09 13:10:23 +0200
committerAndreas Schneider <asn@samba.org>2015-10-27 14:56:06 +0100
commit246a94bffd8224baa01d6a4f20cf2b58b5ff5a76 (patch)
tree6765b99ef0d5ceb9458da2e26590b2a34dee81bd
parentf02727a26dd5a010028057f0ed4b8744b1c5818b (diff)
downloaduid_wrapper-246a94bffd8224baa01d6a4f20cf2b58b5ff5a76.tar.gz
uid_wrapper-246a94bffd8224baa01d6a4f20cf2b58b5ff5a76.tar.xz
uid_wrapper-246a94bffd8224baa01d6a4f20cf2b58b5ff5a76.zip
tests: Move setregid test to own executable
Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
-rw-r--r--tests/CMakeLists.txt4
-rw-r--r--tests/test_gid.c22
-rw-r--r--tests/test_setregid.c190
3 files changed, 194 insertions, 22 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index dd8f480..85b6844 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -41,6 +41,10 @@ set(UWRAP_GID_TESTS
test_setgid
test_setegid)
+if (HAVE_SETREGID)
+ list(APPEND UWRAP_GID_TESTS test_setregid)
+endif (HAVE_SETREGID)
+
set(UWRAP_TESTS
${UWRAP_UID_TESTS}
${UWRAP_GID_TESTS}
diff --git a/tests/test_gid.c b/tests/test_gid.c
index 0ada6b7..222eadf 100644
--- a/tests/test_gid.c
+++ b/tests/test_gid.c
@@ -14,25 +14,6 @@
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
-#ifdef HAVE_SETREGID
-static void test_uwrap_setregid(void **state)
-{
- int rc;
- uid_t u;
-
- (void) state; /* unused */
-
- rc = setregid(1, 2);
- assert_int_equal(rc, 0);
-
- u = getgid();
- assert_int_equal(u, 1);
-
- u = getegid();
- assert_int_equal(u, 2);
-}
-#endif
-
#ifdef HAVE_SETRESGID
static void test_uwrap_setresgid(void **state)
{
@@ -101,9 +82,6 @@ int main(void) {
const struct CMUnitTest uwrap_tests[] = {
cmocka_unit_test(test_uwrap_getgroups),
-#ifdef HAVE_SETREGID
- cmocka_unit_test(test_uwrap_setregid),
-#endif
#ifdef HAVE_SETRESGID
cmocka_unit_test(test_uwrap_setresgid),
#endif
diff --git a/tests/test_setregid.c b/tests/test_setregid.c
new file mode 100644
index 0000000..f4844f8
--- /dev/null
+++ b/tests/test_setregid.c
@@ -0,0 +1,190 @@
+#include "config.h"
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <errno.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <pwd.h>
+
+static void test_uwrap_setregid_root(void **state)
+{
+ int rc;
+ uid_t u;
+ gid_t g;
+#ifdef HAVE_GETRESGID
+ gid_t cp_rgid, cp_egid, cp_sgid;
+#endif
+
+ (void) state; /* unused */
+
+ u = getuid();
+ assert_int_equal(u, 0x0);
+ u = geteuid();
+ assert_int_equal(u, 0x0);
+
+#ifdef HAVE_GETRESGID
+ cp_rgid = cp_egid = cp_sgid = -1;
+ rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
+ assert_return_code(rc, errno);
+ assert_int_equal(cp_rgid, 0);
+ assert_int_equal(cp_egid, 0);
+ assert_int_equal(cp_sgid, 0);
+#endif
+
+ g = getgid();
+ assert_int_equal(g, 0x0);
+
+ g = getegid();
+ assert_int_equal(g, 0x0);
+
+ rc = setregid(-1, -1);
+ assert_int_equal(rc, 0);
+
+ rc = setregid(0x4444, 0x5555);
+ assert_int_equal(rc, 0);
+
+#ifdef HAVE_GETRESGID
+ cp_rgid = cp_egid = cp_sgid = -1;
+ rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
+ assert_return_code(rc, errno);
+ assert_int_equal(cp_rgid, 0x4444);
+ assert_int_equal(cp_egid, 0x5555);
+ assert_int_equal(cp_sgid, 0x5555);
+#endif
+
+ g = getgid();
+ assert_int_equal(g, 0x4444);
+
+ g = getegid();
+ assert_int_equal(g, 0x5555);
+
+ rc = setregid(0, -1);
+ assert_return_code(rc, errno);
+
+#ifdef HAVE_GETRESGID
+ cp_rgid = cp_egid = cp_sgid = -1;
+ rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
+ assert_return_code(rc, errno);
+ assert_int_equal(cp_rgid, 0);
+ assert_int_equal(cp_egid, 0x5555);
+ assert_int_equal(cp_sgid, 0x5555);
+#endif
+
+ rc = setregid(-1, 0);
+ assert_return_code(rc, errno);
+
+#ifdef HAVE_GETRESGID
+ cp_rgid = cp_egid = cp_sgid = -1;
+ rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
+ assert_return_code(rc, errno);
+ assert_int_equal(cp_rgid, 0);
+ assert_int_equal(cp_egid, 0);
+ assert_int_equal(cp_sgid, 0x5555);
+#endif
+
+ rc = setgid(0);
+ assert_return_code(rc, errno);
+ rc = setegid(0);
+ assert_return_code(rc, errno);
+#ifdef HAVE_SETRESGID
+ rc = setresgid(0, 0, 0);
+ assert_return_code(rc, errno);
+#endif
+}
+
+static void test_uwrap_setregid_user(void **state)
+{
+ int rc;
+ uid_t u;
+#ifdef HAVE_GETRESGID
+ gid_t cp_rgid, cp_egid, cp_sgid;
+#endif
+
+ (void) state; /* unused */
+
+ u = getuid();
+ assert_int_equal(u, 0x0);
+ u = geteuid();
+ assert_int_equal(u, 0x0);
+
+#ifdef HAVE_GETRESGID
+ cp_rgid = cp_egid = cp_sgid = -1;
+ rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
+ assert_return_code(rc, errno);
+ assert_int_equal(cp_rgid, 0);
+ assert_int_equal(cp_egid, 0);
+ assert_int_equal(cp_sgid, 0);
+#endif
+
+ rc = setuid(0x5555);
+ assert_return_code(rc, errno);
+
+ u = getuid();
+ assert_int_equal(u, 0x5555);
+ u = geteuid();
+ assert_int_equal(u, 0x5555);
+
+#ifdef HAVE_GETRESGID
+ cp_rgid = cp_egid = cp_sgid = -1;
+ rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
+ assert_return_code(rc, errno);
+ assert_int_equal(cp_rgid, 0);
+ assert_int_equal(cp_egid, 0);
+ assert_int_equal(cp_sgid, 0);
+#endif
+
+ rc = setregid(0x4444, 0x5555);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EPERM);
+
+#ifdef HAVE_GETRESGID
+ cp_rgid = cp_egid = cp_sgid = -1;
+ rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
+ assert_return_code(rc, errno);
+ assert_int_equal(cp_rgid, 0);
+ assert_int_equal(cp_egid, 0);
+ assert_int_equal(cp_sgid, 0);
+#endif
+
+ rc = setregid(0, -1);
+ assert_return_code(rc, errno);
+
+#ifdef HAVE_GETRESGID
+ cp_rgid = cp_egid = cp_sgid = -1;
+ rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
+ assert_return_code(rc, errno);
+ assert_int_equal(cp_rgid, 0);
+ assert_int_equal(cp_egid, 0);
+ assert_int_equal(cp_sgid, 0);
+#endif
+
+ rc = setregid(-1, 0);
+ assert_return_code(rc, errno);
+
+#ifdef HAVE_GETRESGID
+ cp_rgid = cp_egid = cp_sgid = -1;
+ rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
+ assert_return_code(rc, errno);
+ assert_int_equal(cp_rgid, 0);
+ assert_int_equal(cp_egid, 0);
+ assert_int_equal(cp_sgid, 0);
+#endif
+}
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest uwrap_tests[] = {
+ cmocka_unit_test(test_uwrap_setregid_root),
+ cmocka_unit_test(test_uwrap_setregid_user),
+ };
+
+ rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL);
+
+ return rc;
+}