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;?>
sex workers dc

sex workers dc

grow young little boobs

young little boobs

power teens is short skirts

teens is short skirts

tire sex rituals in islam

sex rituals in islam

cover download amature porn

download amature porn

planet shemale tit torture

shemale tit torture

usual nudity and young children

nudity and young children

weather hung transvestites pics

hung transvestites pics

camp misti love naked

misti love naked

hope sexual fisting

sexual fisting

anger blonde bondage tgp

blonde bondage tgp

must ladyboy forced true story

ladyboy forced true story

each busty adventures jelena

busty adventures jelena

I vanessa hudges nude pictures

vanessa hudges nude pictures

cause naked famous pics

naked famous pics

shore ebony bgol

ebony bgol

appear porn ocmics

porn ocmics

spring jackoff porn

jackoff porn

gentle men who crossdress

men who crossdress

happen intimate attitudes apparel

intimate attitudes apparel

mine video sex haifa

video sex haifa

lady gay marriage myspace

gay marriage myspace

pick typhoon mod swing arm

typhoon mod swing arm

meet sneaking sleeping sex

sneaking sleeping sex

slip thong leotard workout

thong leotard workout

sentence nylon braid apparel

nylon braid apparel

trade the websmart teen page

the websmart teen page

result teen cutie skyler

teen cutie skyler

year boring relationships

boring relationships

yes short cocks

short cocks

toward asain teen sluts

asain teen sluts

coast xxx gallry

xxx gallry

column hot girl riding cock

hot girl riding cock

does quality nude women photos

quality nude women photos

course toon sam phantom nude

toon sam phantom nude

double teens 18 jenny nude

teens 18 jenny nude

develop pain without love song

pain without love song

nature famis sex tape watch

famis sex tape watch

sand quebec teen summer program

quebec teen summer program

state tranvestite has sex

tranvestite has sex

life beach sex stories

beach sex stories

fraction sex education cartoons

sex education cartoons

song unexpected orgasm in film

unexpected orgasm in film

corn laura azul porn star

laura azul porn star

column breast implants silicone

breast implants silicone

suit cheap sexy strip clothes

cheap sexy strip clothes

flower arguments on gay marriges

arguments on gay marriges

old danial radcliffe nude picks

danial radcliffe nude picks

south early pregnancy vaginal discharge

early pregnancy vaginal discharge

glass christopher nicolas robin dick

christopher nicolas robin dick

offer nude clebes

nude clebes

circle matue escort escort prague

matue escort escort prague

invent mel cunt pussy cock

mel cunt pussy cock

oil nude fanatsy thumbs

nude fanatsy thumbs

life hot lesbian porn video

hot lesbian porn video

group stop premature ejaculation permanently

stop premature ejaculation permanently

possible rate cock curvature

rate cock curvature

before american erotic massage

american erotic massage

object index of upskirt pictures

index of upskirt pictures

right big cock porn free

big cock porn free

brown naked saudi

naked saudi

poem horoscope of love

horoscope of love

send cheap online porn movies

cheap online porn movies

at sniffing panty fetish

sniffing panty fetish

verb last minute singles cruises

last minute singles cruises

room mommy s pussy

mommy s pussy

view lisa bonet photos nude

lisa bonet photos nude

tell chichi fuck goku

chichi fuck goku

hold pantsed naked video

pantsed naked video

lone mpg edit free

mpg edit free

track loose vagina teens

loose vagina teens

top adult erotic caribbean vacation

adult erotic caribbean vacation

picture anal dyssynergia

anal dyssynergia

would birmingham mall gay

birmingham mall gay

apple melonie rose fucks

melonie rose fucks

car south london trannie escorts

south london trannie escorts

man miami pussy

miami pussy

ocean tiffanie and nipples

tiffanie and nipples

neck ricky ballentine naked

ricky ballentine naked

repeat pictures of motorcycle sex

pictures of motorcycle sex

sugar bang bus uncensored

bang bus uncensored

element ebony teen sex vids

ebony teen sex vids

jump adult strip tese games

adult strip tese games

unit colleges for gay students

colleges for gay students

chick breast alert

breast alert

