1/* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include <fcntl.h> 17#include <unistd.h> 18#include <sys/stat.h> 19#include "functionalext.h" 20#include "filepath_util.h" 21 22/** 23 * @tc.name : fchownat_0100 24 * @tc.desc : Parameter fd is not equal to AT_FDCWD, the user and group that can change the owner of the file. 25 * @tc.level : Level 0 26 */ 27void fchownat_0100(void) 28{ 29 char ptr[PATH_MAX] = {0}; 30 FILE_ABSOLUTE_PATH(STR_FCHOWNAT_TEST_TXT, ptr); 31 int fd = open(ptr, O_RDWR | O_CREAT, TEST_MODE); 32 EXPECT_TRUE("fchownat_0100", fd >= 0); 33 int ret = fchownat(fd, ptr, 0, 0, AT_SYMLINK_NOFOLLOW); 34 EXPECT_EQ("fchownat_0100", ret, 0); 35 struct stat buf; 36 int st = stat(ptr, &buf); 37 EXPECT_EQ("fchownat_0100", st, 0); 38 EXPECT_EQ("fchownat_0100", buf.st_uid, 0); 39 EXPECT_EQ("fchownat_0100", buf.st_gid, 0); 40 close(fd); 41 remove(ptr); 42} 43 44/** 45 * @tc.name : fchownat_0200 46 * @tc.desc : Parameter fd equal to AT_FDCWD, the user and group that can change the owner of the file. 47 * @tc.level : Level 1 48 */ 49void fchownat_0200(void) 50{ 51 char ptr[PATH_MAX] = {0}; 52 FILE_ABSOLUTE_PATH(STR_FCHOWNAT_TEST_TXT, ptr); 53 int fd = open(ptr, O_RDWR | O_CREAT, TEST_MODE); 54 EXPECT_TRUE("fchownat_0200", fd >= 0); 55 int ret = fchownat(AT_FDCWD, ptr, 0, 0, AT_SYMLINK_NOFOLLOW); 56 EXPECT_EQ("fchownat_0200", ret, 0); 57 struct stat buf; 58 int st = stat(ptr, &buf); 59 EXPECT_EQ("fchownat_0200", st, 0); 60 EXPECT_EQ("fchownat_0200", buf.st_uid, 0); 61 EXPECT_EQ("fchownat_0200", buf.st_gid, 0); 62 close(fd); 63 remove(ptr); 64} 65 66int main(int argc, char *argv[]) 67{ 68 fchownat_0100(); 69 fchownat_0200(); 70 return t_status; 71}