From b4d4e7e9b8ca92adddbb2c19bb1c3d1beda23441 Mon Sep 17 00:00:00 2001 From: Thomas Bushnell Date: Fri, 19 Feb 1999 07:45:38 +0000 Subject: 1999-02-06 Mark Kettenis * trivfs.h (trivfs_check_access_hook): New variable. * fsys-getroot.c (trivfs_S_fsys_getroot): Use trivfs_check_acces_hook. * dir-lookup.c (trivfs_S_dir_lookup): Likewise. * file-access.c (trivfs_S_file_check_access): Likewise. --- libtrivfs/fsys-getroot.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'libtrivfs/fsys-getroot.c') diff --git a/libtrivfs/fsys-getroot.c b/libtrivfs/fsys-getroot.c index 4eadd344..9d173f9a 100644 --- a/libtrivfs/fsys-getroot.c +++ b/libtrivfs/fsys-getroot.c @@ -73,17 +73,21 @@ trivfs_S_fsys_getroot (struct trivfs_control *cntl, if (err) return err; - file_check_access (new_realnode, &perms); - if ((flags & (O_READ|O_WRITE|O_EXEC) & perms) - != (flags & (O_READ|O_WRITE|O_EXEC))) - err = EACCES; - uvec = make_idvec (); gvec = make_idvec (); idvec_set_ids (uvec, uids, nuids); idvec_set_ids (gvec, gids, ngids); - user = iohelp_create_iouser (uvec, gvec); - + user = iohelp_create_iouser (uvec, gvec); /* XXX check return value? */ + + /* Validate permissions. */ + if (! trivfs_check_access_hook) + file_check_access (new_realnode, &perms); + else + (*trivfs_check_access_hook) (cntl, user, new_realnode, &perms); + if ((flags & (O_READ|O_WRITE|O_EXEC) & perms) + != (flags & (O_READ|O_WRITE|O_EXEC))) + err = EACCES; + if (!err && trivfs_check_open_hook) err = (*trivfs_check_open_hook) (cntl, user, flags); if (!err) -- cgit v1.2.3