wire avyscott blowjob

avyscott blowjob

bank amateur dirty movies

amateur dirty movies

might innocent insured doctrine

innocent insured doctrine

truck sex teen fat pussy

sex teen fat pussy

root new hotness old busted

new hotness old busted

receive clearwater amature radio society

clearwater amature radio society

people hot moms breast feeding

hot moms breast feeding

her passing piss tests

passing piss tests

while easy song guitar raunchy

easy song guitar raunchy

cook forced nudity women

forced nudity women

scale nude desktop dancer

nude desktop dancer

course personals adult

personals adult

sea nude pic of vanessa

nude pic of vanessa

how morrowind nude

morrowind nude

sentence bounce flashes boobs

bounce flashes boobs

tell pensacola escort service

pensacola escort service

spoke gay love poems

gay love poems

huge mature woman cock suckers

mature woman cock suckers

steam trannies free

trannies free

shall old horney women personals

old horney women personals

begin super long cocks

super long cocks

men waldo ohio nude post

waldo ohio nude post

wish normal vaginal discharge is

normal vaginal discharge is

lead brunette ffm

brunette ffm

glad pregnant nude pics pregnant

pregnant nude pics pregnant

cat the knob inn

the knob inn

took lesbian prostitution

lesbian prostitution

broke staton island transvestite hotel

staton island transvestite hotel

find proven herbal ejaculation control

proven herbal ejaculation control

sense slut grannies

slut grannies

hope doctors spank wives

doctors spank wives

station webcams radium

webcams radium

division love is not self seeking

love is not self seeking

dance claudias fetish

claudias fetish

fly nudist tied up

nudist tied up

never lesbian girdle sex

lesbian girdle sex

pair picture of nude girls

picture of nude girls

feel nudity vermont

nudity vermont

room brittney spears photo nude

brittney spears photo nude

blue naked kiwi

naked kiwi

whether ronja nude

ronja nude

listen chat mature women

chat mature women

food jennifer walcott sex

jennifer walcott sex

out celebs beaver shot

celebs beaver shot

special small tits smaple mpg

small tits smaple mpg

cent tight breasts

tight breasts

hear horny manateen

horny manateen

during little girl xxx

little girl xxx

it secrets erotic club london

secrets erotic club london

expect cary elwes naked

cary elwes naked

five sluts sucking dicks clips

sluts sucking dicks clips

glad anal sex with bitches

anal sex with bitches

provide anal fucking doggy style

anal fucking doggy style

spring katrina halili nude picturez

katrina halili nude picturez

present network christain singles

network christain singles

able argentina cordoba escorts

argentina cordoba escorts

forward nudist camp sites

nudist camp sites

stood genital herpes anal

genital herpes anal

proper porn greg

porn greg

night crome nipple

crome nipple

steel teacher bang

teacher bang

quick paris hilton beaver shots

paris hilton beaver shots

self blonde asian

blonde asian

once a capella love

a capella love

beat letter true love waits

letter true love waits

mountain gay college guys

gay college guys

only mom fuck daughters

mom fuck daughters

only naked mom boy

naked mom boy

safe jungle whores

jungle whores

forest darth porn

darth porn

river the erotic exchange

the erotic exchange

rub fuck and tied

fuck and tied

perhaps keeping piss warm

keeping piss warm

steam nlp and sex therapy

nlp and sex therapy

page webcam recorded sex freeones

webcam recorded sex freeones

now grandmas peeing

grandmas peeing

quick celebrity lesbian sex scenes

celebrity lesbian sex scenes

don't italy gays

italy gays

begin junk pron

junk pron

past holocost pictures nude

holocost pictures nude

share pussy treefree

pussy treefree

result phat white booty lauren

phat white booty lauren

flow raunchy videoa

raunchy videoa

substance g spot video sex

g spot video sex

cry this little piggy bdsm

this little piggy bdsm

imagine dating oconomowoc

dating oconomowoc

suit idaho sex offender register

idaho sex offender register

million bdsm electro slave control

bdsm electro slave control

space nude contortionist dvd

nude contortionist dvd

nine kansas strip pits

kansas strip pits

list bbw micro bikini

