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 &SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/connectors/perl/connector.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 87 if($FORM{'Command'} eq "" || $FORM{'Type'} eq "" || $FORM{'CurrentFolder'} eq "") { 88 return ; 89 } 90 # Get the main request informaiton. 91 $sCommand = $FORM{'Command'}; 92 $sResourceType = $FORM{'Type'}; 93 $sCurrentFolder = $FORM{'CurrentFolder'}; 94 95 # Check the current folder syntax (must begin and start with a slash). 96 if(!($sCurrentFolder =~ /\/$/)) { 97 $sCurrentFolder .= '/'; 98 } 99 if(!($sCurrentFolder =~ /^\//)) { 100 $sCurrentFolder = '/' . $sCurrentFolder; 101 } 102 103 # Check for invalid folder paths (..) 104 if ( $sCurrentFolder =~ /\.\./ ) { 105 SendError( 102, "" ) ; 106 } 107 108 # File Upload doesn't have to Return XML, so it must be intercepted before anything. 109 if($sCommand eq 'FileUpload') { 110 FileUpload($sResourceType,$sCurrentFolder); 111 return ; 112 } 113 114 print << "_HTML_HEAD_"; 115Content-Type:text/xml; charset=utf-8 116Pragma: no-cache 117Cache-Control: no-cache 118Expires: Thu, 01 Dec 1994 16:00:00 GMT 119 120_HTML_HEAD_ 121 122 &CreateXmlHeader($sCommand,$sResourceType,$sCurrentFolder); 123 124 # Execute the required command. 125 if($sCommand eq 'GetFolders') { 126 &GetFolders($sResourceType,$sCurrentFolder); 127 } elsif($sCommand eq 'GetFoldersAndFiles') { 128 &GetFoldersAndFiles($sResourceType,$sCurrentFolder); 129 } elsif($sCommand eq 'CreateFolder') { 130 &CreateFolder($sResourceType,$sCurrentFolder); 131 } 132 133 &CreateXmlFooter(); 134 135 exit ; 136} 137 138