From b9ad75fa602dd72b042b2ea08ce86da50746ab30 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Fri, 28 Mar 2008 17:49:31 +0000 Subject: copy_file: handle "cp /dev/foo file" (almost) compatibly to coreutils. (almost because we do not copy mode, which is probably wasn't intended). +61 bytes. --- coreutils/mv.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'coreutils/mv.c') diff --git a/coreutils/mv.c b/coreutils/mv.c index 5d02196e3..613d4ac46 100644 --- a/coreutils/mv.c +++ b/coreutils/mv.c @@ -71,7 +71,8 @@ int mv_main(int argc, char **argv) } DO_MOVE: - if (dest_exists && !(flags & OPT_FILEUTILS_FORCE) + if (dest_exists + && !(flags & OPT_FILEUTILS_FORCE) && ((access(dest, W_OK) < 0 && isatty(0)) || (flags & OPT_FILEUTILS_INTERACTIVE)) ) { @@ -108,6 +109,9 @@ int mv_main(int argc, char **argv) goto RET_1; } } + /* FILEUTILS_RECUR also prevents nasties like + * "read from device and write contents to dst" + * instead of "create same device node" */ copy_flag = FILEUTILS_RECUR | FILEUTILS_PRESERVE_STATUS; #if ENABLE_SELINUX copy_flag |= FILEUTILS_PRESERVE_SECURITY_CONTEXT; -- cgit v1.2.3