1. 06 1月, 2014 1 次提交
    • E
      maint: improve VIR_ERR_OPERATION_DENIED usage · d219826c
      Eric Blake 提交于
      Some of our operation denied messages are outright stupid; for
      example, if virIdentitySetAttr fails:
      
      error: operation Identity attribute is already set forbidden for read only access
      
      This patch fixes things to a saner:
      
      error: operation forbidden: Identity attribute is already set
      
      It also consolidates the most common usage pattern for operation
      denied errors: read-only connections preventing a public API.  In
      this case, 'virsh -r -c test:///default destroy test' changes from:
      
      error: operation virDomainDestroy forbidden for read only access
      
      to:
      
      error: operation forbidden: read only access prevents virDomainDestroy
      
      Note that we were previously inconsistent on which APIs used
      VIR_FROM_DOM (such as virDomainDestroy) vs. VIR_FROM_NONE (such as
      virDomainPMSuspendForDuration).  After this patch, all uses
      consistently use VIR_FROM_NONE, on the grounds that it is unlikely
      that a caller learning that a call is denied can do anything in
      particular with extra knowledge which error domain the call belongs
      to (similar to what we did in commit baa72449).
      
      * src/util/virerror.c (virErrorMsg): Rework OPERATION_DENIED error
      message.
      * src/internal.h (virCheckReadOnlyGoto): New macro.
      * src/util/virerror.h (virReportRestrictedError): New macro.
      * src/libvirt-lxc.c: Use new macros.
      * src/libvirt-qemu.c: Likewise.
      * src/libvirt.c: Likewise.
      * src/locking/lock_daemon.c (virLockDaemonClientNew): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      d219826c
  2. 05 1月, 2014 1 次提交
    • E
      maint: improve VIR_ERR_NO_SUPPORT usage · baa72449
      Eric Blake 提交于
      We weren't very consistent in our use of VIR_ERR_NO_SUPPORT; many
      users just passed __FUNCTION__ on, while others passed "%s" to
      silence over-eager compilers that warn about __FUNCTION__ not
      containing any %.  It's nicer to route all these uses through
      a single macro, so that if we ever need to change the reporting,
      we can do it in one place.
      
      I verified that 'virsh -c test:///default qemu-monitor-command test foo'
      gives the same error message before and after this patch:
      error: this function is not supported by the connection driver: virDomainQemuMonitorCommand
      
      Note that in libvirt.c, we were inconsistent on whether virDomain*
      API used virLibConnError() (with VIR_FROM_NONE) or virLibDomainError()
      (with VIR_FROM_DOMAIN); this patch unifies these errors to all use
      VIR_FROM_NONE, on the grounds that it is unlikely that a caller
      learning that a call is unimplemented can do anything in particular
      with extra knowledge of which error domain it belongs to.
      
      One particular change to note is virDomainOpenGraphics which was
      trying to fail with VIR_ERR_NO_SUPPORT after a failed
      VIR_DRV_SUPPORTS_FEATURE check; all other places that fail a
      feature check report VIR_ERR_ARGUMENT_UNSUPPORTED.
      
      * src/util/virerror.h (virReportUnsupportedError): New macro.
      * src/libvirt-qemu.c: Use new macro.
      * src/libvirt-lxc.c: Likewise.
      * src/lxc/lxc_driver.c: Likewise.
      * src/security/security_manager.c: Likewise.
      * src/util/virinitctl.c: Likewise.
      * src/libvirt.c: Likewise.
      (virDomainOpenGraphics): Use correct error for unsupported feature.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      baa72449
  3. 04 1月, 2014 2 次提交
    • E
      maint: avoid nested public calls · 8f6c845f
      Eric Blake 提交于
      Having one API call into another is generally not good; among
      other issues, it gives confusing logs, and is not quite as
      efficient.
      
      This fixes several instances, but not all: we still have instances
      in both libvirt.c and in backend hypervisors (lxc and qemu) calling
      the public virTypedParamsGetString and friends, which dispatch
      errors immediately.  I'm not sure if it is worth trying to clean
      that up in a separate patch (such a cleanup may be easiest by
      separating the public function into a wrapper around the internal,
      then tweaking internal.h so that internal users directly use the
      internal function).
      
      * src/libvirt.c (virDomainGetUUIDString, virNetworkGetUUIDString)
      (virStoragePoolGetUUIDString, virSecretGetUUIDString)
      (virNWFilterGetUUIDString): Avoid nested public API call.
      * src/util/virtypedparam.c (virTypedParamsReplaceString): Don't
      dispatch errors here.
      (virTypedParamsGet): No need to reset errors.
      (virTypedParamsGetBoolean): Use consistent ordering.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      8f6c845f
    • E
      maint: reset error on entrance to public API · f06d55da
      Eric Blake 提交于
      We document that calling any public API wipes out all prior
      libvirt errors in the same thread; but weren't obeying this
      style in a few functions.
      
      There are a couple of nested uses of virConnectRef (in lxc
      and qemu reboot paths), but they should not be affected by
      this change in semantics since there should not be any
      previous error getting nuked (a later patch will clean up
      the nested calls, along with abuse of virConnectClose on
      cleanup paths which DOES nuke errors).
      
      * src/libvirt.c (virGetVersion, virConnectRef, virDomainRef)
      (virDomainGetSecurityLabel, virDomainGetSecurityLabelList)
      (virDomainSetMetadata, virDomainGetMetadata)
      (virNodeGetSecurityModel, virNetworkRef, virInterfaceRef)
      (virStoragePoolRef, virStorageVolRef, virNodeDeviceGetName)
      (virNodeDeviceRef, virSecretRef, virStreamRef, virNWFilterRef)
      (virDomainSnapshotRef): Reset error on entrance.
      (do_open): Drop redundant error reset.
      * src/libvirt-qemu.c (virDomainQemuAgentCommand): Likewise.
      * src/libvirt-lxc.c (virDomainLxcEnterNamespace)
      (virDomainLxcEnterSecurityLabel): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      f06d55da
  4. 03 1月, 2014 5 次提交
    • E
      maint: improve error condition style in public API · ca0ea2a9
      Eric Blake 提交于
      While auditing error messages in libvirt.c, I found a couple
      instances that had not been converted to modern error styles,
      and a few places that failed to dispatch the error through
      the known-good connection.
      
      * src/libvirt.c (virDomainPinEmulator, virDomainGetDiskErrors)
      (virDomainSendKey, virDomainGetSecurityLabelList)
      (virDomainGetEmulatorPinInfo): Use typical error reporting.
      (virConnectGetCPUModelNames, virConnectRegisterCloseCallback)
      (virConnectUnregisterCloseCallback, virDomainGetUUID): Report
      error through connection.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      ca0ea2a9
    • E
      maint: split long lines in invalidArg errors · 5e3e211d
      Eric Blake 提交于
      Style only.  In particular, the message on "flags 'affect live'
      and 'affect config'" being mutually exclusive was already split
      in some instances.
      
      * src/libvirt.c: Wrap some long error messages to fit in 80 columns.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      5e3e211d
    • E
      maint: move debug statements first in public API · ff658434
      Eric Blake 提交于
      Most of our public APIs emit a debug log on entry, prior to anything
      else.  There were a few exceptions where obvious failures were not
      logged, so fix those.  When moving a debug earlier, this patch also
      makes sure to avoid any NULL dereference during the log (the APIs
      are supposed to gracefully fail if the user passes NULL for the object).
      
      However, do NOT use VIR_DEBUG prior to virInitialize, since setting
      up the error reporting can change where VIR_DEBUG output would be
      routed.  Instead add documentation to virGlobalInit, virInitialize,
      and virGetVersion that better explains initialization.
      
      * src/libvirt.c (virGetVersion, virConnectRef, virDomainRef)
      (virNetworkRef, virInterfaceRef, virStoragePoolRef)
      (virStorageVolRef, virNodeDeviceRef, virSecretRef, virStreamRef)
      (virNWFilterRef, virDomainSnapshotRef): Debug on function entry.
      * src/libvirt-lxc.c (virDomainLxcEnterNamespace)
      (virDomainLxcEnterSecurityLabel): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      ff658434
    • E
      maint: improve debug of libvirt-{qemu,lxc} apis · 13f83720
      Eric Blake 提交于
      I noticed that the virDomainQemuMonitorCommand debug output wasn't
      telling me the name of the domain it was working on.  While it was
      easy enough to determine which pointer matches the domain based on
      other log messages, it is nicer to be consistent.
      
      * src/util/viruuid.h (VIR_UUID_DEBUG): Moved here from...
      * src/libvirt.c (VIR_UUID_DEBUG): ...here.
      (VIR_ARG15, VIR_HAS_COMMA, VIR_DOMAIN_DEBUG_EXPAND)
      (VIR_DOMAIN_DEBUG_PASTE, VIR_DOMAIN_DEBUG_0, VIR_DOMAIN_DEBUG_1)
      (VIR_DOMAIN_DEBUG_2, VIR_DOMAIN_DEBUG): Move...
      * src/datatypes.h: ...here.
      * src/libvirt-qemu.c (virDomainQemuMonitorCommand)
      (virDomainQemuAgentCommand): Better debug messages.
      * src/libvirt-lxc.c (virDomainLxcOpenNamespace): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      13f83720
    • E
      maint: consistent formatting in libvirt.c · 80aed9f8
      Eric Blake 提交于
      Preliminary cleanups to make search-and-replace easier in later
      patches.  Many of these were done by grepping for (multiline)
      pattern violations, then bundled all into one patch.
      
      * src/libvirt.c: Uniform two spaces between functions, return
      type and open brace on separate line, avoid blank lines around
      open brace, label in column 1, drop redundant (), consistent
      indentation for function headers split across lines.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      80aed9f8
  5. 02 1月, 2014 1 次提交
    • E
      event: improve public API docs · c8f95fff
      Eric Blake 提交于
      Since libvirt 0.9.3, the entire virevent.c file has been a public
      API, so improve the documentation in this file.  Also, fix a
      potential core dump - it could only be triggered by bogus use of
      the API and would only affect the caller (not libvirtd), but we
      might as well be nice.
      
      * src/libvirt.c (virConnectSetKeepAlive)
      (virConnectDomainEventRegister, virConnectDomainEventRegisterAny)
      (virConnectNetworkEventRegisterAny): Document event loop requirement.
      * src/util/virevent.c (virEventAddHandle, virEventRemoveHandle)
      (virEventAddTimeout, virEventRemoveTimeout): Likewise.
      (virEventUpdateHandle, virEventUpdateTimeout): Likewise, and avoid
      core dump if caller didn't register handler.
      (virEventRunDefaultImpl): Expand example, and set up code block in
      html docs.
      (virEventRegisterImpl, virEventRegisterDefaultImpl): Document more
      on the use of the event loop.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      c8f95fff
  6. 01 1月, 2014 1 次提交
    • E
      docs: return paragraph must be last · 16970097
      Eric Blake 提交于
      Commit eb70ceba tried to create a code block for
      libvirt-libvirt.html#virConnectGetType, but failed to note
      that our doc generator treats everything after "Returns" as
      part of the return description rather than looking for
      paragraph and code layout.  Fix some other API that also had
      generic details crammed into the return type paragraph.
      
      * src/libvirt.c (virConnectOpen, virConnectOpenReadOnly)
      (virConnectOpenAuth, virConnectListAllDomains): Fit doc pattern.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      16970097
  7. 29 12月, 2013 1 次提交
  8. 20 12月, 2013 1 次提交
    • E
      docs: improve event-related documentation · 3e67714e
      Eric Blake 提交于
      While looking at event code, I noticed that the documentation was
      trying to refer me to functions that don't exist.  Also fix some
      typos and poor formatting.
      
      * src/libvirt.c (virConnectDomainEventDeregister)
      (virConnectDomainEventRegisterAny)
      (virConnectDomainEventDeregisterAny)
      (virConnectNetworkEventRegisterAny)
      (virConnectNetworkEventDeregisterAny): Link to correct function.
      * include/libvirt.h.in (VIR_DOMAIN_EVENT_CALLBACK)
      (VIR_NETWORK_EVENT_CALLBACK): Likewise.
      (virDomainEventID, virConnectDomainEventGenericCallback)
      (virNetworkEventID, virConnectNetworkEventGenericCallback):
      Improve docs.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      3e67714e
  9. 13 12月, 2013 1 次提交
    • E
      object: require maximal alignment in base class · fca4f233
      Eric Blake 提交于
      Recent changes to events (commit 8a29ffcf) resulted in new compile
      failures on some targets (such as ARM OMAP5):
      conf/domain_event.c: In function 'virDomainEventDispatchDefaultFunc':
      conf/domain_event.c:1198:30: error: cast increases required alignment of
      target type [-Werror=cast-align]
      conf/domain_event.c:1314:34: error: cast increases required alignment of
      target type [-Werror=cast-align]
      cc1: all warnings being treated as errors
      
      The error is due to alignment; the base class is merely aligned
      to the worst of 'int' and 'void*', while the child class must
      be aligned to a 'long long'.  The solution is to include a
      'long long' (and for good measure, a function pointer) in the
      base class to ensure correct alignment regardless of what a
      child class may add, but to wrap the inclusion in a union so
      as to not incur any wasted space.  On a typical x86_64 platform,
      the base class remains 16 bytes; on i686, the base class remains
      12 bytes; and on the impacted ARM platform, the base class grows
      from 12 bytes to 16 bytes due to the increase of alignment from
      4 to 8 bytes.
      
      Reported by Michele Paolino and others.
      
      * src/util/virobject.h (_virObject): Use a union to ensure that
      subclasses never have stricter alignment than the parent.
      * src/util/virobject.c (virObjectNew, virObjectUnref)
      (virObjectRef): Adjust clients.
      * src/libvirt.c (virConnectRef, virDomainRef, virNetworkRef)
      (virInterfaceRef, virStoragePoolRef, virStorageVolRef)
      (virNodeDeviceRef, virSecretRef, virStreamRef, virNWFilterRef)
      (virDomainSnapshotRef): Likewise.
      * src/qemu/qemu_monitor.c (qemuMonitorOpenInternal)
      (qemuMonitorClose): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      fca4f233
  10. 11 12月, 2013 1 次提交
    • C
      Added Network events API and virNetworkEventLifecycle. · 9ff38c54
      Cédric Bosdonnat 提交于
      Define the public API for (de-)registering network events
      and the callbacks for receiving lifecycle events. The lifecycle
      event includes a 'detail' parameter to match the domain lifecycle
      event data, but this is currently unused.
      
      The network events related code goes into its own set of internal
      files src/conf/network_event.[ch]
      9ff38c54
  11. 06 12月, 2013 1 次提交
  12. 03 12月, 2013 2 次提交
  13. 22 11月, 2013 1 次提交
  14. 21 11月, 2013 1 次提交
  15. 18 11月, 2013 1 次提交
    • J
      Properly unref a connection with a close callback · e68432e4
      Ján Tomko 提交于
      The connection pointer in the closeCallback data was never
      initialized, making the unref in remoteClientCloseFunc a no-op.
      
      This fixes the following leak in virsh when the daemon closes
      the connection unexpectedly:
      
      1,179 (288 direct, 891 indirect) bytes in 1 blocks are
         definitely lost in loss record 745 of 792
        at 0x4C2A6D0: calloc (in vgpreload_memcheck-amd64-linux.so)
        by 0x4E9643D: virAllocVar (viralloc.c:558)
        by 0x4ED2425: virObjectNew (virobject.c:190)
        by 0x4F675AC: virGetConnect (datatypes.c:116)
        by 0x4F6EA06: do_open (libvirt.c:1136)
        by 0x4F71017: virConnectOpenAuth (libvirt.c:1481)
        by 0x129FFA: vshReconnect (virsh.c:337)
        by 0x128310: main (virsh.c:2470)
      e68432e4
  16. 15 11月, 2013 1 次提交
  17. 09 11月, 2013 1 次提交
  18. 31 10月, 2013 2 次提交
  19. 21 10月, 2013 6 次提交
  20. 24 9月, 2013 1 次提交
  21. 17 9月, 2013 1 次提交
    • P
      lib: Don't force the key argument when deleting metadata · 3b6784d1
      Peter Krempa 提交于
      virDomainSetMetadata when operating on the metadata element was
      requesting the @key argument to be passed even if @metadata was NULL
      used to delete the corresponding metadata element. This is not needed as
      the key is only used when adding the element and matching is done via
      the XML namespace.
      3b6784d1
  22. 13 9月, 2013 1 次提交
    • E
      docs: mention hostname subtlety · 5c7f820d
      Eric Blake 提交于
      An off-list bug report mentioned some confusion where the public
      documentation of libvirt.c:virConnectGetHostname did not match
      the private documentation of util/virutil.c:virGetHostname.
      
      * src/libvirt.c (virConnectGetHostname): Tweak docs.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      5c7f820d
  23. 12 9月, 2013 1 次提交
  24. 11 9月, 2013 1 次提交
  25. 17 8月, 2013 1 次提交
  26. 12 8月, 2013 1 次提交
    • E
      build: avoid -lgcrypt with newer gnutls · 6094b1ff
      Eric Blake 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=951637
      
      Newer gnutls uses nettle, rather than gcrypt, which is a lot nicer
      regarding initialization.  Yet we were unconditionally initializing
      gcrypt even when gnutls wouldn't be using it, and having two crypto
      libraries linked into libvirt.so is pointless, but mostly harmless
      (it doesn't crash, but does interfere with certification efforts).
      
      There are three distinct version ranges to worry about when
      determining which crypto lib gnutls uses, per these gnutls mails:
      2.12: http://lists.gnu.org/archive/html/gnutls-devel/2011-03/msg00034.html
      3.0: http://lists.gnu.org/archive/html/gnutls-devel/2011-07/msg00035.html
      
      If pkg-config can prove version numbers and/or list the crypto
      library used for static linking, we have our proof; if not, it
      is safer (even if pointless) to continue to use gcrypt ourselves.
      
      * configure.ac (WITH_GNUTLS): Probe whether to add -lgcrypt, and
      define a witness WITH_GNUTLS_GCRYPT.
      * src/libvirt.c (virTLSMutexInit, virTLSMutexDestroy)
      (virTLSMutexLock, virTLSMutexUnlock, virTLSThreadImpl)
      (virGlobalInit): Honor the witness.
      * libvirt.spec.in (BuildRequires): Make gcrypt usage conditional,
      no longer needed in Fedora 19.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      6094b1ff
  27. 26 7月, 2013 1 次提交
  28. 22 7月, 2013 1 次提交