[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#857542: unblock: libguestfs/1.34.6-1



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Dear release team,

please allow libguestfs 1.34.6-1 into testing. This is a new upstream
sub-version that only introduces bugfixes and does not break existing
APIs.

A filtered debdiff is attached, the following command was used to
generate it:

,----
| debdiff -w libguestfs_1.34.4-1.dsc libguestfs_1.34.6-1.dsc \
| | filterdiff -p1 -x 'aclocal.m4' -x 'bootstrap' \
|     -x configure -x 'config.*' -x Makefile.in -x '*/Makefile.in' \
|     -x 'build-aux/*'  -x 'gnulib/*' -x 'm4/*.m4' -x .gitignore \
|     -x maint.mk -x GNUmakefile \
|     -x 'po/*' -x 'po-docs/*' -x '*.html' -x '*.sgml' \
|     -X libguestfs/generator/files-generated.txt \
| | grep -v '^Binary files .* differ$' \
| > libguestfs_1.34.6-1.debdiff
`----

Upstream has a sane stable release policy as documented in guestfs(3):

,----
| LIBGUESTFS VERSION NUMBERS
|      Since April 2010, libguestfs has started to make separate
|      development and stable releases, along with corresponding
|      branches in our git repository.  These separate releases can
|      be identified by version number:
| 
|                       even numbers for stable: 1.2.x, 1.4.x, ...
|             .-------- odd numbers for development: 1.3.x, 1.5.x, ...
|             |
|             v
|       1  .  3  .  5
|       ^           ^
|       |           |
|       |           `-------- sub-version
|       |
|       `------ always '1' because we don't change the ABI
| 
|      Thus "1.3.5" is the 5th update to the development branch
|      "1.3".
| 
|      As time passes we cherry pick fixes from the development
|      branch and backport those into the stable branch, the effect
|      being that the stable branch should get more stable and less
|      buggy over time.  So the stable releases are ideal for
|      people who don't need new features but would just like the
|      software to work.
| 
|      Our criteria for backporting changes are:
| 
|      *   Documentation changes which don't affect any code are
|          backported unless the documentation refers to a future
|          feature which is not in stable.
| 
|      *   Bug fixes which are not controversial, fix obvious
|          problems, and have been well tested are backported.
| 
|      *   Simple rearrangements of code which shouldn't affect how
|          it works get backported.  This is so that the code in
|          the two branches doesn't get too far out of step,
|          allowing us to backport future fixes more easily.
| 
|      *   We don't backport new features, new APIs, new tools etc,
|          except in one exceptional case: the new feature is
|          required in order to implement an important bug fix.
| 
|      A new stable branch starts when we think the new features in
|      development are substantial and compelling enough over the
|      current stable branch to warrant it.  When that happens we
|      create new stable and development versions 1.N.0 and
|      1.(N+1).0 [N is even].  The new dot-oh release won't
|      necessarily be so stable at this point, but by backporting
|      fixes from development, that branch will stabilize over
|      time.
`----

Cheers,
-Hilko

diff -Nru -w libguestfs-1.34.4/BUGS libguestfs-1.34.6/BUGS
--- libguestfs-1.34.4/BUGS	2017-01-29 22:44:12.000000000 +0100
+++ libguestfs-1.34.6/BUGS	2017-03-08 11:33:43.000000000 +0100
@@ -1,5 +1,5 @@
 NOTE: This file is automatically generated from "update-bugs.sh".
-Last updated: 2017-01-29
+Last updated: 2017-03-08
 
 This contains a local list of the bugs that are open against
 libguestfs.  Bugs are tracked in the Red Hat Bugzilla database
@@ -218,9 +218,6 @@
 1152818 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1152818
   llz give ? for the security context of a file, which is wrong
 
-1152819 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1152819
-  Can not end a running command in virt-rescue by press ^C or other keys, the only way is to exit virt-rescue
-
 1153702 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1153702
   Using "upload - XXX" doesn't work with remote
 
@@ -230,15 +227,9 @@
 1155229 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1155229
   RFE: Allow uploading virt-v2v converted images directly to Cinder
 
-1161019 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1161019
-  RFE: Only install RHEV-APT if virt-v2v -o rhev/-o vdsm option is used
-
 1170771 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1170771
   virt-sparsify fails to sparsify CentOS 7 SWAP
 
-1171654 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1171654
-  Modify a file in virt-rescue with vi on some linux terminal such as yakuake, can lead to abnormal display in virt-rescue shell
-
 1172425 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1172425
   [RFE]virt-v2v failed to convert VMware ESX VM with snapshot
 
@@ -287,36 +278,21 @@
 1232477 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1232477
   guestfs_add_drive_opts incorrectly quotes query parameters
 
-1233093 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1233093
-  QXL driver is not installed for some version of windows guest after convert to RHEV
-
-1237250 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1237250
-  aarch64: libguestfs should now prefer virtio-pci
-
 1242028 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1242028
   virt-make-fs cannot set g+s bit on vfat
 
 1250670 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1250670
   libguestfs-test-tool succeeds but guestmount fails
 
-1252701 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1252701
-  virt-p2v cannot convert older HP Smart Array servers which require cciss driver
-
 1253593 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1253593
   [RFE]virt-p2v support conversion of citrix xen guest
 
-1255610 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1255610
-  W2K8R2 FC guest has no VGA driver on RHEV
-
 1265588 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1265588
   Windows guest with dynamic disk cannot show RAID(E:) Disk on rhev after conversion by virt-p2v
 
 1270686 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1270686
   libguestfs-1.31.15-1.fc24 FTBFS: cp: missing file operand
 
-1272119 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1272119
-  virt-v2v on W2K3 32-bit image fails
-
 1277744 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1277744
   When VirtualBox is running, libguestfs fails with ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy
 
@@ -335,9 +311,6 @@
 1308535 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1308535
   RFE: v2v: Copy bios.hddOrder to target
 
-1311890 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1311890
-  virt-v2v: error: libguestfs error: hivex_open: hivex failed to open  /Windows/System32/config/SOFTWARE: Operation not supported
-
 1314739 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1314739
   The X server of Xen rhel5.11 can't start successfully after converted by virt-p2v
 
@@ -347,9 +320,6 @@
 1318922 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1318922
   network name mangling after virt-v2v conversion causes old-style network scripts to fail
 
-1322512 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1322512
-  Libguestfs error: filesize: /var/lib/rpm/Name: No such file or directory
-
 1322837 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1322837
   Setting LIBGUESTFS_HV causes security context to be reset
 
@@ -363,7 +333,7 @@
   Part-init and part-add failed to create partition with mac parttype on aarch64
 
 1341619 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1341619
-  Sendkey"ctrl+alt+detele" is not useful at p2v client GUI mode
+  Sendkey"ctrl+alt+delete" is not useful at p2v client GUI mode
 
 1346818 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1346818
   RFE: virt-get-kernel should be able to extract the kernel command line too
@@ -377,20 +347,8 @@
 1351000 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1351000
   virt-customize --commands-from-file will fail if there is an extra blank in the file
 
-1354507 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1354507
-  virt-v2v conversions from vCenter do not consistently obey the proxy environment variables
-
-1354509 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1354509
-  v2v: Map Windows 8.1 client to Windows 8.1 in oVirt
-
-1356550 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1356550
-  QXL driver can't be installed automatically when convert win7 or win2008r2 from kvm to rhev by virt-v2v
-
-1357427 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1357427
-  virtio driver can't be installed for netwrok automatically in win2012 guest sometimes when convert the guest using virt-v2v by auto
-
-1359086 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1359086
-  Rebase libguestfs in RHEL 7.4
+1356339 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1356339
+  Unable to update RHEL 7 KVM Guest Image with virt-customize
 
 1362497 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1362497
   [RFE] Add support for importing Debian/Ubuntu guests with virt-v2v
@@ -404,11 +362,8 @@
 1364058 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1364058
   [RFE] virt-v2v should provide an option to store the traces to log file
 
-1364518 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1364518
-  libguestfs-java: mismatch class version vs java dependency
-
 1365473 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1365473
-  Can't convert rhel6.8 x86-lpfc host by virt-p2v
+  virt-p2v fails when source machine is using tboot (Intel Trusted Boot pre-kernel module)
 
 1368599 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1368599
   pip install fails with ImportError: /usr/lib64/python2.7/site-packages/libguestfsmod.so: undefined symbol: put_isoinfo
@@ -425,36 +380,15 @@
 1372037 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1372037
   txz-in hangs on btrfs filesystem
 
-1372671 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1372671
-  Graphics type of guest become sdl after converted by virt-v2v -i disk
-
-1373879 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1373879
-  virt-resize --expand fails with win2008 x86 image on aarch64 uefi host
-
-1374232 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1374232
-  selinux relabel fails on RHEL 6.2 guests with "libguestfs error: selinux_relabel: : Success"
-
 1374254 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1374254
   Failed to boot up Win7sp1 for first time which installed on fc hardware after converting to rhv4.0
 
 1374629 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1374629
-  [virt-p2v]virt-p2v recognize LCDRIVE & virtual floppy as hard disks
-
-1379579 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1379579
-  guestfish mistakely parse nbd exportname
-
-1382275 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1382275
-  virt-v2v is pulling in the X11 stack
+  virt-p2v sees LCDRIVE & virtual floppy as hard disks, they are in fact removable
 
 1383048 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1383048
   Device.map which is /dev/sdb or /dev/mapper/mpatha can't be updated to vda after p2v conversion
 
-1383665 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1383665
-  mount: unknown filesystem type 'xfs' error while converting centos VMware VM to glance image.
-
-1387213 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1387213
-  [RFE] Add support for importing Debian/Ubuntu guests with virt-v2v
-
 1393747 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1393747
   RFE: Libguestfs should support LUKS partition in guest image
 
@@ -464,9 +398,6 @@
 1400332 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1400332
   RFE: virt-builder should support templates with encrypted filesystems
 
-1404182 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1404182
-  RFE: virt-resize should support a URL as the outdisk
-
 1405273 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1405273
   RFE: virt-builder should support a URL as the output diskimage
 
@@ -476,30 +407,27 @@
 1409024 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1409024
   [Debian] Missing db_dump abort inspection
 
-1409637 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1409637
-  0x0000007B BSOD after converting Windows 2008 R2 using p2v
-
 1410102 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1410102
   Make install error for libguestfs-1.35.19
 
-1412090 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1412090
-  Virt-v2v will use the latest  kernel instead of the default kernel.
-
 1413489 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1413489
   Inspection doesn't find any OS in cirros-d161201-x86_64-disk.img
 
-1414505 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1414505
-  virt-p2v needs RHEL 5 build to support LSI Logic / Symbios Logic MegaRAID SAS  8208ELP/8208ELP
-
-1415935 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1415935
-  virt-v2v auto running convert esx guests  failed with error "qemu-img: error while reading sector 24942336: Protocol error"
-
 1415955 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1415955
   Ubuntu 14 doesn't generate ssh host keys during first boot
 
 1417306 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1417306
   QEMU image file locking (libguestfs)
 
+1420103 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1420103
+  [RFE] Hyper-V support in v2v
+
+1429643 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1429643
+  virt-v2v should depend on OVMF/AAVMF
+
+1430287 NEW https://bugzilla.redhat.com/show_bug.cgi?id=1430287
+  Convert a guest from vmware to kvm by virt-v2v can't be finished in 2 hours
+
 503134 ASSIGNED https://bugzilla.redhat.com/show_bug.cgi?id=503134
   guestfish's list splitting does not recognize internal quoting
 
@@ -548,9 +476,6 @@
 1144138 ASSIGNED https://bugzilla.redhat.com/show_bug.cgi?id=1144138
   virt-inspector fails on FreeBSD 9.3 guest
 
-1167623 ASSIGNED https://bugzilla.redhat.com/show_bug.cgi?id=1167623
-  Remove "If reporting bugs, run virt-v2v with debugging enabled .." message when running virt-p2v
-
 1183493 ASSIGNED https://bugzilla.redhat.com/show_bug.cgi?id=1183493
   RFE: virt-rescue: add a flag to autorun the suggested mount commands and chroot, suggested with --suggest
 
@@ -560,92 +485,155 @@
 1213844 ASSIGNED https://bugzilla.redhat.com/show_bug.cgi?id=1213844
   guestfish should reset the console on ^Z
 
-(180 bugs)
+(155 bugs)
 
 --------------------------------------------------
 Bugs in MODIFIED, POST or ON_QA state are fixed.
 You can help by testing the fixes.
 
-1141631 POST https://bugzilla.redhat.com/show_bug.cgi?id=1141631
-  [RFE] virt-v2v should support convert a guest to a dir-pool with using pool's uuid
+1152819 POST https://bugzilla.redhat.com/show_bug.cgi?id=1152819
+  Can not end a running command in virt-rescue by press ^C or other keys, the only way is to exit virt-rescue
+
+1171654 POST https://bugzilla.redhat.com/show_bug.cgi?id=1171654
+  Modify a file in virt-rescue with vi on some linux terminal such as yakuake, can lead to abnormal display in virt-rescue shell
+
+1372671 POST https://bugzilla.redhat.com/show_bug.cgi?id=1372671
+  Graphics type of guest become sdl after converted by virt-v2v -i disk
+
+1374232 POST https://bugzilla.redhat.com/show_bug.cgi?id=1374232
+  selinux relabel fails on RHEL 6.2 guests with "libguestfs error: selinux_relabel: : Success"
+
+1379585 POST https://bugzilla.redhat.com/show_bug.cgi?id=1379585
+  guestfish mistakely parse nbd exportname
+
+1384241 POST https://bugzilla.redhat.com/show_bug.cgi?id=1384241
+  The tar-in command does not allow restoring file capabilities
+
+1429430 POST https://bugzilla.redhat.com/show_bug.cgi?id=1429430
+  Should remove --dcpath and --dcPath options in virt-v2v help info
+
+1429491 POST https://bugzilla.redhat.com/show_bug.cgi?id=1429491
+  Should rename network name of rhv in virt-v2v man page
+
+1429506 POST https://bugzilla.redhat.com/show_bug.cgi?id=1429506
+  RFE: OVMF should be detected on conversion server to prevent failed conversion
+
+1430184 POST https://bugzilla.redhat.com/show_bug.cgi?id=1430184
+  virt-dib should generate sha256 checksum instead of sha512
+
+1430203 POST https://bugzilla.redhat.com/show_bug.cgi?id=1430203
+  Should remove SLES and openSUSE XEN host info in virt-v2v man page
+
+1053847 MODIFIED https://bugzilla.redhat.com/show_bug.cgi?id=1053847
+  Recommended default clock/timer settings
+
+1354507 MODIFIED https://bugzilla.redhat.com/show_bug.cgi?id=1354507
+  virt-v2v conversions from vCenter do not consistently obey the proxy environment variables
 
-1152369 POST https://bugzilla.redhat.com/show_bug.cgi?id=1152369
+1152369 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1152369
   virt-v2v failed to convert RHEL 6.7 UEFI guest: no grub1/grub-legacy or grub2 configuration file was found
 
-1164765 POST https://bugzilla.redhat.com/show_bug.cgi?id=1164765
+1161019 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1161019
+  RFE: Only install RHEV-APT if virt-v2v -o rhev/-o vdsm option is used
+
+1164765 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1164765
   [RFE] Add a new API to scan devices for a btrfs filesystem
 
-1362649 POST https://bugzilla.redhat.com/show_bug.cgi?id=1362649
+1167623 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1167623
+  Remove "If reporting bugs, run virt-v2v with debugging enabled .." message when running virt-p2v
+
+1233093 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1233093
+  QXL driver is not installed for some version of windows guest after convert to RHEV
+
+1237250 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1237250
+  aarch64: libguestfs should now prefer virtio-pci
+
+1255610 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1255610
+  W2K8R2 FC guest has no VGA driver on RHEV
+
+1311890 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1311890
+  virt-v2v: error: libguestfs error: hivex_open: hivex failed to open  /Windows/System32/config/SOFTWARE: Operation not supported
+
+1356550 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1356550
+  QXL driver can't be installed automatically when convert win7 or win2008r2 from kvm to rhev by virt-v2v
+
+1357427 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1357427
+  virtio driver can't be installed for network automatically in win2012 guest sometimes when convert the guest using virt-v2v by auto
+
+1359086 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1359086
+  Rebase libguestfs in RHEL 7.4
+
+1362649 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1362649
   RFE: virt-sysprep does not utilize libguestfs encryption support
 
-1367738 POST https://bugzilla.redhat.com/show_bug.cgi?id=1367738
+1364518 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1364518
+  libguestfs-java: mismatch class version vs java dependency
+
+1367738 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1367738
   Missing bash completion scripts for: virt-diff guestunmount virt-copy-in virt-copy-out virt-customize virt-get-kernel virt-p2v-make-disk virt-p2v-make-kickstart virt-tar-in virt-tar-out virt-v2v-copy-to-local virt-win-reg
 
-1372668 POST https://bugzilla.redhat.com/show_bug.cgi?id=1372668
+1372668 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1372668
   Process status is not normal in windows guest after converted from kvm to rhev by virt-v2v
 
-1374405 POST https://bugzilla.redhat.com/show_bug.cgi?id=1374405
-  There is HTTP 404 error info when convert guest to glance by virt-v2v
-
-1374651 POST https://bugzilla.redhat.com/show_bug.cgi?id=1374651
+1374651 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1374651
   Can't install qxl driver for display device in win7 guest after converting to glance by virt-v2v
 
-1375157 POST https://bugzilla.redhat.com/show_bug.cgi?id=1375157
+1375157 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1375157
   virt-v2v: -i ova: Permission denied when using libvirt and running as root
 
-1377081 POST https://bugzilla.redhat.com/show_bug.cgi?id=1377081
+1377081 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1377081
   virt-p2v manual should update the new dialog information
 
-1378022 POST https://bugzilla.redhat.com/show_bug.cgi?id=1378022
+1378022 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1378022
   There is virt-v2v warning about <listen type='none'> during converting a guest which has listen type='none' in XML
 
-1379240 POST https://bugzilla.redhat.com/show_bug.cgi?id=1379240
+1379240 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1379240
   virt-v2v should not report error any more since libvirt bug 1134592 has been fixed
 
-1379289 POST https://bugzilla.redhat.com/show_bug.cgi?id=1379289
+1379289 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1379289
   RFE: virt-p2v should support mnemonic operations
 
-1379585 POST https://bugzilla.redhat.com/show_bug.cgi?id=1379585
-  guestfish mistakely parse nbd exportname
+1382275 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1382275
+  virt-v2v is pulling in the X11 stack
 
-1383517 POST https://bugzilla.redhat.com/show_bug.cgi?id=1383517
+1383517 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1383517
   virt-v2v fails with /etc/fstab containing btrfs with two or more mount options
 
-1384241 POST https://bugzilla.redhat.com/show_bug.cgi?id=1384241
-  The tar-in command does not allow restoring file capabilities
-
-1390876 POST https://bugzilla.redhat.com/show_bug.cgi?id=1390876
-  "--machine-readable" info should be updated in virt-v2v manual page
+1387213 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1387213
+  [RFE] Add support for importing Debian/Ubuntu guests with virt-v2v
 
-1392798 POST https://bugzilla.redhat.com/show_bug.cgi?id=1392798
+1392798 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1392798
   secrets from libvirt domains are not read
 
-1398070 POST https://bugzilla.redhat.com/show_bug.cgi?id=1398070
+1398070 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1398070
   typo error in man page
 
-1400205 POST https://bugzilla.redhat.com/show_bug.cgi?id=1400205
+1400205 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1400205
   Add --vdsm-compat=1.1 flag for VDSM
 
-1401474 POST https://bugzilla.redhat.com/show_bug.cgi?id=1401474
-  Importing VMs from VMware is failing with error "Inspection field 'i_arch' was 'unknown'"
-
-1402301 POST https://bugzilla.redhat.com/show_bug.cgi?id=1402301
+1402301 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1402301
   Improve OVA import compatibility
 
-1404287 POST https://bugzilla.redhat.com/show_bug.cgi?id=1404287
+1404182 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1404182
+  RFE: virt-resize should support a URL as the outdisk
+
+1404287 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1404287
   qemu-kvm cannot boot RHEL 7 kernel with TCG, hangs at "Probing EDD (edd=off to disable)..."
 
-1053847 MODIFIED https://bugzilla.redhat.com/show_bug.cgi?id=1053847
-  Recommended default clock/timer settings
+1418283 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1418283
+  virt-v2v: appliance runs out of memory running setfiles command
 
-1213691 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1213691
-  Win2012R2 guest fails to boot on iscsi data domain after conversion by virt-v2v
+1425306 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=1425306
+  typo error in virt-tail man page
 
-(25 bugs)
+(45 bugs)
 
 --------------------------------------------------
 These bugs are in the VERIFIED state.
 
+1141631 VERIFIED https://bugzilla.redhat.com/show_bug.cgi?id=1141631
+  [RFE] virt-v2v should support convert a guest to a dir-pool with using pool's uuid
+
 1165564 VERIFIED https://bugzilla.redhat.com/show_bug.cgi?id=1165564
   Provide Reboot/Shutdown button after virt-p2v
 
@@ -664,9 +652,18 @@
 1358332 VERIFIED https://bugzilla.redhat.com/show_bug.cgi?id=1358332
   virt-p2v to become supported tool in RHEL 7.3
 
+1374405 VERIFIED https://bugzilla.redhat.com/show_bug.cgi?id=1374405
+  There is HTTP 404 error info when convert guest to glance by virt-v2v
+
 1388407 VERIFIED https://bugzilla.redhat.com/show_bug.cgi?id=1388407
   virt-sysprep will fail detecting OS if "/usr" is a distinct partition mounted in "/" via fstab
 
-(7 bugs)
+1390876 VERIFIED https://bugzilla.redhat.com/show_bug.cgi?id=1390876
+  "--machine-readable" info should be updated in virt-v2v manual page
+
+1401474 VERIFIED https://bugzilla.redhat.com/show_bug.cgi?id=1401474
+  Importing VMs from VMware is failing with error "Inspection field 'i_arch' was 'unknown'"
+
+(11 bugs)
 
 End of BUGS file.
diff -Nru -w libguestfs-1.34.4/builder/index-validate.c libguestfs-1.34.6/builder/index-validate.c
--- libguestfs-1.34.4/builder/index-validate.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/builder/index-validate.c	2017-03-07 14:34:53.000000000 +0100
@@ -38,7 +38,7 @@
 
 extern int do_parse (struct parse_context *context, FILE *in);
 
-static void
+static void __attribute__((noreturn))
 usage (int exit_status)
 {
   printf ("%s index\n", getprogname ());
diff -Nru -w libguestfs-1.34.4/cat/filesystems.c libguestfs-1.34.6/cat/filesystems.c
--- libguestfs-1.34.4/cat/filesystems.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/cat/filesystems.c	2017-03-07 14:35:02.000000000 +0100
@@ -33,6 +33,7 @@
 
 #include "c-ctype.h"
 #include "human.h"
+#include "intprops.h"
 #include "getprogname.h"
 
 #include "guestfs.h"
@@ -864,7 +865,7 @@
   size_t len = 0;
   char hum[LONGEST_HUMAN_READABLE];
   char num[256];
-  char mbr_id_str[3];
+  char mbr_id_str[INT_BUFSIZE_BOUND (mbr_id)];
 
   if ((columns & COLUMN_NAME))
     strings[len++] = name;
diff -Nru -w libguestfs-1.34.4/cat/ls.c libguestfs-1.34.6/cat/ls.c
--- libguestfs-1.34.4/cat/ls.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/cat/ls.c	2017-03-07 15:12:04.000000000 +0100
@@ -31,7 +31,14 @@
 #include <assert.h>
 #include <time.h>
 #include <libintl.h>
+
+#if MAJOR_IN_MKDEV
+#include <sys/mkdev.h>
+#elif MAJOR_IN_SYSMACROS
 #include <sys/sysmacros.h>
+#else
+#include <sys/types.h>
+#endif
 
 #include "human.h"
 #include "getprogname.h"
diff -Nru -w libguestfs-1.34.4/ChangeLog libguestfs-1.34.6/ChangeLog
--- libguestfs-1.34.4/ChangeLog	2017-01-29 22:44:12.000000000 +0100
+++ libguestfs-1.34.6/ChangeLog	2017-03-08 11:33:43.000000000 +0100
@@ -1,3 +1,503 @@
+commit a0b0cf6bc057505308aa23c1dc9972d7d38e11d9
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Wed Mar 8 10:21:07 2017 +0000
+
+    java: Use String.uppercase instead of uppercase_ascii.
+    
+    Older OCaml doesn't have String.uppercase_ascii, and because this
+    stable branch of libguestfs doesn't use Common_utils in the generator
+    subdirectory we cannot easily use our replacement.
+    
+    Fixes commit bac25e0bfd481e5a7c2a73e88ad2df253e5f1f08.
+
+commit de8dd041e2e60e3c492685e5240e15e27a17e4ae
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Tue Mar 7 19:35:11 2017 +0000
+
+    Version 1.34.5.
+
+commit 3c31a722e88e618d24caad2515ef949aa74621a5
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Tue Mar 7 10:50:25 2017 +0000
+
+    docs: Document vulnerabilities in icoutils wrestool affecting libguestfs.
+    
+    (cherry picked from commit 9f447837ae14651d06228ff77ae9196e258ca3f3)
+    (cherry picked from commit b69421590f78fbec7f5c88da14a156739ef19a1d)
+
+commit d9dfc1531c7a98fd25902e60386413d3d9a407da
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Mon Mar 6 18:11:29 2017 +0000
+
+    v2v: -o local: Check that UEFI firmware is installed before conversion (RHBZ#1429506).
+    
+    Avoids a lengthy conversion followed by failure if we discover at the
+    end that OVMF is not installed.
+    
+    This also changes the order of the methods in -o libvirt and -o qemu
+    so that it matches the order in the class interface, and also
+    logically makes more sense.
+    
+    Thanks: Christopher Brown
+    (cherry picked from commit a05e0fc0e8ffa2638e66ed1d71d41c470eadc4d7)
+    (cherry picked from commit 5059b7c5871aa4861d625041847465e21c2ec4f5)
+
+commit 57b203a803d32a79fe0f4fecbf32f4685626ea43
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Mon Mar 6 16:07:04 2017 +0000
+
+    v2v: Fix typo in previous commit (RHBZ#1374232).
+    
+    Fixes commit 25772a8123a1a800caf3472fb79c8eb3b4a074f3.
+    
+    (cherry picked from commit c6d8d68a4643794128c1d617bc83fc22438cc7c5)
+    (cherry picked from commit ecd4d5b873da97b2e77746881c4c6542c1657e8e)
+
+commit ed825a51522f0675fc3f5255f5cc707709be0091
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Mon Mar 6 10:42:03 2017 +0000
+
+    v2v: Fix invalid regexp in file_contexts file (RHBZ#1374232).
+    
+    Instead of just documenting this bug, fix it in the file_contexts
+    file.
+    
+    Replaces commit ad3c8fe7f49c4991e1aa536856a1a408f55d5409.
+    
+    (cherry picked from commit 25772a8123a1a800caf3472fb79c8eb3b4a074f3)
+    (cherry picked from commit 3a2e64c9feab090b1d35605303f4544901b47201)
+
+commit e4824616d19d400dcfccf762e687e06d5853c835
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Mon Mar 6 14:23:55 2017 +0100
+
+    lib: qemu: improve handling of FILE*
+    
+    Create own blocks for all the parts dealing with FILE*: this way there
+    is no need to recycle the same FILE* variable for all the operations,
+    and have each block its own variable automatically cleaned up.
+    
+    This also fixes a potential undefined behaviour on error: POSIX says
+    that after a call fclose(), a FILE* cannot be used anymore, not even
+    on fclose() failure. The previous behaviour for fclose == -1 was to jump
+    to the error label, which would then try to call fclose() again (since
+    the FILE* pointer was still non-null).
+    
+    (cherry picked from commit d36940992ed81053fdbf8117ce6da30a8fef2a0f)
+    (cherry picked from commit dd9fde4f6fcc7363c61704fdb6bb6cb023dcb8ed)
+
+commit bac25e0bfd481e5a7c2a73e88ad2df253e5f1f08
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Mon Mar 6 13:25:48 2017 +0100
+
+    java: use cleanup handlers for structs (lists) as return values
+    
+    Filling some of their fields may cause the flow to skip to throw the
+    "out of memory" exception, and return immediately.  To avoid leaking the
+    struct, or struct list, from the C implementation, use a cleanup handler
+    so there is no need to manually clean it up.
+    
+    (cherry picked from commit 18ee68ad1240b84739b603ee03e53b552f904e8c)
+    (cherry picked from commit f2e5424b66934425eac0041394d7782d47b1bc7d)
+
+commit 6eddd05078d7e410a355b1f5e5d57747cde8ec38
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Mon Mar 6 11:38:37 2017 +0100
+
+    daemon: btrfs: check end_stringsbuf return values everywhere
+    
+    Make sure to check the return value of end_stringsbuf everywhere, as
+    that would generate invalid string lists.
+    
+    (cherry picked from commit c5fa352087dc4ebc5270ca2ee47487cf9a44d827)
+    (cherry picked from commit ec3b1125a7537f26e4d27c2bc82991f3e9220ec3)
+
+commit 36dbab881cae0b54bb1890b4bfa464d657e7a74a
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Fri Mar 3 14:16:22 2017 +0000
+
+    Use gnulib set_cloexec_flag in a few places.
+    
+    (cherry picked from commit e5474df1acdb0a8eaeb50886c928e0c2ec4ebad7)
+    (cherry picked from commit 39f82bfefb9ad4838eb8276b20213c914ea5b728)
+
+commit 436b5417cd6602ed00504f46d03ad72ded10127c
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Fri Mar 3 14:08:36 2017 +0000
+
+    Use gnulib set_nonblocking_flag function instead of fcntl.
+    
+    The previous code:
+    
+      fcntl (fd, F_SETFL, O_NONBLOCK)
+    
+    was technically incorrect, because it would have reset any
+    other flags on the file descriptor.
+    
+    Thanks: Eric Blake
+    (cherry picked from commit 58d6becc8af28babca0d52cef05eb8826231ae35)
+    (cherry picked from commit c4e4f630937e1c1cd1861ee78f504bd1d51e1528)
+
+commit f598c3a1727a90b9e353dff2eb5e5897f5c3fd07
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Fri Mar 3 13:50:46 2017 +0100
+
+    java: do not try to malloc 0 elements in get_all_event_callbacks
+    
+    In case there are no event handlers registered with the handle,
+    get_all_event_callbacks will count 0 elements, trying to malloc a buffer
+    of that size.  POSIX says that this can result in either a null pointer,
+    or an unusable pointer.
+    
+    Short-circuit get_all_event_callbacks to allocate nothing when there are
+    no events, making sure to use its results only when there were events.
+    
+    (cherry picked from commit c6543875aea501dd1c1db1873276526f3eca494f)
+    (cherry picked from commit 5755eed6d790832f1fd7fab62bd0426e1af27f5f)
+
+commit 8afa265387041c100892515171c5d7c7d147abe4
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Fri Mar 3 13:48:25 2017 +0100
+
+    ruby: do not try to malloc 0 elements in get_all_event_callbacks
+    
+    In case there are no event handlers registered with the handle,
+    get_all_event_callbacks will count 0 elements, trying to malloc a buffer
+    of that size.  POSIX says that this can result in either a null pointer,
+    or an unusable pointer.
+    
+    Short-circuit get_all_event_callbacks to allocate nothing when there are
+    no events, making sure to use its results only when there were events.
+    
+    (cherry picked from commit 4fc85f27c492e8e97b46083a2bcb11c81846f5a0)
+    (cherry picked from commit 43ef692c449b3b3463f6ee9e0272420f4df22399)
+
+commit 598fe2b29fae86cd0359f9c5a62a65dcd3ea21d2
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Fri Mar 3 13:47:48 2017 +0100
+
+    python: do not try to malloc 0 elements in get_all_event_callbacks
+    
+    In case there are no event handlers registered with the handle,
+    get_all_event_callbacks will count 0 elements, trying to malloc a buffer
+    of that size.  POSIX says that this can result in either a null pointer,
+    or an unusable pointer.
+    
+    Short-circuit get_all_event_callbacks to allocate nothing when there are
+    no events, making sure to use its results only when there were events.
+    
+    (cherry picked from commit b890fd2900310c9e4f0781aa3427a3bb114788b1)
+    (cherry picked from commit 63e9cd5536f0d92cb93a01c5ecac764e9c591ca5)
+
+commit 70b745209f44c38bbd6b4a74e73e9df3e852c8a8
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Fri Mar 3 13:40:17 2017 +0100
+
+    ocaml: do not try to malloc 0 elements in get_all_event_callbacks
+    
+    In case there are no event handlers registered with the handle,
+    get_all_event_callbacks will count 0 elements, trying to malloc a buffer
+    of that size.  POSIX says that this can result in either a null pointer,
+    or an unusable pointer.
+    
+    Short-circuit get_all_event_callbacks to allocate nothing when there are
+    no events, making sure to use its results only when there were events.
+    
+    (cherry picked from commit 64e1101631778b4167218adc93101a1587215f02)
+    (cherry picked from commit 4208be6f9762540e7d53a88462b19bc221cf0da5)
+
+commit 7ca8214cf8a0617334ddc84317ccb5f91ac43c14
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Fri Mar 3 11:00:37 2017 +0100
+
+    fish: fully init the msghdr buffers
+    
+    This way no fields (msg_flags in particular) remain uninitialized.
+    
+    (cherry picked from commit be82ba38df31730a2910aeb962bbafa29851f920)
+    (cherry picked from commit 6a3741e8ca884b4a8f1687a1897b4a3d82098d7e)
+
+commit 32ac85e05bde89b9e2c2c0700bba0d07ed476f06
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Fri Mar 3 10:39:10 2017 +0100
+
+    java: fix possible memory leak on error
+    
+    Use CLEANUP_FREE to properly dispose the temporary array used for
+    StringList, DeviceList, FilenameList, and OStringList parameters: this
+    way, an early return (jumping to the ret_error label) will not forget
+    cleaning them up.
+    
+    (cherry picked from commit bd55fa553f16aca12d5c882be26e528f35752ae8)
+    (cherry picked from commit c702acbc1f1c02b9932d2570455045faf7510401)
+
+commit 3e99879829fc12547c6a0915dd8c81c1bd76a1d3
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Thu Mar 2 17:42:10 2017 +0100
+
+    daemon: tsk: properly use GUESTFS_MAX_CHUNK_SIZE
+    
+    Pass to fread the size of the buffer allocated, so it can be filled
+    completely. This is even faster than reading only 4/8 bytes each
+    iteration.
+    
+    (cherry picked from commit 9aef2c7e3a5b9d6dd35378082357d96c921e78c1)
+    (cherry picked from commit b610f82d7bfc9eedcecd311761140fcdc1baf2c1)
+
+commit 8a410fedde457f16e80023832288d855494320cd
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Thu Mar 2 17:32:58 2017 +0100
+
+    java: fix invalid memory access for FBuffer in struct lists
+    
+    When convering FBuffer fields of structs in each element of the return
+    list, make sure to allocate enough buffer to hold also the trailing null
+    character.
+    
+    (cherry picked from commit c9df2d44cd4301b6522cd26d8791093033c4a340)
+    (cherry picked from commit 79d5e0c37a3a6bbba9626040d5359f9bc4fb815c)
+
+commit 4331d4fcc84050b5d271574ccda097bb5ca93766
+Author: Pino Toscano <ptoscano@redhat.com>
+Date:   Thu Mar 2 17:30:16 2017 +0100
+
+    java: link libguestfs_jni against libutils
+    
+    The JNI library uses CLEANUP_FREE macros, whose functions are built in
+    the internal libutils.  Currently, trying to use functions that use
+    CLEANUP_FREE variables will cause the java execution to stop with a
+    symbol lookup error (for guestfs_int_cleanup_free).
+    
+    (cherry picked from commit eeacc86a106471ecf0bf061e1951284fdb262107)
+    (cherry picked from commit a4a6f69835620db8c10b3294f9296421990a62e6)
+
+commit 0a464ac83cbf251369ce8ecf501e72c805f82599
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Thu Mar 2 11:35:38 2017 +0000
+
+    erlang: Rename 'message' to something less generic.
+    
+    It's not possible to define an action which takes a parameter called
+    'message' because the Erlang bindings use that as the name of an
+    internal variable.  Solve this by renaming the Erlang internal
+    variable.
+    
+    Fixes commit 84763d7fca3668c62ee3fe53d0e00a5a672f687b.
+    
+    (cherry picked from commit 843d61c2d405f011853e4f33d3e3306d3d1ca6d3)
+    (cherry picked from commit 5bd55b59faca465a5923d7bd6e8d4ab579530a12)
+
+commit b44fb1fede369aa3919763a6f9da2e5524a43855
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Wed Mar 1 11:36:26 2017 +0000
+
+    Use AC_HEADER_MAJOR to find definitions of major, minor, makedev.
+    
+    Note this requires either the following fix in autoconf:
+    
+    http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=e17a30e98
+    
+    OR gnulib sys_types module plus gnulib
+    commit a512e041120e9012e69afa2f5c3adc196ec4999a (any gnulib more
+    recent than Sep 2016) which corrects the AC_HEADER_MAJOR macro in a
+    similar way.
+    
+    (cherry picked from commit 7a26804569703166a30bbc545986218ede03de04)
+    (cherry picked from commit 3836d61dc83466afe500ad9e5563eab074a0e9b1)
+
+commit 84a3151fadcc07ef42f0b700494d8cc0195771dd
+Author: Dawid Zamirski <dzamirski@datto.com>
+Date:   Thu Mar 2 17:44:40 2017 -0500
+
+    parted: add more udev_settle calls.
+    
+    add udev_settle calls to print_partition_table and
+    sgdisk_info_extract_field because the inspect-os calls
+    guestfs_part_get_parttype and guestfs_part_get_gpt_guid for all
+    parition devices found and this causes intermittent with opening block
+    devices that are certainly present yet RESOLVE_DEVICE macro would fail
+    wiht ENOENT.
+    
+    (cherry picked from commit 4fd6c3ad6e04f6b8133439094c9bcb403c03ca03)
+    (cherry picked from commit b074c09475467f5c5c5620078ba1e3a100091e84)
+
+commit dcb256a646124e98f47efe692e109281c1e5ddbb
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Wed Mar 1 15:07:00 2017 +0000
+
+    ruby: Simplify and fix regression test.
+    
+    This test failed on ppc64le with:
+    
+      Failure:
+        </wrong argument type Fixnum \(expected Array\)/> was expected to be =~
+        <"wrong argument type Integer (expected Array)">.
+    
+    In addition the test generated a warning:
+    
+      tc_800_rhbz507346.rb:29: warning: ambiguous first argument; put parentheses or a space even after `/' operator
+    
+    This commit fixes both of these and also makes it simpler and faster
+    by not bothering to launch the appliance.
+    
+    Fixes commit 227b1eea90713d190a9cf5463af106af0b4eee2c.
+    
+    (cherry picked from commit 9fbdea695b70918b37dd42310bf6ba5a5240c67f)
+    (cherry picked from commit c1dd33e612067c5581416168daad99876666eed6)
+
+commit 17c31eac3cd52dcee1483de16d1aacd67f0a8e17
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Thu Feb 23 13:33:48 2017 +0000
+
+    tests: regressions: Ignore SIGPIPE in test.
+    
+    The test tests/regressions/rhbz914931.c works by causing the daemon to
+    segfault while writing to it.
+    
+    For reasons unknown, when configured --without-libvirt, this causes
+    the test to fail receiving SIGPIPE (exit code 141).  We can prevent
+    this by installing a signal handler to ignore SIGPIPE, so the signal
+    is converted to EPIPE which the code handles properly.
+    
+    (cherry picked from commit a7bd49924445d11fe1843db659e61ca6fb2bb5cf)
+
+commit 2d30305243aba60bdf7b8d38d0c54b79c88aa0a6
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Mon Feb 20 20:09:30 2017 +0000
+
+    p2v: Fix slow test to pass LIBGUESTFS_PATH & LIBGUESTFS_CACHEDIR to virt-v2v.
+    
+    Adding a new optional parameter to hivex_open in
+    commit 1f99251223ccee252ee1259bc2bdb9b64e3df96b reveals a subtle bug
+    in the virt-p2v slow test.
+    
+    Because we didn't pass LIBGUESTFS_PATH through to the instance of
+    virt-v2v, it was running with the new binary and library code, but
+    with the installed appliance (or would have failed if libguestfs
+    wasn't installed on the host when running the test).  In particular
+    this bug was revealed when the new virt-v2v binary passed the
+    GUESTFS_HIVEX_OPEN_UNSAFE flag to the guestfs_hivex_open call, which
+    the (old, installed) daemon did not recognize and rejected with an
+    error.
+    
+    For the same reason we also have to pass in LIBGUESTFS_CACHEDIR to
+    make sure that supermin doesn't reuse the cached appliance from
+    /var/tmp.
+    
+    (cherry picked from commit 08e7506abacee23d635bd37fc9586be3cad9099f)
+
+commit afb5f9880a35ec0a077b16aa6f6312945f076a5e
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Thu Feb 16 14:06:18 2017 +0000
+
+    v2v: Document conversion failure with RHEL 6.2 (RHBZ#1374232).
+    
+    (cherry picked from commit ad3c8fe7f49c4991e1aa536856a1a408f55d5409)
+
+commit 3b716f2285719028aee0f771332ce08d515947ab
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Wed Feb 15 14:24:14 2017 +0000
+
+    docs/C_SOURCE_FILES, po/POTFILES: Remove duplicate files.
+    
+    Because v2v/test-harness is a subdirectory of v2v, and because both
+    paths are listed in $(DIST_SUBDIRS), using find $(DIST_SUBDIRS) will
+    list files in v2v/test-harness twice.  (This probably happens in other
+    directories too, but I noticed it here.)  The easiest fix for this is
+    simply to use 'sort -u' to remove the duplicates.
+    
+    (cherry picked from commit e46b07ca1bef6c63d742e67f731a6244d75eda6d)
+
+commit 81b2faba4bac802e5d68e97bf1195691401b0b14
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Wed Feb 15 13:44:27 2017 +0000
+
+    Update gnulib to latest.
+    
+    (cherry picked from commit 6dcfd85623e9a0dedcae3e9c3ea88af526dc2391)
+
+commit 4585b8822c0516cccc08af717ee7359e04478f3a
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Tue Feb 14 14:52:53 2017 +0000
+
+    GCC 7: Allocate sufficient space for sprintf output.
+    
+    GCC 7.0.1 can determine if there is likely to be sufficient space in
+    the output buffer when using sprintf/snprintf, based on the format
+    string.
+    
+    The errors were all either of this form:
+    
+    bindtests.c:717:29: error: '%zu' directive output may be truncated writing between 1 and 19 bytes into a region of size 16 [-Werror=format-truncation=]
+         snprintf (strs[i], 16, "%zu", i);
+                                 ^~~
+    bindtests.c:717:28: note: directive argument in the range [0, 2305843009213693951]
+         snprintf (strs[i], 16, "%zu", i);
+                                 ^~~~~
+    
+    or this form:
+    
+    sync.c: In function 'fsync_devices':
+    sync.c:108:50: error: '%s' directive output may be truncated writing up to 255 bytes into a region of size 251 [-Werror=format-truncation=]
+           snprintf (dev_path, sizeof dev_path, "/dev/%s", d->d_name);
+                                                      ^~
+    
+    Fixed by converting these into dynamic allocation, or making the
+    output buffer larger, whichever was easier.
+    
+    There is a gnulib macro we can use to make this simpler for integers.
+    It requires a new gnulib module (intprops), but it turns out that we
+    were already pulling that in through dependencies, so the change to
+    bootstrap is a no-op.  (thanks: Dan Berrange)
+    
+    (cherry picked from commit a75076f271680122a17614e4721be48e9251b21c)
+
+commit 634b2d62abf0df74992f2f43ecb7b1282caa67e8
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Tue Feb 14 14:51:39 2017 +0000
+
+    GCC 7: Add __attribute__((noreturn)) to some usage functions which call exit.
+    
+    This happens with GCC 7.0.1.  The errors were all of the form:
+    
+    qemu-speed-test.c: In function 'main':
+    qemu-speed-test.c:153:7: error: this statement may fall through [-Werror=implicit-fallthrough=]
+           usage (EXIT_SUCCESS);
+           ^~~~~~~~~~~~~~~~~~~~
+    qemu-speed-test.c:155:5: note: here
+         default:
+         ^~~~~~~
+    
+    (cherry picked from commit 0b3a5a0b00bf3f677d570281c0fcf06a54bdeca3)
+
+commit 14753d0f62ba4e20bd391214828a33b15e3eb5cc
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Fri Feb 3 15:08:52 2017 +0000
+
+    lib: g->program is now never the empty string.
+    
+    The getprogname module either sets g->program to a string derived from
+    argv[0] or fails at compile time.
+    
+    Fixes commit eea210dbf7d781bc253f927977868dbc6776f20d.
+    
+    (cherry picked from commit 10a5567dc785cb0b840fcc4fdf2c0b9480857492)
+
+commit 4bd9b4090d899823ef217fdd3894ed3e63a36280
+Author: Richard W.M. Jones <rjones@redhat.com>
+Date:   Wed Feb 1 13:36:07 2017 +0000
+
+    v2v: Further increase memory allocated to the appliance (RHBZ#1418283).
+    
+    In commit 08f82f2e3d6975b72340dd59f438862e152a15ef we increased the
+    memory size to 800MB (on x86) so that the semodule command would work.
+    
+    However it has been discovered that another SELinux command takes
+    large amounts of RAM (setfiles during the SELinux relabel step).
+    Therefore increase the memory size again, this time to 2000MB.
+    
+    (cherry picked from commit 2b5173712ba07e3e89926c82a236390a4ea6626a)
+
 commit 554abd2dae8f681b1833de88f42069cac1c9589c
 Author: Richard W.M. Jones <rjones@redhat.com>
 Date:   Sun Jan 29 13:35:57 2017 +0000
diff -Nru -w libguestfs-1.34.4/configure.ac libguestfs-1.34.6/configure.ac
--- libguestfs-1.34.4/configure.ac	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/configure.ac	2017-03-08 11:22:35.000000000 +0100
@@ -20,13 +20,13 @@
 # freeform string.
 m4_define([libguestfs_major],   [1])
 m4_define([libguestfs_minor],   [34])
-m4_define([libguestfs_release], [4])
+m4_define([libguestfs_release], [6])
 
 AC_INIT([libguestfs],libguestfs_major.libguestfs_minor.libguestfs_release)
 
 dnl The date that the above version was released.  This is used in
 dnl the website 'index.html' file.
-AC_SUBST([RELEASE_DATE], [2016-10-27])
+AC_SUBST([RELEASE_DATE], [2016-03-08])
 
 AC_CONFIG_AUX_DIR([build-aux])
 AC_REQUIRE_AUX_FILE([guestfs-test-driver])
diff -Nru -w libguestfs-1.34.4/customize/SELinux_relabel.ml libguestfs-1.34.6/customize/SELinux_relabel.ml
--- libguestfs-1.34.4/customize/SELinux_relabel.ml	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/customize/SELinux_relabel.ml	2017-03-07 15:12:05.000000000 +0100
@@ -44,6 +44,26 @@
       let specfile =
         sprintf "/etc/selinux/%s/contexts/files/file_contexts" policy in
 
+      (* RHEL 6.2 - 6.5 had a malformed specfile that contained the
+       * invalid regular expression "/var/run/spice-vdagentd.\pid"
+       * (instead of "\.p").  This stops setfiles from working on
+       * the guest.
+       *
+       * Because an SELinux relabel writes all over the filesystem,
+       * it seems reasonable to fix this problem in the specfile
+       * at the same time.  (RHBZ#1374232)
+       *)
+      if g#grep ~fixed:true "vdagentd.\\pid" specfile <> [||] then (
+        debug "fixing invalid regular expression in %s" specfile;
+        let old_specfile = specfile ^ "~" in
+        g#mv specfile old_specfile;
+        let content = g#read_file old_specfile in
+        let content =
+          String.replace content "vdagentd.\\pid" "vdagentd\\.pid" in
+        g#write specfile content;
+        g#copy_attributes ~all:true old_specfile specfile
+      );
+
       (* Relabel everything. *)
       g#selinux_relabel ~force:true specfile "/";
 
diff -Nru -w libguestfs-1.34.4/daemon/9p.c libguestfs-1.34.6/daemon/9p.c
--- libguestfs-1.34.4/daemon/9p.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/daemon/9p.c	2017-03-07 14:35:02.000000000 +0100
@@ -71,9 +71,13 @@
     if (d == NULL) break;
 
     if (STRPREFIX (d->d_name, "virtio")) {
-      char mount_tag_path[256];
-      snprintf (mount_tag_path, sizeof mount_tag_path,
-                BUS_PATH "/%s/mount_tag", d->d_name);
+      CLEANUP_FREE char *mount_tag_path = NULL;
+      if (asprintf (&mount_tag_path, BUS_PATH "/%s/mount_tag",
+                    d->d_name) == -1) {
+        reply_with_perror ("asprintf");
+        closedir (dir);
+        return NULL;
+      }
 
       /* A bit unclear, but it looks like the virtio transport allows
        * the mount tag length to be unlimited (or up to 65536 bytes).
diff -Nru -w libguestfs-1.34.4/daemon/btrfs.c libguestfs-1.34.6/daemon/btrfs.c
--- libguestfs-1.34.4/daemon/btrfs.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/daemon/btrfs.c	2017-03-07 15:12:05.000000000 +0100
@@ -2280,7 +2280,8 @@
     }
   }
 
-  end_stringsbuf (&ret);
+  if (end_stringsbuf (&ret) == -1)
+    return NULL;
 
   return take_stringsbuf (&ret);
 }
diff -Nru -w libguestfs-1.34.4/daemon/debug.c libguestfs-1.34.6/daemon/debug.c
--- libguestfs-1.34.4/daemon/debug.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/daemon/debug.c	2017-03-07 14:35:02.000000000 +0100
@@ -161,7 +161,7 @@
   FILE *fp;
   DIR *dir;
   struct dirent *d;
-  char fname[256], link[256];
+  char link[256];
   struct stat statbuf;
 
   fp = open_memstream (&out, &size);
@@ -178,10 +178,18 @@
   }
 
   while ((d = readdir (dir)) != NULL) {
+    CLEANUP_FREE char *fname = NULL;
+
     if (STREQ (d->d_name, ".") || STREQ (d->d_name, ".."))
       continue;
 
-    snprintf (fname, sizeof fname, "/proc/self/fd/%s", d->d_name);
+    if (asprintf (&fname, "/proc/self/fd/%s", d->d_name) == -1) {
+      reply_with_perror ("asprintf");
+      fclose (fp);
+      free (out);
+      closedir (dir);
+      return NULL;
+    }
 
     r = lstat (fname, &statbuf);
     if (r == -1) {
diff -Nru -w libguestfs-1.34.4/daemon/devsparts.c libguestfs-1.34.6/daemon/devsparts.c
--- libguestfs-1.34.4/daemon/devsparts.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/daemon/devsparts.c	2017-03-07 14:35:53.000000000 +0100
@@ -42,7 +42,6 @@
   DIR *dir;
   int err = 0;
   struct dirent *d;
-  char dev_path[256];
   int fd;
 
   dir = opendir ("/sys/block");
@@ -61,7 +60,12 @@
         STREQLEN (d->d_name, "ubd", 3) ||
         STREQLEN (d->d_name, "vd", 2) ||
         STREQLEN (d->d_name, "sr", 2)) {
-      snprintf (dev_path, sizeof dev_path, "/dev/%s", d->d_name);
+      CLEANUP_FREE char *dev_path = NULL;
+      if (asprintf (&dev_path, "/dev/%s", d->d_name) == -1) {
+        reply_with_perror ("asprintf");
+        closedir (dir);
+        return NULL;
+      }
 
       /* Ignore the root device. */
       if (is_root_device (dev_path))
@@ -155,8 +159,12 @@
   struct dirent *d;
   while ((d = readdir (dir)) != NULL) {
     if (STREQLEN (d->d_name, device, strlen (device))) {
-      char part[256];
-      snprintf (part, sizeof part, "/dev/%s", d->d_name);
+      CLEANUP_FREE char *part = NULL;
+      if (asprintf (&part, "/dev/%s", d->d_name) == -1) {
+        perror ("asprintf");
+        closedir (dir);
+        return -1;
+      }
 
       if (add_string (r, part) == -1) {
         closedir (dir);
diff -Nru -w libguestfs-1.34.4/daemon/errnostring-gperf.c libguestfs-1.34.6/daemon/errnostring-gperf.c
--- libguestfs-1.34.4/daemon/errnostring-gperf.c	2017-01-29 22:29:14.000000000 +0100
+++ libguestfs-1.34.6/daemon/errnostring-gperf.c	2017-01-28 13:14:51.000000000 +0100
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.4 */
+/* ANSI-C code produced by gperf version 3.1 */
 /* Command-line: gperf -t errnostring-gperf.gperf  */
 /* Computed positions: -k'2-3,5-6' */
 
@@ -26,7 +26,7 @@
       && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
       && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
 /* The character set is not based on ISO-646.  */
-#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
 #endif
 
 #line 29 "errnostring-gperf.gperf"
@@ -452,7 +452,7 @@
 #endif
 #endif
 static unsigned int
-hash (register const char *str, register unsigned int len)
+hash (register const char *str, register size_t len)
 {
   static const unsigned short asso_values[] =
     {
@@ -483,7 +483,7 @@
       361, 361, 361, 361, 361, 361, 361, 361, 361, 361,
       361, 361, 361, 361, 361, 361
     };
-  register int hval = len;
+  register unsigned int hval = len;
 
   switch (hval)
     {
@@ -504,14 +504,8 @@
   return hval;
 }
 
-#ifdef __GNUC__
-__inline
-#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
-#endif
 const struct errnostring_entry *
-guestfs_int_string_to_errno_lookup (register const char *str, register unsigned int len)
+guestfs_int_string_to_errno_lookup (register const char *str, register size_t len)
 {
   static const struct errnostring_entry wordlist[] =
     {
@@ -866,9 +860,9 @@
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
     {
-      register int key = hash (str, len);
+      register unsigned int key = hash (str, len);
 
-      if (key <= MAX_HASH_VALUE && key >= 0)
+      if (key <= MAX_HASH_VALUE)
         {
           register const char *s = wordlist[key].name;
 
diff -Nru -w libguestfs-1.34.4/daemon/inotify.c libguestfs-1.34.6/daemon/inotify.c
--- libguestfs-1.34.4/daemon/inotify.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/daemon/inotify.c	2017-03-07 15:12:05.000000000 +0100
@@ -29,6 +29,9 @@
 #include <sys/inotify.h>
 #endif
 
+#include "cloexec.h"
+#include "nonblocking.h"
+
 #include "guestfs_protocol.h"
 #include "daemon.h"
 #include "actions.h"
@@ -112,14 +115,14 @@
     reply_with_perror ("inotify_init");
     return -1;
   }
-  if (fcntl (inotify_fd, F_SETFL, O_NONBLOCK) == -1) {
-    reply_with_perror ("fcntl: O_NONBLOCK");
+  if (set_nonblocking_flag (inotify_fd, 1) == -1) {
+    reply_with_perror ("set_nonblocking_flag");
     close (inotify_fd);
     inotify_fd = -1;
     return -1;
   }
-  if (fcntl (inotify_fd, F_SETFD, FD_CLOEXEC) == -1) {
-    reply_with_perror ("fcntl: FD_CLOEXEC");
+  if (set_cloexec_flag (inotify_fd, 1) == -1) {
+    reply_with_perror ("set_cloexec_flag");
     close (inotify_fd);
     inotify_fd = -1;
     return -1;
diff -Nru -w libguestfs-1.34.4/daemon/mknod.c libguestfs-1.34.6/daemon/mknod.c
--- libguestfs-1.34.4/daemon/mknod.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/daemon/mknod.c	2017-03-07 15:12:04.000000000 +0100
@@ -25,7 +25,13 @@
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+
+#if MAJOR_IN_MKDEV
+#include <sys/mkdev.h>
+#elif MAJOR_IN_SYSMACROS
 #include <sys/sysmacros.h>
+/* else it's in sys/types.h, included above */
+#endif
 
 #include "guestfs_protocol.h"
 #include "daemon.h"
diff -Nru -w libguestfs-1.34.4/daemon/parted.c libguestfs-1.34.6/daemon/parted.c
--- libguestfs-1.34.4/daemon/parted.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/daemon/parted.c	2017-03-07 15:12:04.000000000 +0100
@@ -320,6 +320,8 @@
   CLEANUP_FREE char *err = NULL;
   int r;
 
+  udev_settle ();
+
   if (add_m_option)
     r = command (&out, &err, str_parted, "-m", "-s", "--", device,
                  "unit", "b",
@@ -328,6 +330,9 @@
     r = command (&out, &err, str_parted, "-s", "--", device,
                  "unit", "b",
                  "print", NULL);
+
+  udev_settle ();
+
   if (r == -1) {
     int errcode = 0;
 
@@ -665,6 +670,8 @@
     return NULL;
   }
 
+  udev_settle ();
+
   CLEANUP_FREE char *err = NULL;
   int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR,
                     str_sgdisk, device, "-i", partnum_str, NULL);
@@ -674,6 +681,8 @@
     return NULL;
   }
 
+  udev_settle ();
+
   CLEANUP_FREE_STRING_LIST char **lines = split_lines (err);
   if (lines == NULL) {
     reply_with_error ("'%s %s -i %i' returned no output",
diff -Nru -w libguestfs-1.34.4/daemon/sleuthkit.c libguestfs-1.34.6/daemon/sleuthkit.c
--- libguestfs-1.34.4/daemon/sleuthkit.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/daemon/sleuthkit.c	2017-03-07 15:12:05.000000000 +0100
@@ -122,7 +122,7 @@
   /* Send reply message before the file content. */
   reply (NULL, NULL);
 
-  while ((ret = fread (buffer, 1, sizeof buffer, fp)) > 0) {
+  while ((ret = fread (buffer, 1, GUESTFS_MAX_CHUNK_SIZE, fp)) > 0) {
     ret = send_file_write (buffer, ret);
     if (ret < 0) {
       pclose (fp);
diff -Nru -w libguestfs-1.34.4/daemon/sync.c libguestfs-1.34.6/daemon/sync.c
--- libguestfs-1.34.4/daemon/sync.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/daemon/sync.c	2017-03-07 14:35:02.000000000 +0100
@@ -86,7 +86,6 @@
 {
   DIR *dir;
   struct dirent *d;
-  char dev_path[256];
   int fd;
 
   dir = opendir ("/sys/block");
@@ -105,7 +104,11 @@
         STREQLEN (d->d_name, "ubd", 3) ||
         STREQLEN (d->d_name, "vd", 2) ||
         STREQLEN (d->d_name, "sr", 2)) {
-      snprintf (dev_path, sizeof dev_path, "/dev/%s", d->d_name);
+      CLEANUP_FREE char *dev_path = NULL;
+      if (asprintf (&dev_path, "/dev/%s", d->d_name) == -1) {
+        perror ("asprintf");
+        continue;
+      }
 
       /* Ignore the root device. */
       if (is_root_device (dev_path))
diff -Nru -w libguestfs-1.34.4/debian/changelog libguestfs-1.34.6/debian/changelog
--- libguestfs-1.34.4/debian/changelog	2017-01-31 23:53:16.000000000 +0100
+++ libguestfs-1.34.6/debian/changelog	2017-03-09 10:14:14.000000000 +0100
@@ -1,3 +1,9 @@
+libguestfs (1:1.34.6-1) unstable; urgency=medium
+
+  * New upstream version
+
+ -- Hilko Bengen <bengen@debian.org>  Thu, 09 Mar 2017 10:14:14 +0100
+
 libguestfs (1:1.34.4-1) unstable; urgency=medium
 
   * New upstream version
diff -Nru -w libguestfs-1.34.4/diff/diff.c libguestfs-1.34.6/diff/diff.c
--- libguestfs-1.34.4/diff/diff.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/diff/diff.c	2017-03-07 15:12:04.000000000 +0100
@@ -32,7 +32,14 @@
 #include <time.h>
 #include <libintl.h>
 #include <sys/wait.h>
+
+#if MAJOR_IN_MKDEV
+#include <sys/mkdev.h>
+#elif MAJOR_IN_SYSMACROS
 #include <sys/sysmacros.h>
+#else
+#include <sys/types.h>
+#endif
 
 #include "c-ctype.h"
 #include "human.h"
diff -Nru -w libguestfs-1.34.4/docs/guestfs-security.pod libguestfs-1.34.6/docs/guestfs-security.pod
--- libguestfs-1.34.4/docs/guestfs-security.pod	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/docs/guestfs-security.pod	2017-03-07 15:12:05.000000000 +0100
@@ -351,6 +351,28 @@
 OCaml compiler where this bug has been fixed (or ask your Linux distro
 to do the same).
 
+=head2 CVE-2017-5208, CVE-2017-5331, CVE-2017-5332, CVE-2017-5333,
+CVE-2017-6009, CVE-2017-6010, CVE-2017-6011
+
+Multiple vulnerabilities in the L<wrestool(1)> program in the
+C<icoutils> package can be exploited for local code execution on the
+host.
+
+When libguestfs inspection (see L</Inspection security> above) detects
+a Windows XP or Windows 7 guest and is asked to find an associated
+icon for the guest, it will download an untrusted file from the guest
+and run C<wrestool -x> on that file.  This can lead to local code
+execution on the host.  Any disk image or guest can be crafted to look
+like a Windows guest to libguestfs inspection, so just because you do
+not have Windows guests does not help.
+
+Any program calling the libguestfs API C<guestfs_inspect_get_icon>
+could be vulnerable.  This includes L<virt-inspector(1)> and
+L<virt-manager(1)>.
+
+The solution is to update to the non-vulnerable version of icoutils
+(at least 0.31.1).
+
 =head1 SEE ALSO
 
 L<guestfs(3)>,
diff -Nru -w libguestfs-1.34.4/fish/cmds-gperf.c libguestfs-1.34.6/fish/cmds-gperf.c
--- libguestfs-1.34.4/fish/cmds-gperf.c	2017-01-29 22:38:13.000000000 +0100
+++ libguestfs-1.34.6/fish/cmds-gperf.c	2017-01-28 14:26:15.000000000 +0100
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.4 */
+/* ANSI-C code produced by gperf version 3.1 */
 /* Command-line: gperf -t cmds-gperf.gperf  */
 /* Computed positions: -k'1-12,14,17,$' */
 
@@ -26,7 +26,7 @@
       && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
       && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
 /* The character set is not based on ISO-646.  */
-#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
 #endif
 
 #line 30 "cmds-gperf.gperf"
@@ -688,7 +688,7 @@
 #endif
 #endif
 static unsigned int
-hash (register const char *str, register unsigned int len)
+hash (register const char *str, register size_t len)
 {
   static const unsigned short asso_values[] =
     {
@@ -719,7 +719,7 @@
       9163, 9163, 9163, 9163, 9163, 9163, 9163, 9163, 9163, 9163,
       9163, 9163, 9163, 9163, 9163, 9163, 9163
     };
-  register int hval = len;
+  register unsigned int hval = len;
 
   switch (hval)
     {
@@ -772,14 +772,8 @@
   return hval + asso_values[(unsigned char)str[len - 1]];
 }
 
-#ifdef __GNUC__
-__inline
-#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
-#endif
 const struct command_table *
-lookup_fish_command (register const char *str, register unsigned int len)
+lookup_fish_command (register const char *str, register size_t len)
 {
   static const struct command_table wordlist[] =
     {
@@ -5316,9 +5310,9 @@
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
     {
-      register int key = hash (str, len);
+      register unsigned int key = hash (str, len);
 
-      if (key <= MAX_HASH_VALUE && key >= 0)
+      if (key <= MAX_HASH_VALUE)
         {
           register const char *s = wordlist[key].name;
 
diff -Nru -w libguestfs-1.34.4/fish/rc.c libguestfs-1.34.6/fish/rc.c
--- libguestfs-1.34.4/fish/rc.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/fish/rc.c	2017-03-07 15:12:05.000000000 +0100
@@ -101,14 +101,13 @@
   int fd;
   char buf[1];
 
+  memset (&msg, 0, sizeof msg);
+
   msg.msg_iov = &iov;
   msg.msg_iovlen = 1;
   iov.iov_base = buf;
   iov.iov_len = sizeof buf;
 
-  msg.msg_name = NULL;
-  msg.msg_namelen = 0;
-
   msg.msg_control = control_un.control;
   msg.msg_controllen = sizeof (control_un.control);
 
@@ -163,6 +162,7 @@
    * It's unclear if this is hiding a real problem or not.  XXX
    */
   memset (&control_un, 0, sizeof control_un);
+  memset (&msg, 0, sizeof msg);
 
   /* On Linux you have to transmit at least 1 byte of real data. */
   msg.msg_iov = &iov;
@@ -171,9 +171,6 @@
   iov.iov_base = buf;
   iov.iov_len = sizeof buf;
 
-  msg.msg_name = NULL;
-  msg.msg_namelen = 0;
-
   msg.msg_control = control_un.control;
   msg.msg_controllen = sizeof (control_un.control);
 
diff -Nru -w libguestfs-1.34.4/fuse/test-guestunmount-fd.c libguestfs-1.34.6/fuse/test-guestunmount-fd.c
--- libguestfs-1.34.4/fuse/test-guestunmount-fd.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/fuse/test-guestunmount-fd.c	2017-03-07 15:12:05.000000000 +0100
@@ -32,6 +32,7 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 
+#include "cloexec.h"
 #include "ignore-value.h"
 
 #include "guestfs.h"
@@ -77,7 +78,7 @@
 
   /* Parent continues. */
   close (pipefd[0]);
-  ignore_value (fcntl (pipefd[1], F_SETFD, FD_CLOEXEC));
+  ignore_value (set_cloexec_flag (pipefd[1], 1));
 
   /* Sleep a bit and test that the guestunmount process is still running. */
   sleep (2);
diff -Nru -w libguestfs-1.34.4/generator/actions.ml libguestfs-1.34.6/generator/actions.ml
--- libguestfs-1.34.4/generator/actions.ml	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/generator/actions.ml	2017-03-07 14:49:30.000000000 +0100
@@ -3145,8 +3145,8 @@
 main program may optionally set in the handle.
 
 When the handle is created, the program name in the handle is
-set to the basename from C<argv[0]>.  If that was not possible,
-it is set to the empty string (but never C<NULL>)." };
+set to the basename from C<argv[0]>.  The program name can never
+be C<NULL>." };
 
   { defaults with
     name = "get_program"; added = (1, 21, 29);
diff -Nru -w libguestfs-1.34.4/generator/bindtests.ml libguestfs-1.34.6/generator/bindtests.ml
--- libguestfs-1.34.4/generator/bindtests.ml	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/generator/bindtests.ml	2017-03-07 14:35:02.000000000 +0100
@@ -47,6 +47,8 @@
 #include \"guestfs-internal-actions.h\"
 #include \"guestfs_protocol.h\"
 
+#include \"intprops.h\"
+
 int
 guestfs_impl_internal_test_set_output (guestfs_h *g, const char *filename)
 {
@@ -257,8 +259,8 @@
              pr "  }\n";
              pr "  strs = safe_malloc (g, (n+1) * sizeof (char *));\n";
              pr "  for (i = 0; i < n; ++i) {\n";
-             pr "    strs[i] = safe_malloc (g, 16);\n";
-             pr "    snprintf (strs[i], 16, \"%%zu\", i);\n";
+             pr "    strs[i] = safe_malloc (g, INT_BUFSIZE_BOUND (i));\n";
+             pr "    snprintf (strs[i], INT_BUFSIZE_BOUND (i), \"%%zu\", i);\n";
              pr "  }\n";
              pr "  strs[n] = NULL;\n";
              pr "  return strs;\n"
@@ -289,10 +291,10 @@
              pr "  }\n";
              pr "  strs = safe_malloc (g, (n*2+1) * sizeof (*strs));\n";
              pr "  for (i = 0; i < n; ++i) {\n";
-             pr "    strs[i*2] = safe_malloc (g, 16);\n";
-             pr "    strs[i*2+1] = safe_malloc (g, 16);\n";
-             pr "    snprintf (strs[i*2], 16, \"%%zu\", i);\n";
-             pr "    snprintf (strs[i*2+1], 16, \"%%zu\", i);\n";
+             pr "    strs[i*2] = safe_malloc (g, INT_BUFSIZE_BOUND (i));\n";
+             pr "    strs[i*2+1] = safe_malloc (g, INT_BUFSIZE_BOUND (i));\n";
+             pr "    snprintf (strs[i*2], INT_BUFSIZE_BOUND (i), \"%%zu\", i);\n";
+             pr "    snprintf (strs[i*2+1], INT_BUFSIZE_BOUND (i), \"%%zu\", i);\n";
              pr "  }\n";
              pr "  strs[n*2] = NULL;\n";
              pr "  return strs;\n"
diff -Nru -w libguestfs-1.34.4/generator/erlang.ml libguestfs-1.34.6/generator/erlang.ml
--- libguestfs-1.34.4/generator/erlang.ml	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/generator/erlang.ml	2017-03-07 15:12:04.000000000 +0100
@@ -191,7 +191,7 @@
 
 extern guestfs_h *g;
 
-extern ETERM *dispatch (ETERM *message);
+extern ETERM *dispatch (ETERM *args_tuple);
 extern int atom_equals (ETERM *atom, const char *name);
 extern ETERM *make_error (const char *funname);
 extern ETERM *unknown_optarg (const char *funname, ETERM *optargname);
@@ -204,7 +204,7 @@
 extern int get_int (ETERM *term);
 extern int64_t get_int64 (ETERM *term);
 
-#define ARG(i) (ERL_TUPLE_ELEMENT(message,(i)+1))
+#define ARG(i) (ERL_TUPLE_ELEMENT(args_tuple,(i)+1))
 
 ";
 
@@ -228,7 +228,7 @@
 
   List.iter (
     fun { name = name } ->
-      pr "ETERM *run_%s (ETERM *message);\n" name
+      pr "ETERM *run_%s (ETERM *args_tuple);\n" name
   ) (actions |> external_functions |> sort);
 
   pr "\n";
@@ -354,7 +354,7 @@
           c_function = c_function; c_optarg_prefix = c_optarg_prefix } ->
       pr "\n";
       pr "ETERM *\n";
-      pr "run_%s (ETERM *message)\n" name;
+      pr "run_%s (ETERM *args_tuple)\n" name;
       pr "{\n";
 
       iteri (
@@ -545,11 +545,11 @@
 #include \"actions.h\"
 
 ETERM *
-dispatch (ETERM *message)
+dispatch (ETERM *args_tuple)
 {
   ETERM *fun;
 
-  fun = ERL_TUPLE_ELEMENT (message, 0);
+  fun = ERL_TUPLE_ELEMENT (args_tuple, 0);
 
   /* XXX We should use gperf here. */
   ";
@@ -557,7 +557,7 @@
   List.iter (
     fun { name = name; style = ret, args, optargs } ->
       pr "if (atom_equals (fun, \"%s\"))\n" name;
-      pr "    return run_%s (message);\n" name;
+      pr "    return run_%s (args_tuple);\n" name;
       pr "  else ";
   ) (actions |> external_functions |> sort);
 
diff -Nru -w libguestfs-1.34.4/generator/java.ml libguestfs-1.34.6/generator/java.ml
--- libguestfs-1.34.4/generator/java.ml	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/generator/java.ml	2017-03-08 11:20:44.000000000 +0100
@@ -684,13 +684,15 @@
            pr "  jobject jr;\n";
            pr "  jclass cl;\n";
            pr "  jfieldID fl;\n";
-           pr "  struct guestfs_%s *r;\n" typ
+           pr "  CLEANUP_FREE_%s struct guestfs_%s *r = NULL;\n"
+             (String.uppercase typ) typ
        | RStructList (_, typ) ->
            pr "  jobjectArray jr;\n";
            pr "  jclass cl;\n";
            pr "  jfieldID fl;\n";
            pr "  jobject jfl;\n";
-           pr "  struct guestfs_%s_list *r;\n" typ
+           pr "  CLEANUP_FREE_%s_LIST struct guestfs_%s_list *r = NULL;\n"
+             (String.uppercase typ) typ
        | RBufferOut _ ->
            pr "  jstring jr;\n";
            pr "  char *r;\n";
@@ -713,7 +715,7 @@
             pr "  size_t %s_size;\n" n
         | StringList n | DeviceList n | FilenameList n ->
             pr "  size_t %s_len;\n" n;
-            pr "  char **%s;\n" n
+            pr "  CLEANUP_FREE char **%s = NULL;\n" n
         | Bool n
         | Int n ->
             pr "  int %s;\n" n
@@ -732,7 +734,7 @@
           | OBool _ | OInt _ | OInt64 _ | OString _ -> ()
           | OStringList n ->
             pr "  size_t %s_len;\n" n;
-            pr "  char **%s;\n" n
+            pr "  CLEANUP_FREE char **%s = NULL;\n" n
         ) optargs
       );
 
@@ -855,7 +857,6 @@
               n;
             pr "    (*env)->ReleaseStringUTFChars (env, o, %s[i]);\n" n;
             pr "  }\n";
-            pr "  free (%s);\n" n
         | Bool _
         | Int _
         | Int64 _
@@ -873,7 +874,6 @@
               n;
             pr "    (*env)->ReleaseStringUTFChars (env, o, optargs_s.%s[i]);\n" n;
             pr "  }\n";
-            pr "  free (%s);\n" n
       ) optargs;
 
       pr "\n";
@@ -998,7 +998,6 @@
         pr "  fl = (*env)->GetFieldID (env, cl, \"%s\", \"C\");\n" name;
         pr "  (*env)->SetCharField (env, jr, fl, r->%s);\n" name;
   ) cols;
-  pr "  guestfs_free_%s (r);\n" typ;
   pr "  return jr;\n"
 
 and generate_java_struct_list_return typ jtyp cols =
@@ -1036,7 +1035,7 @@
       | FBuffer ->
         pr "    {\n";
         pr "      size_t len = r->val[i].%s_len;\n" name;
-        pr "      CLEANUP_FREE char *s = malloc (len);\n";
+        pr "      CLEANUP_FREE char *s = malloc (len + 1);\n";
         pr "      if (s == NULL) {\n";
         pr "        throw_out_of_memory (env, \"malloc\");\n";
         pr "        goto ret_error;\n";
@@ -1059,7 +1058,6 @@
   pr "    (*env)->SetObjectArrayElement (env, jr, i, jfl);\n";
   pr "  }\n";
   pr "\n";
-  pr "  guestfs_free_%s_list (r);\n" typ;
   pr "  return jr;\n"
 
 and generate_java_makefile_inc () =
diff -Nru -w libguestfs-1.34.4/java/handle.c libguestfs-1.34.6/java/handle.c
--- libguestfs-1.34.4/java/handle.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/java/handle.c	2017-03-07 15:12:05.000000000 +0100
@@ -85,7 +85,7 @@
   (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  size_t len, i;
+  size_t len;
   struct callback_data **data;
 
   /* There is a nasty, difficult to solve case here where the
@@ -96,12 +96,15 @@
 
   guestfs_close (g);
 
+  if (len > 0) {
+    size_t i;
   for (i = 0; i < len; ++i) {
     (*env)->DeleteGlobalRef (env, data[i]->callback);
     free (data[i]);
   }
   free (data);
 }
+}
 
 /* See EventCallback interface. */
 #define METHOD_NAME "event"
@@ -274,6 +277,10 @@
     data = guestfs_next_private (g, &key);
   }
 
+  /* No events, so no need to allocate anything. */
+  if (*len_rtn == 0)
+    return NULL;
+
   /* Copy them into the return array. */
   r = malloc (sizeof (struct callback_data *) * (*len_rtn));
   if (r == NULL) {
diff -Nru -w libguestfs-1.34.4/java/Makefile.am libguestfs-1.34.6/java/Makefile.am
--- libguestfs-1.34.4/java/Makefile.am	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/java/Makefile.am	2017-03-07 15:12:04.000000000 +0100
@@ -114,7 +114,9 @@
 	$(WARN_CFLAGS) $(WERROR_CFLAGS) \
 	$(JNI_CFLAGS)
 
-libguestfs_jni_la_LIBADD = $(top_builddir)/src/libguestfs.la
+libguestfs_jni_la_LIBADD = \
+	$(top_builddir)/src/libutils.la \
+	$(top_builddir)/src/libguestfs.la
 
 libguestfs_jni_la_LDFLAGS = -version-info $(JNI_VERSION_INFO) -shared
 
diff -Nru -w libguestfs-1.34.4/m4/.gitignore libguestfs-1.34.6/m4/.gitignore
--- libguestfs-1.34.4/m4/.gitignore	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/m4/.gitignore	2017-03-07 15:12:05.000000000 +0100
@@ -7,6 +7,7 @@
 /asm-underscore.m4
 /base64.m4
 /btowc.m4
+/builtin-expect.m4
 /byteswap.m4
 /canonicalize-lgpl.m4
 /chdir-long.m4
@@ -40,6 +41,7 @@
 /exponentd.m4
 /extensions.m4
 /extern-inline.m4
+/fatal-signal.m4
 /fchdir.m4
 /fclose.m4
 /fcntl_h.m4
@@ -74,6 +76,7 @@
 /getdtablesize.m4
 /getgroups.m4
 /getline.m4
+/getlogin.m4
 /getlogin_r.m4
 /getopt.m4
 /getpagesize.m4
@@ -104,6 +107,7 @@
 /ioctl.m4
 /i-ring.m4
 /isatty.m4
+/isblank.m4
 /isc-posix.m4
 /langinfo_h.m4
 /largefile.m4
@@ -112,6 +116,7 @@
 /lib-ld.m4
 /lib-link.m4
 /lib-prefix.m4
+/limits-h.m4
 /localcharset.m4
 /localeconv.m4
 /locale-fr.m4
@@ -139,6 +144,7 @@
 /mempcpy.m4
 /memrchr.m4
 /mgetgroups.m4
+/minmax.m4
 /mkdir.m4
 /mkdtemp.m4
 /mkstemps.m4
@@ -151,6 +157,7 @@
 /netdb_h.m4
 /netinet_in_h.m4
 /nocrash.m4
+/nonblocking.m4
 /off_t.m4
 /onceonly.m4
 /openat.m4
@@ -160,9 +167,11 @@
 /perror.m4
 /pipe2.m4
 /pipe.m4
+/posix_spawn.m4
 /pread.m4
 /printf.m4
 /priv-set.m4
+/pthread_rwlock_rdlock.m4
 /ptsname_r.m4
 /putenv.m4
 /quotearg.m4
@@ -180,12 +189,14 @@
 /safe-read.m4
 /safe-write.m4
 /save-cwd.m4
+/sched_h.m4
 /secure_getenv.m4
 /select.m4
 /servent.m4
 /setenv.m4
 /setlocale.m4
 /sigaction.m4
+/sig_atomic_t.m4
 /signalblocking.m4
 /signal_h.m4
 /signed.m4
@@ -196,6 +207,7 @@
 /sockets.m4
 /socklen.m4
 /sockpfaf.m4
+/spawn_h.m4
 /ssize_t.m4
 /stat.m4
 /stat-time.m4
@@ -243,12 +255,16 @@
 /unlinkat.m4
 /unlinkdir.m4
 /unlink.m4
+/usleep.m4
 /utimbuf.m4
 /utimecmp.m4
 /utimens.m4
 /utimes.m4
 /vasnprintf.m4
 /vasprintf.m4
+/vsnprintf.m4
+/waitpid.m4
+/wait-process.m4
 /warnings.m4
 /warn-on-use.m4
 /wchar_h.m4
diff -Nru -w libguestfs-1.34.4/Makefile.am libguestfs-1.34.6/Makefile.am
--- libguestfs-1.34.4/Makefile.am	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/Makefile.am	2017-03-07 15:12:04.000000000 +0100
@@ -312,7 +312,7 @@
 	grep -v -E '/(guestfs|rc)_protocol\.' | \
 	grep -v -E '.*/errnostring\.' | \
 	grep -v -E '.*-gperf\.' | \
-	LC_ALL=C sort > $@-t
+	LC_ALL=C sort -u > $@-t
 	mv $@-t $@
 
 # For more information about translations, see po/Makefile.am.
@@ -324,7 +324,7 @@
 	grep -v -E '/((guestfs|rc)_protocol\.c)$$' | \
 	grep -v -E '^python/utils\.c$$' | \
 	grep -v -E '^perl/lib/Sys/Guestfs\.c$$' | \
-	LC_ALL=C sort > $@-t
+	LC_ALL=C sort -u > $@-t
 	mv $@-t $@
 
 po/POTFILES-ml: configure.ac
diff -Nru -w libguestfs-1.34.4/mllib/dev_t-c.c libguestfs-1.34.6/mllib/dev_t-c.c
--- libguestfs-1.34.4/mllib/dev_t-c.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/mllib/dev_t-c.c	2017-03-07 15:12:04.000000000 +0100
@@ -21,7 +21,13 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/types.h>
+
+#if MAJOR_IN_MKDEV
+#include <sys/mkdev.h>
+#elif MAJOR_IN_SYSMACROS
 #include <sys/sysmacros.h>
+/* else it's in sys/types.h, included above */
+#endif
 
 #include <caml/mlvalues.h>
 
diff -Nru -w libguestfs-1.34.4/ocaml/guestfs-c.c libguestfs-1.34.6/ocaml/guestfs-c.c
--- libguestfs-1.34.4/ocaml/guestfs-c.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/ocaml/guestfs-c.c	2017-03-07 15:12:05.000000000 +0100
@@ -75,7 +75,7 @@
      * user deletes events in one of the callbacks that we are
      * about to invoke, resulting in a double-free.  XXX
      */
-    size_t len, i;
+    size_t len;
     value **roots = get_all_event_callbacks (g, &len);
 
     /* Close the handle: this could invoke callbacks from the list
@@ -85,6 +85,8 @@
     guestfs_close (g);
 
     /* Now unregister the global roots. */
+    if (len > 0) {
+      size_t i;
     for (i = 0; i < len; ++i) {
       caml_remove_generational_global_root (roots[i]);
       free (roots[i]);
@@ -92,6 +94,7 @@
     free (roots);
   }
 }
+}
 
 static struct custom_operations guestfs_custom_operations = {
   (char *) "guestfs_custom_operations",
@@ -310,6 +313,10 @@
     root = guestfs_next_private (g, &key);
   }
 
+  /* No events, so no need to allocate anything. */
+  if (*len_rtn == 0)
+    return NULL;
+
   /* Copy them into the return array. */
   r = malloc (sizeof (value *) * (*len_rtn));
   if (r == NULL) caml_raise_out_of_memory ();
diff -Nru -w libguestfs-1.34.4/p2v/main.c libguestfs-1.34.6/p2v/main.c
--- libguestfs-1.34.4/p2v/main.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/p2v/main.c	2017-03-07 15:12:04.000000000 +0100
@@ -32,7 +32,13 @@
 #include <libintl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+
+#if MAJOR_IN_MKDEV
+#include <sys/mkdev.h>
+#elif MAJOR_IN_SYSMACROS
 #include <sys/sysmacros.h>
+/* else it's in sys/types.h, included above */
+#endif
 
 /* errors in <gtk.h> */
 #pragma GCC diagnostic push
diff -Nru -w libguestfs-1.34.4/p2v/Makefile.am libguestfs-1.34.6/p2v/Makefile.am
--- libguestfs-1.34.4/p2v/Makefile.am	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/p2v/Makefile.am	2017-03-07 15:12:04.000000000 +0100
@@ -299,7 +299,7 @@
 
 test-virt-p2v-pxe.authorized_keys: test-virt-p2v-pxe.id_rsa.pub $(top_builddir)/run
 	rm -f $@ $@-t
-	$(top_builddir)/run sh -c 'echo -n environment=\"PATH=$$PATH\",environment=\"LD_LIBRARY_PATH=$(abs_top_builddir)/src/.libs\"\ ' > $@-t
+	$(top_builddir)/run sh -c 'echo -n environment=\"PATH=$$PATH\",environment=\"LD_LIBRARY_PATH=$(abs_top_builddir)/src/.libs\",environment=\"LIBGUESTFS_PATH=$(abs_top_builddir)/appliance\",environment=\"LIBGUESTFS_CACHEDIR=$(abs_top_builddir)/tmp\"\ ' > $@-t
 	cat $< >> $@-t
 	mv $@-t $@
 
diff -Nru -w libguestfs-1.34.4/python/handle.c libguestfs-1.34.6/python/handle.c
--- libguestfs-1.34.4/python/handle.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/python/handle.c	2017-03-07 15:12:05.000000000 +0100
@@ -71,7 +71,7 @@
   PyThreadState *py_save = NULL;
   PyObject *py_g;
   guestfs_h *g;
-  size_t i, len;
+  size_t len;
   PyObject **callbacks;
 
   if (!PyArg_ParseTuple (args, (char *) "O:guestfs_close", &py_g))
@@ -81,9 +81,14 @@
   /* As in the OCaml bindings, there is a hard to solve case where the
    * caller can delete a callback from within the callback, resulting
    * in a double-free here.  XXX
+   *
+   * Take care of the result of get_all_event_callbacks: NULL can be
+   * both an error (and some PyErr_* was called), and no events.
+   * 'len' is specifically 0 only in the latter case, so filter that
+   * out.
    */
   callbacks = get_all_event_callbacks (g, &len);
-  if (callbacks == NULL)
+  if (len != 0 && callbacks == NULL)
     return NULL;
 
   if (PyEval_ThreadsInitialized ())
@@ -92,9 +97,12 @@
   if (PyEval_ThreadsInitialized ())
     PyEval_RestoreThread (py_save);
 
+  if (len > 0) {
+    size_t i;
   for (i = 0; i < len; ++i)
     Py_XDECREF (callbacks[i]);
   free (callbacks);
+  }
 
   Py_INCREF (Py_None);
   return Py_None;
@@ -260,6 +268,10 @@
     cb = guestfs_next_private (g, &key);
   }
 
+  /* No events, so no need to allocate anything. */
+  if (*len_rtn == 0)
+    return NULL;
+
   /* Copy them into the return array. */
   r = malloc (sizeof (PyObject *) * (*len_rtn));
   if (r == NULL) {
diff -Nru -w libguestfs-1.34.4/ruby/ext/guestfs/handle.c libguestfs-1.34.6/ruby/ext/guestfs/handle.c
--- libguestfs-1.34.4/ruby/ext/guestfs/handle.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/ruby/ext/guestfs/handle.c	2017-03-07 15:12:05.000000000 +0100
@@ -54,7 +54,7 @@
      * the callbacks that we are about to invoke, resulting in
      * a double-free.  XXX
      */
-    size_t len, i;
+    size_t len;
     VALUE **roots = get_all_event_callbacks (g, &len);
 
     /* Close the handle: this could invoke callbacks from the list
@@ -64,6 +64,8 @@
     guestfs_close (g);
 
     /* Now unregister the global roots. */
+    if (len > 0) {
+      size_t i;
     for (i = 0; i < len; ++i) {
       rb_gc_unregister_address (roots[i]);
       free (roots[i]);
@@ -71,6 +73,7 @@
     free (roots);
   }
 }
+}
 
 /* This is the ruby internal alloc function for the class.  We do nothing
  * here except allocate an object containing a NULL guestfs handle.
@@ -384,6 +387,10 @@
     root = guestfs_next_private (g, &key);
   }
 
+  /* No events, so no need to allocate anything. */
+  if (*len_rtn == 0)
+    return NULL;
+
   /* Copy them into the return array. */
   r = malloc (sizeof (VALUE *) * (*len_rtn));
   if (r == NULL)
diff -Nru -w libguestfs-1.34.4/ruby/t/tc_800_rhbz507346.rb libguestfs-1.34.6/ruby/t/tc_800_rhbz507346.rb
--- libguestfs-1.34.4/ruby/t/tc_800_rhbz507346.rb	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/ruby/t/tc_800_rhbz507346.rb	2017-03-07 15:12:04.000000000 +0100
@@ -20,12 +20,10 @@
 class Test800RHBZ507346 < MiniTest::Unit::TestCase
   def test_800_rhbz507346
     g = Guestfs::Guestfs.new()
-    g.add_drive_scratch(10*1024*1024)
-    g.launch()
-
     exception = assert_raises TypeError do
-        g.command(1)
+      g.parse_environment_list(1)
     end
-    assert_match /wrong argument type Fixnum \(expected Array\)/, exception.message
+    assert_match(/wrong argument type .* \(expected Array\)/,
+                 exception.message)
   end
 end
diff -Nru -w libguestfs-1.34.4/src/conn-socket.c libguestfs-1.34.6/src/conn-socket.c
--- libguestfs-1.34.4/src/conn-socket.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/src/conn-socket.c	2017-03-07 15:12:05.000000000 +0100
@@ -37,6 +37,7 @@
 #include <libintl.h>
 
 #include "ignore-value.h"
+#include "nonblocking.h"
 
 #include "guestfs.h"
 #include "guestfs-internal.h"
@@ -129,8 +130,8 @@
   conn->daemon_sock = sock;
 
   /* Make sure the new socket is non-blocking. */
-  if (fcntl (conn->daemon_sock, F_SETFL, O_NONBLOCK) == -1) {
-    perrorf (g, "accept_connection: fcntl");
+  if (set_nonblocking_flag (conn->daemon_sock, 1) == -1) {
+    perrorf (g, "accept_connection: set_nonblocking_flag");
     return -1;
   }
 
@@ -438,14 +439,14 @@
 
   assert (daemon_accept_sock >= 0);
 
-  if (fcntl (daemon_accept_sock, F_SETFL, O_NONBLOCK) == -1) {
-    perrorf (g, "new_conn_socket_listening: fcntl");
+  if (set_nonblocking_flag (daemon_accept_sock, 1) == -1) {
+    perrorf (g, "new_conn_socket_listening: set_nonblocking_flag");
     return NULL;
   }
 
   if (console_sock >= 0) {
-    if (fcntl (console_sock, F_SETFL, O_NONBLOCK) == -1) {
-      perrorf (g, "new_conn_socket_listening: fcntl");
+    if (set_nonblocking_flag (console_sock, 1) == -1) {
+      perrorf (g, "new_conn_socket_listening: set_nonblocking_flag");
       return NULL;
     }
   }
@@ -478,14 +479,14 @@
 
   assert (daemon_sock >= 0);
 
-  if (fcntl (daemon_sock, F_SETFL, O_NONBLOCK) == -1) {
-    perrorf (g, "new_conn_socket_connected: fcntl");
+  if (set_nonblocking_flag (daemon_sock, 1) == -1) {
+    perrorf (g, "new_conn_socket_connected: set_nonblocking_flag");
     return NULL;
   }
 
   if (console_sock >= 0) {
-    if (fcntl (console_sock, F_SETFL, O_NONBLOCK) == -1) {
-      perrorf (g, "new_conn_socket_connected: fcntl");
+    if (set_nonblocking_flag (console_sock, 1) == -1) {
+      perrorf (g, "new_conn_socket_connected: set_nonblocking_flag");
       return NULL;
     }
   }
diff -Nru -w libguestfs-1.34.4/src/errnostring-gperf.c libguestfs-1.34.6/src/errnostring-gperf.c
--- libguestfs-1.34.4/src/errnostring-gperf.c	2017-01-29 22:29:02.000000000 +0100
+++ libguestfs-1.34.6/src/errnostring-gperf.c	2017-01-28 13:14:24.000000000 +0100
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.4 */
+/* ANSI-C code produced by gperf version 3.1 */
 /* Command-line: gperf -t errnostring-gperf.gperf  */
 /* Computed positions: -k'2-3,5-6' */
 
@@ -26,7 +26,7 @@
       && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
       && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
 /* The character set is not based on ISO-646.  */
-#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
 #endif
 
 #line 29 "errnostring-gperf.gperf"
@@ -452,7 +452,7 @@
 #endif
 #endif
 static unsigned int
-hash (register const char *str, register unsigned int len)
+hash (register const char *str, register size_t len)
 {
   static const unsigned short asso_values[] =
     {
@@ -483,7 +483,7 @@
       361, 361, 361, 361, 361, 361, 361, 361, 361, 361,
       361, 361, 361, 361, 361, 361
     };
-  register int hval = len;
+  register unsigned int hval = len;
 
   switch (hval)
     {
@@ -504,14 +504,8 @@
   return hval;
 }
 
-#ifdef __GNUC__
-__inline
-#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
-#endif
 const struct errnostring_entry *
-guestfs_int_string_to_errno_lookup (register const char *str, register unsigned int len)
+guestfs_int_string_to_errno_lookup (register const char *str, register size_t len)
 {
   static const struct errnostring_entry wordlist[] =
     {
@@ -866,9 +860,9 @@
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
     {
-      register int key = hash (str, len);
+      register unsigned int key = hash (str, len);
 
-      if (key <= MAX_HASH_VALUE && key >= 0)
+      if (key <= MAX_HASH_VALUE)
         {
           register const char *s = wordlist[key].name;
 
diff -Nru -w libguestfs-1.34.4/src/fuse.c libguestfs-1.34.6/src/fuse.c
--- libguestfs-1.34.4/src/fuse.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/src/fuse.c	2017-03-07 15:12:04.000000000 +0100
@@ -26,7 +26,13 @@
 #include <sys/wait.h>
 #include <string.h>
 #include <libintl.h>
+
+#if MAJOR_IN_MKDEV
+#include <sys/mkdev.h>
+#elif MAJOR_IN_SYSMACROS
 #include <sys/sysmacros.h>
+/* else it's in sys/types.h, included above */
+#endif
 
 #if HAVE_FUSE
 /* See <attr/xattr.h> */
diff -Nru -w libguestfs-1.34.4/src/qemu.c libguestfs-1.34.6/src/qemu.c
--- libguestfs-1.34.4/src/qemu.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/src/qemu.c	2017-03-07 15:12:05.000000000 +0100
@@ -80,7 +80,6 @@
   struct stat statbuf;
   CLEANUP_FREE char *cachedir = NULL, *qemu_stat_filename = NULL,
     *qemu_help_filename = NULL, *qemu_devices_filename = NULL;
-  FILE *fp;
   int generation;
   uint64_t prev_size, prev_mtime;
 
@@ -101,15 +100,16 @@
   debug (g, "checking for previously cached test results of %s, in %s",
          g->hv, cachedir);
 
+  {
+    CLEANUP_FCLOSE FILE *fp = NULL;
   fp = fopen (qemu_stat_filename, "r");
   if (fp == NULL)
     goto do_test;
   if (fscanf (fp, "%d %" SCNu64 " %" SCNu64,
               &generation, &prev_size, &prev_mtime) != 3) {
-    fclose (fp);
     goto do_test;
   }
-  fclose (fp);
+  }
 
   if (generation == MEMO_GENERATION &&
       (uint64_t) statbuf.st_size == prev_size &&
@@ -153,40 +153,41 @@
   /* Now memoize the qemu output in the cache directory. */
   debug (g, "saving test results");
 
+  {
+    CLEANUP_FCLOSE FILE *fp = NULL;
   fp = fopen (qemu_help_filename, "w");
   if (fp == NULL) {
   help_error:
     perrorf (g, "%s", qemu_help_filename);
-    if (fp != NULL) fclose (fp);
     guestfs_int_free_qemu_data (data);
     return NULL;
   }
   if (fprintf (fp, "%s", data->qemu_help) == -1)
     goto help_error;
-  if (fclose (fp) == -1)
-    goto help_error;
+  }
 
+  {
+    CLEANUP_FCLOSE FILE *fp = NULL;
   fp = fopen (qemu_devices_filename, "w");
   if (fp == NULL) {
   devices_error:
     perrorf (g, "%s", qemu_devices_filename);
-    if (fp != NULL) fclose (fp);
     guestfs_int_free_qemu_data (data);
     return NULL;
   }
   if (fprintf (fp, "%s", data->qemu_devices) == -1)
     goto devices_error;
-  if (fclose (fp) == -1)
-    goto devices_error;
+  }
 
+  {
   /* Write the qemu.stat file last so that its presence indicates that
    * the qemu.help and qemu.devices files ought to exist.
    */
+    CLEANUP_FCLOSE FILE *fp = NULL;
   fp = fopen (qemu_stat_filename, "w");
   if (fp == NULL) {
   stat_error:
     perrorf (g, "%s", qemu_stat_filename);
-    if (fp != NULL) fclose (fp);
     guestfs_int_free_qemu_data (data);
     return NULL;
   }
@@ -199,8 +200,7 @@
                (uint64_t) statbuf.st_mtime,
                g->hv) == -1)
     goto stat_error;
-  if (fclose (fp) == -1)
-    goto stat_error;
+  }
 
   return data;
 }
diff -Nru -w libguestfs-1.34.4/tests/c-api/test-user-cancel.c libguestfs-1.34.6/tests/c-api/test-user-cancel.c
--- libguestfs-1.34.4/tests/c-api/test-user-cancel.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/tests/c-api/test-user-cancel.c	2017-03-07 15:12:05.000000000 +0100
@@ -45,6 +45,8 @@
 
 #include <pthread.h>
 
+#include "cloexec.h"
+
 #include "guestfs.h"
 #include "guestfs-internal-frontend.h"
 
@@ -102,9 +104,9 @@
     error (EXIT_FAILURE, errno, "pipe");
 
   /* We don't want the pipe to be passed to subprocesses. */
-  if (fcntl (fds[0], F_SETFD, FD_CLOEXEC) == -1 ||
-      fcntl (fds[1], F_SETFD, FD_CLOEXEC) == -1)
-    error (EXIT_FAILURE, errno, "fcntl");
+  if (set_cloexec_flag (fds[0], 1) == -1 ||
+      set_cloexec_flag (fds[1], 1) == -1)
+    error (EXIT_FAILURE, errno, "set_cloexec_flag");
 
   data.fd = fds[1];
   snprintf (dev_fd, sizeof dev_fd, "/dev/fd/%d", fds[0]);
@@ -160,9 +162,9 @@
     error (EXIT_FAILURE, errno, "pipe");
 
   /* We don't want the pipe to be passed to subprocesses. */
-  if (fcntl (fds[0], F_SETFD, FD_CLOEXEC) == -1 ||
-      fcntl (fds[1], F_SETFD, FD_CLOEXEC) == -1)
-    error (EXIT_FAILURE, errno, "fcntl");
+  if (set_cloexec_flag (fds[0], 1) == -1 ||
+      set_cloexec_flag (fds[1], 1) == -1)
+    error (EXIT_FAILURE, errno, "set_cloexec_flag");
 
   data.fd = fds[0];
   snprintf (dev_fd, sizeof dev_fd, "/dev/fd/%d", fds[1]);
diff -Nru -w libguestfs-1.34.4/tests/daemon/captive-daemon.pm libguestfs-1.34.6/tests/daemon/captive-daemon.pm
--- libguestfs-1.34.4/tests/daemon/captive-daemon.pm	2017-01-29 22:25:58.000000000 +0100
+++ libguestfs-1.34.6/tests/daemon/captive-daemon.pm	2017-03-08 11:27:11.000000000 +0100
@@ -30,8 +30,8 @@
 # Filled in by autoconf.
 my %var;
 $var{top_builddir} = "../..";
-$var{abs_top_srcdir} = "/tmp/goaljobstmpbb34ea4c181c3623d42bfcc45ad0dc17/libguestfs";
-$var{abs_top_builddir} = "/tmp/goaljobstmpbb34ea4c181c3623d42bfcc45ad0dc17/libguestfs";
+$var{abs_top_srcdir} = "/home/rjones/d/libguestfs-1.34";
+$var{abs_top_builddir} = "/home/rjones/d/libguestfs-1.34";
 $var{VALGRIND} = "valgrind";
 
 # Now we have to substitute the above variables into this one:
diff -Nru -w libguestfs-1.34.4/tests/regressions/rhbz914931.c libguestfs-1.34.6/tests/regressions/rhbz914931.c
--- libguestfs-1.34.4/tests/regressions/rhbz914931.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/tests/regressions/rhbz914931.c	2017-03-07 15:12:04.000000000 +0100
@@ -27,6 +27,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <assert.h>
+#include <signal.h>
 #include <errno.h>
 #include <error.h>
 
@@ -38,6 +39,7 @@
 int
 main (int argc, char *argv[])
 {
+  struct sigaction sa;
   guestfs_h *g;
   int r;
   char *str;
@@ -50,6 +52,14 @@
     exit (77);
   }
 
+  /* This test can fail with SIGPIPE (shows up as exit code 141)
+   * unless we ignore that signal.
+   */
+  memset (&sa, 0, sizeof sa);
+  sa.sa_handler = SIG_IGN;
+  sa.sa_flags = SA_RESTART;
+  sigaction (SIGPIPE, &sa, NULL);
+
   g = guestfs_create ();
   if (!g)
     error (EXIT_FAILURE, errno, "guestfs_create");
diff -Nru -w libguestfs-1.34.4/utils/boot-analysis/boot-analysis.c libguestfs-1.34.6/utils/boot-analysis/boot-analysis.c
--- libguestfs-1.34.4/utils/boot-analysis/boot-analysis.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/utils/boot-analysis/boot-analysis.c	2017-03-07 14:34:53.000000000 +0100
@@ -88,7 +88,7 @@
 static void free_pass_data (void);
 static void free_final_timeline (void);
 
-static void
+static void __attribute__((noreturn))
 usage (int exitcode)
 {
   guestfs_h *g;
diff -Nru -w libguestfs-1.34.4/utils/boot-benchmark/boot-benchmark.c libguestfs-1.34.6/utils/boot-benchmark/boot-benchmark.c
--- libguestfs-1.34.4/utils/boot-benchmark/boot-benchmark.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/utils/boot-benchmark/boot-benchmark.c	2017-03-07 14:34:53.000000000 +0100
@@ -51,7 +51,7 @@
 static guestfs_h *create_handle (void);
 static void add_drive (guestfs_h *g);
 
-static void
+static void __attribute__((noreturn))
 usage (int exitcode)
 {
   guestfs_h *g;
diff -Nru -w libguestfs-1.34.4/utils/qemu-boot/qemu-boot.c libguestfs-1.34.6/utils/qemu-boot/qemu-boot.c
--- libguestfs-1.34.4/utils/qemu-boot/qemu-boot.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/utils/qemu-boot/qemu-boot.c	2017-03-07 14:34:53.000000000 +0100
@@ -74,7 +74,7 @@
 static void *start_thread (void *thread_data_vp);
 static void message_callback (guestfs_h *g, void *opaque, uint64_t event, int event_handle, int flags, const char *buf, size_t buf_len, const uint64_t *array, size_t array_len);
 
-static void
+static void __attribute__((noreturn))
 usage (int exitcode)
 {
   fprintf (stderr,
diff -Nru -w libguestfs-1.34.4/utils/qemu-speed-test/qemu-speed-test.c libguestfs-1.34.6/utils/qemu-speed-test/qemu-speed-test.c
--- libguestfs-1.34.4/utils/qemu-speed-test/qemu-speed-test.c	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/utils/qemu-speed-test/qemu-speed-test.c	2017-03-07 14:34:53.000000000 +0100
@@ -66,7 +66,7 @@
   }
 }
 
-static void
+static void __attribute__((noreturn))
 usage (int exitcode)
 {
   fprintf (stderr,
diff -Nru -w libguestfs-1.34.4/v2v/output_libvirt.ml libguestfs-1.34.6/v2v/output_libvirt.ml
--- libguestfs-1.34.4/v2v/output_libvirt.ml	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/v2v/output_libvirt.ml	2017-03-07 15:12:05.000000000 +0100
@@ -354,8 +354,6 @@
     | None -> sprintf "-o libvirt -os %s" output_pool
     | Some uri -> sprintf "-o libvirt -oc %s -os %s" uri output_pool
 
-  method supported_firmware = [ TargetBIOS; TargetUEFI ]
-
   method prepare_targets source targets =
     (* Get the capabilities from libvirt. *)
     let xml = Domainxml.capabilities ?conn:oc () in
@@ -418,6 +416,8 @@
         { t with target_file = target_file }
     ) targets
 
+  method supported_firmware = [ TargetBIOS; TargetUEFI ]
+
   method check_target_firmware guestcaps target_firmware =
     match target_firmware with
     | TargetBIOS -> ()
diff -Nru -w libguestfs-1.34.4/v2v/output_local.ml libguestfs-1.34.6/v2v/output_local.ml
--- libguestfs-1.34.4/v2v/output_local.ml	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/v2v/output_local.ml	2017-03-07 15:12:05.000000000 +0100
@@ -29,8 +29,6 @@
 
   method as_options = sprintf "-o local -os %s" dir
 
-  method supported_firmware = [ TargetBIOS; TargetUEFI ]
-
   method prepare_targets source targets =
     List.map (
       fun t ->
@@ -38,6 +36,17 @@
         { t with target_file = target_file }
     ) targets
 
+  method supported_firmware = [ TargetBIOS; TargetUEFI ]
+
+  method check_target_firmware guestcaps target_firmware =
+    match target_firmware with
+    | TargetBIOS -> ()
+    | TargetUEFI ->
+       (* This will fail with an error if the target firmware is
+        * not installed on the host.
+        *)
+       ignore (find_uefi_firmware guestcaps.gcaps_arch)
+
   method create_metadata source _ target_buses guestcaps _ target_firmware =
     (* We don't know what target features the hypervisor supports, but
      * assume a common set that libvirt supports.
diff -Nru -w libguestfs-1.34.4/v2v/output_qemu.ml libguestfs-1.34.6/v2v/output_qemu.ml
--- libguestfs-1.34.4/v2v/output_qemu.ml	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/v2v/output_qemu.ml	2017-03-07 15:12:05.000000000 +0100
@@ -31,8 +31,6 @@
   method as_options =
     sprintf "-o qemu -os %s%s" dir (if qemu_boot then " --qemu-boot" else "")
 
-  method supported_firmware = [ TargetBIOS; TargetUEFI ]
-
   method prepare_targets source targets =
     List.map (
       fun t ->
@@ -40,6 +38,8 @@
         { t with target_file = target_file }
     ) targets
 
+  method supported_firmware = [ TargetBIOS; TargetUEFI ]
+
   method check_target_firmware guestcaps target_firmware =
     match target_firmware with
     | TargetBIOS -> ()
diff -Nru -w libguestfs-1.34.4/v2v/v2v.ml libguestfs-1.34.6/v2v/v2v.ml
--- libguestfs-1.34.4/v2v/v2v.ml	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/v2v/v2v.ml	2017-03-07 14:41:28.000000000 +0100
@@ -75,7 +75,7 @@
   );
 
   let g = open_guestfs ~identifier:"v2v" () in
-  g#set_memsize (g#get_memsize () * 8 / 5);
+  g#set_memsize (g#get_memsize () * 20 / 5);
   (* The network is only used by the unconfigure_vmware () function. *)
   g#set_network true;
   (match conversion_mode with
diff -Nru -w libguestfs-1.34.4/v2v/virt-v2v.pod libguestfs-1.34.6/v2v/virt-v2v.pod
--- libguestfs-1.34.4/v2v/virt-v2v.pod	2017-01-29 22:22:40.000000000 +0100
+++ libguestfs-1.34.6/v2v/virt-v2v.pod	2017-03-07 15:12:05.000000000 +0100
@@ -1611,7 +1611,7 @@
 
 Virt-v2v is not especially compute or RAM intensive.  If you are
 running many parallel conversions, then you may consider allocating
-one CPU core and between 512 MB and 1 GB of RAM per running instance.
+one CPU core and 2 GB of RAM per running instance.
 
 Virt-v2v can be run in a virtual machine.
 

Reply to: