aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Cherry <tomcherry@google.com>2018-04-04 15:02:55 -0700
committerTom Cherry <tomcherry@google.com>2018-04-05 09:52:40 -0700
commit4b30f14b3331eadb96ef5d353c2902de26408566 (patch)
tree5a2a382622d283d163c5f0fb49e3f0f70f60a4ac
parent5a6b9565c0e3f08f9675abad5c1c34752fb47b17 (diff)
downloadbionic-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.cpp100
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) {