[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Libguestfs] [PATCH 3/3] sysprep: rework and fix cron-spool operation (RHBZ#1229305)



On Wed, Jul 01, 2015 at 03:12:55PM +0200, Pino Toscano wrote:
> 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.
> ---
>  sysprep/sysprep_operation_cron_spool.ml | 27 ++++++++++++++++++++-------
>  1 file changed, 20 insertions(+), 7 deletions(-)
> 
> diff --git a/sysprep/sysprep_operation_cron_spool.ml b/sysprep/sysprep_operation_cron_spool.ml
> index 687a7e9..888b97a 100644
> --- a/sysprep/sysprep_operation_cron_spool.ml
> +++ b/sysprep/sysprep_operation_cron_spool.ml
> @@ -18,19 +18,32 @@
>  
>  open Sysprep_operation
>  open Common_gettext.Gettext
> +open Common_utils
>  
>  module G = Guestfs
>  
>  let cron_spool_perform (g : Guestfs.guestfs) root side_effects =
> -  Array.iter g#rm_rf (g#glob_expand "/var/spool/cron/*");
> +  let is_seq path =
> +    let basename =
> +      try last_part_of path '/'
> +      with Not_found -> 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"

ACK.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]