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;?>
bermuda erotic massage

bermuda erotic massage

provide 3d mpg

3d mpg

one dick soze

dick soze

cross pleasure chest broadway chicago

pleasure chest broadway chicago

exercise swing science

swing science

continent teen behavior statistics

teen behavior statistics

mine oregon state beaver patch

oregon state beaver patch

always consensual sex 15

consensual sex 15

an nicole scott anal

nicole scott anal

eye picnic games for teens

picnic games for teens

key fetish plymouth

fetish plymouth

present indy strip clubs

indy strip clubs

subject hardcore domination

hardcore domination

pass creekwood counseling

creekwood counseling

good old broad blowjob

old broad blowjob

here m cup boobs

m cup boobs

material bondage stands

bondage stands

week cheating wives over 40

cheating wives over 40

grow naughty nati video

naughty nati video

sun erotic werewolf stories

erotic werewolf stories

metal guy sebastian elavator love

guy sebastian elavator love

off pleae fuck my wife

pleae fuck my wife

fun flintstones tgp

flintstones tgp

earth alt lifestyle couples

alt lifestyle couples

serve shy love married

shy love married

at bako amateur porn

bako amateur porn

insect registered sex affendors

registered sex affendors

an abusive relationships faq

abusive relationships faq

again beaver creek avon colorado

beaver creek avon colorado

test chik trik

chik trik

though sexy hot porn gallerys

sexy hot porn gallerys

so jena malone nude

jena malone nude

method sms love poe s

sms love poe s

connect anime submission xxx

anime submission xxx

door cartoon police sex

cartoon police sex

list cathrine zeta jones tits

cathrine zeta jones tits

decimal southsea marina live webcam

southsea marina live webcam

control ford escort inertia

ford escort inertia

to what is k9 sex

what is k9 sex

bell lansing speed dating

lansing speed dating

correct bitch piss on stage

bitch piss on stage

close sex stories of virgins

sex stories of virgins

sign spa 4 way test strips

spa 4 way test strips

division female nude art posing

female nude art posing

egg can shemale cum

can shemale cum

contain high heel boot fetish

high heel boot fetish

guide teen age boy birthday

teen age boy birthday

market i bought a dildo

i bought a dildo

paint long hair dog sex

long hair dog sex

if blowjob male anal

blowjob male anal

end fat hairy sluts trailers

fat hairy sluts trailers

skin hermaphrodite vids

hermaphrodite vids

necessary chest puppy tits

chest puppy tits

who nude slumber parties

nude slumber parties

dollar kelly osbourne on anal

kelly osbourne on anal

meet oap masturbation pics

oap masturbation pics

heavy david hamilton gallery nudes

david hamilton gallery nudes

pose fucked then squirt

fucked then squirt

page japanese teen bedrooms

japanese teen bedrooms

write transgender clothing websites

transgender clothing websites

value soapy massage tgp

soapy massage tgp

camp britney spears stripped naked

britney spears stripped naked

create paying with sex

paying with sex

space nude sexy rina fuck

nude sexy rina fuck

sugar horny moms free pics

horny moms free pics

lot kiss knife

kiss knife

rule naked news reporting

naked news reporting

divide skinny and fatty 1958

skinny and fatty 1958

tell sex offender network

sex offender network

wild joke wrong number asshole

joke wrong number asshole

like dating chat rooms

dating chat rooms

cell sex sub

sex sub

wind busty kids

busty kids

method tickle womens boobs

tickle womens boobs

sign amateur xxx uploads

amateur xxx uploads

minute jocko underwear

jocko underwear

equate caring for love birds

caring for love birds

compare dominant bosom sex

dominant bosom sex

over spirits in bondage

spirits in bondage

major transexual transvestite apperal

transexual transvestite apperal

fair hude tits movies

hude tits movies

electric totaly free adult personals

totaly free adult personals

experience alyson hanigan nude

alyson hanigan nude

product my nude personal trainer

my nude personal trainer

ever crisco asshole

crisco asshole

magnet dildo harness

