[Libguestfs] [PATCH v3.1 7/9] New API: swap_set_uuid_random

Pino Toscano ptoscano at redhat.com
Fri Jun 26 13:00:46 UTC 2015


In data venerdì 26 giugno 2015 17:35:42, Chen Hanxiao ha scritto:
> Also introduce get_random_uuid()
> 
> Signed-off-by: Chen Hanxiao <chenhanxiao at cn.fujitsu.com>
> ---
>  daemon/daemon.h |  2 ++
>  daemon/swap.c   | 32 ++++++++++++++++++++++++++++++++
>  2 files changed, 34 insertions(+)
> 
> diff --git a/daemon/daemon.h b/daemon/daemon.h
> index 9c8476c..6c07c6a 100644
> --- a/daemon/daemon.h
> +++ b/daemon/daemon.h
> @@ -278,6 +278,8 @@ extern char *ntfs_get_label (const char *device);
>  
>  /*-- in swap.c --*/
>  extern int swap_set_uuid (const char *device, const char *uuid);
> +extern int swap_set_uuid_random (const char *device);
> +extern char *get_random_uuid (void);
>  
>  /* ordinary daemon functions use these to indicate errors
>   * NB: you don't need to prefix the string with the current command,
> diff --git a/daemon/swap.c b/daemon/swap.c
> index 26fe30d..923adb2 100644
> --- a/daemon/swap.c
> +++ b/daemon/swap.c
> @@ -34,6 +34,7 @@ GUESTFSD_EXT_CMD(str_mkswap, mkswap);
>  GUESTFSD_EXT_CMD(str_swapon, swapon);
>  GUESTFSD_EXT_CMD(str_swapoff, swapoff);
>  GUESTFSD_EXT_CMD(str_swaplabel, swaplabel);
> +GUESTFSD_EXT_CMD(str_uuidgen, uuidgen);
>  
>  /* Confirmed this is true for Linux swap partitions from the Linux sources. */
>  #define SWAP_LABEL_MAX 16
> @@ -255,3 +256,34 @@ swap_set_uuid (const char *device, const char *uuid)
>  
>    return 0;
>  }
> +
> +char *
> +get_random_uuid (void)
> +{
> +  int r;
> +  char *out;
> +  CLEANUP_FREE char *err = NULL;
> +
> +  r = command (&out, &err, str_uuidgen, NULL);
> +  if (r == -1) {
> +    reply_with_error ("%s", err);
> +    return NULL;
> +  }
> +
> +  /* caller free */
> +  return out;
> +
> +}

The addition of the get_random_uuid() is worth an own commit.  Also,
it is not specific to swap, so I'd say to put it directly in guestfsd.c,
named like uuidgen() (much like the OCaml equivalent in Common_utils).

Furthermore, you should make sure uuidgen is actually in the appliance:
while in Fedora is in util-linux (already part of the appliance), e.g.
in Debian/Ubuntu is in uuid-runtime. Thus you need to add that package
to the Debian ones in appliance/packagelist.in.

> +int
> +swap_set_uuid_random (const char *device)
> +{
> +  CLEANUP_FREE char *err = NULL;
> +  CLEANUP_FREE char *uuid_random = NULL;
> +
> +  uuid_random = get_random_uuid ();
> +  if (uuid_random == NULL)
> +    return -1;
> +
> +  return swap_set_uuid (device, uuid_random);
> +}

This is nothing specific for swap, and could just be done directly in
the set_uuid_random implementation, for all the filesystems we have
tools to change their UUIDs (so swap only so far).

In practice something like:

   else if (STREQ (vfs_type, "swap")) {
     CLEANUP_FREE char *uuid = uuidgen ();
     if (uuid == NULL)
       return -1;

     r = swap_set_uuid (device, uuid);
   }

Thanks,
-- 
Pino Toscano




More information about the Libguestfs mailing list