| 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). |
|---|
| 31 | if(Windows_check()) { |
|---|
| 32 | chdir(GetScriptPath($0)); |
|---|
| 33 | } |
|---|
| 34 | |
|---|
| 35 | sub 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 | |
|---|
| 49 | sub GetScriptPath { |
|---|
| 50 | local($path) = @_; |
|---|
| 51 | if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; } |
|---|
| 52 | $path; |
|---|
| 53 | } |
|---|
| 54 | ## END: Hack for IIS |
|---|
| 55 | |
|---|
| 56 | require 'util.pl'; |
|---|
| 57 | require 'io.pl'; |
|---|
| 58 | require 'basexml.pl'; |
|---|
| 59 | require 'commands.pl'; |
|---|
| 60 | require '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/browser/default/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 | |
|---|
| 84 | sub 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_"; |
|---|
| 115 | Content-Type:text/xml; charset=utf-8 |
|---|
| 116 | Pragma: no-cache |
|---|
| 117 | Cache-Control: no-cache |
|---|
| 118 | Expires: 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 | |
|---|