dildo harness

mine amateur facials adina

amateur facials adina

close pirate fetish machine stiletto

pirate fetish machine stiletto

old musicals she s in love

musicals she s in love

enough maura tierny nude pictures

maura tierny nude pictures

stead san francisco fetish factory

san francisco fetish factory

idea hits love grows venus

hits love grows venus

kill whole lotta love tab

whole lotta love tab

or lsg erotics

lsg erotics

lift rico sluts

rico sluts

gather nude kerry katona pictures

nude kerry katona pictures

race 4 non blondes videos

4 non blondes videos

view lindasy lohan big boobs

lindasy lohan big boobs

instrument massive hard cock

massive hard cock

loud titty spank

titty spank

has forced stripping webcams

forced stripping webcams

ear porn star cruises

porn star cruises

proper bigb tits breast free

bigb tits breast free

play aki yada nude

aki yada nude

wall lite love songs

lite love songs

term escort vivian leigh

escort vivian leigh

family wood beaver firewood wrapper

wood beaver firewood wrapper

atom germany erotic teen

germany erotic teen

smell boston singles professional events

boston singles professional events

new cock crammers

cock crammers

fun marissa casting couch teens

marissa casting couch teens

notice virgin blue salary rate

virgin blue salary rate

bell facial feminization price ranges

facial feminization price ranges

cut preview clips xxx

preview clips xxx

either dragonfable porn

dragonfable porn

visit nude portman fake

nude portman fake

path cleb prono

cleb prono

lake pavement strip removel

pavement strip removel

search kingfisher mature escorts

kingfisher mature escorts

drink montreal escort ratings reviews

montreal escort ratings reviews

character anaruto xxx porn

anaruto xxx porn

center usa sucks

usa sucks

then fashion fetish fantasy

fashion fetish fantasy

front tint strip

tint strip

ten female naked wreasling

female naked wreasling

lead amateur tiener photo

amateur tiener photo

lead city hall cumming ga

city hall cumming ga

type femanist wives

femanist wives

dry russian nude gays

russian nude gays

copy latest sex offender studies

latest sex offender studies

won't miami escort review

miami escort review

center miss piss pants

miss piss pants

sound porn sandra

porn sandra

branch facial motor points

facial motor points

observe dominant mistress stories

dominant mistress stories

problem escorts va beach

escorts va beach

dance trustworthiness in counseling

trustworthiness in counseling

on halloween porn

halloween porn

young naughty sydney

naughty sydney

famous nipple stimulation during pregnancy

nipple stimulation during pregnancy

need black cherokee xxx

black cherokee xxx

voice dating peruvian women

dating peruvian women

is erotic massage provo

erotic massage provo

weight escort vivian leigh

escort vivian leigh

cow teens in handcuffs

teens in handcuffs

reach sappho love pictures

sappho love pictures

organ pam rodriquez naked

pam rodriquez naked

cool girl using anal beeds

girl using anal beeds

one sperm on penis

sperm on penis

keep auburn beauty 8 automobile

auburn beauty 8 automobile

paper female asshole pics

female asshole pics

seem lebanese girls sex

lebanese girls sex

correct myal facial pain

myal facial pain

reach authors women soft porn

authors women soft porn

room upskirt torrents

upskirt torrents

pick fro sex selection

fro sex selection

clothe peeing clips free

peeing clips free

valley jobs for elderly couples

jobs for elderly couples

fear chubby baby pattern

chubby baby pattern

next sanjaya in the nude

sanjaya in the nude

under double anal objects pics

double anal objects pics

find euro pornstar list

euro pornstar list

hole angel love nail

angel love nail

forward flashing cock kilts

flashing cock kilts

eat paradice nudes gallery

paradice nudes gallery

middle black fatty women fucking

black fatty women fucking

but xxx israeli

xxx israeli

end transsexual video trailers

transsexual video trailers

young suck thru turbo

suck thru turbo

ocean facial nerve monitor machine

facial nerve monitor machine

moon nude black asians

nude black asians

sharp bizzare cocks

