1
|
#!/usr/bin/env perl
|
2
|
|
3
|
#####
|
4
|
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
5
|
# Copyright (C) 2003-2009 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 config.pl.
|
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
|
require 'config.pl';
|
62
|
|
63
|
&read_input();
|
64
|
&DoResponse();
|
65
|
|
66
|
sub DoResponse
|
67
|
{
|
68
|
|
69
|
if($FORM{'Command'} eq "" || $FORM{'Type'} eq "" || $FORM{'CurrentFolder'} eq "") {
|
70
|
return ;
|
71
|
}
|
72
|
# Get the main request informaiton.
|
73
|
$sCommand = &specialchar_cnv($FORM{'Command'});
|
74
|
$sResourceType = &specialchar_cnv($FORM{'Type'});
|
75
|
$sCurrentFolder = $FORM{'CurrentFolder'};
|
76
|
|
77
|
if ( !($sCommand =~ /^(FileUpload|GetFolders|GetFoldersAndFiles|CreateFolder)$/) ) {
|
78
|
SendError( 1, "Command not allowed" ) ;
|
79
|
}
|
80
|
|
81
|
if ( !($sResourceType =~ /^(File|Image|Flash|Media)$/) ) {
|
82
|
SendError( 1, "Invalid type specified" ) ;
|
83
|
}
|
84
|
|
85
|
# Check the current folder syntax (must begin and start with a slash).
|
86
|
if(!($sCurrentFolder =~ /\/$/)) {
|
87
|
$sCurrentFolder .= '/';
|
88
|
}
|
89
|
if(!($sCurrentFolder =~ /^\//)) {
|
90
|
$sCurrentFolder = '/' . $sCurrentFolder;
|
91
|
}
|
92
|
|
93
|
# Check for invalid folder paths (..)
|
94
|
if ( $sCurrentFolder =~ /(?:\.\.|\\)/ ) {
|
95
|
SendError( 102, "" ) ;
|
96
|
}
|
97
|
if ( $sCurrentFolder =~ /(\/\.)|[[:cntrl:]]|(\/\/)|(\\\\)|([\:\*\?\"\<\>\|])/ ) {
|
98
|
SendError( 102, "" ) ;
|
99
|
}
|
100
|
|
101
|
# File Upload doesn't have to Return XML, so it must be intercepted before anything.
|
102
|
if($sCommand eq 'FileUpload') {
|
103
|
FileUpload($sResourceType,$sCurrentFolder);
|
104
|
return ;
|
105
|
}
|
106
|
|
107
|
print << "_HTML_HEAD_";
|
108
|
Content-Type:text/xml; charset=utf-8
|
109
|
Pragma: no-cache
|
110
|
Cache-Control: no-cache
|
111
|
Expires: Thu, 01 Dec 1994 16:00:00 GMT
|
112
|
|
113
|
_HTML_HEAD_
|
114
|
|
115
|
&CreateXmlHeader($sCommand,$sResourceType,$sCurrentFolder);
|
116
|
|
117
|
# Execute the required command.
|
118
|
if($sCommand eq 'GetFolders') {
|
119
|
&GetFolders($sResourceType,$sCurrentFolder);
|
120
|
} elsif($sCommand eq 'GetFoldersAndFiles') {
|
121
|
&GetFoldersAndFiles($sResourceType,$sCurrentFolder);
|
122
|
} elsif($sCommand eq 'CreateFolder') {
|
123
|
&CreateFolder($sResourceType,$sCurrentFolder);
|
124
|
}
|
125
|
|
126
|
&CreateXmlFooter();
|
127
|
|
128
|
exit ;
|
129
|
}
|