The newest version of File Thingie can be found at Comments, suggestions etc. are welcome and encouraged at the above e-mail. LICENSE INFORMATION FOR FILE THINGIE: This work is licensed under the Creative Commons Attribution-NoDerivs-NonCommercial. To view a copy of this license, visit If you want to use File Thingie in a commercial setting please contact me at The cost for a commercial license of File Thingie is $20 (discounts available for bulk purchases). File Thingie is Copyright (c) 2003-2007 Andreas Haugstrup Pedersen. ==== The jQuery javascript library have been included in File Thingie. The bundled version is 1.0.4. jQuery is covered by the following license: Copyright (c) 2006 John Resig, http://jquery.com/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* TODO for 2.1.0: * Maybe: Zip files and/or folders. * Fix file names with æ, ø, å. CHANGELOG: * Added support for https * Added total dir size in footer * Timezone setting for PHP 5.10 and above * Save and Save&Exit buttons added. * Added extra option for IIS users. * Added option to CHMOD files. */ # Settings - Change as appropriate. See online documentation for explanations. # define("USERNAME", "pippy"); // Your default username. define("PASSWORD", "longstockings"); // Your default password. define("DIR", "."); // Your default directory. Do NOT include a trailing slash! define("AUTOUPDATES", "0"); // Number of days between checking for updates. Set to '0' to turn off (automatic updates are turned off by default). define("MAXSIZE", 2000000); // Maximum file upload size - in bytes. define("PERMISSION", 0644); // Permission for uploaded files. define("DISABLELOGIN", FALSE); // Set to TRUE if you want to disable password protection. define("FILEBLACKLIST", "ft2.php filethingie.php index.php"); // Specific files that will not be shown. define("FILETYPEBLACKLIST", "php phtml php3 php4 php5"); // File types that are not allowed for upload. define("FILETYPEWHITELIST", ""); // Add file types here to *only* allow those types to be uploaded. define("EDITLIST", "txt html css"); // List of file types that can be edited. define("DISABLEUPLOAD", FALSE); // Set to TRUE if you want to disable file uploads. define("DISABLEFILEACTIONS", FALSE); // Set to TRUE if you want to disable file actions (rename, move, delete, edit, duplicate). define("CONVERTTABS", FALSE); // Set to TRUE to convert tabs to spaces when editing a file. # Colours # define("COLOURONE", "#326532"); // Dark background colour - also used on menu links. define("COLOURONETEXT", "#fff"); // Text for the dark background. define("COLOURTWO", "#DAE3DA"); // Brighter color (for table rows and sidebar background). define("COLOURTEXT", "#000"); // Regular text colour. define("COLOURHIGHLIGHT", "#ffc"); // Hightlight colour for status messages. # Additional users # /* $users['REPLACE_WITH_USERNAME']['password'] = "REPLACE_WITH_PASSWORD"; $users['REPLACE_WITH_USERNAME']['dir'] = "REPLACE_WITH_CUSTOM_DIRECTORY"; */ # Version # define("VERSION", "2.0.6"); // Current version of File Thingie. # Installation path. You only need to set this if $_SERVER['REQUEST_URI'] is not being set by your server. define("REQUEST_URI", FALSE); # Various helper functions # function checkLogin() { // Checks whether a login is valid or not. global $users; if (DISABLELOGIN == FALSE) { if (empty($_SESSION['ft_user'])) { // Session variable has not been set. Check if login form has been submitted or return false. if (!empty($_POST['act']) && $_POST['act'] == "dologin") { // Check username and password from login form. if ($_POST['ft_user'] == USERNAME && $_POST['ft_pass'] == PASSWORD) { // Valid login. Set session variables and return true. $_SESSION['ft_user'] = USERNAME; redirect(); } // Default user was not valid, we check additional users (if any). if (is_array($users) && sizeof($users) > 0) { // Check username and password. if (array_key_exists($_POST['ft_user'], $users) && $users[$_POST['ft_user']]['password'] == $_POST['ft_pass']) { // Valid login. $_SESSION['ft_user'] = $_POST['ft_user']; redirect(); } } redirect("act=error"); } return FALSE; } else { return TRUE; } } else { return TRUE; } } function fetchURL( $url ) { $url_parsed = parse_url($url); $host = $url_parsed["host"]; $port = $url_parsed["port"]; if ($port==0) { $port = 80; } $path = $url_parsed["path"]; if ($url_parsed["query"] != "") { $path .= "?".$url_parsed["query"]; } $out = "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n"; $fp = fsockopen($host, $port, $errno, $errstr, 30); fwrite($fp, $out); $body = false; while (!feof($fp)) { $s = fgets($fp, 1024); if ( $body ) { $in .= $s; } if ( $s == "\r\n" ) { $body = true; } } fclose($fp); return $in; } function versioncheck() { // Get newest version. if ($c = fetchURL("http://www.solitude.dk/filethingie/versioninfo2.php?act=check&from=".urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))) { $c = explode('||', $c); $version = trim($c[0]); $log = trim($c[1]); // Compare versions. if (version_compare($version, VERSION) == 1) { // New version available. return '

A new version of File Thingie ('.$version.') is available.

'.$log.'

Download File Thingie '.$version.' directly

'; } else { // Running newest version. return '

No updates available.

  • Your version: '.VERSION.'
  • Newest version: '.$version.'
'; } return "

Newest version is: {$version}

"; } else { return "

Could not connect (possible error: URL wrappers not enabled).

