void virDomainChrSourceDefFree(virDomainChrSourceDefPtr def)
{
+ size_t i;
+
if (!def)
return;
virDomainChrSourceDefClear(def);
virObjectUnref(def->privateData);
+ if (def->seclabels) {
+ for (i = 0; i < def->nseclabels; i++)
+ virSecurityDeviceLabelDefFree(def->seclabels[i]);
+ VIR_FREE(def->seclabels);
+ }
+
+
VIR_FREE(def);
}
void virDomainChrDefFree(virDomainChrDefPtr def)
{
- size_t i;
-
if (!def)
return;
virDomainChrSourceDefFree(def->source);
virDomainDeviceInfoClear(&def->info);
- if (def->seclabels) {
- for (i = 0; i < def->nseclabels; i++)
- virSecurityDeviceLabelDefFree(def->seclabels[i]);
- VIR_FREE(def->seclabels);
- }
-
VIR_FREE(def);
}
if (chr_def) {
xmlNodePtr saved_node = ctxt->node;
ctxt->node = cur;
- if (virSecurityDeviceLabelDefParseXML(&chr_def->seclabels,
- &chr_def->nseclabels,
+ if (virSecurityDeviceLabelDefParseXML(&def->seclabels,
+ &def->nseclabels,
vmSeclabels,
nvmSeclabels,
ctxt,
* output at " type='type'>". */
static int
virDomainChrSourceDefFormat(virBufferPtr buf,
- virDomainChrDefPtr chr_def,
virDomainChrSourceDefPtr def,
bool tty_compat,
unsigned int flags)
{
const char *type = virDomainChrTypeToString(def->type);
- size_t nseclabels = 0;
- virSecurityDeviceLabelDefPtr *seclabels = NULL;
-
- if (chr_def) {
- nseclabels = chr_def->nseclabels;
- seclabels = chr_def->seclabels;
- }
if (!type) {
virReportError(VIR_ERR_INTERNAL_ERROR,
def->data.file.append != VIR_TRISTATE_SWITCH_ABSENT)
virBufferAsprintf(buf, " append='%s'",
virTristateSwitchTypeToString(def->data.file.append));
- virDomainSourceDefFormatSeclabel(buf, nseclabels, seclabels, flags);
+ virDomainSourceDefFormatSeclabel(buf, def->nseclabels,
+ def->seclabels, flags);
}
break;
virBufferAsprintf(buf, "<source mode='%s'",
def->data.nix.listen ? "bind" : "connect");
virBufferEscapeString(buf, " path='%s'", def->data.nix.path);
- virDomainSourceDefFormatSeclabel(buf, nseclabels, seclabels, flags);
+ virDomainSourceDefFormatSeclabel(buf, def->nseclabels,
+ def->seclabels, flags);
}
break;
def->source->type == VIR_DOMAIN_CHR_TYPE_PTY &&
!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE) &&
def->source->data.file.path);
- if (virDomainChrSourceDefFormat(buf, def, def->source, tty_compat, flags) < 0)
+ if (virDomainChrSourceDefFormat(buf, def->source, tty_compat, flags) < 0)
return -1;
/* Format <target> block */
break;
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
- if (virDomainChrSourceDefFormat(buf, NULL, def->data.passthru, false,
+ if (virDomainChrSourceDefFormat(buf, def->data.passthru, false,
flags) < 0)
return -1;
break;
case VIR_DOMAIN_RNG_BACKEND_EGD:
virBufferAdjustIndent(buf, 2);
- if (virDomainChrSourceDefFormat(buf, NULL, def->source.chardev,
+ if (virDomainChrSourceDefFormat(buf, def->source.chardev,
false, flags) < 0)
return -1;
virBufferAdjustIndent(buf, -2);
virBufferAsprintf(buf, "<redirdev bus='%s'", bus);
virBufferAdjustIndent(buf, 2);
- if (virDomainChrSourceDefFormat(buf, NULL, def->source, false, flags) < 0)
+ if (virDomainChrSourceDefFormat(buf, def->source, false, flags) < 0)
return -1;
if (virDomainDeviceInfoFormat(buf, &def->info,
flags | VIR_DOMAIN_DEF_FORMAT_ALLOW_BOOT) < 0)
virSecurityDeviceLabelDefPtr
-virDomainChrDefGetSecurityLabelDef(virDomainChrDefPtr def, const char *model)
+virDomainChrSourceDefGetSecurityLabelDef(virDomainChrSourceDefPtr def,
+ const char *model)
{
size_t i;
} data;
char *logfile;
int logappend;
+
+ size_t nseclabels;
+ virSecurityDeviceLabelDefPtr *seclabels;
};
/* A complete character device, both host and domain views. */
virDomainChrSourceDefPtr source;
virDomainDeviceInfo info;
-
- size_t nseclabels;
- virSecurityDeviceLabelDefPtr *seclabels;
};
typedef enum {
virDomainDefGetSecurityLabelDef(virDomainDefPtr def, const char *model);
virSecurityDeviceLabelDefPtr
-virDomainChrDefGetSecurityLabelDef(virDomainChrDefPtr def, const char *model);
+virDomainChrSourceDefGetSecurityLabelDef(virDomainChrSourceDefPtr def,
+ const char *model);
typedef const char* (*virEventActionToStringFunc)(int type);
typedef int (*virEventActionFromStringFunc)(const char *type);
static int
virSecurityDACSetChardevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def,
- virDomainChrDefPtr dev,
virDomainChrSourceDefPtr dev_source)
{
seclabel = virDomainDefGetSecurityLabelDef(def, SECURITY_DAC_NAME);
- if (dev)
- chr_seclabel = virDomainChrDefGetSecurityLabelDef(dev,
- SECURITY_DAC_NAME);
+ chr_seclabel = virDomainChrSourceDefGetSecurityLabelDef(dev_source,
+ SECURITY_DAC_NAME);
if (chr_seclabel && !chr_seclabel->relabel)
return 0;
static int
virSecurityDACRestoreChardevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def ATTRIBUTE_UNUSED,
- virDomainChrDefPtr dev,
virDomainChrSourceDefPtr dev_source)
{
virSecurityDACDataPtr priv = virSecurityManagerGetPrivateData(mgr);
char *in = NULL, *out = NULL;
int ret = -1;
- if (dev)
- chr_seclabel = virDomainChrDefGetSecurityLabelDef(dev,
- SECURITY_DAC_NAME);
+ chr_seclabel = virDomainChrSourceDefGetSecurityLabelDef(dev_source,
+ SECURITY_DAC_NAME);
if (chr_seclabel && !chr_seclabel->relabel)
return 0;
static int
virSecurityDACRestoreChardevCallback(virDomainDefPtr def,
- virDomainChrDefPtr dev,
+ virDomainChrDefPtr dev ATTRIBUTE_UNUSED,
void *opaque)
{
virSecurityManagerPtr mgr = opaque;
- return virSecurityDACRestoreChardevLabel(mgr, def, dev, dev->source);
+ return virSecurityDACRestoreChardevLabel(mgr, def, dev->source);
}
switch (tpm->type) {
case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH:
- ret = virSecurityDACSetChardevLabel(mgr, def, NULL,
+ ret = virSecurityDACSetChardevLabel(mgr, def,
&tpm->data.passthrough.source);
break;
case VIR_DOMAIN_TPM_TYPE_LAST:
switch (tpm->type) {
case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH:
- ret = virSecurityDACRestoreChardevLabel(mgr, def, NULL,
- &tpm->data.passthrough.source);
+ ret = virSecurityDACRestoreChardevLabel(mgr, def,
+ &tpm->data.passthrough.source);
break;
case VIR_DOMAIN_TPM_TYPE_LAST:
break;
static int
virSecurityDACSetChardevCallback(virDomainDefPtr def,
- virDomainChrDefPtr dev,
+ virDomainChrDefPtr dev ATTRIBUTE_UNUSED,
void *opaque)
{
virSecurityManagerPtr mgr = opaque;
- return virSecurityDACSetChardevLabel(mgr, def, dev, dev->source);
+ return virSecurityDACSetChardevLabel(mgr, def, dev->source);
}
{
size_t i;
- for (i = 0; i < dev->nseclabels; i++) {
- if (virSecurityManagerCheckModel(mgr, dev->seclabels[i]->model) < 0)
+ for (i = 0; i < dev->source->nseclabels; i++) {
+ if (virSecurityManagerCheckModel(mgr, dev->source->seclabels[i]->model) < 0)
return -1;
}
static int
virSecuritySELinuxSetChardevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def,
- virDomainChrDefPtr dev,
virDomainChrSourceDefPtr dev_source)
{
if (!seclabel || !seclabel->relabel)
return 0;
- if (dev)
- chr_seclabel = virDomainChrDefGetSecurityLabelDef(dev,
- SECURITY_SELINUX_NAME);
+ chr_seclabel = virDomainChrSourceDefGetSecurityLabelDef(dev_source,
+ SECURITY_SELINUX_NAME);
if (chr_seclabel && !chr_seclabel->relabel)
return 0;
static int
virSecuritySELinuxRestoreChardevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def,
- virDomainChrDefPtr dev,
virDomainChrSourceDefPtr dev_source)
{
if (!seclabel || !seclabel->relabel)
return 0;
- if (dev)
- chr_seclabel = virDomainChrDefGetSecurityLabelDef(dev,
- SECURITY_SELINUX_NAME);
+ chr_seclabel = virDomainChrSourceDefGetSecurityLabelDef(dev_source,
+ SECURITY_SELINUX_NAME);
if (chr_seclabel && !chr_seclabel->relabel)
return 0;
static int
virSecuritySELinuxRestoreSecurityChardevCallback(virDomainDefPtr def,
- virDomainChrDefPtr dev,
+ virDomainChrDefPtr dev ATTRIBUTE_UNUSED,
void *opaque)
{
virSecurityManagerPtr mgr = opaque;
- return virSecuritySELinuxRestoreChardevLabel(mgr, def, dev, dev->source);
+ return virSecuritySELinuxRestoreChardevLabel(mgr, def, dev->source);
}
return virSecuritySELinuxRestoreFileLabel(mgr, database);
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
- return virSecuritySELinuxRestoreChardevLabel(mgr, def, NULL, dev->data.passthru);
+ return virSecuritySELinuxRestoreChardevLabel(mgr, def, dev->data.passthru);
default:
virReportError(VIR_ERR_INTERNAL_ERROR,
static int
virSecuritySELinuxSetSecurityChardevCallback(virDomainDefPtr def,
- virDomainChrDefPtr dev,
+ virDomainChrDefPtr dev ATTRIBUTE_UNUSED,
void *opaque)
{
virSecurityManagerPtr mgr = opaque;
- return virSecuritySELinuxSetChardevLabel(mgr, def, dev, dev->source);
+ return virSecuritySELinuxSetChardevLabel(mgr, def, dev->source);
}
return virSecuritySELinuxSetFilecon(mgr, database, data->content_context);
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
- return virSecuritySELinuxSetChardevLabel(mgr, def, NULL,
+ return virSecuritySELinuxSetChardevLabel(mgr, def,
dev->data.passthru);
default: