[#111712] [Ruby master Feature#19322] Support spawning "private" child processes — "kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>
SXNzdWUgIzE5MzIyIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtqdHNhbmFrdHNpZGlzIChLSiBUc2Fu
14 messages
2023/01/07
[ruby-core:111927] [Ruby master Feature#19347] Add Dir.fchdir
From:
"ko1 (Koichi Sasada) via ruby-core" <ruby-core@...>
Date:
2023-01-20 06:25:25 UTC
List:
ruby-core #111927
Issue #19347 has been updated by ko1 (Koichi Sasada).
At the dev meeting there are 4 ideas:
* 4 ideas
* `Dir.fchdir(int)`
* Proposed
* Consistent to the POSIX API
* Can be extended for `Dir.fchdir(dir)` and `Dir.fchdir(io)`
* `Dir.chdir(int)`
* Do not need to add new method
* `Dir.chdir` partially implemented on Windows because fchdir is not supported by Windows. `respond_to?` is not usable to test the availability.
* Can be extended for `Dir.fchdir(dir)` and `Dir.fchdir(io)`
* `dir = Dir.for_fd(int); dir.chdir`
* More object oriented?
* 2 more methods (`Dir.for_fd(int)` and `Dir#chdir`) are needed
* `Dir.for_fd(io.fileno).chdir` needs two objects (IO and Dir) references one FD. It would have a problem with GC. `closedir` frees DIR structure and closes FD. Thus, we cannot implement `autoclose: false` for `Dir.for_fd`.
* Dir.for_fd(io.fileno, autoclose: false)
* use dup(io.fileno) and close that, leave the original one alone?
* `IO#fchdir`
but not concluded.
More discussions are welcome.
----------------------------------------
Feature #19347: Add Dir.fchdir
https://bugs.ruby-lang.org/issues/19347#change-101352
* Author: jeremyevans0 (Jeremy Evans)
* Status: Open
* Priority: Normal
----------------------------------------
Recently, I was working on a program that passes file descriptors over UNIX sockets (using `send_io`/`recv_io`). For file/socket/device descriptors, this works fine using `File#reopen`. However, I found that while Ruby supports `Dir#fileno` to return a directory file descriptor, it cannot use that file descriptor when changing directories.
I worked around this in my program by writing the directory path over the UNIX socket, but this results in a TOCTOU vulnerability in certain cases. Passing the directory file descriptor would be simpler and avoid the vulnerability.
I've submitted a pull request to implement this method: https://github.com/ruby/ruby/pull/7135
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/