Commit Graph

5114 Commits

Author SHA1 Message Date
Hilko Bengen
0ee24ccf8a Move Ruby-related checks from autoconf to extconf.rb; add extra check for rb_alloc_func_t
Ruby ships its own config.h which may or may not define the same
relevant constants as our autoconf-generated config.h. Instead of
trying to specify the exact path to the wanted header file we may just
as well simply use Ruby's autoconf-inspired checks and macros.
2013-03-08 12:47:24 +00:00
Richard W.M. Jones
3a895ba794 df/parallel.c: Fix if libvirt is not available at compile time. 2013-03-07 23:29:21 +00:00
Richard W.M. Jones
ef33ea359d Version 1.21.18. 1.21.18 2013-03-07 21:53:16 +00:00
Hilko Bengen
6557d0c082 out-of-tree build: Fix link creation 2013-03-07 21:26:05 +00:00
Hilko Bengen
a568dec4cf Still build the libguestfs-specific parts when --disable-appliance is passed to configure 2013-03-07 21:26:03 +00:00
Hilko Bengen
43b37d02a1 out-of-tree build: Fix localized manpages 2013-03-07 21:17:30 +00:00
Hilko Bengen
0a50e64435 out-of-tree build: don't distribute extconf.rb.in template, use generated exconf.rb
Apparently, the file will only be autogenerated in $(builddir) if it
is not already present in $(srcdir).
2013-03-07 21:14:11 +00:00
Richard W.M. Jones
bb1f665d7f protocol: Handle log messages from connection layer centrally.
Previously described as a "gross hack and massive layering violation".
2013-03-07 18:23:45 +00:00
Richard W.M. Jones
ed41fcd75c protocol: Abstract out socket operations from protocol code.
This creates an abstract layer below the protocol code which handles
the socket operations.  This will make it easier to introduce libvirt
virSocketPtr operations in future.

In the handle, g->conn contains the connection to the appliance.
g->conn is NULL when we're not connected.

poll(2) is used instead of select(2).

All error messages about launch failing or the appliance unexpectedly
dying are handled by two common error message functions, and these
contain a better explanation of what to do.
2013-03-07 18:15:09 +00:00
Richard W.M. Jones
06b39b8098 protocol: Remove message_summary code.
Produces lots of output, and not very helpful.
2013-03-07 16:29:12 +00:00
Richard W.M. Jones
2c8e7ba9b4 launch: unix: Set g->daemon_sock = -1 after closing it.
This ensures we don't accidentally use the closed fd.
2013-03-07 11:40:44 +00:00
Richard W.M. Jones
9ae639948a lib: Rename g->fd to console_sock and g->sock to daemon_sock.
This just renames the fields in the handle to more descriptive names.
There is no functional change.
2013-03-07 11:39:44 +00:00
Richard W.M. Jones
f9381847f1 launch: appliance: Set FD_CLOEXEC flag on console socket.
The earlier (pipe-based) code never set this flag, but that was a bug,
potentially allowing the file descriptor to be leaked to subprocesses.

Set the FD_CLOEXEC flag, but also ensure it is cleared in the child
process just before qemu is exec'd (otherwise qemu would not have a
console).
2013-03-07 11:12:04 +00:00
Richard W.M. Jones
6e7cbb09a9 launch: appliance: Use socketpair instead of pipe for qemu stdin/stdout.
The libvirt backend already uses a Unix socket for the appliance
console, and so for the libvirt backend the fields g->fd[0] == g->fd[1].

Change the appliance backend to use a socketpair, so we need just a
single file descriptor for qemu stdin/stdout (ie. appliance console).

Consequently we can remove the array int fd[2] in the handle and
replace it with a single file descriptor.
2013-03-07 09:50:36 +00:00
Richard W.M. Jones
8136ca3719 proto: send_to_daemon is not an exported function.
This function is only used inside src/proto.c, so rename
it from guestfs___send_to_daemon to just send_to_daemon.
2013-03-06 21:13:14 +00:00
Richard W.M. Jones
7de25c2bca valgrind: Add suppression for memory leak found in libselinux. 2013-03-06 14:39:07 +00:00
Richard W.M. Jones
c44c5ee268 debug: Add command to generate lots of debug messages. 2013-03-06 11:18:14 +00:00
Richard W.M. Jones
ba08a51094 launch: libvirt: When debugging, print permissions of appliance and sockets.
When debugging is enabled, this prints out the permissions (ie.
ls -laZ) of the appliance and sockets directories.  This should be
helpful for debugging RHBZ#913774.
2013-03-05 17:03:21 +00:00
Richard W.M. Jones
59f01c4a70 launch: libvirt: Rename 'is_root' as 'current_proc_is_root', and documentation. 2013-03-05 16:49:46 +00:00
Richard W.M. Jones
ed354e8f8b launch: libvirt: When root, set socket permissions to 0660 (vs 0775).
Since qemu connects to both, there was no point at all in having these
sockets be readable by other, nor executable by anyone.

