[Libguestfs] [PATCH 1/2] mllib: add an hook to cleanup directories on exit

Pino Toscano ptoscano at redhat.com
Thu Feb 20 14:03:10 UTC 2014


On Thursday 20 February 2014 13:08:40 Richard W.M. Jones wrote:
> On Thu, Feb 20, 2014 at 11:53:16AM +0100, Pino Toscano wrote:
> > Much similar to unlink_on_exit, but recursively cleaning
> > directories.
> > ---
> > 
> >  mllib/common_utils.ml | 29 +++++++++++++++++++++++++++++
> >  1 file changed, 29 insertions(+)
> > 
> > diff --git a/mllib/common_utils.ml b/mllib/common_utils.ml
> > index 3943417..f49ede6 100644
> > --- a/mllib/common_utils.ml
> > +++ b/mllib/common_utils.ml
> > @@ -386,6 +386,35 @@ let unlink_on_exit =
> > 
> >        registered_handlers := true
> >      
> >      )
> > 
> > +(* Remove a temporary directory on exit. *)
> > +let rmdir_on_exit =
> > +  let dirs = ref [] in
> > +  let registered_handlers = ref false in
> > +
> > +  let rec unlink_dirs () =
> > +    let rec recursive_rmdir fn =
> > +      if Sys.is_directory fn then (
> 
> I suspect this will follow symlinks, so that if the temporary
> directory contains a link like:
> 
>   /tmp/tmpdir/foo -> /
> 
> it will proceed to wipe out other bits of your filesystem.

Uh duh, sorry for the oversight. Fixed it checking the file type using 
lstat.

> Especially line 105 ff. but the rest of the function may be
> interesting too in the context of patch 2/2.

Hm, it is kind of duplicating what mkdtemp already does, so I would 
rather keep using it. Pity OCaml does not offer it at all...

-- 
Pino Toscano




More information about the Libguestfs mailing list