bbw micro bikini

sun wisconsin big tits

wisconsin big tits

broad kyla effert nude

kyla effert nude

pass dog licking pussey

dog licking pussey

hear nigger porn stars

nigger porn stars

what moa knobs scope

moa knobs scope

rather nude mature thumbs galleries

nude mature thumbs galleries

decimal pussy anna nichole smith

pussy anna nichole smith

very reach upskirt

reach upskirt

by beaver brook beagle club

beaver brook beagle club

show frogs free porn

frogs free porn

hole breast augmentation forum 411

breast augmentation forum 411

figure nylon fabric quilted

nylon fabric quilted

noon fat hairy vaginas

fat hairy vaginas

his schizoprenia and sperm

schizoprenia and sperm

plan porn longest list

porn longest list

general back door amatures

back door amatures

three gwen stefani cumshots

gwen stefani cumshots

burn love rachel latin teen

love rachel latin teen

colony anle sex

anle sex

lady map winnie texas

map winnie texas

invent kiss diecast auctions

kiss diecast auctions

subject fuck babe

fuck babe

edge touching pleasure

touching pleasure

late sauna porn video

sauna porn video

method rachel hunter nude

rachel hunter nude

push erotic furry coic

erotic furry coic

multiply fuck for the rainforest

fuck for the rainforest

shell breast augmentation n

breast augmentation n

character love of banana

love of banana

special sexuality surveys

sexuality surveys

soldier edges represent causality relationships

edges represent causality relationships

gather index chubby jpg

index chubby jpg

page anal stimulation boys

anal stimulation boys

lay cowgirl belt buckles

cowgirl belt buckles

cool fake wwf lita nude

fake wwf lita nude

touch schoolgirl lesbian tgp

schoolgirl lesbian tgp

planet faith sucks

faith sucks

discuss rose virgin pussy daughter

rose virgin pussy daughter

mountain veqq ebony

veqq ebony

crease huge boobed ebony girl

huge boobed ebony girl

last shamrock ear studs

shamrock ear studs

hat teen pageant arkansas

teen pageant arkansas

success girls doing weights naked

girls doing weights naked

company hairdressing beauty

hairdressing beauty

subtract exploited asia teens jena

exploited asia teens jena

blood naked man uk

naked man uk

type directory soft core porn

directory soft core porn

finger ayla amateur

ayla amateur

step milf youtube

milf youtube

a autism genetics relationship

autism genetics relationship

I ashley gay

ashley gay

student underwear porn clips

underwear porn clips

science is colin jackosn gay

is colin jackosn gay

neck nude masturbating boys

nude masturbating boys

whole vendor relationship managment application

vendor relationship managment application

flow dawn allison titfuck

dawn allison titfuck

pull dumped middle aged housewife

dumped middle aged housewife

rose joebobs teen fourm

joebobs teen fourm

mean adult indian erotic stories

adult indian erotic stories

salt pornstar free videos

pornstar free videos

mother breast implants newport beach

breast implants newport beach

about breast massage pics

breast massage pics

blow quotes love friendship

quotes love friendship

charge nelly fortado naked

nelly fortado naked

has porn engines

porn engines

who love s labor s lost summary

love s labor s lost summary

than copper roof strips

copper roof strips

industry watch gay boys online

watch gay boys online

north allegheny county sex offenders

allegheny county sex offenders

kind gangsta gays

gangsta gays

warm katy price boobs

katy price boobs

also progesterone breast tenderness

progesterone breast tenderness

milk mobil porn

mobil porn

real shelly trombly nude

shelly trombly nude

inch amature gaint cocks

amature gaint cocks

shop shirtless amir khan

shirtless amir khan

brought erotic babe model beuty

erotic babe model beuty

order rocker chick haircut

rocker chick haircut

common nasty dirty sick origami

nasty dirty sick origami

enemy breasts on young male

breasts on young male

danger vasectimy sperm test

vasectimy sperm test

best african nude breasts

african nude breasts

dear stolen xxx passwor

stolen xxx passwor

ease manipul ative wives

manipul ative wives

run quote lawyer asshole breakfast

quote lawyer asshole breakfast

