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
47 namespace BLOCXX_NAMESPACE
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)
86 static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_READ_DATA = 1;
87 static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_WRITE_DATA = 1<<1;
88 static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_APPEND_DATA = 1<<2;
89 static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_READ_EA = 1<<3;
90 static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_WRITE_EA = 1<<4;
91 static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_EXEC = 1<<5;
92 static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_DELETE_CHILD = 1<<6;
93 static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_READ_ATTRS = 1<<7;
94 static const unsigned long BLOCXX_WIN32_ACCESSMASK_FILE_WRITE_ATTRS = 1<<8;
96 static const unsigned long BLOCXX_WIN32_ACCESSMASK_DELETE = 1<<16;
97 static const unsigned long BLOCXX_WIN32_ACCESSMASK_READ_CONTROL = 1<<17;
98 static const unsigned long BLOCXX_WIN32_ACCESSMASK_WRITE_DAC = 1<<18;
99 static const unsigned long BLOCXX_WIN32_ACCESSMASK_WRITE_OWNER = 1<<19;
100 static const unsigned long BLOCXX_WIN32_ACCESSMASK_SYNCHRONIZE = 1<<20;
101 static const unsigned long BLOCXX_WIN32_ACCESSMASK_SYSSECURITY = 1<<24;
103 static const unsigned long BLOCXX_WIN32_ACCESSMASK_GENERIC_ALL = 1<<28;
104 static const unsigned long BLOCXX_WIN32_ACCESSMASK_GENERIC_EXEC = 1<<29;
105 static const unsigned long BLOCXX_WIN32_ACCESSMASK_GENERIC_WRITE = 1<<30;
106 static const unsigned long BLOCXX_WIN32_ACCESSMASK_GENERIC_READ = 1<<31;
108 static 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 ;
118 #endif //ifdef BLOCXX_WIN32
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