diff --git a/libfuse/include/fuse_common.h b/libfuse/include/fuse_common.h index 573f55d4..e631c056 100644 --- a/libfuse/include/fuse_common.h +++ b/libfuse/include/fuse_common.h @@ -133,6 +133,7 @@ struct fuse_file_info_t #define FUSE_CAP_PASSTHROUGH (1ULL << 25) #define FUSE_CAP_HANDLE_KILLPRIV (1ULL << 26) #define FUSE_CAP_HANDLE_KILLPRIV_V2 (1ULL << 27) +#define FUSE_CAP_ALLOW_IDMAP (1ULL << 28) /** * Ioctl flags diff --git a/libfuse/lib/fuse_lowlevel.cpp b/libfuse/lib/fuse_lowlevel.cpp index 6af3130c..a7a8fdca 100644 --- a/libfuse/lib/fuse_lowlevel.cpp +++ b/libfuse/lib/fuse_lowlevel.cpp @@ -1203,6 +1203,8 @@ do_init(fuse_req_t req, f->conn.capable |= FUSE_CAP_HANDLE_KILLPRIV; if(inargflags & FUSE_HANDLE_KILLPRIV_V2) f->conn.capable |= FUSE_CAP_HANDLE_KILLPRIV_V2; + if(inargflags & FUSE_ALLOW_IDMAP) + f->conn.capable |= FUSE_CAP_ALLOW_IDMAP; } else { @@ -1280,6 +1282,9 @@ do_init(fuse_req_t req, outargflags |= FUSE_HANDLE_KILLPRIV; if(f->conn.want & FUSE_CAP_HANDLE_KILLPRIV_V2) outargflags |= FUSE_HANDLE_KILLPRIV_V2; + if(f->conn.want & FUSE_CAP_ALLOW_IDMAP) + outargflags |= FUSE_ALLOW_IDMAP; + if(f->conn.want & FUSE_CAP_PASSTHROUGH) { outargflags |= FUSE_PASSTHROUGH; diff --git a/src/fuse_init.cpp b/src/fuse_init.cpp index 84d1c49b..d99d95ea 100644 --- a/src/fuse_init.cpp +++ b/src/fuse_init.cpp @@ -206,6 +206,7 @@ FUSE::init(fuse_conn_info *conn_) ::_want_if_capable(conn_,FUSE_CAP_POSIX_ACL,&cfg.posix_acl); ::_want_if_capable(conn_,FUSE_CAP_READDIR_PLUS,&cfg.readdirplus); ::_want_if_capable(conn_,FUSE_CAP_WRITEBACK_CACHE,&cfg.writeback_cache); + ::_want_if_capable(conn_,FUSE_CAP_ALLOW_IDMAP); // ::_want_if_capable(conn_,FUSE_CAP_READDIR_PLUS_AUTO); ::_want_if_capable_max_pages(conn_,cfg); conn_->want &= ~FUSE_CAP_POSIX_LOCKS;