1#!/usr/bin/env perl 2 3##### 4# FCKeditor - The text editor for Internet - http://www.fckeditor.net 5# Copyright (C) 2003-2007 Frederico Caldeira Knabben 6# 7# == BEGIN LICENSE == 8# 9# Licensed under the terms of any of the following licenses at your 10# choice: 11# 12# - GNU General Public License Version 2 or later (the "GPL") 13# http://www.gnu.org/licenses/gpl.html 14# 15# - GNU Lesser General Public License Version 2.1 or later (the "LGPL") 16# http://www.gnu.org/licenses/lgpl.html 17# 18# - Mozilla Public License Version 1.1 or later (the "MPL") 19# http://www.mozilla.org/MPL/MPL-1.1.html 20# 21# == END LICENSE == 22# 23# This is the File Manager Connector for Perl. 24##### 25 26## 27# ATTENTION: To enable this connector, look for the "SECURITY" comment in this file. 28## 29 30## START: Hack for Windows (Not important to understand the editor code... Perl specific). 31if(Windows_check()) { 32 chdir(GetScriptPath($0)); 33} 34 35sub Windows_check 36{ 37 # IIS,PWS(NT/95) 38 $www_server_os = $^O; 39 # Win98 & NT(SP4) 40 if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; } 41 # AnHTTPd/Omni/IIS 42 if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; } 43 # Win Apache 44 if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; } 45 if($www_server_os=~ /win/i) { return(1); } 46 return(0); 47} 48 49sub GetScriptPath { 50 local($path) = @_; 51 if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; } 52 $path; 53} 54## END: Hack for IIS 55 56require 'util.pl'; 57require 'io.pl'; 58require 'basexml.pl'; 59require 'commands.pl'; 60require 'upload_fck.pl'; 61 62## 63# SECURITY: REMOVE/COMMENT THE FOLLOWING LINE TO ENABLE THIS CONNECTOR. 64## 65 &SendUploadResults(1, '', '', 'This connector is disabled. Please check the "editor/filemanager/connectors/perl/upload.cgi" file' ) ; 66 67 &read_input(); 68 69 if($FORM{'ServerPath'} ne "") { 70 $GLOBALS{'UserFilesPath'} = $FORM{'ServerPath'}; 71 if(!($GLOBALS{'UserFilesPath'} =~ /\/$/)) { 72 $GLOBALS{'UserFilesPath'} .= '/' ; 73 } 74 } else { 75 $GLOBALS{'UserFilesPath'} = '/userfiles/'; 76 } 77 78 # Map the "UserFiles" path to a local directory. 79 $rootpath = &GetRootPath(); 80 $GLOBALS{'UserFilesDirectory'} = $rootpath . $GLOBALS{'UserFilesPath'}; 81 82 &DoResponse(); 83 84sub DoResponse 85{ 86 # Get the main request information. 87 $sCommand = 'FileUpload'; #$FORM{'Command'}; 88 $sResourceType = $FORM{'Type'}; 89 $sCurrentFolder = $FORM{'CurrentFolder'}; 90 91 if ($sResourceType eq '') { 92 $sResourceType = 'File' ; 93 } 94 if ($sCurrentFolder eq '') { 95 $sCurrentFolder = '/' ; 96 } 97 98 # Check the current folder syntax (must begin and start with a slash). 99 if(!($sCurrentFolder =~ /\/$/)) { 100 $sCurrentFolder .= '/'; 101 } 102 if(!($sCurrentFolder =~ /^\//)) { 103 $sCurrentFolder = '/' . $sCurrentFolder; 104 } 105 106 # Check for invalid folder paths (..) 107 if ( $sCurrentFolder =~ /\.\./ ) { 108 SendError( 102, "" ) ; 109 } 110 111 # File Upload doesn't have to Return XML, so it must be intercepted before anything. 112 if($sCommand eq 'FileUpload') { 113 FileUpload($sResourceType,$sCurrentFolder); 114 return ; 115 } 116 117} 118 119