The sockets should now end up as:

  srw-rw---- root.qemu
2013-03-05 16:49:46 +00:00
Richard W.M. Jones
a4a2a181c2 fuse: tests: Set FD_CLOEXEC flag on file descriptor.
This is not required here, but it helps if the test code matches what
the documentations says you should do.
2013-03-05 15:26:41 +00:00
Richard W.M. Jones
f7789acdab Version 1.21.17. 1.21.17 2013-03-05 14:47:10 +00:00
Richard W.M. Jones
6039689344 guestmount: Add --no-fork flag.
This prevent guestmount from daemonizing.
2013-03-05 14:40:27 +00:00
Richard W.M. Jones
0120a087f4 Add guestunmount.1.html to the website.
This fixes commit 3e9e40aee3.
2013-03-05 14:05:35 +00:00
Richard W.M. Jones
3e9e40aee3 fuse: Add guestunmount program to handle unmounting (RHBZ#916780). 2013-03-05 13:12:25 +00:00
Richard W.M. Jones
09442d0588 fuse: guestfs_umount_local is not thread-safe.
Despite what the documentation may have said, it certainly was not
safe to call guestfs_umount_local from another thread.

guestfs_umount_local could generate events, call the error handler, or
access other fields in the handle, with no locking at all.

We should aim to make guestfs_umount_local thread-safe in future.

See also:
https://bugzilla.redhat.com/show_bug.cgi?id=917706
2013-03-04 15:31:41 +00:00
Richard W.M. Jones
d08f5ebd9a generator: Generate guestfs_user_cancel.
This function is now generated, so bindings in various languages
are made automatically.

Note that the function previously returned void, but now it returns
int (although always 0).  We don't believe that this is an ABI break
since existing programs will continue to work.
2013-03-04 15:24:26 +00:00
Richard W.M. Jones
ac2f6c4ef2 generator: Add 'wrapper' flag to control when wrapper is generated.
Non-daemon functions normally have a wrapper function called
eg. guestfs_name.  The "real" (ie. hand-written) function is called
eg. guestfs__name.  The wrapper deals with checking parameters and
doing trace messages.

This commit allows the wrapper function to be omitted.  The reason is
so that we can handle a few functions that have to be thread-safe
(currently just: guestfs_user_cancel).  The wrapper is not thread safe
because it can call events and/or the error handler.
2013-03-04 15:24:05 +00:00
Richard W.M. Jones
4236929fbb generator: Typo in comment: "Checking" -> "Check". 2013-03-04 15:07:50 +00:00
Richard W.M. Jones
9b7de52d58 threads: Note that even innocent-looking functions need a mutex.
RWMJ was caught out by this one ...
2013-03-04 15:07:50 +00:00
Richard W.M. Jones
66351f7494 trace: Put trace buffer on the stack instead of in the handle.
This makes more sense, and makes the code slightly closer to being
thread safe (although it's still NOT thread safe).
2013-03-04 15:07:50 +00:00
Richard W.M. Jones
8e2b920fe6 FAQ: Add question about running fsck on live filesystems. 2013-03-01 16:25:41 +00:00
Richard W.M. Jones
7d8b97559b Version 1.21.16. 1.21.16 2013-03-01 15:55:18 +00:00
Richard W.M. Jones
7f5bedd53b lib: Check calls to xmlXPathEvalExpression for nodesetval == NULL.
libxml2 xmlXPathEvalExpression can return an unusual nodeset:

  $1 = {type = XPATH_NODESET, nodesetval = 0x0, boolval = 0, floatval = 0,
    stringval = 0x0, user = 0x0, index = 0, user2 = 0x0, index2 = 0}

Note that the nodeset is non-NULL, but the nodesetval is NULL.

Check every call site and fix those that don't deal with this
correctly.
2013-03-01 14:44:51 +00:00
Richard W.M. Jones
3adb0d6d01 add-domain: Move 'connect_live' function.
This is just code motion.
2013-03-01 14:12:47 +00:00
Richard W.M. Jones
e78a2c5df3 add-domain: Pass SELinux label from guest to appliance (RHBZ#912499).
When adding a domain (ie. guestfs_add_domain), read the SELinux
<label/> and <imagelabel/> from the guest and use them for the
appliance.  The appliance is statically labelled the same as the
guest, so it is able to read its disks.

However tell libvirt not to try relabelling the disks, to prevent
libvirt from disturbing the existing labels on the disks (in
particular when the libvirt connection is closed, we don't want
libvirt to try to restore some other label on the disks).

Updated with feedback from Matthew Booth.
2013-03-01 14:12:33 +00:00
Richard W.M. Jones
26df366d3b launch: libvirt: Allow the SELinux label to be set on qcow2 overlay files.
When a disk is opened readonly, the libvirt attach-method privately
creates a qcow2 overlay on top.

This commit lets that overlay get an SELinux label, and sets it to the
imagelabel specified by guestfs_internal_set_libvirt_selinux_label.

The above only applies to the libvirt attach-method.
2013-02-28 15:49:28 +00:00
Richard W.M. Jones
b9ee8baa49 New internal API: internal_set_libvirt_selinux_norelabel_disks.
If set, this causes <seclabel model=selinux relabel=no> to be added to
the disk element in the libvirt XML.

It has no effect *except* on the libvirt attach method when SELinux
and sVirt is being used.
2013-02-28 15:49:27 +00:00
Richard W.M. Jones
617eb88c5e New internal API: internal_set_libvirt_selinux_label
This internal API sets two SELinux labels in the handle (the process
label and the image label -- they are closely related).

If using the libvirt attach-method with SELinux and sVirt, then this
will cause the following XML to be added to the appliance definition:

<seclabel type=static model=selinux relabel=yes>
  <label>[LABEL HERE]</label>
  <imagelabel>[IMAGELABEL HERE]</imagelabel>
</seclabel>

It is ignored by other attach-methods.
2013-02-28 15:49:27 +00:00
Richard W.M. Jones
a6a703253b add-domain: Refactor domain XML parsing code.
This is just code motion.
2013-02-28 15:49:27 +00:00
Richard W.M. Jones
d01ac17559 test-tool: Give an error if there are extra arguments on the command line. 2013-02-28 15:22:06 +00:00
Richard W.M. Jones
3f1e7f1078 launch: libvirt: Refactor SELinux warning code.
This is just code motion.
2013-02-28 13:38:25 +00:00
Richard W.M. Jones
93feaa4ae8 parallel: Don't access the global handle from multiple threads.
libguestfs handles are not thread safe, and it's not safe even to read
settings from the handle from multiple threads (eg. guestfs_get_trace).
Stop doing this in the parallel library.  This caused fairly
reproducible segfaults when you enabled '-x' and/or '-v'.

This fixes commit 34e77af1bf.
2013-02-28 13:38:25 +00:00
Richard W.M. Jones
ce7cffa85a libutils: Don't include "guestfs-internal.h".
This mini-library shouldn't access library-internal stuff.  It should
only use the "guestfs-internal-frontend.h" header.
2013-02-27 14:07:25 +00:00
Richard W.M. Jones
1ea7752e95 lib: Move 'for_each_disk' function back into libvirt-domain.c.
This function is no longer called from anywhere outside the library,
or even outside libvirt-domain.c.

This is just code motion, except for the size_t changes which are
required in order to avoid signed overflow optimization error:

  assuming signed overflow does not occur when simplifying conditional
  to constant [-Werror=strict-overflow]
2013-02-27 11:33:05 +00:00
Richard W.M. Jones
4c5c555eeb generator: Line up GUESTFS_EVENT_ALL. 2013-02-26 22:11:40 +00:00
Richard W.M. Jones
c29660588f generator: Remove "deprecated macros for internal functions".
No need for these since these are internal functions that only code
under our control should have been calling.
2013-02-26 22:08:53 +00:00
Richard W.M. Jones
1ea73f4bdf Version 1.21.15. 1.21.15 2013-02-26 18:48:15 +00:00
Richard W.M. Jones
db30fe0cb0 lib: Fix memory leak in guestfs_list_filesystems.
This fixes commit 6e7f052ef4.
2013-02-26 18:48:15 +00:00
Richard W.M. Jones
b6cbd980fb tests: Add tests of guests to virt-df and virt-alignment-scan. 2013-02-26 18:48:14 +00:00