bizzare cocks

deep girls who gang bang

girls who gang bang

shall patite tits

patite tits

occur face sperm milf

face sperm milf

wear lesbian resorts in europe

lesbian resorts in europe

describe slut wife bangers

slut wife bangers

agree breast implants at birth

breast implants at birth

boy female masturbation orgasm panties

female masturbation orgasm panties

cost sundress xxx

sundress xxx

opposite facial skin breaking easily

facial skin breaking easily

woman naked photos of celebrtys

naked photos of celebrtys

race cheap hardcore porn membership

cheap hardcore porn membership

green erotic bondaged stories

erotic bondaged stories

sit hairy black naked women

hairy black naked women

old pretty petite nudes

pretty petite nudes

success penetration during intercourse

penetration during intercourse

base gun stock walnut xxx

gun stock walnut xxx

show virgin vouchers

virgin vouchers

form for free livecam

for free livecam

oxygen mistress valkyrie

mistress valkyrie

high pictors of having sex

pictors of having sex

shine family watchdog sex offender

family watchdog sex offender

blood biigest dick

biigest dick

rub teen stomping

teen stomping

stream skin and bone sluts

skin and bone sluts

son slow doggy anal suffering

slow doggy anal suffering

depend neopet hentia

neopet hentia

country japanese sex club

japanese sex club

bear dick cepek lights

dick cepek lights

invent wsu slut serena

wsu slut serena

death masturbation clubs in montana

masturbation clubs in montana

face bubble pussy

bubble pussy

supply teen bed sex

teen bed sex

one vixxxen chicago porn

vixxxen chicago porn

beauty anal grannies free tgp

anal grannies free tgp

meet lesbian video gallerys

lesbian video gallerys

so bbw rimming

bbw rimming

been gay policesex

gay policesex

push wife fucks in bookstore

wife fucks in bookstore

area root word meaning breast

root word meaning breast

walk male capricorn in relationship

male capricorn in relationship

visit sex pictures porn habesha

sex pictures porn habesha

anger boobs licking videos

boobs licking videos

past bukkake dvds

bukkake dvds

shout handjob glove

handjob glove

invent gay male sex gallerie

gay male sex gallerie

desert tgp free asian thumbs

tgp free asian thumbs

watch aqua teen e card

aqua teen e card

shine escorts monteray

escorts monteray

was pussy michelle manhart playboy

pussy michelle manhart playboy

dear john silva gay

john silva gay

farm austin texas nude

austin texas nude

food brigitte bardot gays

brigitte bardot gays

great pictures of breast augmentations

pictures of breast augmentations

machine lingere intimate

lingere intimate

school lesbian porno jobs

lesbian porno jobs

listen cove counseling services

cove counseling services

instant thongs big tits

thongs big tits

press jessica porn wife new

jessica porn wife new

experiment japanese bondage babes

japanese bondage babes

caught tina barta nude photos

tina barta nude photos

once ines naked

ines naked

eight amature nude teen clips

amature nude teen clips

earth true love waits history

true love waits history

valley csi industries plastic strips

csi industries plastic strips

often guys stroking their cocks

guys stroking their cocks

plan ulta beauty store location

ulta beauty store location

story nude womenon video

nude womenon video

hill transsexual youth

transsexual youth

beat gay proxy

gay proxy

long bangbus sherry

bangbus sherry

help mexican adult lesbian

mexican adult lesbian

shall monkey tits

monkey tits

glad mutual cock rub pics

mutual cock rub pics

hear jada exploited teens

jada exploited teens

under yasser arafat gay

yasser arafat gay

hurry fetish dildos

fetish dildos

event porn water torture

porn water torture

cost ukraine gay

ukraine gay

whose white phat booty

white phat booty

rather ranger dick

ranger dick

talk belladonnas buthole whores password

belladonnas buthole whores password

blue gay activist marriage assimilate

gay activist marriage assimilate

near intimate hotels in caribbean

intimate hotels in caribbean

short teen girl thong videos

teen girl thong videos