"; } } function redirect($query = '') { // Redirects to that location. if (REQUEST_URI) { $_SERVER['REQUEST_URI'] = REQUEST_URI; } $protocol = 'http://'; if (!empty($_SERVER['HTTPS'])) { $protocol = 'https://'; } if (stristr($_SERVER["REQUEST_URI"], "?")) { $requesturi = substr($_SERVER["REQUEST_URI"], 0, strpos($_SERVER["REQUEST_URI"], "?")); $location = "Location: {$protocol}{$_SERVER["HTTP_HOST"]}{$requesturi}"; } else { $requesturi = $_SERVER["REQUEST_URI"]; $location = "Location: {$protocol}{$_SERVER["HTTP_HOST"]}{$requesturi}"; } if (!empty($query)) { $location .= "?{$query}"; } header($location); exit; } function sanitizeREQUEST() { // Goes through REQUEST variables used by file Thingie and removes attempts to hijack. // Make sure 'dir' cannot be changed to open directories outside the stated FT directory. if (!empty($_REQUEST['dir']) && strstr($_REQUEST['dir'], "..") || empty($_REQUEST['dir'])) { unset ($_REQUEST['dir']); } // Set 'dir' to empty if it isn't set. if (empty($_REQUEST['dir'])) { $_REQUEST['dir'] = ""; } // Nuke slashes from 'file' and 'newvalue' if (!empty($_REQUEST['file'])) { $_REQUEST['file'] = str_replace("/", "", $_REQUEST['file']); } if (!empty($_REQUEST['act']) && $_REQUEST['act'] != "move") { if (!empty($_REQUEST['newvalue'])) { $_REQUEST['newvalue'] = str_replace("/", "", $_REQUEST['newvalue']); // Nuke ../ for 'newvalue' when not moving files. if (stristr($_REQUEST['newvalue'], "..") || empty($_REQUEST['newvalue'])) { unset ($_REQUEST['newvalue']); } } } // Nuke ../ for 'file' if (!empty($_REQUEST['file']) && stristr($_REQUEST['file'], "..") || empty($_REQUEST['file'])) { unset ($_REQUEST['file']); } // Set 'q' (search queries) to empty if it isn't set. if (empty($_REQUEST['q'])) { $_REQUEST['q'] = ""; } } function getExt ($name) { // Returns the file ending without the "." if (strstr($name, ".")) { $ext = str_replace(".", "", strrchr($name, ".")); } else { $ext = ""; } return $ext; } function stripslashes_smart($string) { // Strips slashes if magic quotes are on. if (get_magic_quotes_gpc()) { return stripslashes($string); } else { return $string; } } function niceFileSize($size) { // Converts a file size to a nicer kilobytes value if (strlen($size) > 6) { // Convert to megabyte return round($size/(1024*1024), 2)." MB"; } elseif (strlen($size) > 4 || $size > 1024) { // Convert to kilobyte return round($size/1024, 0)." Kb"; } else { return $size." b"; } } function getMaxUploadSize() { // Looks at ini settings and MAXSIZE to determine max upload size $post_max = return_bytes(ini_get('post_max_size')); $upload = return_bytes(ini_get('upload_max_filesize')); // Compare ini settings. if ($post_max > $upload) { $max = $post_max; } else { $max = $upload; } // Compare with MAXSIZE. if ($max > MAXSIZE) { $max = MAXSIZE; } return niceFileSize($max); } function return_bytes($val) { // Takes PHP ini shorthand notation for file size and converts to byte size $val = trim($val); $last = strtolower($val{strlen($val)-1}); switch($last) { // The 'G' modifier is available since PHP 5.1.0 case 'g': $val *= 1024; case 'm': $val *= 1024; case 'k': $val *= 1024; } return $val; } function getSelf() { // Returns the location of File Thingie. Used in form actions. return basename($_SERVER['PHP_SELF']); } function checkfile($file) { // Check against file blacklist. if (FILEBLACKLIST != "") { $blacklist = explode(" ", FILEBLACKLIST); if (in_array(strtolower($file), $blacklist)) { return FALSE; } else { return TRUE; } } else { return TRUE; } } function checkforedit($file) { // Check against file blacklist. if (EDITLIST != "") { $list = explode(" ", EDITLIST); if (in_array(getExt(strtolower($file)), $list)) { return TRUE; } else { return FALSE; } } else { return FALSE; } } function checkfiletype($file) { $type = strtolower(getExt($file)); // Check if we are using a whitelist. if (FILETYPEWHITELIST != "") { // User wants a whitelist $whitelist = explode(" ", FILETYPEWHITELIST); if (in_array($type, $whitelist)) { return TRUE; } else { return FALSE; } } else { // Check against file blacklist. if (FILETYPEBLACKLIST != "") { $blacklist = explode(" ", FILETYPEBLACKLIST); if (in_array($type, $blacklist)) { return FALSE; } else { return TRUE; } } else { return TRUE; } } } function getRoot() { // Get the root directory. global $users; if ($_SESSION['ft_user'] == USERNAME) { // Default user. Apply default directory. return DIR; } else { // Use user dir. if (isset($users[$_SESSION['ft_user']]['dir'])) { return $users[$_SESSION['ft_user']]['dir']; } else { return DIR; } } } function getDir() { // Get the current working directory. if (empty($_REQUEST['dir'])) { return getRoot(); } else { return getRoot().$_REQUEST['dir']; } } function getFileList($dir) { // Returns an array of files in a directory. $filelist = array(); $subdirs = array(); if ($dirlink = @opendir($dir)) { // Creates an array with all file names in current directory. while (($file = readdir($dirlink)) !== false) { if ($file != "." && $file != ".." && checkfile($file) && (checkfiletype($file) || is_dir("{$dir}/{$file}"))) { // Hide these two special cases and files and filetypes in blacklists. $c = array(); $c['name'] = $file; $c['type'] = "file"; $c['writeable'] = is_writeable("{$dir}/{$file}"); if (checkforedit($file)) { $c['edit'] = TRUE; } // File permissions. if ($c['perms'] = fileperms("{$dir}/{$file}")) { $c['perms'] = substr(base_convert($c['perms'], 10, 8), 3); } // $c['modified'] = filemtime("{$dir}/{$file}"); $c['size'] = filesize("{$dir}/{$file}"); if (is_dir("{$dir}/{$file}")) { $c['size'] = 0; $c['type'] = "dir"; if ($sublink = @opendir("{$dir}/{$file}")) { while (($current = readdir($sublink)) !== false) { if ($current != "." && $current != ".." && checkfile($current)) { $c['size']++; } } closedir($sublink); } $subdirs[] = $c; } else { $filelist[] = $c; } } } closedir($dirlink); sort($filelist); sort($subdirs); return array_merge($subdirs, $filelist); } else { return "dirfail"; } } function find_files($dir, $q){ // Searches for file names and directories recursively. $output = array(); if ($dirlink = @opendir($dir)) { while(($file = readdir($dirlink)) !== false){ if($file != "." && $file != ".." && checkfile($file) && checkfiletype($file)){ $path = $dir.'/'.$file; // Check if filename/directory name is a match. if(stristr($file, $q)) { $new['name'] = $file; $new['dir'] = substr($dir, strlen(getRoot())); if (is_dir($path)) { $new['type'] = "dir"; } else { $new['type'] = "file"; } $output[] = $new; } // Check subdirs for matches. if(is_dir($path)) { $dirres = find_files($path, $q); if (is_array($dirres) && count($dirres) > 0) { $output = array_merge($dirres, $output); unset($dirres); } } } } sort($output); closedir($dirlink); return $output; } else { return false; } } function doSearch($q, $type) { $new = array(); $ret = ""; if (!empty($q)) { if ($type == "true") { $list = find_files(getDir(), $q); } else { $list = find_files(getRoot(), $q); } if (is_array($list)){ if (count($list) > 0) { foreach ($list as $c) { if (empty($c['dir'])) { $c['dirlink'] = "/"; } else { $c['dirlink'] = $c['dir']; } if ($c['type'] == "file") { $ret .= "
{$c['name']}
".makeLink($c['dirlink'], "dir=".rawurlencode($c['dir'])."&highlight=".rawurlencode($c['name'])."&q=".rawurlencode($q), "Highlight file in directory")."
"; } else { $ret .= "
".makeLink($c['name'], "dir=".rawurlencode("{$c['dir']}/{$c['name']}")."&q={$q}", "Show files in this directory")."
".makeLink($c['dirlink'], "dir=".rawurlencode($c['dir'])."&highlight=".rawurlencode($c['name'])."&q=".rawurlencode($q), "Highlight file in directory")."
"; } } return $ret; } else { return "
No files found.
"; } } else { return "
Error.
"; } } else { return "
Enter a search string.
"; } } function doAction() { // This function handles all actions (upload, rename, delete, mkdir, save after edit, duplicate file, create new file, logout) if (!empty($_REQUEST['act'])) { # mkdir if ($_REQUEST['act'] == "createdir" && DISABLEUPLOAD == FALSE) { if ($_POST['type'] == 'file') { // Check file against blacklists if (checkfiletype($_POST['newdir']) && checkfile($_POST['newdir'])) { // Create file. $newfile = getDir()."/{$_POST['newdir']}"; if (file_exists($newfile)) { // Redirect redirect("status=createdfileexists&dir=".rawurlencode($_REQUEST['dir'])); } elseif (@touch($newfile)) { // Redirect. redirect("status=createdfile&dir=".rawurlencode($_REQUEST['dir'])); } else { // Redirect redirect("status=createdfilefail&dir=".rawurlencode($_REQUEST['dir'])); } } else { // Redirect redirect("status=createdfilefail&dir=".rawurlencode($_REQUEST['dir'])); } } else { // Create directory. // Check input. if (strstr($_POST['newdir'], ".")) { // Throw error (redirect). redirect("status=createddirfail&dir=".rawurlencode($_REQUEST['dir'])); } else { $_POST['newdir'] = stripslashes_smart($_POST['newdir']); $newdir = getDir()."/{$_POST['newdir']}"; $oldumask = umask(0); if (@mkdir($newdir, 0777)) { // Redirect. redirect("status=createddir&dir=".rawurlencode($_REQUEST['dir'])); } else { // Redirect redirect("status=createddirfail&dir=".rawurlencode($_REQUEST['dir'])); } umask($oldumask); } } # Save edited file } elseif ($_REQUEST['act'] == "savefile" && DISABLEFILEACTIONS == FALSE) { // Save a file that has been edited. $file = trim(stripslashes_smart($_REQUEST["file"])); // Check for edit or cancel if (strtolower($_REQUEST["submit"]) != "cancel") { // Check if file type can be edited. if (checkforedit($file)) { $filecontent = stripslashes_smart($_REQUEST["filecontent"]); if ($_REQUEST["convertspaces"] != "") { $filecontent = str_replace(" ", "\t", $filecontent); } if (is_writeable(getDir()."/{$file}")) { $fp = @fopen(getDir()."/{$file}", "wb"); if ($fp) { fputs ($fp, $filecontent); fclose($fp); redirect("dir={$_REQUEST['dir']}&status=edit&old=".rawurlencode($file)); } else { redirect("dir={$_REQUEST['dir']}&status=editfilefail&old=".rawurlencode($file)); } } else { redirect("dir={$_REQUEST['dir']}&status=editfilefail&old=".rawurlencode($file)); } } else { redirect("dir={$_REQUEST['dir']}&status=edittypefail&old=".rawurlencode($file)); } } else { redirect("dir=".rawurlencode($_REQUEST['dir'])); } # Move } elseif ($_REQUEST['act'] == "move" && DISABLEFILEACTIONS == FALSE) { // Check that both file and newvalue are set. $file = trim(stripslashes_smart($_REQUEST['file'])); $dir = trim(stripslashes_smart($_REQUEST['newvalue'])); if (substr($dir, -1, 1) != "/") { $dir .= "/"; } // Check for level. if (substr_count($dir, "../") <= substr_count(getDir(), "/")) { $dir = getDir()."/".$dir; if (!empty($file) && file_exists(getDir()."/".$file)) { // Check that destination exists and is a directory. if (is_dir($dir)) { // Move file. if (@rename(getDir()."/".$file, $dir."/".$file)) { // Success. redirect("dir={$_REQUEST['dir']}&status=move&old=".rawurlencode($file)."&new=".rawurlencode($dir)); } else { // Error rename failed. redirect("dir={$_REQUEST['dir']}&status=movefail&old=".rawurlencode($file)); } } else { // Error dest. isn't a dir or doesn't exist. redirect("dir={$_REQUEST['dir']}&status=movedestfail&old=".rawurlencode($dir)); } } else { // Error source file doesn't exist. redirect("dir={$_REQUEST['dir']}&status=movesourcefail&old=".rawurlencode($file)); } } else { // Error level redirect("dir={$_REQUEST['dir']}&status=movelevelfail&old=".rawurlencode($file)); } # Delete } elseif ($_REQUEST['act'] == "delete" && DISABLEFILEACTIONS == FALSE) { // Check that file is set. $file = stripslashes_smart($_REQUEST['file']); if (!empty($file) && checkfile($file)) { if (is_dir(getDir()."/".$file)) { if (!@rmdir(getDir()."/".$file)) { redirect("dir={$_REQUEST['dir']}&status=rmdirfail&old=".rawurlencode($file)); } else { redirect("dir={$_REQUEST['dir']}&status=rmdir&old=".rawurlencode($file)); } } else { if (!@unlink(getDir()."/".$file)) { redirect("dir={$_REQUEST['dir']}&status=rmfail&old=".rawurlencode($file)); } else { redirect("dir={$_REQUEST['dir']}&status=rm&old=".rawurlencode($file)); } } } else { redirect("dir={$_REQUEST['dir']}&status=rmfail&old=".rawurlencode($file)); } # Rename && Duplicate } elseif ($_REQUEST['act'] == "rename" || $_REQUEST['act'] == "duplicate" && DISABLEFILEACTIONS == FALSE) { // Check that both file and newvalue are set. $old = trim(stripslashes_smart($_REQUEST['file'])); $new = trim(stripslashes_smart($_REQUEST['newvalue'])); if (!empty($old) && !empty($new)) { if (checkfiletype($new) && checkfile($new)) { // Make sure destination file doesn't exist. if (!file_exists(getDir()."/".$new)) { // Check that file exists. if (is_writeable(getDir()."/".$old)) { if ($_REQUEST['act'] == "rename") { if (@rename(getDir()."/".$old, getDir()."/".$new)) { // Success. redirect("dir={$_REQUEST['dir']}&status=rename&old=".rawurlencode($old)."&new=".rawurlencode($new)); } else { // Error rename failed. redirect("dir={$_REQUEST['dir']}&status=renamefail&old=".rawurlencode($old)); } } else { if (@copy(getDir()."/".$old, getDir()."/".$new)) { // Success. redirect("dir={$_REQUEST['dir']}&status=duplicate&old=".rawurlencode($old)."&new=".rawurlencode($new)); } else { // Error rename failed. redirect("dir={$_REQUEST['dir']}&status=duplicate&old=".rawurlencode($old)); } } } else { // Error old file isn't writeable. redirect("dir={$_REQUEST['dir']}&status={$_REQUEST['act']}writefail&old=".rawurlencode($old)); } } else { // Error destination exists. redirect("dir={$_REQUEST['dir']}&status={$_REQUEST['act']}destfail&old=".rawurlencode($new)); } } else { // Error file type not allowed. redirect("dir={$_REQUEST['dir']}&status={$_REQUEST['act']}typefail&old=".rawurlencode($old)."&new=".rawurlencode($new)); } } else { // Error. File name not set. redirect("dir={$_REQUEST['dir']}&status={$_REQUEST['act']}emptyfail"); } # upload } elseif ($_REQUEST['act'] == "upload" && DISABLEUPLOAD == FALSE) { // If we are to upload a file we will do so. $oklist = array(); $errorlist = array(); $errortype = array(); foreach ($_FILES as $k => $c) { if (!empty($c['name'])) { $c['name'] = stripslashes_smart($c['name']); if ($c['error'] == 0) { // Upload was successfull if (checkfiletype($c['name']) && checkfile($c['name'])) { if (file_exists(getDir()."/{$c['name']}")) { $errorlist[$k] = $c['name']; $errortype[$k] = 6; } else { if (@move_uploaded_file($c['tmp_name'], getDir()."/{$c['name']}")) { @chmod(getDir()."/{$c['name']}", PERMISSION); // Success! $oklist[$k] = rawurlencode($c['name']); } else { // File couldn't be moved. Throw error. $errorlist[$k] = rawurlencode($c['name']); $errortype[$k] = 0; } } } else { // File type is not allowed. Throw error. $errorlist[$k] = rawurlencode($c['name']); $errortype[$k] = 1; } } else { // An error occurred. $errorlist[$k] = $c['name']; switch($_FILES["localfile"]["error"]) { case 1: $errortype[$k] = 2; break; case 2: $errortype[$k] = 7; break; case 3: $errortype[$k] = 3; break; case 4: $errortype[$k] = 4; break; default: $errortype[$k] = 5; break; } } } } if (count($oklist) > 0) { $oklist = "&oklist=".join(";", $oklist); } else { $oklist = ""; } if (count($errorlist) > 0) { $errorlist = "&errorlist=".join(";", $errorlist)."&errortype=".join(";", $errortype); } else { $errorlist = ""; } if (strlen($oklist) > 0 || strlen($errorlist) > 0) { redirect("dir=".rawurlencode($_REQUEST['dir'])."&status=upload{$oklist}{$errorlist}"); } else { redirect("dir=".rawurlencode($_REQUEST['dir'])."&status=uploadfail"); } # Unzip } elseif ($_REQUEST['act'] == "unzip" && DISABLEFILEACTIONS == FALSE) { // Check that file is set. $file = stripslashes_smart($_REQUEST['file']); if (!empty($file) && checkfile($file) && checkfiletype($file) && strtolower(getExt($file)) == 'zip' && is_file(getDir()."/".$file)) { $escapeddir = escapeshellarg(getDir()."/"); $escapedfile = escapeshellarg(getDir()."/".$file); if (!@exec("unzip -n ".$escapedfile." -d ".$escapeddir)) { redirect("dir={$_REQUEST['dir']}&status=unzipfail&old=".rawurlencode($file)); } else { redirect("dir={$_REQUEST['dir']}&status=unzip&old=".rawurlencode($file)); } } else { redirect("dir={$_REQUEST['dir']}&status=unzipfail&old=".rawurlencode($file)); } # chmod } elseif ($_REQUEST['act'] == "chmod" && DISABLEFILEACTIONS == FALSE) { // Check that file is set. $file = stripslashes_smart($_REQUEST['file']); if (!empty($file) && checkfile($file) && checkfiletype($file)) { // Check that chosen permission i valid if (is_numeric($_REQUEST['newvalue'])) { $chmod = $_REQUEST['newvalue']; if (substr($chmod, 0, 1) == '0') { $chmod = substr($chmod, 0, 4); } else { $chmod = '0'.substr($chmod, 0, 3); } // Chmod if (chmod(getDir()."/".$file, intval($chmod, 8))) { redirect("dir={$_REQUEST['dir']}&status=chmod&old=".rawurlencode($file)); clearstatcache(); } else { redirect("dir={$_REQUEST['dir']}&status=chmodfail&old=".rawurlencode($file)); } } else { redirect("dir={$_REQUEST['dir']}&status=chmodfail&old=".rawurlencode($file)); } } else { redirect("dir={$_REQUEST['dir']}&status=chmodfail&old=".rawurlencode($file)); } # logout } elseif ($_REQUEST['act'] == "logout") { $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } session_destroy(); redirect(); } } } # makeXX function all return HTML to be displayed in the browser. # function makeLink($text, $query = "", $title = "") { // Makes an HTML link - used for internal links $str = "'; if (!empty($_REQUEST['act']) && $_REQUEST['act'] == "error") { $str .= "

