From: Patrick Donnelly Date: Fri, 21 Mar 2025 16:53:38 +0000 (-0400) Subject: common/buffer: accept "-" as stdin X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5597c63f0d9e1edde84b14eee4611ce95e9cff6a;p=ceph-ci.git 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 (cherry picked from commit 37441c753da3925c874a94ee3ff862bb725babb8) --- 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;