diff options
author | Lennart Poettering <lennart@poettering.net> | 2012-04-25 15:08:00 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2012-04-25 15:08:00 +0200 |
commit | 2547bb414c69b7a5b3eb8d7a10768e0cf4114447 (patch) | |
tree | c917fb8f31a208c7dd027eac3271e1d4f78be030 /src/nspawn | |
parent | b55d0651c0433aee6bbec0516a0c2eb001c3fc31 (diff) |
nspawn: bind mount /etc/resolv.conf from the host by default
Diffstat (limited to 'src/nspawn')
-rw-r--r-- | src/nspawn/nspawn.c | 25 |
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; |