GetXattrAt implements vfs.FilesystemImpl.GetXattrAt.
(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetXattrOptions)
| 1117 | |
| 1118 | // GetXattrAt implements vfs.FilesystemImpl.GetXattrAt. |
| 1119 | func (fs *Filesystem) GetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetXattrOptions) (string, error) { |
| 1120 | fs.mu.RLock() |
| 1121 | defer fs.processDeferredDecRefs(ctx) |
| 1122 | defer fs.mu.RUnlock() |
| 1123 | d, err := fs.walkExistingLocked(ctx, rp) |
| 1124 | if err != nil { |
| 1125 | return "", err |
| 1126 | } |
| 1127 | if xi, ok := d.inode.(InodeWithXattrs); ok { |
| 1128 | creds := rp.Credentials() |
| 1129 | mode := d.inode.Mode() |
| 1130 | kuid := d.inode.UID() |
| 1131 | kgid := d.inode.GID() |
| 1132 | if err := vfs.GenericCheckPermissions(creds, vfs.MayRead, mode, kuid, kgid); err != nil { |
| 1133 | return "", err |
| 1134 | } |
| 1135 | if err := vfs.CheckXattrPermissions(creds, vfs.MayRead, mode, kuid, opts.Name); err != nil { |
| 1136 | return "", err |
| 1137 | } |
| 1138 | return xi.GetXattr(ctx, opts) |
| 1139 | } |
| 1140 | // kernfs currently does not support extended attributes. |
| 1141 | return "", linuxerr.ENOTSUP |
| 1142 | } |
| 1143 | |
| 1144 | // SetXattrAt implements vfs.FilesystemImpl.SetXattrAt. |
| 1145 | func (fs *Filesystem) SetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetXattrOptions) error { |
nothing calls this directly
no test coverage detected