summaryrefslogtreecommitdiffstats
path: root/src/basic
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2023-12-05 11:51:26 +0100
committerLennart Poettering <lennart@poettering.net>2024-04-06 16:08:23 +0200
commit574a07c79d0518040fd44492fa3ee0e21e65d495 (patch)
tree8a5ae45e4db1e8ed8d135c3b4479e2be19cebbb4 /src/basic
parentnamespace-util: add detach_mount_namespace_userns() (diff)
downloadsystemd-574a07c79d0518040fd44492fa3ee0e21e65d495.tar.xz
systemd-574a07c79d0518040fd44492fa3ee0e21e65d495.zip
namespace-util: add namespace_open_by_type() helper
Diffstat (limited to 'src/basic')
-rw-r--r--src/basic/namespace-util.c16
-rw-r--r--src/basic/namespace-util.h2
2 files changed, 18 insertions, 0 deletions
diff --git a/src/basic/namespace-util.c b/src/basic/namespace-util.c
index 53633c7e8f..0e54a1e235 100644
--- a/src/basic/namespace-util.c
+++ b/src/basic/namespace-util.c
@@ -426,3 +426,19 @@ int parse_userns_uid_range(const char *s, uid_t *ret_uid_shift, uid_t *ret_uid_r
return 0;
}
+
+int namespace_open_by_type(NamespaceType type) {
+ const char *p;
+ int fd;
+
+ assert(type >= 0);
+ assert(type < _NAMESPACE_TYPE_MAX);
+
+ p = pid_namespace_path(0, type);
+
+ fd = RET_NERRNO(open(p, O_RDONLY|O_NOCTTY|O_CLOEXEC));
+ if (fd == -ENOENT && proc_mounted() == 0)
+ return -ENOSYS;
+
+ return fd;
+}
diff --git a/src/basic/namespace-util.h b/src/basic/namespace-util.h
index e7cf1a2201..972ef05d53 100644
--- a/src/basic/namespace-util.h
+++ b/src/basic/namespace-util.h
@@ -60,3 +60,5 @@ int netns_acquire(void);
int in_same_namespace(pid_t pid1, pid_t pid2, NamespaceType type);
int parse_userns_uid_range(const char *s, uid_t *ret_uid_shift, uid_t *ret_uid_range);
+
+int namespace_open_by_type(NamespaceType type);