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
Change-Id: I27fc1fdd0e22063fea82b4c9d2a6fb8b865c5d7b
diff --git a/tests/grp_pwd_test.cpp b/tests/grp_pwd_test.cpp
index 12d4b7f..fa8a662 100644
--- a/tests/grp_pwd_test.cpp
+++ b/tests/grp_pwd_test.cpp
@@ -44,9 +44,12 @@
#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 @@
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 @@
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 @@
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 @@
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_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 @@
#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 @@
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 @@
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 @@
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_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) {