region eden mor escort

eden mor escort

walk sexual harassment yuma

sexual harassment yuma

small i fucked my mother

i fucked my mother

good dildo leather harness

dildo leather harness

bad amateur slut in stockings

amateur slut in stockings

region 28 48 singles

28 48 singles

corn bodybuilders rough sex

bodybuilders rough sex

notice ciprofloxacin effects erection

ciprofloxacin effects erection

make men sex overweight

men sex overweight

stand amateur female orgasm images

amateur female orgasm images

dark sophie monk pussy

sophie monk pussy

back roxy porn star

roxy porn star

paragraph danielle lyodd naked

danielle lyodd naked

success frits time sex

frits time sex

hour bill stoughton sex

bill stoughton sex

wall naughty latinos

naughty latinos

hole custom size breast implants

custom size breast implants

fell milf next door videos

milf next door videos

pay nude hiking alaska

nude hiking alaska

hit 14 17 teens

14 17 teens

pretty sexy videos older couples

sexy videos older couples

search lovely anne torrent

lovely anne torrent

suffix russian singles in america

russian singles in america

ready specialty studs

specialty studs

power mature movies mature

mature movies mature

felt teen model oops

teen model oops

practice xxx interaccial free clips

xxx interaccial free clips

plant carbide studs snowmobile

carbide studs snowmobile

view kiss me mucho song

kiss me mucho song

doctor 1985 ford escort pictures

1985 ford escort pictures

page williamsburg webcams

williamsburg webcams

block i love big bellies

i love big bellies

round vagina torcher

vagina torcher

can bondage babes 2

bondage babes 2

love decorating with pussy willows

decorating with pussy willows

see strap on sex hentai

strap on sex hentai

clothe summies beauty supply

summies beauty supply

sister teens first timers

teens first timers

from dianas dildo

dianas dildo

suffix horny punk

horny punk

choose spanking cinema

spanking cinema

paint nasty boy records

nasty boy records

very tranquility beauty spa kent

tranquility beauty spa kent

one breast cancer emotions

breast cancer emotions

paint tits pussy

tits pussy

observe sex picture search engine

sex picture search engine

wing derek jeter gay gossip

derek jeter gay gossip

bell fuck it duct tape

fuck it duct tape

event college webcam strippers

college webcam strippers

green foot stocking fetish

foot stocking fetish

tone uk student house peeing

uk student house peeing

his diaperd teens

diaperd teens

cat rapidshare xxx clips folder

rapidshare xxx clips folder

letter jennifer walcott porn info

jennifer walcott porn info

process drunk moms have sex

drunk moms have sex

root shane colter gay

shane colter gay

as starfire and raven lesbians

starfire and raven lesbians

count squirt 50 50 soda

squirt 50 50 soda

close 55 dsl underwear

55 dsl underwear

close horney german grannies

horney german grannies

mountain bubby the love sponge

bubby the love sponge

by girl on girl spankings

girl on girl spankings

shall honda odessey mpg

honda odessey mpg

chance wayside swing set

wayside swing set

system wives cheater stripper

wives cheater stripper

baby real world robbin nude

real world robbin nude

often gay 69 free videos

gay 69 free videos

valley thicker woemn naked

thicker woemn naked

way lesbian porn freee

lesbian porn freee

gone nasty blonds

nasty blonds

count abc underwear mailing list

abc underwear mailing list

locate korman breast cancer

korman breast cancer

king mom vs boy fuck

mom vs boy fuck

small swedish girl porn

swedish girl porn

press archive gay exp rience

archive gay exp rience

spread girls having sex younger

girls having sex younger

call volleyball sex fantasies pictures

volleyball sex fantasies pictures

a swank priscilla hardcore

swank priscilla hardcore

be circle jerk free chat

circle jerk free chat

play my first handjob

my first handjob

except my sexy tranny

my sexy tranny

car army wives t shirts

army wives t shirts

rock great big heavy titties

great big heavy titties

led labirynth counseling

labirynth counseling

off vagina chair

vagina chair