Invalid username or password

"; } $str .= '
'; return $str; } function makeHeader() { // The header showing which directory is being displayed and the navigation links. $str = "

".makeLink("Files in:", '', "Go to home folder")." "; if (empty($_REQUEST['dir'])) { $str .= "/

"; } else { // Get breadcrumbs. if (!empty($_REQUEST['dir'])) { $crumbs = explode("/", $_REQUEST['dir']); // Remove first empty element. unset($crumbs[0]); // Output breadcrumbs. $path = ""; foreach ($crumbs as $c) { $path .= "/{$c}"; $str .= "/"; $str .= makeLink($c, "dir=".rawurlencode($path), "Go to folder");; } } $str .= ""; } // Display logout link. $str .= '

'.makeLink("[logout]", "act=logout", "Logout of File Thingie").'

'; return $str; } function makeStatus($id = false, $old = false) { // Displays status messages. // Make sure we can get strings during ajax requests. if ($id) { $_REQUEST['status'] = $id; $_REQUEST['old'] = $old; } // Set 'old' and 'new' if they aren't. if (empty($_REQUEST['old'])) { $_REQUEST['old'] = ""; } if (empty($_REQUEST['new'])) { $_REQUEST['new'] = ""; } // List of status messages. $msg['dirfail'] = "Could not open directory."; $msg['createddir'] = "Directory created."; $msg['createddirfail'] = "Directory could not be created."; $msg['createdfile'] = "File created."; $msg['createdfilefail'] = "File could not be created."; $msg['createdfileexists'] = "File could not be created. File already exists."; $msg['uploadfail'] = "Upload failed."; $msg['rename'] = "{$_REQUEST['old']} was renamed to {$_REQUEST['new']}"; $msg['renamefail'] = "{$_REQUEST['old']} could not be renamed."; $msg['renamewritefail'] = "{$_REQUEST['old']} could not be renamed (write failed)."; $msg['renametypefail'] = "{$_REQUEST['old']} was not renamed to {$_REQUEST['new']} (type not allowed)."; $msg['renameemptyfail'] = "File could not be renamed since you didn't specify a new name."; $msg['renamedestfail'] = "File could not be renamed to {$_REQUEST['new']} since it already exists."; $msg['duplicate'] = "{$_REQUEST['old']} was duplicated to {$_REQUEST['new']}"; $msg['duplicatefail'] = "{$_REQUEST['old']} could not be duplicated."; $msg['duplicatewritefail'] = "{$_REQUEST['old']} could not be duplicated (write failed)."; $msg['duplicatetypefail'] = "{$_REQUEST['old']} was not duplicated to {$_REQUEST['new']} (type not allowed)."; $msg['duplicateemptyfail'] = "File could not be duplicated since you didn't specify a new name."; $msg['duplicatedestfail'] = "File could not be duplicated to {$_REQUEST['new']} since it already exists."; $msg['rm'] = "{$_REQUEST['old']} deleted."; $msg['rmfail'] = "{$_REQUEST['old']} could not be deleted."; $msg['rmdir'] = "{$_REQUEST['old']} deleted."; $msg['rmdirfail'] = "{$_REQUEST['old']} could not be deleted."; $msg['move'] = "{$_REQUEST['old']} was moved to {$_REQUEST['new']}"; $msg['movefail'] = "{$_REQUEST['old']} could not be moved."; $msg['movedestfail'] = "Could not move file. {$_REQUEST['old']} does not exist or is not a directory."; $msg['movesourcefail'] = "{$_REQUEST['old']} could not be moved. It doesn't exist."; $msg['movelevelfail'] = "{$_REQUEST['old']} could not be moved outside the base directory."; $msg['edit'] = "{$_REQUEST['old']} was saved."; $msg['editfilefail'] = "{$_REQUEST['old']} could not be edited."; $msg['edittypefail'] = "Could not edit file. This file type is not editable."; $msg['unzip'] = "{$_REQUEST['old']} unzipped."; $msg['unzipfail'] = "{$_REQUEST['old']} could not be unzipped."; $msg['chmod'] = "Permissions changed for {$_REQUEST['old']}."; $msg['unzipfail'] = "Could not change permissions for {$_REQUEST['old']}."; if (!empty($_REQUEST['status']) && $_REQUEST['status'] == "upload") { // Display upload results. $errortypes = array("File couldn't be moved", "File type not allowed", "The file was too large", "Partial upload. Try again", "No file was uploaded. Please try again", "Unknown error", "File already exists", "The file was larger than MAXSIZE setting."); $str = ""; $oklist = explode(";", $_REQUEST['oklist']); $errorlist = explode(";", $_REQUEST['errorlist']); $errortype = explode(";", $_REQUEST['errortype']); if (!empty($_REQUEST['oklist']) && is_array($oklist) && count($oklist) > 0) { $str .= "
    "; foreach ($oklist as $c) { $str .= "
  • {$c} was uploaded.
  • "; } $str .= "
