crontab: Fix -e with editors saving using renaming strategy
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: Gray Wolf <wolf@wolfsden.cz> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		
				
					committed by
					
						 Denys Vlasenko
						Denys Vlasenko
					
				
			
			
				
	
			
			
			
						parent
						
							d21a63f9fc
						
					
				
				
					commit
					051665ef69
				
			| @@ -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) */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user