--- /dev/null
+#!/usr/bin/env perl\r
+\r
+#####\r
+# FCKeditor - The text editor for Internet - http://www.fckeditor.net\r
+# Copyright (C) 2003-2007 Frederico Caldeira Knabben\r
+#\r
+# == BEGIN LICENSE ==\r
+#\r
+# Licensed under the terms of any of the following licenses at your\r
+# choice:\r
+#\r
+# - GNU General Public License Version 2 or later (the "GPL")\r
+# http://www.gnu.org/licenses/gpl.html\r
+#\r
+# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")\r
+# http://www.gnu.org/licenses/lgpl.html\r
+#\r
+# - Mozilla Public License Version 1.1 or later (the "MPL")\r
+# http://www.mozilla.org/MPL/MPL-1.1.html\r
+#\r
+# == END LICENSE ==\r
+#\r
+# This is the File Manager Connector for Perl.\r
+#####\r
+\r
+##\r
+# ATTENTION: To enable this connector, look for the "SECURITY" comment in this file.\r
+##\r
+\r
+## START: Hack for Windows (Not important to understand the editor code... Perl specific).\r
+if(Windows_check()) {\r
+ chdir(GetScriptPath($0));\r
+}\r
+\r
+sub Windows_check\r
+{\r
+ # IIS,PWS(NT/95)\r
+ $www_server_os = $^O;\r
+ # Win98 & NT(SP4)\r
+ if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }\r
+ # AnHTTPd/Omni/IIS\r
+ if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }\r
+ # Win Apache\r
+ if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }\r
+ if($www_server_os=~ /win/i) { return(1); }\r
+ return(0);\r
+}\r
+\r
+sub GetScriptPath {\r
+ local($path) = @_;\r
+ if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }\r
+ $path;\r
+}\r
+## END: Hack for IIS\r
+\r
+require 'util.pl';\r
+require 'io.pl';\r
+require 'basexml.pl';\r
+require 'commands.pl';\r
+require 'upload_fck.pl';\r
+\r
+##\r
+# SECURITY: REMOVE/COMMENT THE FOLLOWING LINE TO ENABLE THIS CONNECTOR.\r
+##\r
+&SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/browser/default/connectors/perl/connector.cgi" file' ) ;\r
+\r
+ &read_input();\r
+\r
+ if($FORM{'ServerPath'} ne "") {\r
+ $GLOBALS{'UserFilesPath'} = $FORM{'ServerPath'};\r
+ if(!($GLOBALS{'UserFilesPath'} =~ /\/$/)) {\r
+ $GLOBALS{'UserFilesPath'} .= '/' ;\r
+ }\r
+ } else {\r
+ $GLOBALS{'UserFilesPath'} = '/userfiles/';\r
+ }\r
+\r
+ # Map the "UserFiles" path to a local directory.\r
+ $rootpath = &GetRootPath();\r
+ $GLOBALS{'UserFilesDirectory'} = $rootpath . $GLOBALS{'UserFilesPath'};\r
+\r
+ &DoResponse();\r
+\r
+sub DoResponse\r
+{\r
+\r
+ if($FORM{'Command'} eq "" || $FORM{'Type'} eq "" || $FORM{'CurrentFolder'} eq "") {\r
+ return ;\r
+ }\r
+ # Get the main request informaiton.\r
+ $sCommand = $FORM{'Command'};\r
+ $sResourceType = $FORM{'Type'};\r
+ $sCurrentFolder = $FORM{'CurrentFolder'};\r
+\r
+ # Check the current folder syntax (must begin and start with a slash).\r
+ if(!($sCurrentFolder =~ /\/$/)) {\r
+ $sCurrentFolder .= '/';\r
+ }\r
+ if(!($sCurrentFolder =~ /^\//)) {\r
+ $sCurrentFolder = '/' . $sCurrentFolder;\r
+ }\r
+\r
+ # Check for invalid folder paths (..)\r
+ if ( $sCurrentFolder =~ /\.\./ ) {\r
+ SendError( 102, "" ) ;\r
+ }\r
+\r
+ # File Upload doesn't have to Return XML, so it must be intercepted before anything.\r
+ if($sCommand eq 'FileUpload') {\r
+ FileUpload($sResourceType,$sCurrentFolder);\r
+ return ;\r
+ }\r
+\r
+ print << "_HTML_HEAD_";\r
+Content-Type:text/xml; charset=utf-8\r
+Pragma: no-cache\r
+Cache-Control: no-cache\r
+Expires: Thu, 01 Dec 1994 16:00:00 GMT\r
+\r
+_HTML_HEAD_\r
+\r
+ &CreateXmlHeader($sCommand,$sResourceType,$sCurrentFolder);\r
+\r
+ # Execute the required command.\r
+ if($sCommand eq 'GetFolders') {\r
+ &GetFolders($sResourceType,$sCurrentFolder);\r
+ } elsif($sCommand eq 'GetFoldersAndFiles') {\r
+ &GetFoldersAndFiles($sResourceType,$sCurrentFolder);\r
+ } elsif($sCommand eq 'CreateFolder') {\r
+ &CreateFolder($sResourceType,$sCurrentFolder);\r
+ }\r
+\r
+ &CreateXmlFooter();\r
+\r
+ exit ;\r
+}\r
+\r