X-Git-Url: https://git.wh0rd.org/?p=home.git;a=blobdiff_plain;f=vunshare.c;h=85801fc10afc406a1020bd2b2af0282d4f20cc3a;hp=274eebcd9dc87e05008d3f57ff780012b1b2fb90;hb=05fa0b8255051e15def5845534f231495eedff7f;hpb=ce7f5e52754ca16cf3140fe3100c92d6904e5757 diff --git a/vunshare.c b/vunshare.c index 274eebc..85801fc 100644 --- a/vunshare.c +++ b/vunshare.c @@ -4,7 +4,6 @@ */ /* TODO: - * - Add userns support. * - Make pidns init optional. * - Make setproctitle nicer and include program argv[0]. * - Set up prctl(PR_SET_PDEATHSIG). @@ -51,14 +50,19 @@ static void unshare_net(void) if (!vunshare(CLONE_NEWNET)) return; - int sock = socket(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0); + int sock; struct ifreq ifr; + sock = socket(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0); + if (sock < 0) + err(1, "socket(AF_LOCAL) failed"); + /* Equiv of `ip link set up lo`. Kernel will assign 127.0.0.1 for us. */ strcpy(ifr.ifr_name, "lo"); if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) err(1, "ioctl(SIOCGIFFLAGS) failed"); - strcpy(ifr.ifr_name, "lo"); + + /* The kernel preserves ifr.ifr_name for use. */ ifr.ifr_flags |= IFF_UP | IFF_RUNNING; if (ioctl(sock, SIOCSIFFLAGS, &ifr) < 0) err(1, "ioctl(SIOCSIFFLAGS) failed"); @@ -283,7 +287,18 @@ static const struct option opts[] = { static void usage(void) { - puts("Usage: unshare [options] "); + puts( + "Usage: unshare [options] \n" + "\n" + "Options: [DimnpuU]\n" + " -i Use IPC namespaces\n" + " -m Use mount namespaces\n" + " -n Use net namespaces\n" + " -p Use pid namespaces\n" + " -u Use UTS namespaces\n" + " -U Use user namespaces\n" + " -D Daemonize program" + ); exit(EX_USAGE); }