Zbigniew Jędrzejewski-Szmek 79dacd
From 85614d663e4a09beee1c78aaa67f02943d50d5a0 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 79dacd
From: Tom Gundersen <teg@jklm.no>
Zbigniew Jędrzejewski-Szmek 79dacd
Date: Wed, 8 Oct 2014 15:01:07 +0200
Zbigniew Jędrzejewski-Szmek 79dacd
Subject: [PATCH] nspawn: copy /dev/net/tun from host
Zbigniew Jędrzejewski-Szmek 79dacd
Zbigniew Jędrzejewski-Szmek 79dacd
This enables tuntap support in the container (assumning the necessary capabilities are in place).
Zbigniew Jędrzejewski-Szmek 79dacd
---
Zbigniew Jędrzejewski-Szmek 79dacd
 src/nspawn/nspawn.c | 16 ++++++++++++----
Zbigniew Jędrzejewski-Szmek 79dacd
 1 file changed, 12 insertions(+), 4 deletions(-)
Zbigniew Jędrzejewski-Szmek 79dacd
Zbigniew Jędrzejewski-Szmek 79dacd
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
Zbigniew Jędrzejewski-Szmek 79dacd
index 34436b82a2..da4c116f36 100644
Zbigniew Jędrzejewski-Szmek 79dacd
--- a/src/nspawn/nspawn.c
Zbigniew Jędrzejewski-Szmek 79dacd
+++ b/src/nspawn/nspawn.c
Zbigniew Jędrzejewski-Szmek 79dacd
@@ -1101,7 +1101,8 @@ static int copy_devnodes(const char *dest) {
Zbigniew Jędrzejewski-Szmek 79dacd
                 "full\0"
Zbigniew Jędrzejewski-Szmek 79dacd
                 "random\0"
Zbigniew Jędrzejewski-Szmek 79dacd
                 "urandom\0"
Zbigniew Jędrzejewski-Szmek 79dacd
-                "tty\0";
Zbigniew Jędrzejewski-Szmek 79dacd
+                "tty\0"
Zbigniew Jędrzejewski-Szmek 79dacd
+                "net/tun\0";
Zbigniew Jędrzejewski-Szmek 79dacd
 
Zbigniew Jędrzejewski-Szmek 79dacd
         const char *d;
Zbigniew Jędrzejewski-Szmek 79dacd
         int r = 0;
Zbigniew Jędrzejewski-Szmek 79dacd
@@ -1132,10 +1133,17 @@ static int copy_devnodes(const char *dest) {
Zbigniew Jędrzejewski-Szmek 79dacd
                         log_error("%s is not a char or block device, cannot copy", from);
Zbigniew Jędrzejewski-Szmek 79dacd
                         return -EIO;
Zbigniew Jędrzejewski-Szmek 79dacd
 
Zbigniew Jędrzejewski-Szmek 79dacd
-                } else if (mknod(to, st.st_mode, st.st_rdev) < 0) {
Zbigniew Jędrzejewski-Szmek 79dacd
+                } else {
Zbigniew Jędrzejewski-Szmek 79dacd
+                        r = mkdir_parents(to, 0775);
Zbigniew Jędrzejewski-Szmek 79dacd
+                        if (r < 0) {
Zbigniew Jędrzejewski-Szmek 79dacd
+                                log_error("Failed to create parent directory of %s: %s", to, strerror(-r));
Zbigniew Jędrzejewski-Szmek 79dacd
+                                return -r;
Zbigniew Jędrzejewski-Szmek 79dacd
+                        }
Zbigniew Jędrzejewski-Szmek 79dacd
 
Zbigniew Jędrzejewski-Szmek 79dacd
-                        log_error("mknod(%s) failed: %m", dest);
Zbigniew Jędrzejewski-Szmek 79dacd
-                        return  -errno;
Zbigniew Jędrzejewski-Szmek 79dacd
+                        if (mknod(to, st.st_mode, st.st_rdev) < 0) {
Zbigniew Jędrzejewski-Szmek 79dacd
+                                log_error("mknod(%s) failed: %m", dest);
Zbigniew Jędrzejewski-Szmek 79dacd
+                                return  -errno;
Zbigniew Jędrzejewski-Szmek 79dacd
+                        }
Zbigniew Jędrzejewski-Szmek 79dacd
                 }
Zbigniew Jędrzejewski-Szmek 79dacd
         }
Zbigniew Jędrzejewski-Szmek 79dacd