summaryrefslogtreecommitdiffstats
path: root/generator
Commit message (Collapse)AuthorAgeFilesLines
...
* New APIs: inspect-get-package-format, inspect-get-package-management.Richard Jones2010-11-121-0/+46
| | | | This APIs reimplement some parts of virt-inspector in C.
* Don't need to include XDR headers in <guestfs.h>.Richard W.M. Jones2010-11-112-2/+3
| | | | | | | Include the XDR headers in the internal guestfs-internal.h instead. This is knock-on effects to several other source files which were implicitly relying on indirectly loaded headers.
* Be less verbose in the macros defending typedefs in <guestfs.h>.Richard W.M. Jones2010-11-111-16/+16
| | | | This updates commit 4d59e271046f2b5f0d9b1730cd23425fd631c76c.
* build: xml-light is no longer required (thanks Maxim Koltsov).Richard W.M. Jones2010-11-111-2/+2
| | | | | | At some point we removed the last thing that required xml-light, but were still testing for it at various places in the build. This removes all traces.
* Defend all typedefs in <guestfs.h> with #ifdefs.Richard W.M. Jones2010-11-111-0/+29
| | | | | This allows other libraries to redefine those typedefs if they need to use but not depend on <guestfs.h>.
* lib: Make <guestfs.h> be completely generated.Richard W.M. Jones2010-11-112-23/+111
| | | | | This removes the 'not-quite-separate' guestfs-actions.h and guestfs-structs.h files.
* New API: add-domainRichard Jones2010-11-111-0/+61
| | | | | | | | | | | | | | | | | | | This new API allows you to add the disks from a libvirt domain. In guestfish you can use the 'domain' command to access the API, eg: ><fs> domain Fedora14 libvirturi:qemu:///system 1 The returned number is the number of disks that were added. Also here is a proposed (but commented out) low-level API which would allow you to add a domain from a virDomainPtr. However there are several problems with this API -- see discussion on the list: https://www.redhat.com/archives/libguestfs/2010-November/thread.html#00028
* generator: Add Pointer parameter type to the generator.Richard Jones2010-11-1017-26/+95
| | | | | | | | | | | | | | | | | | | This allows generic "foo *bar" pointers to be passed to library functions (not to daemon functions). In the language bindings (except Perl) these are handled as generic int64s with the assumption being that any pointer can be converted to and from this. There is room to add specific support for some pointer types in future by specializing the match cases. However this is inherently tricky because it depends on the implementation details of other bindings (eg. to support virDomainPtr in OCaml depends on the implementation details of the ocaml-libvirt project). Perl is slightly different in that you have to supply a typemap. Again this would depend on the implementation detail of an external library unless you supplied a generic typemap for int64.
* New API: debug-cmdline for printing QEMU command line (internal only).Richard W.M. Jones2010-11-101-0/+7
| | | | | This is an internal-only debugging API so may be changed or removed at any time in the future.
* Don't include debug* commands in the documentation.Richard W.M. Jones2010-11-101-2/+2
|
* ocaml: Error on compiler warnings.Richard Jones2010-11-091-1/+1
|
* New API: inspect-get-roots to return roots from last inspection.Richard W.M. Jones2010-11-051-0/+13
| | | | | Return the roots found by the last call to inspect-os, but without redoing the whole inspection.
* generator: Don't die if an API call isn't listed in API versions file.Richard W.M. Jones2010-11-053-7/+9
| | | | For example, it may just have been added.
* Don't print out key material in trace output.Richard W.M. Jones2010-11-051-2/+4
|
* fish: '-i' option automatically handles whole-disk encryption.Richard W.M. Jones2010-11-051-0/+1
| | | | | | | | | | | This feature is also available in guestmount because of the shared option parsing code. You don't need to do anything to enable it, just using -i will attempt decryption of encrypted partitions. Only works for simple Fedora whole-disk encryption. It's a work-in-progress to make it work for other types of encryption.
* docs: Which API calls were first supported in which upstream versions.Richard W.M. Jones2010-11-046-4/+93
| | | | | | | | Run src/api-support/update-from-tarballs.sh (this won't work unless you have a local copy of the tarballs from the website). src/api-support/added contains the result of running the script, a list of pairs: (API name, version first appeared).
* docs: Indent *_va and *_argv functions correctly.Richard W.M. Jones2010-11-031-7/+7
| | | | This fixes commit f661db2c393d1b7e4211c55682b7fac82a70e36d.
* fish: Use a perfect hash for faster command lookups.Richard W.M. Jones2010-11-032-67/+126
| | | | | | Existing command lookups are approx O(n^2). Replace this with a perfect hash implementation which should be a lot faster.
* generator: Properly lay out and indent multi-line C function decls.Richard W.M. Jones2010-11-033-13/+44
|
* lib: Expose errno through new API guestfs_last_errno.Richard W.M. Jones2010-11-033-2/+78
| | | | | | | If either the daemon sends back an errno, or a system call fails in the library, save the errno in the handle and then make it available to callers through the guestfs_last_errno function.
* daemon: Send back the errno as a string.Richard W.M. Jones2010-11-036-6/+289
| | | | | | | | This changes the protocol again so that if the errno is available, it is converted to a string (like "EIO") and sent back over the protocol to the library. In this commit the library just discards the string.
* capitests: Use ftruncate instead of seek + write to create test files.Richard W.M. Jones2010-11-031-24/+6
|
* capitests: Don't open test files with O_NONBLOCK.Richard W.M. Jones2010-11-031-3/+3
| | | | I have no idea why we were doing this.
* capitests: Set path in TESTS_ENVIRONMENT instead of in tests.cRichard W.M. Jones2010-11-031-2/+0
| | | | | By exporting LIBGUESTFS_PATH with the right path to the appliance, we no longer need to hard code the path in tests.c
* generator: Remove unnecessary macro redefinitions.Richard W.M. Jones2010-11-031-4/+0
| | | | These macros are already defined in guestfs-internals.h
* daemon: Don't use ../src path to include generator_protocol.hRichard W.M. Jones2010-11-031-2/+2
| | | | | This file is already hard-linked into the current directory, so the relative path is not required.
* tests: Remove use of sfdisk from tests.Richard W.M. Jones2010-11-021-11/+41
| | | | | | | Some older tests used sfdisk to create partitions for the tests. sfdisk is buggy (more so than parted -- what is it with partitioning tools?) so replace these tests with equivalent part-* commands.
* inspect: Add support for MeeGo.stable-1.6Richard W.M. Jones2010-11-021-0/+4
|
* inspect: Add support for Ubuntu.Richard Jones2010-10-291-0/+4
|
* inspect: Add detection of Gentoo.Richard Jones2010-10-291-0/+4
|
* inspect: Add detection of Arch Linux.Richard Jones2010-10-291-0/+4
|
* inspect: Add detection of Pardus.Richard Jones2010-10-291-0/+4
|
* New API: inspect-get-windows-systemroot to get systemroot.Richard W.M. Jones2010-10-281-0/+16
| | | | | | We are already using heuristics in the C inspection code to determine the Windows %SYSTEMROOT% directory. This change just exposes this information through the API.
* Document problems mixing mkmountpoint and umount-all (RHBZ#599503).Richard W.M. Jones2010-10-271-5/+20
|
* Enable autosync by default.Richard W.M. Jones2010-10-271-3/+3
|
* New API: lvm-canonical-lv-name: make LV name canonical.Richard W.M. Jones2010-10-271-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When logical volume names appear in places like /etc/fstab files they can have the form "/dev/mapper/foo-bar". This function takes such names and makes them canonical. Note that this operation cannot be performed using the current API, because 'guestfs_stat' does not work on device names, and we don't really want to make a 'stat-device' call since that exposes too much non-useful detail about the appliance. With this patch you can do this: ><fs> debug ll /dev/mapper total 8 drwxrwxr-x 2 root root 4096 Oct 25 12:51 . drwxr-xr-x 16 root root 4096 Oct 25 12:51 .. crw------- 1 root root 10, 62 Oct 25 12:51 control lrwxrwxrwx 1 root root 7 Oct 25 12:51 vg_f13x64-lv_root -> ../dm-0 lrwxrwxrwx 1 root root 7 Oct 25 12:51 vg_f13x64-lv_swap -> ../dm-1 ><fs> lvm-canonical-lv-name /dev/mapper/vg_f13x64-lv_root /dev/vg_f13x64/lv_root ><fs> lvm-canonical-lv-name /dev/mapper/vg_f13x64-lv_swap /dev/vg_f13x64/lv_swap ><fs> lvm-canonical-lv-name /dev/mapper/foo libguestfs: error: lvm_canonical_lv_name: lvm_canonical_lv_name_stub: /dev/mapper/foo: No such file or directory ><fs> lvm-canonical-lv-name /dev/mapper/control libguestfs: error: lvm_canonical_lv_name: /dev/mapper/control: not a logical volume ><fs> lvm-canonical-lv-name /dev/vg_f13x64/lv_root /dev/vg_f13x64/lv_root
* Don't include control characters in BufferIn trace output (RHBZ#646822).Matthew Booth2010-10-261-1/+3
| | | | | | | | | | | | The example below shows what the output looks like for a large random buffer. $ guestfish -N fs -m /dev/sda1 -x -- \ touch /test : \ pwrite /test "$(dd if=/dev/urandom bs=128k count=1)" 0 [...] pwrite "/test" "\x7f\xa0/\xb3\x80\xd3\xbc\xc3\xc3.\xb1\xe0\x1b\xafC\x06\xd5;\x0ajJ[o\xc1\xdd\xae\x1f\xce\xb2\x8d\xb3\xd0\x11\xcc$%\xe6<\xc7\xc7\xe7BU*\xc4l%\xaa\xea\xe9\x1an\xda]\xc6I\x0eC\xf9;\xec\x12a\x1f\xeaRH\xb2P\xd6+\xc4\xe6\xa5bW\x99\\x9d\xc8\x9bJ\xef\x99-\x16:h5\xe2\x0f\xa2\xa08\x9bU\x0b$\x138\xcf\xd4j\x9b\x83{%\xac0\xdaa1Xx\xbd`\x8e\xdd\x82\x87\x07\x98\xd2\x9ed\x8bq\xd0\x1f5\x8f\xab\xad4z1\xda\xc4b\xc1\xbc\x0f\xaa\xea\xc1\x15(\xfd1\xc2\x0bF\xe6\x9e\xb0+/g\\xab\xb0b\xde_\xca\xf9\xad\xe1?%\x17\xad\x98\xa4e\xc1\xe0f'\x89\xe9>\xff\xadhYi\xe7\x8c]%\xef\xe0\xa1R\xe5\xd5\x03K\xefI\xdf\xad\xd3\x82\xdb\x0f\xdd\xc3\x8f"\xf1G\xea\xf9r\xdd\xff\x88\x81\xb7\xf2\x0e\x0f\x1d;:\xf2F1\xdb\xb5D\xa1^\x928\xf5\x8e)\xab\xc4\xc3H(\xd0ol\xc6\xe4\xd6\xa3L\x1c\x06\xf4"<truncated, original size 130567 bytes> 0 [...]
* fish: Quote optional argument name in error message.Richard W.M. Jones2010-10-231-1/+1
|
* fish: Reject unknown opt args (RHBZ#642934,CVE-2010-3851).Richard W.M. Jones2010-10-231-1/+10
| | | | This updates commit 0c1d3c02a8147617ee0646e37d011235abdd2c22.
* generator: Optional arguments, add-drive-opts (RHBZ#642934,CVE-2010-3851).Richard W.M. Jones2010-10-2218-628/+1363
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This large commit changes the generator so that optional arguments can be supported for functions. The model for arguments (known as the "style") is changed from (ret, args) to (ret, args, optargs) where optargs is a more limited list of arguments. One function has been added which takes optional arguments, it is "add-drive-opts", modelled as: (RErr, [String "filename"], #required [Bool "readonly"; String "format"; String "iface"]) #optional Note that this function is processed in the library (does not go over the RPC protocol to the daemon). This has allowed us to simplify the current implementation by omitting changes related to RPC or the daemon, although we plan to add these at some point in the future. From C this function can be called in 3 different ways as in these examples: guestfs_add_drive_opts (g, filename, GUESTFS_ADD_DRIVE_OPTS_READONLY, 1, GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw", -1); (the argument(s) between 'filename' and '-1' are the optional ones). guestfs_add_drive_opts_va (g, filename, args); where 'args' is a va_list. This works like the first version. struct guestfs_add_drive_opts_argv optargs = { .bitmask = GUESTFS_ADD_DRIVE_OPTS_READONLY_BITMASK, .readonly = 1, } guestfs_add_drive_opts_argv (g, filename, &optargs); This last form lets you construct lists of optional arguments, and is used by guestfish and the language bindings. In guestfish optional arguments are used like this: add-drive-opts filename readonly:true In OCaml these are mapped naturally to OCaml optional arguments, eg: g#add_drive_opts ~readonly:true filename; In Perl these are mapped to extra arguments, eg: $g->add_drive_opts ($filename, readonly => 1); In Python these are mapped to optional arguments, eg: g.add_drive_opts ("file", readonly = 1, format = "qcow2") In Ruby these are mapped to a final hash argument, eg: g.add_drive_opts("file", {}) g.add_drive_opts("file", :readonly => 1) g.add_drive_opts("file", :readonly => 1, :iface => "virtio") In PHP these are mapped to extra parameters. This is not quite accurate since you cannot omit arbitrary optional parameters, but there's not much than can be done within the limitations of PHP as a language. Unimplemented in: Haskell, C#, Java.
* generator: Rearrange argt logically (RHBZ#642934,CVE-2010-3851).Richard W.M. Jones2010-10-221-13/+13
| | | | | This structure has accreted over time. Rearrange the types into a logical order.
* generator: Refactor code for Perl bindings.Richard W.M. Jones2010-10-211-146/+133
| | | | | This simplifies the code that generates the Perl bindings by removing repeated sections.
* generator: Missing newline character.Richard W.M. Jones2010-10-211-1/+1
|
* fish: Change 'int argc' to 'size_t argc' throughout.Richard W.M. Jones2010-10-211-2/+2
|
* generator: Remove unused parameter.Richard W.M. Jones2010-10-201-7/+6
| | | | | generate_c_call_args optional decl parameter is never actually used, so remove it.
* ocaml: Add g#ocaml_handle method.Richard W.M. Jones2010-10-041-0/+4
|
* ocaml: Document g#close () method for objects.Richard W.M. Jones2010-10-041-0/+3
|
* ocaml: Create the handle when the object is instantiated.Richard W.M. Jones2010-10-041-3/+5
| | | | | Previously we had only one handle shared between all objects .. oops. This fixes commit 67636f721056d2f2250b0ff8acd981a0294536a9.
* ocaml: Add alternate object-oriented programming style.Richard W.M. Jones2010-10-031-10/+66
| | | | | | | | | | | | | | | | | | | | | | In original style: let () = let filename = Sys.argv.(1) in let g = Guestfs.create () in Guestfs.add_drive_ro g filename; Guestfs.launch g; let roots = Guestfs.inspect_os g in print_endline (Guestfs.inspect_get_product_name g roots.(0)) The same code in the new OO style: let () = let filename = Sys.argv.(1) in let g = new Guestfs.guestfs in g#add_drive_ro filename; g#launch (); let roots = g#inspect_os () in print_endline (g#inspect_get_product_name roots.(0))
* New API: pread-device, partial read for devices.Richard W.M. Jones2010-09-271-1/+14
|