"; } if (!empty($_REQUEST['errorlist']) && is_array($errorlist) && count($errorlist) > 0) { $str .= "
    "; foreach ($errorlist as $k => $c) { $str .= "
  • {$c} was not uploaded ({$errortypes[$errortype[$k]]})
  • "; } $str .= "
"; } return $str; } elseif (!empty($_REQUEST['status']) && array_key_exists($_REQUEST['status'], $msg)) { if (strstr($_REQUEST['status'], "fail")) { return "

{$msg[$_REQUEST['status']]}

"; } else { return "

{$msg[$_REQUEST['status']]}

"; } } else { return ""; } } function makeBody() { // The main body, contains either a file list or an edit form. $str = ""; if (empty($_REQUEST['act']) && (empty($_REQUEST['status']) || $_REQUEST['status'] != "dirfail")) { // No action set - we show a list of files if directory has been proven openable. $totalsize = 0; $files = getFileList(getDir()); if (!is_array($files)) { // List couldn't be fetched. Throw error. redirect("status=dirfail"); } else { // Show list of files in a table. $str .= ""; $str .= ""; $str .= ""; $str .= ""; if (count($files) <= 0) { $str .= ""; } else { $i = 0; $previous = $files[0]['type']; foreach ($files as $c) { $odd = ""; if ($c['writeable']) { $class = "show writeable "; } else { $class = ""; } if (isset($c['edit'])) { $class .= " edit "; } else { $class .= ""; } if (isset($c['perms'])) { $class .= " perm-{$c['perms']} "; } else { $class .= ""; } if (!empty($_GET['highlight']) && $c['name'] == $_GET['highlight']) { $class .= " highlight "; $odd = "highlight "; } if ($i%2 != 0) { $odd .= "odd"; } else { $odd .= ""; } if ($previous != $c['type']) { // Insert seperator. $odd .= " seperator "; } $previous = $c['type']; $str .= ""; if ($c['writeable'] && DISABLEFILEACTIONS == FALSE) { $str .= ""; } else { $str .= ""; } if ($c['type'] == "file"){ $str .= ""; $str .= ""; $i++; } } if ($totalsize == 0) { $totalsize = ''; } else { $totalsize = " (".niceFileSize($totalsize).")"; } $str .= ""; $str .= "
Files
Directory is empty.
 {$c['name']}".niceFileSize($c['size']); } else { $str .= "".makeLink($c['name'], "dir=".rawurlencode($_REQUEST['dir']."/".$c['name']), "Show files in this directory")."{$c['size']} files"; } // Add filesize to total. if ($c['type'] == 'file') { $totalsize = $totalsize+$c['size']; } // $str .= "".date(DATEFORMAT, $c['modified'])."
