if (stat(where, &dest_st) == 0) {
if ((source_st.st_mode & S_IFMT) != (dest_st.st_mode & S_IFMT)) {
- log_error("The file types of %s and %s do not matching. Refusing bind mount",
+ log_error("The file types of %s and %s do not match. Refusing bind mount",
*x, where);
return -EINVAL;
}
static int setup_resolv_conf(const char *dest) {
char _cleanup_free_ *where = NULL;
- _cleanup_close_ int fd = -1;
assert(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;
}