1. 17 1月, 2014 3 次提交
    • E
      maint: clean up error reporting in migration · 27553573
      Eric Blake 提交于
      The choice of error message and category was not consistent
      in the migration code; furthermore, the use of virLibConnError
      is no longer necessary now that we have a generic virReportError.
      
      * src/qemu/qemu_migration.c (virDomainMigrate*): Prefer
      virReportError over virLibConnError.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      27553573
    • E
      maint: don't lose error on canceled migration · c8ed177a
      Eric Blake 提交于
      While auditing the error reporting, I noticed that migration
      had some issues.  Some of the static helper functions tried
      to call virDispatchError(), even though their caller will also
      report the error.  Also, if a migration is cancelled early
      because a uri was not set, we did not guarantee that the finish
      stage would not overwrite the first error message.
      
      * src/qemu/qemu_migration.c (doPeer2PeerMigrate2)
      (doPeer2PeerMigrate3): Preserve first error when cancelling.
      * src/libvirt.c (virDomainMigrateVersion3Full): Likewise.
      (virDomainMigrateVersion1, virDomainMigrateVersion2)
      (virDomainMigrateDirect): Avoid redundant error dispatch.
      (virDomainMigrateFinish2, virDomainMigrateFinish3)
      (virDomainMigrateFinish3Params): Don't report error on cleanup
      path.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      c8ed177a
    • E
      maint: don't leave garbage on early API exit · c05aebfd
      Eric Blake 提交于
      Several APIs clear out a user input buffer before attempting to
      populate it; but in a few cases we missed this memset if we
      detect a reason for an early exit.  Note that these APIs
      check for non-NULL arguments, and exit early with an error
      message when NULL is passed in; which means that we must be
      careful to avoid a NULL deref in order to get to that error
      message.  Also, we were inconsistent on the use of
      sizeof(virType) vs. sizeof(expression); the latter is more
      robust if we ever change the type of the expression (although
      such action is unlikely since these types are part of our
      public API).
      
      * src/libvirt.c (virDomainGetInfo, virDomainGetBlockInfo)
      (virStoragePoolGetInfo, virStorageVolGetInfo)
      (virDomainGetJobInfo, virDomainGetBlockJobInfo): Move memset
      before any returns.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      c05aebfd
  2. 10 1月, 2014 7 次提交
    • C
      c4dadf23
    • E
      virt-login-shell: fix regressions in behavior · 3d007cb5
      Eric Blake 提交于
      Our fixes for CVE-2013-4400 were so effective at "fixing" bugs
      in virt-login-shell that we ended up fixing it into a useless
      do-nothing program.
      
      Commit 3e2f27e1 picked the name LIBVIRT_SETUID_RPC_CLIENT for
      the witness macro when we are doing secure compilation.  But
      commit 9cd6a57d checked whether the name IN_VIRT_LOGIN_SHELL,
      from an earlier version of the patch series, was defined; with
      the net result that virt-login-shell invariably detected that
      it was setuid and failed virInitialize.
      
      Commit b7fcc799 closed all fds larger than stderr, but in the
      wrong place.  Looking at the larger context, we mistakenly did
      the close in between obtaining the set of namespace fds, then
      actually using those fds to switch namespace, which means that
      virt-login-shell will ALWAYS fail.
      
      This is the minimal patch to fix the regressions, although
      further patches are also worth having to clean up poor
      semantics of the resulting program (for example, it is rude to
      not pass on the exit status of the wrapped program back to the
      invoking shell).
      
      * tools/virt-login-shell.c (main): Don't close fds until after
      namespace swap.
      * src/libvirt.c (virGlobalInit): Use correct macro.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      3d007cb5
    • E
      maint: improve VIR_ERR_INVALID_DOMAIN_SNAPSHOT usage · dd0e04d9
      Eric Blake 提交于
      The existing check of domain snapshots validated that they
      point to a domain, but did not validate that the domain
      points to a connection, even though any errors blindly assume
      the connection is valid.  On the other hand, as mentioned in
      commit 6e130ddc, any valid domain is already tied to a valid
      connection, and VIR_IS_SNAPSHOT vs. VIR_IS_DOMAIN_SNAPSHOT
      makes no real difference; it's best to just validate the chain
      of all three.  For consistency with previous patches, continue
      the trend of using a common macro.  For now, we don't need
      virCheckDomainSnapshotGoto().
      
      * src/datatypes.h (virCheckDomainSnapshotReturn): New macro.
      (VIR_IS_SNAPSHOT, VIR_IS_DOMAIN_SNAPSHOT):
      Drop unused macros.
      * src/libvirt.c: Use macro throughout.
      (virLibDomainSnapshotError): Drop unused macro.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      dd0e04d9
    • E
      maint: improve VIR_ERR_INVALID_NWFILTER usage · 7d0a0ab7
      Eric Blake 提交于
      While all errors related to invalid nwfilters appeared to be
      consistent, we might as well continue the trend of using a
      common macro.  As in commit 6e130ddc, the difference between
      VIR_IS_NWFILTER and VIR_IS_CONNECTED_NWFILTER is moot, since
      reference counting means any valid nwfilter is also tied to
      a valid connection.  For now, we don't need virCheckNWFilterGoto().
      
      * src/datatypes.h (virCheckNWFilterReturn): New macro.
      (VIR_IS_NWFILTER, VIR_IS_CONNECTED_NWFILTER): Drop unused macros.
      * src/libvirt.c: Use macro throughout.
      (virLibNWFilterError): Drop unused macro.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      7d0a0ab7
    • E
      maint: improve VIR_ERR_INVALID_STREAM usage · 101f176a
      Eric Blake 提交于
      For streams validation, we weren't consistent on whether to
      use VIR_FROM_NONE or VIR_FROM_STREAMS.  Furthermore, in many
      API, we want to ensure that a stream is tied to the same
      connection as the other object we are operating on; while
      other API failed to validate the stream at all.  And the
      difference between VIR_IS_STREAM and VIR_IS_CONNECTED_STREAM
      is moot; as in commit 6e130ddc, we know that reference
      counting means a valid stream will always be tied to a valid
      connection.  Similar to previous patches, use a common macro
      to make it nicer.
      
      * src/datatypes.h (virCheckStreamReturn, virCheckStreamGoto):
      New macros.
      (VIR_IS_STREAM, VIR_IS_CONNECTED_STREAM): Drop unused macros.
      * src/libvirt.c: Use macro throughout.
      (virLibStreamError): Drop unused macro.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      101f176a
    • E
      maint: improve VIR_ERR_INVALID_SECRET usage · 916273eb
      Eric Blake 提交于
      While all errors related to invalid secrets appeared to be
      consistent, we might as well continue the trend of using a
      common macro.  Just as in commit 6e130ddc, the difference
      between VIR_IS_SECRET and VIR_IS_CONNECTED_SECRET is moot
      (due to reference counting, any valid secret must be tied to
      a valid domain).  For now, we don't need virCheckSecretGoto().
      
      * src/datatypes.h (virCheckSecretReturn): New macro.
      (VIR_IS_SECRET, VIR_IS_CONNECTED_SECRET): Drop unused macros.
      * src/libvirt.c: Use macro throughout.
      (virLibSecretError): Drop unused macro.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      916273eb
    • E
      maint: improve VIR_ERR_INVALID_NODE_DEVICE usage · 9ec935d5
      Eric Blake 提交于
      While all errors related to invalid node device appeared to be
      consistent, we might as well continue the trend of using a
      common macro.  For now, we don't need virCheckNodeDeviceGoto().
      
      * src/datatypes.h (virCheckNodeDeviceReturn): New macro.
      (VIR_IS_NODE_DEVICE, VIR_IS_CONNECTED_NODE_DEVICE): Drop
      unused macros.
      * src/libvirt.c: Use macro throughout.
      (virLibNodeDeviceError): Drop unused macro.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      9ec935d5
  3. 09 1月, 2014 4 次提交
    • E
      maint: improve VIR_ERR_INVALID_STORAGE_VOL usage · 097c9b52
      Eric Blake 提交于
      For storage volume validation, we weren't consistent on
      whether to use VIR_FROM_NONE or VIR_FROM_STORAGE.  Similar
      to previous patches, use a common macro to make it nicer.
      Furthermore, just as in commit 6e130ddc, the difference
      between VIR_IS_STORAGE_VOL and VIR_IS_CONNECTED_STORAGE_VOL
      is moot (due to reference counting, any valid volume must
      be tied to a valid connection).
      
      virStorageVolCreateXMLFrom allows cross-connection cloning,
      where the error is reported against the connection of the
      destination pool.
      
      * src/datatypes.h (virCheckStorageVolReturn)
      (virCheckStorageVolGoto): New macros.
      (VIR_IS_STORAGE_VOL, VIR_IS_CONNECTED_STORAGE_VOL): Drop
      unused macros.
      * src/libvirt.c: Use macro throughout.
      (virLibStorageVolError): Drop unused macro.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      097c9b52
    • E
      maint: improve VIR_ERR_INVALID_STORAGE_POOL usage · 8add79a9
      Eric Blake 提交于
      virStoragePoolBuild reported an invalid pool as if it were an
      invalid network.  Likewise, we weren't consistent on whether to
      use VIR_FROM_NONE or VIR_FROM_STORAGE.  Similar to previous
      patches, use a common macro to make it nicer.  Furthermore, just
      as in commit 6e130ddc, the difference between VIR_IS_STORAGE_POOL
      and VIR_IS_CONNECTED_STORAGE_POOL is moot (due to reference
      counting, any valid pool must be tied to a valid connection).
      For now, we don't need virCheckStoragePoolGoto().
      
      * src/datatypes.h (virCheckStoragePoolReturn): New macro.
      (VIR_IS_STORAGE_POOL, VIR_IS_CONNECTED_STORAGE_POOL): Drop
      unused macros.
      * src/libvirt.c: Use macro throughout.
      (virLibStoragePoolError): Drop unused macro.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      8add79a9
    • E
      maint: improve VIR_ERR_INVALID_INTERFACE usage · 459532b4
      Eric Blake 提交于
      When checking for a valid interface, we weren't consistent on
      whether we reported as VIR_FROM_NONE or VIR_FROM_INTERFACE.
      Similar to previous patches, use a common macro to make it nicer.
      Furthermore, just as in commit 6e130ddc, the difference between
      VIR_IS_INTERFACE and VIR_IS_CONNECTED_INTERFACE is moot (due to
      reference counting, any valid interface must be tied to a valid
      connection).  For now, we don't need virCheckInterfaceGoto().
      
      * src/datatypes.h (virCheckInterfaceReturn): New macro.
      (VIR_IS_INTERFACE, VIR_IS_CONNECTED_INTERFACE): Drop unused
      macros.
      * src/libvirt.c: Use macro throughout.
      (virLibInterfaceError): Drop unused macro.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      459532b4
    • E
      maint: improve VIR_ERR_INVALID_NETWORK usage · e1761593
      Eric Blake 提交于
      When checking for a valid network, we weren't consistent on
      whether we reported an invalid network or a connection.  Similar
      to previous patches such as commit 6e130ddc, the difference
      between VIR_IS_NETWORK and VIR_IS_CONNECTED_NETWORK is moot (due
      to reference counting, any valid network must be tied to a valid
      connection).  Use a common macro to make the error reporting
      for invalid networks nicer.
      
      * src/datatypes.h (virCheckNetworkReturn, virCheckNetworkGoto): New
      macros.
      (VIR_IS_NETWORK, VIR_IS_CONNECTED_NETWORK): Drop unused macros.
      * src/libvirt.c: Use macro throughout.
      (virLibNetworkError): Drop unused macro.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      e1761593
  4. 08 1月, 2014 2 次提交
    • M
      virConnect(Un)registerCloseCallback: Unlock @conn prior to error dispatch · 8ab6f1ad
      Michal Privoznik 提交于
      The function checks for @conn to be valid and locks its mutex. Then, it
      checks if callee is unregistering the same callback that he registered
      previously. If this fails an error is reported and  the control jumps to
      'error' label. Here, if @conn has some errors (and it certainly does -
      the one that's been just reported) the conn->mutex is locked again -
      without any previous unlock:
      
        Thread 1 (Thread 0x7fb500ef1800 (LWP 18982)):
        #0  __lll_lock_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135
        #1  0x00007fb4fd99ce56 in _L_lock_918 () from /lib64/libpthread.so.0
        #2  0x00007fb4fd99ccaa in __GI___pthread_mutex_lock (mutex=0x7fb50153b670) at pthread_mutex_lock.c:64
        #3  0x00007fb5007e574d in virMutexLock (m=m@entry=0x7fb50153b670) at util/virthreadpthread.c:85
        #4  0x00007fb5007b198e in virDispatchError (conn=conn@entry=0x7fb50153b5e0) at util/virerror.c:594
        #5  0x00007fb5008a3735 in virConnectUnregisterCloseCallback (conn=0x7fb50153b5e0, cb=cb@entry=0x7fb500f588e0 <vshCatchDisconnect>) at libvirt.c:21025
        #6  0x00007fb500f5d690 in vshReconnect (ctl=ctl@entry=0x7fffff60e710) at virsh.c:328
        #7  0x00007fb500f5dc50 in vshCommandRun (ctl=ctl@entry=0x7fffff60e710, cmd=0x7fb50152ca80) at virsh.c:1755
        #8  0x00007fb500f5861b in main (argc=<optimized out>, argv=<optimized out>) at virsh.c:3393
      
      And since the conn's mutex is not recursive, the virDispatchError will
      never ever lock it successfully.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      8ab6f1ad
    • E
      maint: improve VIR_ERR_INVALID_DOMAIN usage · 6e130ddc
      Eric Blake 提交于
      In datatype.c, virGetDomainSnapshot could result in the message:
      
      error: invalid domain pointer in bad domain
      
      Furthermore, while there are a few functions in libvirt.c that
      only care about a virDomainPtr without regards to the connection
      (such as virDomainGetName), most functions also require a valid
      connection.  Yet several functions were blindly dereferencing
      the conn member without checking it for validity first (such as
      virDomainOpenConsole).  Rather than try and correct all usage
      of VIR_IS_DOMAIN vs. VIR_IS_CONNECTED_DOMAIN, it is easier to
      just blindly require that a valid domain object always has a
      valid connection object (which should be true anyways, since
      every domain object holds a reference to its connection, so the
      connection will not be closed until all domain objects have
      also been closed to release their reference).
      
      After this patch, all places that validate a domain consistently
      report:
      
      error: invalid domain pointer in someFunc
      
      * src/datatypes.h (virCheckDomainReturn, virCheckDomainGoto): New
      macros.
      * src/datatypes.c (virGetDomainSnapshot): Use new macro.
      (virLibConnError): Delete unused macro.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      6e130ddc
  5. 07 1月, 2014 2 次提交
    • E
      event: make deregister return value match docs · 31b5bad9
      Eric Blake 提交于
      Ever since their introduction (commit 1509b802 in v0.5.0 for
      virConnectDomainEventRegister, commit 44457238 in v0.8.0 for
      virConnectDomainEventDeregisterAny), the event deregistration
      functions have been documented as returning 0 on success;
      likewise for older registration (only the newer RegisterAny
      must return a non-zero callbackID).  And now that we are
      adding virConnectNetworkEventDeregisterAny for v1.2.1, it
      should have the same semantics.
      
      Fortunately, all of the stateful drivers have been obeying
      the docs and returning 0, thanks to the way the remote_driver
      tracks things (in fact, the RPC wire protocol is unable to
      send a return value for DomainEventRegisterAny, at least not
      without adding a new RPC number).  Well, except for vbox,
      which was always failing deregistration, due to failure to
      set the return value to anything besides its initial -1.
      
      But for local drivers, such as test:///default, we've been
      returning non-zero numbers; worse, the non-zero numbers have
      differed over time.  For example, in Fedora 12 (libvirt 0.8.2),
      calling Register twice would return 0 and 1 [the callbackID
      generated under the hood]; while in Fedora 20 (libvirt 1.1.3),
      it returns 1 and 2 [the number of callbacks registered for
      that event type].  Since we have changed the behavior over
      time, and since it differs by local vs. remote, we can safely
      argue that no one could have been reasonably relying on any
      particular behavior, so we might as well obey the docs, as well
      as prepare callers that might deal with older clients to not be
      surprised if the docs are not strictly followed.
      
      For consistency, this patch fixes the code for all drivers,
      even though it only makes an impact for vbox and for local
      drivers.  By fixing all drivers, future copy and paste from
      a remote driver to a local driver is less likely to
      reintroduce the bug.
      
      Finally, update the testsuite to gain some coverage of the
      issue for local drivers, including the first test of old-style
      domain event registration via function pointer instead of
      event id.
      
      * src/libvirt.c (virConnectDomainEventRegister)
      (virConnectDomainEventDeregister)
      (virConnectDomainEventDeregisterAny): Clarify docs.
      * src/libxl/libxl_driver.c (libxlConnectDomainEventRegister)
      (libxlConnectDomainEventDeregister)
      (libxlConnectDomainEventDeregisterAny): Match documentation.
      * src/lxc/lxc_driver.c (lxcConnectDomainEventRegister)
      (lxcConnectDomainEventDeregister)
      (lxcConnectDomainEventDeregisterAny): Likewise.
      * src/test/test_driver.c (testConnectDomainEventRegister)
      (testConnectDomainEventDeregister)
      (testConnectDomainEventDeregisterAny)
      (testConnectNetworkEventDeregisterAny): Likewise.
      * src/uml/uml_driver.c (umlConnectDomainEventRegister)
      (umlConnectDomainEventDeregister)
      (umlConnectDomainEventDeregisterAny): Likewise.
      * src/vbox/vbox_tmpl.c (vboxConnectDomainEventRegister)
      (vboxConnectDomainEventDeregister)
      (vboxConnectDomainEventDeregisterAny): Likewise.
      * src/xen/xen_driver.c (xenUnifiedConnectDomainEventRegister)
      (xenUnifiedConnectDomainEventDeregister)
      (xenUnifiedConnectDomainEventDeregisterAny): Likewise.
      * src/network/bridge_driver.c
      (networkConnectNetworkEventDeregisterAny): Likewise.
      * tests/objecteventtest.c (testDomainCreateXMLOld): New test.
      (mymain): Run it.
      (testDomainCreateXML): Check return values.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      31b5bad9
    • E
      maint: improve VIR_ERR_INVALID_CONN usage · db3dd082
      Eric Blake 提交于
      The datatype.c object checks could result in a message like:
      
      error: invalid connection pointer in no connection
      
      This consolidates all clients of this message to have uniform contents:
      
      error: invalid connection pointer in someFunc
      
      Note that virCheckConnectReturn raises an error immediately; in
      datatypes.c, where we don't need to raise the error (but instead
      just leave it in the thread-local setting), we use
      virCheckConnectGoto and the cleanup label instead.  Then, for
      consistency in that file, all subsequent error messages are
      touched to also use the cleanup error label.
      
      * src/datatypes.h (virCheckConnectReturn)
      (virCheckConnectGoto): New macros.
      * src/datatypes.c: Use new macro.
      * src/libvirt-qemu.c (virDomainQemuAttach): Likewise.
      (virLibConnError): Delete unused macro.
      * src/libvirt-lxc.c (virLibConnError): Likewise.
      * src/libvirt.c: Use new macro throughout.
      * docs/api_extension.html.in: Modernize documentation.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      db3dd082
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 29 12月, 2013 1 次提交
  13. 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
  14. 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
  15. 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
  16. 06 12月, 2013 1 次提交
  17. 03 12月, 2013 2 次提交
  18. 22 11月, 2013 1 次提交
  19. 21 11月, 2013 1 次提交
  20. 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
  21. 15 11月, 2013 1 次提交