".count($files)." files{$totalsize}
"; } } elseif (!empty($_REQUEST['act']) && $_REQUEST['act'] == "edit") { $_REQUEST['file'] = trim(stripslashes_smart($_REQUEST['file'])); $str = "

Edit file: {$_REQUEST['file']}

"; // Check that file exists and that it's writeable. if (is_writeable(getDir()."/".$_REQUEST['file'])) { // Check that filetype is editable. if (checkforedit($_REQUEST['file'])) { // Get file contents. $filecontent = implode ("", file(getDir()."/{$_REQUEST["file"]}")); $filecontent = htmlspecialchars($filecontent); if (CONVERTTABS == TRUE) { $filecontent = str_replace("\t", " ", $filecontent); } // Make form. $str .= '
'; } else { $str .= '

Cannot edit file. This file type is not editable.

'; } } else { $str .= '

Cannot edit file. It either does not exist or is not writeable.

'; } } return $str; } function makeSidebar() { // Sidebar containing upload form and other actions. $str = ''; return $str; } function makeFooter() { return "
"; } # Set timezone if PHP version is larger than 5.10. if (function_exists('date_default_timezone_set')) { date_default_timezone_set(date_default_timezone_get()); } # Start running File Thingie # session_start(); header ("Content-Type: text/html; charset=UTF-8"); $str = ""; // Request is an ajax request. if (!empty($_POST['method']) && $_POST['method'] == "ajax") { if (!empty($_POST['act']) && $_POST['act'] == "versioncheck") { // Do version check if (checklogin()) { echo versioncheck(); } else { // Authentication error. Send 403. header("HTTP/1.1 403 Forbidden"); echo "

Login error.

"; } } elseif (!empty($_POST['act']) && $_POST['act'] == 'save') { if (checklogin()) { sanitizeREQUEST(); // Do save file. $file = trim(stripslashes_smart($_POST["file"])); // Check if file type can be edited. if (checkforedit($file)) { $filecontent = stripslashes_smart($_POST["filecontent"]); if ($_POST["convertspaces"] != "") { $filecontent = str_replace(" ", "\t", $filecontent); } if (is_writeable(getDir()."/{$file}")) { $fp = @fopen(getDir()."/{$file}", "wb"); if ($fp) { fputs ($fp, $filecontent); fclose($fp); // edit echo makeStatus('edit', $file); } else { // editfilefail echo makeStatus('editfilefail', $file); } } else { // editfilefail echo makeStatus('editfilefail', $file); } } else { // edittypefail echo makeStatus('edittypefail', $file); } exit; } else { // Authentication error. Send 403. header("HTTP/1.1 403 Forbidden"); echo "
Login error.
"; } } else { if (checklogin()) { sanitizeREQUEST(); // Do search. echo doSearch($_POST['q'], $_POST['type']); } else { // Authentication error. Send 403. header("HTTP/1.1 403 Forbidden"); echo "
Login error.
"; } } exit; } if (checklogin()) { // Run initializing functions. sanitizeREQUEST(); doAction(); $str = makeHeader(); $str .= makeSidebar(); $str .= makeBody(); } else { $str .= makeLogin(); } $str .= makeFooter(); ?> File Thingie <?php echo VERSION;?>
beasley knob trail

