38#ifndef BLOCXX_PATHSECURITY_HPP_INCLUDE_GUARD_
39#define BLOCXX_PATHSECURITY_HPP_INCLUDE_GUARD_
41#include "blocxx/BLOCXX_config.h"
43#ifdef BLOCXX_HAVE_SYS_STAT_H
63#define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
65#define S_IRGRP (S_IRUSR / 10)
66#define S_IWGRP (S_IWUSR / 10)
67#define S_IXGRP (S_IXUSR / 10)
69#define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
71#define S_IROTH (S_IRGRP / 10)
72#define S_IWOTH (S_IWGRP / 10)
73#define S_IXOTH (S_IXGRP / 10)
75#define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
77#define S_ISVTX 0x0001000
78#define S_ISDIR(__PARM__) (_S_IFDIR & __PARM__)
79#define S_ISREG(__PARM__) (_S_IFREG & __PARM__)
80#define S_ISLNK(__PARM__) (false)
86static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_READ_DATA = 1;
87static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_WRITE_DATA = 1<<1;
88static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_APPEND_DATA = 1<<2;
89static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_READ_EA = 1<<3;
90static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_WRITE_EA = 1<<4;
91static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_EXEC = 1<<5;
92static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_DELETE_CHILD = 1<<6;
93static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_READ_ATTRS = 1<<7;
94static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_WRITE_ATTRS = 1<<8;
96static const unsigned long BLOCXX_WIN32_ACCESSMASK_DELETE = 1<<16;
97static const unsigned long BLOCXX_WIN32_ACCESSMASK_READ_CONTROL = 1<<17;
98static const unsigned long BLOCXX_WIN32_ACCESSMASK_WRITE_DAC = 1<<18;
99static const unsigned long BLOCXX_WIN32_ACCESSMASK_WRITE_OWNER = 1<<19;
100static const unsigned long BLOCXX_WIN32_ACCESSMASK_SYNCHRONIZE = 1<<20;
101static const unsigned long BLOCXX_WIN32_ACCESSMASK_SYSSECURITY = 1<<24;
103static const unsigned long BLOCXX_WIN32_ACCESSMASK_GENERIC_ALL = 1<<28;
104static const unsigned long BLOCXX_WIN32_ACCESSMASK_GENERIC_EXEC = 1<<29;
105static const unsigned long BLOCXX_WIN32_ACCESSMASK_GENERIC_WRITE = 1<<30;
106static const unsigned long BLOCXX_WIN32_ACCESSMASK_GENERIC_READ = 1<<31;
108static const unsigned long BLOCXX_WIN32_ACCESSMASK_ALLOW_ANY_CHANGE = \
109 BLOCXX_WIN32_ACCESSMASK_GENERIC_ALL | \
110 BLOCXX_WIN32_ACCESSMASK_GENERIC_WRITE | \
111 BLOCXX_WIN32_ACCESSMASK_WRITE_DAC | \
112 BLOCXX_WIN32_ACCESSMASK_FILE_WRITE_ATTRS | \
113 BLOCXX_WIN32_ACCESSMASK_FILE_WRITE_DATA | \
114 BLOCXX_WIN32_ACCESSMASK_FILE_APPEND_DATA | \
115 BLOCXX_WIN32_ACCESSMASK_FILE_WRITE_EA ;
120#if defined(BLOCXX_NETWARE) || defined(BLOCXX_WIN32)
122 #define S_ISLNK(x) false
123 #define READLINK(path, buf, size) 0
124 #define READLINK_ALLOWED false
126 #define LSTAT ::lstat
127 #define READLINK(path, buf, size) ::readlink((path), (buf), (size))
128 #define READLINK_ALLOWED true
EFileStatusReturn getFileStatus(struct stat const &x, uid_t uid, bool is_full_path, const String &path)
GetFileStatus() - just to unify the call of file_ok() for Win and xNix.
BLOCXX_COMMON_API bool isPathAbsolute(String const &path)