Linux cesa-www-main 6.1.0-49-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
Apache/2.4.68 (Debian)
Server IP : 10.218.0.2 & Your IP : 216.73.216.28
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
var /
www /
cesa.co.za /
sipdm.cesa.co.za /
lib /
Delete
Unzip
Name
Size
Permission
Date
Action
adodb
[ DIR ]
drwxr-sr-x
2017-06-22 15:31
ajax
[ DIR ]
drwxr-sr-x
2017-06-22 15:31
amd
[ DIR ]
drwxr-sr-x
2017-06-22 15:19
antivirus
[ DIR ]
drwxr-sr-x
2017-06-22 15:19
behat
[ DIR ]
drwxr-sr-x
2017-06-22 15:32
bennu
[ DIR ]
drwxr-sr-x
2017-06-22 15:32
classes
[ DIR ]
drwxr-sr-x
2017-06-22 15:34
db
[ DIR ]
drwxr-sr-x
2017-06-22 15:34
ddl
[ DIR ]
drwxr-sr-x
2017-06-22 15:34
dml
[ DIR ]
drwxr-sr-x
2017-06-22 15:35
dtl
[ DIR ]
drwxr-sr-x
2017-06-22 15:35
editor
[ DIR ]
drwxr-sr-x
2017-06-22 15:37
evalmath
[ DIR ]
drwxr-sr-x
2017-06-22 15:40
external
[ DIR ]
drwxr-sr-x
2017-06-22 15:40
filebrowser
[ DIR ]
drwxr-sr-x
2017-06-22 15:40
filestorage
[ DIR ]
drwxr-sr-x
2017-06-22 15:40
form
[ DIR ]
drwxr-sr-x
2017-06-22 15:40
google
[ DIR ]
drwxr-sr-x
2017-06-22 15:40
grade
[ DIR ]
drwxr-sr-x
2017-06-22 15:42
horde
[ DIR ]
drwxr-sr-x
2017-06-22 15:44
html2text
[ DIR ]
drwxr-sr-x
2017-06-22 15:44
htmlpurifier
[ DIR ]
drwxr-sr-x
2017-06-22 15:45
jabber
[ DIR ]
drwxr-sr-x
2017-06-22 15:45
jquery
[ DIR ]
drwxr-sr-x
2017-06-22 15:45
lessphp
[ DIR ]
drwxr-sr-x
2017-06-22 15:46
ltiprovider
[ DIR ]
drwxr-sr-x
2017-06-22 15:46
markdown
[ DIR ]
drwxr-sr-x
2017-06-22 15:46
maxmind
[ DIR ]
drwxr-sr-x
2017-06-22 15:46
minify
[ DIR ]
drwxr-sr-x
2017-06-22 15:46
mustache
[ DIR ]
drwxr-sr-x
2017-06-22 15:47
password_compat
[ DIR ]
drwxr-sr-x
2017-06-22 15:30
pear
[ DIR ]
drwxr-sr-x
2017-06-22 15:47
php-css-parser
[ DIR ]
drwxr-sr-x
2017-06-22 15:47
phpexcel
[ DIR ]
drwxr-sr-x
2017-06-22 15:49
phpmailer
[ DIR ]
drwxr-sr-x
2017-06-22 15:49
phpunit
[ DIR ]
drwxr-sr-x
2017-06-22 15:49
portfolio
[ DIR ]
drwxr-sr-x
2017-06-22 15:49
requirejs
[ DIR ]
drwxr-sr-x
2017-06-22 15:49
rtlcss
[ DIR ]
drwxr-sr-x
2017-06-22 15:49
scssphp
[ DIR ]
drwxr-sr-x
2017-06-22 15:49
simplepie
[ DIR ]
drwxr-sr-x
2017-06-22 15:49
spout
[ DIR ]
drwxr-sr-x
2017-06-22 15:49
tcpdf
[ DIR ]
drwxr-sr-x
2017-06-22 15:51
templates
[ DIR ]
drwxr-sr-x
2017-06-22 15:51
testing
[ DIR ]
drwxr-sr-x
2017-06-22 15:51
tests
[ DIR ]
drwxr-sr-x
2017-06-22 15:52
typo3
[ DIR ]
drwxr-sr-x
2017-06-22 15:52
xhprof
[ DIR ]
drwxr-sr-x
2017-06-22 15:53
xmldb
[ DIR ]
drwxr-sr-x
2017-06-22 15:53
yui
[ DIR ]
drwxr-sr-x
2017-06-22 15:53
yuilib
[ DIR ]
drwxr-sr-x
2017-06-22 16:01
accesslib.php
257.12
KB
-rw-r--r--
2017-06-22 15:30
adminlib.php
345.63
KB
-rw-r--r--
2017-06-22 15:30
authlib.php
26.75
KB
-rw-r--r--
2017-06-22 15:32
badgeslib.php
42.95
KB
-rw-r--r--
2017-06-22 15:32
blocklib.php
97.26
KB
-rw-r--r--
2017-06-22 15:32
boxlib.php
8.08
KB
-rw-r--r--
2017-06-22 15:32
cacert.pem
239.21
KB
-rw-r--r--
2017-06-22 15:32
cacert.txt
811
B
-rw-r--r--
2017-06-22 15:32
clilib.php
6.62
KB
-rw-r--r--
2017-06-22 15:34
completionlib.php
46.36
KB
-rw-r--r--
2017-06-22 15:34
componentlib.class.php
29.2
KB
-rw-r--r--
2017-06-22 15:34
conditionlib.php
1.11
KB
-rw-r--r--
2017-06-22 15:34
configonlylib.php
6.48
KB
-rw-r--r--
2017-06-22 15:34
cookies.js
2.37
KB
-rw-r--r--
2017-06-22 15:34
coursecatlib.php
124.32
KB
-rw-r--r--
2017-06-22 15:34
cronlib.php
11.08
KB
-rw-r--r--
2017-06-22 15:34
csslib.php
14.42
KB
-rw-r--r--
2017-06-22 15:34
csvlib.class.php
17.25
KB
-rw-r--r--
2017-06-22 15:34
customcheckslib.php
1.5
KB
-rw-r--r--
2017-06-22 15:34
dataformatlib.php
2.48
KB
-rw-r--r--
2017-06-22 15:34
datalib.php
65.83
KB
-rw-r--r--
2017-06-22 15:34
ddllib.php
4.71
KB
-rw-r--r--
2017-06-22 15:34
default.ttf
502.23
KB
-rw-r--r--
2017-06-22 15:34
deprecatedlib.php
227.36
KB
-rw-r--r--
2017-06-22 15:34
dmllib.php
12.29
KB
-rw-r--r--
2017-06-22 15:35
dtllib.php
2.58
KB
-rw-r--r--
2017-06-22 15:35
editorlib.php
6.43
KB
-rw-r--r--
2017-06-22 15:40
emptyfile.php
809
B
-rw-r--r--
2017-06-22 15:40
enrollib.php
100.43
KB
-rw-r--r--
2017-06-22 15:40
environmentlib.php
54.94
KB
-rw-r--r--
2017-06-22 15:40
eventslib.php
4.58
KB
-rw-r--r--
2017-06-22 15:40
excellib.class.php
29.16
KB
-rw-r--r--
2017-06-22 15:40
externallib.php
52.09
KB
-rw-r--r--
2017-06-22 15:40
filelib.php
177.78
KB
-rw-r--r--
2017-06-22 15:40
filterlib.php
56.44
KB
-rw-r--r--
2017-06-22 15:40
flickrlib.php
51.75
KB
-rw-r--r--
2017-06-22 15:40
formslib.php
127.64
KB
-rw-r--r--
2017-06-22 15:40
gdlib.php
16.96
KB
-rw-r--r--
2017-06-22 15:40
googleapi.php
16.34
KB
-rw-r--r--
2017-06-22 15:41
gradelib.php
60.36
KB
-rw-r--r--
2017-06-22 15:42
graphlib.php
83.1
KB
-rw-r--r--
2017-06-22 15:42
grouplib.php
38.34
KB
-rw-r--r--
2017-06-22 15:42
htaccess
1.84
KB
-rw-r--r--
2017-06-22 15:44
index.html
1
B
-rw-r--r--
2017-06-22 15:45
installlib.php
18
KB
-rw-r--r--
2017-06-22 15:45
javascript-static.js
56.77
KB
-rw-r--r--
2017-06-22 15:45
javascript.php
4.09
KB
-rw-r--r--
2017-06-22 15:45
jslib.php
4.15
KB
-rw-r--r--
2017-06-22 15:46
ldaplib.php
18.07
KB
-rw-r--r--
2017-06-22 15:46
lexer.php
16.07
KB
-rw-r--r--
2017-06-22 15:46
licenselib.php
7.25
KB
-rw-r--r--
2017-06-22 15:46
listlib.php
22.2
KB
-rw-r--r--
2017-06-22 15:46
mathslib.php
4.58
KB
-rw-r--r--
2017-06-22 15:46
medialib.php
5.4
KB
-rw-r--r--
2017-06-22 15:46
messagelib.php
25.68
KB
-rw-r--r--
2017-06-22 15:46
modinfolib.php
103.04
KB
-rw-r--r--
2017-06-22 15:46
moodlelib.php
345.25
KB
-rw-r--r--
2017-06-22 15:47
myprofilelib.php
20.9
KB
-rw-r--r--
2017-06-22 15:47
navigationlib.php
236.48
KB
-rw-r--r--
2017-06-22 15:47
oauthlib.php
21.11
KB
-rw-r--r--
2017-06-22 15:47
odslib.class.php
57.36
KB
-rw-r--r--
2017-06-22 15:47
outputactions.php
7.11
KB
-rw-r--r--
2017-06-22 15:47
outputcomponents.php
149.65
KB
-rw-r--r--
2017-06-22 15:47
outputfactories.php
18.11
KB
-rw-r--r--
2017-06-22 15:47
outputfragmentrequirementslib.php
4.17
KB
-rw-r--r--
2017-06-22 15:47
outputlib.php
85.67
KB
-rw-r--r--
2017-06-22 15:47
outputrenderers.php
194.47
KB
-rw-r--r--
2017-06-22 15:47
outputrequirementslib.php
82.56
KB
-rw-r--r--
2017-06-22 15:47
pagelib.php
77.05
KB
-rw-r--r--
2017-06-22 15:47
pdflib.php
9.23
KB
-rw-r--r--
2017-06-22 15:47
plagiarismlib.php
6.9
KB
-rw-r--r--
2017-06-22 15:49
portfoliolib.php
54.31
KB
-rw-r--r--
2017-06-22 15:49
questionlib.php
69.63
KB
-rw-r--r--
2017-06-22 15:49
recaptchalib.php
12.38
KB
-rw-r--r--
2017-06-22 15:49
requirejs.php
5.25
KB
-rw-r--r--
2017-06-22 15:49
resourcelib.php
8.91
KB
-rw-r--r--
2017-06-22 15:49
rsslib.php
17.93
KB
-rw-r--r--
2017-06-22 15:49
searchlib.php
16.23
KB
-rw-r--r--
2017-06-22 15:49
sessionkeepalive_ajax.php
1.21
KB
-rw-r--r--
2017-06-22 15:49
sessionlib.php
6.85
KB
-rw-r--r--
2017-06-22 15:49
setup.php
38.93
KB
-rw-r--r--
2017-06-22 15:49
setuplib.php
72.26
KB
-rw-r--r--
2017-06-22 15:49
soaplib.php
5.23
KB
-rw-r--r--
2017-06-22 15:49
statslib.php
67.12
KB
-rw-r--r--
2017-06-22 15:50
tablelib.php
60.3
KB
-rw-r--r--
2017-06-22 15:50
thirdpartylibs.xml
7.62
KB
-rw-r--r--
2017-06-22 15:52
tokeniserlib.php
16.48
KB
-rw-r--r--
2017-06-22 15:52
upgrade.txt
61.47
KB
-rw-r--r--
2017-06-22 15:52
upgradelib.php
90.37
KB
-rw-r--r--
2017-06-22 15:52
uploadlib.php
1.9
KB
-rw-r--r--
2017-06-22 15:52
validateurlsyntax.php
22.73
KB
-rw-r--r--
2017-06-22 15:52
webdavlib.php
67.84
KB
-rw-r--r--
2017-06-22 15:52
weblib.php
118.7
KB
-rw-r--r--
2017-06-22 15:52
wiki_to_markdown.php
13.12
KB
-rw-r--r--
2017-06-22 15:52
womenslib.php
1021
B
-rw-r--r--
2017-06-22 15:52
wordlist.txt
1.23
KB
-rw-r--r--
2017-06-22 15:52
xhtml.xsl
223
B
-rw-r--r--
2017-06-22 15:53
xmlize.php
6.63
KB
-rw-r--r--
2017-06-22 15:53
xsendfilelib.php
2.59
KB
-rw-r--r--
2017-06-22 15:53
Save
Rename
<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * This file contains CSS file serving functions. * * NOTE: these functions are not expected to be used from any addons. * * @package core * @copyright 2012 Sam Hemelryk * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); if (!defined('THEME_DESIGNER_CACHE_LIFETIME')) { // This can be also set in config.php file, // it needs to be higher than the time it takes to generate all CSS content. define('THEME_DESIGNER_CACHE_LIFETIME', 10); } /** * Stores CSS in a file at the given path. * * This function either succeeds or throws an exception. * * @param theme_config $theme The theme that the CSS belongs to. * @param string $csspath The path to store the CSS at. * @param string $csscontent the complete CSS in one string * @param bool $chunk If set to true these files will be chunked to ensure * that no one file contains more than 4095 selectors. * @param string $chunkurl If the CSS is be chunked then we need to know the URL * to use for the chunked files. */ function css_store_css(theme_config $theme, $csspath, $csscontent, $chunk = false, $chunkurl = null) { global $CFG; clearstatcache(); if (!file_exists(dirname($csspath))) { @mkdir(dirname($csspath), $CFG->directorypermissions, true); } // Prevent serving of incomplete file from concurrent request, // the rename() should be more atomic than fwrite(). ignore_user_abort(true); // First up write out the single file for all those using decent browsers. css_write_file($csspath, $csscontent); if ($chunk) { // If we need to chunk the CSS for browsers that are sub-par. $css = css_chunk_by_selector_count($csscontent, $chunkurl); $files = count($css); $count = 1; foreach ($css as $content) { if ($count === $files) { // If there is more than one file and this IS the last file. $filename = preg_replace('#\.css$#', '.0.css', $csspath); } else { // If there is more than one file and this is not the last file. $filename = preg_replace('#\.css$#', '.'.$count.'.css', $csspath); } $count++; css_write_file($filename, $content); } } ignore_user_abort(false); if (connection_aborted()) { die; } } /** * Writes a CSS file. * * @param string $filename * @param string $content */ function css_write_file($filename, $content) { global $CFG; if ($fp = fopen($filename.'.tmp', 'xb')) { fwrite($fp, $content); fclose($fp); rename($filename.'.tmp', $filename); @chmod($filename, $CFG->filepermissions); @unlink($filename.'.tmp'); // Just in case anything fails. } } /** * Takes CSS and chunks it if the number of selectors within it exceeds $maxselectors. * * The chunking will not split a group of selectors, or a media query. That means that * if n > $maxselectors and there are n selectors grouped together, * they will not be chunked and you could end up with more selectors than desired. * The same applies for a media query that has more than n selectors. * * Also, as we do not split group of selectors or media queries, the chunking might * not be as optimal as it could be, having files with less selectors than it could * potentially contain. * * String functions used here are not compliant with unicode characters. But that is * not an issue as the syntax of CSS is using ASCII codes. Even if we have unicode * characters in comments, or in the property 'content: ""', it will behave correcly. * * Please note that this strips out the comments if chunking happens. * * @param string $css The CSS to chunk. * @param string $importurl The URL to use for import statements. * @param int $maxselectors The number of selectors to limit a chunk to. * @param int $buffer Not used any more. * @return array An array of CSS chunks. */ function css_chunk_by_selector_count($css, $importurl, $maxselectors = 4095, $buffer = 50) { // Check if we need to chunk this CSS file. $count = substr_count($css, ',') + substr_count($css, '{'); if ($count < $maxselectors) { // The number of selectors is less then the max - we're fine. return array($css); } $chunks = array(); // The final chunks. $offsets = array(); // The indexes to chunk at. $offset = 0; // The current offset. $selectorcount = 0; // The number of selectors since the last split. $lastvalidoffset = 0; // The last valid index to split at. $lastvalidoffsetselectorcount = 0; // The number of selectors used at the time were could split. $inrule = 0; // The number of rules we are in, should not be greater than 1. $inmedia = false; // Whether or not we are in a media query. $mediacoming = false; // Whether or not we are expeting a media query. $currentoffseterror = null; // Not null when we have recorded an error for the current split. $offseterrors = array(); // The offsets where we found errors. // Remove the comments. Because it's easier, safer and probably a lot of other good reasons. $css = preg_replace('#/\*(.*?)\*/#s', '', $css); $strlen = strlen($css); // Walk through the CSS content character by character. for ($i = 1; $i <= $strlen; $i++) { $char = $css[$i - 1]; $offset = $i; // Is that a media query that I see coming towards us? if ($char === '@') { if (!$inmedia && substr($css, $offset, 5) === 'media') { $mediacoming = true; } } // So we are entering a rule or a media query... if ($char === '{') { if ($mediacoming) { $inmedia = true; $mediacoming = false; } else { $inrule++; $selectorcount++; } } // Let's count the number of selectors, but only if we are not in a rule, or in // the definition of a media query, as they can contain commas too. if (!$mediacoming && !$inrule && $char === ',') { $selectorcount++; } // We reached the end of something. if ($char === '}') { // Oh, we are in a media query. if ($inmedia) { if (!$inrule) { // This is the end of the media query. $inmedia = false; } else { // We were in a rule, in the media query. $inrule--; } } else { $inrule--; // Handle stupid broken CSS where there are too many } brackets, // as this can cause it to break (with chunking) where it would // coincidentally have worked otherwise. if ($inrule < 0) { $inrule = 0; } } // We are not in a media query, and there is no pending rule, it is safe to split here. if (!$inmedia && !$inrule) { $lastvalidoffset = $offset; $lastvalidoffsetselectorcount = $selectorcount; } } // Alright, this is splitting time... if ($selectorcount > $maxselectors) { if (!$lastvalidoffset) { // We must have reached more selectors into one set than we were allowed. That means that either // the chunk size value is too small, or that we have a gigantic group of selectors, or that a media // query contains more selectors than the chunk size. We have to ignore this because we do not // support split inside a group of selectors or media query. if ($currentoffseterror === null) { $currentoffseterror = $offset; $offseterrors[] = $currentoffseterror; } } else { // We identify the offset to split at and reset the number of selectors found from there. $offsets[] = $lastvalidoffset; $selectorcount = $selectorcount - $lastvalidoffsetselectorcount; $lastvalidoffset = 0; $currentoffseterror = null; } } } // Report offset errors. if (!empty($offseterrors)) { debugging('Could not find a safe place to split at offset(s): ' . implode(', ', $offseterrors) . '. Those were ignored.', DEBUG_DEVELOPER); } // Now that we have got the offets, we can chunk the CSS. $offsetcount = count($offsets); foreach ($offsets as $key => $index) { $start = 0; if ($key > 0) { $start = $offsets[$key - 1]; } // From somewhere up to the offset. $chunks[] = substr($css, $start, $index - $start); } // Add the last chunk (if there is one), from the last offset to the end of the string. if (end($offsets) != $strlen) { $chunks[] = substr($css, end($offsets)); } // The array $chunks now contains CSS split into perfect sized chunks. // Import statements can only appear at the very top of a CSS file. // Imported sheets are applied in the the order they are imported and // are followed by the contents of the CSS. // This is terrible for performance. // It means we must put the import statements at the top of the last chunk // to ensure that things are always applied in the correct order. // This way the chunked files are included in the order they were chunked // followed by the contents of the final chunk in the actual sheet. $importcss = ''; $slashargs = strpos($importurl, '.php?') === false; $parts = count($chunks); for ($i = 1; $i < $parts; $i++) { if ($slashargs) { $importcss .= "@import url({$importurl}/chunk{$i});\n"; } else { $importcss .= "@import url({$importurl}&chunk={$i});\n"; } } $importcss .= end($chunks); $chunks[key($chunks)] = $importcss; return $chunks; } /** * Sends a cached CSS file * * This function sends the cached CSS file. Remember it is generated on the first * request, then optimised/minified, and finally cached for serving. * * @param string $csspath The path to the CSS file we want to serve. * @param string $etag The revision to make sure we utilise any caches. */ function css_send_cached_css($csspath, $etag) { // 60 days only - the revision may get incremented quite often. $lifetime = 60*60*24*60; header('Etag: "'.$etag.'"'); header('Content-Disposition: inline; filename="styles.php"'); header('Last-Modified: '. gmdate('D, d M Y H:i:s', filemtime($csspath)) .' GMT'); header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT'); header('Pragma: '); header('Cache-Control: public, max-age='.$lifetime); header('Accept-Ranges: none'); header('Content-Type: text/css; charset=utf-8'); if (!min_enable_zlib_compression()) { header('Content-Length: '.filesize($csspath)); } readfile($csspath); die; } /** * Sends a cached CSS content * * @param string $csscontent The actual CSS markup. * @param string $etag The revision to make sure we utilise any caches. */ function css_send_cached_css_content($csscontent, $etag) { // 60 days only - the revision may get incremented quite often. $lifetime = 60*60*24*60; header('Etag: "'.$etag.'"'); header('Content-Disposition: inline; filename="styles.php"'); header('Last-Modified: '. gmdate('D, d M Y H:i:s', time()) .' GMT'); header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT'); header('Pragma: '); header('Cache-Control: public, max-age='.$lifetime); header('Accept-Ranges: none'); header('Content-Type: text/css; charset=utf-8'); if (!min_enable_zlib_compression()) { header('Content-Length: '.strlen($csscontent)); } echo($csscontent); die; } /** * Sends CSS directly without caching it. * * This function takes a raw CSS string, optimises it if required, and then * serves it. * Turning both themedesignermode and CSS optimiser on at the same time is awful * for performance because of the optimiser running here. However it was done so * that theme designers could utilise the optimised output during development to * help them optimise their CSS... not that they should write lazy CSS. * * @param string $css */ function css_send_uncached_css($css) { header('Content-Disposition: inline; filename="styles_debug.php"'); header('Last-Modified: '. gmdate('D, d M Y H:i:s', time()) .' GMT'); header('Expires: '. gmdate('D, d M Y H:i:s', time() + THEME_DESIGNER_CACHE_LIFETIME) .' GMT'); header('Pragma: '); header('Accept-Ranges: none'); header('Content-Type: text/css; charset=utf-8'); if (is_array($css)) { $css = implode("\n\n", $css); } echo $css; die; } /** * Send file not modified headers * * @param int $lastmodified * @param string $etag */ function css_send_unmodified($lastmodified, $etag) { // 60 days only - the revision may get incremented quite often. $lifetime = 60*60*24*60; header('HTTP/1.1 304 Not Modified'); header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT'); header('Cache-Control: public, max-age='.$lifetime); header('Content-Type: text/css; charset=utf-8'); header('Etag: "'.$etag.'"'); if ($lastmodified) { header('Last-Modified: '. gmdate('D, d M Y H:i:s', $lastmodified) .' GMT'); } die; } /** * Sends a 404 message about CSS not being found. */ function css_send_css_not_found() { header('HTTP/1.0 404 not found'); die('CSS was not found, sorry.'); }