Richard W.M. Jones
2017-Jul-24 16:10 UTC
[Libguestfs] [PATCH 0/2] daemon: Replace GUESTFSD_EXT_CMD with --print-external-commands.
Replace GUESTFSD_EXT_CMD with a command line option ‘./guestfsd --print-external-commands’
Richard W.M. Jones
2017-Jul-24 16:10 UTC
[Libguestfs] [PATCH 1/2] daemon: Tidy up the <daemon.h> header file.
No change, just tidy up the header file. --- daemon/daemon.h | 283 ++++++++++++++++++++++++++------------------------------ 1 file changed, 130 insertions(+), 153 deletions(-) diff --git a/daemon/daemon.h b/daemon/daemon.h index be7a3bedc..50ce41306 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -38,7 +38,11 @@ #include "structs-cleanups.h" #include "command.h" -/* Mountables */ +struct stringsbuf { + char **argv; + size_t size; + size_t alloc; +}; typedef struct { mountable_type_t type; @@ -46,40 +50,52 @@ typedef struct { char *volume; } mountable_t; -extern void cleanup_free_mountable (mountable_t *mountable); - -#ifdef HAVE_ATTRIBUTE_CLEANUP -#define CLEANUP_FREE_MOUNTABLE __attribute__((cleanup(cleanup_free_mountable))) -#else -#define CLEANUP_FREE_MOUNTABLE -#endif - -/*-- in guestfsd.c --*/ +/* guestfsd.c */ extern int verbose; - extern int enable_network; - extern int autosync_umount; - extern int test_mode; - extern const char *sysroot; extern size_t sysroot_len; extern char *sysroot_path (const char *path); extern char *sysroot_realpath (const char *path); - extern int is_root_device (const char *device); - extern int xwrite (int sock, const void *buf, size_t len) __attribute__((__warn_unused_result__)); extern int xread (int sock, void *buf, size_t len) __attribute__((__warn_unused_result__)); +extern void sort_strings (char **argv, size_t len); +extern void free_stringslen (char **argv, size_t len); +extern void sort_device_names (char **argv, size_t len); +extern int compare_device_names (const char *a, const char *b); +extern char **take_stringsbuf (struct stringsbuf *sb); +extern void free_stringsbuf (struct stringsbuf *sb); +extern struct stringsbuf split_lines_sb (char *str); +extern char **split_lines (char *str); +extern char **empty_list (void); +extern int is_power_of_2 (unsigned long v); +extern void trim (char *str); +extern int parse_btrfsvol (const char *desc, mountable_t *mountable); +extern int prog_exists (const char *prog); +extern void udev_settle_file (const char *file); +extern void udev_settle (void); +extern int random_name (char *template); +extern char *get_random_uuid (void); +extern char *make_exclude_from_file (const char *function, char *const *excludes); +extern int asprintf_nowarn (char **strp, const char *fmt, ...); +/* mountable functions (in guestfsd.c) */ extern char *mountable_to_string (const mountable_t *mountable); +extern void cleanup_free_mountable (mountable_t *mountable); -/*-- in cleanups.c --*/ +#ifdef HAVE_ATTRIBUTE_CLEANUP +#define CLEANUP_FREE_MOUNTABLE __attribute__((cleanup(cleanup_free_mountable))) +#else +#define CLEANUP_FREE_MOUNTABLE +#endif +/* cleanups.c */ /* These functions are used internally by the CLEANUP_* macros. * Don't call them directly. */ @@ -94,18 +110,14 @@ extern void cleanup_free_stringsbuf (void *ptr); #define CLEANUP_FREE_STRINGSBUF #endif -/*-- in mount.c --*/ - +/* mount.c */ extern int mount_vfs_nochroot (const char *options, const char *vfstype, const mountable_t *mountable, const char *mp, const char *user_mp); +extern int is_root_mounted (void); +extern int is_device_mounted (const char *device); -/* Growable strings buffer. */ -struct stringsbuf { - char **argv; - size_t size; - size_t alloc; -}; +/* stringsbuf.c: growable strings buffer. */ #define DECLARE_STRINGSBUF(v) \ struct stringsbuf (v) = { .argv = NULL, .size = 0, .alloc = 0 } @@ -124,101 +136,130 @@ extern int add_string (struct stringsbuf *sb, const char *str); extern int add_sprintf (struct stringsbuf *sb, const char *fs, ...) __attribute__((format (printf,2,3))); extern int end_stringsbuf (struct stringsbuf *sb); -extern char **take_stringsbuf (struct stringsbuf *sb); -extern void free_stringsbuf (struct stringsbuf *sb); -extern void sort_strings (char **argv, size_t len); -extern void free_stringslen (char **argv, size_t len); -extern void sort_device_names (char **argv, size_t len); -extern int compare_device_names (const char *a, const char *b); - -extern struct stringsbuf split_lines_sb (char *str); -extern char **split_lines (char *str); - -extern char **empty_list (void); - -#define __external_command __attribute__((__section__(".guestfsd_ext_cmds"))) -#define GUESTFSD_EXT_CMD(___ext_cmd_var, ___ext_cmd_str) static const char ___ext_cmd_var[] __external_command = #___ext_cmd_str - -extern int is_power_of_2 (unsigned long v); - -extern void trim (char *str); - -extern int parse_btrfsvol (const char *desc, mountable_t *mountable); - -extern int prog_exists (const char *prog); - -extern void udev_settle_file (const char *file); - -extern void udev_settle (void); - -extern int random_name (char *template); - -extern char *get_random_uuid (void); - -extern char *make_exclude_from_file (const char *function, char *const *excludes); - -extern int asprintf_nowarn (char **strp, const char *fmt, ...); - -/*-- in names.c (auto-generated) --*/ +/* names.c (auto-generated) */ extern const char *function_names[]; -/*-- in proto.c --*/ +/* proto.c */ extern int proc_nr; extern int serial; extern uint64_t progress_hint; extern uint64_t optargs_bitmask; -/*-- in mount.c --*/ -extern int is_root_mounted (void); -extern int is_device_mounted (const char *device); +extern void main_loop (int sock) __attribute__((noreturn)); -/*-- in device-name-translation.c --*/ +/* Ordinary daemon functions use these to indicate errors. + * NB: you don't need to prefix the string with the current command, + * it is added automatically by the client-side RPC stubs. + */ +extern void reply_with_error_errno (int err, const char *fs, ...) + __attribute__((format (printf,2,3))); +extern void reply_with_perror_errno (int err, const char *fs, ...) + __attribute__((format (printf,2,3))); +#define reply_with_error(...) reply_with_error_errno(0, __VA_ARGS__) +#define reply_with_perror(...) reply_with_perror_errno(errno, __VA_ARGS__) +#define reply_with_unavailable_feature(feature) \ + reply_with_error_errno (ENOTSUP, \ + "feature '%s' is not available in this\n" \ + "build of libguestfs. Read 'AVAILABILITY' in the guestfs(3) man page for\n" \ + "how to check for the availability of features.", \ + feature) + +/* Daemon functions that receive files (FileIn) should call + * receive_file for each FileIn parameter. + */ +typedef int (*receive_cb) (void *opaque, const void *buf, size_t len); +extern int receive_file (receive_cb cb, void *opaque); + +/* Daemon functions that receive files (FileIn) can call this + * to cancel incoming transfers (eg. if there is a local error). + */ +extern int cancel_receive (void); + +/* Daemon functions that return files (FileOut) should call + * reply, then send_file_* for each FileOut parameter. + * Note max write size if GUESTFS_MAX_CHUNK_SIZE. + */ +extern int send_file_write (const void *buf, size_t len); +extern int send_file_end (int cancel); + +/* Only call this if there is a FileOut parameter. */ +extern void reply (xdrproc_t xdrp, char *ret); + +/* Notify progress to caller. This function is self-rate-limiting so + * you can call it as often as necessary. Actions which call this + * should add 'Progress' note in generator. + */ +extern void notify_progress (uint64_t position, uint64_t total); + +/* Pulse mode progress messages. + * + * Call pulse_mode_start to start sending progress messages. + * + * Call pulse_mode_end along the ordinary exit path (ie. before a + * reply message is sent). + * + * Call pulse_mode_cancel along all error paths *before* any reply is + * sent. pulse_mode_cancel does not modify errno, so it is safe to + * call it before reply_with_perror. + * + * Pulse mode and ordinary notify_progress must not be mixed. + */ +extern void pulse_mode_start (void); +extern void pulse_mode_end (void); +extern void pulse_mode_cancel (void); + +/* Send a progress message without rate-limiting. This is just + * for debugging - DON'T use it in regular code! + */ +extern void notify_progress_no_ratelimit (uint64_t position, uint64_t total, const struct timeval *now); + +/* device-name-translation.c */ extern char *device_name_translation (const char *device); extern char *reverse_device_name_translation (const char *device); -/*-- in stubs.c (auto-generated) --*/ +/* stubs.c (auto-generated) */ extern void dispatch_incoming_message (XDR *); extern guestfs_int_lvm_pv_list *parse_command_line_pvs (void); extern guestfs_int_lvm_vg_list *parse_command_line_vgs (void); extern guestfs_int_lvm_lv_list *parse_command_line_lvs (void); -/*-- in optgroups.c (auto-generated) --*/ +/* optgroups.c (auto-generated) */ struct optgroup { const char *group; /* Name of the optional group. */ int (*available) (void); /* Function to test availability. */ }; extern struct optgroup optgroups[]; -/*-- in available.c --*/ +/* available.c */ extern int filesystem_available (const char *filesystem); -/*-- in sync.c --*/ +/* sync.c */ /* Use this as a replacement for sync(2). */ extern int sync_disks (void); -/*-- in ext2.c --*/ +/* ext2.c */ /* Confirmed this is true up to ext4 from the Linux sources. */ #define EXT2_LABEL_MAX 16 extern int fstype_is_extfs (const char *fstype); extern int ext_set_uuid_random (const char *device); extern int64_t ext_minimum_size (const char *device); -/*-- in blkid.c --*/ +/* blkid.c */ extern char *get_blkid_tag (const char *device, const char *tag); -/*-- in lvm.c --*/ +/* lvm.c */ extern int lv_canonical (const char *device, char **ret); -/*-- in lvm-filter.c --*/ +/* lvm-filter.c */ extern void copy_lvm (void); extern void start_lvmetad (void); -/*-- in zero.c --*/ +/* zero.c */ extern void wipe_device_before_mkfs (const char *device); -/*-- in augeas.c --*/ +/* augeas.c */ extern void aug_read_version (void); extern void aug_finalize (void); @@ -233,17 +274,16 @@ augeas_is_version (int major, int minor, int patch) return augeas_version >= ((major << 16) | (minor << 8) | patch); } -/*-- hivex.c, journal.c --*/ +/* hivex.c */ extern void hivex_finalize (void); + +/* journal.c */ extern void journal_finalize (void); -/*-- in proto.c --*/ -extern void main_loop (int sock) __attribute__((noreturn)); - -/*-- in xattr.c --*/ +/* xattr.c */ extern int copy_xattrs (const char *src, const char *dest); -/*-- in xfs.c --*/ +/* xfs.c */ /* Documented in xfs_admin(8). */ #define XFS_LABEL_MAX 12 extern int xfs_set_uuid (const char *device, const char *uuid); @@ -251,96 +291,30 @@ extern int xfs_set_uuid_random (const char *device); extern int xfs_set_label (const char *device, const char *label); extern int64_t xfs_minimum_size (const char *path); -/*-- debug-bmap.c --*/ +/* debug-bmap.c */ extern char *debug_bmap (const char *subcmd, size_t argc, char *const *const argv); extern char *debug_bmap_file (const char *subcmd, size_t argc, char *const *const argv); extern char *debug_bmap_device (const char *subcmd, size_t argc, char *const *const argv); -/*-- in btrfs.c --*/ +/* btrfs.c */ extern char *btrfs_get_label (const char *device); extern int btrfs_set_label (const char *device, const char *label); extern int btrfs_set_uuid (const char *device, const char *uuid); extern int btrfs_set_uuid_random (const char *device); extern int64_t btrfs_minimum_size (const char *path); -/*-- in ntfs.c --*/ +/* ntfs.c */ extern char *ntfs_get_label (const char *device); extern int ntfs_set_label (const char *device, const char *label); extern int64_t ntfs_minimum_size (const char *device); -/*-- in swap.c --*/ +/* swap.c */ extern int swap_set_uuid (const char *device, const char *uuid); extern int swap_set_label (const char *device, const char *label); -/*-- in upload.c --*/ +/* upload.c */ extern int upload_to_fd (int fd, const char *filename); -/* ordinary daemon functions use these to indicate errors - * NB: you don't need to prefix the string with the current command, - * it is added automatically by the client-side RPC stubs. - */ -extern void reply_with_error_errno (int err, const char *fs, ...) - __attribute__((format (printf,2,3))); -extern void reply_with_perror_errno (int err, const char *fs, ...) - __attribute__((format (printf,2,3))); -#define reply_with_error(...) reply_with_error_errno(0, __VA_ARGS__) -#define reply_with_perror(...) reply_with_perror_errno(errno, __VA_ARGS__) -#define reply_with_unavailable_feature(feature) \ - reply_with_error_errno (ENOTSUP, \ - "feature '%s' is not available in this\n" \ - "build of libguestfs. Read 'AVAILABILITY' in the guestfs(3) man page for\n" \ - "how to check for the availability of features.", \ - feature) - -/* daemon functions that receive files (FileIn) should call - * receive_file for each FileIn parameter. - */ -typedef int (*receive_cb) (void *opaque, const void *buf, size_t len); -extern int receive_file (receive_cb cb, void *opaque); - -/* daemon functions that receive files (FileIn) can call this - * to cancel incoming transfers (eg. if there is a local error). - */ -extern int cancel_receive (void); - -/* daemon functions that return files (FileOut) should call - * reply, then send_file_* for each FileOut parameter. - * Note max write size if GUESTFS_MAX_CHUNK_SIZE. - */ -extern int send_file_write (const void *buf, size_t len); -extern int send_file_end (int cancel); - -/* only call this if there is a FileOut parameter */ -extern void reply (xdrproc_t xdrp, char *ret); - -/* Notify progress to caller. This function is self-rate-limiting so - * you can call it as often as necessary. Actions which call this - * should add 'Progress' note in generator. - */ -extern void notify_progress (uint64_t position, uint64_t total); - -/* Pulse mode progress messages. - * - * Call pulse_mode_start to start sending progress messages. - * - * Call pulse_mode_end along the ordinary exit path (ie. before a - * reply message is sent). - * - * Call pulse_mode_cancel along all error paths *before* any reply is - * sent. pulse_mode_cancel does not modify errno, so it is safe to - * call it before reply_with_perror. - * - * Pulse mode and ordinary notify_progress must not be mixed. - */ -extern void pulse_mode_start (void); -extern void pulse_mode_end (void); -extern void pulse_mode_cancel (void); - -/* Send a progress message without rate-limiting. This is just - * for debugging - DON'T use it in regular code! - */ -extern void notify_progress_no_ratelimit (uint64_t position, uint64_t total, const struct timeval *now); - /* Helper for functions that need a root filesystem mounted. */ #define NEED_ROOT(is_filein,fail_stmt) \ do { \ @@ -423,4 +397,7 @@ extern void notify_progress_no_ratelimit (uint64_t position, uint64_t total, con } \ } while (0) +#define __external_command __attribute__((__section__(".guestfsd_ext_cmds"))) +#define GUESTFSD_EXT_CMD(___ext_cmd_var, ___ext_cmd_str) static const char ___ext_cmd_var[] __external_command = #___ext_cmd_str + #endif /* GUESTFSD_DAEMON_H */ -- 2.13.2
Richard W.M. Jones
2017-Jul-24 16:10 UTC
[Libguestfs] [PATCH 2/2] daemon: Replace GUESTFSD_EXT_CMD with --print-external-commands.
GUESTFSD_EXT_CMD is used by OpenSUSE to track which external commands are run by the daemon and package those commands into the appliance. However because this uses linker trickery it won't work from OCaml code. Replace it with a [nearly] standard C mechanism. Files still have to declare the external commands they will use, eg: DECLARE_EXTERNAL_COMMANDS ("btrfs", "btrfstune", "btrfsck") and these are collected up by a constructor into an array and can be printed at build time by doing: $ ./daemon/guestfsd --print-external-commands base64 blkid blkls blockdev btrfs btrfsck &c. This also adds a simple test. --- daemon/9p.c | 5 +- daemon/Makefile.am | 5 ++ daemon/available.c | 7 +-- daemon/base64.c | 6 +- daemon/blkid.c | 10 +-- daemon/blockdev.c | 4 +- daemon/btrfs.c | 110 ++++++++++++++++----------------- daemon/checksum.c | 28 ++++----- daemon/cmp.c | 4 +- daemon/compress.c | 24 +++---- daemon/cpio.c | 4 +- daemon/cpmv.c | 11 ++-- daemon/daemon.h | 11 +++- daemon/dd.c | 4 +- daemon/debug.c | 34 ++++------ daemon/df.c | 6 +- daemon/dir.c | 4 +- daemon/dmesg.c | 4 +- daemon/du.c | 4 +- daemon/ext2.c | 49 +++++++-------- daemon/file.c | 10 ++- daemon/find.c | 4 +- daemon/findfs.c | 4 +- daemon/fsck.c | 4 +- daemon/fstrim.c | 6 +- daemon/grub.c | 6 +- daemon/guestfsd.c | 72 +++++++++++++++++++-- daemon/guestfsd.pod | 7 +++ daemon/hotplug.c | 4 +- daemon/initrd.c | 5 +- daemon/inotify.c | 5 +- daemon/isoinfo.c | 4 +- daemon/labels.c | 4 +- daemon/ldm.c | 22 +++---- daemon/link.c | 4 +- daemon/ls.c | 6 +- daemon/luks.c | 14 ++--- daemon/lvm-filter.c | 19 +++--- daemon/lvm.c | 68 ++++++++++---------- daemon/md.c | 10 +-- daemon/mkfs.c | 7 +-- daemon/modprobe.c | 6 +- daemon/mount.c | 15 +++-- daemon/ntfs.c | 22 +++---- daemon/ntfsclone.c | 7 +-- daemon/parted.c | 66 ++++++++++---------- daemon/rsync.c | 6 +- daemon/scrub.c | 10 +-- daemon/selinux-relabel.c | 8 +-- daemon/sfdisk.c | 9 ++- daemon/sh.c | 20 +++--- daemon/sleuthkit.c | 13 ++-- daemon/squashfs.c | 6 +- daemon/swap.c | 29 ++++----- daemon/syslinux.c | 11 ++-- daemon/tar.c | 6 +- daemon/test-print-external-commands.sh | 23 +++++++ daemon/xfs.c | 17 +++-- daemon/zero.c | 10 +-- daemon/zerofree.c | 6 +- 60 files changed, 479 insertions(+), 430 deletions(-) diff --git a/daemon/9p.c b/daemon/9p.c index fc5b01736..b29d41d85 100644 --- a/daemon/9p.c +++ b/daemon/9p.c @@ -33,7 +33,8 @@ #include "actions.h" #define BUS_PATH "/sys/bus/virtio/drivers/9pnet_virtio" -GUESTFSD_EXT_CMD(str_mount, mount); + +DECLARE_EXTERNAL_COMMANDS ("mount") static char *read_whole_file (const char *filename); @@ -215,7 +216,7 @@ do_mount_9p (const char *mount_tag, const char *mountpoint, const char *options) } r = command (NULL, &err, - str_mount, "-o", opts, "-t", "9p", mount_tag, mp, NULL); + "mount", "-o", opts, "-t", "9p", mount_tag, mp, NULL); if (r == -1) { reply_with_error ("%s on %s: %s", mount_tag, mountpoint, err); return -1; diff --git a/daemon/Makefile.am b/daemon/Makefile.am index eedf09d52..8f7258343 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -220,6 +220,11 @@ guestfsd_CFLAGS = \ $(YAJL_CFLAGS) \ $(PCRE_CFLAGS) +# Tests. + +TESTS_ENVIRONMENT = $(top_builddir)/run --test +TESTS = test-print-external-commands.sh + # Manual pages and HTML files for the website. if INSTALL_DAEMON man_MANS = guestfsd.8 diff --git a/daemon/available.c b/daemon/available.c index 977c4dead..dfffe5da1 100644 --- a/daemon/available.c +++ b/daemon/available.c @@ -30,8 +30,7 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_grep, grep); -GUESTFSD_EXT_CMD(str_modprobe, modprobe); +DECLARE_EXTERNAL_COMMANDS ("grep", "modprobe") int do_internal_feature_available (const char *group) @@ -79,7 +78,7 @@ test_proc_filesystems (const char *filesystem) return -1; } - r = commandr (NULL, &err, str_grep, regex, "/proc/filesystems", NULL); + r = commandr (NULL, &err, "grep", regex, "/proc/filesystems", NULL); if (r == -1 || r >= 2) { fprintf (stderr, "grep /proc/filesystems: %s", err); return -1; @@ -92,7 +91,7 @@ test_proc_filesystems (const char *filesystem) static void modprobe (const char *module) { - ignore_value (command (NULL, NULL, str_modprobe, module, NULL)); + ignore_value (command (NULL, NULL, "modprobe", module, NULL)); } /* Internal function for testing if a filesystem is available. Note diff --git a/daemon/base64.c b/daemon/base64.c index 3468c3342..79b31a805 100644 --- a/daemon/base64.c +++ b/daemon/base64.c @@ -30,7 +30,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_base64, base64); +DECLARE_EXTERNAL_COMMANDS ("base64") static int write_cb (void *fd_ptr, const void *buf, size_t len) @@ -48,7 +48,7 @@ do_base64_in (const char *file) CLEANUP_FREE char *cmd = NULL; int fd; - if (asprintf_nowarn (&cmd, "%s -d -i > %R", str_base64, file) == -1) { + if (asprintf_nowarn (&cmd, "%s -d -i > %R", "base64", file) == -1) { err = errno; cancel_receive (); errno = err; @@ -132,7 +132,7 @@ do_base64_out (const char *file) } /* Construct the command. */ - if (asprintf_nowarn (&cmd, "%s %Q", str_base64, buf) == -1) { + if (asprintf_nowarn (&cmd, "%s %Q", "base64", buf) == -1) { reply_with_perror ("asprintf"); return -1; } diff --git a/daemon/blkid.c b/daemon/blkid.c index 1fe5ff93a..8de025495 100644 --- a/daemon/blkid.c +++ b/daemon/blkid.c @@ -28,7 +28,7 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_blkid, blkid); +DECLARE_EXTERNAL_COMMANDS ("blkid") char * get_blkid_tag (const char *device, const char *tag) @@ -39,7 +39,7 @@ get_blkid_tag (const char *device, const char *tag) size_t len; r = commandr (&out, &err, - str_blkid, + "blkid", /* Adding -c option kills all caching, even on RHEL 5. */ "-c", "/dev/null", "-o", "value", "-s", tag, device, NULL); @@ -107,7 +107,7 @@ test_blkid_p_i_opt (void) int r; CLEANUP_FREE char *err = NULL, *err2 = NULL; - r = commandr (NULL, &err, str_blkid, "-p", "/dev/null", NULL); + r = commandr (NULL, &err, "blkid", "-p", "/dev/null", NULL); if (r == -1) { /* This means we couldn't run the blkid command at all. */ command_failed: @@ -119,7 +119,7 @@ test_blkid_p_i_opt (void) return 0; } - r = commandr (NULL, &err2, str_blkid, "-i", NULL); + r = commandr (NULL, &err2, "blkid", "-i", NULL); if (r == -1) goto command_failed; @@ -140,7 +140,7 @@ blkid_with_p_i_opt (const char *device) CLEANUP_FREE_STRING_LIST char **lines = NULL; CLEANUP_FREE_STRINGSBUF DECLARE_STRINGSBUF (ret); - r = command (&out, &err, str_blkid, "-c", "/dev/null", + r = command (&out, &err, "blkid", "-c", "/dev/null", "-p", "-i", "-o", "export", device, NULL); if (r == -1) { reply_with_error ("%s", err); diff --git a/daemon/blockdev.c b/daemon/blockdev.c index 6e8821d92..6fdb54cc1 100644 --- a/daemon/blockdev.c +++ b/daemon/blockdev.c @@ -28,7 +28,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_blockdev, blockdev); +DECLARE_EXTERNAL_COMMANDS ("blockdev") /* These functions are all about using the blockdev command, so * we centralize it in one call. @@ -40,7 +40,7 @@ call_blockdev (const char *device, const char *switc, int extraarg, int prints) int64_t rv; CLEANUP_FREE char *out = NULL, *err = NULL; const char *argv[] = { - str_blockdev, + "blockdev", switc, NULL, NULL, diff --git a/daemon/btrfs.c b/daemon/btrfs.c index 5f1e5d1d0..c7f08fb46 100644 --- a/daemon/btrfs.c +++ b/daemon/btrfs.c @@ -33,12 +33,8 @@ #include "c-ctype.h" #include "ignore-value.h" -GUESTFSD_EXT_CMD(str_btrfs, btrfs); -GUESTFSD_EXT_CMD(str_btrfstune, btrfstune); -GUESTFSD_EXT_CMD(str_btrfsck, btrfsck); -GUESTFSD_EXT_CMD(str_mkfs_btrfs, mkfs.btrfs); -GUESTFSD_EXT_CMD(str_umount, umount); -GUESTFSD_EXT_CMD(str_btrfsimage, btrfs-image); +DECLARE_EXTERNAL_COMMANDS ("btrfs", "btrfstune", "btrfsck", "mkfs.btrfs", + "umount", "btrfs-image") COMPILE_REGEXP (re_btrfs_subvolume_list, "ID\\s+(\\d+).*\\s" @@ -51,7 +47,7 @@ int optgroup_btrfs_available (void) { return test_mode || - (prog_exists (str_btrfs) && filesystem_available ("btrfs") > 0); + (prog_exists ("btrfs") && filesystem_available ("btrfs") > 0); } char * @@ -62,7 +58,7 @@ btrfs_get_label (const char *device) char *out = NULL; size_t len; - r = command (&out, &err, str_btrfs, "filesystem", "label", + r = command (&out, &err, "btrfs", "filesystem", "label", device, NULL); if (r == -1) { reply_with_error ("%s", err); @@ -84,7 +80,7 @@ btrfs_set_label (const char *device, const char *label) int r; CLEANUP_FREE char *err = NULL; - r = command (NULL, &err, str_btrfs, "filesystem", "label", + r = command (NULL, &err, "btrfs", "filesystem", "label", device, label, NULL); if (r == -1) { reply_with_error ("%s", err); @@ -110,7 +106,7 @@ do_btrfs_filesystem_resize (const char *filesystem, int64_t size) size_t i = 0; char size_str[32]; - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "filesystem"); ADD_ARG (argv, i, "resize"); @@ -169,7 +165,7 @@ do_mkfs_btrfs (char *const *devices, return -1; } - ADD_ARG (argv, i, str_mkfs_btrfs); + ADD_ARG (argv, i, "mkfs.btrfs"); /* Optional arguments. */ if (optargs_bitmask & GUESTFS_MKFS_BTRFS_ALLOCSTART_BITMASK) { @@ -290,7 +286,7 @@ do_btrfs_subvolume_snapshot (const char *source, const char *dest, int ro, return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "subvolume"); ADD_ARG (argv, i, "snapshot"); @@ -333,7 +329,7 @@ do_btrfs_subvolume_delete (const char *subvolume) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "subvolume"); ADD_ARG (argv, i, "delete"); ADD_ARG (argv, i, subvolume_buf); @@ -364,7 +360,7 @@ do_btrfs_subvolume_create (const char *dest, const char *qgroupid) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "subvolume"); ADD_ARG (argv, i, "create"); @@ -426,7 +422,7 @@ umount (char *fs_buf, const mountable_t *fs) if (fs->type != MOUNTABLE_PATH) { CLEANUP_FREE char *err = NULL; - if (command (NULL, &err, str_umount, fs_buf, NULL) == -1) { + if (command (NULL, &err, "umount", fs_buf, NULL) == -1) { reply_with_error ("umount: %s", err); return -1; } @@ -455,7 +451,7 @@ do_btrfs_subvolume_list (const mountable_t *fs) if (!fs_buf) return NULL; - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "subvolume"); ADD_ARG (argv, i, "list"); ADD_ARG (argv, i, fs_buf); @@ -590,7 +586,7 @@ do_btrfs_subvolume_set_default (int64_t id, const char *fs) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "subvolume"); ADD_ARG (argv, i, "set-default"); ADD_ARG (argv, i, buf); @@ -622,7 +618,7 @@ do_btrfs_subvolume_get_default (const mountable_t *fs) if (fs_buf == NULL) goto error; - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "subvolume"); ADD_ARG (argv, i, "get-default"); ADD_ARG (argv, i, fs_buf); @@ -661,7 +657,7 @@ do_btrfs_filesystem_sync (const char *fs) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "filesystem"); ADD_ARG (argv, i, "sync"); ADD_ARG (argv, i, fs_buf); @@ -692,7 +688,7 @@ do_btrfs_filesystem_balance (const char *fs) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "balance"); ADD_ARG (argv, i, fs_buf); ADD_ARG (argv, i, NULL); @@ -715,7 +711,7 @@ test_btrfs_device_add_needs_force (void) int r; CLEANUP_FREE char *out = NULL, *err = NULL; - r = command (&out, &err, str_btrfs, "device", "add", "--help", NULL); + r = command (&out, &err, "btrfs", "device", "add", "--help", NULL); if (r == -1) { reply_with_error ("%s: %s", "btrfs device add --help", err); return -1; @@ -756,7 +752,7 @@ do_btrfs_device_add (char *const *devices, const char *fs) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "device"); ADD_ARG (argv, i, "add"); @@ -799,7 +795,7 @@ do_btrfs_device_delete (char *const *devices, const char *fs) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "device"); ADD_ARG (argv, i, "delete"); @@ -840,7 +836,7 @@ test_btrfstune_uuid_opt (void) CLEANUP_FREE char *err = NULL; - int r = commandr (NULL, &err, str_btrfstune, "--help", NULL); + int r = commandr (NULL, &err, "btrfstune", "--help", NULL); if (r == -1) { reply_with_error ("btrfstune: %s", err); @@ -868,7 +864,7 @@ do_btrfs_set_seeding (const char *device, int svalue) const char *s_value = svalue ? "1" : "0"; - r = commandr (NULL, &err, str_btrfstune, "-S", s_value, device, NULL); + r = commandr (NULL, &err, "btrfstune", "-S", s_value, device, NULL); if (r == -1) { reply_with_error ("%s: %s", device, err); return -1; @@ -887,7 +883,7 @@ btrfs_set_uuid (const char *device, const char *uuid) if (has_uuid_opts <= 0) NOT_SUPPORTED (-1, "btrfs filesystems' UUID cannot be changed"); - r = commandr (NULL, &err, str_btrfstune, "-f", "-U", uuid, device, NULL); + r = commandr (NULL, &err, "btrfstune", "-f", "-U", uuid, device, NULL); if (r == -1) { reply_with_error ("%s: %s", device, err); @@ -907,7 +903,7 @@ btrfs_set_uuid_random (const char *device) if (has_uuid_opts <= 0) NOT_SUPPORTED (-1, "btrfs filesystems' UUID cannot be changed"); - r = commandr (NULL, &err, str_btrfstune, "-f", "-u", device, NULL); + r = commandr (NULL, &err, "btrfstune", "-f", "-u", device, NULL); if (r == -1) { reply_with_error ("%s: %s", device, err); return -1; @@ -927,7 +923,7 @@ do_btrfs_fsck (const char *device, int64_t superblock, int repair) const char *argv[MAX_ARGS]; char super_s[64]; - ADD_ARG (argv, i, str_btrfsck); + ADD_ARG (argv, i, "btrfsck"); /* Optional arguments. */ if (optargs_bitmask & GUESTFS_BTRFS_FSCK_SUPERBLOCK_BITMASK) { @@ -1025,7 +1021,7 @@ do_btrfs_subvolume_show (const char *subvolume) return NULL; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "subvolume"); ADD_ARG (argv, i, "show"); ADD_ARG (argv, i, subvolume_buf); @@ -1164,7 +1160,7 @@ do_btrfs_quota_enable (const mountable_t *fs, int enable) if (fs_buf == NULL) goto error; - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "quota"); if (enable) ADD_ARG (argv, i, "enable"); @@ -1199,7 +1195,7 @@ do_btrfs_quota_rescan (const mountable_t *fs) if (fs_buf == NULL) goto error; - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "quota"); ADD_ARG (argv, i, "rescan"); ADD_ARG (argv, i, fs_buf); @@ -1234,7 +1230,7 @@ do_btrfs_qgroup_limit (const char *subvolume, int64_t size) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "qgroup"); ADD_ARG (argv, i, "limit"); snprintf (size_str, sizeof size_str, "%" PRIi64, size); @@ -1267,7 +1263,7 @@ do_btrfs_qgroup_create (const char *qgroupid, const char *subvolume) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "qgroup"); ADD_ARG (argv, i, "create"); ADD_ARG (argv, i, qgroupid); @@ -1299,7 +1295,7 @@ do_btrfs_qgroup_destroy (const char *qgroupid, const char *subvolume) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "qgroup"); ADD_ARG (argv, i, "destroy"); ADD_ARG (argv, i, qgroupid); @@ -1332,7 +1328,7 @@ test_btrfs_qgroup_show_raw_opt (void) CLEANUP_FREE char *err = NULL; CLEANUP_FREE char *out = NULL; - int r = commandr (&out, &err, str_btrfs, "qgroup", "show", "--help", NULL); + int r = commandr (&out, &err, "btrfs", "qgroup", "show", "--help", NULL); if (r == -1) { reply_with_error ("btrfs qgroup show --help: %s", err); @@ -1366,7 +1362,7 @@ do_btrfs_qgroup_show (const char *path) return NULL; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "qgroup"); ADD_ARG (argv, i, "show"); if (has_raw_opt > 0) @@ -1449,7 +1445,7 @@ do_btrfs_qgroup_assign (const char *src, const char *dst, const char *path) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "qgroup"); ADD_ARG (argv, i, "assign"); ADD_ARG (argv, i, src); @@ -1482,7 +1478,7 @@ do_btrfs_qgroup_remove (const char *src, const char *dst, const char *path) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "qgroup"); ADD_ARG (argv, i, "remove"); ADD_ARG (argv, i, src); @@ -1515,7 +1511,7 @@ do_btrfs_scrub_start (const char *path) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "scrub"); ADD_ARG (argv, i, "start"); ADD_ARG (argv, i, path_buf); @@ -1546,7 +1542,7 @@ do_btrfs_scrub_cancel (const char *path) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "scrub"); ADD_ARG (argv, i, "cancel"); ADD_ARG (argv, i, path_buf); @@ -1577,7 +1573,7 @@ do_btrfs_scrub_resume (const char *path) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "scrub"); ADD_ARG (argv, i, "resume"); ADD_ARG (argv, i, path_buf); @@ -1608,7 +1604,7 @@ do_btrfs_balance_pause (const char *path) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "balance"); ADD_ARG (argv, i, "pause"); ADD_ARG (argv, i, path_buf); @@ -1639,7 +1635,7 @@ do_btrfs_balance_cancel (const char *path) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "balance"); ADD_ARG (argv, i, "cancel"); ADD_ARG (argv, i, path_buf); @@ -1670,7 +1666,7 @@ do_btrfs_balance_resume (const char *path) return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "balance"); ADD_ARG (argv, i, "resume"); ADD_ARG (argv, i, path_buf); @@ -1702,7 +1698,7 @@ do_btrfs_filesystem_defragment (const char *path, int flush, const char *compres return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "filesystem"); ADD_ARG (argv, i, "defragment"); ADD_ARG (argv, i, "-r"); @@ -1742,7 +1738,7 @@ do_btrfs_rescue_chunk_recover (const char *device) CLEANUP_FREE char *err = NULL; int r; - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "rescue"); ADD_ARG (argv, i, "chunk-recover"); ADD_ARG (argv, i, "-y"); @@ -1767,7 +1763,7 @@ do_btrfs_rescue_super_recover (const char *device) CLEANUP_FREE char *err = NULL; int r; - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "rescue"); ADD_ARG (argv, i, "super-recover"); ADD_ARG (argv, i, "-y"); @@ -1805,7 +1801,7 @@ do_btrfs_balance_status (const char *path) return NULL; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "balance"); ADD_ARG (argv, i, "status"); ADD_ARG (argv, i, path_buf); @@ -1918,7 +1914,7 @@ do_btrfs_scrub_status (const char *path) return NULL; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "scrub"); ADD_ARG (argv, i, "status"); ADD_ARG (argv, i, "-R"); @@ -2052,7 +2048,7 @@ do_btrfstune_seeding (const char *device, int svalue) int r; const char *s_value = svalue ? "1" : "0"; - ADD_ARG (argv, i, str_btrfstune); + ADD_ARG (argv, i, "btrfstune"); ADD_ARG (argv, i, "-S"); ADD_ARG (argv, i, s_value); if (svalue == 0) @@ -2078,7 +2074,7 @@ do_btrfstune_enable_extended_inode_refs (const char *device) CLEANUP_FREE char *err = NULL; int r; - ADD_ARG (argv, i, str_btrfstune); + ADD_ARG (argv, i, "btrfstune"); ADD_ARG (argv, i, "-r"); ADD_ARG (argv, i, device); ADD_ARG (argv, i, NULL); @@ -2101,7 +2097,7 @@ do_btrfstune_enable_skinny_metadata_extent_refs (const char *device) CLEANUP_FREE char *err = NULL; int r; - ADD_ARG (argv, i, str_btrfstune); + ADD_ARG (argv, i, "btrfstune"); ADD_ARG (argv, i, "-x"); ADD_ARG (argv, i, device); ADD_ARG (argv, i, NULL); @@ -2137,7 +2133,7 @@ do_btrfs_image (char *const *sources, const char *image, return -1; } - ADD_ARG (argv, i, str_btrfsimage); + ADD_ARG (argv, i, "btrfsimage"); if ((optargs_bitmask & GUESTFS_BTRFS_IMAGE_COMPRESSLEVEL_BITMASK) && compresslevel >= 0) { @@ -2182,7 +2178,7 @@ do_btrfs_replace (const char *srcdev, const char *targetdev, return -1; } - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "replace"); ADD_ARG (argv, i, "start"); ADD_ARG (argv, i, "-B"); @@ -2213,7 +2209,7 @@ do_btrfs_filesystem_show (const char *device) CLEANUP_FREE_STRING_LIST char **lines = NULL; int r; - ADD_ARG (argv, i, str_btrfs); + ADD_ARG (argv, i, "btrfs"); ADD_ARG (argv, i, "filesystem"); ADD_ARG (argv, i, "show"); ADD_ARG (argv, i, device); @@ -2305,7 +2301,7 @@ test_btrfs_min_dev_size (void) if (result != -1) return result; - r = commandr (&out, &err, str_btrfs, "--help", NULL); + r = commandr (&out, &err, "btrfs", "--help", NULL); if (r == -1) { reply_with_error ("btrfs: %s", err); @@ -2340,7 +2336,7 @@ btrfs_minimum_size (const char *path) return -1; } - r = command (&out, &err, str_btrfs, "inspect-internal", + r = command (&out, &err, "btrfs", "inspect-internal", "min-dev-size", buf, NULL); if (r == -1) { diff --git a/daemon/checksum.c b/daemon/checksum.c index da47a0931..244ff6319 100644 --- a/daemon/checksum.c +++ b/daemon/checksum.c @@ -29,33 +29,27 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_find, find); -GUESTFSD_EXT_CMD(str_xargs, xargs); -GUESTFSD_EXT_CMD(str_cksum, cksum); -GUESTFSD_EXT_CMD(str_md5sum, md5sum); -GUESTFSD_EXT_CMD(str_sha1sum, sha1sum); -GUESTFSD_EXT_CMD(str_sha224sum, sha224sum); -GUESTFSD_EXT_CMD(str_sha256sum, sha256sum); -GUESTFSD_EXT_CMD(str_sha384sum, sha384sum); -GUESTFSD_EXT_CMD(str_sha512sum, sha512sum); +DECLARE_EXTERNAL_COMMANDS ("find", "xargs", "cksum", "md5sum", + "sha1sum", "sha224sum", "sha256sum", "sha384sum", + "sha512sum") static const char * program_of_csum (const char *csumtype) { if (STRCASEEQ (csumtype, "crc")) - return str_cksum; + return "cksum"; else if (STRCASEEQ (csumtype, "md5")) - return str_md5sum; + return "md5sum"; else if (STRCASEEQ (csumtype, "sha1")) - return str_sha1sum; + return "sha1sum"; else if (STRCASEEQ (csumtype, "sha224")) - return str_sha224sum; + return "sha224sum"; else if (STRCASEEQ (csumtype, "sha256")) - return str_sha256sum; + return "sha256sum"; else if (STRCASEEQ (csumtype, "sha384")) - return str_sha384sum; + return "sha384sum"; else if (STRCASEEQ (csumtype, "sha512")) - return str_sha512sum; + return "sha512sum"; else { reply_with_error ("unknown checksum type, expecting crc|md5|sha1|sha224|sha256|sha384|sha512"); return NULL; @@ -166,7 +160,7 @@ do_checksums_out (const char *csumtype, const char *dir) cmd = NULL; if (asprintf_nowarn (&cmd, "cd %Q && %s -type f -print0 | %s -0 %s", - sysrootdir, str_find, str_xargs, program) == -1) { + sysrootdir, "find", "xargs", program) == -1) { reply_with_perror ("asprintf"); return -1; } diff --git a/daemon/cmp.c b/daemon/cmp.c index 61506b6c1..01ca13d47 100644 --- a/daemon/cmp.c +++ b/daemon/cmp.c @@ -27,7 +27,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_cmp, cmp); +DECLARE_EXTERNAL_COMMANDS ("cmp") int do_equal (const char *file1, const char *file2) @@ -48,7 +48,7 @@ do_equal (const char *file1, const char *file2) return -1; } - r = commandr (NULL, &err, str_cmp, "-s", file1buf, file2buf, NULL); + r = commandr (NULL, &err, "cmp", "-s", file1buf, file2buf, NULL); if (r == -1 || r > 1) { reply_with_error ("%s", err); return -1; diff --git a/daemon/compress.c b/daemon/compress.c index 36f4e66f7..ca8678965 100644 --- a/daemon/compress.c +++ b/daemon/compress.c @@ -27,11 +27,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_compress, compress); -GUESTFSD_EXT_CMD(str_gzip, gzip); -GUESTFSD_EXT_CMD(str_bzip2, bzip2); -GUESTFSD_EXT_CMD(str_xz, xz); -GUESTFSD_EXT_CMD(str_lzop, lzop); +DECLARE_EXTERNAL_COMMANDS ("compress", "gzip", "bzip2", "xz", "lzop") /* Has one FileOut parameter. */ static int @@ -126,15 +122,15 @@ get_filter (const char *ctype, int level, char *ret, size_t n) reply_with_error ("compress: cannot use optional level parameter with this compression type"); return -1; } - snprintf (ret, n, "%s -c", str_compress); + snprintf (ret, n, "%s -c", "compress"); return 0; } else if (STREQ (ctype, "gzip")) { CHECK_SUPPORTED ("gzip"); if (level == -1) - snprintf (ret, n, "%s -c", str_gzip); + snprintf (ret, n, "%s -c", "gzip"); else if (level >= 1 && level <= 9) - snprintf (ret, n, "%s -c -%d", str_gzip, level); + snprintf (ret, n, "%s -c -%d", "gzip", level); else { reply_with_error ("gzip: incorrect value for level parameter"); return -1; @@ -144,9 +140,9 @@ get_filter (const char *ctype, int level, char *ret, size_t n) else if (STREQ (ctype, "bzip2")) { CHECK_SUPPORTED ("bzip2"); if (level == -1) - snprintf (ret, n, "%s -c", str_bzip2); + snprintf (ret, n, "%s -c", "bzip2"); else if (level >= 1 && level <= 9) - snprintf (ret, n, "%s -c -%d", str_bzip2, level); + snprintf (ret, n, "%s -c -%d", "bzip2", level); else { reply_with_error ("bzip2: incorrect value for level parameter"); return -1; @@ -156,9 +152,9 @@ get_filter (const char *ctype, int level, char *ret, size_t n) else if (STREQ (ctype, "xz")) { CHECK_SUPPORTED ("xz"); if (level == -1) - snprintf (ret, n, "%s -c", str_xz); + snprintf (ret, n, "%s -c", "xz"); else if (level >= 0 && level <= 9) - snprintf (ret, n, "%s -c -%d", str_xz, level); + snprintf (ret, n, "%s -c -%d", "xz", level); else { reply_with_error ("xz: incorrect value for level parameter"); return -1; @@ -168,9 +164,9 @@ get_filter (const char *ctype, int level, char *ret, size_t n) else if (STREQ (ctype, "lzop")) { CHECK_SUPPORTED ("lzop"); if (level == -1) - snprintf (ret, n, "%s -c", str_lzop); + snprintf (ret, n, "%s -c", "lzop"); else if (level >= 1 && level <= 9) - snprintf (ret, n, "%s -c -%d", str_lzop, level); + snprintf (ret, n, "%s -c -%d", "lzop", level); else { reply_with_error ("lzop: incorrect value for level parameter"); return -1; diff --git a/daemon/cpio.c b/daemon/cpio.c index d1459b15d..0601a19ca 100644 --- a/daemon/cpio.c +++ b/daemon/cpio.c @@ -33,7 +33,7 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_cpio, cpio); +DECLARE_EXTERNAL_COMMANDS ("cpio") /* Has one FileOut parameter. */ /* Takes optional arguments, consult optargs_bitmask. */ @@ -82,7 +82,7 @@ do_cpio_out (const char *dir, const char *format) if (asprintf_nowarn (&cmd, "cd %Q && find -print0 | %s -0 -o -H %s --quiet", buf, - str_cpio, + "cpio", format) == -1) { reply_with_perror ("asprintf"); return -1; diff --git a/daemon/cpmv.c b/daemon/cpmv.c index 841ac95ce..b831786dc 100644 --- a/daemon/cpmv.c +++ b/daemon/cpmv.c @@ -25,33 +25,32 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_cp, cp); -GUESTFSD_EXT_CMD(str_mv, mv); +DECLARE_EXTERNAL_COMMANDS ("cp", "mv") static int cpmv_cmd (const char *cmd, const char *flags, const char *src, const char *dest); int do_cp (const char *src, const char *dest) { - return cpmv_cmd (str_cp, NULL, src, dest); + return cpmv_cmd ("cp", NULL, src, dest); } int do_cp_a (const char *src, const char *dest) { - return cpmv_cmd (str_cp, "-a", src, dest); + return cpmv_cmd ("cp", "-a", src, dest); } int do_cp_r (const char *src, const char *dest) { - return cpmv_cmd (str_cp, "-rP", src, dest); + return cpmv_cmd ("cp", "-rP", src, dest); } int do_mv (const char *src, const char *dest) { - return cpmv_cmd (str_mv, NULL, src, dest); + return cpmv_cmd ("mv", NULL, src, dest); } static int diff --git a/daemon/daemon.h b/daemon/daemon.h index 50ce41306..0f0d42836 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -84,6 +84,8 @@ extern int random_name (char *template); extern char *get_random_uuid (void); extern char *make_exclude_from_file (const char *function, char *const *excludes); extern int asprintf_nowarn (char **strp, const char *fmt, ...); +extern void declare_external_commands (const char *cmds[]); +extern void print_external_commands (void); /* mountable functions (in guestfsd.c) */ extern char *mountable_to_string (const mountable_t *mountable); @@ -397,7 +399,12 @@ extern int upload_to_fd (int fd, const char *filename); } \ } while (0) -#define __external_command __attribute__((__section__(".guestfsd_ext_cmds"))) -#define GUESTFSD_EXT_CMD(___ext_cmd_var, ___ext_cmd_str) static const char ___ext_cmd_var[] __external_command = #___ext_cmd_str +#define DECLARE_EXTERNAL_COMMANDS(cmd, ...) \ + static void init_external_commands (void) __attribute__((constructor)); \ + static void init_external_commands (void) \ + { \ + static const char *cmds[] = { cmd, ##__VA_ARGS__, NULL }; \ + declare_external_commands (cmds); \ + } #endif /* GUESTFSD_DAEMON_H */ diff --git a/daemon/dd.c b/daemon/dd.c index d0390d8b9..1fd4e556c 100644 --- a/daemon/dd.c +++ b/daemon/dd.c @@ -27,7 +27,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_dd, dd); +DECLARE_EXTERNAL_COMMANDS ("dd") int do_dd (const char *src, const char *dest) @@ -59,7 +59,7 @@ do_dd (const char *src, const char *dest) return -1; } - r = command (NULL, &err, str_dd, "bs=1024K", if_arg, of_arg, NULL); + r = command (NULL, &err, "dd", "bs=1024K", if_arg, of_arg, NULL); if (r == -1) { reply_with_error ("%s: %s: %s", src, dest, err); return -1; diff --git a/daemon/debug.c b/daemon/debug.c index e2d43a7ca..ddda03463 100644 --- a/daemon/debug.c +++ b/daemon/debug.c @@ -33,15 +33,8 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_printenv, printenv); -GUESTFSD_EXT_CMD(str_ldd, ldd); -GUESTFSD_EXT_CMD(str_ls, ls); -GUESTFSD_EXT_CMD(str_find, find); -GUESTFSD_EXT_CMD(str_xargs, xargs); -GUESTFSD_EXT_CMD(str_file, file); -GUESTFSD_EXT_CMD(str_grep, grep); -GUESTFSD_EXT_CMD(str_gawk, gawk); -GUESTFSD_EXT_CMD(str_sh, sh); +DECLARE_EXTERNAL_COMMANDS ("printenv", "ldd", "ls", "find", "xargs", + "file", "grep", "gawk", "sh") /* This command exposes debugging information, internals and * status. There is no comprehensive documentation for this @@ -301,7 +294,7 @@ debug_env (const char *subcmd, size_t argc, char *const *const argv) char *out; CLEANUP_FREE char *err = NULL; - r = command (&out, &err, str_printenv, NULL); + r = command (&out, &err, "printenv", NULL); if (r == -1) { reply_with_error ("printenv: %s", err); free (out); @@ -380,16 +373,13 @@ debug_binaries (const char *subcmd, size_t argc, char *const *const argv) int r; char *out; CLEANUP_FREE char *err = NULL; - char cmd[256]; + const char *cmd + "find / -xdev -type f -executable " + "| xargs file -i " + "| grep application/x-executable " + "| gawk -F: '{print $1}'"; - snprintf (cmd, sizeof (cmd), - "%s / -xdev -type f -executable " - "| %s %s -i " - "| %s application/x-executable " - "| %s -F: '{print $1}'", - str_find, str_xargs, str_file, str_grep, str_gawk); - - r = command (&out, &err, str_sh, "-c", cmd, NULL); + r = command (&out, &err, "sh", "-c", cmd, NULL); if (r == -1) { reply_with_error ("find: %s", err); free (out); @@ -420,7 +410,7 @@ debug_ldd (const char *subcmd, size_t argc, char *const *const argv) * Also 'ldd' randomly sends messages to stderr and errors to stdout * depending on the phase of the moon. */ - r = command (&out, &err, str_ldd, "-r", argv[0], NULL); + r = command (&out, &err, "ldd", "-r", argv[0], NULL); if (r == -1) { reply_with_error ("ldd: %s: %s", argv[0], err); free (out); @@ -457,7 +447,7 @@ debug_ls (const char *subcmd, size_t argc, char *const *const argv) return NULL; } - cargv[0] = str_ls; + cargv[0] = "ls"; cargv[1] = "-a"; for (i = 0; i < len; ++i) cargv[2+i] = argv[i]; @@ -490,7 +480,7 @@ debug_ll (const char *subcmd, size_t argc, char *const *const argv) return NULL; } - cargv[0] = str_ls; + cargv[0] = "ls"; cargv[1] = "-la"; for (i = 0; i < len; ++i) cargv[2+i] = argv[i]; diff --git a/daemon/df.c b/daemon/df.c index 80b765f30..b6578c6d4 100644 --- a/daemon/df.c +++ b/daemon/df.c @@ -27,7 +27,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_df, df); +DECLARE_EXTERNAL_COMMANDS ("df") char * do_df (void) @@ -38,7 +38,7 @@ do_df (void) NEED_ROOT (0, return NULL); - r = command (&out, &err, str_df, NULL); + r = command (&out, &err, "df", NULL); if (r == -1) { reply_with_error ("%s", err); free (out); @@ -57,7 +57,7 @@ do_df_h (void) NEED_ROOT (0, return NULL); - r = command (&out, &err, str_df, "-h", NULL); + r = command (&out, &err, "df", "-h", NULL); if (r == -1) { reply_with_error ("%s", err); free (out); diff --git a/daemon/dir.c b/daemon/dir.c index 07dc68f17..4f4ba207e 100644 --- a/daemon/dir.c +++ b/daemon/dir.c @@ -29,7 +29,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_rm, rm); +DECLARE_EXTERNAL_COMMANDS ("rm") int do_rmdir (const char *path) @@ -69,7 +69,7 @@ do_rm_rf (const char *path) return -1; } - r = command (NULL, &err, str_rm, "-rf", buf, NULL); + r = command (NULL, &err, "rm", "-rf", buf, NULL); /* rm -rf is never supposed to fail. I/O errors perhaps? */ if (r == -1) { reply_with_error ("%s: %s", path, err); diff --git a/daemon/dmesg.c b/daemon/dmesg.c index 5e16861f2..3e24c5101 100644 --- a/daemon/dmesg.c +++ b/daemon/dmesg.c @@ -27,7 +27,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_dmesg, dmesg); +DECLARE_EXTERNAL_COMMANDS ("dmesg") char * do_dmesg (void) @@ -36,7 +36,7 @@ do_dmesg (void) CLEANUP_FREE char *err = NULL; int r; - r = command (&out, &err, str_dmesg, NULL); + r = command (&out, &err, "dmesg", NULL); if (r == -1) { reply_with_error ("%s", err); free (out); diff --git a/daemon/du.c b/daemon/du.c index 5bb764075..e4203f2dd 100644 --- a/daemon/du.c +++ b/daemon/du.c @@ -28,7 +28,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_du, du); +DECLARE_EXTERNAL_COMMANDS ("du") int64_t do_du (const char *path) @@ -46,7 +46,7 @@ do_du (const char *path) pulse_mode_start (); - r = command (&out, &err, str_du, "-s", buf, NULL); + r = command (&out, &err, "du", "-s", buf, NULL); if (r == -1) { pulse_mode_cancel (); reply_with_error ("%s: %s", path, err); diff --git a/daemon/ext2.c b/daemon/ext2.c index d694b236e..b64c93e83 100644 --- a/daemon/ext2.c +++ b/daemon/ext2.c @@ -33,13 +33,8 @@ #define MAX_ARGS 128 -GUESTFSD_EXT_CMD(str_tune2fs, tune2fs); -GUESTFSD_EXT_CMD(str_e2fsck, e2fsck); -GUESTFSD_EXT_CMD(str_resize2fs, resize2fs); -GUESTFSD_EXT_CMD(str_mke2fs, mke2fs); -GUESTFSD_EXT_CMD(str_lsattr, lsattr); -GUESTFSD_EXT_CMD(str_chattr, chattr); -GUESTFSD_EXT_CMD(str_e2label, e2label); +DECLARE_EXTERNAL_COMMANDS ("tune2fs", "e2fsck", "resize2fs", + "mke2fs", "lsattr", "chattr", "e2label") /* https://bugzilla.redhat.com/show_bug.cgi?id=978302#c1 */ int @@ -57,7 +52,7 @@ do_tune2fs_l (const char *device) char *p, *pend, *colon; CLEANUP_FREE_STRINGSBUF DECLARE_STRINGSBUF (ret); - r = command (&out, &err, str_tune2fs, "-l", device, NULL); + r = command (&out, &err, "tune2fs", "-l", device, NULL); if (r == -1) { reply_with_error ("%s", err); return NULL; @@ -136,7 +131,7 @@ do_set_e2label (const char *device, const char *label) return -1; } - r = command (NULL, &err, str_e2label, device, label, NULL); + r = command (NULL, &err, "e2label", device, label, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -162,7 +157,7 @@ do_set_e2uuid (const char *device, const char *uuid) int r; CLEANUP_FREE char *err = NULL; - r = command (NULL, &err, str_tune2fs, "-U", uuid, device, NULL); + r = command (NULL, &err, "tune2fs", "-U", uuid, device, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -215,7 +210,7 @@ do_resize2fs (const char *device) if (if_not_mounted_run_e2fsck (device) == -1) return -1; - r = command (NULL, &err, str_resize2fs, device, NULL); + r = command (NULL, &err, "resize2fs", device, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -247,7 +242,7 @@ do_resize2fs_size (const char *device, int64_t size) char buf[32]; snprintf (buf, sizeof buf, "%" PRIi64 "K", size); - r = command (NULL, &err, str_resize2fs, device, buf, NULL); + r = command (NULL, &err, "resize2fs", device, buf, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -265,7 +260,7 @@ do_resize2fs_M (const char *device) if (if_not_mounted_run_e2fsck (device) == -1) return -1; - r = command (NULL, &err, str_resize2fs, "-M", device, NULL); + r = command (NULL, &err, "resize2fs", "-M", device, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -311,7 +306,7 @@ ext_minimum_size (const char *device) long block_size; const char *pattern = "Estimated minimum size of the filesystem: "; - r = command (&out, &err, str_resize2fs, "-P", "-f", device, NULL); + r = command (&out, &err, "resize2fs", "-P", "-f", device, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -376,7 +371,7 @@ do_e2fsck (const char *device, return -1; } - ADD_ARG (argv, i, str_e2fsck); + ADD_ARG (argv, i, "e2fsck"); ADD_ARG (argv, i, "-f"); if (correct) @@ -425,7 +420,7 @@ do_mke2journal (int blocksize, const char *device) wipe_device_before_mkfs (device); r = command (NULL, &err, - str_mke2fs, "-F", "-O", "journal_dev", "-b", blocksize_s, + "mke2fs", "-F", "-O", "journal_dev", "-b", blocksize_s, device, NULL); if (r == -1) { reply_with_error ("%s", err); @@ -453,7 +448,7 @@ do_mke2journal_L (int blocksize, const char *label, const char *device) wipe_device_before_mkfs (device); r = command (NULL, &err, - str_mke2fs, "-F", "-O", "journal_dev", "-b", blocksize_s, + "mke2fs", "-F", "-O", "journal_dev", "-b", blocksize_s, "-L", label, device, NULL); if (r == -1) { @@ -476,7 +471,7 @@ do_mke2journal_U (int blocksize, const char *uuid, const char *device) wipe_device_before_mkfs (device); r = command (NULL, &err, - str_mke2fs, "-F", "-O", "journal_dev", "-b", blocksize_s, + "mke2fs", "-F", "-O", "journal_dev", "-b", blocksize_s, "-U", uuid, device, NULL); if (r == -1) { @@ -511,7 +506,7 @@ do_mke2fs_J (const char *fstype, int blocksize, const char *device, wipe_device_before_mkfs (device); r = command (NULL, &err, - str_mke2fs, "-F", "-t", fstype, "-J", jdev, "-b", blocksize_s, + "mke2fs", "-F", "-t", fstype, "-J", jdev, "-b", blocksize_s, device, NULL); if (r == -1) { reply_with_error ("%s", err); @@ -551,7 +546,7 @@ do_mke2fs_JL (const char *fstype, int blocksize, const char *device, wipe_device_before_mkfs (device); r = command (NULL, &err, - str_mke2fs, "-F", "-t", fstype, "-J", jdev, "-b", blocksize_s, + "mke2fs", "-F", "-t", fstype, "-J", jdev, "-b", blocksize_s, device, NULL); if (r == -1) { reply_with_error ("%s", err); @@ -585,7 +580,7 @@ do_mke2fs_JU (const char *fstype, int blocksize, const char *device, wipe_device_before_mkfs (device); r = command (NULL, &err, - str_mke2fs, "-F", "-t", fstype, "-J", jdev, "-b", blocksize_s, + "mke2fs", "-F", "-t", fstype, "-J", jdev, "-b", blocksize_s, device, NULL); if (r == -1) { reply_with_error ("%s", err); @@ -621,7 +616,7 @@ do_tune2fs (const char *device, /* only required parameter */ char reservedblockscount_s[64]; char user_s[64]; - ADD_ARG (argv, i, str_tune2fs); + ADD_ARG (argv, i, "tune2fs"); if (optargs_bitmask & GUESTFS_TUNE2FS_FORCE_BITMASK) { if (force) @@ -759,7 +754,7 @@ do_get_e2attrs (const char *filename) return NULL; } - r = command (&out, &err, str_lsattr, "-d", "--", buf, NULL); + r = command (&out, &err, "lsattr", "-d", "--", buf, NULL); if (r == -1) { reply_with_error ("%s: %s: %s", "lsattr", filename, err); free (out); @@ -850,7 +845,7 @@ do_set_e2attrs (const char *filename, const char *attrs, int clear) return -1; } - r = command (NULL, &err, str_chattr, attr_arg, "--", buf, NULL); + r = command (NULL, &err, "chattr", attr_arg, "--", buf, NULL); if (r == -1) { reply_with_error ("%s: %s: %s", "chattr", filename, err); return -1; @@ -872,7 +867,7 @@ do_get_e2generation (const char *filename) return -1; } - r = command (&out, &err, str_lsattr, "-dv", "--", buf, NULL); + r = command (&out, &err, "lsattr", "-dv", "--", buf, NULL); if (r == -1) { reply_with_error ("%s: %s: %s", "lsattr", filename, err); return -1; @@ -908,7 +903,7 @@ do_set_e2generation (const char *filename, int64_t generation) snprintf (generation_str, sizeof generation_str, "%" PRIu64, (uint64_t) generation); - r = command (NULL, &err, str_chattr, "-v", generation_str, "--", buf, NULL); + r = command (NULL, &err, "chattr", "-v", generation_str, "--", buf, NULL); if (r == -1) { reply_with_error ("%s: %s: %s", "chattr", filename, err); return -1; @@ -979,7 +974,7 @@ do_mke2fs (const char *device, /* 0 */ char maxonlineresize_s[74]; size_t i = 0; - ADD_ARG (argv, i, str_mke2fs); + ADD_ARG (argv, i, "mke2fs"); if (optargs_bitmask & GUESTFS_MKE2FS_BLOCKSIZE_BITMASK) { if (blocksize < 0) { diff --git a/daemon/file.c b/daemon/file.c index 84874dc6f..794409eb4 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -30,9 +30,7 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_file, file); -GUESTFSD_EXT_CMD(str_zcat, zcat); -GUESTFSD_EXT_CMD(str_bzcat, bzcat); +DECLARE_EXTERNAL_COMMANDS ("file", "zcat", "bzcat") int do_touch (const char *path) @@ -505,7 +503,7 @@ do_file (const char *path) char *out; CLEANUP_FREE char *err = NULL; - int r = command (&out, &err, str_file, flags, path, NULL); + int r = command (&out, &err, "file", flags, path, NULL); if (r == -1) { free (out); @@ -539,9 +537,9 @@ do_zfile (const char *method, const char *path) char line[256]; if (STREQ (method, "gzip") || STREQ (method, "compress")) - zcat = str_zcat; + zcat = "zcat"; else if (STREQ (method, "bzip2")) - zcat = str_bzcat; + zcat = "bzcat"; else { reply_with_error ("unknown method"); return NULL; diff --git a/daemon/find.c b/daemon/find.c index 3a0cf5d73..e74883288 100644 --- a/daemon/find.c +++ b/daemon/find.c @@ -30,7 +30,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_find, find); +DECLARE_EXTERNAL_COMMANDS ("find") static int input_to_nul (FILE *fp, char *buf, size_t maxlen) @@ -87,7 +87,7 @@ do_find0 (const char *dir) sysrootdirlen = strlen (sysrootdir); - if (asprintf_nowarn (&cmd, "%s %Q -print0", str_find, sysrootdir) == -1) { + if (asprintf_nowarn (&cmd, "find %Q -print0", sysrootdir) == -1) { reply_with_perror ("asprintf"); return -1; } diff --git a/daemon/findfs.c b/daemon/findfs.c index f44137038..fe1def360 100644 --- a/daemon/findfs.c +++ b/daemon/findfs.c @@ -26,7 +26,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_findfs, findfs); +DECLARE_EXTERNAL_COMMANDS ("findfs") static char * findfs (const char *tag, const char *label_or_uuid) @@ -50,7 +50,7 @@ findfs (const char *tag, const char *label_or_uuid) return NULL; } - r = command (&out, &err, str_findfs, arg, NULL); + r = command (&out, &err, "findfs", arg, NULL); if (r == -1) { reply_with_error ("%s", err); free (out); diff --git a/daemon/fsck.c b/daemon/fsck.c index 540f779d3..5643460e1 100644 --- a/daemon/fsck.c +++ b/daemon/fsck.c @@ -26,7 +26,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_fsck, fsck); +DECLARE_EXTERNAL_COMMANDS ("fsck") int do_fsck (const char *fstype, const char *device) @@ -34,7 +34,7 @@ do_fsck (const char *fstype, const char *device) CLEANUP_FREE char *err = NULL; int r; - r = commandr (NULL, &err, str_fsck, "-a", "-t", fstype, device, NULL); + r = commandr (NULL, &err, "fsck", "-a", "-t", fstype, device, NULL); if (r == -1) { reply_with_error ("%s: %s", device, err); return -1; diff --git a/daemon/fstrim.c b/daemon/fstrim.c index 527acfd48..913267054 100644 --- a/daemon/fstrim.c +++ b/daemon/fstrim.c @@ -30,12 +30,12 @@ #define MAX_ARGS 64 -GUESTFSD_EXT_CMD(str_fstrim, fstrim); +DECLARE_EXTERNAL_COMMANDS ("fstrim") int optgroup_fstrim_available (void) { - return prog_exists (str_fstrim); + return prog_exists ("fstrim"); } /* Takes optional arguments, consult optargs_bitmask. */ @@ -55,7 +55,7 @@ do_fstrim (const char *path, */ sync_disks (); - ADD_ARG (argv, i, str_fstrim); + ADD_ARG (argv, i, "fstrim"); if ((optargs_bitmask & GUESTFS_FSTRIM_OFFSET_BITMASK)) { if (offset < 0) { diff --git a/daemon/grub.c b/daemon/grub.c index 9bcf373bb..c76d269d8 100644 --- a/daemon/grub.c +++ b/daemon/grub.c @@ -26,12 +26,12 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_grub_install, grub-install); +DECLARE_EXTERNAL_COMMANDS ("grub-install") int optgroup_grub_available (void) { - return prog_exists (str_grub_install); + return prog_exists ("grub-install"); } int @@ -46,7 +46,7 @@ do_grub_install (const char *root, const char *device) } r = command (verbose ? &out : NULL, &err, - str_grub_install, buf, device, NULL); + "grub-install", buf, device, NULL); if (r == -1) { if (verbose) diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c index b3f40628b..86592e8dc 100644 --- a/daemon/guestfsd.c +++ b/daemon/guestfsd.c @@ -63,8 +63,7 @@ #include "daemon.h" -GUESTFSD_EXT_CMD(str_udevadm, udevadm); -GUESTFSD_EXT_CMD(str_uuidgen, uuidgen); +DECLARE_EXTERNAL_COMMANDS ("udevadm", "uuidgen") #ifndef MAX # define MAX(a,b) ((a)>(b)?(a):(b)) @@ -144,6 +143,7 @@ main (int argc, char *argv[]) { "channel", 1, 0, 'c' }, { "listen", 0, 0, 'l' }, { "network", 0, 0, 'n' }, + { "print-external-commands", 0, 0, 0 }, { "test", 0, 0, 't' }, { "verbose", 0, 0, 'v' }, { 0, 0, 0, 0 } @@ -151,6 +151,8 @@ main (int argc, char *argv[]) int c; const char *channel = NULL; int listen_mode = 0; + int option_index; + int do_print_external_commands = 0; ignore_value (chdir ("/")); @@ -185,10 +187,19 @@ main (int argc, char *argv[]) root_device = statbuf.st_dev; for (;;) { - c = getopt_long (argc, argv, options, long_options, NULL); + c = getopt_long (argc, argv, options, long_options, &option_index); if (c == -1) break; switch (c) { + case 0: /* options which are long only */ + if (STREQ (long_options[option_index].name, "print-external-commands")) + do_print_external_commands = 1; + else + error (EXIT_FAILURE, 0, + "unknown long option: %s (%d)", + long_options[option_index].name, option_index); + break; + case 'c': channel = optarg; break; @@ -234,6 +245,12 @@ main (int argc, char *argv[]) exit (EXIT_FAILURE); } + /* Handle the --print-external-commands option. */ + if (do_print_external_commands) { + print_external_commands (); + exit (EXIT_SUCCESS); + } + #ifndef WIN32 /* Make sure SIGPIPE doesn't kill us. */ struct sigaction sa; @@ -1095,7 +1112,7 @@ udev_settle_file (const char *file) size_t i = 0; int r; - ADD_ARG (argv, i, str_udevadm); + ADD_ARG (argv, i, "udevadm"); if (verbose) ADD_ARG (argv, i, "--debug"); @@ -1124,7 +1141,7 @@ get_random_uuid (void) char *out; CLEANUP_FREE char *err = NULL; - r = command (&out, &err, str_uuidgen, NULL); + r = command (&out, &err, "uuidgen", NULL); if (r == -1) { reply_with_error ("%s", err); return NULL; @@ -1205,3 +1222,48 @@ cleanup_free_mountable (mountable_t *mountable) free (mountable->volume); } } + +static const char **external_commands = NULL; +static size_t nr_external_commands = 0; + +/* This is called from C by the DECLARE_EXTERNAL_COMMANDS macro. */ +void +declare_external_commands (const char *cmds[]) +{ + size_t i; + size_t n = guestfs_int_count_strings ((char **) cmds); + + external_commands = realloc (external_commands, + sizeof (char *) * (nr_external_commands + n)); + if (external_commands == NULL) + error (EXIT_FAILURE, errno, "realloc"); + + for (i = 0; i < n; ++i) + external_commands[nr_external_commands++] = cmds[i]; +} + +void +print_external_commands (void) +{ + size_t i; + FILE *fp; + + fp = popen ("sort -u", "w"); + if (fp == NULL) + error (EXIT_FAILURE, errno, "popen: sort"); + + for (i = 0; i < nr_external_commands; ++i) + fprintf (fp, "%s\n", external_commands[i]); + + pclose (fp); +} + +static void free_external_commands (void) __attribute__((destructor)); + +static void +free_external_commands (void) +{ + free (external_commands); + external_commands = NULL; + nr_external_commands = 0; +} diff --git a/daemon/guestfsd.pod b/daemon/guestfsd.pod index 2ff591548..b2d8f87ea 100644 --- a/daemon/guestfsd.pod +++ b/daemon/guestfsd.pod @@ -78,6 +78,13 @@ the daemon. Enable network features in the daemon. +=item B<--print-external-commands> + +Print the names of external commands run by the daemon. + +This is used by some downstream packagers to ensure that the correct +commands are added to the appliance at build time. + =item B<-r> Set the root filesystem to be F</> (instead of the default which is diff --git a/daemon/hotplug.c b/daemon/hotplug.c index 234f51ed2..5ce1f6dd2 100644 --- a/daemon/hotplug.c +++ b/daemon/hotplug.c @@ -77,7 +77,7 @@ do_internal_hot_add_drive (const char *label) return -1; } -GUESTFSD_EXT_CMD(str_fuser, fuser); +DECLARE_EXTERNAL_COMMANDS ("fuser") /* This function is called before a drive is hot-unplugged. */ int @@ -96,7 +96,7 @@ do_internal_hot_remove_drive_precheck (const char *label) return -1; } - r = commandr (&out, &err, str_fuser, "-v", "-m", path, NULL); + r = commandr (&out, &err, "fuser", "-v", "-m", path, NULL); if (r == -1) { reply_with_error ("fuser: %s: %s", path, err); return -1; diff --git a/daemon/initrd.c b/daemon/initrd.c index 21865debf..24a2d9864 100644 --- a/daemon/initrd.c +++ b/daemon/initrd.c @@ -31,8 +31,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_zcat, zcat); -GUESTFSD_EXT_CMD(str_cpio, cpio); +DECLARE_EXTERNAL_COMMANDS ("zcat", "cpio") char ** do_initrd_list (const char *path) @@ -46,7 +45,7 @@ do_initrd_list (const char *path) int ret; /* "zcat /sysroot/<path> | cpio --quiet -it", but path must be quoted. */ - if (asprintf_nowarn (&cmd, "%s %R | %s --quiet -it", str_zcat, path, str_cpio) == -1) { + if (asprintf_nowarn (&cmd, "zcat %R | cpio --quiet -it", path) == -1) { reply_with_perror ("asprintf"); return NULL; } diff --git a/daemon/inotify.c b/daemon/inotify.c index b9bfed713..5ceaacfe7 100644 --- a/daemon/inotify.c +++ b/daemon/inotify.c @@ -38,7 +38,8 @@ #include "optgroups.h" #ifdef HAVE_SYS_INOTIFY_H -GUESTFSD_EXT_CMD(str_sort, sort); + +DECLARE_EXTERNAL_COMMANDS ("sort") /* Currently open inotify handle, or -1 if not opened. */ static int inotify_fd = -1; @@ -327,7 +328,7 @@ do_inotify_files (void) return NULL; } - snprintf (cmd, sizeof cmd, "%s -u > %s", str_sort, tempfile); + snprintf (cmd, sizeof cmd, "sort -u > %s", tempfile); fp = popen (cmd, "w"); if (fp == NULL) { diff --git a/daemon/isoinfo.c b/daemon/isoinfo.c index 3e1acf848..c59a698aa 100644 --- a/daemon/isoinfo.c +++ b/daemon/isoinfo.c @@ -30,7 +30,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_isoinfo, isoinfo); +DECLARE_EXTERNAL_COMMANDS ("isoinfo") static int parse_uint32 (uint32_t *ret, const char *str) @@ -246,7 +246,7 @@ isoinfo (const char *path) /* --debug is necessary to get additional fields, in particular * the date & time fields. */ - r = command (&out, &err, str_isoinfo, "--debug", "-d", "-i", path, NULL); + r = command (&out, &err, "isoinfo", "--debug", "-d", "-i", path, NULL); if (r == -1) { reply_with_error ("%s", err); return NULL; diff --git a/daemon/labels.c b/daemon/labels.c index aaa3eaf89..f247c9ef5 100644 --- a/daemon/labels.c +++ b/daemon/labels.c @@ -27,7 +27,7 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_dosfslabel, dosfslabel); +DECLARE_EXTERNAL_COMMANDS ("dosfslabel") static int dosfslabel (const char *device, const char *label) @@ -35,7 +35,7 @@ dosfslabel (const char *device, const char *label) int r; CLEANUP_FREE char *err = NULL; - r = command (NULL, &err, str_dosfslabel, device, label, NULL); + r = command (NULL, &err, "dosfslabel", device, label, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; diff --git a/daemon/ldm.c b/daemon/ldm.c index 75418e8d3..3e1b72f39 100644 --- a/daemon/ldm.c +++ b/daemon/ldm.c @@ -39,12 +39,12 @@ #pragma GCC diagnostic ignored "-Wnull-dereference" #endif -GUESTFSD_EXT_CMD(str_ldmtool, ldmtool); +DECLARE_EXTERNAL_COMMANDS ("ldmtool") int optgroup_ldm_available (void) { - return prog_exists (str_ldmtool); + return prog_exists ("ldmtool"); } static int @@ -134,7 +134,7 @@ do_ldmtool_create_all (void) int r; CLEANUP_FREE char *err = NULL; - r = command (NULL, &err, str_ldmtool, "create", "all", NULL); + r = command (NULL, &err, "ldmtool", "create", "all", NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -148,7 +148,7 @@ do_ldmtool_remove_all (void) int r; CLEANUP_FREE char *err = NULL; - r = command (NULL, &err, str_ldmtool, "remove", "all", NULL); + r = command (NULL, &err, "ldmtool", "remove", "all", NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -327,7 +327,7 @@ do_ldmtool_scan_devices (char * const * devices) return NULL; } - argv[0] = str_ldmtool; + argv[0] = "ldmtool"; argv[1] = "scan"; for (i = 0; i < nr_devices; ++i) argv[2+i] = devices[i]; @@ -349,7 +349,7 @@ do_ldmtool_diskgroup_name (const char *diskgroup) int r; CLEANUP_FREE char *out = NULL, *err = NULL; - r = command (&out, &err, str_ldmtool, "show", "diskgroup", diskgroup, NULL); + r = command (&out, &err, "ldmtool", "show", "diskgroup", diskgroup, NULL); if (r == -1) { reply_with_error ("%s", err); return NULL; @@ -365,7 +365,7 @@ do_ldmtool_diskgroup_volumes (const char *diskgroup) int r; CLEANUP_FREE char *out = NULL, *err = NULL; - r = command (&out, &err, str_ldmtool, "show", "diskgroup", diskgroup, NULL); + r = command (&out, &err, "ldmtool", "show", "diskgroup", diskgroup, NULL); if (r == -1) { reply_with_error ("%s", err); return NULL; @@ -382,7 +382,7 @@ do_ldmtool_diskgroup_disks (const char *diskgroup) int r; CLEANUP_FREE char *out = NULL, *err = NULL; - r = command (&out, &err, str_ldmtool, "show", "diskgroup", diskgroup, NULL); + r = command (&out, &err, "ldmtool", "show", "diskgroup", diskgroup, NULL); if (r == -1) { reply_with_error ("%s", err); return NULL; @@ -399,7 +399,7 @@ do_ldmtool_volume_type (const char *diskgroup, const char *volume) CLEANUP_FREE char *out = NULL, *err = NULL; r = command (&out, &err, - str_ldmtool, "show", "volume", diskgroup, volume, NULL); + "ldmtool", "show", "volume", diskgroup, volume, NULL); if (r == -1) { reply_with_error ("%s", err); return NULL; @@ -416,7 +416,7 @@ do_ldmtool_volume_hint (const char *diskgroup, const char *volume) CLEANUP_FREE char *out = NULL, *err = NULL; r = command (&out, &err, - str_ldmtool, "show", "volume", diskgroup, volume, NULL); + "ldmtool", "show", "volume", diskgroup, volume, NULL); if (r == -1) { reply_with_error ("%s", err); return NULL; @@ -433,7 +433,7 @@ do_ldmtool_volume_partitions (const char *diskgroup, const char *volume) CLEANUP_FREE char *out = NULL, *err = NULL; r = command (&out, &err, - str_ldmtool, "show", "volume", diskgroup, volume, NULL); + "ldmtool", "show", "volume", diskgroup, volume, NULL); if (r == -1) { reply_with_error ("%s", err); return NULL; diff --git a/daemon/link.c b/daemon/link.c index 3ce54fa37..f0bd34034 100644 --- a/daemon/link.c +++ b/daemon/link.c @@ -30,7 +30,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_ln, ln); +DECLARE_EXTERNAL_COMMANDS ("ln") char * do_readlink (const char *path) @@ -140,7 +140,7 @@ _symlink (const char *flag, const char *target, const char *linkname) } r = command (NULL, &err, - str_ln, flag, "--", /* target could begin with '-' */ + "ln", flag, "--", /* target could begin with '-' */ target, buf_linkname, NULL); if (r == -1) { reply_with_error ("ln %s: %s: %s: %s", diff --git a/daemon/ls.c b/daemon/ls.c index 0e2f110f5..9c97cf51f 100644 --- a/daemon/ls.c +++ b/daemon/ls.c @@ -30,7 +30,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_ls, ls); +DECLARE_EXTERNAL_COMMANDS ("ls") /* Has one FileOut parameter. */ int @@ -118,7 +118,7 @@ do_ll (const char *path) return NULL; } - r = command (&out, &err, str_ls, "-la", spath, NULL); + r = command (&out, &err, "ls", "-la", spath, NULL); if (r == -1) { reply_with_error ("%s", err); free (out); @@ -151,7 +151,7 @@ do_llz (const char *path) return NULL; } - r = command (&out, &err, str_ls, "-laZ", spath, NULL); + r = command (&out, &err, "ls", "-laZ", spath, NULL); if (r == -1) { reply_with_error ("%s", err); free (out); diff --git a/daemon/luks.c b/daemon/luks.c index 53bb820d6..33873a0b9 100644 --- a/daemon/luks.c +++ b/daemon/luks.c @@ -28,12 +28,12 @@ #define MAX_ARGS 64 -GUESTFSD_EXT_CMD(str_cryptsetup, cryptsetup); +DECLARE_EXTERNAL_COMMANDS ("cryptsetup") int optgroup_luks_available (void) { - return prog_exists (str_cryptsetup); + return prog_exists ("cryptsetup"); } /* Callers must also call remove_temp (tempfile). */ @@ -108,7 +108,7 @@ luks_open (const char *device, const char *key, const char *mapname, const char *argv[MAX_ARGS]; size_t i = 0; - ADD_ARG (argv, i, str_cryptsetup); + ADD_ARG (argv, i, "cryptsetup"); ADD_ARG (argv, i, "-d"); ADD_ARG (argv, i, tempfile); if (readonly) ADD_ARG (argv, i, "--readonly"); @@ -155,7 +155,7 @@ do_luks_close (const char *device) const char *mapname = &device[12]; CLEANUP_FREE char *err = NULL; - int r = command (NULL, &err, str_cryptsetup, "luksClose", mapname, NULL); + int r = command (NULL, &err, "cryptsetup", "luksClose", mapname, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -178,7 +178,7 @@ luks_format (const char *device, const char *key, int keyslot, char keyslot_s[16]; size_t i = 0; - ADD_ARG (argv, i, str_cryptsetup); + ADD_ARG (argv, i, "cryptsetup"); ADD_ARG (argv, i, "-q"); if (cipher) { ADD_ARG (argv, i, "--cipher"); @@ -237,7 +237,7 @@ do_luks_add_key (const char *device, const char *key, const char *newkey, char keyslot_s[16]; size_t i = 0; - ADD_ARG (argv, i, str_cryptsetup); + ADD_ARG (argv, i, "cryptsetup"); ADD_ARG (argv, i, "-q"); ADD_ARG (argv, i, "-d"); ADD_ARG (argv, i, keyfile); @@ -273,7 +273,7 @@ do_luks_kill_slot (const char *device, const char *key, int keyslot) char keyslot_s[16]; size_t i = 0; - ADD_ARG (argv, i, str_cryptsetup); + ADD_ARG (argv, i, "cryptsetup"); ADD_ARG (argv, i, "-q"); ADD_ARG (argv, i, "-d"); ADD_ARG (argv, i, tempfile); diff --git a/daemon/lvm-filter.c b/daemon/lvm-filter.c index 5c9ce1866..deaecfb67 100644 --- a/daemon/lvm-filter.c +++ b/daemon/lvm-filter.c @@ -36,10 +36,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_lvm, lvm); -GUESTFSD_EXT_CMD(str_cp, cp); -GUESTFSD_EXT_CMD(str_rm, rm); -GUESTFSD_EXT_CMD(str_lvmetad, lvmetad); +DECLARE_EXTERNAL_COMMANDS ("lvm", "cp", "rm", "lvmetad") /* This runs during daemon start up and creates a complete copy of * /etc/lvm so that we can modify it as we desire. We set @@ -79,7 +76,7 @@ copy_lvm (void) error (EXIT_FAILURE, errno, "mkdtemp: %s", lvm_system_dir); /* Copy the entire directory */ - snprintf (cmd, sizeof cmd, "%s -a /etc/lvm/ %s", str_cp, lvm_system_dir); + snprintf (cmd, sizeof cmd, "%s -a /etc/lvm/ %s", "cp", lvm_system_dir); r = system (cmd); if (r == -1) { perror (cmd); @@ -106,13 +103,11 @@ copy_lvm (void) void start_lvmetad (void) { - char cmd[64]; int r; - snprintf (cmd, sizeof cmd, "%s", str_lvmetad); if (verbose) - printf ("%s\n", cmd); - r = system (cmd); + printf ("%s\n", "lvmetad"); + r = system ("lvmetad"); if (r == -1) perror ("system/lvmetad"); else if (!WIFEXITED (r) || WEXITSTATUS (r) != 0) @@ -124,7 +119,7 @@ rm_lvm_system_dir (void) { char cmd[64]; - snprintf (cmd, sizeof cmd, "%s -rf %s", str_rm, lvm_system_dir); + snprintf (cmd, sizeof cmd, "rm -rf %s", lvm_system_dir); ignore_value (system (cmd)); } @@ -232,7 +227,7 @@ static int vgchange (const char *vgchange_flag) { CLEANUP_FREE char *err = NULL; - int r = command (NULL, &err, str_lvm, "vgchange", vgchange_flag, NULL); + int r = command (NULL, &err, "lvm", "vgchange", vgchange_flag, NULL); if (r == -1) { reply_with_error ("vgchange %s: %s", vgchange_flag, err); return -1; @@ -265,7 +260,7 @@ rescan (void) unlink (lvm_cache); CLEANUP_FREE char *err = NULL; - int r = command (NULL, &err, str_lvm, "vgscan", NULL); + int r = command (NULL, &err, "lvm", "vgscan", NULL); if (r == -1) { reply_with_error ("vgscan: %s", err); return -1; diff --git a/daemon/lvm.c b/daemon/lvm.c index 5d12b009f..ee2ca8577 100644 --- a/daemon/lvm.c +++ b/daemon/lvm.c @@ -32,12 +32,12 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_lvm, lvm); +DECLARE_EXTERNAL_COMMANDS ("lvm") int optgroup_lvm2_available (void) { - return prog_exists (str_lvm); + return prog_exists ("lvm"); } /* LVM actions. Keep an eye on liblvm, although at the time @@ -194,7 +194,7 @@ do_pvs (void) int r; r = command (&out, &err, - str_lvm, "pvs", "-o", "pv_name", "--noheadings", NULL); + "lvm", "pvs", "-o", "pv_name", "--noheadings", NULL); if (r == -1) { reply_with_error ("%s", err); free (out); @@ -212,7 +212,7 @@ do_vgs (void) int r; r = command (&out, &err, - str_lvm, "vgs", "-o", "vg_name", "--noheadings", NULL); + "lvm", "vgs", "-o", "vg_name", "--noheadings", NULL); if (r == -1) { reply_with_error ("%s", err); free (out); @@ -235,7 +235,7 @@ test_lvs_has_S_opt (void) CLEANUP_FREE char *out = NULL; CLEANUP_FREE char *err = NULL; - int r = command (&out, &err, str_lvm, "lvs", "--help", NULL); + int r = command (&out, &err, "lvm", "lvs", "--help", NULL); if (r == -1) { reply_with_error ("lvm lvs --help: %s", err); return -1; @@ -262,7 +262,7 @@ do_lvs (void) if (has_S > 0) { r = command (&out, &err, - str_lvm, "lvs", + "lvm", "lvs", "-o", "vg_name,lv_name", "-S", "lv_role=public && lv_skip_activation!=yes", "--noheadings", @@ -276,7 +276,7 @@ do_lvs (void) return convert_lvm_output (out, "/dev/"); } else { r = command (&out, &err, - str_lvm, "lvs", + "lvm", "lvs", "-o", "lv_attr,vg_name,lv_name", "--noheadings", "--separator", ":", NULL); @@ -319,7 +319,7 @@ do_pvcreate (const char *device) int r; r = command (NULL, &err, - str_lvm, "pvcreate", "--force", device, NULL); + "lvm", "pvcreate", "--force", device, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -343,7 +343,7 @@ do_vgcreate (const char *volgroup, char *const *physvols) reply_with_perror ("malloc"); return -1; } - argv[0] = str_lvm; + argv[0] = "lvm"; argv[1] = "vgcreate"; argv[2] = volgroup; for (i = 3; i < argc+1; ++i) @@ -370,7 +370,7 @@ do_lvcreate (const char *logvol, const char *volgroup, int mbytes) snprintf (size, sizeof size, "%d", mbytes); r = command (NULL, &err, - str_lvm, "lvcreate", + "lvm", "lvcreate", "-L", size, "-n", logvol, volgroup, NULL); if (r == -1) { reply_with_error ("%s", err); @@ -397,7 +397,7 @@ do_lvcreate_free (const char *logvol, const char *volgroup, int percent) snprintf (size, sizeof size, "%d%%FREE", percent); r = command (NULL, &err, - str_lvm, "lvcreate", + "lvm", "lvcreate", "-l", size, "-n", logvol, volgroup, NULL); if (r == -1) { reply_with_error ("%s", err); @@ -430,7 +430,7 @@ do_lvresize (const char *logvol, int mbytes) snprintf (size, sizeof size, "%d", mbytes); r = command (NULL, &err, - str_lvm, "lvresize", + "lvm", "lvresize", "--force", "-L", size, logvol, NULL); if (r == -1) { if (!ignore_same_size_error (err)) { @@ -457,7 +457,7 @@ do_lvresize_free (const char *logvol, int percent) snprintf (size, sizeof size, "+%d%%FREE", percent); r = command (NULL, &err, - str_lvm, "lvresize", "-l", size, logvol, NULL); + "lvm", "lvresize", "-l", size, logvol, NULL); if (r == -1) { if (!ignore_same_size_error (err)) { reply_with_error ("%s", err); @@ -489,10 +489,10 @@ do_lvm_remove_all (void) /* Deactivate the LV first. On Ubuntu, lvremove '-f' option * does not remove active LVs reliably. */ - (void) command (NULL, NULL, str_lvm, "lvchange", "-an", xs[i], NULL); + (void) command (NULL, NULL, "lvm", "lvchange", "-an", xs[i], NULL); udev_settle (); - r = command (NULL, &err, str_lvm, "lvremove", "-f", xs[i], NULL); + r = command (NULL, &err, "lvm", "lvremove", "-f", xs[i], NULL); if (r == -1) { reply_with_error ("lvremove: %s: %s", xs[i], err); return -1; @@ -510,10 +510,10 @@ do_lvm_remove_all (void) CLEANUP_FREE char *err = NULL; /* Deactivate the VG first, see note above. */ - (void) command (NULL, NULL, str_lvm, "vgchange", "-an", xs[i], NULL); + (void) command (NULL, NULL, "lvm", "vgchange", "-an", xs[i], NULL); udev_settle (); - r = command (NULL, &err, str_lvm, "vgremove", "-f", xs[i], NULL); + r = command (NULL, &err, "lvm", "vgremove", "-f", xs[i], NULL); if (r == -1) { reply_with_error ("vgremove: %s: %s", xs[i], err); return -1; @@ -530,7 +530,7 @@ do_lvm_remove_all (void) for (i = 0; xs[i] != NULL; ++i) { CLEANUP_FREE char *err = NULL; - r = command (NULL, &err, str_lvm, "pvremove", "-f", xs[i], NULL); + r = command (NULL, &err, "lvm", "pvremove", "-f", xs[i], NULL); if (r == -1) { reply_with_error ("pvremove: %s: %s", xs[i], err); return -1; @@ -551,7 +551,7 @@ do_lvremove (const char *device) int r; r = command (NULL, &err, - str_lvm, "lvremove", "-f", device, NULL); + "lvm", "lvremove", "-f", device, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -569,7 +569,7 @@ do_vgremove (const char *device) int r; r = command (NULL, &err, - str_lvm, "vgremove", "-f", device, NULL); + "lvm", "vgremove", "-f", device, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -587,7 +587,7 @@ do_pvremove (const char *device) int r; r = command (NULL, &err, - str_lvm, "pvremove", "-ff", device, NULL); + "lvm", "pvremove", "-ff", device, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -605,7 +605,7 @@ do_pvresize (const char *device) int r; r = command (NULL, &err, - str_lvm, "pvresize", device, NULL); + "lvm", "pvresize", device, NULL); if (r == -1) { reply_with_error ("%s: %s", device, err); return -1; @@ -624,7 +624,7 @@ do_pvresize_size (const char *device, int64_t size) snprintf (buf, sizeof buf, "%" PRIi64 "b", size); r = command (NULL, &err, - str_lvm, "pvresize", + "lvm", "pvresize", "--yes", "--setphysicalvolumesize", buf, device, NULL); @@ -650,7 +650,7 @@ do_vg_activate (int activate, char *const *volgroups) return -1; } - argv[0] = str_lvm; + argv[0] = "lvm"; argv[1] = "vgchange"; argv[2] = "-a"; argv[3] = activate ? "y" : "n"; @@ -682,7 +682,7 @@ do_lvrename (const char *logvol, const char *newlogvol) int r; r = command (NULL, &err, - str_lvm, "lvrename", + "lvm", "lvrename", logvol, newlogvol, NULL); if (r == -1) { reply_with_error ("%s -> %s: %s", logvol, newlogvol, err); @@ -701,7 +701,7 @@ do_vgrename (const char *volgroup, const char *newvolgroup) int r; r = command (NULL, &err, - str_lvm, "vgrename", + "lvm", "vgrename", volgroup, newvolgroup, NULL); if (r == -1) { reply_with_error ("%s -> %s: %s", volgroup, newvolgroup, err); @@ -719,7 +719,7 @@ get_lvm_field (const char *cmd, const char *field, const char *device) char *out; CLEANUP_FREE char *err = NULL; int r = command (&out, &err, - str_lvm, cmd, + "lvm", cmd, "--unbuffered", "--noheadings", "-o", field, device, NULL); if (r == -1) { @@ -756,7 +756,7 @@ get_lvm_fields (const char *cmd, const char *field, const char *device) CLEANUP_FREE char *out = NULL, *err = NULL; int r = command (&out, &err, - str_lvm, cmd, + "lvm", cmd, "--unbuffered", "--noheadings", "-o", field, device, NULL); if (r == -1) { @@ -795,7 +795,7 @@ do_vgscan (void) int r; r = command (NULL, &err, - str_lvm, "vgscan", NULL); + "lvm", "vgscan", NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -983,7 +983,7 @@ do_vgmeta (const char *vg, size_t *size_r) close (fd); - r = command (NULL, &err, str_lvm, "vgcfgbackup", "-f", tmp, vg, NULL); + r = command (NULL, &err, "lvm", "vgcfgbackup", "-f", tmp, vg, NULL); if (r == -1) { reply_with_error ("vgcfgbackup: %s", err); return NULL; @@ -1056,7 +1056,7 @@ do_pvchange_uuid (const char *device) int r; r = command (NULL, &err, - str_lvm, "pvchange", "-u", device, NULL); + "lvm", "pvchange", "-u", device, NULL); if (r == -1) { reply_with_error ("%s: %s", device, err); return -1; @@ -1074,7 +1074,7 @@ do_pvchange_uuid_all (void) int r; r = command (NULL, &err, - str_lvm, "pvchange", "-u", "-a", NULL); + "lvm", "pvchange", "-u", "-a", NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -1092,7 +1092,7 @@ do_vgchange_uuid (const char *vg) int r; r = command (NULL, &err, - str_lvm, "vgchange", "-u", vg, NULL); + "lvm", "vgchange", "-u", vg, NULL); if (r == -1) { reply_with_error ("%s: %s", vg, err); return -1; @@ -1110,7 +1110,7 @@ do_vgchange_uuid_all (void) int r; r = command (NULL, &err, - str_lvm, "vgchange", "-u", NULL); + "lvm", "vgchange", "-u", NULL); if (r == -1) { reply_with_error ("%s", err); return -1; diff --git a/daemon/md.c b/daemon/md.c index 64d98fae5..7e6c067a3 100644 --- a/daemon/md.c +++ b/daemon/md.c @@ -37,12 +37,12 @@ #include "optgroups.h" #include "c-ctype.h" -GUESTFSD_EXT_CMD(str_mdadm, mdadm); +DECLARE_EXTERNAL_COMMANDS ("mdadm"); int optgroup_mdadm_available (void) { - return prog_exists (str_mdadm); + return prog_exists ("mdadm"); } static size_t @@ -138,7 +138,7 @@ do_md_create (const char *name, char *const *devices, const char *argv[MAX_ARGS]; size_t i = 0; - ADD_ARG (argv, i, str_mdadm); + ADD_ARG (argv, i, "mdadm"); ADD_ARG (argv, i, "--create"); /* --run suppresses "Continue creating array" question */ ADD_ARG (argv, i, "--run"); @@ -292,7 +292,7 @@ do_md_detail (const char *md) CLEANUP_FREE_STRINGSBUF DECLARE_STRINGSBUF (ret); - const char *mdadm[] = { str_mdadm, "-D", "--export", md, NULL }; + const char *mdadm[] = { "mdadm", "-D", "--export", md, NULL }; r = commandv (&out, &err, mdadm); if (r == -1) { reply_with_error ("%s", err); @@ -353,7 +353,7 @@ do_md_stop (const char *md) int r; CLEANUP_FREE char *err = NULL; - const char *mdadm[] = { str_mdadm, "--stop", md, NULL}; + const char *mdadm[] = { "mdadm", "--stop", md, NULL}; r = commandv (NULL, &err, mdadm); if (r == -1) { reply_with_error ("%s", err); diff --git a/daemon/mkfs.c b/daemon/mkfs.c index a376a1780..3f7fe84f5 100644 --- a/daemon/mkfs.c +++ b/daemon/mkfs.c @@ -30,8 +30,7 @@ #define MAX_ARGS 64 -GUESTFSD_EXT_CMD(str_mke2fs, mke2fs); -GUESTFSD_EXT_CMD(str_mkfs, mkfs); +DECLARE_EXTERNAL_COMMANDS ("mke2fs", "mkfs") /* Takes optional arguments, consult optargs_bitmask. */ int @@ -55,9 +54,9 @@ do_mkfs (const char *fstype, const char *device, int blocksize, * option. */ if (extfs) - ADD_ARG (argv, i, str_mke2fs); + ADD_ARG (argv, i, "mke2fs"); else - ADD_ARG (argv, i, str_mkfs); + ADD_ARG (argv, i, "mkfs"); ADD_ARG (argv, i, "-t"); ADD_ARG (argv, i, fstype); diff --git a/daemon/modprobe.c b/daemon/modprobe.c index 0b7896ae7..dc0ad65c0 100644 --- a/daemon/modprobe.c +++ b/daemon/modprobe.c @@ -27,7 +27,7 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_modprobe, modprobe); +DECLARE_EXTERNAL_COMMANDS ("modprobe") int optgroup_linuxmodules_available (void) @@ -39,7 +39,7 @@ optgroup_linuxmodules_available (void) if (access ("/proc/modules", R_OK) == -1 && errno == ENOENT) return 0; - return prog_exists (str_modprobe); + return prog_exists ("modprobe"); } int @@ -48,7 +48,7 @@ do_modprobe (const char *module) CLEANUP_FREE char *err = NULL; int r; - r = command (NULL, &err, str_modprobe, module, NULL); + r = command (NULL, &err, "modprobe", module, NULL); if (r == -1) { reply_with_error ("%s", err); diff --git a/daemon/mount.c b/daemon/mount.c index 0ad9626a7..e001609ea 100644 --- a/daemon/mount.c +++ b/daemon/mount.c @@ -33,8 +33,7 @@ #define MAX_ARGS 64 -GUESTFSD_EXT_CMD(str_mount, mount); -GUESTFSD_EXT_CMD(str_umount, umount); +DECLARE_EXTERNAL_COMMANDS ("mount", "umount") /* You must mount something on "/" first before many operations. * Hence we have an internal function which can test if something is @@ -176,11 +175,11 @@ mount_vfs_nochroot (const char *options, const char *vfstype, int r; if (vfstype) r = command (NULL, &error, - str_mount, "-o", options_plus ? options_plus : options, + "mount", "-o", options_plus ? options_plus : options, "-t", vfstype, device, mp, NULL); else r = command (NULL, &error, - str_mount, "-o", options_plus ? options_plus : options, + "mount", "-o", options_plus ? options_plus : options, device, mp, NULL); if (r == -1) { reply_with_error ("%s on %s (options: '%s'): %s", @@ -238,7 +237,7 @@ do_umount (const char *pathordevice, /* Use the external /bin/umount program, so that /etc/mtab is kept * updated. */ - ADD_ARG (argv, i, str_umount); + ADD_ARG (argv, i, "umount"); if (force) ADD_ARG (argv, i, "-f"); @@ -412,7 +411,7 @@ do_umount_all (void) for (i = 0; i < mounts.size; ++i) { CLEANUP_FREE char *err = NULL; - r = command (NULL, &err, str_umount, mounts.argv[i], NULL); + r = command (NULL, &err, "umount", mounts.argv[i], NULL); if (r == -1) { reply_with_error ("umount: %s: %s", mounts.argv[i], err); return -1; @@ -445,7 +444,7 @@ do_mount_loop (const char *file, const char *mountpoint) return -1; } - r = command (NULL, &error, str_mount, "-o", "loop", buf, mp, NULL); + r = command (NULL, &error, "mount", "-o", "loop", buf, mp, NULL); if (r == -1) { reply_with_error ("%s on %s: %s", file, mountpoint, error); return -1; @@ -480,7 +479,7 @@ do_remount (const char *mountpoint, int rw) /* XXX Do we need to check the mountpoint exists? */ - r = command (NULL, &err, str_mount, "-o", options, mp, NULL); + r = command (NULL, &err, "mount", "-o", options, mp, NULL); if (r == -1) { reply_with_error ("%s: %s: %s", mountpoint, options, err); return -1; diff --git a/daemon/ntfs.c b/daemon/ntfs.c index 3b759fef9..c13bcc70c 100644 --- a/daemon/ntfs.c +++ b/daemon/ntfs.c @@ -31,21 +31,19 @@ #define MAX_ARGS 64 -GUESTFSD_EXT_CMD(str_ntfs3g_probe, ntfs-3g.probe); -GUESTFSD_EXT_CMD(str_ntfsresize, ntfsresize); -GUESTFSD_EXT_CMD(str_ntfsfix, ntfsfix); -GUESTFSD_EXT_CMD(str_ntfslabel, ntfslabel); +DECLARE_EXTERNAL_COMMANDS ("ntfs-3g.probe", + "ntfsresize", "ntfsfix", "ntfslabel") int optgroup_ntfs3g_available (void) { - return prog_exists (str_ntfs3g_probe); + return prog_exists ("ntfs3g.probe"); } int optgroup_ntfsprogs_available (void) { - return prog_exists (str_ntfsresize); + return prog_exists ("ntfsresize"); } char * @@ -56,7 +54,7 @@ ntfs_get_label (const char *device) char *out = NULL; size_t len; - r = command (&out, &err, str_ntfslabel, device, NULL); + r = command (&out, &err, "ntfslabel", device, NULL); if (r == -1) { reply_with_error ("%s", err); free (out); @@ -81,7 +79,7 @@ ntfs_set_label (const char *device, const char *label) * characters and return an error. This is not so easy since we * don't have the required libraries. */ - r = command (NULL, &err, str_ntfslabel, device, label, NULL); + r = command (NULL, &err, "ntfslabel", device, label, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -99,7 +97,7 @@ do_ntfs_3g_probe (int rw, const char *device) rw_flag = rw ? "-w" : "-r"; - r = commandr (NULL, &err, str_ntfs3g_probe, rw_flag, device, NULL); + r = commandr (NULL, &err, "ntfs3g.probe", rw_flag, device, NULL); if (r == -1) { reply_with_error ("%s: %s", device, err); return -1; @@ -118,7 +116,7 @@ do_ntfsresize (const char *device, int64_t size, int force) size_t i = 0; char size_str[32]; - ADD_ARG (argv, i, str_ntfsresize); + ADD_ARG (argv, i, "ntfsresize"); ADD_ARG (argv, i, "-P"); if (optargs_bitmask & GUESTFS_NTFSRESIZE_SIZE_BITMASK) { @@ -170,7 +168,7 @@ ntfs_minimum_size (const char *device) int32_t cluster_size = 0; /* FS may be marked for check, so force ntfsresize */ - r = command (&out, &err, str_ntfsresize, "--info", "-ff", device, NULL); + r = command (&out, &err, "ntfsresize", "--info", "-ff", device, NULL); lines = split_lines (out); if (lines == NULL) @@ -249,7 +247,7 @@ do_ntfsfix (const char *device, int clearbadsectors) int r; CLEANUP_FREE char *err = NULL; - ADD_ARG (argv, i, str_ntfsfix); + ADD_ARG (argv, i, "ntfsfix"); if ((optargs_bitmask & GUESTFS_NTFSFIX_CLEARBADSECTORS_BITMASK) && clearbadsectors) diff --git a/daemon/ntfsclone.c b/daemon/ntfsclone.c index dc3ac278d..020ce89d5 100644 --- a/daemon/ntfsclone.c +++ b/daemon/ntfsclone.c @@ -32,7 +32,7 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_ntfsclone, ntfsclone); +DECLARE_EXTERNAL_COMMANDS ("ntfsclone") /* Read the error file. Returns a string that the caller must free. */ static char * @@ -83,7 +83,7 @@ do_ntfsclone_in (const char *device) /* Construct the command. */ if (asprintf (&cmd, "%s -O %s --restore-image - 2> %s", - str_ntfsclone, device, error_file) == -1) { + "ntfsclone", device, error_file) == -1) { err = errno; r = cancel_receive (); errno = err; @@ -161,8 +161,7 @@ do_ntfsclone_out (const char *device, } /* Construct the ntfsclone command. */ - if (asprintf (&cmd, "%s -o - --save-image%s%s%s%s%s %s", - str_ntfsclone, + if (asprintf (&cmd, "ntfsclone -o - --save-image%s%s%s%s%s %s", (optargs_bitmask & GUESTFS_NTFSCLONE_OUT_METADATAONLY_BITMASK) && metadataonly ? " --metadata" : "", (optargs_bitmask & GUESTFS_NTFSCLONE_OUT_RESCUE_BITMASK) && rescue ? " --rescue" : "", (optargs_bitmask & GUESTFS_NTFSCLONE_OUT_IGNOREFSCHECK_BITMASK) && ignorefscheck ? " --ignore-fs-check" : "", diff --git a/daemon/parted.c b/daemon/parted.c index 03e83cb32..f93d710c5 100644 --- a/daemon/parted.c +++ b/daemon/parted.c @@ -30,9 +30,7 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_parted, parted); -GUESTFSD_EXT_CMD(str_sfdisk, sfdisk); -GUESTFSD_EXT_CMD(str_sgdisk, sgdisk); +DECLARE_EXTERNAL_COMMANDS ("parted", "sfdisk", "sgdisk") /* Notes: * @@ -88,7 +86,7 @@ do_part_init (const char *device, const char *parttype) udev_settle (); r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_parted, "-s", "--", device, "mklabel", parttype, NULL); + "parted", "-s", "--", device, "mklabel", parttype, NULL); if (r == -1) { reply_with_error ("parted: %s: %s", device, err); return -1; @@ -141,7 +139,7 @@ do_part_add (const char *device, const char *prlogex, * this as a bug in the parted mkpart command. */ r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_parted, "-s", "--", + "parted", "-s", "--", device, "mkpart", prlogex, startstr, endstr, NULL); if (r == -1) { reply_with_error ("parted: %s: %s", device, err); @@ -170,7 +168,7 @@ do_part_del (const char *device, int partnum) udev_settle (); r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_parted, "-s", "--", device, "rm", partnum_str, NULL); + "parted", "-s", "--", device, "rm", partnum_str, NULL); if (r == -1) { reply_with_error ("parted: %s: %s", device, err); return -1; @@ -209,7 +207,7 @@ do_part_disk (const char *device, const char *parttype) udev_settle (); r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_parted, "-s", "--", + "parted", "-s", "--", device, "mklabel", parttype, /* See comment about about the parted mkpart command. */ @@ -243,7 +241,7 @@ do_part_set_bootable (const char *device, int partnum, int bootable) udev_settle (); r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_parted, "-s", "--", + "parted", "-s", "--", device, "set", partstr, "boot", bootable ? "on" : "off", NULL); if (r == -1) { reply_with_error ("parted: %s: %s", device, err); @@ -273,7 +271,7 @@ do_part_set_name (const char *device, int partnum, const char *name) udev_settle (); r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_parted, "-s", "--", device, "name", partstr, name, NULL); + "parted", "-s", "--", device, "name", partstr, name, NULL); if (r == -1) { reply_with_error ("parted: %s: %s", device, err); return -1; @@ -323,11 +321,11 @@ print_partition_table (const char *device, bool add_m_option) udev_settle (); if (add_m_option) - r = command (&out, &err, str_parted, "-m", "-s", "--", device, + r = command (&out, &err, "parted", "-m", "-s", "--", device, "unit", "b", "print", NULL); else - r = command (&out, &err, str_parted, "-s", "--", device, + r = command (&out, &err, "parted", "-s", "--", device, "unit", "b", "print", NULL); @@ -511,7 +509,7 @@ test_sfdisk_has_part_type (void) int r; CLEANUP_FREE char *out = NULL, *err = NULL; - r = command (&out, &err, str_sfdisk, "--help", NULL); + r = command (&out, &err, "sfdisk", "--help", NULL); if (r == -1) { reply_with_error ("%s: %s", "sfdisk --help", err); return -1; @@ -545,7 +543,7 @@ do_part_get_mbr_id (const char *device, int partnum) udev_settle (); - r = command (&out, &err, str_sfdisk, param, device, partnum_str, NULL); + r = command (&out, &err, "sfdisk", param, device, partnum_str, NULL); if (r == -1) { reply_with_error ("sfdisk %s: %s", param, err); return -1; @@ -585,7 +583,7 @@ do_part_set_mbr_id (const char *device, int partnum, int idbyte) udev_settle (); - r = command (NULL, &err, str_sfdisk, + r = command (NULL, &err, "sfdisk", param, device, partnum_str, idbyte_str, NULL); if (r == -1) { reply_with_error ("sfdisk %s: %s", param, err); @@ -600,7 +598,7 @@ do_part_set_mbr_id (const char *device, int partnum, int idbyte) int optgroup_gdisk_available (void) { - return prog_exists (str_sgdisk); + return prog_exists ("sgdisk"); } int @@ -619,10 +617,10 @@ do_part_set_gpt_type (const char *device, int partnum, const char *guid) CLEANUP_FREE char *err = NULL; int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_sgdisk, device, "-t", typecode, NULL); + "sgdisk", device, "-t", typecode, NULL); if (r == -1) { - reply_with_error ("%s %s -t %s: %s", str_sgdisk, device, typecode, err); + reply_with_error ("%s %s -t %s: %s", "sgdisk", device, typecode, err); return -1; } @@ -645,10 +643,10 @@ do_part_set_gpt_guid (const char *device, int partnum, const char *guid) CLEANUP_FREE char *err = NULL; int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_sgdisk, device, "-u", typecode, NULL); + "sgdisk", device, "-u", typecode, NULL); if (r == -1) { - reply_with_error ("%s %s -u %s: %s", str_sgdisk, device, typecode, err); + reply_with_error ("%s %s -u %s: %s", "sgdisk", device, typecode, err); return -1; } @@ -674,10 +672,10 @@ sgdisk_info_extract_field (const char *device, int partnum, const char *field, CLEANUP_FREE char *err = NULL; int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_sgdisk, device, "-i", partnum_str, NULL); + "sgdisk", device, "-i", partnum_str, NULL); if (r == -1) { - reply_with_error ("%s %s -i %s: %s", str_sgdisk, device, partnum_str, err); + reply_with_error ("%s %s -i %s: %s", "sgdisk", device, partnum_str, err); return NULL; } @@ -686,7 +684,7 @@ sgdisk_info_extract_field (const char *device, int partnum, const char *field, CLEANUP_FREE_STRING_LIST char **lines = split_lines (err); if (lines == NULL) { reply_with_error ("'%s %s -i %i' returned no output", - str_sgdisk, device, partnum); + "sgdisk", device, partnum); return NULL; } @@ -946,16 +944,16 @@ do_part_get_disk_guid (const char *device) CLEANUP_FREE char *err = NULL; int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_sgdisk, device, "-p", NULL); + "sgdisk", device, "-p", NULL); if (r == -1) { - reply_with_error ("%s %s -p: %s", str_sgdisk, device, err); + reply_with_error ("%s %s -p: %s", "sgdisk", device, err); return NULL; } CLEANUP_FREE_STRING_LIST char **lines = split_lines (err); if (lines == NULL) { reply_with_error ("'%s %s -p' returned no output", - str_sgdisk, device); + "sgdisk", device); return NULL; } @@ -988,10 +986,10 @@ do_part_set_disk_guid (const char *device, const char *guid) { CLEANUP_FREE char *err = NULL; int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_sgdisk, device, "-U", guid, NULL); + "sgdisk", device, "-U", guid, NULL); if (r == -1) { - reply_with_error ("%s %s -U %s: %s", str_sgdisk, device, guid, err); + reply_with_error ("%s %s -U %s: %s", "sgdisk", device, guid, err); return -1; } @@ -1003,10 +1001,10 @@ do_part_set_disk_guid_random (const char *device) { CLEANUP_FREE char *err = NULL; int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_sgdisk, device, "-U", "R", NULL); + "sgdisk", device, "-U", "R", NULL); if (r == -1) { - reply_with_error ("%s %s -U R: %s", str_sgdisk, device, err); + reply_with_error ("%s %s -U R: %s", "sgdisk", device, err); return -1; } @@ -1022,25 +1020,25 @@ do_part_expand_gpt(const char *device) * (e.g. recreate partition table and so on). * We do not want such behavior, so dry-run at first.*/ int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_sgdisk, "--pretend", "-e", device, NULL); + "sgdisk", "--pretend", "-e", device, NULL); if (r == -1) { - reply_with_error ("%s --pretend -e %s: %s", str_sgdisk, device, err); + reply_with_error ("%s --pretend -e %s: %s", "sgdisk", device, err); return -1; } if (err && strlen(err) != 0) { /* Unexpected actions. */ - reply_with_error ("%s --pretend -e %s: %s", str_sgdisk, device, err); + reply_with_error ("%s --pretend -e %s: %s", "sgdisk", device, err); return -1; } free(err); /* Now we can do a real run. */ r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, - str_sgdisk, "-e", device, NULL); + "sgdisk", "-e", device, NULL); if (r == -1) { - reply_with_error ("%s -e %s: %s", str_sgdisk, device, err); + reply_with_error ("%s -e %s: %s", "sgdisk", device, err); return -1; } diff --git a/daemon/rsync.c b/daemon/rsync.c index d238d6174..6c3531d39 100644 --- a/daemon/rsync.c +++ b/daemon/rsync.c @@ -30,12 +30,12 @@ #define MAX_ARGS 64 -GUESTFSD_EXT_CMD(str_rsync, rsync); +DECLARE_EXTERNAL_COMMANDS ("rsync") int optgroup_rsync_available (void) { - return prog_exists (str_rsync); + return prog_exists ("rsync"); } static int @@ -48,7 +48,7 @@ rsync (const char *src, const char *src_orig, int r; CLEANUP_FREE char *err = NULL; - ADD_ARG (argv, i, str_rsync); + ADD_ARG (argv, i, "rsync"); if (archive) ADD_ARG (argv, i, "--archive"); diff --git a/daemon/scrub.c b/daemon/scrub.c index c10b0a0c1..a48a2786a 100644 --- a/daemon/scrub.c +++ b/daemon/scrub.c @@ -28,12 +28,12 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_scrub, scrub); +DECLARE_EXTERNAL_COMMANDS ("scrub") int optgroup_scrub_available (void) { - return prog_exists (str_scrub); + return prog_exists ("scrub"); } int @@ -42,7 +42,7 @@ do_scrub_device (const char *device) CLEANUP_FREE char *err = NULL; int r; - r = command (NULL, &err, str_scrub, device, NULL); + r = command (NULL, &err, "scrub", device, NULL); if (r == -1) { reply_with_error ("%s: %s", device, err); return -1; @@ -68,7 +68,7 @@ do_scrub_file (const char *file) return -1; } - r = command (NULL, &err, str_scrub, "-r", buf, NULL); + r = command (NULL, &err, "scrub", "-r", buf, NULL); if (r == -1) { reply_with_error ("%s: %s", file, err); return -1; @@ -91,7 +91,7 @@ do_scrub_freespace (const char *dir) return -1; } - r = command (NULL, &err, str_scrub, "-X", buf, NULL); + r = command (NULL, &err, "scrub", "-X", buf, NULL); if (r == -1) { reply_with_error ("%s: %s", dir, err); return -1; diff --git a/daemon/selinux-relabel.c b/daemon/selinux-relabel.c index fa80cec7a..9e73659d7 100644 --- a/daemon/selinux-relabel.c +++ b/daemon/selinux-relabel.c @@ -29,14 +29,14 @@ #include "ignore-value.h" -GUESTFSD_EXT_CMD(str_setfiles, setfiles); +DECLARE_EXTERNAL_COMMANDS ("setfiles") #define MAX_ARGS 64 int optgroup_selinuxrelabel_available (void) { - return prog_exists (str_setfiles); + return prog_exists ("setfiles"); } static int @@ -46,7 +46,7 @@ setfiles_has_m_option (void) CLEANUP_FREE char *err = NULL; if (flag == -1) { - ignore_value (command (NULL, &err, str_setfiles, "-m", NULL)); + ignore_value (command (NULL, &err, "setfiles", "-m", NULL)); flag = err && strstr (err, /* "invalid option -- " */ "'m'") == NULL; } @@ -86,7 +86,7 @@ do_selinux_relabel (const char *specfile, const char *path, * observations to the bug report: * https://bugzilla.redhat.com/show_bug.cgi?id=1396297 */ - ADD_ARG (argv, i, str_setfiles); + ADD_ARG (argv, i, "setfiles"); if (force) ADD_ARG (argv, i, "-F"); diff --git a/daemon/sfdisk.c b/daemon/sfdisk.c index e32e63707..ce86666d8 100644 --- a/daemon/sfdisk.c +++ b/daemon/sfdisk.c @@ -28,8 +28,7 @@ #include "daemon.h" #include "actions.h" -GUESTFSD_EXT_CMD(str_sfdisk, sfdisk); -GUESTFSD_EXT_CMD(str_blockdev, blockdev); +DECLARE_EXTERNAL_COMMANDS ("sfdisk", "blockdev") static int sfdisk (const char *device, int n, int cyls, int heads, int sectors, @@ -40,7 +39,7 @@ sfdisk (const char *device, int n, int cyls, int heads, int sectors, char buf[256]; int i; - strcpy (buf, str_sfdisk); + strcpy (buf, "sfdisk"); if (n > 0) sprintf (buf + strlen (buf), " -N %d", n); @@ -103,7 +102,7 @@ sfdisk (const char *device, int n, int cyls, int heads, int sectors, * other component. In any case, reread the partition table * unconditionally here. */ - (void) command (NULL, NULL, str_blockdev, "--rereadpt", device, NULL); + (void) command (NULL, NULL, "blockdev", "--rereadpt", device, NULL); udev_settle (); @@ -139,7 +138,7 @@ sfdisk_flag (const char *device, const char *flag) CLEANUP_FREE char *err = NULL; int r; - r = command (&out, &err, str_sfdisk, flag, device, NULL); + r = command (&out, &err, "sfdisk", flag, device, NULL); if (r == -1) { reply_with_error ("%s: %s", device, err); free (out); diff --git a/daemon/sh.c b/daemon/sh.c index baebd3960..afb98e292 100644 --- a/daemon/sh.c +++ b/daemon/sh.c @@ -32,9 +32,7 @@ #include "ignore-value.h" -GUESTFSD_EXT_CMD(str_cp, cp); -GUESTFSD_EXT_CMD(str_mount, mount); -GUESTFSD_EXT_CMD(str_umount, umount); +DECLARE_EXTERNAL_COMMANDS ("cp", "mount", "umount") #ifdef HAVE_ATTRIBUTE_CLEANUP #define CLEANUP_BIND_STATE __attribute__((cleanup(free_bind_state))) @@ -100,20 +98,20 @@ bind_mount (struct bind_state *bs) * However I have not found a reliable way to unmount the same set * of directories (umount -R does NOT work). */ - r = command (NULL, NULL, str_mount, "--bind", "/dev", bs->sysroot_dev, NULL); + r = command (NULL, NULL, "mount", "--bind", "/dev", bs->sysroot_dev, NULL); bs->dev_ok = r != -1; - r = command (NULL, NULL, str_mount, "--bind", "/dev/pts", bs->sysroot_dev_pts, NULL); + r = command (NULL, NULL, "mount", "--bind", "/dev/pts", bs->sysroot_dev_pts, NULL); bs->dev_pts_ok = r != -1; - r = command (NULL, NULL, str_mount, "--bind", "/proc", bs->sysroot_proc, NULL); + r = command (NULL, NULL, "mount", "--bind", "/proc", bs->sysroot_proc, NULL); bs->proc_ok = r != -1; /* Note on the next line we have to bind-mount /sys/fs/selinux (appliance * kernel) on top of /selinux (where guest is expecting selinux). */ - r = command (NULL, NULL, str_mount, "--bind", "/sys/fs/selinux", bs->sysroot_selinux, NULL); + r = command (NULL, NULL, "mount", "--bind", "/sys/fs/selinux", bs->sysroot_selinux, NULL); bs->selinux_ok = r != -1; - r = command (NULL, NULL, str_mount, "--bind", "/sys", bs->sysroot_sys, NULL); + r = command (NULL, NULL, "mount", "--bind", "/sys", bs->sysroot_sys, NULL); bs->sys_ok = r != -1; - r = command (NULL, NULL, str_mount, "--bind", "/sys/fs/selinux", bs->sysroot_sys_fs_selinux, NULL); + r = command (NULL, NULL, "mount", "--bind", "/sys/fs/selinux", bs->sysroot_sys_fs_selinux, NULL); bs->sys_fs_selinux_ok = r != -1; bs->mounted = true; @@ -124,7 +122,7 @@ bind_mount (struct bind_state *bs) static inline void umount_ignore_fail (const char *path) { - ignore_value (command (NULL, NULL, str_umount, path, NULL)); + ignore_value (command (NULL, NULL, "umount", path, NULL)); } static void @@ -205,7 +203,7 @@ set_up_etc_resolv_conf (struct resolver_state *rs) /* Now that the guest's <sysroot>/etc/resolv.conf is out the way, we * can create our own copy of the appliance /etc/resolv.conf. */ - ignore_value (command (NULL, NULL, str_cp, "/etc/resolv.conf", + ignore_value (command (NULL, NULL, "cp", "/etc/resolv.conf", rs->sysroot_etc_resolv_conf, NULL)); rs->mounted = true; diff --git a/daemon/sleuthkit.c b/daemon/sleuthkit.c index bdbdb0f89..bde506ac4 100644 --- a/daemon/sleuthkit.c +++ b/daemon/sleuthkit.c @@ -31,8 +31,7 @@ static int send_command_output (const char *cmd); -GUESTFSD_EXT_CMD(str_icat, icat); -GUESTFSD_EXT_CMD(str_blkls, blkls); +DECLARE_EXTERNAL_COMMANDS ("icat", "blkls") int do_download_inode (const mountable_t *mountable, int64_t inode) @@ -47,8 +46,8 @@ do_download_inode (const mountable_t *mountable, int64_t inode) } /* Construct the command. */ - ret = asprintf (&cmd, "%s -r %s %" PRIi64, - str_icat, mountable->device, inode); + ret = asprintf (&cmd, "icat -r %s %" PRIi64, + mountable->device, inode); if (ret < 0) { reply_with_perror ("asprintf"); return -1; @@ -84,8 +83,8 @@ do_download_blocks (const mountable_t *mountable, int64_t start, int64_t stop, params = ""; /* Construct the command. */ - ret = asprintf (&cmd, "%s %s %s %" PRIi64 "-%" PRIi64, - str_blkls, mountable->device, params, start, stop); + ret = asprintf (&cmd, "blkls %s %s %" PRIi64 "-%" PRIi64, + mountable->device, params, start, stop); if (ret < 0) { reply_with_perror ("asprintf"); return -1; @@ -155,5 +154,5 @@ send_command_output (const char *cmd) int optgroup_sleuthkit_available (void) { - return prog_exists (str_icat); + return prog_exists ("icat"); } diff --git a/daemon/squashfs.c b/daemon/squashfs.c index c30777661..0564222ff 100644 --- a/daemon/squashfs.c +++ b/daemon/squashfs.c @@ -29,12 +29,12 @@ #define MAX_ARGS 64 -GUESTFSD_EXT_CMD(str_mksquashfs, mksquashfs); +DECLARE_EXTERNAL_COMMANDS ("mksquashfs") int optgroup_squashfs_available (void) { - return prog_exists (str_mksquashfs); + return prog_exists ("mksquashfs"); } /* Takes optional arguments, consult optargs_bitmask. */ @@ -80,7 +80,7 @@ do_mksquashfs (const char *path, const char *compress, char *const *excludes) return -1; } - ADD_ARG (argv, i, str_mksquashfs); + ADD_ARG (argv, i, "mksquashfs"); ADD_ARG (argv, i, buf); ADD_ARG (argv, i, tmpfile); ADD_ARG (argv, i, "-noappend"); diff --git a/daemon/swap.c b/daemon/swap.c index fea4a9dcf..30b37d9a6 100644 --- a/daemon/swap.c +++ b/daemon/swap.c @@ -31,10 +31,7 @@ #include "ignore-value.h" -GUESTFSD_EXT_CMD(str_mkswap, mkswap); -GUESTFSD_EXT_CMD(str_swapon, swapon); -GUESTFSD_EXT_CMD(str_swapoff, swapoff); -GUESTFSD_EXT_CMD(str_swaplabel, swaplabel); +DECLARE_EXTERNAL_COMMANDS ("mkswap", "swapon", "swapoff", "swaplabel") /* Confirmed this is true for Linux swap partitions from the Linux sources. */ #define SWAP_LABEL_MAX 16 @@ -55,7 +52,7 @@ do_mkswap (const char *device, const char *label, const char *uuid) int r; CLEANUP_FREE char *err = NULL; - ADD_ARG (argv, i, str_mkswap); + ADD_ARG (argv, i, "mkswap"); ADD_ARG (argv, i, "-f"); if (optargs_bitmask & GUESTFS_MKSWAP_LABEL_BITMASK) { @@ -117,7 +114,7 @@ do_mkswap_file (const char *path) return -1; } - r = command (NULL, &err, str_mkswap, "-f", buf, NULL); + r = command (NULL, &err, "mkswap", "-f", buf, NULL); if (r == -1) { reply_with_error ("%s: %s", path, err); @@ -154,13 +151,13 @@ swaponoff (const char *cmd, const char *flag, const char *value) int do_swapon_device (const char *device) { - return swaponoff (str_swapon, NULL, device); + return swaponoff ("swapon", NULL, device); } int do_swapoff_device (const char *device) { - return swaponoff (str_swapoff, NULL, device); + return swaponoff ("swapoff", NULL, device); } int @@ -174,7 +171,7 @@ do_swapon_file (const char *path) return -1; } - return swaponoff (str_swapon, NULL, buf); + return swaponoff ("swapon", NULL, buf); } int @@ -188,7 +185,7 @@ do_swapoff_file (const char *path) return -1; } - return swaponoff (str_swapoff, NULL, buf); + return swaponoff ("swapoff", NULL, buf); } int @@ -200,7 +197,7 @@ do_swapon_label (const char *label) return -1; } - return swaponoff (str_swapon, "-L", label); + return swaponoff ("swapon", "-L", label); } int @@ -212,19 +209,19 @@ do_swapoff_label (const char *label) return -1; } - return swaponoff (str_swapoff, "-L", label); + return swaponoff ("swapoff", "-L", label); } int do_swapon_uuid (const char *uuid) { - return swaponoff (str_swapon, "-U", uuid); + return swaponoff ("swapon", "-U", uuid); } int do_swapoff_uuid (const char *uuid) { - return swaponoff (str_swapoff, "-U", uuid); + return swaponoff ("swapoff", "-U", uuid); } int @@ -233,7 +230,7 @@ swap_set_uuid (const char *device, const char *uuid) int r; CLEANUP_FREE char *err = NULL; - r = command (NULL, &err, str_swaplabel, "-U", uuid, device, NULL); + r = command (NULL, &err, "swaplabel", "-U", uuid, device, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -254,7 +251,7 @@ swap_set_label (const char *device, const char *label) return -1; } - r = command (NULL, &err, str_swaplabel, "-L", label, device, NULL); + r = command (NULL, &err, "swaplabel", "-L", label, device, NULL); if (r == -1) { reply_with_error ("%s", err); return -1; diff --git a/daemon/syslinux.c b/daemon/syslinux.c index 08da170d5..e2a4ef980 100644 --- a/daemon/syslinux.c +++ b/daemon/syslinux.c @@ -28,19 +28,18 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_syslinux, syslinux); -GUESTFSD_EXT_CMD(str_extlinux, extlinux); +DECLARE_EXTERNAL_COMMANDS ("syslinux", "extlinux") int optgroup_syslinux_available (void) { - return prog_exists (str_syslinux); + return prog_exists ("syslinux"); } int optgroup_extlinux_available (void) { - return prog_exists (str_extlinux); + return prog_exists ("extlinux"); } /* Takes optional arguments, consult optargs_bitmask. */ @@ -53,7 +52,7 @@ do_syslinux (const char *device, const char *directory) CLEANUP_FREE char *err = NULL; int r; - ADD_ARG (argv, i, str_syslinux); + ADD_ARG (argv, i, "syslinux"); ADD_ARG (argv, i, "--install"); ADD_ARG (argv, i, "--force"); @@ -86,7 +85,7 @@ do_extlinux (const char *directory) return -1; } - r = command (NULL, &err, str_extlinux, "--install", buf, NULL); + r = command (NULL, &err, "extlinux", "--install", buf, NULL); if (r == -1) { reply_with_error ("%s: %s", directory, err); return -1; diff --git a/daemon/tar.c b/daemon/tar.c index c23aa0a86..85c5b8bca 100644 --- a/daemon/tar.c +++ b/daemon/tar.c @@ -35,7 +35,7 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_tar, tar); +DECLARE_EXTERNAL_COMMANDS ("tar") int optgroup_xz_available (void) @@ -187,7 +187,7 @@ do_tar_in (const char *dir, const char *compress, int xattrs, int selinux, int a /* "tar -C /sysroot%s -xf -" but we have to quote the dir. */ if (asprintf_nowarn (&cmd, "%s -C %R%s -xf - %s%s%s%s2> %s", - str_tar, + "tar", dir, filter, chown_supported ? "" : "--no-same-owner ", xattrs ? "--xattrs " : "", @@ -344,7 +344,7 @@ do_tar_out (const char *dir, const char *compress, int numericowner, /* "tar -C /sysroot%s -cf - ." but we have to quote the dir. */ if (asprintf_nowarn (&cmd, "%s -C %Q%s%s%s%s%s%s%s -cf - .", - str_tar, + "tar", buf, filter, numericowner ? " --numeric-owner" : "", exclude_from_file ? " -X " : "", diff --git a/daemon/test-print-external-commands.sh b/daemon/test-print-external-commands.sh new file mode 100755 index 000000000..e18f435b1 --- /dev/null +++ b/daemon/test-print-external-commands.sh @@ -0,0 +1,23 @@ +#!/bin/bash - +# libguestfs +# Copyright (C) 2009-2017 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +set -e + +$TEST_FUNCTIONS + +$VG ./guestfsd --print-external-commands diff --git a/daemon/xfs.c b/daemon/xfs.c index a0d08b2c9..4f826ba61 100644 --- a/daemon/xfs.c +++ b/daemon/xfs.c @@ -32,16 +32,13 @@ #define MAX_ARGS 64 -GUESTFSD_EXT_CMD(str_mkfs_xfs, mkfs.xfs); -GUESTFSD_EXT_CMD(str_xfs_admin, xfs_admin); -GUESTFSD_EXT_CMD(str_xfs_info, xfs_info); -GUESTFSD_EXT_CMD(str_xfs_growfs, xfs_growfs); -GUESTFSD_EXT_CMD(str_xfs_repair, xfs_repair); +DECLARE_EXTERNAL_COMMANDS ("mkfs.xfs", + "xfs_admin", "xfs_info", "xfs_growfs", "xfs_repair") int optgroup_xfs_available (void) { - return prog_exists (str_mkfs_xfs); + return prog_exists ("mkfs.xfs"); } /* Return everything up to the first comma, equals or space in the input @@ -341,7 +338,7 @@ do_xfs_info (const char *pathordevice) return NULL; } - r = command (&out, &err, str_xfs_info, buf, NULL); + r = command (&out, &err, "xfs_info", buf, NULL); if (r == -1) { reply_with_error ("%s", err); return NULL; @@ -376,7 +373,7 @@ do_xfs_growfs (const char *path, return -1; } - ADD_ARG (argv, i, str_xfs_growfs); + ADD_ARG (argv, i, "xfs_growfs"); /* Optional arguments */ if (!(optargs_bitmask & GUESTFS_XFS_GROWFS_DATASEC_BITMASK)) @@ -487,7 +484,7 @@ do_xfs_admin (const char *device, const char *argv[MAX_ARGS]; size_t i = 0; - ADD_ARG (argv, i, str_xfs_admin); + ADD_ARG (argv, i, "xfs_admin"); /* Optional arguments */ if (!(optargs_bitmask & GUESTFS_XFS_ADMIN_EXTUNWRITTEN_BITMASK)) @@ -564,7 +561,7 @@ do_xfs_repair (const char *device, size_t i = 0; int is_device; - ADD_ARG (argv, i, str_xfs_repair); + ADD_ARG (argv, i, "xfs_repair"); /* Optional arguments */ if (optargs_bitmask & GUESTFS_XFS_REPAIR_FORCELOGZERO_BITMASK) { diff --git a/daemon/zero.c b/daemon/zero.c index 5166807b5..e9126b757 100644 --- a/daemon/zero.c +++ b/daemon/zero.c @@ -32,7 +32,7 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_wipefs, wipefs); +DECLARE_EXTERNAL_COMMANDS ("wipefs") static const char zero_buf[4096]; @@ -81,7 +81,7 @@ do_zero (const char *device) int optgroup_wipefs_available (void) { - return prog_exists (str_wipefs); + return prog_exists ("wipefs"); } /* See RHBZ#872831 */ @@ -93,7 +93,7 @@ wipefs_has_force_option (void) CLEANUP_FREE char *out = NULL, *err = NULL; if (flag == -1) { - r = command (&out, &err, str_wipefs, "--help", NULL); + r = command (&out, &err, "wipefs", "--help", NULL); if (r == -1) { reply_with_error ("%s", err); return -1; @@ -118,7 +118,7 @@ do_wipefs (const char *device) if (force == -1) return -1; - ADD_ARG (argv, i, str_wipefs); + ADD_ARG (argv, i, "wipefs"); ADD_ARG (argv, i, "-a"); if (force) ADD_ARG (argv, i, "--force"); @@ -379,7 +379,7 @@ wipe_device_before_mkfs (const char *device) if (force == -1) return; - ADD_ARG (argv, i, str_wipefs); + ADD_ARG (argv, i, "wipefs"); ADD_ARG (argv, i, "-a"); if (force) ADD_ARG (argv, i, "--force"); diff --git a/daemon/zerofree.c b/daemon/zerofree.c index 4ba17dd81..b7bcb48fc 100644 --- a/daemon/zerofree.c +++ b/daemon/zerofree.c @@ -28,12 +28,12 @@ #include "actions.h" #include "optgroups.h" -GUESTFSD_EXT_CMD(str_zerofree, zerofree); +DECLARE_EXTERNAL_COMMANDS ("zerofree") int optgroup_zerofree_available (void) { - return prog_exists (str_zerofree); + return prog_exists ("zerofree"); } int @@ -42,7 +42,7 @@ do_zerofree (const char *device) CLEANUP_FREE char *err = NULL; int r; - r = command (NULL, &err, str_zerofree, device, NULL); + r = command (NULL, &err, "zerofree", device, NULL); if (r == -1) { reply_with_error ("%s: %s", device, err); return -1; -- 2.13.2
Richard Jones
2017-Jul-24 18:32 UTC
[Libguestfs] check-release FAILED (was: Re: [PATCH 2/2] daemon: Replace GUESTFSD_EXT_CMD with --print-external-commands.)
estfs.so make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/lua' Making all in lua/examples make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/lua/examples' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/lua/examples' Making all in gobject make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/gobject' make all-am make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/gobject' make[3]: Nothing to be done for 'all-am'. make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/gobject' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/gobject' Making all in csharp make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/csharp' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/csharp' Making all in common/mlutils make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlutils' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlutils' Making all in common/mlprogress make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlprogress' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlprogress' Making all in common/mlvisit make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlvisit' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlvisit' Making all in common/mlxml make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlxml' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlxml' Making all in mllib make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/mllib' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/mllib' Making all in customize make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/customize' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/customize' Making all in builder make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/builder' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/builder' Making all in builder/templates make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/builder/templates' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/builder/templates' Making all in get-kernel make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/get-kernel' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/get-kernel' Making all in resize make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/resize' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/resize' Making all in sparsify make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/sparsify' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/sparsify' Making all in sysprep make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/sysprep' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/sysprep' Making all in v2v make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/v2v' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/v2v' Making all in v2v/test-harness make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/v2v/test-harness' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/v2v/test-harness' Making all in dib make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/dib' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/dib' Making all in tools make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tools' for f in tools/virt-list-filesystems tools/virt-list-partitions tools/virt-tar tools/virt-win-reg; do echo $f; done > ../po/POTFILES-pl make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tools' Making all in fuse make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/fuse' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/fuse' Making all in utils/boot-analysis make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/utils/boot-analysis' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/utils/boot-analysis' Making all in utils/boot-benchmark make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/utils/boot-benchmark' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/utils/boot-benchmark' Making all in utils/qemu-boot make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/utils/qemu-boot' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/utils/qemu-boot' Making all in utils/qemu-speed-test make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/utils/qemu-speed-test' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/utils/qemu-speed-test' Making all in po-docs make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/po-docs' Making all in ja make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/po-docs/ja' POD guestfish.1 POD guestfs.3 POD guestfs-building.1 POD guestfs-erlang.3 POD guestfs-examples.3 POD guestfs-faq.1 POD guestfs-hacking.1 POD guestfs-internals.1 POD guestfs-golang.3 POD guestfs-java.3 POD guestfs-lua.3 POD guestfs-ocaml.3 POD guestfs-performance.1 POD guestfs-perl.3 POD guestfs-python.3 POD guestfs-recipes.1 POD guestfs-release-notes.1 POD guestfs-ruby.3 POD guestfs-security.1 POD guestfs-testing.1 POD guestfsd.8 POD guestmount.1 POD guestunmount.1 POD libguestfs-make-fixed-appliance.1 POD libguestfs-test-tool.1 POD libguestfs-tools.conf.5 POD virt-alignment-scan.1 POD virt-builder.1 POD virt-cat.1 POD virt-copy-in.1 POD virt-copy-out.1 POD virt-customize.1 POD virt-df.1 POD virt-dib.1 POD virt-diff.1 POD virt-edit.1 POD virt-filesystems.1 POD virt-format.1 POD virt-get-kernel.1 POD virt-index-validate.1 POD virt-inspector.1 POD virt-list-filesystems.1 POD virt-list-partitions.1 POD virt-log.1 POD virt-ls.1 POD virt-make-fs.1 POD virt-p2v.1 POD virt-p2v-make-disk.1 POD virt-p2v-make-kickstart.1 POD virt-rescue.1 POD virt-resize.1 POD virt-sparsify.1 POD virt-sysprep.1 POD virt-tar.1 POD virt-tar-in.1 POD virt-tar-out.1 POD virt-v2v.1 POD virt-v2v-test-harness.1 POD virt-win-reg.1 make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/po-docs/ja' Making all in uk make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/po-docs/uk' POD guestfish.1 POD guestfs.3 POD guestfs-building.1 POD guestfs-erlang.3 POD guestfs-examples.3 POD guestfs-faq.1 POD guestfs-hacking.1 POD guestfs-internals.1 POD guestfs-golang.3 POD guestfs-java.3 POD guestfs-lua.3 POD guestfs-ocaml.3 POD guestfs-performance.1 POD guestfs-perl.3 POD guestfs-python.3 POD guestfs-recipes.1 POD guestfs-release-notes.1 POD guestfs-ruby.3 POD guestfs-security.1 POD guestfs-testing.1 POD guestfsd.8 POD guestmount.1 POD guestunmount.1 POD libguestfs-make-fixed-appliance.1 POD libguestfs-test-tool.1 POD libguestfs-tools.conf.5 POD virt-alignment-scan.1 POD virt-builder.1 POD virt-cat.1 POD virt-copy-in.1 POD virt-copy-out.1 POD virt-customize.1 POD virt-df.1 POD virt-dib.1 POD virt-diff.1 POD virt-edit.1 POD virt-filesystems.1 POD virt-format.1 POD virt-get-kernel.1 POD virt-index-validate.1 POD virt-inspector.1 POD virt-list-filesystems.1 POD virt-list-partitions.1 POD virt-log.1 POD virt-ls.1 POD virt-make-fs.1 POD virt-p2v.1 POD virt-p2v-make-disk.1 POD virt-p2v-make-kickstart.1 POD virt-rescue.1 POD virt-resize.1 POD virt-sparsify.1 POD virt-sysprep.1 POD virt-tar.1 POD virt-tar-in.1 POD virt-tar-out.1 POD virt-v2v.1 POD virt-v2v-test-harness.1 POD virt-win-reg.1 make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/po-docs/uk' make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/po-docs' make[3]: Nothing to be done for 'all-am'. make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/po-docs' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/po-docs' make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs' cp README website/README.txt cp TODO website/TODO.txt perl /var/tmp/tmpMr2Lgl/libguestfs/podwrapper.pl \ --section 1 \ --man podwrapper.1-t \ --license GPLv2+ \ --warning safe \ podwrapper.pl mv podwrapper.1-t podwrapper.1 make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs' GEN public-submodule-commit Making check in common/mlstdutils make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlstdutils' make std_utils_tests make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlstdutils' CC std_utils_tests-dummy.o OCAMLOPT std_utils_tests.cmx GEN std_utils_tests make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlstdutils' make check-TESTS make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlstdutils' make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlstdutils' PASS: std_utils_tests ===========================================================================Testsuite summary for libguestfs 1.37.18 ===========================================================================# TOTAL: 1 # PASS: 1 # SKIP: 0 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 ===========================================================================make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlstdutils' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlstdutils' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/mlstdutils' Making check in generator make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/generator' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/generator' Making check in tests/qemu make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/qemu' make check-TESTS make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/qemu' make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/qemu' PASS: qemu-liveness.sh PASS: qemu-snapshot-isolation.sh PASS: qemu-force-tcg.sh ===========================================================================Testsuite summary for libguestfs 1.37.18 ===========================================================================# TOTAL: 3 # PASS: 3 # SKIP: 0 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 ===========================================================================make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/qemu' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/qemu' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/qemu' Making check in test-data make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data' Making check in binaries make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/binaries' make[2]: Nothing to be done for 'check'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/binaries' Making check in blank-disks make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/blank-disks' make[2]: Nothing to be done for 'check'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/blank-disks' Making check in phony-guests make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/phony-guests' make blank-disk.img blank-part.img blank-fs.img blank-bootroot.img blank-bootrootlv.img debian.img fedora.img fedora-md1.img fedora-md2.img fedora-btrfs.img ubuntu.img archlinux.img coreos.img windows.img guests-all-good.xml make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/phony-guests' rm -f blank-disk.img blank-disk.img-t ../../run guestfish \ -N blank-disk.img-t="$(echo blank-disk.img | /usr/bin/sed -e 's/blank-//' -e 's/.img//')" exit mv blank-disk.img-t blank-disk.img rm -f blank-part.img blank-part.img-t ../../run guestfish \ -N blank-part.img-t="$(echo blank-part.img | /usr/bin/sed -e 's/blank-//' -e 's/.img//')" exit mv blank-part.img-t blank-part.img rm -f blank-fs.img blank-fs.img-t ../../run guestfish \ -N blank-fs.img-t="$(echo blank-fs.img | /usr/bin/sed -e 's/blank-//' -e 's/.img//')" exit mv blank-fs.img-t blank-fs.img rm -f blank-bootroot.img blank-bootroot.img-t ../../run guestfish \ -N blank-bootroot.img-t="$(echo blank-bootroot.img | /usr/bin/sed -e 's/blank-//' -e 's/.img//')" exit mv blank-bootroot.img-t blank-bootroot.img rm -f blank-bootrootlv.img blank-bootrootlv.img-t ../../run guestfish \ -N blank-bootrootlv.img-t="$(echo blank-bootrootlv.img | /usr/bin/sed -e 's/blank-//' -e 's/.img//')" exit mv blank-bootrootlv.img-t blank-bootrootlv.img SRCDIR=. ../../run --test ./make-debian-img.sh rm -f fedora-name.db fedora-name.db-t /usr/bin/db_load fedora-name.db-t < fedora-name.db.txt mv fedora-name.db-t fedora-name.db rm -f fedora-packages.db fedora-packages.db-t /usr/bin/db_load fedora-packages.db-t < fedora-packages.db.txt mv fedora-packages.db-t fedora-packages.db SRCDIR=. LAYOUT=partitions ../../run --test ./make-fedora-img.pl rm -f stamp-fedora-md.img SRCDIR=. LAYOUT=partitions-md ../../run --test ./make-fedora-img.pl touch stamp-fedora-md.img make[3]: Nothing to be done for 'fedora-md2.img'. SRCDIR=. LAYOUT=btrfs ../../run --test ./make-fedora-img.pl SRCDIR=. ../../run --test ./make-ubuntu-img.sh SRCDIR=. ../../run --test ./make-archlinux-img.sh SRCDIR=. ../../run --test ./make-coreos-img.sh rm -f windows-software windows-software-t cp ./minimal-hive windows-software-t hivexregedit --merge windows-software-t --prefix 'HKEY_LOCAL_MACHINE\SOFTWARE' windows-software.reg mv windows-software-t windows-software rm -f windows-system windows-system-t cp ./minimal-hive windows-system-t hivexregedit --merge windows-system-t --prefix 'HKEY_LOCAL_MACHINE\SYSTEM' windows-system.reg mv windows-system-t windows-system SRCDIR=. ../../run --test ./make-windows-img.sh libguestfs: error: ntfs3g: group not available *** Warning: cannot create windows.img because there is no NTFS support in this build of libguestfs. Just touching the output file instead. *** rm -f guests-all-good.xml guests-all-good.xml-t ./make-guests-all-good.pl blank-disk.img blank-part.img blank-fs.img blank-bootroot.img blank-bootrootlv.img debian.img fedora.img fedora-md1.img fedora-md2.img fedora-btrfs.img ubuntu.img archlinux.img coreos.img windows.img > guests-all-good.xml-t mv guests-all-good.xml-t guests-all-good.xml make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/phony-guests' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/phony-guests' Making check in fake-virtio-win make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/fake-virtio-win' make fake-virtio-win.iso make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/fake-virtio-win' /usr/bin/genisoimage -J -r -o fake-virtio-win.iso cd Using VIRTI000.VFD;1 for /virtio-win-1.7.4_x86.vfd (virtio-win-1.7.4_amd64.vfd) Using QEMU_000.MSI;1 for cd/guest-agent/qemu-ga-x86.msi (qemu-ga-x64.msi) Total translation table size: 0 Total rockridge attributes bytes: 64719 Total directory bytes: 278528 Path table size(bytes): 1754 Max brk space used 8b000 882 extents written (1 MB) make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/fake-virtio-win' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/fake-virtio-win' Making check in fake-virt-tools make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/fake-virt-tools' make[2]: Nothing to be done for 'check'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/fake-virt-tools' Making check in files make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/files' make[2]: Nothing to be done for 'check'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data/files' Making check in . make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data' make[2]: Nothing to be done for 'check-am'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/test-data' Making check in gnulib/lib make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/lib' make check-recursive make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/lib' make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/lib' make[3]: Nothing to be done for 'check-am'. make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/lib' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/lib' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/lib' Making check in gnulib/tests make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' make check-recursive make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' Making check in . make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' make libtests.a test-accept test-accept4 test-alloca-opt test-areadlink test-areadlinkat test-argmatch test-arpa_inet test-base64 test-binary-io test-bind test-bitrotate test-btowc test-byteswap test-c-ctype test-c-strcasecmp test-c-strncasecmp test-chdir test-cloexec test-close test-connect test-ctype test-dirent-safer test-dirent test-dup test-dup2 test-dup3 test-environ test-errno test-fchdir test-fcntl-h test-fcntl-safer test-fcntl test-fdopen test-fdopendir test-fgetc test-filevercmp test-float test-fnmatch test-fpending test-fputc test-fread test-fstat test-fstatat test-ftell test-ftell3 test-ftello test-ftello3 test-ftello4 test-ftruncate test-futimens test-fwrite test-getaddrinfo test-getcwd-lgpl test-getcwd test-getdelim test-getdtablesize test-getline test-getopt-gnu test-getopt-posix test-getprogname test-getsockname test-getsockopt test-gettimeofday test-glob test-hash test-i-ring test-iconv test-ignore-value test-inet_ntop test-inet_pton test-intprops test-inttostr test -inttypes test-ioctl test-isatty test-isblank test-langinfo test-limits-h test-listen test-locale test-localeconv test-localename test-rwlock1 test-lock test-lseek test-lstat test-malloca test-mbrtowc test-mbrtowc-w32 test-mbsinit test-mbsrtowcs test-memchr test-memmem test-memrchr test-nanosleep test-netdb test-netinet_in test-nonblocking-pipe-main test-nonblocking-pipe-child test-nonblocking-socket-main test-nonblocking-socket-child test-nonblocking test-open test-openat-safer test-openat test-pathmax test-perror test-perror2 test-pipe test-pipe2 test-posix_spawn_file_actions_addclose test-posix_spawn_file_actions_adddup2 test-posix_spawn_file_actions_addopen test-posix_spawn1 test-posix_spawn2 test-pread test-priv-set test-ptsname_r test-quotearg-simple test-raise test-rawmemchr test-read-file test-read test-readlink test-readlinkat test-rmdir test-sched test-select test-select-fd test-select-stdin test-setenv test-setlocale1 test-setlocale2 test-setsockopt test-sigaction test-si gnal-h test-sigprocmask test-sleep test-snprintf test-sockets test-spawn test-stat test-stat-time test-statat test-stdalign test-stdbool test-stddef test-stdint test-stdio test-stdlib test-strchrnul test-strerror test-strerror_r test-string test-strnlen test-strtoll test-strtoull test-strtoumax test-symlink test-symlinkat test-sys_ioctl test-sys_select test-sys_socket test-sys_stat test-sys_time test-sys_types test-sys_uio test-sys_wait test-thread_self test-thread_create test-time test-timespec test-ttyname_r test-dup-safer test-unistd test-unlink test-unlinkat test-unsetenv test-usleep test-utime-h test-utime test-utimens test-vasnprintf test-vasprintf test-verify test-vsnprintf test-wchar test-wcrtomb test-wcrtomb-w32 test-wctype-h test-write test-xalloc-die test-xstrtol test-xstrtoul test-xstrtoll test-xstrtoull test-xstrtoumax test-xvasprintf make[4]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' CC dtotimespec.o CC fd-safer-flag.o CC fatal-signal.o CC dup-safer-flag.o CC imaxtostr.o CC inttostr.o CC offtostr.o CC uinttostr.o CC umaxtostr.o CC localename.o CC priv-set.o CC sig-handler.o CC statat.o CC timespec-add.o CC timespec-sub.o CC unlinkdir.o CC utimecmp.o CC wait-process.o CC nanosleep.o CC test-accept.o CC test-accept4.o CC test-alloca-opt.o CC test-areadlink.o CC test-areadlinkat.o CC test-argmatch.o CC test-arpa_inet.o CC test-base64.o CC test-binary-io.o CC test-bind.o CC test-bitrotate.o CC test-btowc.o CC test-byteswap.o CC test-c-ctype.o CC test-c-strcasecmp.o CC test-c-strncasecmp.o CC test-chdir.o CC test-cloexec.o CC test-close.o CC test-connect.o CC test-ctype.o CC test-dirent-safer.o CC test-dirent.o CC test-dup.o CC test-dup2.o CC test-dup3.o CC test-environ.o CC test-errno.o CC test-fchdir.o CC test-fcntl-h.o CC test-fcntl-safer.o CC test-fcntl.o CC test-fdopen.o CC test-fdopendir.o CC test-fgetc.o CC test-filevercmp.o CC test-float.o CC test-fnmatch.o CC test-fpending.o CC test-fputc.o CC test-fread.o CC test-fstat.o CC test-fstatat.o CC test-ftell.o CC test-ftell3.o CC test-ftello.o CC test-ftello3.o CC test-ftello4.o CC test-ftruncate.o CC test-futimens.o CC test-fwrite.o CC test-getaddrinfo.o CC test-getcwd-lgpl.o CC test-getcwd.o CC test-getdelim.o CC test-getdtablesize.o CC test-getline.o CC test-getopt-gnu.o CC test-getopt-posix.o CC test-getprogname.o CC test-getsockname.o CC test-getsockopt.o CC test-gettimeofday.o CC test-glob.o CC test-hash.o CC test-i-ring.o CC test-iconv.o CC test-ignore-value.o CC test-inet_ntop.o CC test-inet_pton.o CC test-intprops.o CC test-inttostr.o CC test-inttypes.o CC test-ioctl.o CC test-isatty.o CC test-isblank.o CC test-langinfo.o CC test-limits-h.o CC test-listen.o CC test-locale.o CC test-localeconv.o CC test-localename.o CC test-rwlock1.o CC test-lock.o CC test-lseek.o CC test-lstat.o CC test-malloca.o CC test-mbrtowc.o CC test-mbrtowc-w32.o CC test-mbsinit.o CC test-mbsrtowcs.o CC test-memchr.o CC test-memmem.o CC test-memrchr.o CC test-nanosleep.o CC test-netdb.o CC test-netinet_in.o CC test-nonblocking-pipe-main.o CC test-nonblocking-pipe-child.o CC test-nonblocking-socket-main.o CC test-nonblocking-socket-child.o CC test-nonblocking.o CC test-open.o CC test-openat-safer.o CC test-openat.o CC test-pathmax.o CC test-perror.o CC test-perror2.o CC test-pipe.o CC test-pipe2.o CC test-posix_spawn_file_actions_addclose.o CC test-posix_spawn_file_actions_adddup2.o CC test-posix_spawn_file_actions_addopen.o CC test-posix_spawn1.o CC test-posix_spawn2.o CC test-pread.o CC test-priv-set.o CC test-ptsname_r.o CC test-quotearg-simple.o CC test-raise.o CC test-rawmemchr.o CC test-read-file.o CC test-read.o CC test-readlink.o CC test-readlinkat.o CC test-rmdir.o CC test-sched.o CC test-select.o CC test-select-fd.o CC test-select-stdin.o CC test-setenv.o CC test-setlocale1.o CC test-setlocale2.o CC test-setsockopt.o CC test-sigaction.o CC test-signal-h.o CC test-sigprocmask.o CC test-sleep.o CC test-snprintf.o CC test-sockets.o CC test-spawn.o CC test-stat.o CC test-stat-time.o CC test-statat.o CC test-stdalign.o CC test-stdbool.o CC test-stddef.o CC test-stdint.o CC test-stdio.o CC test-stdlib.o CC test-strchrnul.o CC test-strerror.o CC test-strerror_r.o CC test-string.o CC test-strnlen.o CC test-strtoll.o CC test-strtoull.o CC test-strtoumax.o CC test-symlink.o CC test-symlinkat.o CC test-sys_ioctl.o CC test-sys_select.o CC test-sys_socket.o CC test-sys_stat.o CC test-sys_time.o CC test-sys_types.o CC test-sys_uio.o CC test-sys_wait.o CC test-thread_self.o CC test-thread_create.o CC test-time.o CC test-timespec.o CC test-ttyname_r.o CC test-dup-safer.o CC test-unistd.o CC test-unlink.o CC test-unlinkat.o CC test-unsetenv.o CC test-usleep.o CC test-utime-h.o CC test-utime.o CC test-utimens.o CC test-vasnprintf.o CC test-vasprintf.o CC test-verify.o CC test-vsnprintf.o CC test-wchar.o CC test-wcrtomb.o CC test-wcrtomb-w32.o CC test-wctype-h.o CC test-write.o CC test-xalloc-die.o CC test-xstrtol.o CC test-xstrtoul.o CC test-xstrtoll.o CC test-xstrtoull.o CC test-xstrtoumax.o CC test-xvasprintf.o CC glthread/thread.o AR libtests.a CCLD test-accept CCLD test-accept4 CCLD test-alloca-opt CCLD test-areadlink CCLD test-areadlinkat CCLD test-argmatch CCLD test-arpa_inet CCLD test-base64 CCLD test-binary-io CCLD test-bind CCLD test-bitrotate CCLD test-btowc CCLD test-byteswap CCLD test-c-ctype CCLD test-c-strcasecmp CCLD test-c-strncasecmp CCLD test-chdir CCLD test-cloexec CCLD test-close CCLD test-connect CCLD test-ctype CCLD test-dirent-safer CCLD test-dirent CCLD test-dup CCLD test-dup2 CCLD test-dup3 CCLD test-environ CCLD test-errno CCLD test-fchdir CCLD test-fcntl-h CCLD test-fcntl-safer CCLD test-fcntl CCLD test-fdopen CCLD test-fdopendir CCLD test-fgetc CCLD test-filevercmp CCLD test-float CCLD test-fnmatch CCLD test-fpending CCLD test-fputc CCLD test-fread CCLD test-fstat CCLD test-fstatat CCLD test-ftell CCLD test-ftell3 CCLD test-ftello CCLD test-ftello3 CCLD test-ftello4 CCLD test-ftruncate CCLD test-futimens CCLD test-fwrite CCLD test-getaddrinfo CCLD test-getcwd-lgpl CCLD test-getcwd CCLD test-getdelim CCLD test-getdtablesize CCLD test-getline CCLD test-getopt-gnu CCLD test-getopt-posix CCLD test-getprogname CCLD test-getsockname CCLD test-getsockopt CCLD test-gettimeofday CCLD test-glob CCLD test-hash CCLD test-i-ring CCLD test-iconv CCLD test-ignore-value CCLD test-inet_ntop CCLD test-inet_pton CCLD test-intprops CCLD test-inttostr CCLD test-inttypes CCLD test-ioctl CCLD test-isatty CCLD test-isblank CCLD test-langinfo CCLD test-limits-h CCLD test-listen CCLD test-locale CCLD test-localeconv CCLD test-localename CCLD test-rwlock1 CCLD test-lock CCLD test-lseek CCLD test-lstat CCLD test-malloca CCLD test-mbrtowc CCLD test-mbrtowc-w32 CCLD test-mbsinit CCLD test-mbsrtowcs CCLD test-memchr CCLD test-memmem CCLD test-memrchr CCLD test-nanosleep CCLD test-netdb CCLD test-netinet_in CCLD test-nonblocking-pipe-main CCLD test-nonblocking-pipe-child CCLD test-nonblocking-socket-main CCLD test-nonblocking-socket-child CCLD test-nonblocking CCLD test-open CCLD test-openat-safer CCLD test-openat CCLD test-pathmax CCLD test-perror CCLD test-perror2 CCLD test-pipe CCLD test-pipe2 CCLD test-posix_spawn_file_actions_addclose CCLD test-posix_spawn_file_actions_adddup2 CCLD test-posix_spawn_file_actions_addopen CCLD test-posix_spawn1 CCLD test-posix_spawn2 CCLD test-pread CCLD test-priv-set CCLD test-ptsname_r CCLD test-quotearg-simple CCLD test-raise CCLD test-rawmemchr CCLD test-read-file CCLD test-read CCLD test-readlink CCLD test-readlinkat CCLD test-rmdir CCLD test-sched CCLD test-select CCLD test-select-fd CCLD test-select-stdin CCLD test-setenv CCLD test-setlocale1 CCLD test-setlocale2 CCLD test-setsockopt CCLD test-sigaction CCLD test-signal-h CCLD test-sigprocmask CCLD test-sleep CCLD test-snprintf CCLD test-sockets CCLD test-spawn CCLD test-stat CCLD test-stat-time CCLD test-statat CCLD test-stdalign CCLD test-stdbool CCLD test-stddef CCLD test-stdint CCLD test-stdio CCLD test-stdlib CCLD test-strchrnul CCLD test-strerror CCLD test-strerror_r CCLD test-string CCLD test-strnlen CCLD test-strtoll CCLD test-strtoull CCLD test-strtoumax CCLD test-symlink CCLD test-symlinkat CCLD test-sys_ioctl CCLD test-sys_select CCLD test-sys_socket CCLD test-sys_stat CCLD test-sys_time CCLD test-sys_types CCLD test-sys_uio CCLD test-sys_wait CCLD test-thread_self CCLD test-thread_create CCLD test-time CCLD test-timespec CCLD test-ttyname_r CCLD test-dup-safer CCLD test-unistd CCLD test-unlink CCLD test-unlinkat CCLD test-unsetenv CCLD test-usleep CCLD test-utime-h CCLD test-utime CCLD test-utimens CCLD test-vasnprintf CCLD test-vasprintf CCLD test-verify CCLD test-vsnprintf CCLD test-wchar CCLD test-wcrtomb CCLD test-wcrtomb-w32 CCLD test-wctype-h CCLD test-write CCLD test-xalloc-die CCLD test-xstrtol CCLD test-xstrtoul CCLD test-xstrtoll CCLD test-xstrtoull CCLD test-xstrtoumax CCLD test-xvasprintf make[4]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' make check-TESTS make[4]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' make[5]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' PASS: test-accept PASS: test-accept4 PASS: test-alloca-opt PASS: test-areadlink PASS: test-areadlinkat PASS: test-arpa_inet PASS: test-argmatch PASS: test-bind PASS: test-base64 PASS: test-bitrotate PASS: test-binary-io.sh PASS: test-btowc1.sh PASS: test-byteswap PASS: test-btowc2.sh PASS: test-chdir PASS: test-c-ctype PASS: test-cloexec PASS: test-c-strcase.sh PASS: test-close PASS: test-connect PASS: test-dirent-safer PASS: test-ctype PASS: test-dup PASS: test-dup2 PASS: test-dirent PASS: test-environ PASS: test-dup3 PASS: test-fchdir PASS: test-errno PASS: test-fcntl-h PASS: test-fcntl-safer PASS: test-fcntl PASS: test-fdopen PASS: test-fdopendir PASS: test-fgetc PASS: test-filevercmp PASS: test-float PASS: test-fnmatch PASS: test-fputc PASS: test-fpending.sh PASS: test-fread PASS: test-fstat PASS: test-ftell.sh PASS: test-ftell3 PASS: test-ftell2.sh PASS: test-fstatat PASS: test-ftello.sh PASS: test-ftello3 PASS: test-ftello2.sh PASS: test-ftello4.sh PASS: test-ftruncate.sh PASS: test-fwrite PASS: test-futimens PASS: test-getcwd-lgpl PASS: test-getdelim PASS: test-getline PASS: test-getdtablesize PASS: test-getopt-gnu PASS: test-getprogname PASS: test-getopt-posix PASS: test-getsockopt PASS: test-getsockname PASS: test-gettimeofday PASS: test-glob PASS: test-i-ring PASS: test-iconv PASS: test-ignore-value PASS: test-inet_ntop PASS: test-inet_pton PASS: test-intprops PASS: test-inttostr PASS: test-inttypes PASS: test-ioctl PASS: test-isatty PASS: test-isblank PASS: test-langinfo PASS: test-getcwd.sh PASS: test-limits-h PASS: test-listen PASS: test-locale PASS: test-localeconv PASS: test-localename PASS: test-lseek.sh PASS: test-rwlock1 PASS: test-lstat PASS: test-mbrtowc1.sh PASS: test-mbrtowc2.sh PASS: test-malloca PASS: test-mbrtowc3.sh PASS: test-mbrtowc4.sh SKIP: test-mbrtowc-w32-1.sh PASS: test-mbrtowc5.sh SKIP: test-mbrtowc-w32-2.sh SKIP: test-mbrtowc-w32-4.sh SKIP: test-mbrtowc-w32-3.sh SKIP: test-mbrtowc-w32-5.sh PASS: test-mbsinit.sh PASS: test-mbsrtowcs1.sh PASS: test-mbsrtowcs2.sh PASS: test-mbsrtowcs3.sh PASS: test-mbsrtowcs4.sh PASS: test-memmem PASS: test-memrchr PASS: test-hash PASS: test-netdb PASS: test-netinet_in PASS: test-memchr PASS: test-nanosleep PASS: test-nonblocking PASS: test-open PASS: test-openat-safer PASS: test-openat PASS: test-pathmax PASS: test-perror.sh PASS: test-perror2 PASS: test-pipe PASS: test-pipe2 PASS: test-posix_spawn_file_actions_addclose PASS: test-posix_spawn_file_actions_adddup2 PASS: test-posix_spawn_file_actions_addopen PASS: test-getaddrinfo PASS: test-posix_spawn1 PASS: test-posix_spawn2 PASS: test-priv-set PASS: test-ptsname_r PASS: test-quotearg-simple PASS: test-raise PASS: test-pread.sh PASS: test-rawmemchr PASS: test-read-file PASS: test-read PASS: test-readlink PASS: test-readlinkat PASS: test-rmdir PASS: test-sched PASS: test-select PASS: test-lock PASS: test-setenv PASS: test-setlocale1.sh PASS: test-setlocale2.sh PASS: test-setsockopt PASS: test-sigaction PASS: test-signal-h PASS: test-select-out.sh PASS: test-select-in.sh PASS: test-snprintf PASS: test-sockets PASS: test-spawn PASS: test-stat PASS: test-stat-time PASS: test-statat PASS: test-stdalign PASS: test-stdbool PASS: test-stddef PASS: test-stdint PASS: test-stdio PASS: test-stdlib PASS: test-strchrnul PASS: test-strerror PASS: test-strerror_r PASS: test-string PASS: test-strnlen PASS: test-strtoll PASS: test-strtoull PASS: test-strtoumax PASS: test-symlink PASS: test-symlinkat PASS: test-sys_ioctl PASS: test-sys_select PASS: test-sys_socket PASS: test-sys_stat PASS: test-sys_time PASS: test-sys_types PASS: test-sys_uio PASS: test-sys_wait PASS: test-init.sh PASS: test-thread_self PASS: test-thread_create PASS: test-time PASS: test-timespec PASS: test-ttyname_r PASS: test-dup-safer PASS: test-unistd PASS: test-unlink PASS: test-unlinkat PASS: test-unsetenv PASS: test-sigprocmask PASS: test-utime-h PASS: test-utime PASS: test-utimens PASS: test-vasnprintf PASS: test-vasprintf PASS: test-vc-list-files-git.sh SKIP: test-vc-list-files-cvs.sh PASS: test-verify PASS: test-sleep PASS: test-vsnprintf PASS: test-wchar PASS: test-wcrtomb.sh SKIP: test-wcrtomb-w32-1.sh SKIP: test-wcrtomb-w32-2.sh SKIP: test-wcrtomb-w32-3.sh SKIP: test-wcrtomb-w32-4.sh SKIP: test-wcrtomb-w32-5.sh PASS: test-wctype-h PASS: test-write PASS: test-xalloc-die.sh PASS: test-xstrtol.sh PASS: test-xstrtoll.sh PASS: test-xstrtoumax.sh PASS: test-xvasprintf PASS: test-usleep PASS: test-verify.sh PASS: test-nonblocking-pipe.sh PASS: test-nonblocking-socket.sh ===========================================================================Testsuite summary for libguestfs 1.37.18 ===========================================================================# TOTAL: 215 # PASS: 204 # SKIP: 11 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 ===========================================================================make[5]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' make[4]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/gnulib/tests' Making check in common/errnostring make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/errnostring' make check-am make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/errnostring' make[2]: Nothing to be done for 'check-am'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/errnostring' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/errnostring' Making check in common/protocol make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/protocol' make check-am make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/protocol' make[2]: Nothing to be done for 'check-am'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/protocol' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/protocol' Making check in common/qemuopts make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/qemuopts' make qemuopts-tests make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/qemuopts' CC qemuopts_tests-qemuopts-tests.o CCLD qemuopts-tests make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/qemuopts' make check-TESTS make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/qemuopts' make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/qemuopts' PASS: qemuopts-tests ===========================================================================Testsuite summary for libguestfs 1.37.18 ===========================================================================# TOTAL: 1 # PASS: 1 # SKIP: 0 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 ===========================================================================make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/qemuopts' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/qemuopts' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/qemuopts' Making check in common/utils make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/utils' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/utils' Making check in common/structs make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/structs' make check-am make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/common/structs' make[2]: Nothing to be done for 'check-am'. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/structs' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/common/structs' Making check in lib make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/lib' make check-am make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/lib' make unit-tests make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/lib' CC unit_tests-unit-tests.o CCLD unit-tests make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/lib' make check-TESTS make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/lib' make[4]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/lib' PASS: unit-tests ===========================================================================Testsuite summary for libguestfs 1.37.18 ===========================================================================# TOTAL: 1 # PASS: 1 # SKIP: 0 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 ===========================================================================make[4]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/lib' make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/lib' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/lib' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/lib' Making check in docs make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/docs' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/docs' Making check in examples make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/examples' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/examples' Making check in po make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/po' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/po' Making check in daemon make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/daemon' make check-am make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/daemon' make check-TESTS make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/daemon' make[4]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/daemon' PASS: test-print-external-commands.sh ===========================================================================Testsuite summary for libguestfs 1.37.18 ===========================================================================# TOTAL: 1 # PASS: 1 # SKIP: 0 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 ===========================================================================make[4]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/daemon' make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/daemon' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/daemon' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/daemon' Making check in tests/daemon make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/daemon' make captive-daemon.pm make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/daemon' make[2]: 'captive-daemon.pm' is up to date. make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/daemon' make check-TESTS make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/daemon' make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/daemon' PASS: test-daemon-start.pl PASS: test-btrfs.pl ===========================================================================Testsuite summary for libguestfs 1.37.18 ===========================================================================# TOTAL: 2 # PASS: 2 # SKIP: 0 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 ===========================================================================make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/daemon' make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/daemon' make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/daemon' Making check in appliance make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/appliance' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/appliance' Making check in tests/c-api make[1]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/c-api' make check-am make[2]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/c-api' make tests test-command test-just-header test-create-handle test-config test-add-drive-opts test-last-errno test-backend-settings test-private-data test-user-cancel test-debug-to-file test-environment test-pwd test-event-string test-dlopen test-just-header-cxx test-add-libvirt-dom make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/c-api' CC tests-tests.o CC tests-tests-main.o CC test-command.o CC test_just_header-test-just-header.o CC test_create_handle-test-create-handle.o CC test_config-test-config.o CC test_add_drive_opts-test-add-drive-opts.o CC test_last_errno-test-last-errno.o CC test_backend_settings-test-backend-settings.o CC test_private_data-test-private-data.o CC test_user_cancel-test-user-cancel.o CC test_debug_to_file-test-debug-to-file.o CC test_environment-test-environment.o CC test-pwd.o CC test_event_string-test-event-string.o CC test_dlopen-test-dlopen.o CXX test_just_header_cxx-test-just-header-cxx.o CC test_add_libvirt_dom-test-add-libvirt-dom.o cc1plus: warning: command line option '-Wbad-function-cast' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wdesignated-init' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wdiscarded-array-qualifiers' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wdiscarded-qualifiers' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wduplicate-decl-specifier' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wimplicit' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wimplicit-function-declaration' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wimplicit-int' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wincompatible-pointer-types' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wint-conversion' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wjump-misses-init' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wmissing-parameter-type' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wmissing-prototypes' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wnested-externs' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wold-style-declaration' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wold-style-definition' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Woverride-init' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wpointer-sign' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wpointer-to-int-cast' is valid for C/ObjC but not for C++ cc1plus: warning: command line option '-Wstrict-prototypes' is valid for C/ObjC but not for C++ CCLD test-command CCLD test-just-header CCLD test-create-handle CCLD test-config CCLD test-add-drive-opts CCLD test-last-errno CCLD test-backend-settings CCLD test-private-data CCLD test-user-cancel CCLD test-debug-to-file CCLD test-environment CCLD test-pwd CCLD test-event-string CCLD test-dlopen CXXLD test-just-header-cxx CCLD test-add-libvirt-dom CCLD tests make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/c-api' make check-TESTS make[3]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/c-api' make[4]: Entering directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/c-api' PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-create-handle PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-just-header PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-config PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-add-drive-opts PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-backend-settings PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-private-data PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-environment PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-event-string PASS: test-dlopen PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-last-errno PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-user-cancel PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-just-header-cxx PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-add-libvirt-dom PASS: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-test-debug-to-file FAIL: /var/tmp/tmpMr2Lgl/libguestfs/tests/c-api/.libs/lt-tests ===========================================================================Testsuite summary for libguestfs 1.37.18 ===========================================================================# TOTAL: 15 # PASS: 14 # SKIP: 0 # XFAIL: 0 # FAIL: 1 # XPASS: 0 # ERROR: 0 ===========================================================================See tests/c-api/test-suite.log ===========================================================================make[4]: *** [Makefile:2799: test-suite.log] Error 1 make[4]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/c-api' make[3]: *** [Makefile:2907: check-TESTS] Error 2 make[3]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/c-api' make[2]: *** [Makefile:3076: check-am] Error 2 make[2]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/c-api' make[1]: *** [Makefile:3078: check] Error 2 make[1]: Leaving directory '/var/tmp/tmpMr2Lgl/libguestfs/tests/c-api' make: *** [Makefile:1975: check-recursive] Error 1
Pino Toscano
2017-Jul-27 14:58 UTC
Re: [Libguestfs] [PATCH 0/2] daemon: Replace GUESTFSD_EXT_CMD with --print-external-commands.
Hi Olaf and Cédric, On Monday, 24 July 2017 18:10:12 CEST Richard W.M. Jones wrote:> Replace GUESTFSD_EXT_CMD with a command line option > ‘./guestfsd --print-external-commands’This mini-series basically changes the way external programs used in the appliance are collected; this was done 5 years ago (!) as commit 0306c98d319d189281af3c15101c8d343e400f13, to help the creation of appliances in SUSE. Is this mechanism still used there? If so, is the approach done by Rich acceptable for you? What are your use cases/constraints/etc? Thanks, -- Pino Toscano
Olaf Hering
2017-Jul-27 15:13 UTC
Re: [Libguestfs] [PATCH 0/2] daemon: Replace GUESTFSD_EXT_CMD with --print-external-commands.
On Thu, Jul 27, Pino Toscano wrote:> Is this mechanism still used there? If so, is the approach done by Rich > acceptable for you? What are your use cases/constraints/etc?This is not used anymore because supermin instead of mkinitrd is used since a while. Olaf
Richard W.M. Jones
2017-Jul-27 15:19 UTC
Re: [Libguestfs] [PATCH 0/2] daemon: Replace GUESTFSD_EXT_CMD with --print-external-commands.
On Thu, Jul 27, 2017 at 04:58:52PM +0200, Pino Toscano wrote:> Hi Olaf and Cédric, > > On Monday, 24 July 2017 18:10:12 CEST Richard W.M. Jones wrote: > > Replace GUESTFSD_EXT_CMD with a command line option > > ‘./guestfsd --print-external-commands’ > > This mini-series basically changes the way external programs used in > the appliance are collected; this was done 5 years ago (!) as > commit 0306c98d319d189281af3c15101c8d343e400f13, to help the creation > of appliances in SUSE. > > Is this mechanism still used there? If so, is the approach done by Rich > acceptable for you? What are your use cases/constraints/etc?It is used: https://build.opensuse.org/package/view_file/openSUSE:Factory/libguestfs/libguestfs.spec?rev=7 But as far as I can tell there's no barrier to replacing that objcopy command with the [simpler] command: $RPM_BUILD_ROOT/usr/sbin/guestfsd --print-external-commands Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW
Apparently Analagous Threads
- [PATCH v2] daemon: Remove GUESTFSD_EXT_CMD.
- [PATCH] btrfs: Fix btrfs_subvolume_list on F18
- [PATCH 2/2] daemon: Replace GUESTFSD_EXT_CMD with --print-external-commands.
- [PATCH 0/8] btrfs support part2: qgroup commands
- [PATCH 0/6] btrfs support part1: subvolume commands