• E
    libvirt: do not mix internal flags into public API · 33ba6e68
    Eric Blake 提交于
    There were two API in driver.c that were silently masking flags
    bits prior to calling out to the drivers, and several others
    that were explicitly masking flags bits.  This is not
    forward-compatible - if we ever have that many flags in the
    future, then talking to an old server that masks out the
    flags would be indistinguishable from talking to a new server
    that can honor the flag.  In general, libvirt.c should forward
    _all_ flags on to drivers, and only the drivers should reject
    unknown flags.
    
    In the case of virDrvSecretGetValue, the solution is to separate
    the internal driver callback function to have two parameters
    instead of one, with only one parameter affected by the public
    API.  In the case of virDomainGetXMLDesc, it turns out that
    no one was ever mixing VIR_DOMAIN_XML_INTERNAL_STATUS with
    the dumpxml path in the first place; that internal flag was
    only used in saving and restoring state files, which happened
    to be in functions internal to a single file, so there is no
    mixing of the internal flag with a public flags argument.
    Additionally, virDomainMemoryStats passed a flags argument
    over RPC, but not to the driver.
    
    * src/driver.h (VIR_DOMAIN_XML_FLAGS_MASK)
    (VIR_SECRET_GET_VALUE_FLAGS_MASK): Delete.
    (virDrvSecretGetValue): Separate out internal flags.
    (virDrvDomainMemoryStats): Provide missing flags argument.
    * src/driver.c (verify): Drop unused check.
    * src/conf/domain_conf.h (virDomainObjParseFile): Delete
    declaration.
    (virDomainXMLInternalFlags): Move...
    * src/conf/domain_conf.c: ...here.  Delete redundant include.
    (virDomainObjParseFile): Make static.
    * src/libvirt.c (virDomainGetXMLDesc, virSecretGetValue): Update
    clients.
    (virDomainMemoryPeek, virInterfaceGetXMLDesc)
    (virDomainMemoryStats, virDomainBlockPeek, virNetworkGetXMLDesc)
    (virStoragePoolGetXMLDesc, virStorageVolGetXMLDesc)
    (virNodeNumOfDevices, virNodeListDevices, virNWFilterGetXMLDesc):
    Don't mask unknown flags.
    * src/interface/netcf_driver.c (interfaceGetXMLDesc): Reject
    unknown flags.
    * src/secret/secret_driver.c (secretGetValue): Update clients.
    * src/remote/remote_driver.c (remoteSecretGetValue)
    (remoteDomainMemoryStats): Likewise.
    * src/qemu/qemu_process.c (qemuProcessGetVolumeQcowPassphrase):
    Likewise.
    * src/qemu/qemu_driver.c (qemudDomainMemoryStats): Likewise.
    * daemon/remote.c (remoteDispatchDomainMemoryStats): Likewise.
    33ba6e68
qemu_driver.c 263.5 KB