]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virCommandSetDryRun: Rework resetting of the dry run data
authorPeter Krempa <pkrempa@redhat.com>
Thu, 1 Apr 2021 15:54:09 +0000 (17:54 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 12 Apr 2021 13:55:10 +0000 (15:55 +0200)
While virCommandSetDryRun is used in tests only, there were some cases
when error paths would not call the function with NULL arguments to
reset the dry run infrastructure.

Introduce virCommandDryRunToken type which must be allocated via
virCommandDryRunTokenNew and passed to virCommandSetDryRun.

This way we can use automatic variable cleaning to trigger the cleanup
of virCommandSetDryRun parameters and also the use of the token variable
ensures that all callers of virCommandSetDryRun clean up after
themselves and also that the token isn't left unused in the code.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
12 files changed:
src/libvirt_private.syms
src/util/vircommand.c
src/util/vircommandpriv.h
tests/networkxml2firewalltest.c
tests/nodedevmdevctltest.c
tests/nwfilterebiptablestest.c
tests/nwfilterxml2firewalltest.c
tests/sysinfotest.c
tests/virfirewalltest.c
tests/viriscsitest.c
tests/virkmodtest.c
tests/virnetdevbandwidthtest.c

index fb79884bf37c180c0722e501acecd5f4793be7ed..119768496b3e563cc221cc813760de8c9c6f397c 100644 (file)
@@ -1988,6 +1988,8 @@ virCommandAllowCap;
 virCommandClearCaps;
 virCommandDaemonize;
 virCommandDoAsyncIO;
+virCommandDryRunTokenFree;
+virCommandDryRunTokenNew;
 virCommandExec;
 virCommandFree;
 virCommandGetArgList;
index 07e64c92dd510564b66afe358106496b33145d68..192613ed0a62fb5e83253499b6fe5063401da6f5 100644 (file)
@@ -3087,8 +3087,45 @@ virCommandDoAsyncIO(virCommandPtr cmd)
     cmd->flags |= VIR_EXEC_ASYNC_IO | VIR_EXEC_NONBLOCK;
 }
 
+
+struct _virCommandDryRunToken {
+    int dummy;
+};
+
+
+/**
+ * virCommandDryRunTokenNew:
+ *
+ * Returns a token which is used with virCommandSetDryRun. Freeing the token
+ * with the appropriate automatic cleanup function ensures that the dry run
+ * environment is reset.
+ */
+virCommandDryRunToken *
+virCommandDryRunTokenNew(void)
+{
+    return g_new0(virCommandDryRunToken, 1);
+}
+
+
+/**
+ * virCommandDryRunTokenFree:
+ *
+ * Helper to free a virCommandDryRunToken. Do not use this function directly,
+ * always declare virCommandDryRunToken as a g_autoptr.
+ */
+void
+virCommandDryRunTokenFree(virCommandDryRunToken *tok)
+{
+    dryRunBuffer = NULL;
+    dryRunCallback = NULL;
+    dryRunOpaque = NULL;
+    g_free(tok);
+}
+
+
 /**
  * virCommandSetDryRun:
+ * @tok: a virCommandDryRunToken obtained from virCommandDryRunTokenNew
  * @buf: buffer to store stringified commands
  * @callback: callback to process input/output/args
  *
@@ -3120,10 +3157,14 @@ virCommandDoAsyncIO(virCommandPtr cmd)
  * To cancel this effect pass NULL for @buf and @callback.
  */
 void
