mgmt: encode property type in property.Get

This also require having property.type public.

QubesOS/qubes-issues#2622
This commit is contained in:
Marek Marczykowski-Górecki 2017-03-11 19:04:50 +01:00
parent 3b36e92b6d
commit dbf2066dfd
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724
2 changed files with 20 additions and 6 deletions

View File

@ -193,7 +193,7 @@ class property(object): # pylint: disable=redefined-builtin,invalid-name
self._setter = setter
self._saver = saver if saver is not None else (
lambda self, prop, value: str(value))
self._type = type
self.type = type
self._default = default
self._write_once = write_once
self.order = order
@ -245,8 +245,8 @@ class property(object): # pylint: disable=redefined-builtin,invalid-name
if self._setter is not None:
value = self._setter(instance, self, value)
if self._type not in (None, type(value)):
value = self._type(value)
if self.type not in (None, type(value)):
value = self.type(value)
if has_oldvalue:
instance.fire_event_pre('property-pre-set:' + self.__name__,

View File

@ -165,14 +165,28 @@ class QubesMgmt(object):
self.fire_event_for_permission()
property_def = self.dest.property_get_def(self.arg)
# explicit list to be sure that it matches protocol spec
if isinstance(property_def, qubes.vm.VMProperty):
property_type = 'vm'
elif property_def.type is int:
property_type = 'int'
elif property_def.type is bool:
property_type = 'bool'
elif self.arg == 'label':
property_type = 'label'
else:
property_type = 'str'
try:
value = getattr(self.dest, self.arg)
except AttributeError:
return 'default=True '
return 'default=True type={} '.format(property_type)
else:
return 'default={} {}'.format(
return 'default={} type={} {}'.format(
str(self.dest.property_is_default(self.arg)),
self.repr(value))
property_type,
str(value) if value is not None else '')
@asyncio.coroutine
def vm_property_help(self, untrusted_payload):