diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2021-10-13 00:54:55 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2021-10-13 00:55:20 +0200 |
commit | 5eac2a9ffd7629fcba1c4800c63f90f8ea32ad17 (patch) | |
tree | aa03a8cc5951ab35e4486bf7ab8809e9997867c2 /libtreefs/node-hooks.c | |
parent | 96a673a4b0b7da004b7ffe6460894e94f57cd14a (diff) | |
download | hurd-5eac2a9ffd7629fcba1c4800c63f90f8ea32ad17.tar.gz hurd-5eac2a9ffd7629fcba1c4800c63f90f8ea32ad17.tar.bz2 hurd-5eac2a9ffd7629fcba1c4800c63f90f8ea32ad17.zip |
libtreefs: remove unfinished and unused code
* libtreefs: Remove directory.
Diffstat (limited to 'libtreefs/node-hooks.c')
-rw-r--r-- | libtreefs/node-hooks.c | 176 |
1 files changed, 0 insertions, 176 deletions
diff --git a/libtreefs/node-hooks.c b/libtreefs/node-hooks.c deleted file mode 100644 index faffcd6a..00000000 --- a/libtreefs/node-hooks.c +++ /dev/null @@ -1,176 +0,0 @@ -/* Default hooks for nodes - - Copyright (C) 1995 Free Software Foundation, Inc. - - Written by Miles Bader <miles@gnu.ai.mit.edu> - - This file is part of the GNU Hurd. - - The GNU Hurd is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2, or (at - your option) any later version. - - The GNU Hurd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#include "treefs.h" - -/* ---------------------------------------------------------------- */ -/* These default hooks depend on stat information being correct. */ - -/* Returns the type of NODE, as an S_IFMT value (e.g., S_IFDIR). The - default routine just looks at NODE's stat mode. */ -int -_treefs_node_type (struct treefs_node *node) -{ - return node->stat.st_mode & S_IFMT; -} - -/* Return TRUE if NODE is `unlinked' -- that is, can be deleted when all - (in-memory) references go away. */ -int -_treefs_node_unlinked (struct treefs_node *node) -{ - return node->stat.st_nlinks == 0; -} - -/* Changes the link count of NODE by CHANGE; if any error is returned, the - operation trying to change the link count will fail, so filesystems that - don't support real links can restrict it to 1 or 0. This is mostly used - by the in-core directory code when it makes a link. The default hook uses - the link field of NODE's stat entry. */ -error_t -_treefs_node_mod_link_count (struct treefs_node *node, int change) -{ - node->stat.st_nlinks += change; -} - - -/* ---------------------------------------------------------------- */ -/* These default hooks depend on stat information being correct. */ - -/* Returns the user and group that a newly started translator should be - authenticated as. The default just returns the owner/group of NODE. */ -error_t -_treefs_node_get_trans_auth (struct treefs_node *node, uid_t *uid, gid_t *gid) -{ - *uid = node->stat.st_uid; - *gid = node->stat.st_gid; - return 0; -} - -/* Check to see is the user identified by AUTH is permitted to do - operation OP on node NP. Op is one of S_IREAD, S_IWRITE, or S_IEXEC. - Return 0 if the operation is permitted and EACCES if not. */ -error_t -_treefs_node_access (struct treefs_node *node, - int op, struct treefs_auth *auth) -{ - int gotit; - if (diskfs_auth_has_uid (auth, 0)) - gotit = 1; - else if (auth->nuids == 0 && (node->stat.st_mode & S_IUSEUNK)) - gotit = node->stat.st_mode & (op << S_IUNKSHIFT); - else if (!treefs_node_owned (node, auth)) - gotit = node->stat.st_mode & op; - else if (treefs_auth_in_group (auth, node->stat.st_gid)) - gotit = node->stat.st_mode & (op >> 3); - else - gotit = node->stat.st_mode & (op >> 6); - return gotit ? 0 : EACCES; -} - -/* Check to see if the user identified by AUTH is permitted to do owner-only - operations on node NP; if so, return 0; if not, return EPERM. */ -error_t -_treefs_node_owned (struct treefs_node *node, struct treefs_auth *auth) -{ - /* Permitted if the user is the owner, superuser, or if the user - is in the group of the file and has the group ID as their user - ID. (This last is colloquially known as `group leader'.) */ - if (treefs_auth_has_uid (auth, node->stat.st_uid) - || treefs_auth_has_uid (auth, 0) - || (treefs_auth_in_group (auth, node->stat.st_gid) - && treefs_auth_has_uid (auth, node->stat.st_gid))) - return 0; - else - return EPERM; -} - -/* ---------------------------------------------------------------- */ - -error_t -_treefs_node_init_stat (struct treefs_node *node, struct treefs_node *dir, - mode_t mode, struct treefs_auth *auth) -{ - if (auth->nuids) - node->stat.st_uid = auth->uids[0]; - else - { - mode &= ~S_ISUID; - if (dir) - node->stat.st_uid = dir->stat.st_uid; - else - node->stat.st_uid = -1; /* XXX */ - } - - if (dir && diskfs_ingroup (dir->stat.st_gid, auth)) - node->stat.st_gid = dir->stat.st_gid; - else if (auth->ngids) - node->stat.st_gid = auth->gids[0]; - else - { - mode &= ~S_ISGID; - if (dir) - node->stat.st_gid = dir->stat.st_gid; - else - node->stat.st_gid = -1; /* XXX */ - } - - node->stat.st_rdev = 0; - node->stat.st_nlink = 0; - node->stat.st_mode = mode; - - node->stat.st_blocks = 0; - node->stat.st_size = 0; - node->stat.st_flags = 0; - - return 0; -} - -/* ---------------------------------------------------------------- */ - -/* Called when the new peropen structure PO is made for NODE, with the - authorization in AUTH, opened with the flags FLAGS. If an error is - returned, the open will fail with that error. The default hook does - explicit authorization checks against AUTH using treefs_node_access, and - otherwise does nothing. */ -error_t -_treefs_init_peropen (struct treefs_node *node, struct treefs_peropen *po, - int flags, struct treefs_auth *auth) -{ - error_t err; - - if (flags & O_READ) - err = treefs_node_access (node, S_IREAD, auth); - if (!err && (flags & O_EXEC)) - err = treefs_node_access (node, S_IEXEC, auth); - if (!err && (flags & O_WRITE)) - { - if (type == S_IFDIR) - err = EISDIR; - else if (auth->po->node->fsys->readonly) - err = EROFS; - else - err = treefs_node_access (node, S_IWRITE, auth); - } - - return err; -} |