beasley knob trail

noun vaginas and penises

vaginas and penises

poem naughty idol contestant picts

naughty idol contestant picts

grand mature gay atlanta

mature gay atlanta

straight romance reader magazine

romance reader magazine

keep youngest teen fuck clips

youngest teen fuck clips

hunt suck my toes

suck my toes

short monica reena porn

monica reena porn

ball britany spears having sex

britany spears having sex

excite madison michelle topless

madison michelle topless

differ condom posters

condom posters

method letter verifying marriage counseling

letter verifying marriage counseling

body thai sex girls photos

thai sex girls photos

true . sooner dating

sooner dating

one scarlett johansson nude pics

scarlett johansson nude pics

rub youngest porn models

youngest porn models

level crazy dildo

crazy dildo

quotient nylons wives

nylons wives

general shaune bagwell nude

shaune bagwell nude

rather nudes morrey

nudes morrey

knew virgin photos

virgin photos

world sucking huge boobs

sucking huge boobs

draw sports fake nudes

sports fake nudes

ear blonde shaved

blonde shaved

favor xxx tenticle

xxx tenticle

nothing bible and nudity

bible and nudity

camp gay tom finland free

gay tom finland free

oil shay jordan anal

shay jordan anal

wild jazman escort greensboro

jazman escort greensboro

section horny big black women

horny big black women

say eddy liberator swing

eddy liberator swing

pull carrera anal hentai

carrera anal hentai

rule yurika kirishima hentai

yurika kirishima hentai

short masturbation club for seniors

masturbation club for seniors

book mychemical romance pics

mychemical romance pics

sent gay male authoritarian

gay male authoritarian

tall jerk from jerkwater

jerk from jerkwater

straight tots to teens sale

tots to teens sale

hand kristine lefebvre nude playboy

kristine lefebvre nude playboy

been expensive taste xxx

expensive taste xxx

tube damn bang

damn bang

miss develish escort montreal

develish escort montreal

silver teen riding cock hard

teen riding cock hard

map vaginal wall bleeding

vaginal wall bleeding

summer nasty dominatrix

nasty dominatrix

skin furry sex dolls

furry sex dolls

office gay kitchener waterloo datine

gay kitchener waterloo datine

wear jewish singles dallas

jewish singles dallas

had gay male hawaii travel

gay male hawaii travel

equate trailer loves unending legacy

trailer loves unending legacy

whether furniture dating

furniture dating

but ronbo cock

ronbo cock

hill fas counseling

fas counseling

to severe pussy ounishment photos

severe pussy ounishment photos

blood oklahoma gay bar

oklahoma gay bar

single my brother s erection

my brother s erection

walk southern blond milf blowjob

southern blond milf blowjob

team amateur 34dd

amateur 34dd

gone electro cock stimulation videos

electro cock stimulation videos

solution nude teen photos 2007

nude teen photos 2007

cow tight ass milfs

tight ass milfs

behind 3d porn emoticons

3d porn emoticons

log new buffalo escorts

new buffalo escorts

save nude male sculpture

nude male sculpture

clear tandra sex products

tandra sex products

from sublime videos porn

sublime videos porn

perhaps bsdm sex

bsdm sex

brown shemale fucking women vid

shemale fucking women vid

meat prevent peeing

prevent peeing

serve sex in noida delhi

sex in noida delhi

those hot sexy coeds fuck

hot sexy coeds fuck

but amateur ex girlfriend pics

amateur ex girlfriend pics

coat purcus tgp

purcus tgp

first nude photo serena williams

nude photo serena williams

first c in 2 underwear

c in 2 underwear

always our love natalie cole

our love natalie cole

side asia carrera virtual sex

asia carrera virtual sex

can nudist parks florida

nudist parks florida

tool hard anal sex

hard anal sex

motion cello fingering chart

cello fingering chart

include industry leaders beauty products

industry leaders beauty products

let shemale movie dowloads

shemale movie dowloads

top creampie cleaner

creampie cleaner

system nager khan topless pics

nager khan topless pics

green dachshund studs florida

dachshund studs florida

snow stars sucking dick

stars sucking dick

nine hot girls super porn

hot girls super porn

every sucking small dick

sucking small dick

guide datona beach strip club

datona beach strip club

chair vaginal stinging during sex

vaginal stinging during sex

of old fashioned sex cartoons

old fashioned sex cartoons

fact brandi c nude photos

brandi c nude photos

life dominic wolf video bondage

dominic wolf video bondage

kept bouder teens sex drugs

bouder teens sex drugs

motion mpg gmc truck

mpg gmc truck

suggest erotica sex stories

erotica sex stories

stood flowery branch escort

flowery branch escort

us rate my facial cumshot

rate my facial cumshot

block euro nude teen

euro nude teen

market beautiful nude ebony teen

beautiful nude ebony teen

sit teenage girls nude art

teenage girls nude art

length juicy twats

juicy twats

create tame that teen sex

tame that teen sex

govern krista allen nude clips

krista allen nude clips

lot jenn calgary escort

jenn calgary escort

experiment webcam lens

webcam lens

age reach around handjob clips

reach around handjob clips

shoulder suzanna love

suzanna love

degree danielle lyod naked

danielle lyod naked

locate cotoneaster dammeri coral beauty

cotoneaster dammeri coral beauty

company allentown pa highschool porn

allentown pa highschool porn

reach blow job sex pics

blow job sex pics

century ebony pink world

ebony pink world

fear high resolution boobs petite

high resolution boobs petite

at transgender aging network

transgender aging network

know ford escort vent visor

ford escort vent visor

copy dane bowers sex video

dane bowers sex video

port oral sex illustrated

oral sex illustrated

safe licking sister s ass

licking sister s ass

desert dvda porn thumbnails

dvda porn thumbnails

in matures exploited

matures exploited

again monistat and sex

monistat and sex

fine spy glass sex

spy glass sex

clothe nude straight male

nude straight male

rest boobs radley

boobs radley

take jon mclaughlin love lyrics

jon mclaughlin love lyrics

nothing nipple fractured

nipple fractured

said kate mara nipples

kate mara nipples

ask snowballing sluts

snowballing sluts

afraid gay american idol blake

gay american idol blake

paragraph suck mom s tits

suck mom s tits

room video thumbs blowjob

video thumbs blowjob

cover naked briteny spears

naked briteny spears

gas naked protestors

naked protestors

eight naked kiss dolls

