File indexing completed on 2025-05-11 08:24:40
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifdef HAVE_CONFIG_H
0030 #include "config.h"
0031 #endif
0032
0033 #include <bsp.h>
0034 #include <pmacros.h>
0035 #include <sys/types.h>
0036 #include <pwd.h>
0037 #include <grp.h>
0038 #include <unistd.h>
0039 #include <fcntl.h>
0040 #include <errno.h>
0041 #include <limits.h>
0042
0043 const char rtems_test_name[] = "PSXPASSWD 2";
0044
0045
0046 rtems_task Init(rtems_task_argument ignored);
0047 void print_passwd(struct passwd *pw);
0048 void print_group(struct group *gr);
0049
0050 void print_passwd(
0051 struct passwd *pw
0052 )
0053 {
0054 printf(
0055 " username: %s\n"
0056 " user password: %s\n"
0057 " user ID: %d\n"
0058 " group ID: %d\n"
0059 " real name: %s\n"
0060 " home directory: %s\n"
0061 " shell program: %s\n",
0062 pw->pw_name,
0063 pw->pw_passwd,
0064 pw->pw_uid,
0065 pw->pw_gid,
0066 pw->pw_gecos,
0067 pw->pw_dir,
0068 pw->pw_shell
0069 );
0070 }
0071
0072 void print_group(
0073 struct group *gr
0074 )
0075 {
0076 printf(
0077 " group name: %s\n"
0078 " group password: %s\n"
0079 " group ID: %d\n",
0080 gr->gr_name,
0081 gr->gr_passwd,
0082 gr->gr_gid
0083 );
0084
0085
0086 }
0087
0088 rtems_task Init(
0089 rtems_task_argument ignored
0090 )
0091 {
0092 struct passwd *pw;
0093 struct group *gr;
0094 int status = -1;
0095 char str[100] = {0};
0096 int max_int = INT_MAX;
0097
0098 FILE *fp = NULL;
0099
0100 TEST_BEGIN();
0101
0102 puts( "Init - Creating /etc" );
0103 status = mkdir( "/etc", 0777 );
0104 rtems_test_assert( status == 0 );
0105
0106 puts( "Init - Creating /etc/passwd" );
0107 status = mknod( "/etc/passwd", (S_IFREG | S_IRWXU), 0LL );
0108 rtems_test_assert( status != -1 );
0109
0110 fp = fopen( "/etc/passwd", "w" );
0111 rtems_test_assert( fp != NULL );
0112 fprintf( fp, "bharath:x:-1:-a:Dummy::/:/bin/bash\n" );
0113 fclose( fp );
0114
0115 puts( "Init - Creating /etc/group" );
0116 status = mknod( "/etc/group", (S_IFREG | S_IRWXU), 0LL );
0117 rtems_test_assert( status != -1);
0118
0119 fp = fopen( "/etc/group", "w" );
0120 rtems_test_assert( fp != NULL );
0121 fprintf( fp, "admin::1:root,su,super-user\n" );
0122 fclose( fp );
0123
0124 puts( "Init - setpwent() -- OK" );
0125 setpwent();
0126
0127 puts( "Init - setpwent() -- OK" );
0128 setpwent();
0129
0130 puts( "Init - setgrent() -- OK" );
0131 setgrent();
0132
0133 puts( "Init - setgrent() -- OK" );
0134 setgrent();
0135
0136 puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
0137 pw = getpwnam( "root" );
0138 rtems_test_assert( !pw );
0139 rtems_test_assert( errno == EINVAL );
0140
0141 fp = fopen( "/etc/passwd", "w" );
0142 rtems_test_assert( fp != NULL );
0143 fprintf( fp, "rtems:x:1:1:dummy::/:/bin/bash:" );
0144 fclose( fp );
0145
0146 puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
0147 pw = getpwnam( "root" );
0148 rtems_test_assert( !pw );
0149 rtems_test_assert( errno == EINVAL );
0150
0151 fp = fopen( "/etc/passwd", "w" );
0152 rtems_test_assert( fp != NULL );
0153 fprintf( fp, "user\n:x:2:2:dummy::/:/bin/sh\n" );
0154 fclose( fp );
0155
0156 puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
0157 pw = getpwnam( "root" );
0158 rtems_test_assert( !pw );
0159 rtems_test_assert( errno == EINVAL );
0160
0161 fp = fopen( "/etc/passwd", "w" );
0162 rtems_test_assert( fp != NULL );
0163 fprintf( fp, "user:x:999999999999:1:dummy::/:/bin/sh\n" );
0164 fclose( fp );
0165
0166 puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
0167 pw = getpwnam( "root" );
0168 rtems_test_assert( !pw );
0169 rtems_test_assert( errno == EINVAL );
0170
0171 sprintf( str, "user:x:%d%d:1:dummy::/:/bin/sh\n", max_int/10, max_int%10+1 );
0172
0173 fp = fopen( "/etc/passwd", "w" );
0174 rtems_test_assert( fp != NULL );
0175 fprintf( fp, str );
0176 fclose( fp );
0177
0178 puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
0179 pw = getpwnam( "root" );
0180 rtems_test_assert( !pw );
0181 rtems_test_assert( errno == EINVAL );
0182
0183 fp = fopen( "/etc/passwd", "w" );
0184 rtems_test_assert( fp != NULL );
0185 fprintf( fp, "\
0186 ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
0187 ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
0188 ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
0189 ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
0190 ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
0191 ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ\
0192 :x:999999999999:1:dummy::/:/bin/sh\n" );
0193 fclose( fp );
0194
0195 puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
0196 pw = getpwnam( "root" );
0197 rtems_test_assert( !pw );
0198 rtems_test_assert( errno == EINVAL );
0199
0200 puts( "Init - getgrent() -- OK" );
0201 gr = getgrent();
0202 rtems_test_assert( gr != NULL );
0203 print_group( gr );
0204
0205 puts( "Init - endpwent() -- OK" );
0206 endpwent();
0207
0208 puts( "Init - endpwent() -- OK" );
0209 endpwent();
0210
0211 puts( "Init - endgrent() -- OK" );
0212 endgrent();
0213
0214 puts( "Init - endgrent() -- OK" );
0215 endgrent();
0216
0217 puts( "Removing /etc/passwd" );
0218 status = unlink( "/etc/passwd" );
0219 rtems_test_assert( status == 0 );
0220
0221 puts( "Removing /etc/group" );
0222 status = unlink( "/etc/group" );
0223 rtems_test_assert( status == 0 );
0224
0225 puts( "Init - getpwnam(\"root\") -- expected EINVAL" );
0226 pw = getpwnam( "root" );
0227 rtems_test_assert( !pw );
0228 rtems_test_assert( errno == EINVAL );
0229
0230 puts( "Init - getgrnam(\"root\") -- expected EINVAL" );
0231 gr = getgrnam( "root" );
0232 rtems_test_assert( !gr );
0233 rtems_test_assert( errno == EINVAL );
0234
0235 TEST_END();
0236 rtems_test_exit( 0 );
0237 }
0238
0239
0240
0241 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0242 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
0243
0244 #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 6
0245
0246 #define CONFIGURE_MAXIMUM_TASKS 1
0247 #define CONFIGURE_MAXIMUM_POSIX_KEYS 1
0248 #define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS 1
0249 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0250
0251 #define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
0252 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0253
0254 #define CONFIGURE_INIT
0255 #include <rtems/confdefs.h>
0256