From: Patrick Donnelly Date: Fri, 21 Mar 2025 16:53:38 +0000 (-0400) Subject: common/buffer: accept "-" as stdin X-Git-Tag: testing/wip-pdonnell-testing-20260210.212535~93 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cf428ade913e472c3fb481d621362a81c7b4a6c3;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 --- diff --git a/src/common/buffer.cc b/src/common/buffer.cc index d5184036f85..e0c6841ebb4 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -1725,7 +1725,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; @@ -1785,7 +1791,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;