summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2012-04-25 15:08:00 +0200
committerLennart Poettering <lennart@poettering.net>2012-04-25 15:08:00 +0200
commit2547bb414c69b7a5b3eb8d7a10768e0cf4114447 (patch)
treec917fb8f31a208c7dd027eac3271e1d4f78be030 /src
parentb55d0651c0433aee6bbec0516a0c2eb001c3fc31 (diff)
nspawn: bind mount /etc/resolv.conf from the host by default
Diffstat (limited to 'src')
-rw-r--r--src/nspawn/nspawn.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index bf3a84471d..83bec96cc5 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -263,6 +263,28 @@ static int setup_timezone(const char *dest) {
return 0;
}
+static int setup_resolv_conf(const char *dest) {
+ char *where;
+
+ assert(dest);
+
+ if (arg_private_network)
+ return 0;
+
+ /* Fix resolv.conf, if possible */
+ if (asprintf(&where, "%s/etc/resolv.conf", dest) < 0) {
+ log_error("Out of memory");
+ return -ENOMEM;
+ }
+
+ if (mount("/etc/resolv.conf", where, "bind", MS_BIND, NULL) >= 0)
+ mount("/etc/resolv.conf", where, "bind", MS_BIND|MS_REMOUNT|MS_RDONLY, NULL);
+
+ free(where);
+
+ return 0;
+}
+
static int copy_devnodes(const char *dest) {
static const char devnodes[] =
@@ -966,6 +988,9 @@ int main(int argc, char *argv[]) {
if (setup_timezone(arg_directory) < 0)
goto child_fail;
+ if (setup_resolv_conf(arg_directory) < 0)
+ goto child_fail;
+
if (chdir(arg_directory) < 0) {
log_error("chdir(%s) failed: %m", arg_directory);
goto child_fail;