Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:40

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  *  COPYRIGHT (c) 1989-2012.
0005  *  On-Line Applications Research Corporation (OAR).
0006  *
0007  * Redistribution and use in source and binary forms, with or without
0008  * modification, are permitted provided that the following conditions
0009  * are met:
0010  * 1. Redistributions of source code must retain the above copyright
0011  *    notice, this list of conditions and the following disclaimer.
0012  * 2. Redistributions in binary form must reproduce the above copyright
0013  *    notice, this list of conditions and the following disclaimer in the
0014  *    documentation and/or other materials provided with the distribution.
0015  *
0016  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0017  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0018  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0019  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0020  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0021  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0022  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0023  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0024  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0025  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0026  * POSSIBILITY OF SUCH DAMAGE.
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 /* forward declarations to avoid warnings */
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   /* TBD print users in group */
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 /* configuration information */
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 /* end of file */