diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-11-17 11:55:27 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-11-20 10:30:24 +0100 |
commit | fa028bb2ef1e3cd9a8dfdd8b557e5acda3e11505 (patch) | |
tree | e114dddd79c06902df5d24e627fe41a789ca70fb /testsuites/libtests | |
parent | shell: Use exiting once initialization (diff) | |
download | rtems-fa028bb2ef1e3cd9a8dfdd8b557e5acda3e11505.tar.bz2 |
shell: Do chroot() after successful login
Diffstat (limited to 'testsuites/libtests')
-rw-r--r-- | testsuites/libtests/shell01/init.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/testsuites/libtests/shell01/init.c b/testsuites/libtests/shell01/init.c index 248988b32b..bbfa36e6dd 100644 --- a/testsuites/libtests/shell01/init.c +++ b/testsuites/libtests/shell01/init.c @@ -49,18 +49,29 @@ static void create_file(const char *name, const char *content) static void test(void) { rtems_user_env_t *uenv; + rtems_status_code sc; + struct stat st_chroot; + struct stat st_workdir; bool ok; int rv; rv = mkdir("/etc", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); rtems_test_assert(rv == 0); + rv = mkdir("/chroot", S_IRWXU | S_IRWXG | S_IRWXO); + rtems_test_assert(rv == 0); + + rv = lstat("/chroot", &st_chroot); + rtems_test_assert(rv == 0); + create_file( "/etc/passwd", "moop:foo:1:3:blob:a::c\n" "no:*:2:4::::\n" "zero::3:5::::\n" "shadow:x:4:6::::\n" + "invchroot::5:7:::/inv:\n" + "chroot::6:8:::/chroot:\n" ); create_file( @@ -75,6 +86,9 @@ static void test(void) "F::8:s,moop,t\n" ); + sc = rtems_libio_set_private_env(); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + uenv = rtems_current_user_env_get(); rv = setuid(0); @@ -95,6 +109,9 @@ static void test(void) ok = rtems_shell_login_check("moop", "false"); rtems_test_assert(!ok); + ok = rtems_shell_login_check("invchroot", NULL); + rtems_test_assert(!ok); + rtems_test_assert(getuid() == 0); rtems_test_assert(geteuid() == 0); rtems_test_assert(getgid() == 0); @@ -122,6 +139,25 @@ static void test(void) rtems_test_assert(uenv->groups[2] == 4); rtems_test_assert(uenv->groups[3] == 5); rtems_test_assert(uenv->groups[4] == 8); + + rv = setuid(0); + rtems_test_assert(rv == 0); + + rv = seteuid(0); + rtems_test_assert(rv == 0); + + ok = rtems_shell_login_check("chroot", NULL); + rtems_test_assert(ok); + rtems_test_assert(getuid() == 6); + rtems_test_assert(geteuid() == 6); + rtems_test_assert(getgid() == 8); + rtems_test_assert(getegid() == 8); + + rv = lstat(".", &st_workdir); + rtems_test_assert(rv == 0); + rtems_test_assert(memcmp(&st_chroot, &st_workdir, sizeof(st_chroot)) == 0); + + rtems_libio_use_global_env(); } static void Init(rtems_task_argument arg) @@ -143,7 +179,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_MAXIMUM_TASKS 1 #define CONFIGURE_MAXIMUM_POSIX_KEYS 1 -#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS 1 +#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS 2 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION |