From: Lennart Poettering Date: Wed, 25 Apr 2012 13:08:00 +0000 (+0200) Subject: nspawn: bind mount /etc/resolv.conf from the host by default X-Git-Tag: v183~194 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2547bb414c69b7a5b3eb8d7a10768e0cf4114447;p=systemd nspawn: bind mount /etc/resolv.conf from the host by default --- diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index bf3a8447..83bec96c 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;