[Libguestfs] [PATCH 1/2] inspect: fstab: Canonicalize paths appearing in fstab.

Richard W.M. Jones rjones at redhat.com
Thu Dec 8 09:17:59 UTC 2016


On Wed, Dec 07, 2016 at 06:07:00PM +0100, Pino Toscano wrote:
> This implementation looks a bit inefficient to me (recursive, moving

It's inefficient (O(n^2)), but not because of recursion -- GCC can
turn the code into a loop using TCO.

> bytes and using strlen for every char removed, etc). What about the
> following implementation?
> 
>   void canonicalize(char *s)
>   {
>     size_t len = strlen(s);
>     char *orig = s;
> 
>     s = strchr(s, '/');
>     while (s != NULL && *s != 0) {
>       char *pos = s + 1;
>       char *p = pos;
>       while (*p == '/')
>         ++p;
>       if (p - pos > 0) {
>         memmove(pos, p, len - (p - orig) + 1);
>         len -= p - pos;
>       }
> 
>       s = strchr(pos, '/');
>     }
>     orig[len] = 0;
>   }
> 
> The only behaviour change with the committed implementation is that it
> does not remove trailing slashes, but IMHO they could be left there
> (or removed after the canonicalization function, just once).

I think it needs to handle the trailing '/'.

The bigger problem here is if we find an fstab that has something like
/etc/../usr/ or a path containing symlinks, but I don't think there's
any good way to deal with that.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v




More information about the Libguestfs mailing list