From 83c896c859c406404c511ed99f6c72fc0307d21f Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Wed, 18 Jun 2014 18:39:47 +0200 Subject: [PATCH] util: Don't require full disk definition when getting imagelabels The image labels are stored in the virStorageSource struct. Convert the virDomainDiskDefGetSecurityLabelDef helper not to use the full disk def and move it appropriately. --- src/conf/domain_conf.c | 14 -------------- src/conf/domain_conf.h | 3 --- src/libvirt_private.syms | 2 +- src/qemu/qemu_domain.c | 2 +- src/security/security_dac.c | 4 ++-- src/security/security_selinux.c | 4 ++-- src/util/virstoragefile.c | 15 +++++++++++++++ src/util/virstoragefile.h | 4 ++++ 8 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 41142897a1..02c394f60e 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -19489,20 +19489,6 @@ virDomainDefGetSecurityLabelDef(virDomainDefPtr def, const char *model) return seclabel; } -virSecurityDeviceLabelDefPtr -virDomainDiskDefGetSecurityLabelDef(virDomainDiskDefPtr def, const char *model) -{ - size_t i; - - if (def == NULL) - return NULL; - - for (i = 0; i < def->src->nseclabels; i++) { - if (STREQ_NULLABLE(def->src->seclabels[i]->model, model)) - return def->src->seclabels[i]; - } - return NULL; -} virSecurityDeviceLabelDefPtr virDomainChrDefGetSecurityLabelDef(virDomainChrDefPtr def, const char *model) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index a6ac95a2f8..6779a41ab4 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2518,9 +2518,6 @@ virDomainObjGetState(virDomainObjPtr obj, int *reason) virSecurityLabelDefPtr virDomainDefGetSecurityLabelDef(virDomainDefPtr def, const char *model); -virSecurityDeviceLabelDefPtr -virDomainDiskDefGetSecurityLabelDef(virDomainDiskDefPtr def, const char *model); - virSecurityDeviceLabelDefPtr virDomainChrDefGetSecurityLabelDef(virDomainChrDefPtr def, const char *model); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 46c0f029f5..9c1fc72f69 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -210,7 +210,6 @@ virDomainDiskCopyOnReadTypeToString; virDomainDiskDefAssignAddress; virDomainDiskDefForeachPath; virDomainDiskDefFree; -virDomainDiskDefGetSecurityLabelDef; virDomainDiskDefNew; virDomainDiskDeviceTypeToString; virDomainDiskDiscardTypeToString; @@ -1900,6 +1899,7 @@ virStorageSourceClear; virStorageSourceClearBackingStore; virStorageSourceFree; virStorageSourceGetActualType; +virStorageSourceGetSecurityLabelDef; virStorageSourceNewFromBacking; virStorageSourcePoolDefFree; virStorageSourcePoolModeTypeFromString; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index e40c5ec18b..7c4fc67d50 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2413,7 +2413,7 @@ qemuDomainGetImageIds(virQEMUDriverConfigPtr cfg, vmlabel->label) virParseOwnershipIds(vmlabel->label, uid, gid); - if ((disklabel = virDomainDiskDefGetSecurityLabelDef(disk, "dac")) && + if ((disklabel = virStorageSourceGetSecurityLabelDef(disk->src, "dac")) && disklabel->label) virParseOwnershipIds(disklabel->label, uid, gid); } diff --git a/src/security/security_dac.c b/src/security/security_dac.c index 9d5c25b81c..28f033dca8 100644 --- a/src/security/security_dac.c +++ b/src/security/security_dac.c @@ -302,7 +302,7 @@ virSecurityDACSetSecurityFileLabel(virDomainDiskDefPtr disk, uid_t user; gid_t group; - disk_seclabel = virDomainDiskDefGetSecurityLabelDef(disk, + disk_seclabel = virStorageSourceGetSecurityLabelDef(disk->src, SECURITY_DAC_NAME); if (disk_seclabel && disk_seclabel->norelabel) @@ -369,7 +369,7 @@ virSecurityDACRestoreSecurityImageLabelInt(virSecurityManagerPtr mgr, if (secdef && secdef->norelabel) return 0; - disk_seclabel = virDomainDiskDefGetSecurityLabelDef(disk, + disk_seclabel = virStorageSourceGetSecurityLabelDef(disk->src, SECURITY_DAC_NAME); if (disk_seclabel && disk_seclabel->norelabel) diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c index 228e5cbe6a..0c34af8be9 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -1134,7 +1134,7 @@ virSecuritySELinuxRestoreSecurityImageLabelInt(virSecurityManagerPtr mgr, if (seclabel == NULL) return 0; - disk_seclabel = virDomainDiskDefGetSecurityLabelDef(disk, + disk_seclabel = virStorageSourceGetSecurityLabelDef(disk->src, SECURITY_SELINUX_NAME); if (seclabel->norelabel || (disk_seclabel && disk_seclabel->norelabel)) return 0; @@ -1202,7 +1202,7 @@ virSecuritySELinuxSetSecurityFileLabel(virDomainDiskDefPtr disk, virSecurityLabelDefPtr secdef = cbdata->secdef; virSecuritySELinuxDataPtr data = virSecurityManagerGetPrivateData(cbdata->manager); - disk_seclabel = virDomainDiskDefGetSecurityLabelDef(disk, + disk_seclabel = virStorageSourceGetSecurityLabelDef(disk->src, SECURITY_SELINUX_NAME); if (disk_seclabel && disk_seclabel->norelabel) diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index a23ac6a48f..db2b4019c2 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -1496,6 +1496,21 @@ virStorageNetHostDefCopy(size_t nhosts, } +virSecurityDeviceLabelDefPtr +virStorageSourceGetSecurityLabelDef(virStorageSourcePtr src, + const char *model) +{ + size_t i; + + for (i = 0; i < src->nseclabels; i++) { + if (STREQ_NULLABLE(src->seclabels[i]->model, model)) + return src->seclabels[i]; + } + + return NULL; +} + + void virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def) { diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h index 34b3625f02..35ac6182d9 100644 --- a/src/util/virstoragefile.h +++ b/src/util/virstoragefile.h @@ -312,6 +312,10 @@ int virStorageFileGetLVMKey(const char *path, int virStorageFileGetSCSIKey(const char *path, char **key); +virSecurityDeviceLabelDefPtr +virStorageSourceGetSecurityLabelDef(virStorageSourcePtr src, + const char *model); + void virStorageNetHostDefClear(virStorageNetHostDefPtr def); void virStorageNetHostDefFree(size_t nhosts, virStorageNetHostDefPtr hosts); virStorageNetHostDefPtr virStorageNetHostDefCopy(size_t nhosts, -- GitLab