pasta: Allow specifying paths and names of namespaces
Based on a patch from Giuseppe Scrivano, this adds the ability to: - specify paths and names of target namespaces to join, instead of a PID, also for user namespaces, with --userns - request to join or create a network namespace only, without entering or creating a user namespace, with --netns-only - specify the base directory for netns mountpoints, with --nsrun-dir Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com> [sbrivio: reworked logic to actually join the given namespaces when they're not created, implemented --netns-only and --nsrun-dir, updated pasta demo script and man page] Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:

committed by
Stefano Brivio

parent
ab32838022
commit
9a175cc2ce
28
util.c
28
util.c
@@ -32,6 +32,7 @@
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "util.h"
|
||||
#include "passt.h"
|
||||
@@ -327,31 +328,18 @@ void procfs_scan_listen(char *name, uint8_t *map, uint8_t *exclude)
|
||||
}
|
||||
|
||||
/**
|
||||
* ns_enter() - Enter user and network namespaces of process with given PID
|
||||
* @target_pid: Process PID
|
||||
* ns_enter() - Enter configured network and user namespaces
|
||||
* @c: Execution context
|
||||
*
|
||||
* Return: 0 on success, -1 on failure
|
||||
*/
|
||||
int ns_enter(int target_pid)
|
||||
int ns_enter(struct ctx *c)
|
||||
{
|
||||
char ns[PATH_MAX];
|
||||
int fd;
|
||||
if (!c->netns_only && setns(c->pasta_userns_fd, 0))
|
||||
return -errno;
|
||||
|
||||
snprintf(ns, PATH_MAX, "/proc/%i/ns/user", target_pid);
|
||||
if ((fd = open(ns, O_RDONLY)) < 0 || setns(fd, 0))
|
||||
goto fail;
|
||||
close(fd);
|
||||
|
||||
snprintf(ns, PATH_MAX, "/proc/%i/ns/net", target_pid);
|
||||
if ((fd = open(ns, O_RDONLY)) < 0 || setns(fd, 0))
|
||||
goto fail;
|
||||
close(fd);
|
||||
if (setns(c->pasta_netns_fd, 0))
|
||||
return -errno;
|
||||
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
if (fd != -1)
|
||||
close(fd);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user