summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-14 14:30:36 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-20 10:30:22 +0100
commit002f351e152dd9495f678e6f761c7bfb421814aa (patch)
tree47fc3444a504d2d9490802f991350ca1ef542a61
parentlibcsupport: Avoid TOCTOU and format errors (diff)
downloadrtems-002f351e152dd9495f678e6f761c7bfb421814aa.tar.bz2
libcsupport: Minimal /etc/passwd and /etc/group
Create a minimal /etc/passwd and /etc/group with user root and group root only with no passwords.
-rw-r--r--cpukit/libcsupport/src/pwdgrp.c39
-rw-r--r--testsuites/psxtests/psxpasswd01/init.c54
-rw-r--r--testsuites/psxtests/psxpasswd01/psxpasswd01.scn82
3 files changed, 49 insertions, 126 deletions
diff --git a/cpukit/libcsupport/src/pwdgrp.c b/cpukit/libcsupport/src/pwdgrp.c
index a531b8b2ff..ea240975b4 100644
--- a/cpukit/libcsupport/src/pwdgrp.c
+++ b/cpukit/libcsupport/src/pwdgrp.c
@@ -59,22 +59,12 @@ static void pwdgrp_init(void)
/*
* Initialize /etc/passwd
*/
- init_file(
- "/etc/passwd",
- "root:*:0:0:root::/:/bin/sh\n"
- "rtems:*:1:1:RTEMS Application::/:/bin/sh\n"
- "tty:!:2:2:tty owner::/:/bin/false\n"
- );
+ init_file("/etc/passwd", "root::0:0::::\n");
/*
* Initialize /etc/group
*/
- init_file(
- "/etc/group",
- "root:x:0:root\n"
- "rtems:x:1:rtems\n"
- "tty:x:2:tty\n"
- );
+ init_file("/etc/group", "root::0:\n");
}
void _libcsupport_pwdgrp_init(void)
@@ -265,9 +255,13 @@ int _libcsupport_scangr(
/*
* Determine number of members
*/
- for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
- if(*cp == ',')
- memcount++;
+ if (grmem[0] == '\0') {
+ memcount = 0;
+ } else {
+ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
+ if(*cp == ',')
+ memcount++;
+ }
}
/*
@@ -280,13 +274,18 @@ int _libcsupport_scangr(
/*
* Fill in pointer array
*/
- grp->gr_mem[0] = grmem;
- for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
- if(*cp == ',') {
- *cp = '\0';
- grp->gr_mem[memcount++] = cp + 1;
+ if (grmem[0] == '\0') {
+ memcount = 0;
+ } else {
+ grp->gr_mem[0] = grmem;
+ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
+ if(*cp == ',') {
+ *cp = '\0';
+ grp->gr_mem[memcount++] = cp + 1;
+ }
}
}
+
grp->gr_mem[memcount] = NULL;
return 1;
}
diff --git a/testsuites/psxtests/psxpasswd01/init.c b/testsuites/psxtests/psxpasswd01/init.c
index cc618a5cf6..0f0f208f2a 100644
--- a/testsuites/psxtests/psxpasswd01/init.c
+++ b/testsuites/psxtests/psxpasswd01/init.c
@@ -98,17 +98,7 @@ rtems_task Init(
rtems_test_assert( pw );
print_passwd( pw );
- puts( "Init - getpwent() (2) -- OK" );
- pw = getpwent();
- rtems_test_assert( pw );
- print_passwd( pw );
-
- puts( "Init - getpwent() (3) -- OK" );
- pw = getpwent();
- rtems_test_assert( pw );
- print_passwd( pw );
-
- puts( "Init - getpwent() (4) -- result should be NULL" );
+ puts( "Init - getpwent() (2) -- result should be NULL" );
pw = getpwent();
rtems_test_assert( !pw );
@@ -119,17 +109,7 @@ rtems_task Init(
rtems_test_assert( gr );
print_group( gr );
- puts( "Init - getgrent() (2) -- OK" );
- gr = getgrent();
- rtems_test_assert( gr );
- print_group( gr );
-
- puts( "Init - getgrent() (3) -- OK" );
- gr = getgrent();
- rtems_test_assert( gr );
- print_group( gr );
-
- puts( "Init - getgrent() (4) -- result should be NULL" );
+ puts( "Init - getgrent() (2) -- result should be NULL" );
gr = getgrent();
rtems_test_assert( !gr );
@@ -139,11 +119,6 @@ rtems_task Init(
rtems_test_assert( pw );
print_passwd( pw );
- puts( "Init - getpwnam(\"rtems\") -- OK" );
- pw = getpwnam( "rtems" );
- rtems_test_assert( pw );
- print_passwd( pw );
-
puts( "Init - getpwnam(\"suser\") -- result should be NULL" );
pw = getpwnam( "suser" );
rtems_test_assert( !pw );
@@ -154,10 +129,14 @@ rtems_task Init(
rtems_test_assert( pw );
print_passwd( pw );
- puts( "Init - getpwuid(1) -- OK" );
- pw = getpwuid( 1 );
- rtems_test_assert( pw );
- print_passwd( pw );
+ rtems_test_assert( strcmp(pw->pw_name, "root") == 0 );
+ rtems_test_assert( strcmp(pw->pw_passwd, "") == 0 );
+ rtems_test_assert( pw->pw_uid == 0 );
+ rtems_test_assert( pw->pw_gid == 0 );
+ rtems_test_assert( strcmp(pw->pw_comment, "") == 0 );
+ rtems_test_assert( strcmp(pw->pw_gecos, "") == 0 );
+ rtems_test_assert( strcmp(pw->pw_dir, "") == 0 );
+ rtems_test_assert( strcmp(pw->pw_shell, "") == 0 );
puts( "Init - getpwuid(4) -- result should be NULL" );
pw = getpwuid( 4 );
@@ -169,21 +148,16 @@ rtems_task Init(
rtems_test_assert( gr );
print_group( gr );
- puts( "Init - getgrnam(\"rtems\") -- OK" );
- gr = getgrnam("rtems");
- rtems_test_assert( gr );
- print_group( gr );
-
/* getgrgid */
puts( "Init - getgrgid(0) -- OK" );
gr = getgrgid(0);
rtems_test_assert( gr );
print_group( gr );
- puts( "Init - getgrgid(1) -- OK" );
- gr = getgrgid(1);
- rtems_test_assert( gr );
- print_group( gr );
+ rtems_test_assert( strcmp(gr->gr_name, "root") == 0 );
+ rtems_test_assert( strcmp(gr->gr_passwd, "") == 0 );
+ rtems_test_assert( gr->gr_gid == 0 );
+ rtems_test_assert( gr->gr_mem[0] == NULL );
puts( "Init - getgrgid(4) -- result should be NULL");
gr = getgrgid( 4 );
diff --git a/testsuites/psxtests/psxpasswd01/psxpasswd01.scn b/testsuites/psxtests/psxpasswd01/psxpasswd01.scn
index a0d0a647ad..3a39643729 100644
--- a/testsuites/psxtests/psxpasswd01/psxpasswd01.scn
+++ b/testsuites/psxtests/psxpasswd01/psxpasswd01.scn
@@ -1,99 +1,49 @@
-Initialized console on port COM1 9600-8-N-1
-
-*** PASSWORD/GROUP TEST - 01 ***
+*** BEGIN OF TEST PSXPASSWD 1 ***
Init - getpwent() -- OK, result should be NULL
Init - getgrent() -- OK, result should be NULL
Init - setpwent() -- OK
Init - setgrent() -- OK
Init - getpwent() (1) -- OK
username: root
- user password: *
+ user password:
user ID: 0
group ID: 0
real name:
- home directory: /
- shell program: /bin/sh
-Init - getpwent() (2) -- OK
- username: rtems
- user password: *
- user ID: 1
- group ID: 1
- real name:
- home directory: /
- shell program: /bin/sh
-Init - getpwent() (3) -- OK
- username: tty
- user password: !
- user ID: 2
- group ID: 2
- real name:
- home directory: /
- shell program: /bin/false
-Init - getpwent() (4) -- result should be NULL
+ home directory:
+ shell program:
+Init - getpwent() (2) -- result should be NULL
Init - getgrent() (1) -- OK
group name: root
- group password: x
+ group password:
group ID: 0
-Init - getgrent() (2) -- OK
- group name: rtems
- group password: x
- group ID: 1
-Init - getgrent() (3) -- OK
- group name: tty
- group password: x
- group ID: 2
-Init - getgrent() (4) -- result should be NULL
+Init - getgrent() (2) -- result should be NULL
Init - getpwnam("root") -- OK
username: root
- user password: *
+ user password:
user ID: 0
group ID: 0
real name:
- home directory: /
- shell program: /bin/sh
-Init - getpwnam("rtems") -- OK
- username: rtems
- user password: *
- user ID: 1
- group ID: 1
- real name:
- home directory: /
- shell program: /bin/sh
+ home directory:
+ shell program:
Init - getpwnam("suser") -- result should be NULL
Init - getpwuid(0) -- OK
username: root
- user password: *
+ user password:
user ID: 0
group ID: 0
real name:
- home directory: /
- shell program: /bin/sh
-Init - getpwuid(1) -- OK
- username: rtems
- user password: *
- user ID: 1
- group ID: 1
- real name:
- home directory: /
- shell program: /bin/sh
+ home directory:
+ shell program:
Init - getpwuid(4) -- result should be NULL
Init - getgrnam("root") -- OK
group name: root
- group password: x
+ group password:
group ID: 0
-Init - getgrnam("rtems") -- OK
- group name: rtems
- group password: x
- group ID: 1
Init - getgrgid(0) -- OK
group name: root
- group password: x
+ group password:
group ID: 0
-Init - getgrgid(1) -- OK
- group name: rtems
- group password: x
- group ID: 1
Init - getgrgid(4) -- result should be NULL
Init - endpwent() -- OK
Init - endgrent() -- OK
-*** END OF PASSWORD/GROUP TEST - 01 ***
+*** END OF TEST PSXPASSWD 1 ***