X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;ds=sidebyside;f=daemon%2Fstubs.c;h=c21eecf636bd093f19f1973763a4eced7e90a7bc;hb=24bee20ce4196d45891925332a47a05aa5e40938;hp=a6175cbd4e04bf29dee6fab66c5f26397493c377;hpb=ad5abc8d367c9c410051062cae066b1b141b4c76;p=libguestfs.git diff --git a/daemon/stubs.c b/daemon/stubs.c index a6175cb..c21eecf 100644 --- a/daemon/stubs.c +++ b/daemon/stubs.c @@ -19,7 +19,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE // for strchrnul +#include #include #include @@ -940,9 +940,14 @@ static void vgcreate_stub (XDR *xdr_in) return; } volgroup = args.volgroup; - args.physvols.physvols_val = realloc (args.physvols.physvols_val, sizeof (char *) * (args.physvols.physvols_len+1)); - args.physvols.physvols_val[args.physvols.physvols_len] = NULL; - physvols = args.physvols.physvols_val; + physvols = realloc (args.physvols.physvols_val, + sizeof (char *) * (args.physvols.physvols_len+1)); + if (physvols == NULL) { + reply_with_perror ("realloc"); + goto done; + } + physvols[args.physvols.physvols_len] = NULL; + args.physvols.physvols_val = physvols; r = do_vgcreate (volgroup, physvols); if (r == -1) @@ -1028,9 +1033,14 @@ static void sfdisk_stub (XDR *xdr_in) cyls = args.cyls; heads = args.heads; sectors = args.sectors; - args.lines.lines_val = realloc (args.lines.lines_val, sizeof (char *) * (args.lines.lines_len+1)); - args.lines.lines_val[args.lines.lines_len] = NULL; - lines = args.lines.lines_val; + lines = realloc (args.lines.lines_val, + sizeof (char *) * (args.lines.lines_len+1)); + if (lines == NULL) { + reply_with_perror ("realloc"); + goto done; + } + lines[args.lines.lines_len] = NULL; + args.lines.lines_val = lines; r = do_sfdisk (device, cyls, heads, sectors, lines); if (r == -1) @@ -1176,9 +1186,14 @@ static void command_stub (XDR *xdr_in) reply_with_error ("%s: daemon failed to decode procedure arguments", "command"); return; } - args.arguments.arguments_val = realloc (args.arguments.arguments_val, sizeof (char *) * (args.arguments.arguments_len+1)); - args.arguments.arguments_val[args.arguments.arguments_len] = NULL; - arguments = args.arguments.arguments_val; + arguments = realloc (args.arguments.arguments_val, + sizeof (char *) * (args.arguments.arguments_len+1)); + if (arguments == NULL) { + reply_with_perror ("realloc"); + goto done; + } + arguments[args.arguments.arguments_len] = NULL; + args.arguments.arguments_val = arguments; r = do_command (arguments); if (r == NULL) @@ -1205,9 +1220,14 @@ static void command_lines_stub (XDR *xdr_in) reply_with_error ("%s: daemon failed to decode procedure arguments", "command_lines"); return; } - args.arguments.arguments_val = realloc (args.arguments.arguments_val, sizeof (char *) * (args.arguments.arguments_len+1)); - args.arguments.arguments_val[args.arguments.arguments_len] = NULL; - arguments = args.arguments.arguments_val; + arguments = realloc (args.arguments.arguments_val, + sizeof (char *) * (args.arguments.arguments_len+1)); + if (arguments == NULL) { + reply_with_perror ("realloc"); + goto done; + } + arguments[args.arguments.arguments_len] = NULL; + args.arguments.arguments_val = arguments; r = do_command_lines (arguments); if (r == NULL) @@ -1332,173 +1352,1200 @@ done: xdr_free ((xdrproc_t) xdr_guestfs_tune2fs_l_args, (char *) &args); } -void dispatch_incoming_message (XDR *xdr_in) +static void blockdev_setro_stub (XDR *xdr_in) { - switch (proc_nr) { - case GUESTFS_PROC_MOUNT: - mount_stub (xdr_in); - break; - case GUESTFS_PROC_SYNC: - sync_stub (xdr_in); - break; - case GUESTFS_PROC_TOUCH: - touch_stub (xdr_in); - break; - case GUESTFS_PROC_CAT: - cat_stub (xdr_in); - break; - case GUESTFS_PROC_LL: - ll_stub (xdr_in); - break; - case GUESTFS_PROC_LS: - ls_stub (xdr_in); - break; - case GUESTFS_PROC_LIST_DEVICES: - list_devices_stub (xdr_in); - break; - case GUESTFS_PROC_LIST_PARTITIONS: - list_partitions_stub (xdr_in); - break; - case GUESTFS_PROC_PVS: - pvs_stub (xdr_in); - break; - case GUESTFS_PROC_VGS: - vgs_stub (xdr_in); - break; - case GUESTFS_PROC_LVS: - lvs_stub (xdr_in); - break; - case GUESTFS_PROC_PVS_FULL: - pvs_full_stub (xdr_in); - break; - case GUESTFS_PROC_VGS_FULL: - vgs_full_stub (xdr_in); - break; - case GUESTFS_PROC_LVS_FULL: - lvs_full_stub (xdr_in); - break; - case GUESTFS_PROC_READ_LINES: - read_lines_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_INIT: - aug_init_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_CLOSE: - aug_close_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_DEFVAR: - aug_defvar_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_DEFNODE: - aug_defnode_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_GET: - aug_get_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_SET: - aug_set_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_INSERT: - aug_insert_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_RM: - aug_rm_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_MV: - aug_mv_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_MATCH: - aug_match_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_SAVE: - aug_save_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_LOAD: - aug_load_stub (xdr_in); - break; - case GUESTFS_PROC_AUG_LS: - aug_ls_stub (xdr_in); - break; - case GUESTFS_PROC_RM: - rm_stub (xdr_in); - break; - case GUESTFS_PROC_RMDIR: - rmdir_stub (xdr_in); - break; - case GUESTFS_PROC_RM_RF: - rm_rf_stub (xdr_in); - break; - case GUESTFS_PROC_MKDIR: - mkdir_stub (xdr_in); - break; - case GUESTFS_PROC_MKDIR_P: - mkdir_p_stub (xdr_in); - break; - case GUESTFS_PROC_CHMOD: - chmod_stub (xdr_in); - break; - case GUESTFS_PROC_CHOWN: - chown_stub (xdr_in); - break; - case GUESTFS_PROC_EXISTS: - exists_stub (xdr_in); - break; - case GUESTFS_PROC_IS_FILE: - is_file_stub (xdr_in); - break; - case GUESTFS_PROC_IS_DIR: - is_dir_stub (xdr_in); - break; - case GUESTFS_PROC_PVCREATE: - pvcreate_stub (xdr_in); - break; - case GUESTFS_PROC_VGCREATE: - vgcreate_stub (xdr_in); - break; - case GUESTFS_PROC_LVCREATE: - lvcreate_stub (xdr_in); - break; - case GUESTFS_PROC_MKFS: - mkfs_stub (xdr_in); - break; - case GUESTFS_PROC_SFDISK: - sfdisk_stub (xdr_in); - break; - case GUESTFS_PROC_WRITE_FILE: - write_file_stub (xdr_in); - break; - case GUESTFS_PROC_UMOUNT: - umount_stub (xdr_in); - break; - case GUESTFS_PROC_MOUNTS: - mounts_stub (xdr_in); - break; - case GUESTFS_PROC_UMOUNT_ALL: - umount_all_stub (xdr_in); - break; - case GUESTFS_PROC_LVM_REMOVE_ALL: - lvm_remove_all_stub (xdr_in); - break; - case GUESTFS_PROC_FILE: - file_stub (xdr_in); - break; - case GUESTFS_PROC_COMMAND: - command_stub (xdr_in); - break; - case GUESTFS_PROC_COMMAND_LINES: - command_lines_stub (xdr_in); - break; - case GUESTFS_PROC_STAT: - stat_stub (xdr_in); - break; - case GUESTFS_PROC_LSTAT: - lstat_stub (xdr_in); - break; - case GUESTFS_PROC_STATVFS: - statvfs_stub (xdr_in); - break; - case GUESTFS_PROC_TUNE2FS_L: - tune2fs_l_stub (xdr_in); + int r; + struct guestfs_blockdev_setro_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_blockdev_setro_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_setro"); + return; + } + device = args.device; + + r = do_blockdev_setro (device); + if (r == -1) + /* do_blockdev_setro has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_blockdev_setro_args, (char *) &args); +} + +static void blockdev_setrw_stub (XDR *xdr_in) +{ + int r; + struct guestfs_blockdev_setrw_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_blockdev_setrw_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_setrw"); + return; + } + device = args.device; + + r = do_blockdev_setrw (device); + if (r == -1) + /* do_blockdev_setrw has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_blockdev_setrw_args, (char *) &args); +} + +static void blockdev_getro_stub (XDR *xdr_in) +{ + int r; + struct guestfs_blockdev_getro_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_blockdev_getro_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_getro"); + return; + } + device = args.device; + + r = do_blockdev_getro (device); + if (r == -1) + /* do_blockdev_getro has already called reply_with_error */ + goto done; + + struct guestfs_blockdev_getro_ret ret; + ret.ro = r; + reply ((xdrproc_t) &xdr_guestfs_blockdev_getro_ret, (char *) &ret); +done: + xdr_free ((xdrproc_t) xdr_guestfs_blockdev_getro_args, (char *) &args); +} + +static void blockdev_getss_stub (XDR *xdr_in) +{ + int r; + struct guestfs_blockdev_getss_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_blockdev_getss_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_getss"); + return; + } + device = args.device; + + r = do_blockdev_getss (device); + if (r == -1) + /* do_blockdev_getss has already called reply_with_error */ + goto done; + + struct guestfs_blockdev_getss_ret ret; + ret.sectorsize = r; + reply ((xdrproc_t) &xdr_guestfs_blockdev_getss_ret, (char *) &ret); +done: + xdr_free ((xdrproc_t) xdr_guestfs_blockdev_getss_args, (char *) &args); +} + +static void blockdev_getbsz_stub (XDR *xdr_in) +{ + int r; + struct guestfs_blockdev_getbsz_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_blockdev_getbsz_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_getbsz"); + return; + } + device = args.device; + + r = do_blockdev_getbsz (device); + if (r == -1) + /* do_blockdev_getbsz has already called reply_with_error */ + goto done; + + struct guestfs_blockdev_getbsz_ret ret; + ret.blocksize = r; + reply ((xdrproc_t) &xdr_guestfs_blockdev_getbsz_ret, (char *) &ret); +done: + xdr_free ((xdrproc_t) xdr_guestfs_blockdev_getbsz_args, (char *) &args); +} + +static void blockdev_setbsz_stub (XDR *xdr_in) +{ + int r; + struct guestfs_blockdev_setbsz_args args; + const char *device; + int blocksize; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_blockdev_setbsz_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_setbsz"); + return; + } + device = args.device; + blocksize = args.blocksize; + + r = do_blockdev_setbsz (device, blocksize); + if (r == -1) + /* do_blockdev_setbsz has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_blockdev_setbsz_args, (char *) &args); +} + +static void blockdev_getsz_stub (XDR *xdr_in) +{ + int64_t r; + struct guestfs_blockdev_getsz_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_blockdev_getsz_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_getsz"); + return; + } + device = args.device; + + r = do_blockdev_getsz (device); + if (r == -1) + /* do_blockdev_getsz has already called reply_with_error */ + goto done; + + struct guestfs_blockdev_getsz_ret ret; + ret.sizeinsectors = r; + reply ((xdrproc_t) &xdr_guestfs_blockdev_getsz_ret, (char *) &ret); +done: + xdr_free ((xdrproc_t) xdr_guestfs_blockdev_getsz_args, (char *) &args); +} + +static void blockdev_getsize64_stub (XDR *xdr_in) +{ + int64_t r; + struct guestfs_blockdev_getsize64_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_blockdev_getsize64_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_getsize64"); + return; + } + device = args.device; + + r = do_blockdev_getsize64 (device); + if (r == -1) + /* do_blockdev_getsize64 has already called reply_with_error */ + goto done; + + struct guestfs_blockdev_getsize64_ret ret; + ret.sizeinbytes = r; + reply ((xdrproc_t) &xdr_guestfs_blockdev_getsize64_ret, (char *) &ret); +done: + xdr_free ((xdrproc_t) xdr_guestfs_blockdev_getsize64_args, (char *) &args); +} + +static void blockdev_flushbufs_stub (XDR *xdr_in) +{ + int r; + struct guestfs_blockdev_flushbufs_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_blockdev_flushbufs_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_flushbufs"); + return; + } + device = args.device; + + r = do_blockdev_flushbufs (device); + if (r == -1) + /* do_blockdev_flushbufs has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_blockdev_flushbufs_args, (char *) &args); +} + +static void blockdev_rereadpt_stub (XDR *xdr_in) +{ + int r; + struct guestfs_blockdev_rereadpt_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_blockdev_rereadpt_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_rereadpt"); + return; + } + device = args.device; + + r = do_blockdev_rereadpt (device); + if (r == -1) + /* do_blockdev_rereadpt has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_blockdev_rereadpt_args, (char *) &args); +} + +static void upload_stub (XDR *xdr_in) +{ + int r; + struct guestfs_upload_args args; + const char *remotefilename; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_upload_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "upload"); + return; + } + remotefilename = args.remotefilename; + + r = do_upload (remotefilename); + if (r == -1) + /* do_upload has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_upload_args, (char *) &args); +} + +static void download_stub (XDR *xdr_in) +{ + int r; + struct guestfs_download_args args; + const char *remotefilename; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_download_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "download"); + return; + } + remotefilename = args.remotefilename; + + r = do_download (remotefilename); + if (r == -1) + /* do_download has already called reply_with_error */ + goto done; + + /* do_download has already sent a reply */ +done: + xdr_free ((xdrproc_t) xdr_guestfs_download_args, (char *) &args); +} + +static void checksum_stub (XDR *xdr_in) +{ + char *r; + struct guestfs_checksum_args args; + const char *csumtype; + const char *path; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_checksum_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "checksum"); + return; + } + csumtype = args.csumtype; + path = args.path; + + r = do_checksum (csumtype, path); + if (r == NULL) + /* do_checksum has already called reply_with_error */ + goto done; + + struct guestfs_checksum_ret ret; + ret.checksum = r; + reply ((xdrproc_t) &xdr_guestfs_checksum_ret, (char *) &ret); + free (r); +done: + xdr_free ((xdrproc_t) xdr_guestfs_checksum_args, (char *) &args); +} + +static void tar_in_stub (XDR *xdr_in) +{ + int r; + struct guestfs_tar_in_args args; + const char *directory; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_tar_in_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "tar_in"); + return; + } + directory = args.directory; + + r = do_tar_in (directory); + if (r == -1) + /* do_tar_in has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_tar_in_args, (char *) &args); +} + +static void tar_out_stub (XDR *xdr_in) +{ + int r; + struct guestfs_tar_out_args args; + const char *directory; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_tar_out_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "tar_out"); + return; + } + directory = args.directory; + + r = do_tar_out (directory); + if (r == -1) + /* do_tar_out has already called reply_with_error */ + goto done; + + /* do_tar_out has already sent a reply */ +done: + xdr_free ((xdrproc_t) xdr_guestfs_tar_out_args, (char *) &args); +} + +static void tgz_in_stub (XDR *xdr_in) +{ + int r; + struct guestfs_tgz_in_args args; + const char *directory; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_tgz_in_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "tgz_in"); + return; + } + directory = args.directory; + + r = do_tgz_in (directory); + if (r == -1) + /* do_tgz_in has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_tgz_in_args, (char *) &args); +} + +static void tgz_out_stub (XDR *xdr_in) +{ + int r; + struct guestfs_tgz_out_args args; + const char *directory; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_tgz_out_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "tgz_out"); + return; + } + directory = args.directory; + + r = do_tgz_out (directory); + if (r == -1) + /* do_tgz_out has already called reply_with_error */ + goto done; + + /* do_tgz_out has already sent a reply */ +done: + xdr_free ((xdrproc_t) xdr_guestfs_tgz_out_args, (char *) &args); +} + +static void mount_ro_stub (XDR *xdr_in) +{ + int r; + struct guestfs_mount_ro_args args; + const char *device; + const char *mountpoint; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_mount_ro_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "mount_ro"); + return; + } + device = args.device; + mountpoint = args.mountpoint; + + r = do_mount_ro (device, mountpoint); + if (r == -1) + /* do_mount_ro has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_mount_ro_args, (char *) &args); +} + +static void mount_options_stub (XDR *xdr_in) +{ + int r; + struct guestfs_mount_options_args args; + const char *options; + const char *device; + const char *mountpoint; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_mount_options_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "mount_options"); + return; + } + options = args.options; + device = args.device; + mountpoint = args.mountpoint; + + r = do_mount_options (options, device, mountpoint); + if (r == -1) + /* do_mount_options has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_mount_options_args, (char *) &args); +} + +static void mount_vfs_stub (XDR *xdr_in) +{ + int r; + struct guestfs_mount_vfs_args args; + const char *options; + const char *vfstype; + const char *device; + const char *mountpoint; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_mount_vfs_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "mount_vfs"); + return; + } + options = args.options; + vfstype = args.vfstype; + device = args.device; + mountpoint = args.mountpoint; + + r = do_mount_vfs (options, vfstype, device, mountpoint); + if (r == -1) + /* do_mount_vfs has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_mount_vfs_args, (char *) &args); +} + +static void debug_stub (XDR *xdr_in) +{ + char *r; + struct guestfs_debug_args args; + const char *subcmd; + char **extraargs; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_debug_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "debug"); + return; + } + subcmd = args.subcmd; + extraargs = realloc (args.extraargs.extraargs_val, + sizeof (char *) * (args.extraargs.extraargs_len+1)); + if (extraargs == NULL) { + reply_with_perror ("realloc"); + goto done; + } + extraargs[args.extraargs.extraargs_len] = NULL; + args.extraargs.extraargs_val = extraargs; + + r = do_debug (subcmd, extraargs); + if (r == NULL) + /* do_debug has already called reply_with_error */ + goto done; + + struct guestfs_debug_ret ret; + ret.result = r; + reply ((xdrproc_t) &xdr_guestfs_debug_ret, (char *) &ret); + free (r); +done: + xdr_free ((xdrproc_t) xdr_guestfs_debug_args, (char *) &args); +} + +static void lvremove_stub (XDR *xdr_in) +{ + int r; + struct guestfs_lvremove_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_lvremove_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "lvremove"); + return; + } + device = args.device; + + r = do_lvremove (device); + if (r == -1) + /* do_lvremove has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_lvremove_args, (char *) &args); +} + +static void vgremove_stub (XDR *xdr_in) +{ + int r; + struct guestfs_vgremove_args args; + const char *vgname; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_vgremove_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "vgremove"); + return; + } + vgname = args.vgname; + + r = do_vgremove (vgname); + if (r == -1) + /* do_vgremove has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_vgremove_args, (char *) &args); +} + +static void pvremove_stub (XDR *xdr_in) +{ + int r; + struct guestfs_pvremove_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_pvremove_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "pvremove"); + return; + } + device = args.device; + + r = do_pvremove (device); + if (r == -1) + /* do_pvremove has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_pvremove_args, (char *) &args); +} + +static void set_e2label_stub (XDR *xdr_in) +{ + int r; + struct guestfs_set_e2label_args args; + const char *device; + const char *label; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_set_e2label_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "set_e2label"); + return; + } + device = args.device; + label = args.label; + + r = do_set_e2label (device, label); + if (r == -1) + /* do_set_e2label has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_set_e2label_args, (char *) &args); +} + +static void get_e2label_stub (XDR *xdr_in) +{ + char *r; + struct guestfs_get_e2label_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_get_e2label_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "get_e2label"); + return; + } + device = args.device; + + r = do_get_e2label (device); + if (r == NULL) + /* do_get_e2label has already called reply_with_error */ + goto done; + + struct guestfs_get_e2label_ret ret; + ret.label = r; + reply ((xdrproc_t) &xdr_guestfs_get_e2label_ret, (char *) &ret); + free (r); +done: + xdr_free ((xdrproc_t) xdr_guestfs_get_e2label_args, (char *) &args); +} + +static void set_e2uuid_stub (XDR *xdr_in) +{ + int r; + struct guestfs_set_e2uuid_args args; + const char *device; + const char *uuid; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_set_e2uuid_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "set_e2uuid"); + return; + } + device = args.device; + uuid = args.uuid; + + r = do_set_e2uuid (device, uuid); + if (r == -1) + /* do_set_e2uuid has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_set_e2uuid_args, (char *) &args); +} + +static void get_e2uuid_stub (XDR *xdr_in) +{ + char *r; + struct guestfs_get_e2uuid_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_get_e2uuid_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "get_e2uuid"); + return; + } + device = args.device; + + r = do_get_e2uuid (device); + if (r == NULL) + /* do_get_e2uuid has already called reply_with_error */ + goto done; + + struct guestfs_get_e2uuid_ret ret; + ret.uuid = r; + reply ((xdrproc_t) &xdr_guestfs_get_e2uuid_ret, (char *) &ret); + free (r); +done: + xdr_free ((xdrproc_t) xdr_guestfs_get_e2uuid_args, (char *) &args); +} + +static void fsck_stub (XDR *xdr_in) +{ + int r; + struct guestfs_fsck_args args; + const char *fstype; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_fsck_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "fsck"); + return; + } + fstype = args.fstype; + device = args.device; + + r = do_fsck (fstype, device); + if (r == -1) + /* do_fsck has already called reply_with_error */ + goto done; + + struct guestfs_fsck_ret ret; + ret.status = r; + reply ((xdrproc_t) &xdr_guestfs_fsck_ret, (char *) &ret); +done: + xdr_free ((xdrproc_t) xdr_guestfs_fsck_args, (char *) &args); +} + +static void zero_stub (XDR *xdr_in) +{ + int r; + struct guestfs_zero_args args; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_zero_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "zero"); + return; + } + device = args.device; + + r = do_zero (device); + if (r == -1) + /* do_zero has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_zero_args, (char *) &args); +} + +static void grub_install_stub (XDR *xdr_in) +{ + int r; + struct guestfs_grub_install_args args; + const char *root; + const char *device; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_grub_install_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "grub_install"); + return; + } + root = args.root; + device = args.device; + + r = do_grub_install (root, device); + if (r == -1) + /* do_grub_install has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_grub_install_args, (char *) &args); +} + +static void cp_stub (XDR *xdr_in) +{ + int r; + struct guestfs_cp_args args; + const char *src; + const char *dest; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_cp_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "cp"); + return; + } + src = args.src; + dest = args.dest; + + r = do_cp (src, dest); + if (r == -1) + /* do_cp has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_cp_args, (char *) &args); +} + +static void cp_a_stub (XDR *xdr_in) +{ + int r; + struct guestfs_cp_a_args args; + const char *src; + const char *dest; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_cp_a_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "cp_a"); + return; + } + src = args.src; + dest = args.dest; + + r = do_cp_a (src, dest); + if (r == -1) + /* do_cp_a has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_cp_a_args, (char *) &args); +} + +static void mv_stub (XDR *xdr_in) +{ + int r; + struct guestfs_mv_args args; + const char *src; + const char *dest; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_mv_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "mv"); + return; + } + src = args.src; + dest = args.dest; + + r = do_mv (src, dest); + if (r == -1) + /* do_mv has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_mv_args, (char *) &args); +} + +static void drop_caches_stub (XDR *xdr_in) +{ + int r; + struct guestfs_drop_caches_args args; + int whattodrop; + + memset (&args, 0, sizeof args); + + if (!xdr_guestfs_drop_caches_args (xdr_in, &args)) { + reply_with_error ("%s: daemon failed to decode procedure arguments", "drop_caches"); + return; + } + whattodrop = args.whattodrop; + + r = do_drop_caches (whattodrop); + if (r == -1) + /* do_drop_caches has already called reply_with_error */ + goto done; + + reply (NULL, NULL); +done: + xdr_free ((xdrproc_t) xdr_guestfs_drop_caches_args, (char *) &args); +} + +static void dmesg_stub (XDR *xdr_in) +{ + char *r; + + r = do_dmesg (); + if (r == NULL) + /* do_dmesg has already called reply_with_error */ + goto done; + + struct guestfs_dmesg_ret ret; + ret.kmsgs = r; + reply ((xdrproc_t) &xdr_guestfs_dmesg_ret, (char *) &ret); + free (r); +done: ; +} + +void dispatch_incoming_message (XDR *xdr_in) +{ + switch (proc_nr) { + case GUESTFS_PROC_MOUNT: + mount_stub (xdr_in); + break; + case GUESTFS_PROC_SYNC: + sync_stub (xdr_in); + break; + case GUESTFS_PROC_TOUCH: + touch_stub (xdr_in); + break; + case GUESTFS_PROC_CAT: + cat_stub (xdr_in); + break; + case GUESTFS_PROC_LL: + ll_stub (xdr_in); + break; + case GUESTFS_PROC_LS: + ls_stub (xdr_in); + break; + case GUESTFS_PROC_LIST_DEVICES: + list_devices_stub (xdr_in); + break; + case GUESTFS_PROC_LIST_PARTITIONS: + list_partitions_stub (xdr_in); + break; + case GUESTFS_PROC_PVS: + pvs_stub (xdr_in); + break; + case GUESTFS_PROC_VGS: + vgs_stub (xdr_in); + break; + case GUESTFS_PROC_LVS: + lvs_stub (xdr_in); + break; + case GUESTFS_PROC_PVS_FULL: + pvs_full_stub (xdr_in); + break; + case GUESTFS_PROC_VGS_FULL: + vgs_full_stub (xdr_in); + break; + case GUESTFS_PROC_LVS_FULL: + lvs_full_stub (xdr_in); + break; + case GUESTFS_PROC_READ_LINES: + read_lines_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_INIT: + aug_init_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_CLOSE: + aug_close_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_DEFVAR: + aug_defvar_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_DEFNODE: + aug_defnode_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_GET: + aug_get_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_SET: + aug_set_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_INSERT: + aug_insert_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_RM: + aug_rm_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_MV: + aug_mv_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_MATCH: + aug_match_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_SAVE: + aug_save_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_LOAD: + aug_load_stub (xdr_in); + break; + case GUESTFS_PROC_AUG_LS: + aug_ls_stub (xdr_in); + break; + case GUESTFS_PROC_RM: + rm_stub (xdr_in); + break; + case GUESTFS_PROC_RMDIR: + rmdir_stub (xdr_in); + break; + case GUESTFS_PROC_RM_RF: + rm_rf_stub (xdr_in); + break; + case GUESTFS_PROC_MKDIR: + mkdir_stub (xdr_in); + break; + case GUESTFS_PROC_MKDIR_P: + mkdir_p_stub (xdr_in); + break; + case GUESTFS_PROC_CHMOD: + chmod_stub (xdr_in); + break; + case GUESTFS_PROC_CHOWN: + chown_stub (xdr_in); + break; + case GUESTFS_PROC_EXISTS: + exists_stub (xdr_in); + break; + case GUESTFS_PROC_IS_FILE: + is_file_stub (xdr_in); + break; + case GUESTFS_PROC_IS_DIR: + is_dir_stub (xdr_in); + break; + case GUESTFS_PROC_PVCREATE: + pvcreate_stub (xdr_in); + break; + case GUESTFS_PROC_VGCREATE: + vgcreate_stub (xdr_in); + break; + case GUESTFS_PROC_LVCREATE: + lvcreate_stub (xdr_in); + break; + case GUESTFS_PROC_MKFS: + mkfs_stub (xdr_in); + break; + case GUESTFS_PROC_SFDISK: + sfdisk_stub (xdr_in); + break; + case GUESTFS_PROC_WRITE_FILE: + write_file_stub (xdr_in); + break; + case GUESTFS_PROC_UMOUNT: + umount_stub (xdr_in); + break; + case GUESTFS_PROC_MOUNTS: + mounts_stub (xdr_in); + break; + case GUESTFS_PROC_UMOUNT_ALL: + umount_all_stub (xdr_in); + break; + case GUESTFS_PROC_LVM_REMOVE_ALL: + lvm_remove_all_stub (xdr_in); + break; + case GUESTFS_PROC_FILE: + file_stub (xdr_in); + break; + case GUESTFS_PROC_COMMAND: + command_stub (xdr_in); + break; + case GUESTFS_PROC_COMMAND_LINES: + command_lines_stub (xdr_in); + break; + case GUESTFS_PROC_STAT: + stat_stub (xdr_in); + break; + case GUESTFS_PROC_LSTAT: + lstat_stub (xdr_in); + break; + case GUESTFS_PROC_STATVFS: + statvfs_stub (xdr_in); + break; + case GUESTFS_PROC_TUNE2FS_L: + tune2fs_l_stub (xdr_in); + break; + case GUESTFS_PROC_BLOCKDEV_SETRO: + blockdev_setro_stub (xdr_in); + break; + case GUESTFS_PROC_BLOCKDEV_SETRW: + blockdev_setrw_stub (xdr_in); + break; + case GUESTFS_PROC_BLOCKDEV_GETRO: + blockdev_getro_stub (xdr_in); + break; + case GUESTFS_PROC_BLOCKDEV_GETSS: + blockdev_getss_stub (xdr_in); + break; + case GUESTFS_PROC_BLOCKDEV_GETBSZ: + blockdev_getbsz_stub (xdr_in); + break; + case GUESTFS_PROC_BLOCKDEV_SETBSZ: + blockdev_setbsz_stub (xdr_in); + break; + case GUESTFS_PROC_BLOCKDEV_GETSZ: + blockdev_getsz_stub (xdr_in); + break; + case GUESTFS_PROC_BLOCKDEV_GETSIZE64: + blockdev_getsize64_stub (xdr_in); + break; + case GUESTFS_PROC_BLOCKDEV_FLUSHBUFS: + blockdev_flushbufs_stub (xdr_in); + break; + case GUESTFS_PROC_BLOCKDEV_REREADPT: + blockdev_rereadpt_stub (xdr_in); + break; + case GUESTFS_PROC_UPLOAD: + upload_stub (xdr_in); + break; + case GUESTFS_PROC_DOWNLOAD: + download_stub (xdr_in); + break; + case GUESTFS_PROC_CHECKSUM: + checksum_stub (xdr_in); + break; + case GUESTFS_PROC_TAR_IN: + tar_in_stub (xdr_in); + break; + case GUESTFS_PROC_TAR_OUT: + tar_out_stub (xdr_in); + break; + case GUESTFS_PROC_TGZ_IN: + tgz_in_stub (xdr_in); + break; + case GUESTFS_PROC_TGZ_OUT: + tgz_out_stub (xdr_in); + break; + case GUESTFS_PROC_MOUNT_RO: + mount_ro_stub (xdr_in); + break; + case GUESTFS_PROC_MOUNT_OPTIONS: + mount_options_stub (xdr_in); + break; + case GUESTFS_PROC_MOUNT_VFS: + mount_vfs_stub (xdr_in); + break; + case GUESTFS_PROC_DEBUG: + debug_stub (xdr_in); + break; + case GUESTFS_PROC_LVREMOVE: + lvremove_stub (xdr_in); + break; + case GUESTFS_PROC_VGREMOVE: + vgremove_stub (xdr_in); + break; + case GUESTFS_PROC_PVREMOVE: + pvremove_stub (xdr_in); + break; + case GUESTFS_PROC_SET_E2LABEL: + set_e2label_stub (xdr_in); + break; + case GUESTFS_PROC_GET_E2LABEL: + get_e2label_stub (xdr_in); + break; + case GUESTFS_PROC_SET_E2UUID: + set_e2uuid_stub (xdr_in); + break; + case GUESTFS_PROC_GET_E2UUID: + get_e2uuid_stub (xdr_in); + break; + case GUESTFS_PROC_FSCK: + fsck_stub (xdr_in); + break; + case GUESTFS_PROC_ZERO: + zero_stub (xdr_in); + break; + case GUESTFS_PROC_GRUB_INSTALL: + grub_install_stub (xdr_in); + break; + case GUESTFS_PROC_CP: + cp_stub (xdr_in); + break; + case GUESTFS_PROC_CP_A: + cp_a_stub (xdr_in); + break; + case GUESTFS_PROC_MV: + mv_stub (xdr_in); + break; + case GUESTFS_PROC_DROP_CACHES: + drop_caches_stub (xdr_in); + break; + case GUESTFS_PROC_DMESG: + dmesg_stub (xdr_in); break; default: reply_with_error ("dispatch_incoming_message: unknown procedure number %d", proc_nr); @@ -1729,6 +2776,7 @@ parse_command_line_pvs (void) reply_with_error ("%s", err); free (out); free (err); + free (ret); return NULL; } @@ -2068,6 +3116,7 @@ parse_command_line_vgs (void) reply_with_error ("%s", err); free (out); free (err); + free (ret); return NULL; } @@ -2377,6 +3426,7 @@ parse_command_line_lvs (void) reply_with_error ("%s", err); free (out); free (err); + free (ret); return NULL; }