1570af302Sopenharmony_ci/* 2570af302Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3570af302Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4570af302Sopenharmony_ci * you may not use this file except in compliance with the License. 5570af302Sopenharmony_ci * You may obtain a copy of the License at 6570af302Sopenharmony_ci * 7570af302Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8570af302Sopenharmony_ci * 9570af302Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10570af302Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11570af302Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12570af302Sopenharmony_ci * See the License for the specific language governing permissions and 13570af302Sopenharmony_ci * limitations under the License. 14570af302Sopenharmony_ci */ 15570af302Sopenharmony_ci 16570af302Sopenharmony_ci#include <stdio.h> 17570af302Sopenharmony_ci#include <sys/capability.h> 18570af302Sopenharmony_ci#include "test.h" 19570af302Sopenharmony_ci 20570af302Sopenharmony_ci/** 21570af302Sopenharmony_ci * @tc.name : capget_0100 22570af302Sopenharmony_ci * @tc.desc : Verify that this function can obtain process permissions 23570af302Sopenharmony_ci * @tc.level : Level 0 24570af302Sopenharmony_ci */ 25570af302Sopenharmony_civoid capget_0100(void) 26570af302Sopenharmony_ci{ 27570af302Sopenharmony_ci struct __user_cap_header_struct cap_header_data; 28570af302Sopenharmony_ci cap_user_header_t cap_header = &cap_header_data; 29570af302Sopenharmony_ci 30570af302Sopenharmony_ci struct __user_cap_data_struct cap_data_data; 31570af302Sopenharmony_ci cap_user_data_t cap_data = &cap_data_data; 32570af302Sopenharmony_ci 33570af302Sopenharmony_ci cap_header->pid = getpid(); 34570af302Sopenharmony_ci cap_header->version = _LINUX_CAPABILITY_VERSION_1; 35570af302Sopenharmony_ci 36570af302Sopenharmony_ci int result = capget(cap_header, cap_data); 37570af302Sopenharmony_ci if (result < 0) { 38570af302Sopenharmony_ci t_error("%s capget failed\n", __func__); 39570af302Sopenharmony_ci } 40570af302Sopenharmony_ci 41570af302Sopenharmony_ci printf("Cap data 0x%x, 0x%x, 0x%x \n", cap_data->effective, cap_data->permitted, cap_data->inheritable); 42570af302Sopenharmony_ci} 43570af302Sopenharmony_ci 44570af302Sopenharmony_ci/** 45570af302Sopenharmony_ci * @tc.name : capget_0200 46570af302Sopenharmony_ci * @tc.desc : Verify that this function could not obtain process permissions when parameter is invalid 47570af302Sopenharmony_ci * @tc.level : Level 2 48570af302Sopenharmony_ci */ 49570af302Sopenharmony_civoid capget_0200(void) 50570af302Sopenharmony_ci{ 51570af302Sopenharmony_ci struct __user_cap_data_struct cap_data_data; 52570af302Sopenharmony_ci cap_user_data_t cap_data = &cap_data_data; 53570af302Sopenharmony_ci 54570af302Sopenharmony_ci int result = capget(NULL, cap_data); 55570af302Sopenharmony_ci if (result != -1) { 56570af302Sopenharmony_ci t_error("%s capget should be failed\n", __func__); 57570af302Sopenharmony_ci } 58570af302Sopenharmony_ci} 59570af302Sopenharmony_ci 60570af302Sopenharmony_ciint main(int argc, char *argv[]) 61570af302Sopenharmony_ci{ 62570af302Sopenharmony_ci capget_0100(); 63570af302Sopenharmony_ci capget_0200(); 64570af302Sopenharmony_ci return t_status; 65570af302Sopenharmony_ci}