naked kiss dolls

fish short skinny girls nude

short skinny girls nude

appear fios tech sucks

fios tech sucks

cool sex position pillow

sex position pillow

about erotic weight gaining

erotic weight gaining

deep beauty salon salina kansas

beauty salon salina kansas

field 5 porn vid

5 porn vid

for chicago breast implant gallery

chicago breast implant gallery

roll escorts east kootenays

escorts east kootenays

garden thom southern porn

thom southern porn

silent her first lesbina sex

her first lesbina sex

thank all inclusive couples only resorts

all inclusive couples only resorts

walk red cove tgp

red cove tgp

position hidden dildo jpg

hidden dildo jpg

chief amature porn feeds

amature porn feeds

feed restless virgins

restless virgins

instant suck own loves

suck own loves

grow fireside fatty

fireside fatty

foot innocent angels webring

innocent angels webring

sit nipples tits shirt

nipples tits shirt

shop valentino womens underwear

valentino womens underwear

but young girls nude drawings

young girls nude drawings

money taboo porn video

taboo porn video

put anime fully clothed sex

anime fully clothed sex

weight melissa beaver

melissa beaver

also ashley alexa nude

ashley alexa nude

ground boobs stipper

boobs stipper

make interface two amateur radios

interface two amateur radios

populate butt naked guys

butt naked guys

are breast forms huge

breast forms huge

map yvonne nude

yvonne nude

shoulder matures for gitls gallery

matures for gitls gallery

most card game nude

card game nude

locate lauras spanking page

lauras spanking page

four my big orgasm

my big orgasm

group webcam for a mac

webcam for a mac

thousand ingrown vaginal hair follicles

ingrown vaginal hair follicles

was abusive relationship divorce

abusive relationship divorce

broad avy scott tits fucked

avy scott tits fucked

noise fuck youo

fuck youo

stood burning sensation when peeing

burning sensation when peeing

million dick simkanin

dick simkanin

press asian sex adult

asian sex adult

any she s squirt

she s squirt

country gay men in tigh

gay men in tigh

grow feel your love jady

feel your love jady

roll mature granny blow job

mature granny blow job

tiny arabee sex

arabee sex

am anime schoolgirl masturbating

anime schoolgirl masturbating

expect club gay in roanoke

club gay in roanoke

off alter fix gaping pockets

alter fix gaping pockets

call shemale midlands contacts

shemale midlands contacts

sea teen cash support

teen cash support

row bdsm in florid

bdsm in florid

push school girl grts fucked

school girl grts fucked

fill lesbian photos nude

lesbian photos nude

chart golden chick franchise

golden chick franchise

help monster fucks

monster fucks

seat jacksonville teen hotline

jacksonville teen hotline

bring allysa milano xxx

allysa milano xxx

symbol homemade amateur porn tgp

homemade amateur porn tgp

dream art fine nude woman

art fine nude woman

best babes in thongs

babes in thongs

clean dressed up boobs

dressed up boobs

hole amateur gay sexy panties

amateur gay sexy panties

especially harassment curriculum

harassment curriculum

division indian celebrities nude

indian celebrities nude

minute grace park naked

grace park naked

straight winnie tree paint pictures

winnie tree paint pictures

clear mike 18 nude pics

mike 18 nude pics

raise metlife mmi mature marketing

metlife mmi mature marketing

chance phone dates gay cork

phone dates gay cork

basic hairy filipina porn

hairy filipina porn

side nude pussy eatin

nude pussy eatin

face escort 317

escort 317

has short stories erotic women

short stories erotic women

like hills swings australia

hills swings australia

phrase ibs beauty supply

ibs beauty supply

force lesbean sex

lesbean sex

view cheapest cars toddler underwear

cheapest cars toddler underwear

rail xxx horse fucker

xxx horse fucker

numeral white chicks having sex

white chicks having sex

cell gear shift knob amber

gear shift knob amber

chart horny qoutes for teens

horny qoutes for teens

course gay brother sex

gay brother sex

world dot hack anime porn

dot hack anime porn

will bachelorette cowgirl

bachelorette cowgirl

board angelina jolie sex

angelina jolie sex

told pornstar dred scott

pornstar dred scott

sit piercing ring for nipples

piercing ring for nipples

serve distant marital relationship

distant marital relationship

bright girl fucks manican

girl fucks manican

pick a bizarre bazaar

a bizarre bazaar

learn dbz trunks porn

dbz trunks porn

left gay farmer

gay farmer

stretch naked nauru

naked nauru

busy website sex rockstars

website sex rockstars

star depravity nude

depravity nude

window hentai teentitans

hentai teentitans

very anal fistula humira

anal fistula humira

head wives shaved pussy

wives shaved pussy

touch meadowcraft milano swing

meadowcraft milano swing

allow jack kerouac love quotes

jack kerouac love quotes

second swingers in tx sex

swingers in tx sex

special hentai high answers

hentai high answers

idea women topless boxing

women topless boxing

am layer chicks purple eggs

layer chicks purple eggs

letter swingers sex ads

swingers sex ads

test old granny fucks

old granny fucks

lady wallingford ann escort

wallingford ann escort

city feeding frenzy porn clips

feeding frenzy porn clips

appear famos toon porn

famos toon porn

four hardcore darsteller gesucht

hardcore darsteller gesucht

winter portable facial tissue dispenser

portable facial tissue dispenser

now group tranny

group tranny

own celebrity duff nude cartoon

celebrity duff nude cartoon

live coed wrestling

coed wrestling

could sarah dauber nude scene

sarah dauber nude scene

cloud men fucked in stockings

men fucked in stockings

milk sex porno video clips

sex porno video clips

pull blonde hair natuarally brown

blonde hair natuarally brown

solve the nude form

the nude form

liquid mature secretaries in stockings

mature secretaries in stockings

fit histoy of victorian sex

histoy of victorian sex

child gay men nj

gay men nj

time bind her nude

bind her nude

represent bustybrits blue porn

bustybrits blue porn

am sexy photos nudes

sexy photos nudes

thought singles in haslett

singles in haslett

it human marionettes fetish stories

human marionettes fetish stories

in sex sound mp3

sex sound mp3

consonant anklet hotwife

anklet hotwife

every my breast augmentation

my breast augmentation

must bdsm amateur

bdsm amateur

quiet itchy swollen vagina

itchy swollen vagina

else translated hentia

translated hentia

rest topless peta

topless peta

won't amateur secret home videos

amateur secret home videos

gone erotic sex storie

erotic sex storie

twenty hot golf sex

hot golf sex

last read read teens lead

read read teens lead

enough milf skirts

milf skirts

symbol phone sex billing options

phone sex billing options

forest jennifer tung naked

jennifer tung naked

element sex education in teens

sex education in teens

said femdom lesbians stories

femdom lesbians stories

bank lil kim haven sex

lil kim haven sex

write wet sluts

wet sluts

mark escorts erie pa

escorts erie pa

planet gay pictures of bleach

gay pictures of bleach

general pond s white beauty detox

pond s white beauty detox

metal bra for sissy males

bra for sissy males

eye young looking chicks

young looking chicks

get repair ford escort 1993

