From 9ceaf6ec6b9feb254f88fb3fd6c96d339dcd674b Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Wed, 1 Jul 2015 14:53:31 +0200 Subject: [PATCH] sysprep: rework and fix cron-spool operation (RHBZ#1229305) When cleaning the directories with cron/at jobs, remove only files there, as subdirectories might be used by other systems; for example in Debian under /var/spool/cron/ there is the atjobs subdirectory with the actual at queue. Make sure to not remove .SEQ files anymore, as they represent the at job counter which is needed by the at daemon. Instead, reset these files to 0. Furthermore, add also the path to the .SEQ location in Debian-based systems. (cherry picked from commit 261be1f952aa984b460ff8d88d962c490df4ffcf) --- sysprep/sysprep_operation_cron_spool.ml | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/sysprep/sysprep_operation_cron_spool.ml b/sysprep/sysprep_operation_cron_spool.ml index 9a78e85..ebf745c 100644 --- a/sysprep/sysprep_operation_cron_spool.ml +++ b/sysprep/sysprep_operation_cron_spool.ml @@ -18,19 +18,33 @@ open Sysprep_operation open Common_gettext.Gettext +open Common_utils module G = Guestfs let cron_spool_perform ~verbose ~quiet (g : Guestfs.guestfs) root side_effects = - Array.iter g#rm_rf (g#glob_expand "/var/spool/cron/*"); + let is_seq path = + let basename = + match last_part_of path '/' with + | Some x -> x + | None -> path in + basename = ".SEQ" in + let reset f = + if g#is_file f then + (* This should overwrite the file in-place, as it's a very + * small buffer which will be handled using internal_write. + * This way, existing attributes like SELinux labels are + * preserved. + *) + g#write f "00000\n" in + + rm_rf_only_files g ~filter:is_seq "/var/spool/cron/"; + reset "/var/spool/cron/atjobs/.SEQ"; Array.iter g#rm (g#glob_expand "/var/spool/atjobs/*"); - Array.iter g#rm (g#glob_expand "/var/spool/atjobs/.SEQ"); + reset "/var/spool/atjobs/.SEQ"; Array.iter g#rm (g#glob_expand "/var/spool/atspool/*"); - Array.iter - (fun path -> if not (g#is_dir path) then g#rm path) - (g#glob_expand "/var/spool/at/*"); - Array.iter g#rm (g#glob_expand "/var/spool/at/.SEQ"); - Array.iter g#rm (g#glob_expand "/var/spool/at/spool/*") + rm_rf_only_files g ~filter:is_seq "/var/spool/at/"; + reset "/var/spool/at/.SEQ" let op = { defaults with -- 1.8.3.1