/* Compat code so unshare and setns can be used with older libcs */
#ifndef UTIL_LINUX_NAMESPACE_H
-#define UTIL_LINUX_NAMESPACE_H
+# define UTIL_LINUX_NAMESPACE_H
-#include <sched.h>
+# include <sched.h>
-#ifndef CLONE_NEWSNS
-# define CLONE_NEWNS 0x00020000
-#endif
-#ifndef CLONE_NEWUTS
-# define CLONE_NEWUTS 0x04000000
-#endif
-#ifndef CLONE_NEWIPC
-# define CLONE_NEWIPC 0x08000000
-#endif
-#ifndef CLONE_NEWNET
-# define CLONE_NEWNET 0x40000000
-#endif
-#ifndef CLONE_NEWUSER
-# define CLONE_NEWUSER 0x10000000
-#endif
-#ifndef CLONE_NEWPID
-# define CLONE_NEWPID 0x20000000
-#endif
-
-#ifndef HAVE_UNSHARE
-# include <sys/syscall.h>
+# ifndef CLONE_NEWSNS
+# define CLONE_NEWNS 0x00020000
+# endif
+# ifndef CLONE_NEWUTS
+# define CLONE_NEWUTS 0x04000000
+# endif
+# ifndef CLONE_NEWIPC
+# define CLONE_NEWIPC 0x08000000
+# endif
+# ifndef CLONE_NEWNET
+# define CLONE_NEWNET 0x40000000
+# endif
+# ifndef CLONE_NEWUSER
+# define CLONE_NEWUSER 0x10000000
+# endif
+# ifndef CLONE_NEWPID
+# define CLONE_NEWPID 0x20000000
+# endif
+# ifndef HAVE_UNSHARE
+# include <sys/syscall.h>
static inline int unshare(int flags)
{
return syscall(SYS_unshare, flags);
}
-#endif
+# endif
-#ifndef HAVE_SETNS
-# include <sys/syscall.h>
+# ifndef HAVE_SETNS
+# include <sys/syscall.h>
static inline int setns(int fd, int nstype)
{
return syscall(SYS_setns, fd, nstype);
}
-#endif /* HAVE_SETNS */
+# endif
-#endif /* UTIL_LINUX_NAMESPACE_H */
+#endif /* UTIL_LINUX_NAMESPACE_H */
#include "closestream.h"
#include "namespace.h"
-static struct namespace_file{
+static struct namespace_file {
int nstype;
const char *name;
int fd;
if (!path && namespace_target_pid) {
snprintf(pathbuf, sizeof(pathbuf), "/proc/%u/%s",
- namespace_target_pid, type);
+ namespace_target_pid, type);
path = pathbuf;
}
if (!path)
- errx(EXIT_FAILURE, _("neither filename nor target pid supplied for %s"),
- type);
+ errx(EXIT_FAILURE,
+ _("neither filename nor target pid supplied for %s"),
+ type);
if (*fd >= 0)
close(*fd);
/* Return the child's exit code if possible */
if (WIFEXITED(status)) {
exit(WEXITSTATUS(status));
- }
- else if (WIFSIGNALED(status)) {
+ } else if (WIFSIGNALED(status)) {
kill(getpid(), WTERMSIG(status));
}
exit(EXIT_FAILURE);
printf(UTIL_LINUX_VERSION);
return EXIT_SUCCESS;
case 't':
- namespace_target_pid = strtoul_or_err(optarg, _("failed to parse pid"));
+ namespace_target_pid =
+ strtoul_or_err(optarg, _("failed to parse pid"));
break;
case 'm':
if (optarg)
}
}
- if(optind >= argc)
+ if (optind >= argc)
usage(EXIT_FAILURE);
/*
if (nsfile->fd < 0)
continue;
if (setns(nsfile->fd, nsfile->nstype))
- err(EXIT_FAILURE, _("reassociate to namespace '%s' failed"),
+ err(EXIT_FAILURE,
+ _("reassociate to namespace '%s' failed"),
nsfile->name);
close(nsfile->fd);
nsfile->fd = -1;
if (root_fd >= 0 && wd_fd < 0) {
wd_fd = open(".", O_RDONLY);
if (wd_fd < 0)
- err(EXIT_FAILURE, _("cannot open current working directory"));
+ err(EXIT_FAILURE,
+ _("cannot open current working directory"));
}
/* Change the root directory */
if (root_fd >= 0) {
if (fchdir(root_fd) < 0)
- err(EXIT_FAILURE, _("change directory by root file descriptor failed"));
+ err(EXIT_FAILURE,
+ _("change directory by root file descriptor failed"));
if (chroot(".") < 0)
err(EXIT_FAILURE, _("chroot failed"));
/* Change the working directory */
if (wd_fd >= 0) {
if (fchdir(wd_fd) < 0)
- err(EXIT_FAILURE, _("change directory by working directory file descriptor failed"));
+ err(EXIT_FAILURE,
+ _("change directory by working directory file descriptor failed"));
close(wd_fd);
wd_fd = -1;