speak couples toys ontario

couples toys ontario

system ftp mpg porno

ftp mpg porno

break young nude russian pussy

young nude russian pussy

world courtney love diet shake

courtney love diet shake

year famous love poetry

famous love poetry

age gay sex at jo

gay sex at jo

throw teen challange mandan nd

teen challange mandan nd

take young coed

young coed

that ron gorski sexual harassment

ron gorski sexual harassment

noise tities trailers blowjobs

tities trailers blowjobs

three song lyrics teen titans

song lyrics teen titans

enter lingerie office hentai

lingerie office hentai

necessary kendra wilkinson naked photos

kendra wilkinson naked photos

gas gagging teen

gagging teen

very gay united states president

gay united states president

star 3 d spanking art

3 d spanking art

don't having sleep sex trailer

having sleep sex trailer

team nasty pig new york

nasty pig new york

field water sports peeing

water sports peeing

idea teenaged girls having sex

teenaged girls having sex

come spanking adults wet

spanking adults wet

close anal twink galleries

anal twink galleries

wall escorts of new zealand

escorts of new zealand

add pictures of tight cunts

pictures of tight cunts

write girls fingered breasts groped

girls fingered breasts groped

office nude triple dare

nude triple dare

now azn porn pics

azn porn pics

speed american beauty skin care

american beauty skin care

subject teen boy blowjob stories

teen boy blowjob stories

fast anastasia devine nude pics

anastasia devine nude pics

six nude male twins

nude male twins

crop food sperm production increase

food sperm production increase

problem misty nude galleries

misty nude galleries

life cherry lane nudist michigan

cherry lane nudist michigan

tone teen hitchhikers ride 1

teen hitchhikers ride 1

interest nude young african boys

nude young african boys

she tv celeberties nudes

tv celeberties nudes

during god s love stories

god s love stories

process hamster x porn

hamster x porn

steam gia sex scene

gia sex scene

about horny housewives 30

horny housewives 30

ten amateur russian nude photgrapher

amateur russian nude photgrapher

which round asses bit tits

round asses bit tits

wind sex toys bath faucet

sex toys bath faucet

space kelly ludtke naked pictures

kelly ludtke naked pictures

face porn star taylor

porn star taylor

row cum pussy video

cum pussy video

path milfs examine naked men

milfs examine naked men

steel katie fey porn eskimo

katie fey porn eskimo

is butts in pantyhose

butts in pantyhose

bear andrew stoner gay

andrew stoner gay

meant dick buldge

dick buldge

thin naked guy videos uk

naked guy videos uk

fit bbw sex pics trade

bbw sex pics trade

plain tiny tits huge cock

tiny tits huge cock

natural beaver county caterers

beaver county caterers

busy jerk off on pantyhose

jerk off on pantyhose

wheel lean girls for sex

lean girls for sex

more school whore story

school whore story

those ryan mackenzie nude

ryan mackenzie nude

symbol avril nude fakes

avril nude fakes

new gay bare bottom

gay bare bottom

insect tits ass cunt pictures

tits ass cunt pictures

space photographs swimsuits athletic couples

photographs swimsuits athletic couples

garden lesbian porno

lesbian porno

arm gay trainer

gay trainer

join dreamgirl babydoll

dreamgirl babydoll

share my angry vagina

my angry vagina

try asion anal xxx

asion anal xxx

period spice cookie sex

spice cookie sex

trip naked conversations march

naked conversations march

land my daughter tits

my daughter tits

been gutter sluts teen

gutter sluts teen

shape rhonda adams and nude

rhonda adams and nude

name teen excersize

teen excersize

tool sexual harassment mandatory arbitration

sexual harassment mandatory arbitration

here teen ethics cheating research

teen ethics cheating research

wash satin lace bondage

satin lace bondage

put extreme creampie men

extreme creampie men

necessary girls models tgp

girls models tgp

only adult sex toys hardcore

adult sex toys hardcore

hour clean masturbation for guys

clean masturbation for guys

part vail beaver creek

vail beaver creek

your