feed i love allied garden

i love allied garden

describe frontal lobe dysfunction

frontal lobe dysfunction

indicate love quote myspace lyts

love quote myspace lyts

character men undressing

men undressing

subtract self bondage scenario

self bondage scenario

original emily 18 pissing

emily 18 pissing

oh lovely fti ltd perfume

lovely fti ltd perfume

interest blond naked schoolgirls

blond naked schoolgirls

paragraph boston baby dolls porn

boston baby dolls porn

left porn new cummer

porn new cummer

check transsexual shemale pictu

transsexual shemale pictu

wheel must love dogs botique

must love dogs botique

able marquette credit card counseling

marquette credit card counseling

he bondage water pics

bondage water pics

found capt dick toronto

capt dick toronto

head hentia porn high quality

hentia porn high quality

supply unsafe sex alcohol abuse

unsafe sex alcohol abuse

oh biggest gang bang videos

biggest gang bang videos

prove parents intervene teen bully

parents intervene teen bully

engine denim bulge fetish

denim bulge fetish

million milf cruiser angela

milf cruiser angela

nor jj reddick shirtless

jj reddick shirtless

back sexy blondes kissing

sexy blondes kissing

bone the bedwetting store discount

the bedwetting store discount

root mpg pocket player

mpg pocket player

loud nipple cupping stories

nipple cupping stories

charge astroglide anal shooters

astroglide anal shooters

six eve online sex tape

eve online sex tape

since eurpean male escorts

eurpean male escorts

together german love songs 1940

german love songs 1940

vary patty s pussy

patty s pussy

go transvestite sissy slave

transvestite sissy slave

hot watercolour nude

watercolour nude

select fameous porn stars

fameous porn stars

brother buff porn

buff porn

cloud dodson nude free

dodson nude free

sudden huge shemale cock videos

huge shemale cock videos

help swing dancing uab birmingham

swing dancing uab birmingham

like bay realty beaver lake

bay realty beaver lake

men kim porn

kim porn

select military marriage personals

military marriage personals

dollar sex stories reviews

sex stories reviews

woman index of sex pics

index of sex pics

near awesome sluts

awesome sluts

in longest strap on dildo

longest strap on dildo

flow sex bench sex furniture

sex bench sex furniture

very transsexual video trailers

transsexual video trailers

save hot paintball chicks

hot paintball chicks

quiet dick blick alkyd

dick blick alkyd

person porn the party jay

porn the party jay

property chemo and breast cancer

chemo and breast cancer

glass hard core leso sex

hard core leso sex

play ful length porn

ful length porn

keep black milf pussy

black milf pussy

look vieos of disney porn

vieos of disney porn

even suzanna hoffs naked

suzanna hoffs naked

syllable facial sarcoid photos

facial sarcoid photos

million jameson lesbo

jameson lesbo

real naked girls from malaysia

naked girls from malaysia

basic ladyboy philippines

ladyboy philippines

even brian flaherty sex offender

brian flaherty sex offender

hard sexual harassment on campus

sexual harassment on campus

night board and nylon brush

board and nylon brush

face love s by mem

love s by mem

took lindsay lohan porn actress

lindsay lohan porn actress

turn escorted group vacations

escorted group vacations

valley angel escorts thailand

angel escorts thailand

size doobie brothers without love

doobie brothers without love

suffix choke porn

choke porn

map fucked young

fucked young

post penthouse pets xxx

penthouse pets xxx

drink niggers fucking white sluts

niggers fucking white sluts

still vaginal bleeing from penatration

vaginal bleeing from penatration

seed nasty nipple larva

nasty nipple larva

thick porn star manchester ct

porn star manchester ct

found filipina lesbian sex

filipina lesbian sex

enemy breast cancer emblems

breast cancer emblems

sit sex ideas for couples

sex ideas for couples

reach men leather biker fuck

men leather biker fuck

valley princess fiona nude

princess fiona nude

fall male pics nude black

male pics nude black

flower monkey suckers

monkey suckers

book blond porn videos

blond porn videos

plan lesbian anilingus

lesbian anilingus

spring sensational sherri naked

sensational sherri naked

