fd_server: support open file by path at a dir fd
When fd_server allows the client/authfs to (only) read a directory, authfs
will be able to serve the shared directory remotely (and implement its own
authentication).
Bug: 203251769
Test: atest AuthFsHostTest
Change-Id: If7209ec496b305ba8f469a382c2f775dcd0d1711
diff --git a/authfs/fd_server/src/main.rs b/authfs/fd_server/src/main.rs
index bbcd49f..f5a3cba 100644
--- a/authfs/fd_server/src/main.rs
+++ b/authfs/fd_server/src/main.rs
@@ -78,9 +78,13 @@
Ok((fd, FdConfig::ReadWrite(file)))
}
+fn parse_arg_ro_dirs(arg: &str) -> Result<(i32, FdConfig)> {
+ let fd = arg.parse::<i32>()?;
+ Ok((fd, FdConfig::InputDir(Dir::from_fd(fd)?)))
+}
+
fn parse_arg_rw_dirs(arg: &str) -> Result<(i32, FdConfig)> {
let fd = arg.parse::<i32>()?;
-
Ok((fd, FdConfig::OutputDir(Dir::from_fd(fd)?)))
}
@@ -100,6 +104,10 @@
.long("rw-fds")
.multiple(true)
.number_of_values(1))
+ .arg(clap::Arg::with_name("ro-dirs")
+ .long("ro-dirs")
+ .multiple(true)
+ .number_of_values(1))
.arg(clap::Arg::with_name("rw-dirs")
.long("rw-dirs")
.multiple(true)
@@ -122,6 +130,12 @@
fd_pool.insert(fd, config);
}
}
+ if let Some(args) = matches.values_of("ro-dirs") {
+ for arg in args {
+ let (fd, config) = parse_arg_ro_dirs(arg)?;
+ fd_pool.insert(fd, config);
+ }
+ }
if let Some(args) = matches.values_of("rw-dirs") {
for arg in args {
let (fd, config) = parse_arg_rw_dirs(arg)?;