1 /* SPDX-License-Identifier: LGPL-2.1+ */
5 Copyright © 2016 Djalal Harouni
8 typedef struct NamespaceInfo NamespaceInfo
;
9 typedef struct BindMount BindMount
;
10 typedef struct TemporaryFileSystem TemporaryFileSystem
;
14 #include "dissect-image.h"
17 #include "string-util.h"
19 typedef enum ProtectHome
{
22 PROTECT_HOME_READ_ONLY
,
25 _PROTECT_HOME_INVALID
= -1
28 typedef enum NamespaceType
{
37 _NAMESPACE_TYPE_INVALID
= -1,
40 typedef enum ProtectSystem
{
44 PROTECT_SYSTEM_STRICT
,
46 _PROTECT_SYSTEM_INVALID
= -1
49 struct NamespaceInfo
{
50 bool ignore_protect_paths
:1;
52 bool private_mounts
:1;
53 bool protect_control_groups
:1;
54 bool protect_kernel_tunables
:1;
55 bool protect_kernel_modules
:1;
56 bool protect_kernel_logs
:1;
58 bool protect_hostname
:1;
70 struct TemporaryFileSystem
{
76 const char *root_directory
,
77 const char *root_image
,
78 const MountOptions
*root_image_options
,
79 const NamespaceInfo
*ns_info
,
80 char **read_write_paths
,
81 char **read_only_paths
,
82 char **inaccessible_paths
,
83 char **empty_directories
,
84 const BindMount
*bind_mounts
,
86 const TemporaryFileSystem
*temporary_filesystems
,
87 size_t n_temporary_filesystems
,
89 const char *var_tmp_dir
,
90 const char *log_namespace
,
91 ProtectHome protect_home
,
92 ProtectSystem protect_system
,
93 unsigned long mount_flags
,
94 const void *root_hash
,
95 size_t root_hash_size
,
96 const char *root_hash_path
,
97 const void *root_hash_sig
,
98 size_t root_hash_sig_size
,
99 const char *root_hash_sig_path
,
100 const char *root_verity
,
101 DissectImageFlags dissected_image_flags
,
104 #define RUN_SYSTEMD_EMPTY "/run/systemd/empty"
106 static inline void namespace_cleanup_tmpdir(char *p
) {
108 if (!streq_ptr(p
, RUN_SYSTEMD_EMPTY
))
112 DEFINE_TRIVIAL_CLEANUP_FUNC(char*, namespace_cleanup_tmpdir
);
119 int setup_netns(const int netns_storage_socket
[static 2]);
120 int open_netns_path(const int netns_storage_socket
[static 2], const char *path
);
122 const char* protect_home_to_string(ProtectHome p
) _const_
;
123 ProtectHome
protect_home_from_string(const char *s
) _pure_
;
125 const char* protect_system_to_string(ProtectSystem p
) _const_
;
126 ProtectSystem
protect_system_from_string(const char *s
) _pure_
;
128 void bind_mount_free_many(BindMount
*b
, size_t n
);
129 int bind_mount_add(BindMount
**b
, size_t *n
, const BindMount
*item
);
131 void temporary_filesystem_free_many(TemporaryFileSystem
*t
, size_t n
);
132 int temporary_filesystem_add(TemporaryFileSystem
**t
, size_t *n
,
133 const char *path
, const char *options
);
135 const char* namespace_type_to_string(NamespaceType t
) _const_
;
136 NamespaceType
namespace_type_from_string(const char *s
) _pure_
;
138 bool ns_type_supported(NamespaceType type
);