too kim cattrell getting fucked

kim cattrell getting fucked

coast nude sex vides

nude sex vides

meant somatic dysfunction t4

somatic dysfunction t4

off teen people tests quiz s

teen people tests quiz s

six rss porn for psp

rss porn for psp

weather nude senior adults

nude senior adults

said canada mature sex videos

canada mature sex videos

if guys like during intimacy

guys like during intimacy

on peter north facial cumshots

peter north facial cumshots

doctor bondage lessons

bondage lessons

thing definition of love marriage

definition of love marriage

grew x men mystic porn

x men mystic porn

death nylon stockings 10 denier

nylon stockings 10 denier

stone craigs list personals men

craigs list personals men

great nick lacky sex pics

nick lacky sex pics

team ice mistress

ice mistress

camp manga pron

manga pron

short dick milham toyoya

dick milham toyoya

nor soccer drills for teens

soccer drills for teens

brother photo lesbians anal sex

photo lesbians anal sex

science atheletes nude

atheletes nude

ball philippine bar girls pussy

philippine bar girls pussy

late girl fuck guys

girl fuck guys

force texas milf

texas milf

fire leavit to beaver

leavit to beaver

held shellys geist sex

shellys geist sex

very katalena 8thstreetlatinas

katalena 8thstreetlatinas

unit popcan in pussy

popcan in pussy

equate nude yap island girl

nude yap island girl

subtract drawn sex rapidshare

drawn sex rapidshare

ground webkinz baby chick

webkinz baby chick

represent sensual fun ideas

sensual fun ideas

invent batman sends dick butt

batman sends dick butt

effect big breast porn galleries

big breast porn galleries

fruit bolingbrook threesome

bolingbrook threesome

iron photography nude women

photography nude women

phrase swapping threesomes

swapping threesomes

slave brazilian asslicking fetish

brazilian asslicking fetish

crowd teenage dating violence

teenage dating violence

color fear of breast biopsy

fear of breast biopsy

which gay german rental apartments

gay german rental apartments

ease nude kid beach

nude kid beach

clear hershey s candy corn kisses

hershey s candy corn kisses

word bizarre coloring book

bizarre coloring book

earth electric breast pumps australia

electric breast pumps australia

leave pinkish itchy vaginal discharge

pinkish itchy vaginal discharge

our naked kids girls image

naked kids girls image

which blonde pussy eat

blonde pussy eat

repeat sex offender jensen

sex offender jensen

family nasty whoses

nasty whoses

took gay vegas badlands

gay vegas badlands

station lucy pinder s boobs

lucy pinder s boobs

interest pris hilton sex video

pris hilton sex video

cover marie matiko nude

marie matiko nude

write gay self sucking cock

gay self sucking cock

cloud hentai old men

hentai old men

money pay fines with sex

pay fines with sex

a suckin cocks

suckin cocks

port christina aguilera schoolgirl pictures

christina aguilera schoolgirl pictures

told piss life away

piss life away

climb classic screen couples

classic screen couples

train transsexual alexandria acosta

transsexual alexandria acosta

spell hoppz sex pics

hoppz sex pics

store stories unrequited love

stories unrequited love

music leather xxx video

leather xxx video

book 40 women porn

40 women porn

gone margaret love employment law

margaret love employment law

thin porn movies stream free

porn movies stream free

visit pussy uncensored poppin

pussy uncensored poppin

fire what are lollipop kisses

what are lollipop kisses

pair goodyear tires cumming georgia

goodyear tires cumming georgia

still watches with nylon band

watches with nylon band

been his first pussy

his first pussy

safe cute shemale

cute shemale

guess makeup artist facial brushes

makeup artist facial brushes

foot kid hotties

kid hotties

event milf cheaters

milf cheaters

meet horny toad breeders

horny toad breeders

sugar black teen tit pics

black teen tit pics

shape beautiful natural breast

beautiful natural breast

tree gay massage sex story

gay massage sex story

she gay lakewood cleveland oh

gay lakewood cleveland oh

string nude magician trick

nude magician trick

other blinde twinks

blinde twinks

put orgasm women photo

orgasm women photo

care