source: rtems/testsuites/libtests/shell01/init.c @ f377998

5
Last change on this file since f377998 was f377998, checked in by Sebastian Huber <sebastian.huber@…>, on 11/18/19 at 05:55:43

imfs: Add IMFS_make_linfile()

Update #3818.

  • Property mode set to 100644
File size: 4.4 KB
Line 
1/*
2 * Copyright (c) 2014, 2019 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.org/license/LICENSE.
13 */
14
15#ifdef HAVE_CONFIG_H
16  #include "config.h"
17#endif
18
19#include <sys/stat.h>
20#include <sys/types.h>
21#include <errno.h>
22#include <grp.h>
23#include <pwd.h>
24#include <stdio.h>
25#include <unistd.h>
26
27#include <rtems/imfs.h>
28#include <rtems/shell.h>
29#include <rtems/userenv.h>
30
31#include "tmacros.h"
32
33const char rtems_test_name[] = "SHELL 1";
34
35static const char etc_passwd[] =
36  "moop:foo:1:3:blob:a::c\n"
37  "no:*:2:4::::\n"
38  "zero::3:5::::\n"
39  "shadow:x:4:6::::\n"
40  "invchroot::5:7:::/inv:\n"
41  "chroot::6:8:::/chroot:\n";
42
43static const char etc_group[] =
44  "A::1:moop,u,v,w,zero\n"
45  "B::2:moop\n"
46  "blub:bar:3:moop\n"
47  "C::4:l,m,n,moop\n"
48  "D::5:moop,moop\n"
49  "E::6:x\n"
50  "E::7:y,z\n"
51  "F::8:s,moop,t\n";
52
53static void test(void)
54{
55  rtems_user_env_t *uenv;
56  rtems_status_code sc;
57  struct stat st_chroot;
58  struct stat st_workdir;
59  bool ok;
60  int rv;
61
62  rv = mkdir("/etc", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
63  rtems_test_assert(rv == 0);
64
65  rv = mkdir("/chroot", S_IRWXU | S_IRWXG | S_IRWXO);
66  rtems_test_assert(rv == 0);
67
68  rv = lstat("/chroot", &st_chroot);
69  rtems_test_assert(rv == 0);
70
71  rv = IMFS_make_linearfile(
72    "/etc/passwd",
73    S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH,
74    etc_passwd,
75    sizeof(etc_passwd)
76  );
77  rtems_test_assert(rv == 0);
78
79  rv = IMFS_make_linearfile(
80    "/etc/group",
81    S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH,
82    etc_group,
83    sizeof(etc_group)
84  );
85  rtems_test_assert(rv == 0);
86
87  sc = rtems_libio_set_private_env();
88  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
89
90  uenv = rtems_current_user_env_get();
91
92  rv = setuid(0);
93  rtems_test_assert(rv == 0);
94
95  rv = seteuid(0);
96  rtems_test_assert(rv == 0);
97
98  ok = rtems_shell_login_check("inv", NULL);
99  rtems_test_assert(!ok);
100
101  ok = rtems_shell_login_check("no", NULL);
102  rtems_test_assert(!ok);
103
104  ok = rtems_shell_login_check("shadow", NULL);
105  rtems_test_assert(!ok);
106
107  ok = rtems_shell_login_check("moop", "false");
108  rtems_test_assert(!ok);
109
110  ok = rtems_shell_login_check("invchroot", NULL);
111  rtems_test_assert(!ok);
112
113  rtems_test_assert(getuid() == 0);
114  rtems_test_assert(geteuid() == 0);
115  rtems_test_assert(getgid() == 0);
116  rtems_test_assert(getegid() == 0);
117  rtems_test_assert(uenv->ngroups == 0);
118
119  ok = rtems_shell_login_check("zero", NULL);
120  rtems_test_assert(ok);
121  rtems_test_assert(getuid() == 3);
122  rtems_test_assert(geteuid() == 3);
123  rtems_test_assert(getgid() == 5);
124  rtems_test_assert(getegid() == 5);
125  rtems_test_assert(uenv->ngroups == 1);
126  rtems_test_assert(uenv->groups[0] == 1);
127
128  ok = rtems_shell_login_check("moop", "foo");
129  rtems_test_assert(ok);
130  rtems_test_assert(getuid() == 1);
131  rtems_test_assert(geteuid() == 1);
132  rtems_test_assert(getgid() == 3);
133  rtems_test_assert(getegid() == 3);
134  rtems_test_assert(uenv->ngroups == 5);
135  rtems_test_assert(uenv->groups[0] == 1);
136  rtems_test_assert(uenv->groups[1] == 2);
137  rtems_test_assert(uenv->groups[2] == 4);
138  rtems_test_assert(uenv->groups[3] == 5);
139  rtems_test_assert(uenv->groups[4] == 8);
140
141  rv = setuid(0);
142  rtems_test_assert(rv == 0);
143
144  rv = seteuid(0);
145  rtems_test_assert(rv == 0);
146
147  ok = rtems_shell_login_check("chroot", NULL);
148  rtems_test_assert(ok);
149  rtems_test_assert(getuid() == 6);
150  rtems_test_assert(geteuid() == 6);
151  rtems_test_assert(getgid() == 8);
152  rtems_test_assert(getegid() == 8);
153
154  rv = lstat(".", &st_workdir);
155  rtems_test_assert(rv == 0);
156  rtems_test_assert(memcmp(&st_chroot, &st_workdir, sizeof(st_chroot)) == 0);
157
158  rtems_libio_use_global_env();
159}
160
161static void Init(rtems_task_argument arg)
162{
163  TEST_BEGIN();
164
165  test();
166
167  TEST_END();
168  rtems_test_exit(0);
169}
170
171#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
172#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
173
174#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 4
175
176#define CONFIGURE_MAXIMUM_TASKS 1
177#define CONFIGURE_MAXIMUM_POSIX_KEYS 1
178#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS 2
179
180#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
181
182#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
183
184#define CONFIGURE_INIT
185
186#include <rtems/confdefs.h>
187
188#define CONFIGURE_SHELL_COMMANDS_INIT
189
190#include <rtems/shellconfig.h>
Note: See TracBrowser for help on using the repository browser.