[libvirt] [PATCH 11/11] Convert Xen domain core dump driver methods to use virDomainDefPtr

Jim Fehlig jfehlig at suse.com
Mon May 20 22:21:35 UTC 2013


Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> Introduce use of a virDomainDefPtr in the domain coredump
> APIs to simplify introduction of ACL security checks.
> The virDomainPtr cannot be safely used, since the app
> may have supplied mis-matching name/uuid/id fields. eg
> the name points to domain X, while the uuid points to
> domain Y. Resolving the virDomainPtr to a virDomainDefPtr
> ensures a consistent name/uuid/id set.
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
>  src/xen/xen_driver.c    | 14 +++++++++++++-
>  src/xen/xend_internal.c |  9 +++++----
>  src/xen/xend_internal.h |  4 +++-
>  3 files changed, 21 insertions(+), 6 deletions(-)
>
> diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
> index 7c00b70..a6c87ce 100644
> --- a/src/xen/xen_driver.c
> +++ b/src/xen/xen_driver.c
> @@ -1193,7 +1193,19 @@ xenUnifiedDomainRestore(virConnectPtr conn, const char *from)
>  static int
>  xenUnifiedDomainCoreDump(virDomainPtr dom, const char *to, unsigned int flags)
>  {
> -    return xenDaemonDomainCoreDump(dom, to, flags);
> +    virDomainDefPtr def = NULL;
> +    int ret = -1;
> +
> +    virCheckFlags(0, -1);
> +
> +    if (!(def = xenGetDomainDefForDom(dom)))
> +        goto cleanup;
> +
> +    ret = xenDaemonDomainCoreDump(dom->conn, def, to, flags);
> +
> +cleanup:
> +    virDomainDefFree(def);
> +    return ret;
>  }
>  
>  static int
> diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
> index 273408d..8dc1a2d 100644
> --- a/src/xen/xend_internal.c
> +++ b/src/xen/xend_internal.c
> @@ -1447,19 +1447,20 @@ xenDaemonDomainSave(virConnectPtr conn,
>   * Returns 0 in case of success, -1 in case of error.
>   */
>  int
> -xenDaemonDomainCoreDump(virDomainPtr domain,
> +xenDaemonDomainCoreDump(virConnectPtr conn,
> +                        virDomainDefPtr def,
>   

Comments need updated.

ACK.

Regards,
Jim

>                          const char *filename,
>                          unsigned int flags)
>  {
>      virCheckFlags(VIR_DUMP_LIVE | VIR_DUMP_CRASH, -1);
>  
> -    if (domain->id < 0) {
> +    if (def->id < 0) {
>          virReportError(VIR_ERR_OPERATION_INVALID,
> -                       _("Domain %s isn't running."), domain->name);
> +                       _("Domain %s isn't running."), def->name);
>          return -1;
>      }
>  
> -    return xend_op(domain->conn, domain->name,
> +    return xend_op(conn, def->name,
>                     "op", "dump", "file", filename,
>                     "live", (flags & VIR_DUMP_LIVE ? "1" : "0"),
>                     "crash", (flags & VIR_DUMP_CRASH ? "1" : "0"),
> diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
> index aa05130..b2d4368 100644
> --- a/src/xen/xend_internal.h
> +++ b/src/xen/xend_internal.h
> @@ -95,7 +95,9 @@ int xenDaemonDomainDestroy(virConnectPtr conn, virDomainDefPtr def);
>  int xenDaemonDomainSave(virConnectPtr conn,
>                          virDomainDefPtr def,
>                          const char *filename);
> -int xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename,
> +int xenDaemonDomainCoreDump(virConnectPtr conn,
> +                            virDomainDefPtr def,
> +                            const char *filename,
>                              unsigned int flags);
>  int xenDaemonDomainRestore(virConnectPtr conn, const char *filename);
>  int xenDaemonDomainSetMemory(virConnectPtr conn,
>   




More information about the libvir-list mailing list