From 510d18141f5448d0ad8af4d5bdad77d0956e9d54 Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Fri, 21 Mar 2025 12:53:38 -0400 Subject: [PATCH] common/buffer: accept "-" as stdin These methods are used for reading files from tools like "authtool". Read from stdin if the conventional "-" filename is passed. Signed-off-by: Patrick Donnelly --- src/common/buffer.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/common/buffer.cc b/src/common/buffer.cc index 6a6a8cbe5ba..68eb2a43f17 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -1717,7 +1717,13 @@ void buffer::list::decode_base64(buffer::list& e) ssize_t buffer::list::pread_file(const char *fn, uint64_t off, uint64_t len, std::string *error) { - int fd = TEMP_FAILURE_RETRY(::open(fn, O_RDONLY|O_CLOEXEC|O_BINARY)); + int fd; + if (strcmp(fn, "-") == 0) { + /* FIXME dup3 for O_CLOEXEC */ + fd = TEMP_FAILURE_RETRY(::dup(STDIN_FILENO)); + } else { + fd = TEMP_FAILURE_RETRY(::open(fn, O_RDONLY|O_CLOEXEC|O_BINARY)); + } if (fd < 0) { int err = errno; std::ostringstream oss; @@ -1777,7 +1783,13 @@ ssize_t buffer::list::pread_file(const char *fn, uint64_t off, uint64_t len, std int buffer::list::read_file(const char *fn, std::string *error) { - int fd = TEMP_FAILURE_RETRY(::open(fn, O_RDONLY|O_CLOEXEC|O_BINARY)); + int fd; + if (strcmp(fn, "-") == 0) { + /* FIXME dup3 for O_CLOEXEC */ + fd = TEMP_FAILURE_RETRY(::dup(STDIN_FILENO)); + } else { + fd = TEMP_FAILURE_RETRY(::open(fn, O_RDONLY|O_CLOEXEC|O_BINARY)); + } if (fd < 0) { int err = errno; std::ostringstream oss; -- 2.39.5