1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
15:
16: defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');
17:
18: define('CON_PREDICT_SUFFICIENT', 1);
19:
20: define('CON_PREDICT_NOTPREDICTABLE', 2);
21:
22: define('CON_PREDICT_CHANGEPERM_SAMEOWNER', 3);
23:
24: define('CON_PREDICT_CHANGEPERM_SAMEGROUP', 4);
25:
26: define('CON_PREDICT_CHANGEPERM_OTHERS', 5);
27:
28: define('CON_PREDICT_CHANGEUSER', 6);
29:
30: define('CON_PREDICT_CHANGEGROUP', 7);
31:
32: define('CON_PREDICT_WINDOWS', 8);
33:
34: define('CON_BASEDIR_NORESTRICTION', 1);
35:
36: define('CON_BASEDIR_DOTRESTRICTION', 2);
37:
38: define('CON_BASEDIR_RESTRICTIONSUFFICIENT', 3);
39:
40: define('CON_BASEDIR_INCOMPATIBLE', 4);
41:
42: function canWriteFile($filename) {
43: clearstatcache();
44: if (is_file($filename)) {
45: return is_writable($filename);
46: } else {
47: return is_writable(dirname($filename));
48: }
49: }
50:
51: function canWriteDir($dirname) {
52: clearstatcache();
53: return is_dir($dirname) && is_writable($dirname);
54: }
55:
56: function getFileInfo($sFilename) {
57: if (!cFileHandler::exists($sFilename)) {
58: return false;
59: }
60:
61: $oiFilePermissions = fileperms($sFilename);
62: if ($oiFilePermissions === false) {
63: return false;
64: }
65:
66: switch (true) {
67: case (($oiFilePermissions & 0xC000) == 0xC000):
68: $info = 's';
69: $type = "socket";
70: break;
71: case (($oiFilePermissions & 0xA000) == 0xA000):
72: $info = 'l';
73: $type = "symbolic link";
74: break;
75: case (($oiFilePermissions & 0x8000) == 0x8000):
76: $info = '-';
77: $type = "regular file";
78: break;
79: case (($oiFilePermissions & 0x6000) == 0x6000):
80: $info = 'b';
81: $type = "block special";
82: break;
83: case (($oiFilePermissions & 0x4000) == 0x4000):
84: $info = 'd';
85: $type = "directory";
86: break;
87: case (($oiFilePermissions & 0x2000) == 0x2000):
88: $info = 'c';
89: $type = "character special";
90: break;
91: case (($oiFilePermissions & 0x1000) == 0x1000):
92: $info = 'p';
93: $type = "FIFO pipe";
94: break;
95: default:
96: $info = "u";
97: $type = "Unknown";
98: break;
99: }
100:
101: $aFileinfo = array();
102: $aFileinfo["info"] = $info;
103: $aFileinfo["type"] = $type;
104: $aFileinfo["owner"]["read"] = ($oiFilePermissions & 0x0100)? true : false;
105: $aFileinfo["owner"]["write"] = ($oiFilePermissions & 0x0080)? true : false;
106: $aFileinfo["group"]["read"] = ($oiFilePermissions & 0x0020)? true : false;
107: $aFileinfo["group"]["write"] = ($oiFilePermissions & 0x0010)? true : false;
108: $aFileinfo["others"]["read"] = ($oiFilePermissions & 0x0004)? true : false;
109: $aFileinfo["others"]["write"] = ($oiFilePermissions & 0x0002)? true : false;
110: $aFileinfo["owner"]["id"] = fileowner($sFilename);
111: $aFileinfo["group"]["id"] = filegroup($sFilename);
112: return ($aFileinfo);
113: }
114:
115: function checkOpenBasedirCompatibility() {
116: $value = getPHPIniSetting("open_basedir");
117:
118: if (isWindows()) {
119: $aBasedirEntries = explode(";", $value);
120: } else {
121: $aBasedirEntries = explode(":", $value);
122: }
123:
124: if (count($aBasedirEntries) == 1 && $aBasedirEntries[0] == $value) {
125: return CON_BASEDIR_NORESTRICTION;
126: }
127:
128: if (in_array(".", $aBasedirEntries) && count($aBasedirEntries) == 1) {
129: return CON_BASEDIR_DOTRESTRICTION;
130: }
131:
132: $sCurrentDirectory = getcwd();
133:
134: foreach ($aBasedirEntries as $entry) {
135: if (stristr($sCurrentDirectory, $entry)) {
136: return CON_BASEDIR_RESTRICTIONSUFFICIENT;
137: }
138: }
139:
140: return CON_BASEDIR_INCOMPATIBLE;
141: }
142:
143: function predictCorrectFilepermissions($file) {
144:
145:
146: if (isWindows()) {
147: return CON_PREDICT_WINDOWS;
148: }
149:
150:
151:
152: if (is_writable($file) && is_readable($file)) {
153: return CON_PREDICT_SUFFICIENT;
154: }
155:
156:
157:
158: $iServerUID = getServerUID();
159: if ($iServerUID === false) {
160: return CON_PREDICT_NOTPREDICTABLE;
161: }
162:
163:
164:
165: $iServerGID = getServerGID();
166: if ($iServerGID === false) {
167: return CON_PREDICT_NOTPREDICTABLE;
168: }
169:
170: $aFilePermissions = getFileInfo($file);
171:
172: if (getSafeModeStatus()) {
173:
174: if ($iServerUID == $aFilePermissions["owner"]["id"]) {
175: return CON_PREDICT_CHANGEPERM_SAMEOWNER;
176: }
177:
178: if (getSafeModeGidStatus()) {
179:
180: if ($iServerGID == $aFilePermissions["group"]["id"]) {
181: return CON_PREDICT_CHANGEPERM_SAMEGROUP;
182: }
183:
184: return CON_PREDICT_CHANGEGROUP;
185: }
186: } else {
187:
188: if ($iServerUID == $aFilePermissions["owner"]["id"]) {
189: return CON_PREDICT_CHANGEPERM_SAMEOWNER;
190: }
191:
192: if ($iServerGID == $aFilePermissions["group"]["id"]) {
193: return CON_PREDICT_CHANGEPERM_SAMEGROUP;
194: }
195:
196: return CON_PREDICT_CHANGEPERM_OTHERS;
197: }
198: }