19762338dSopenharmony_ci/* 29762338dSopenharmony_ci * Copyright (C) 2024 HiHope Open Source Organization. 39762338dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 49762338dSopenharmony_ci * you may not use this file except in compliance with the License. 59762338dSopenharmony_ci * You may obtain a copy of the License at 69762338dSopenharmony_ci * 79762338dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 89762338dSopenharmony_ci * 99762338dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 109762338dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 119762338dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129762338dSopenharmony_ci * See the License for the specific language governing permissions and 139762338dSopenharmony_ci * limitations under the License. 149762338dSopenharmony_ci */ 159762338dSopenharmony_ci 169762338dSopenharmony_ci#include <cerrno> 179762338dSopenharmony_ci#include <cstdio> 189762338dSopenharmony_ci#include <cstdlib> 199762338dSopenharmony_ci#include <string> 209762338dSopenharmony_ci#include <vector> 219762338dSopenharmony_ci#include <unistd.h> 229762338dSopenharmony_ci#include <gtest/gtest.h> 239762338dSopenharmony_ci#include <sys/fsuid.h> 249762338dSopenharmony_ci#include <sys/personality.h> 259762338dSopenharmony_ci#include <sys/stat.h> 269762338dSopenharmony_ci#include <sys/types.h> 279762338dSopenharmony_ci 289762338dSopenharmony_ci 299762338dSopenharmony_ciusing namespace testing::ext; 309762338dSopenharmony_ciusing namespace std; 319762338dSopenharmony_ci 329762338dSopenharmony_cistatic const int MAX_GROUPS = 1024; 339762338dSopenharmony_ciconst unsigned long RETRIEVE_PERSONALITY = 0xffffffff; 349762338dSopenharmony_ciconst unsigned long DEFAULT_PERSONALITY = 0; 359762338dSopenharmony_ci 369762338dSopenharmony_ciclass UserApiTest : public testing::Test { 379762338dSopenharmony_cipublic: 389762338dSopenharmony_ci static void SetUpTestCase(); 399762338dSopenharmony_ci static void TearDownTestCase(); 409762338dSopenharmony_ci void SetUp(); 419762338dSopenharmony_ci void TearDown(); 429762338dSopenharmony_ciprivate: 439762338dSopenharmony_ci}; 449762338dSopenharmony_civoid UserApiTest::SetUp() 459762338dSopenharmony_ci{ 469762338dSopenharmony_ci} 479762338dSopenharmony_civoid UserApiTest::TearDown() 489762338dSopenharmony_ci{ 499762338dSopenharmony_ci} 509762338dSopenharmony_civoid UserApiTest::SetUpTestCase() 519762338dSopenharmony_ci{ 529762338dSopenharmony_ci} 539762338dSopenharmony_civoid UserApiTest::TearDownTestCase() 549762338dSopenharmony_ci{ 559762338dSopenharmony_ci} 569762338dSopenharmony_ci 579762338dSopenharmony_ci/* 589762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0100 599762338dSopenharmony_ci * @tc.name : SetpGidSetGroupIDSuccess_0001 609762338dSopenharmony_ci * @tc.desc : SetpGid Set group ID success. 619762338dSopenharmony_ci * @tc.size : MediumTest 629762338dSopenharmony_ci * @tc.type : Function 639762338dSopenharmony_ci * @tc.level : Level 1 649762338dSopenharmony_ci */ 659762338dSopenharmony_ciHWTEST_F(UserApiTest, SetpGidSetGroupIDSuccess_0001, Function | MediumTest | Level1) 669762338dSopenharmony_ci{ 679762338dSopenharmony_ci int ret; 689762338dSopenharmony_ci gid_t gid = getgid(); 699762338dSopenharmony_ci EXPECT_TRUE(gid >= 0); 709762338dSopenharmony_ci 719762338dSopenharmony_ci ret = setpgid(gid, gid); 729762338dSopenharmony_ci EXPECT_EQ(ret, 0); 739762338dSopenharmony_ci 749762338dSopenharmony_ci ret = setpgid(0, gid); 759762338dSopenharmony_ci EXPECT_EQ(ret, 0); 769762338dSopenharmony_ci 779762338dSopenharmony_ci ret = setpgid(gid, 0); 789762338dSopenharmony_ci EXPECT_EQ(ret, 0); 799762338dSopenharmony_ci} 809762338dSopenharmony_ci 819762338dSopenharmony_ci/* 829762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0200 839762338dSopenharmony_ci * @tc.name : SetpGidSetGroupIDFail_0002 849762338dSopenharmony_ci * @tc.desc : SetpGid Set group ID fail. 859762338dSopenharmony_ci * @tc.size : MediumTest 869762338dSopenharmony_ci * @tc.type : Function 879762338dSopenharmony_ci * @tc.level : Level 2 889762338dSopenharmony_ci */ 899762338dSopenharmony_ciHWTEST_F(UserApiTest, SetpGidSetGroupIDFail_0002, Function | MediumTest | Level2) 909762338dSopenharmony_ci{ 919762338dSopenharmony_ci gid_t invalidGid = -1; 929762338dSopenharmony_ci errno = 0; 939762338dSopenharmony_ci int ret = setpgid(0, invalidGid); 949762338dSopenharmony_ci EXPECT_EQ(ret, -1); 959762338dSopenharmony_ci EXPECT_EQ(errno, EINVAL); 969762338dSopenharmony_ci} 979762338dSopenharmony_ci 989762338dSopenharmony_ci/* 999762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0300 1009762338dSopenharmony_ci * @tc.name : GetgroupsGetGroupIDListSuccess_0003 1019762338dSopenharmony_ci * @tc.desc : Getgroups get list of supplementary group IDs success. 1029762338dSopenharmony_ci * @tc.size : MediumTest 1039762338dSopenharmony_ci * @tc.type : Function 1049762338dSopenharmony_ci * @tc.level : Level 1 1059762338dSopenharmony_ci */ 1069762338dSopenharmony_ciHWTEST_F(UserApiTest, GetgroupsGetGroupIDListSuccess_0003, Function | MediumTest | Level1) 1079762338dSopenharmony_ci{ 1089762338dSopenharmony_ci int numGroups; 1099762338dSopenharmony_ci gid_t groups[MAX_GROUPS]; 1109762338dSopenharmony_ci 1119762338dSopenharmony_ci numGroups = getgroups(MAX_GROUPS, groups); 1129762338dSopenharmony_ci EXPECT_TRUE(numGroups >= 0); 1139762338dSopenharmony_ci} 1149762338dSopenharmony_ci 1159762338dSopenharmony_ci/* 1169762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0400 1179762338dSopenharmony_ci * @tc.name : GetgroupsGetGroupIDInNullFail_0004 1189762338dSopenharmony_ci * @tc.desc : Getgroups get list of supplementary group IDs in nullptr fail, errno EFAULT. 1199762338dSopenharmony_ci * @tc.size : MediumTest 1209762338dSopenharmony_ci * @tc.type : Function 1219762338dSopenharmony_ci * @tc.level : Level 2 1229762338dSopenharmony_ci */ 1239762338dSopenharmony_ciHWTEST_F(UserApiTest, GetgroupsGetGroupIDInNullFail_0004, Function | MediumTest | Level2) 1249762338dSopenharmony_ci{ 1259762338dSopenharmony_ci errno = 0; 1269762338dSopenharmony_ci int numGroups = getgroups(MAX_GROUPS, nullptr); 1279762338dSopenharmony_ci EXPECT_EQ(numGroups, -1); 1289762338dSopenharmony_ci EXPECT_EQ(errno, EFAULT); 1299762338dSopenharmony_ci} 1309762338dSopenharmony_ci 1319762338dSopenharmony_ci/* 1329762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0500 1339762338dSopenharmony_ci * @tc.name : GetpgidAcquireSpecifyProcessGroupIDSuccess_0005 1349762338dSopenharmony_ci * @tc.desc : Getpgid acquire specify process group ID success. 1359762338dSopenharmony_ci * @tc.size : MediumTest 1369762338dSopenharmony_ci * @tc.type : Function 1379762338dSopenharmony_ci * @tc.level : Level 1 1389762338dSopenharmony_ci */ 1399762338dSopenharmony_ciHWTEST_F(UserApiTest, GetpgidAcquireSpecifyProcessGroupIDSuccess_0005, Function | MediumTest | Level1) 1409762338dSopenharmony_ci{ 1419762338dSopenharmony_ci pid_t pid = getpid(); 1429762338dSopenharmony_ci pid_t pgid = getpgid(pid); 1439762338dSopenharmony_ci EXPECT_TRUE(pgid >= 0); 1449762338dSopenharmony_ci} 1459762338dSopenharmony_ci 1469762338dSopenharmony_ci/* 1479762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0600 1489762338dSopenharmony_ci * @tc.name : GetpgidAcquireInvalidProcessGroupIDFail_0006 1499762338dSopenharmony_ci * @tc.desc : Getpgid acquire group ID of invalid process ID fail, errno ESRCH. 1509762338dSopenharmony_ci * @tc.size : MediumTest 1519762338dSopenharmony_ci * @tc.type : Function 1529762338dSopenharmony_ci * @tc.level : Level 2 1539762338dSopenharmony_ci */ 1549762338dSopenharmony_ciHWTEST_F(UserApiTest, GetpgidAcquireInvalidProcessGroupIDFail_0006, Function | MediumTest | Level2) 1559762338dSopenharmony_ci{ 1569762338dSopenharmony_ci int invalidPID = -1; 1579762338dSopenharmony_ci errno = 0; 1589762338dSopenharmony_ci pid_t pgid = getpgid(invalidPID); 1599762338dSopenharmony_ci EXPECT_EQ(pgid, -1); 1609762338dSopenharmony_ci EXPECT_EQ(errno, ESRCH); 1619762338dSopenharmony_ci} 1629762338dSopenharmony_ci 1639762338dSopenharmony_ci/* 1649762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0700 1659762338dSopenharmony_ci * @tc.name : GetresuidGetReadEffectiveSavedUIDSuccess_0007 1669762338dSopenharmony_ci * @tc.desc : Getresuid get real uid effective uid and saved uid success. 1679762338dSopenharmony_ci * @tc.size : MediumTest 1689762338dSopenharmony_ci * @tc.type : Function 1699762338dSopenharmony_ci * @tc.level : Level 1 1709762338dSopenharmony_ci */ 1719762338dSopenharmony_ciHWTEST_F(UserApiTest, GetresuidGetReadEffectiveSavedUIDSuccess_0007, Function | MediumTest | Level1) 1729762338dSopenharmony_ci{ 1739762338dSopenharmony_ci int ret; 1749762338dSopenharmony_ci uid_t getRUid, getEUid, savedUid; 1759762338dSopenharmony_ci uid_t realUid = getuid(); 1769762338dSopenharmony_ci uid_t effectiveUid = geteuid(); 1779762338dSopenharmony_ci ret = getresuid(&getRUid, &getEUid, &savedUid); 1789762338dSopenharmony_ci EXPECT_EQ(ret, 0); 1799762338dSopenharmony_ci EXPECT_EQ(realUid, getRUid); 1809762338dSopenharmony_ci EXPECT_EQ(effectiveUid, getEUid); 1819762338dSopenharmony_ci EXPECT_TRUE(savedUid >= 0); 1829762338dSopenharmony_ci} 1839762338dSopenharmony_ci 1849762338dSopenharmony_ci/* 1859762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0800 1869762338dSopenharmony_ci * @tc.name : GetresuidGetReadEffectiveSavedUIDInNullptrFail_0008 1879762338dSopenharmony_ci * @tc.desc : Getresuid get real uid effective uid and saved uid in nullptr fail. 1889762338dSopenharmony_ci * @tc.size : MediumTest 1899762338dSopenharmony_ci * @tc.type : Function 1909762338dSopenharmony_ci * @tc.level : Level 2 1919762338dSopenharmony_ci */ 1929762338dSopenharmony_ciHWTEST_F(UserApiTest, GetresuidGetReadEffectiveSavedUIDInNullptrFail_0008, Function | MediumTest | Level2) 1939762338dSopenharmony_ci{ 1949762338dSopenharmony_ci int ret; 1959762338dSopenharmony_ci uid_t realUid, effectiveUid, savedUid; 1969762338dSopenharmony_ci 1979762338dSopenharmony_ci errno = 0; 1989762338dSopenharmony_ci ret = getresuid(nullptr, &effectiveUid, &savedUid); 1999762338dSopenharmony_ci EXPECT_EQ(ret, -1); 2009762338dSopenharmony_ci EXPECT_EQ(errno, EFAULT); 2019762338dSopenharmony_ci errno = 0; 2029762338dSopenharmony_ci ret = getresuid(&realUid, nullptr, &savedUid); 2039762338dSopenharmony_ci EXPECT_EQ(ret, -1); 2049762338dSopenharmony_ci EXPECT_EQ(errno, EFAULT); 2059762338dSopenharmony_ci errno = 0; 2069762338dSopenharmony_ci ret = getresuid(&realUid, &effectiveUid, nullptr); 2079762338dSopenharmony_ci EXPECT_EQ(ret, -1); 2089762338dSopenharmony_ci EXPECT_EQ(errno, EFAULT); 2099762338dSopenharmony_ci} 2109762338dSopenharmony_ci 2119762338dSopenharmony_ci 2129762338dSopenharmony_ci/* 2139762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0900 2149762338dSopenharmony_ci * @tc.name : GetuidAcquireUIDSuccess_0009 2159762338dSopenharmony_ci * @tc.desc : Getuid acquire user ID success. 2169762338dSopenharmony_ci * @tc.size : MediumTest 2179762338dSopenharmony_ci * @tc.type : Function 2189762338dSopenharmony_ci * @tc.level : Level 1 2199762338dSopenharmony_ci */ 2209762338dSopenharmony_ciHWTEST_F(UserApiTest, GetuidAcquireUIDSuccess_0009, Function | MediumTest | Level1) 2219762338dSopenharmony_ci{ 2229762338dSopenharmony_ci int ret; 2239762338dSopenharmony_ci uid_t uid = getuid(); 2249762338dSopenharmony_ci EXPECT_TRUE(uid >= 0); 2259762338dSopenharmony_ci 2269762338dSopenharmony_ci uid_t setUid = uid + 1; 2279762338dSopenharmony_ci ret = setuid(setUid); 2289762338dSopenharmony_ci EXPECT_EQ(ret, 0); 2299762338dSopenharmony_ci 2309762338dSopenharmony_ci uid_t newUid = getuid(); 2319762338dSopenharmony_ci EXPECT_EQ(newUid, setUid); 2329762338dSopenharmony_ci} 2339762338dSopenharmony_ci 2349762338dSopenharmony_ci/* 2359762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1000 2369762338dSopenharmony_ci * @tc.name : PersonalitySetExecutionDomainSuccess_0010 2379762338dSopenharmony_ci * @tc.desc : Personality set the process execution domain success. 2389762338dSopenharmony_ci * @tc.size : MediumTest 2399762338dSopenharmony_ci * @tc.type : Function 2409762338dSopenharmony_ci * @tc.level : Level 1 2419762338dSopenharmony_ci */ 2429762338dSopenharmony_ciHWTEST_F(UserApiTest, PersonalitySetExecutionDomainSuccess_0010, Function | MediumTest | Level1) 2439762338dSopenharmony_ci{ 2449762338dSopenharmony_ci int ret = personality(PER_LINUX32); 2459762338dSopenharmony_ci EXPECT_EQ(ret, 0); 2469762338dSopenharmony_ci unsigned long currentPersonality = static_cast<unsigned long>(personality(RETRIEVE_PERSONALITY)); 2479762338dSopenharmony_ci EXPECT_EQ(currentPersonality, PER_LINUX32); 2489762338dSopenharmony_ci 2499762338dSopenharmony_ci ret = personality(DEFAULT_PERSONALITY); 2509762338dSopenharmony_ci EXPECT_GE(ret, 0); 2519762338dSopenharmony_ci} 2529762338dSopenharmony_ci 2539762338dSopenharmony_ci/* 2549762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1100 2559762338dSopenharmony_ci * @tc.name : SetfsgidCurrentSuccess_0011 2569762338dSopenharmony_ci * @tc.desc : Setfsgid set current gid. 2579762338dSopenharmony_ci * @tc.size : MediumTest 2589762338dSopenharmony_ci * @tc.type : Function 2599762338dSopenharmony_ci * @tc.level : Level 1 2609762338dSopenharmony_ci */ 2619762338dSopenharmony_ciHWTEST_F(UserApiTest, SetfsgidCurrentSuccess_0011, Function | MediumTest | Level1) 2629762338dSopenharmony_ci{ 2639762338dSopenharmony_ci int ret; 2649762338dSopenharmony_ci ret = setfsgid(0); 2659762338dSopenharmony_ci EXPECT_GE(ret, 0); 2669762338dSopenharmony_ci} 2679762338dSopenharmony_ci 2689762338dSopenharmony_ci/* 2699762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1200 2709762338dSopenharmony_ci * @tc.name : SetfsgidInvalidFsgidFailed_0012 2719762338dSopenharmony_ci * @tc.desc : Setfsgid set user ID success. 2729762338dSopenharmony_ci * @tc.size : MediumTest 2739762338dSopenharmony_ci * @tc.type : Function 2749762338dSopenharmony_ci * @tc.level : Level 2 2759762338dSopenharmony_ci */ 2769762338dSopenharmony_ciHWTEST_F(UserApiTest, SetfsgidInvalidFsgidFailed_0012, Function | MediumTest | Level2) 2779762338dSopenharmony_ci{ 2789762338dSopenharmony_ci int ret; 2799762338dSopenharmony_ci ret = setfsgid(-1); 2809762338dSopenharmony_ci EXPECT_GE(ret, -1); 2819762338dSopenharmony_ci EXPECT_EQ(errno, EFAULT); 2829762338dSopenharmony_ci} 2839762338dSopenharmony_ci 2849762338dSopenharmony_ci/* 2859762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1300 2869762338dSopenharmony_ci * @tc.name : SetfsuidSetFSUserIDSuccess_0013 2879762338dSopenharmony_ci * @tc.desc : Setfsuid set user ID used for file system checks success. 2889762338dSopenharmony_ci * @tc.size : MediumTest 2899762338dSopenharmony_ci * @tc.type : Function 2909762338dSopenharmony_ci * @tc.level : Level 1 2919762338dSopenharmony_ci */ 2929762338dSopenharmony_ciHWTEST_F(UserApiTest, SetfsuidSetFSUserIDSuccess_0013, Function | MediumTest | Level1) 2939762338dSopenharmony_ci{ 2949762338dSopenharmony_ci int ret; 2959762338dSopenharmony_ci uid_t effectiveUid = geteuid(); 2969762338dSopenharmony_ci EXPECT_TRUE(effectiveUid >= 0); 2979762338dSopenharmony_ci 2989762338dSopenharmony_ci uid_t fsUid = effectiveUid + 1; 2999762338dSopenharmony_ci ret = setfsuid(fsUid); 3009762338dSopenharmony_ci EXPECT_GE(ret, 0); 3019762338dSopenharmony_ci} 3029762338dSopenharmony_ci 3039762338dSopenharmony_ci/* 3049762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1400 3059762338dSopenharmony_ci * @tc.name : SetgidSetGroupIDSuccess_0014 3069762338dSopenharmony_ci * @tc.desc : Setgid Set group ID success. 3079762338dSopenharmony_ci * @tc.size : MediumTest 3089762338dSopenharmony_ci * @tc.type : Function 3099762338dSopenharmony_ci * @tc.level : Level 1 3109762338dSopenharmony_ci */ 3119762338dSopenharmony_ciHWTEST_F(UserApiTest, SetgidSetGroupIDSuccess_0014, Function | MediumTest | Level1) 3129762338dSopenharmony_ci{ 3139762338dSopenharmony_ci int ret; 3149762338dSopenharmony_ci gid_t gid = getgid(); 3159762338dSopenharmony_ci EXPECT_TRUE(gid >= 0); 3169762338dSopenharmony_ci 3179762338dSopenharmony_ci gid_t setGid = gid + 1; 3189762338dSopenharmony_ci ret = setgid(setGid); 3199762338dSopenharmony_ci EXPECT_EQ(ret, 0); 3209762338dSopenharmony_ci 3219762338dSopenharmony_ci gid_t newGid = getgid(); 3229762338dSopenharmony_ci EXPECT_EQ(newGid, setGid); 3239762338dSopenharmony_ci} 3249762338dSopenharmony_ci 3259762338dSopenharmony_ci/* 3269762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1500 3279762338dSopenharmony_ci * @tc.name : SetgidSetGroupIDFail_0015 3289762338dSopenharmony_ci * @tc.desc : Setgid Set group ID fail. 3299762338dSopenharmony_ci * @tc.size : MediumTest 3309762338dSopenharmony_ci * @tc.type : Function 3319762338dSopenharmony_ci * @tc.level : Level 2 3329762338dSopenharmony_ci */ 3339762338dSopenharmony_ciHWTEST_F(UserApiTest, SetgidSetGroupIDFail_0015, Function | MediumTest | Level2) 3349762338dSopenharmony_ci{ 3359762338dSopenharmony_ci gid_t invalidGid = -1; 3369762338dSopenharmony_ci errno = 0; 3379762338dSopenharmony_ci int ret = setgid(invalidGid); 3389762338dSopenharmony_ci EXPECT_EQ(ret, -1); 3399762338dSopenharmony_ci EXPECT_EQ(errno, EINVAL); 3409762338dSopenharmony_ci} 3419762338dSopenharmony_ci 3429762338dSopenharmony_ci/* 3439762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1600 3449762338dSopenharmony_ci * @tc.name : SetgroupsSetGroupIDListSuccess_0016 3459762338dSopenharmony_ci * @tc.desc : Setgroups set list of supplementary group IDs success. 3469762338dSopenharmony_ci * @tc.size : MediumTest 3479762338dSopenharmony_ci * @tc.type : Function 3489762338dSopenharmony_ci * @tc.level : Level 1 3499762338dSopenharmony_ci */ 3509762338dSopenharmony_ciHWTEST_F(UserApiTest, SetgroupsSetGroupIDListSuccess_0016, Function | MediumTest | Level1) 3519762338dSopenharmony_ci{ 3529762338dSopenharmony_ci int numGroups; 3539762338dSopenharmony_ci int ret; 3549762338dSopenharmony_ci const int groupLength = 3; 3559762338dSopenharmony_ci gid_t groups[groupLength] = { 1001, 1002, 1003 }; 3569762338dSopenharmony_ci gid_t groupsCheck[MAX_GROUPS]; 3579762338dSopenharmony_ci 3589762338dSopenharmony_ci ret = setgroups(groupLength, groups); 3599762338dSopenharmony_ci EXPECT_EQ(ret, 0); 3609762338dSopenharmony_ci numGroups = getgroups(MAX_GROUPS, groupsCheck); 3619762338dSopenharmony_ci EXPECT_EQ(numGroups, groupLength); 3629762338dSopenharmony_ci for (int i = 0; i < numGroups; i++) { 3639762338dSopenharmony_ci EXPECT_EQ(groups[i], groupsCheck[i]); 3649762338dSopenharmony_ci } 3659762338dSopenharmony_ci} 3669762338dSopenharmony_ci 3679762338dSopenharmony_ci/* 3689762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1700 3699762338dSopenharmony_ci * @tc.name : SetgroupsSetGroupIDNullptrFail_0017 3709762338dSopenharmony_ci * @tc.desc : Setgroups set list of supplementary group IDs in nullptr fail, errno EFAULT. 3719762338dSopenharmony_ci * @tc.size : MediumTest 3729762338dSopenharmony_ci * @tc.type : Function 3739762338dSopenharmony_ci * @tc.level : Level 2 3749762338dSopenharmony_ci */ 3759762338dSopenharmony_ciHWTEST_F(UserApiTest, SetgroupsSetGroupIDNullptrFail_0017, Function | MediumTest | Level2) 3769762338dSopenharmony_ci{ 3779762338dSopenharmony_ci errno = 0; 3789762338dSopenharmony_ci int ret = setgroups(MAX_GROUPS, nullptr); 3799762338dSopenharmony_ci EXPECT_EQ(ret, -1); 3809762338dSopenharmony_ci EXPECT_EQ(errno, EFAULT); 3819762338dSopenharmony_ci 3829762338dSopenharmony_ci errno = 0; 3839762338dSopenharmony_ci ret = getgroups(MAX_GROUPS, nullptr); 3849762338dSopenharmony_ci EXPECT_EQ(ret, -1); 3859762338dSopenharmony_ci EXPECT_EQ(errno, EFAULT); 3869762338dSopenharmony_ci} 3879762338dSopenharmony_ci 3889762338dSopenharmony_ci/* 3899762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1800 3909762338dSopenharmony_ci * @tc.name : SetregidSetRealEffectiveGIDSuccess_0018 3919762338dSopenharmony_ci * @tc.desc : Setregid Set real and effective group ID success. 3929762338dSopenharmony_ci * @tc.size : MediumTest 3939762338dSopenharmony_ci * @tc.type : Function 3949762338dSopenharmony_ci * @tc.level : Level 1 3959762338dSopenharmony_ci */ 3969762338dSopenharmony_ciHWTEST_F(UserApiTest, SetregidSetRealEffectiveGIDSuccess_0018, Function | MediumTest | Level1) 3979762338dSopenharmony_ci{ 3989762338dSopenharmony_ci int ret; 3999762338dSopenharmony_ci gid_t realGid = getgid(); 4009762338dSopenharmony_ci EXPECT_TRUE(realGid >= 0); 4019762338dSopenharmony_ci gid_t effectiveGid = getegid(); 4029762338dSopenharmony_ci EXPECT_TRUE(effectiveGid >= 0); 4039762338dSopenharmony_ci 4049762338dSopenharmony_ci gid_t setRealGid = realGid + 1; 4059762338dSopenharmony_ci gid_t setEffectiveGid = effectiveGid + 1; 4069762338dSopenharmony_ci ret = setregid(setRealGid, setEffectiveGid); 4079762338dSopenharmony_ci EXPECT_EQ(ret, 0); 4089762338dSopenharmony_ci 4099762338dSopenharmony_ci gid_t newRealGid = getgid(); 4109762338dSopenharmony_ci EXPECT_EQ(newRealGid, setRealGid); 4119762338dSopenharmony_ci gid_t newEffectiveGid = getegid(); 4129762338dSopenharmony_ci EXPECT_EQ(newEffectiveGid, setEffectiveGid); 4139762338dSopenharmony_ci} 4149762338dSopenharmony_ci 4159762338dSopenharmony_ci/* 4169762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1900 4179762338dSopenharmony_ci * @tc.name : SetresgidSetRealEffectiveSavedGIDSuccess_0019 4189762338dSopenharmony_ci * @tc.desc : Setresgid Set real effective and saved group ID success. 4199762338dSopenharmony_ci * @tc.size : MediumTest 4209762338dSopenharmony_ci * @tc.type : Function 4219762338dSopenharmony_ci * @tc.level : Level 1 4229762338dSopenharmony_ci */ 4239762338dSopenharmony_ciHWTEST_F(UserApiTest, SetresgidSetRealEffectiveSavedGIDSuccess_0019, Function | MediumTest | Level1) 4249762338dSopenharmony_ci{ 4259762338dSopenharmony_ci int ret; 4269762338dSopenharmony_ci pid_t pid = getpid(); 4279762338dSopenharmony_ci gid_t realGid = getgid(); 4289762338dSopenharmony_ci EXPECT_TRUE(realGid >= 0); 4299762338dSopenharmony_ci gid_t effectiveGid = getegid(); 4309762338dSopenharmony_ci EXPECT_TRUE(effectiveGid >= 0); 4319762338dSopenharmony_ci gid_t savedGid = getsid(pid); 4329762338dSopenharmony_ci EXPECT_TRUE(savedGid >= 0); 4339762338dSopenharmony_ci 4349762338dSopenharmony_ci gid_t setRealGid = realGid + 1; 4359762338dSopenharmony_ci gid_t setEffectiveGid = effectiveGid + 1; 4369762338dSopenharmony_ci gid_t notModifySavedGid = -1; 4379762338dSopenharmony_ci ret = setresgid(setRealGid, setEffectiveGid, notModifySavedGid); 4389762338dSopenharmony_ci EXPECT_EQ(ret, 0); 4399762338dSopenharmony_ci 4409762338dSopenharmony_ci gid_t newRealGid = getgid(); 4419762338dSopenharmony_ci EXPECT_EQ(newRealGid, setRealGid); 4429762338dSopenharmony_ci gid_t newEffectiveGid = getegid(); 4439762338dSopenharmony_ci EXPECT_EQ(newEffectiveGid, setEffectiveGid); 4449762338dSopenharmony_ci gid_t newSavedGid = getsid(pid); 4459762338dSopenharmony_ci EXPECT_EQ(newSavedGid, savedGid); 4469762338dSopenharmony_ci} 4479762338dSopenharmony_ci 4489762338dSopenharmony_ci/* 4499762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_2000 4509762338dSopenharmony_ci * @tc.name : SetresuidSuccess_0020 4519762338dSopenharmony_ci * @tc.desc : Setresuid set current uid. 4529762338dSopenharmony_ci * @tc.size : MediumTest 4539762338dSopenharmony_ci * @tc.type : Function 4549762338dSopenharmony_ci * @tc.level : Level 1 4559762338dSopenharmony_ci */ 4569762338dSopenharmony_ciHWTEST_F(UserApiTest, SetresuidSuccess_0020, Function | MediumTest | Level1) 4579762338dSopenharmony_ci{ 4589762338dSopenharmony_ci int ret; 4599762338dSopenharmony_ci ret = setresuid(0, 0, 0); 4609762338dSopenharmony_ci EXPECT_EQ(ret, 0); 4619762338dSopenharmony_ci} 4629762338dSopenharmony_ci 4639762338dSopenharmony_ci/* 4649762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_2100 4659762338dSopenharmony_ci * @tc.name : SetreuidSuccess_0021 4669762338dSopenharmony_ci * @tc.desc : Setresuid Set current uid. 4679762338dSopenharmony_ci * @tc.size : MediumTest 4689762338dSopenharmony_ci * @tc.type : Function 4699762338dSopenharmony_ci * @tc.level : Level 1 4709762338dSopenharmony_ci */ 4719762338dSopenharmony_ciHWTEST_F(UserApiTest, SetreuidSuccess_0021, Function | MediumTest | Level1) 4729762338dSopenharmony_ci{ 4739762338dSopenharmony_ci int ret; 4749762338dSopenharmony_ci ret = setreuid(0, 0); 4759762338dSopenharmony_ci EXPECT_EQ(ret, 0); 4769762338dSopenharmony_ci} 4779762338dSopenharmony_ci 4789762338dSopenharmony_ci/* 4799762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_2200 4809762338dSopenharmony_ci * @tc.name : SetuidSetUserIDSuccess_0022 4819762338dSopenharmony_ci * @tc.desc : Setuid set user ID success. 4829762338dSopenharmony_ci * @tc.size : MediumTest 4839762338dSopenharmony_ci * @tc.type : Function 4849762338dSopenharmony_ci * @tc.level : Level 1 4859762338dSopenharmony_ci */ 4869762338dSopenharmony_ciHWTEST_F(UserApiTest, SetuidSetUserIDSuccess_0022, Function | MediumTest | Level1) 4879762338dSopenharmony_ci{ 4889762338dSopenharmony_ci int ret; 4899762338dSopenharmony_ci uid_t uid = getuid(); 4909762338dSopenharmony_ci EXPECT_TRUE(uid >= 0); 4919762338dSopenharmony_ci 4929762338dSopenharmony_ci uid_t setUid = uid + 1; 4939762338dSopenharmony_ci ret = setuid(setUid); 4949762338dSopenharmony_ci EXPECT_EQ(ret, 0); 4959762338dSopenharmony_ci 4969762338dSopenharmony_ci uid_t newUid = getuid(); 4979762338dSopenharmony_ci EXPECT_EQ(newUid, setUid); 4989762338dSopenharmony_ci} 4999762338dSopenharmony_ci 5009762338dSopenharmony_ci/* 5019762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_2300 5029762338dSopenharmony_ci * @tc.name : SetgidSetInvalidUIDFail_0023 5039762338dSopenharmony_ci * @tc.desc : Setgid set invalid user ID fail. 5049762338dSopenharmony_ci * @tc.size : MediumTest 5059762338dSopenharmony_ci * @tc.type : Function 5069762338dSopenharmony_ci * @tc.level : Level 2 5079762338dSopenharmony_ci */ 5089762338dSopenharmony_ciHWTEST_F(UserApiTest, SetgidSetInvalidUIDFail_0023, Function | MediumTest | Level2) 5099762338dSopenharmony_ci{ 5109762338dSopenharmony_ci uid_t invalidUid = -1; 5119762338dSopenharmony_ci errno = 0; 5129762338dSopenharmony_ci int ret = setuid(invalidUid); 5139762338dSopenharmony_ci EXPECT_EQ(ret, -1); 5149762338dSopenharmony_ci EXPECT_EQ(errno, EINVAL); 5159762338dSopenharmony_ci}