patch-2.1.112 linux/fs/ufs/acl.c
Next file: linux/fs/ufs/balloc.c
Previous file: linux/fs/ufs/Makefile
Back to the patch index
Back to the overall index
- Lines: 67
- Date:
Sun Jul 26 01:20:22 1998
- Orig file:
v2.1.111/linux/fs/ufs/acl.c
- Orig date:
Wed Dec 31 16:00:00 1969
diff -u --recursive --new-file v2.1.111/linux/fs/ufs/acl.c linux/fs/ufs/acl.c
@@ -0,0 +1,66 @@
+/*
+ * linux/fs/ufs/acl.c
+ *
+ * Copyright (C) 1998
+ * Daniel Pirkl <daniel.pirkl@email.cz>
+ * Charles Uiversity, Faculty of Mathematics and Physics
+ *
+ * from
+ *
+ * linux/fs/ext2/acl.c
+ *
+ * Copyright (C) 1993, 1994, 1995
+ * Remy Card (card@masi.ibp.fr)
+ * Laboratoire MASI - Institut Blaise Pascal
+ * Universite Pierre et Marie Curie (Paris VI)
+ */
+
+/*
+ * This file will contain the Access Control Lists management for the
+ * second extended file system.
+ */
+
+#include <linux/errno.h>
+#include <linux/fs.h>
+#include <linux/ufs_fs.h>
+#include <linux/sched.h>
+#include <linux/stat.h>
+
+/*
+ * ufs_permission ()
+ *
+ * Check for access rights
+ */
+int ufs_permission (struct inode * inode, int mask)
+{
+ unsigned short mode = inode->i_mode;
+
+ /*
+ * Nobody gets write access to a file on a readonly-fs
+ */
+ if ((mask & S_IWOTH) &&
+ (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) &&
+ IS_RDONLY(inode))
+ return -EROFS;
+ /*
+ * Nobody gets write access to an immutable file
+ */
+ if ((mask & S_IWOTH) && IS_IMMUTABLE(inode))
+ return -EACCES;
+
+ /*
+ * If no ACL, checks using the file mode
+ */
+ else if (current->fsuid == inode->i_uid)
+ mode >>= 6;
+ else if (in_group_p (inode->i_gid))
+ mode >>= 3;
+ /*
+ * Access is always granted for root. We now check last,
+ * though, for BSD process accounting correctness
+ */
+ if (((mode & mask & S_IRWXO) == mask) || fsuser())
+ return 0;
+ else
+ return -EACCES;
+}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov