[libvirt] [PATCH] Check for duplicated UUID in XM Xen defines

Daniel Veillard veillard at redhat.com
Fri Nov 20 15:04:11 UTC 2009


On Tue, Nov 17, 2009 at 11:26:00AM +0000, Daniel P. Berrange wrote:
> On Tue, Nov 17, 2009 at 12:16:11PM +0100, Daniel Veillard wrote:
> >   This fixes https://bugzilla.redhat.com/show_bug.cgi?id=504262
> > where the xen drivers happily allows to define domains with conflicting
> > UUID. This is similar to the virDomainObjIsDuplicate check done in other
> > drivers but the internal structures are different so this need to be
> > done in a special way
> > 
> > Author: Daniel Veillard <veillard at redhat.com>
> > Date:   Tue Nov 17 12:06:46 2009 +0100
> > 
> >     504262 Check for duplicated UUID in XM Xen defines
> > 
> >     * src/xen/xm_internal.c: the XM driver was not checking for previously
> >       defined UUID on new defines. Similar to virDomainObjIsDuplicate()
> >       behaviour.
> > 
> > diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
> > index f833ce7..47bcc11 100644
> > --- a/src/xen/xm_internal.c
> > +++ b/src/xen/xm_internal.c
> > @@ -2623,6 +2623,26 @@ virDomainPtr xenXMDomainDefineXML(virConnectPtr conn, const char *xml) {
> >          return (NULL);
> >      }
> >  
> > +    /*
> > +     * check that if there is another domain defined with the same uuid
> > +     * it has the same name
> > +     */
> > +    if ((entry = virHashSearch(priv->configCache, xenXMDomainSearchForUUID,
> > +                               (const void *)&(def->uuid))) != NULL) {
> > +	if ((entry->def != NULL) && (entry->def->name != NULL) &&
> > +	    (STRNEQ(def->name, entry->def->name))) {
> > +	    char uuidstr[VIR_UUID_STRING_BUFLEN];
> > +
> > +	    virUUIDFormat(entry->def->uuid, uuidstr);
> > +	    xenXMError(conn, VIR_ERR_OPERATION_FAILED,
> > +	               _("domain '%s' is already defined with uuid %s"),
> > +		       entry->def->name, uuidstr);
> > +	    entry = NULL;
> > +            goto error;
> > +	}
> > +	entry = NULL;
> > +    }
> > +
> >      if (virHashLookup(priv->nameConfigMap, def->name)) {
> >          /* domain exists, we will overwrite it */
> >  
> > 
> 
> ACK, though the indentation looks a little off here.

  yup some tabs got there, I fixed them before pushing,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list