diff options
-rw-r--r-- | src/nspawn/nspawn.c | 12 | ||||
-rw-r--r-- | src/shared/util.c | 16 | ||||
-rw-r--r-- | src/shared/util.h | 2 |
3 files changed, 8 insertions, 22 deletions
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index eb9605c356..fc4a8a36c8 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -521,7 +521,6 @@ static int setup_timezone(const char *dest) { static int setup_resolv_conf(const char *dest) { char _cleanup_free_ *where = NULL; - _cleanup_close_ int fd = -1; assert(dest); @@ -533,18 +532,9 @@ static int setup_resolv_conf(const char *dest) { if (!where) return log_oom(); - fd = open(where, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0644); - /* We don't really care for the results of this really. If it * fails, it fails, but meh... */ - if (mount("/etc/resolv.conf", where, "bind", MS_BIND, NULL) < 0) - log_warning("Failed to bind mount /etc/resolv.conf: %m"); - else - if (mount("/etc/resolv.conf", where, "bind", - MS_BIND|MS_REMOUNT|MS_RDONLY, NULL) < 0) { - log_error("Failed to remount /etc/resolv.conf readonly: %m"); - return -errno; - } + copy_file("/etc/resolv.conf", where, O_TRUNC|O_NOFOLLOW); return 0; } diff --git a/src/shared/util.c b/src/shared/util.c index 9be6acfc8f..82f4221f30 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -4056,8 +4056,9 @@ int vt_disallocate(const char *name) { return 0; } -int copy_file(const char *from, const char *to) { - int r, fdf, fdt; +int copy_file(const char *from, const char *to, int flags) { + _cleanup_close_ int fdf = -1; + int r, fdt; assert(from); assert(to); @@ -4066,11 +4067,9 @@ int copy_file(const char *from, const char *to) { if (fdf < 0) return -errno; - fdt = open(to, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC|O_NOCTTY, 0644); - if (fdt < 0) { - close_nointr_nofail(fdf); + fdt = open(to, flags|O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY, 0644); + if (fdt < 0) return -errno; - } for (;;) { char buf[PIPE_BUF]; @@ -4080,7 +4079,6 @@ int copy_file(const char *from, const char *to) { if (n < 0) { r = -errno; - close_nointr_nofail(fdf); close_nointr(fdt); unlink(to); @@ -4095,15 +4093,13 @@ int copy_file(const char *from, const char *to) { if (n != k) { r = k < 0 ? k : (errno ? -errno : -EIO); - close_nointr_nofail(fdf); close_nointr(fdt); - unlink(to); + return r; } } - close_nointr_nofail(fdf); r = close_nointr(fdt); if (r < 0) { diff --git a/src/shared/util.h b/src/shared/util.h index 1b845b3803..c2e6a685c8 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -448,7 +448,7 @@ int terminal_vhangup(const char *name); int vt_disallocate(const char *name); -int copy_file(const char *from, const char *to); +int copy_file(const char *from, const char *to, int flags); int symlink_atomic(const char *from, const char *to); |