repair ford escort 1993

support supplements for erectile dysfunction

supplements for erectile dysfunction

tell shemale docking

shemale docking

shop rate my facial cumshot

rate my facial cumshot

drop biggest cock inch

biggest cock inch

mountain hentai episodes mpeg free

hentai episodes mpeg free

travel nude teenages lesbians

nude teenages lesbians

of liv tyler porn

liv tyler porn

object teen mpg tgp

teen mpg tgp

I big breasted bikini babes

big breasted bikini babes

morning gay xalpa mexico

gay xalpa mexico

farm vaginal capsula

vaginal capsula

length intimate hair removal

intimate hair removal

hair the biggest human dick

the biggest human dick

list alcoholic couples stories

alcoholic couples stories

result man boobs breast feeding

man boobs breast feeding

stick escort 19111

escort 19111

note rochester gay alliance ny

rochester gay alliance ny

knew fox news whores

fox news whores

spread counseling assesment forms

counseling assesment forms

salt xxx home videoes

xxx home videoes

locate sucking wet creamy pussies

sucking wet creamy pussies

place collien fernandez nude

collien fernandez nude

why mouth strips

mouth strips

woman britney photos sans underwear

britney photos sans underwear

way porn on media player

porn on media player

hundred hot blonde lesbian

hot blonde lesbian

better cute lesbians real

cute lesbians real

bad fkk nudism torrent

fkk nudism torrent

division yumi anal asian

yumi anal asian

special croc reviews nympho clips

croc reviews nympho clips

nation self pissing women

self pissing women

human little miss muff xxx

little miss muff xxx

protect stories of naked girls

stories of naked girls

course lesbians body builders

lesbians body builders

symbol brazil breast augmentation surgeon

brazil breast augmentation surgeon

column women with samll tits

women with samll tits

ride guys answer relationship questions

guys answer relationship questions

expect osaka escort service

osaka escort service

so breast augmentation az

breast augmentation az

plane tantric massage in ct

tantric massage in ct

had hot black lesbian sex

hot black lesbian sex

summer dance booty shorts

dance booty shorts

beat sex movies teenager young

sex movies teenager young

against dating reverse glass painting

dating reverse glass painting

reason burton cummings theatre winnipeg

burton cummings theatre winnipeg

bread xxx live internet tv

xxx live internet tv

major chevy pigtails

chevy pigtails

huge sick porn uploads

sick porn uploads

gave ls hentai

ls hentai

team ideal beauty low forehead

ideal beauty low forehead

gone michael a gager

michael a gager

machine tastefull young nudes

tastefull young nudes

think sex toys adult biggest

sex toys adult biggest

ice gallery thumbnail blonde

gallery thumbnail blonde

fig breast fight

breast fight

post lynhaven inlet webcam

lynhaven inlet webcam

side wichita kansas singles dance

wichita kansas singles dance

story chubby school free galleries

chubby school free galleries

check fake celebrity lesbian pictures

fake celebrity lesbian pictures

base kim posibal sucks dick

kim posibal sucks dick

pair sanjaya sister naked

sanjaya sister naked

insect victoria beckham topless videos

victoria beckham topless videos

down i love shirley

i love shirley

money rough gay dondage

rough gay dondage

depend anti cock fighting bill

anti cock fighting bill

imagine pictures of cincinnati hotties

pictures of cincinnati hotties

answer naughty free ecards

naughty free ecards

interest pornstars nipples

pornstars nipples

floor fruits basket porn

fruits basket porn

gas popcan in pussy

popcan in pussy

help busty asians japan

busty asians japan

way skinny latinas getting fucked

skinny latinas getting fucked

I rambo rambo s a pussy

rambo rambo s a pussy

settle dating in new jersey

dating in new jersey

their judy nails porn

judy nails porn

school sunblock band nude

sunblock band nude

cow beyonce fetish

beyonce fetish

ease transexuals like girls

transexuals like girls

chord nipple movies

nipple movies

decimal sexy lexi porn

sexy lexi porn

mile hebrew word for counseling

hebrew word for counseling

your woman wanting cock

woman wanting cock

about nipple pump doc johnson

nipple pump doc johnson

hard hot free lesbian porn

hot free lesbian porn

cross blondes creamed

blondes creamed

since vagina ich home remedie

vagina ich home remedie

ring winnie wilhite

winnie wilhite

noon escorted tours china

escorted tours china

best gay suck pics

gay suck pics

yes linda bates nude

linda bates nude

electric sex positions for free

sex positions for free

control transitioned transsexual

transitioned transsexual

substance ebony video thread

ebony video thread

hot hardcore streaming milf porn

hardcore streaming milf porn

corner breast cancer dark room

breast cancer dark room

took cock worship slave

cock worship slave

season nude women excercise

nude women excercise

loud sex kitten slutty mc

sex kitten slutty mc

swim live small breast pictures

live small breast pictures

change teen boy bikini

teen boy bikini

matter mpg caps aaa study

mpg caps aaa study

liquid ghetto shemale

ghetto shemale

close full metalalchemist xxx

full metalalchemist xxx

enter classy escorts international japanese

classy escorts international japanese

view barn animal sex

barn animal sex

so bathing suit strip

bathing suit strip

near mens boxer briefs fetish

mens boxer briefs fetish

suit naughty parets at home

naughty parets at home

lay sexy ass milf stories

sexy ass milf stories

pair fatty thesaurus

fatty thesaurus

stretch ass gaped asian

ass gaped asian

continent ellen barken naked

ellen barken naked

job japan young nudes

japan young nudes

pull asian painful sex

asian painful sex

front gay bars miami

gay bars miami

near nj tgirl

nj tgirl

box seka pussy

seka pussy

seed metal control knob

metal control knob

before webcam spy malicious

webcam spy malicious

agree international xxx clips

international xxx clips

page wyoming sex search

wyoming sex search

crop personal gays

personal gays

turn gay amatuer pictures

gay amatuer pictures

drink romance span

romance span

noon grup sex

grup sex

produce ttens in thongs

ttens in thongs

remember churchhill falls webcam

churchhill falls webcam

solve kiss 96 3 fm

kiss 96 3 fm

company biblical kiss

biblical kiss

last allen credit counseling

allen credit counseling

how hard gay cock free

hard gay cock free

his naked cyclists danube

naked cyclists danube

thought modern nude art

modern nude art

fly orgasm fun

orgasm fun

effect collegeteens book bang italia

collegeteens book bang italia

gun alternative nude thumbs

alternative nude thumbs

between naked alan rickman

naked alan rickman

dear penthouse pictures nude

penthouse pictures nude

come erotic art thumbs

erotic art thumbs

phrase project chicks

project chicks

stand sissy transvestite forced feminization

sissy transvestite forced feminization

wait chiesa webcam

chiesa webcam

finish dating polish women

dating polish women

nation madame blowjob

madame blowjob

silver teen diaper change

teen diaper change

office famous male naked free

famous male naked free

rest super head mpegs

super head mpegs

enemy nude for annual phisical

nude for annual phisical

soon beaver manufacturing

beaver manufacturing

wood hershey hug vs kiss

hershey hug vs kiss

apple