diff options
author | Tom Cherry <tomcherry@google.com> | 2018-04-04 15:02:55 -0700 |
---|---|---|
committer | Tom Cherry <tomcherry@google.com> | 2018-04-05 09:52:40 -0700 |
commit | 4b30f14b3331eadb96ef5d353c2902de26408566 (patch) | |
tree | 5a2a382622d283d163c5f0fb49e3f0f70f60a4ac | |
parent | 5a6b9565c0e3f08f9675abad5c1c34752fb47b17 (diff) | |
download | bionic-4b30f14b3331eadb96ef5d353c2902de26408566.tar.gz |
Do not check user/group names in pwd/grp tests for OEM uid/gids
Vendors that use config.fs will have their own uniquely named
user/group names for uids/gids that fall in the OEM ranges. We
continue to allow lookup via oem_## for these values, however the
returned structs will always include the name from config.fs, so we do
not check it for anything in the tests.
Bug: 77549259
Test: bionic unit tests with uid 5000 as AID_CRAS
Merged-In: I27fc1fdd0e22063fea82b4c9d2a6fb8b865c5d7b
Change-Id: I27fc1fdd0e22063fea82b4c9d2a6fb8b865c5d7b
(cherry picked from commit b4c25c882ef6cb99db692f5aca7db8275b044cbc)
-rw-r--r-- | tests/grp_pwd_test.cpp | 100 |
1 files changed, 61 insertions, 39 deletions
diff --git a/tests/grp_pwd_test.cpp b/tests/grp_pwd_test.cpp index 12d4b7ff0..fa8a662f2 100644 --- a/tests/grp_pwd_test.cpp +++ b/tests/grp_pwd_test.cpp @@ -44,9 +44,12 @@ enum uid_type_t { #if defined(__BIONIC__) -static void check_passwd(const passwd* pwd, const char* username, uid_t uid, uid_type_t uid_type) { +static void check_passwd(const passwd* pwd, const char* username, uid_t uid, uid_type_t uid_type, + bool check_username) { ASSERT_TRUE(pwd != NULL); - EXPECT_STREQ(username, pwd->pw_name); + if (check_username) { + EXPECT_STREQ(username, pwd->pw_name); + } EXPECT_EQ(uid, pwd->pw_uid); EXPECT_EQ(uid, pwd->pw_gid); EXPECT_EQ(NULL, pwd->pw_passwd); @@ -62,23 +65,26 @@ static void check_passwd(const passwd* pwd, const char* username, uid_t uid, uid EXPECT_STREQ("/system/bin/sh", pwd->pw_shell); } -static void check_getpwuid(const char* username, uid_t uid, uid_type_t uid_type) { +static void check_getpwuid(const char* username, uid_t uid, uid_type_t uid_type, + bool check_username) { errno = 0; passwd* pwd = getpwuid(uid); ASSERT_EQ(0, errno); SCOPED_TRACE("getpwuid"); - check_passwd(pwd, username, uid, uid_type); + check_passwd(pwd, username, uid, uid_type, check_username); } -static void check_getpwnam(const char* username, uid_t uid, uid_type_t uid_type) { +static void check_getpwnam(const char* username, uid_t uid, uid_type_t uid_type, + bool check_username) { errno = 0; passwd* pwd = getpwnam(username); ASSERT_EQ(0, errno); SCOPED_TRACE("getpwnam"); - check_passwd(pwd, username, uid, uid_type); + check_passwd(pwd, username, uid, uid_type, check_username); } -static void check_getpwuid_r(const char* username, uid_t uid, uid_type_t uid_type) { +static void check_getpwuid_r(const char* username, uid_t uid, uid_type_t uid_type, + bool check_username) { passwd pwd_storage; char buf[512]; int result; @@ -89,10 +95,11 @@ static void check_getpwuid_r(const char* username, uid_t uid, uid_type_t uid_typ ASSERT_EQ(0, result); ASSERT_EQ(0, errno); SCOPED_TRACE("getpwuid_r"); - check_passwd(pwd, username, uid, uid_type); + check_passwd(pwd, username, uid, uid_type, check_username); } -static void check_getpwnam_r(const char* username, uid_t uid, uid_type_t uid_type) { +static void check_getpwnam_r(const char* username, uid_t uid, uid_type_t uid_type, + bool check_username) { passwd pwd_storage; char buf[512]; int result; @@ -103,14 +110,15 @@ static void check_getpwnam_r(const char* username, uid_t uid, uid_type_t uid_typ ASSERT_EQ(0, result); ASSERT_EQ(0, errno); SCOPED_TRACE("getpwnam_r"); - check_passwd(pwd, username, uid, uid_type); + check_passwd(pwd, username, uid, uid_type, check_username); } -static void check_get_passwd(const char* username, uid_t uid, uid_type_t uid_type) { - check_getpwuid(username, uid, uid_type); - check_getpwnam(username, uid, uid_type); - check_getpwuid_r(username, uid, uid_type); - check_getpwnam_r(username, uid, uid_type); +static void check_get_passwd(const char* username, uid_t uid, uid_type_t uid_type, + bool check_username = true) { + check_getpwuid(username, uid, uid_type, check_username); + check_getpwnam(username, uid, uid_type, check_username); + check_getpwuid_r(username, uid, uid_type, check_username); + check_getpwnam_r(username, uid, uid_type, check_username); } #else // !defined(__BIONIC__) @@ -119,6 +127,11 @@ static void print_no_getpwnam_test_info() { GTEST_LOG_(INFO) << "This test is about uid/username translation for Android, which does nothing on libc other than bionic.\n"; } +static void check_get_passwd(const char* /* username */, uid_t /* uid */, uid_type_t /* uid_type */, + bool /* check_username */) { + print_no_getpwnam_test_info(); +} + static void check_get_passwd(const char* /* username */, uid_t /* uid */, uid_type_t /* uid_type */) { print_no_getpwnam_test_info(); } @@ -138,19 +151,19 @@ TEST(pwd, getpwnam_app_id_radio) { } TEST(pwd, getpwnam_oem_id_5000) { - check_get_passwd("oem_5000", 5000, TYPE_SYSTEM); + check_get_passwd("oem_5000", 5000, TYPE_SYSTEM, false); } TEST(pwd, getpwnam_oem_id_5999) { - check_get_passwd("oem_5999", 5999, TYPE_SYSTEM); + check_get_passwd("oem_5999", 5999, TYPE_SYSTEM, false); } TEST(pwd, getpwnam_oem_id_2900) { - check_get_passwd("oem_2900", 2900, TYPE_SYSTEM); + check_get_passwd("oem_2900", 2900, TYPE_SYSTEM, false); } TEST(pwd, getpwnam_oem_id_2999) { - check_get_passwd("oem_2999", 2999, TYPE_SYSTEM); + check_get_passwd("oem_2999", 2999, TYPE_SYSTEM, false); } TEST(pwd, getpwnam_app_id_nobody) { @@ -273,34 +286,39 @@ TEST(pwd, getpwent_iterate) { #endif } -static void check_group(const group* grp, const char* group_name, gid_t gid) { +static void check_group(const group* grp, const char* group_name, gid_t gid, + bool check_groupname = true) { ASSERT_TRUE(grp != NULL); - EXPECT_STREQ(group_name, grp->gr_name); + if (check_groupname) { + EXPECT_STREQ(group_name, grp->gr_name); + } EXPECT_EQ(gid, grp->gr_gid); ASSERT_TRUE(grp->gr_mem != NULL); - EXPECT_STREQ(group_name, grp->gr_mem[0]); + if (check_groupname) { + EXPECT_STREQ(group_name, grp->gr_mem[0]); + } EXPECT_TRUE(grp->gr_mem[1] == NULL); } #if defined(__BIONIC__) -static void check_getgrgid(const char* group_name, gid_t gid) { +static void check_getgrgid(const char* group_name, gid_t gid, bool check_groupname) { errno = 0; group* grp = getgrgid(gid); ASSERT_EQ(0, errno); SCOPED_TRACE("getgrgid"); - check_group(grp, group_name, gid); + check_group(grp, group_name, gid, check_groupname); } -static void check_getgrnam(const char* group_name, gid_t gid) { +static void check_getgrnam(const char* group_name, gid_t gid, bool check_groupname) { errno = 0; group* grp = getgrnam(group_name); ASSERT_EQ(0, errno); SCOPED_TRACE("getgrnam"); - check_group(grp, group_name, gid); + check_group(grp, group_name, gid, check_groupname); } -static void check_getgrgid_r(const char* group_name, gid_t gid) { +static void check_getgrgid_r(const char* group_name, gid_t gid, bool check_groupname) { group grp_storage; char buf[512]; group* grp; @@ -310,10 +328,10 @@ static void check_getgrgid_r(const char* group_name, gid_t gid) { ASSERT_EQ(0, result); ASSERT_EQ(0, errno); SCOPED_TRACE("getgrgid_r"); - check_group(grp, group_name, gid); + check_group(grp, group_name, gid, check_groupname); } -static void check_getgrnam_r(const char* group_name, gid_t gid) { +static void check_getgrnam_r(const char* group_name, gid_t gid, bool check_groupname) { group grp_storage; char buf[512]; group* grp; @@ -323,14 +341,14 @@ static void check_getgrnam_r(const char* group_name, gid_t gid) { ASSERT_EQ(0, result); ASSERT_EQ(0, errno); SCOPED_TRACE("getgrnam_r"); - check_group(grp, group_name, gid); + check_group(grp, group_name, gid, check_groupname); } -static void check_get_group(const char* group_name, gid_t gid) { - check_getgrgid(group_name, gid); - check_getgrnam(group_name, gid); - check_getgrgid_r(group_name, gid); - check_getgrnam_r(group_name, gid); +static void check_get_group(const char* group_name, gid_t gid, bool check_groupname = true) { + check_getgrgid(group_name, gid, check_groupname); + check_getgrnam(group_name, gid, check_groupname); + check_getgrgid_r(group_name, gid, check_groupname); + check_getgrnam_r(group_name, gid, check_groupname); } #else // !defined(__BIONIC__) @@ -339,6 +357,10 @@ static void print_no_getgrnam_test_info() { GTEST_LOG_(INFO) << "This test is about gid/group_name translation for Android, which does nothing on libc other than bionic.\n"; } +static void check_get_group(const char*, gid_t, bool) { + print_no_getgrnam_test_info(); +} + static void check_get_group(const char*, gid_t) { print_no_getgrnam_test_info(); } @@ -358,19 +380,19 @@ TEST(grp, getgrnam_app_id_radio) { } TEST(grp, getgrnam_oem_id_5000) { - check_get_group("oem_5000", 5000); + check_get_group("oem_5000", 5000, false); } TEST(grp, getgrnam_oem_id_5999) { - check_get_group("oem_5999", 5999); + check_get_group("oem_5999", 5999, false); } TEST(grp, getgrnam_oem_id_2900) { - check_get_group("oem_2900", 2900); + check_get_group("oem_2900", 2900, false); } TEST(grp, getgrnam_oem_id_2999) { - check_get_group("oem_2999", 2999); + check_get_group("oem_2999", 2999, false); } TEST(grp, getgrnam_app_id_nobody) { |