Files
libguestfs/daemon
Laszlo Ersek 45b7f1736b guestfs_readdir(): rewrite with FileOut transfer, to lift protocol limit
Currently the guestfs_readdir() API can not list long directories, due to
it sending back the whole directory listing in a single guestfs protocol
response, which is limited to GUESTFS_MESSAGE_MAX (approx. 4MB) in size.

Introduce the "internal_readdir" action, for transferring the directory
listing from the daemon to the library through a FileOut parameter.
Rewrite guestfs_readdir() on top of this new internal function:

- The new "internal_readdir" action is a daemon action. Do not repurpose
  the "readdir" proc_nr (138) for "internal_readdir", as some distros ship
  the binary appliance to their users, and reusing the proc_nr could
  create a mismatch between library & appliance with obscure symptoms.
  Replace the old proc_nr (138) with a new proc_nr (511) instead; a
  mismatch would then produce a clear error message. Assume the new action
  will first be released in libguestfs-1.48.2.

- Turn "readdir" from a daemon action into a non-daemon one. Call the
  daemon action guestfs_internal_readdir() manually, receive the FileOut
  parameter into a temp file, then deserialize the dirents array from the
  temp file.

This patch sneakily fixes an independent bug, too. In the pre-patch
do_readdir() function [daemon/readdir.c], when readdir() returns NULL, we
don't distinguish "end of directory stream" from "readdir() failed". This
rewrite fixes this problem -- I didn't see much value separating out the
fix for the original do_readdir().

Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1674392
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <20220502085601.15012-2-lersek@redhat.com>
Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
2022-05-03 10:53:48 +02:00
..
2022-03-09 09:28:02 +00:00
2017-07-27 17:31:41 +01:00
2017-07-27 17:31:41 +01:00
2020-03-06 19:32:32 +00:00
2017-07-27 17:31:41 +01:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2017-07-27 17:31:41 +01:00
2021-04-08 11:36:40 +01:00
2017-07-27 17:31:41 +01:00
2019-11-28 13:09:21 +01:00
2020-03-06 19:32:32 +00:00
2021-03-16 11:24:37 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2017-07-27 17:31:41 +01:00
2017-07-27 17:31:41 +01:00
2017-07-27 17:31:41 +01:00
2011-11-08 14:43:07 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2018-04-19 11:30:29 +02:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2017-07-27 17:31:41 +01:00
2017-07-27 17:31:41 +01:00
2020-03-06 19:32:32 +00:00
2021-04-08 11:36:40 +01:00
2020-03-06 19:32:32 +00:00
2017-07-27 17:31:41 +01:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2021-05-13 09:19:31 +01:00
2014-10-23 19:03:11 +02:00
2017-07-27 17:31:41 +01:00
2018-02-12 11:24:06 +01:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2017-07-27 17:31:41 +01:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2014-10-23 19:03:11 +02:00
2017-07-27 17:31:41 +01:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2011-11-08 14:43:07 +00:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2017-07-27 17:31:41 +01:00
2017-07-27 17:31:41 +01:00
2017-07-27 17:31:41 +01:00
2017-07-27 17:31:41 +01:00
2011-11-08 14:43:07 +00:00
2017-07-27 17:31:41 +01:00
2017-07-27 17:31:41 +01:00
2017-07-10 17:01:59 +01:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2017-07-27 17:31:41 +01:00
2020-03-06 19:32:32 +00:00
2017-07-27 17:31:41 +01:00
2020-03-06 19:32:32 +00:00
2020-03-06 19:32:32 +00:00
2015-07-02 16:08:44 +01:00
2020-03-06 19:32:32 +00:00
2014-10-23 19:03:11 +02:00
2015-10-05 14:28:33 +01:00
2021-03-30 12:56:58 +01:00
2020-03-06 19:32:32 +00:00
2017-07-27 17:31:41 +01:00