virCommandClearCaps;
virCommandDaemonize;
virCommandDoAsyncIO;
+virCommandDryRunTokenFree;
+virCommandDryRunTokenNew;
virCommandExec;
virCommandFree;
virCommandGetArgList;
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
*
* 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;
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);
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;
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
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;
if (!cmd)
goto cleanup;
- virCommandSetDryRun(&buf, testCommandDryRunCallback, &stdinbuf);
+ virCommandSetDryRun(dryRunToken, &buf, testCommandDryRunCallback, &stdinbuf);
if (virCommandRun(cmd, NULL) < 0)
goto cleanup;
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
virNodeDeviceObjEndAPI(&obj);
return ret;
}
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;
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
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;
cleanup:
virBufferFreeAndReset(&buf);
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
"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;
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
VIR_FREE(actual);
return ret;
}
"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;
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
VIR_FREE(actual);
return ret;
}
"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;
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
VIR_FREE(actual);
return ret;
}
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;
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
VIR_FREE(actual);
return ret;
}
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;
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
VIR_FREE(actual);
return ret;
}
}
}
};
+ 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;
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
VIR_FREE(actual);
return ret;
}
"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;
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
VIR_FREE(actual);
return ret;
}
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;
actualargv = virBufferContentAndReset(&buf);
virTestClearCommandPath(actualargv);
- virCommandSetDryRun(NULL, NULL, NULL);
testRemoveCommonRules(actualargv);
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;
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)
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;
ret = 0;
cleanup:
fwBuf = NULL;
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
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)
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;
ret = 0;
cleanup:
fwBuf = NULL;
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
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)
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;
ret = 0;
cleanup:
fwBuf = NULL;
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
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)
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;
ret = 0;
cleanup:
fwBuf = NULL;
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
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)
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;
ret = 0;
cleanup:
fwBuf = NULL;
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
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)
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;
ret = 0;
cleanup:
fwBuf = NULL;
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
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)
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;
ret = 0;
cleanup:
fwBuf = NULL;
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
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)
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;
ret = 0;
cleanup:
fwBuf = NULL;
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
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)
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;
ret = 0;
cleanup:
fwBuf = NULL;
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
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;
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;
ret = 0;
cleanup:
fwBuf = NULL;
- virCommandSetDryRun(NULL, NULL, NULL);
return ret;
}
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);
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
VIR_FREE(actual_session);
return ret;
}
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)
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
for (i = 0; i < ntargets; i++)
VIR_FREE(targets[i]);
VIR_FREE(targets);
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;
}
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) {
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
VIR_FREE(errbuf);
return ret;
}
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) {
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
VIR_FREE(errbuf);
return ret;
}
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;
ret = 0;
cleanup:
- virCommandSetDryRun(NULL, NULL, NULL);
VIR_FREE(actual_cmd);
return ret;
}