1 /*
2 * Copyright (c) 2023-2023 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 <dirent.h>
17 #include <errno.h>
18 #include <unistd.h>
19 #include <sys/types.h>
20 #include <stdio.h>
21 #include <sys/stat.h>
22 #include <stdbool.h>
23
24 #include <securec.h>
25
26 /**
27 * This bin file is used in l2 device triggered when device initializing
28 */
29
30 #include "hilog/log.h"
31 #define LOG_ENGINE LOG_CORE
32 #define LOG_PUBLIC "{public}"
33 #undef LOG_DOMAIN
34 #define LOG_DOMAIN 0xD002F00 /* Security subsystem's domain id */
35
36 #define HKS_LOG_E(fmt, arg...) HILOG_ERROR(LOG_ENGINE, "%" LOG_PUBLIC "s[%" LOG_PUBLIC "u]: " fmt "\n", \
37 __func__, __LINE__, ##arg)
38
39 #define HUKS_SERVICE_UID 3510
40 #define DIR_TYPE 4
41 #define DEFAULT_PATH_LEN 1024
42 #define DEFAULT_HUKS_PATH_PERMISSION 0700
43
44 #include <stdio.h>
45
46 #include <errno.h>
47
ChangeDirAndFilesPerm(const char * path)48 static void ChangeDirAndFilesPerm(const char *path)
49 {
50 HKS_LOG_E("enter ChangeDirAndFilesPerm %" LOG_PUBLIC "s", path);
51 DIR *dir;
52 struct dirent *ptr;
53 dir = opendir(path);
54 if (dir == NULL) {
55 return;
56 }
57 int ret = EOK;
58 while ((ptr = readdir(dir)) != NULL) {
59 if (strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0) {
60 continue;
61 }
62 char curPath[DEFAULT_PATH_LEN] = { 0 };
63
64 ret = strcpy_s(curPath, DEFAULT_PATH_LEN, path);
65 if (ret != EOK) {
66 break;
67 }
68 ret = strcat_s(curPath, DEFAULT_PATH_LEN, "/");
69 if (ret != EOK) {
70 break;
71 }
72 ret = strcat_s(curPath, DEFAULT_PATH_LEN, ptr->d_name);
73 if (ret != EOK) {
74 break;
75 }
76
77 ret = chown(curPath, HUKS_SERVICE_UID, HUKS_SERVICE_UID);
78 if (ret != EOK) {
79 break;
80 }
81 if ((ptr->d_type != DIR_TYPE)) {
82 if (chmod(curPath, S_IRUSR | S_IWUSR) < 0) {
83 break;
84 }
85 } else {
86 if (chmod(curPath, S_IRWXU) < 0) {
87 break;
88 }
89 ChangeDirAndFilesPerm(curPath);
90 }
91 }
92 if (ret != EOK) {
93 printf("chmod dir and file failed! errno = 0x%x \n", errno);
94 }
95 (void)closedir(dir);
96 }
97
main(void)98 int main(void)
99 {
100 const char *path = "/data/data/huks_service";
101 // change directories and files permission
102 ChangeDirAndFilesPerm(path);
103 }
104