[PATCH] crontab: Fix -e with editors saving using renaming strategy

Gray Wolf wolf at wolfsden.cz
Sat Jun 13 00:00:48 UTC 2020


Some editors (like vim) use renaming strategy to save file. That means
they save a file to some random name and then rename it to final
location. The advantage is that such save is atomic.

However, crontab -e holds open fd to the temporary file, meaning it
never sees the changes. The temporary file needs to be re-opened after
the editor terminates for the changes to properly save.

Fixes #12491

Signed-off-by: Wolf <wolf at wolfsden.cz>
---
 miscutils/crontab.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/miscutils/crontab.c b/miscutils/crontab.c
index c71d914fc..411a18a50 100644
--- a/miscutils/crontab.c
+++ b/miscutils/crontab.c
@@ -165,8 +165,12 @@ int crontab_main(int argc UNUSED_PARAM, char **argv)
 			close(fd);
 			xlseek(src_fd, 0, SEEK_SET);
 		}
-		close_on_exec_on(src_fd); /* don't want editor to see this fd */
+		close(src_fd);
 		edit_file(pas, tmp_fname);
+		/* The src_fd needs to be reopened to handle editors that do
+		 * save the buffer as new file and rename it to tmp_fname (so
+		 * for example vim). */
+		src_fd = xopen3(tmp_fname, O_RDONLY, 0600);
 		/* fall through */
 
 	case 0: /* Replace (no -l, -e, or -r were given) */
-- 
2.27.0



More information about the busybox mailing list