summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport/src/sup_fs_check_permissions.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libcsupport/src/sup_fs_check_permissions.c')
-rw-r--r--cpukit/libcsupport/src/sup_fs_check_permissions.c53
1 files changed, 49 insertions, 4 deletions
diff --git a/cpukit/libcsupport/src/sup_fs_check_permissions.c b/cpukit/libcsupport/src/sup_fs_check_permissions.c
index 8dcecb6119..85d237cce6 100644
--- a/cpukit/libcsupport/src/sup_fs_check_permissions.c
+++ b/cpukit/libcsupport/src/sup_fs_check_permissions.c
@@ -16,8 +16,53 @@
#include "config.h"
#endif
+#include <sys/stat.h>
+
#include <rtems/libio_.h>
+#define RTEMS_FS_USR_SHIFT 6
+#define RTEMS_FS_GRP_SHIFT 3
+#define RTEMS_FS_OTH_SHIFT 0
+
+RTEMS_STATIC_ASSERT(
+ (RTEMS_FS_PERMS_READ << RTEMS_FS_USR_SHIFT) == S_IRUSR,
+ S_IRUSR
+);
+RTEMS_STATIC_ASSERT(
+ (RTEMS_FS_PERMS_READ << RTEMS_FS_GRP_SHIFT) == S_IRGRP,
+ S_IRGRP
+);
+RTEMS_STATIC_ASSERT(
+ (RTEMS_FS_PERMS_READ << RTEMS_FS_OTH_SHIFT) == S_IROTH,
+ S_IROTH
+);
+
+RTEMS_STATIC_ASSERT(
+ (RTEMS_FS_PERMS_WRITE << RTEMS_FS_USR_SHIFT) == S_IWUSR,
+ S_IWUSR
+);
+RTEMS_STATIC_ASSERT(
+ (RTEMS_FS_PERMS_WRITE << RTEMS_FS_GRP_SHIFT) == S_IWGRP,
+ S_IWGRP
+);
+RTEMS_STATIC_ASSERT(
+ (RTEMS_FS_PERMS_WRITE << RTEMS_FS_OTH_SHIFT) == S_IWOTH,
+ S_IWOTH
+);
+
+RTEMS_STATIC_ASSERT(
+ (RTEMS_FS_PERMS_EXEC << RTEMS_FS_USR_SHIFT) == S_IXUSR,
+ S_IXUSR
+);
+RTEMS_STATIC_ASSERT(
+ (RTEMS_FS_PERMS_EXEC << RTEMS_FS_GRP_SHIFT) == S_IXGRP,
+ S_IXGRP
+);
+RTEMS_STATIC_ASSERT(
+ (RTEMS_FS_PERMS_EXEC << RTEMS_FS_OTH_SHIFT) == S_IXOTH,
+ S_IXOTH
+);
+
bool rtems_filesystem_check_access(
int eval_flags,
mode_t node_mode,
@@ -25,18 +70,18 @@ bool rtems_filesystem_check_access(
gid_t node_gid
)
{
- mode_t perm_flags = eval_flags & RTEMS_LIBIO_PERMS_RWX;
+ mode_t perm_flags = eval_flags & RTEMS_FS_PERMS_RWX;
uid_t task_uid = geteuid();
if (task_uid == 0 || task_uid == node_uid) {
- perm_flags <<= 6;
+ perm_flags <<= RTEMS_FS_USR_SHIFT;
} else {
gid_t task_gid = getegid();
if (task_gid == 0 || task_gid == node_gid) {
- perm_flags <<= 3;
+ perm_flags <<= RTEMS_FS_GRP_SHIFT;
} else {
- perm_flags <<= 0;
+ perm_flags <<= RTEMS_FS_OTH_SHIFT;
}
}