]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
network: check newDef for used bridge names in addition to def
authorLaine Stump <laine@laine.org>
Fri, 24 Apr 2015 18:15:44 +0000 (14:15 -0400)
committerLaine Stump <laine@laine.org>
Tue, 28 Apr 2015 05:23:29 +0000 (01:23 -0400)
If someone has updated a network to change its bridge name, but the
network is still active (so that bridge name hasn't taken effect yet),
we still want to disallow another network from taking that new name.

src/conf/network_conf.c

index aa8d6c632c51402c2c62780a6f4b7235c6ee7b61..5b734f26221fc3ba2f9ac6e1d4e587f787bf9c50 100644 (file)
@@ -3270,15 +3270,22 @@ virNetworkBridgeInUseHelper(const void *payload,
                             const void *name ATTRIBUTE_UNUSED,
                             const void *opaque)
 {
-    int ret = 0;
+    int ret;
     virNetworkObjPtr net = (virNetworkObjPtr) payload;
     const struct virNetworkBridgeInUseHelperData *data = opaque;
 
     virObjectLock(net);
-    if (net->def->bridge &&
-        STREQ(net->def->bridge, data->bridge) &&
-        !(data->skipname && STREQ(net->def->name, data->skipname)))
+    if (data->skipname &&
+        ((net->def && STREQ(net->def->name, data->skipname)) ||
+         (net->newDef && STREQ(net->newDef->name, data->skipname))))
+        ret = 0;
+    else if ((net->def && net->def->bridge &&
+              STREQ(net->def->bridge, data->bridge)) ||
+             (net->newDef && net->newDef->bridge &&
+              STREQ(net->newDef->bridge, data->bridge)))
         ret = 1;
+    else
+        ret = 0;
     virObjectUnlock(net);
     return ret;
 }