source: rtems/testsuites/psxtests/psxpasswd02/init.c @ 3cec2df

5
Last change on this file since 3cec2df was 3cec2df, checked in by Sebastian Huber <sebastian.huber@…>, on 12/17/19 at 08:17:43

config: CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS

Rename CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS into
CONFIGURE_MAXIMUM_FILE_DESCRIPTORS.

Update #3753.

  • Property mode set to 100644
File size: 5.7 KB
Line 
1/*
2 *  COPYRIGHT (c) 1989-2012.
3 *  On-Line Applications Research Corporation (OAR).
4 *
5 *  The license and distribution terms for this file may be
6 *  found in the file LICENSE in this distribution or at
7 *  http://www.rtems.org/license/LICENSE.
8 */
9
10#ifdef HAVE_CONFIG_H
11#include "config.h"
12#endif
13
14#include <bsp.h>
15#include <pmacros.h>
16#include <sys/types.h>
17#include <pwd.h>
18#include <grp.h>
19#include <unistd.h>
20#include <fcntl.h>
21#include <errno.h>
22#include <limits.h>
23
24const char rtems_test_name[] = "PSXPASSWD 2";
25
26/* forward declarations to avoid warnings */
27rtems_task Init(rtems_task_argument ignored);
28void print_passwd(struct passwd *pw);
29void print_group(struct group *gr);
30
31void print_passwd(
32  struct passwd *pw
33)
34{
35  printf(
36    "  username: %s\n"
37    "  user password: %s\n"
38    "  user ID: %d\n"
39    "  group ID: %d\n"
40    "  real name: %s\n"
41    "  home directory: %s\n"
42    "  shell program: %s\n",
43    pw->pw_name,
44    pw->pw_passwd,
45    pw->pw_uid,
46    pw->pw_gid,
47    pw->pw_gecos,
48    pw->pw_dir,
49    pw->pw_shell
50  );
51}
52 
53void print_group(
54  struct group *gr
55)
56{
57  printf(
58    "  group name: %s\n"
59    "  group  password: %s\n"
60    "  group  ID: %d\n",
61    gr->gr_name,
62    gr->gr_passwd,
63    gr->gr_gid
64  );
65
66  /* TBD print users in group */
67}
68 
69rtems_task Init(
70  rtems_task_argument ignored
71)
72{
73  struct passwd *pw;
74  struct group  *gr;
75  int status = -1;
76  char str[100] = {0};
77  int max_int = INT_MAX;
78
79  FILE *fp = NULL;
80
81  TEST_BEGIN();
82
83  puts( "Init - Creating /etc" );
84  status = mkdir( "/etc", 0777 );
85  rtems_test_assert( status == 0 );
86 
87  puts( "Init - Creating /etc/passwd" );
88  status = mknod( "/etc/passwd", (S_IFREG | S_IRWXU), 0LL );
89  rtems_test_assert( status != -1 );
90
91  fp = fopen( "/etc/passwd", "w" );
92  rtems_test_assert( fp != NULL );
93  fprintf( fp, "bharath:x:-1:-a:Dummy::/:/bin/bash\n" );
94  fclose( fp );
95
96  puts( "Init - Creating /etc/group" );
97  status = mknod( "/etc/group", (S_IFREG | S_IRWXU), 0LL );
98  rtems_test_assert( status != -1);
99
100  fp = fopen( "/etc/group", "w" );
101  rtems_test_assert( fp != NULL );
102  fprintf( fp, "admin::1:root,su,super-user\n" );
103  fclose( fp );
104
105  puts( "Init - setpwent() -- OK" );
106  setpwent();
107
108  puts( "Init - setpwent() -- OK" );
109  setpwent();
110
111  puts( "Init - setgrent() -- OK" );
112  setgrent();
113
114  puts( "Init - setgrent() -- OK" );
115  setgrent(); 
116 
117  puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
118  pw = getpwnam( "root" );
119  rtems_test_assert( !pw );
120  rtems_test_assert( errno == EINVAL );
121
122  fp = fopen( "/etc/passwd", "w" );
123  rtems_test_assert( fp != NULL );
124  fprintf( fp, "rtems:x:1:1:dummy::/:/bin/bash:" );
125  fclose( fp );
126
127  puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
128  pw = getpwnam( "root" );
129  rtems_test_assert( !pw );
130  rtems_test_assert( errno == EINVAL );
131
132  fp = fopen( "/etc/passwd", "w" );
133  rtems_test_assert( fp != NULL );
134  fprintf( fp, "user\n:x:2:2:dummy::/:/bin/sh\n" );
135  fclose( fp );
136
137  puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
138  pw = getpwnam( "root" );
139  rtems_test_assert( !pw );
140  rtems_test_assert( errno == EINVAL );
141
142  fp = fopen( "/etc/passwd", "w" );
143  rtems_test_assert( fp != NULL );
144  fprintf( fp, "user:x:999999999999:1:dummy::/:/bin/sh\n" );
145  fclose( fp );
146
147  puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
148  pw = getpwnam( "root" );
149  rtems_test_assert( !pw );
150  rtems_test_assert( errno == EINVAL );
151
152  sprintf( str, "user:x:%d%d:1:dummy::/:/bin/sh\n", max_int/10, max_int%10+1 );
153
154  fp = fopen( "/etc/passwd", "w" );
155  rtems_test_assert( fp != NULL );
156  fprintf( fp, str );
157  fclose( fp );
158
159  puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
160  pw = getpwnam( "root" );
161  rtems_test_assert( !pw );
162  rtems_test_assert( errno == EINVAL );
163
164  fp = fopen( "/etc/passwd", "w" );
165  rtems_test_assert( fp != NULL );
166  fprintf( fp, "\
167    ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
168    ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
169    ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
170    ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
171    ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
172    ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
173    :x:999999999999:1:dummy::/:/bin/sh\n" );
174  fclose( fp );
175
176  puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
177  pw = getpwnam( "root" );
178  rtems_test_assert( !pw );
179  rtems_test_assert( errno == EINVAL );
180
181  puts( "Init - getgrent() -- OK" );
182  gr = getgrent();
183  rtems_test_assert( gr != NULL );
184  print_group( gr );
185
186  puts( "Init - endpwent() -- OK" );
187  endpwent();
188
189  puts( "Init - endpwent() -- OK" );
190  endpwent();
191
192  puts( "Init - endgrent() -- OK" );
193  endgrent();
194
195  puts( "Init - endgrent() -- OK" );
196  endgrent();
197
198  puts( "Removing /etc/passwd" );
199  status = unlink( "/etc/passwd" );
200  rtems_test_assert( status == 0 );
201
202  puts( "Removing /etc/group" );
203  status = unlink( "/etc/group" );
204  rtems_test_assert( status == 0 );
205
206  puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
207  pw = getpwnam( "root" );
208  rtems_test_assert( !pw );
209  rtems_test_assert( errno == EINVAL );
210
211  puts( "Init - getgrnam(\"root\") -- expected EINVAL" );
212  gr = getgrnam( "root" );
213  rtems_test_assert( !gr );
214  rtems_test_assert( errno == EINVAL );
215 
216  TEST_END();
217  rtems_test_exit( 0 );
218}
219
220/* configuration information */
221
222#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
223#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
224
225#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 6
226
227#define CONFIGURE_MAXIMUM_TASKS 1
228#define CONFIGURE_MAXIMUM_POSIX_KEYS 1
229#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS 1
230#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
231
232#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
233#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
234
235#define CONFIGURE_INIT
236#include <rtems/confdefs.h>
237/* end of file */
Note: See TracBrowser for help on using the repository browser.