-virCommandSetDryRun(virBufferPtr buf,
+virCommandSetDryRun(virCommandDryRunToken *tok,
+                    virBufferPtr buf,
                     virCommandDryRunCallback cb,
                     void *opaque)
 {
+    if (!tok)
+        abort();
+
     dryRunBuffer = buf;
     dryRunCallback = cb;
     dryRunOpaque = opaque;
index 80f1d1376c8e597ae44cf6cfef09b437ddd4fcb9..d06a8f5e30f0fb31e954e2969ac34f8f9888642c 100644 (file)
@@ -35,6 +35,13 @@ typedef void (*virCommandDryRunCallback)(const char *const*args,
                                          int *status,
                                          void *opaque);
 
-void virCommandSetDryRun(virBufferPtr buf,
+typedef struct _virCommandDryRunToken virCommandDryRunToken;
+
+virCommandDryRunToken * virCommandDryRunTokenNew(void);
+void virCommandDryRunTokenFree(virCommandDryRunToken *token);
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCommandDryRunToken, virCommandDryRunTokenFree);
+
+void virCommandSetDryRun(virCommandDryRunToken *tok,
+                         virBufferPtr buf,
                          virCommandDryRunCallback cb,
                          void *opaque);
index d358f12897b7e46b8c37dee0feb6a81b20ab12a2..952c076a1938cd0aea97c80ae6f9b41199dbf43d 100644 (file)
@@ -96,8 +96,9 @@ static int testCompareXMLToArgvFiles(const char *xml,
     virNetworkDefPtr def = NULL;
     int ret = -1;
     char *actual;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(&buf, testCommandDryRun, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, testCommandDryRun, NULL);
 
     if (!(def = virNetworkDefParseFile(xml, NULL)))
         goto cleanup;
@@ -107,7 +108,6 @@ static int testCompareXMLToArgvFiles(const char *xml,
 
     actual = actualargv = virBufferContentAndReset(&buf);
     virTestClearCommandPath(actualargv);
-    virCommandSetDryRun(NULL, NULL, NULL);
 
     /* The first network to be created populates the
      * libvirt global chains. We must skip args for
index 050424116fe43f597437cc07a19b2f142547b89c..cb9dbe5431a88adfe98b58df2f8721ba77ec499a 100644 (file)
@@ -75,6 +75,7 @@ testMdevctlStartOrDefine(const char *virt_type,
     g_autofree char *errmsg = NULL;
     g_autofree char *stdinbuf = NULL;
     g_autoptr(virCommand) cmd = NULL;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     if (!(def = virNodeDeviceDefParseFile(mdevxml, create, virt_type)))
         goto cleanup;
@@ -86,7 +87,7 @@ testMdevctlStartOrDefine(const char *virt_type,
     if (!cmd)
         goto cleanup;
 
-    virCommandSetDryRun(&buf, testCommandDryRunCallback, &stdinbuf);
+    virCommandSetDryRun(dryRunToken, &buf, testCommandDryRunCallback, &stdinbuf);
     if (virCommandRun(cmd, NULL) < 0)
         goto cleanup;
 
@@ -102,7 +103,6 @@ testMdevctlStartOrDefine(const char *virt_type,
     ret = 0;
 
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     virNodeDeviceObjEndAPI(&obj);
     return ret;
 }
@@ -152,13 +152,14 @@ testMdevctlUuidCommand(const char *uuid, GetStopUndefineCmdFunc func, const char
     int ret = -1;
     g_autoptr(virCommand) cmd = NULL;
     g_autofree char *errmsg = NULL;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     cmd = func(uuid, &errmsg);
 
     if (!cmd)
         goto cleanup;
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
     if (virCommandRun(cmd, NULL) < 0)
         goto cleanup;
 
@@ -171,7 +172,6 @@ testMdevctlUuidCommand(const char *uuid, GetStopUndefineCmdFunc func, const char
     ret = 0;
 
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
@@ -214,13 +214,14 @@ testMdevctlListDefined(const void *data G_GNUC_UNUSED)
     g_autofree char *cmdlinefile =
         g_strdup_printf("%s/nodedevmdevctldata/mdevctl-list-defined.argv",
                         abs_srcdir);
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     cmd = nodeDeviceGetMdevctlListCommand(true, &output, &errmsg);
 
     if (!cmd)
         goto cleanup;
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
     if (virCommandRun(cmd, NULL) < 0)
         goto cleanup;
 
@@ -234,7 +235,6 @@ testMdevctlListDefined(const void *data G_GNUC_UNUSED)
 
  cleanup:
     virBufferFreeAndReset(&buf);
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
index f47b4f1dfd40a31ee12d9c55a845fb9bd516992f..36df17d1c1ee7909989425d91bdb3d89790336ca 100644 (file)
@@ -103,8 +103,9 @@ testNWFilterEBIPTablesAllTeardown(const void *opaque G_GNUC_UNUSED)
         "ebtables --concurrent -t nat -X libvirt-O-vnet0\n";
     char *actual = NULL;
     int ret = -1;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
 
     if (ebiptables_driver.allTeardown("vnet0") < 0)
         goto cleanup;
@@ -119,7 +120,6 @@ testNWFilterEBIPTablesAllTeardown(const void *opaque G_GNUC_UNUSED)
 
     ret = 0;
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     VIR_FREE(actual);
     return ret;
 }
@@ -170,8 +170,9 @@ testNWFilterEBIPTablesTearOldRules(const void *opaque G_GNUC_UNUSED)
         "ebtables --concurrent -t nat -E libvirt-P-vnet0 libvirt-O-vnet0\n";
     char *actual = NULL;
     int ret = -1;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
 
     if (ebiptables_driver.tearOldRules("vnet0") < 0)
         goto cleanup;
@@ -186,7 +187,6 @@ testNWFilterEBIPTablesTearOldRules(const void *opaque G_GNUC_UNUSED)
 
     ret = 0;
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     VIR_FREE(actual);
     return ret;
 }
@@ -215,8 +215,9 @@ testNWFilterEBIPTablesRemoveBasicRules(const void *opaque G_GNUC_UNUSED)
         "ebtables --concurrent -t nat -X libvirt-P-vnet0\n";
     char *actual = NULL;
     int ret = -1;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
 
     if (ebiptables_driver.removeBasicRules("vnet0") < 0)
         goto cleanup;
@@ -231,7 +232,6 @@ testNWFilterEBIPTablesRemoveBasicRules(const void *opaque G_GNUC_UNUSED)
 
     ret = 0;
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     VIR_FREE(actual);
     return ret;
 }
@@ -245,8 +245,9 @@ testNWFilterEBIPTablesTearNewRules(const void *opaque G_GNUC_UNUSED)
         VIR_NWFILTER_NEW_RULES_TEARDOWN;
     char *actual = NULL;
     int ret = -1;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
 
     if (ebiptables_driver.tearNewRules("vnet0") < 0)
         goto cleanup;
@@ -261,7 +262,6 @@ testNWFilterEBIPTablesTearNewRules(const void *opaque G_GNUC_UNUSED)
 
     ret = 0;
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     VIR_FREE(actual);
     return ret;
 }
@@ -313,8 +313,9 @@ testNWFilterEBIPTablesApplyBasicRules(const void *opaque G_GNUC_UNUSED)
     char *actual = NULL;
     int ret = -1;
     virMacAddr mac = { .addr = { 0x10, 0x20, 0x30, 0x40, 0x50, 0x60 } };
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
 
     if (ebiptables_driver.applyBasicRules("vnet0", &mac) < 0)
         goto cleanup;
@@ -329,7 +330,6 @@ testNWFilterEBIPTablesApplyBasicRules(const void *opaque G_GNUC_UNUSED)
 
     ret = 0;
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     VIR_FREE(actual);
     return ret;
 }
@@ -399,8 +399,9 @@ testNWFilterEBIPTablesApplyDHCPOnlyRules(const void *opaque G_GNUC_UNUSED)
             }
         }
     };
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
 
     if (ebiptables_driver.applyDHCPOnlyRules("vnet0", &mac, &val, false) < 0)
         goto cleanup;
@@ -415,7 +416,6 @@ testNWFilterEBIPTablesApplyDHCPOnlyRules(const void *opaque G_GNUC_UNUSED)
 
     ret = 0;
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     VIR_FREE(actual);
     return ret;
 }
@@ -468,8 +468,9 @@ testNWFilterEBIPTablesApplyDropAllRules(const void *opaque G_GNUC_UNUSED)
         "ebtables --concurrent -t nat -E libvirt-P-vnet0 libvirt-O-vnet0\n";
     char *actual = NULL;
     int ret = -1;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
 
     if (ebiptables_driver.applyDropAllRules("vnet0") < 0)
         goto cleanup;
@@ -484,7 +485,6 @@ testNWFilterEBIPTablesApplyDropAllRules(const void *opaque G_GNUC_UNUSED)
 
     ret = 0;
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     VIR_FREE(actual);
     return ret;
 }
index 3e2ab0b0ba8e6cca297efd7002aa5460be5e6bad..38f2ab7040bc3b63d514d3c4c8fd22f60f8eb645 100644 (file)
@@ -371,10 +371,11 @@ static int testCompareXMLToArgvFiles(const char *xml,
     GHashTable *vars = virHashNew(virNWFilterVarValueHashFree);
     virNWFilterInst inst;
     int ret = -1;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     memset(&inst, 0, sizeof(inst));
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
 
     if (!vars)
         goto cleanup;
@@ -392,7 +393,6 @@ static int testCompareXMLToArgvFiles(const char *xml,
 
     actualargv = virBufferContentAndReset(&buf);
     virTestClearCommandPath(actualargv);
-    virCommandSetDryRun(NULL, NULL, NULL);
 
     testRemoveCommonRules(actualargv);
 
index e40a4564a7059ddef19a0e8e9f31f374a5a385d8..5d028d2fd3899e89a947888875ef689d128939d4 100644 (file)
@@ -96,17 +96,17 @@ testSysinfo(const void *data)
     g_autofree char *sysinfo = NULL;
     g_autofree char *cpuinfo = NULL;
     g_autofree char *expected = NULL;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     sysinfo = g_strdup_printf("%s/sysinfodata/%ssysinfo.data", abs_srcdir, testdata->name);
     cpuinfo = g_strdup_printf("%s/sysinfodata/%scpuinfo.data", abs_srcdir, testdata->name);
     expected = g_strdup_printf("%s/sysinfodata/%ssysinfo.expect", abs_srcdir, testdata->name);
 
-    virCommandSetDryRun(NULL, testDMIDecodeDryRun, sysinfo);
+    virCommandSetDryRun(dryRunToken, NULL, testDMIDecodeDryRun, sysinfo);
 
     virSysinfoSetup(sysinfo, cpuinfo);
 
     ret = testdata->func();
-    virCommandSetDryRun(NULL, NULL, NULL);
 
     if (!ret)
         return -1;
index 8bd73311fdada732f91c81edb17547199f9df16f..5515da4b4dc7b1b86866b16dda8dbc05bf33809d 100644 (file)
@@ -189,6 +189,7 @@ testFirewallSingleGroup(const void *opaque)
         IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
         IPTABLES_PATH " -w -A INPUT --source '!192.168.122.1' --jump REJECT\n";
     const struct testFirewallData *data = opaque;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     fwDisabled = data->fwDisabled;
     if (virFirewallSetBackend(data->tryBackend) < 0)
@@ -196,7 +197,7 @@ testFirewallSingleGroup(const void *opaque)
 
     if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
         data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD)
-        virCommandSetDryRun(&cmdbuf, NULL, NULL);
+        virCommandSetDryRun(dryRunToken, &cmdbuf, NULL, NULL);
     else
         fwBuf = &cmdbuf;
 
@@ -226,7 +227,6 @@ testFirewallSingleGroup(const void *opaque)
     ret = 0;
  cleanup:
     fwBuf = NULL;
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
@@ -243,6 +243,7 @@ testFirewallRemoveRule(const void *opaque)
         IPTABLES_PATH " -w -A INPUT --source '!192.168.122.1' --jump REJECT\n";
     const struct testFirewallData *data = opaque;
     virFirewallRulePtr fwrule;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     fwDisabled = data->fwDisabled;
     if (virFirewallSetBackend(data->tryBackend) < 0)
@@ -250,7 +251,7 @@ testFirewallRemoveRule(const void *opaque)
 
     if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
         data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD)
-        virCommandSetDryRun(&cmdbuf, NULL, NULL);
+        virCommandSetDryRun(dryRunToken, &cmdbuf, NULL, NULL);
     else
         fwBuf = &cmdbuf;
 
@@ -286,7 +287,6 @@ testFirewallRemoveRule(const void *opaque)
     ret = 0;
  cleanup:
     fwBuf = NULL;
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
@@ -304,6 +304,7 @@ testFirewallManyGroups(const void *opaque G_GNUC_UNUSED)
         IPTABLES_PATH " -w -A OUTPUT --source 192.168.122.1 --jump ACCEPT\n"
         IPTABLES_PATH " -w -A OUTPUT --jump DROP\n";
     const struct testFirewallData *data = opaque;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     fwDisabled = data->fwDisabled;
     if (virFirewallSetBackend(data->tryBackend) < 0)
@@ -311,7 +312,7 @@ testFirewallManyGroups(const void *opaque G_GNUC_UNUSED)
 
     if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
         data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD)
-        virCommandSetDryRun(&cmdbuf, NULL, NULL);
+        virCommandSetDryRun(dryRunToken, &cmdbuf, NULL, NULL);
     else
         fwBuf = &cmdbuf;
 
@@ -353,7 +354,6 @@ testFirewallManyGroups(const void *opaque G_GNUC_UNUSED)
     ret = 0;
  cleanup:
     fwBuf = NULL;
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
@@ -392,6 +392,7 @@ testFirewallIgnoreFailGroup(const void *opaque G_GNUC_UNUSED)
         IPTABLES_PATH " -w -A OUTPUT --source 192.168.122.1 --jump ACCEPT\n"
         IPTABLES_PATH " -w -A OUTPUT --jump DROP\n";
     const struct testFirewallData *data = opaque;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     fwDisabled = data->fwDisabled;
     if (virFirewallSetBackend(data->tryBackend) < 0)
@@ -399,7 +400,7 @@ testFirewallIgnoreFailGroup(const void *opaque G_GNUC_UNUSED)
 
     if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
         data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-        virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
+        virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL);
     } else {
         fwBuf = &cmdbuf;
         fwError = true;
@@ -443,7 +444,6 @@ testFirewallIgnoreFailGroup(const void *opaque G_GNUC_UNUSED)
     ret = 0;
  cleanup:
     fwBuf = NULL;
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
@@ -461,6 +461,7 @@ testFirewallIgnoreFailRule(const void *opaque G_GNUC_UNUSED)
         IPTABLES_PATH " -w -A OUTPUT --source 192.168.122.1 --jump ACCEPT\n"
         IPTABLES_PATH " -w -A OUTPUT --jump DROP\n";
     const struct testFirewallData *data = opaque;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     fwDisabled = data->fwDisabled;
     if (virFirewallSetBackend(data->tryBackend) < 0)
@@ -468,7 +469,7 @@ testFirewallIgnoreFailRule(const void *opaque G_GNUC_UNUSED)
 
     if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
         data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-        virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
+        virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL);
     } else {
         fwBuf = &cmdbuf;
         fwError = true;
@@ -511,7 +512,6 @@ testFirewallIgnoreFailRule(const void *opaque G_GNUC_UNUSED)
     ret = 0;
  cleanup:
     fwBuf = NULL;
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
@@ -527,6 +527,7 @@ testFirewallNoRollback(const void *opaque G_GNUC_UNUSED)
         IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
         IPTABLES_PATH " -w -A INPUT --source 192.168.122.255 --jump REJECT\n";
     const struct testFirewallData *data = opaque;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     fwDisabled = data->fwDisabled;
     if (virFirewallSetBackend(data->tryBackend) < 0)
@@ -534,7 +535,7 @@ testFirewallNoRollback(const void *opaque G_GNUC_UNUSED)
 
     if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
         data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-        virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
+        virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL);
     } else {
         fwBuf = &cmdbuf;
         fwError = true;
@@ -573,7 +574,6 @@ testFirewallNoRollback(const void *opaque G_GNUC_UNUSED)
     ret = 0;
  cleanup:
     fwBuf = NULL;
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
@@ -591,6 +591,7 @@ testFirewallSingleRollback(const void *opaque G_GNUC_UNUSED)
         IPTABLES_PATH " -w -D INPUT --source 192.168.122.255 --jump REJECT\n"
         IPTABLES_PATH " -w -D INPUT --source '!192.168.122.1' --jump REJECT\n";
     const struct testFirewallData *data = opaque;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     fwDisabled = data->fwDisabled;
     if (virFirewallSetBackend(data->tryBackend) < 0)
@@ -598,7 +599,7 @@ testFirewallSingleRollback(const void *opaque G_GNUC_UNUSED)
 
     if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
         data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-        virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
+        virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL);
     } else {
         fwError = true;
         fwBuf = &cmdbuf;
@@ -654,7 +655,6 @@ testFirewallSingleRollback(const void *opaque G_GNUC_UNUSED)
     ret = 0;
  cleanup:
     fwBuf = NULL;
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
@@ -671,6 +671,7 @@ testFirewallManyRollback(const void *opaque G_GNUC_UNUSED)
         IPTABLES_PATH " -w -D INPUT --source 192.168.122.255 --jump REJECT\n"
         IPTABLES_PATH " -w -D INPUT --source '!192.168.122.1' --jump REJECT\n";
     const struct testFirewallData *data = opaque;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     fwDisabled = data->fwDisabled;
     if (virFirewallSetBackend(data->tryBackend) < 0)
@@ -678,7 +679,7 @@ testFirewallManyRollback(const void *opaque G_GNUC_UNUSED)
 
     if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
         data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-        virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
+        virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL);
     } else {
         fwBuf = &cmdbuf;
         fwError = true;
@@ -738,7 +739,6 @@ testFirewallManyRollback(const void *opaque G_GNUC_UNUSED)
     ret = 0;
  cleanup:
     fwBuf = NULL;
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
@@ -759,6 +759,7 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED)
         IPTABLES_PATH " -w -D INPUT --source 192.168.122.255 --jump REJECT\n"
         IPTABLES_PATH " -w -D INPUT --source '!192.168.122.1' --jump REJECT\n";
     const struct testFirewallData *data = opaque;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     fwDisabled = data->fwDisabled;
     if (virFirewallSetBackend(data->tryBackend) < 0)
@@ -766,7 +767,7 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED)
 
     if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
         data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-        virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
+        virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL);
     } else {
         fwBuf = &cmdbuf;
         fwError = true;
@@ -852,7 +853,6 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED)
     ret = 0;
  cleanup:
     fwBuf = NULL;
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
@@ -953,6 +953,7 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED)
         IPTABLES_PATH " -w -A INPUT --source 192.168.122.128 --jump REJECT\n"
         IPTABLES_PATH " -w -A INPUT --source '!192.168.122.1' --jump REJECT\n";
     const struct testFirewallData *data = opaque;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     expectedLineNum = 0;
     expectedLineError = false;
@@ -962,7 +963,7 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED)
 
     if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
         data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-        virCommandSetDryRun(&cmdbuf, testFirewallQueryHook, NULL);
+        virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallQueryHook, NULL);
     } else {
         fwBuf = &cmdbuf;
         fwError = true;
@@ -1030,7 +1031,6 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED)
     ret = 0;
  cleanup:
     fwBuf = NULL;
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
index e86d3970b692e715dcbd623e54e8ff508539b0ee..e673b69ed647d4c07621366ed8ab54821b731836 100644 (file)
@@ -212,10 +212,11 @@ testISCSIGetSession(const void *data)
     struct testIscsiadmCbData cbData = { 0 };
     char *actual_session = NULL;
     int ret = -1;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     cbData.output_version = info->output_version;
 
-    virCommandSetDryRun(NULL, testIscsiadmCb, &cbData);
+    virCommandSetDryRun(dryRunToken, NULL, testIscsiadmCb, &cbData);
 
     actual_session = virISCSIGetSession(info->device_path, true);
 
@@ -230,7 +231,6 @@ testISCSIGetSession(const void *data)
     ret = 0;
 
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     VIR_FREE(actual_session);
     return ret;
 }
@@ -250,8 +250,9 @@ testISCSIScanTargets(const void *data)
     char **targets = NULL;
     int ret = -1;
     size_t i;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(NULL, testIscsiadmCb, NULL);
+    virCommandSetDryRun(dryRunToken, NULL, testIscsiadmCb, NULL);
 
     if (virISCSIScanTargets(info->portal, NULL,
                             false, &ntargets, &targets) < 0)
@@ -276,7 +277,6 @@ testISCSIScanTargets(const void *data)
     ret = 0;
 
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     for (i = 0; i < ntargets; i++)
         VIR_FREE(targets[i]);
     VIR_FREE(targets);
@@ -297,15 +297,15 @@ testISCSIConnectionLogin(const void *data)
     const struct testConnectionInfoLogin *info = data;
     struct testIscsiadmCbData cbData = { 0 };
     int ret = -1;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(NULL, testIscsiadmCb, &cbData);
+    virCommandSetDryRun(dryRunToken, NULL, testIscsiadmCb, &cbData);
 
     if (virISCSIConnectionLogin(info->portal, info->initiatoriqn, info->target) < 0)
         goto cleanup;
 
     ret = 0;
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     return ret;
 }
 
index 369eb8bacab0ace18dbce8baa5152af773554d24..d278032aec570662fdf55cc041c264176a81a35d 100644 (file)
@@ -61,8 +61,9 @@ testKModLoad(const void *args G_GNUC_UNUSED)
     int ret = -1;
     char *errbuf = NULL;
     g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
 
     errbuf = virKModLoad(MODNAME);
     if (errbuf) {
@@ -76,7 +77,6 @@ testKModLoad(const void *args G_GNUC_UNUSED)
     ret = 0;
 
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     VIR_FREE(errbuf);
     return ret;
 }
@@ -88,8 +88,9 @@ testKModUnload(const void *args G_GNUC_UNUSED)
     int ret = -1;
     char *errbuf = NULL;
     g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
 
     errbuf = virKModUnload(MODNAME);
     if (errbuf) {
@@ -103,7 +104,6 @@ testKModUnload(const void *args G_GNUC_UNUSED)
     ret = 0;
 
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     VIR_FREE(errbuf);
     return ret;
 }
index 6f3cab27be0ce2301f1bac29486e0441fee2738e..52742dff059cfdaf3c347165556028a39b973778 100644 (file)
@@ -72,13 +72,14 @@ testVirNetDevBandwidthSet(const void *data)
     g_autoptr(virNetDevBandwidth) band = NULL;
     g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
     char *actual_cmd = NULL;
+    g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew();
 
     PARSE(info->band, band);
 
     if (!iface)
         iface = "eth0";
 
-    virCommandSetDryRun(&buf, NULL, NULL);
+    virCommandSetDryRun(dryRunToken, &buf, NULL, NULL);
 
     if (virNetDevBandwidthSet(iface, band, info->hierarchical_class, true) < 0)
         goto cleanup;
@@ -97,7 +98,6 @@ testVirNetDevBandwidthSet(const void *data)
 
     ret = 0;
  cleanup:
-    virCommandSetDryRun(NULL, NULL, NULL);
     VIR_FREE(actual_cmd);
     return ret;
 }