• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef _NAMESPACE_H
17 #define _NAMESPACE_H
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 #include <stdbool.h>
24 #include <stdint.h>
25 #include "strops.h"
26 
27 #define NS_DEFAULT_NAME "default"
28 struct dso;
29 /* define dso list */
30 typedef struct _dso_list_ {
31     uint16_t num;
32     uint16_t size;
33     struct dso **dsos;
34 } dsolist;
35 /* define namespace struct */
36 struct _ns_inherit_list_;
37 typedef struct _namespace_t_ {
38     char *ns_name;            /* namespace name */
39     char *env_paths;          /* value of LD_LIBRARY_PATH. splited by ':'. */
40     char *lib_paths;          /* library search paths splited by ':'. */
41 
42     char *asan_lib_paths;          /* when asan is enable, library search paths splited by ':'. */
43     strlist *permitted_paths;    /* when separated, permitted search paths splited by ':', including sub dirs. */
44     strlist *asan_permitted_paths;    /* when asan is enable and separated,the same as above.  */
45 
46     bool separated;           /* if separated */
47     strlist *allowed_libs;       /* when separated, allowed library names splited by ':'. */
48     dsolist *ns_dsos;         /* dso list in this namespace */
49     struct _ns_inherit_list_ *ns_inherits;   /* inherit list in this namespace */
50     int flag;
51 } ns_t;
52 /* define namespace list */
53 typedef struct _namespaces_list_ {
54     uint16_t num;
55     uint16_t size;
56     ns_t **nss;
57 } nslist;
58 /* define namespace inherit */
59 typedef struct _namespace_inherit_ {
60     ns_t *inherited_ns;       /* inherited namespace */
61     strlist *shared_libs;        /* when inherited, shared library names splited by ':'. */
62 } ns_inherit;
63 /* define namespace inherit list */
64 typedef struct _ns_inherit_list_ {
65     uint16_t num;
66     uint16_t size;
67     ns_inherit **inherits;
68 } ns_inherit_list;
69 
70 /* init g_ns_list */
71 nslist *nslist_init();
72 
73 /* namespace funcs */
74 ns_t *ns_alloc();
75 void ns_free(ns_t *ns);
76 void ns_set_name(ns_t *ns, const char *name);
77 void ns_set_env_paths(ns_t *ns, const char *env_paths);
78 void ns_set_lib_paths(ns_t *ns, const char *lib_paths);
79 void ns_set_asan_lib_paths(ns_t *ns, const char *asan_lib_paths);
80 void ns_set_permitted_paths(ns_t *ns, const char *permitted_paths);
81 void ns_set_asan_permitted_paths(ns_t *ns, const char *asan_permitted_paths);
82 void ns_set_separated(ns_t *ns, bool separated);
83 void ns_set_allowed_libs(ns_t *ns, const char *allowed_libs);
84 void ns_add_dso(ns_t *ns, struct dso *dso);
85 void nslist_add_ns(ns_t *ns);
86 void ns_add_inherit(ns_t *ns,ns_t *inherited, const char *shared_libs);
87 void ns_set_flag(ns_t *ns, int flag);
88 
89 /* get default namespace */
90 ns_t *get_default_ns();
91 
92 /* check if library pathname is accessible in the namespace */
93 bool is_accessible(ns_t *ns, const char *lib_pathname, bool is_asan, bool check_inherited);
94 
95 /* check if asan_lib_paths or asan_permitted_paths pathname is accessible in the namespace */
96 bool check_asan_path(ns_t *ns, const char *lib_pathname);
97 
98 /* check if library is sharable in the inherited namespace */
99 bool is_sharable(ns_inherit *inherit, const char *lib_name);
100 
101 /* find namespace by name */
102 ns_t *find_ns_by_name(const char *ns_name);
103 
104 #ifdef __cplusplus
105 }
106 #endif
107 
108 #endif