TEST(util, DecodeUid) { auto decoded_uid = DecodeUid("root"); EXPECT_TRUE(decoded_uid); EXPECT_EQ(0U, *decoded_uid); decoded_uid = DecodeUid("toot"); EXPECT_FALSE(decoded_uid); EXPECT_EQ("getpwnam failed: No such file or directory", decoded_uid.error_string()); decoded_uid = DecodeUid("123"); EXPECT_TRUE(decoded_uid); EXPECT_EQ(123U, *decoded_uid); }
TEST(util, DecodeUid) { uid_t decoded_uid; std::string err; EXPECT_TRUE(DecodeUid("root", &decoded_uid, &err)); EXPECT_EQ("", err); EXPECT_EQ(0U, decoded_uid); EXPECT_FALSE(DecodeUid("toot", &decoded_uid, &err)); EXPECT_EQ("getpwnam failed: No such file or directory", err); EXPECT_EQ(UINT_MAX, decoded_uid); EXPECT_TRUE(DecodeUid("123", &decoded_uid, &err)); EXPECT_EQ("", err); EXPECT_EQ(123U, decoded_uid); }
static void Test_make_temporary_oneshot_service(bool dash_dash, bool seclabel, bool uid, bool gid, bool supplementary_gids) { std::vector<std::string> args; args.push_back("exec"); if (seclabel) { args.push_back("u:r:su:s0"); // seclabel if (uid) { args.push_back("log"); // uid if (gid) { args.push_back("shell"); // gid if (supplementary_gids) { args.push_back("system"); // supplementary gid 0 args.push_back("adb"); // supplementary gid 1 } } } } if (dash_dash) { args.push_back("--"); } args.push_back("/system/bin/toybox"); args.push_back("id"); auto svc = Service::MakeTemporaryOneshotService(args); ASSERT_NE(nullptr, svc); if (seclabel) { ASSERT_EQ("u:r:su:s0", svc->seclabel()); } else { ASSERT_EQ("", svc->seclabel()); } if (uid) { auto decoded_uid = DecodeUid("log"); ASSERT_TRUE(decoded_uid); ASSERT_EQ(*decoded_uid, svc->uid()); } else { ASSERT_EQ(0U, svc->uid()); } if (gid) { auto decoded_uid = DecodeUid("shell"); ASSERT_TRUE(decoded_uid); ASSERT_EQ(*decoded_uid, svc->gid()); } else { ASSERT_EQ(0U, svc->gid()); } if (supplementary_gids) { ASSERT_EQ(2U, svc->supp_gids().size()); auto decoded_uid = DecodeUid("system"); ASSERT_TRUE(decoded_uid); ASSERT_EQ(*decoded_uid, svc->supp_gids()[0]); decoded_uid = DecodeUid("adb"); ASSERT_TRUE(decoded_uid); ASSERT_EQ(*decoded_uid, svc->supp_gids()[1]); } else { ASSERT_EQ(0U, svc->supp_gids().size()); } ASSERT_EQ(static_cast<std::size_t>(2), svc->args().size()); ASSERT_EQ("/system/bin/toybox", svc->args()[0]); ASSERT_EQ("id", svc->args()[1]); }