<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">#!C:/Programme/Perl/bin/perl.exe -w

#
# Dev-Editor 2.0 (CVS)
#
# Dev-Editor's main program
#
# Author:        Patrick Canterino &lt;patshaping@gmx.net&gt;
# Last modified: 2004-07-04
#

use strict;
use CGI::Carp qw(fatalsToBrowser);

use vars qw($VERSION);
use lib 'modules';

use CGI;
use Config::DevEdit;
use File::UseList;

use Command;
use Output;
use Tool;

$VERSION = '2.0 (CVS)';

# Path to configuration file
# Change if necessary!

use constant CONFIGFILE =&gt; 'devedit.dat';

# Read the configuration file

my $config = read_config(CONFIGFILE);
error_template($config-&gt;{'templates'}-&gt;{'error'}); # Yes, I'm lazy...

# Read the most important form data

my $cgi = new CGI;

my $command = $cgi-&gt;param('command') || 'show';
my $file    = $cgi-&gt;param('file')    || '/';
my $curdir  = $cgi-&gt;param('curdir')  || '';
my $newfile = $cgi-&gt;param('newfile') || '';

# Create physical and virtual path for the new file
# This section has to be optimized - ugh!

my $new_physical = '';
my $new_virtual  = '';

if($newfile ne '')
{
 $curdir  = upper_path($file) if($curdir eq '');
 my $path = clean_path($curdir.$newfile);

 # Extract file and directory name...

 my $file = file_name($path);
 my $dir  = upper_path($path);

 # ... check if the directory exists ...

 unless(-d clean_path($config-&gt;{'fileroot'}."/".$dir))
 {
  abort($config-&gt;{'errors'}-&gt;{'dir_not_exist'});
 }

 # ... and check if the path is above the root directory

 unless(($new_physical,$new_virtual) = check_path($config-&gt;{'fileroot'},$dir))
 {
  abort($config-&gt;{'errors'}-&gt;{'create_ar'});
 }

 # Create the physical and the virtual path

 $new_physical = File::Spec-&gt;canonpath($new_physical."/".$file);
 $new_virtual .= $file;
}

# This check has to be performed first, or abs_path() will be confused

if(-e clean_path($config-&gt;{'fileroot'}."/".$file))
{
 if(my ($physical,$virtual) = check_path($config-&gt;{'fileroot'},$file))
 {
  # Create a File::UseList object and load the list

  my $uselist = new File::UseList(listfile =&gt; $config-&gt;{'uselist_file'},
                                  lockfile =&gt; $config-&gt;{'lock_file'},
                                  timeout  =&gt; $config-&gt;{'lock_timeout'});

  $uselist-&gt;lock or abort($config-&gt;{'errors'}-&gt;{'lock_failed'},{USELIST =&gt; $config-&gt;{'uselist_file'}, LOCK_FILE =&gt; $config-&gt;{'lock_file'}});
  $uselist-&gt;load;

  # Create a hash with data submitted by user
  # (some other necessary information will also be included)

  my %data = (physical     =&gt; $physical,
              virtual      =&gt; $virtual,
              new_physical =&gt; $new_physical,
              new_virtual  =&gt; $new_virtual,
              uselist      =&gt; $uselist,
              cgi          =&gt; $cgi,
              version      =&gt; $VERSION,
              configfile   =&gt; CONFIGFILE);

  my $output = exec_command($command,\%data,$config); # Execute the command...

  $uselist-&gt;unlock; # ... unlock the list with files in use...
  print $$output;   # ... and show the output of the command
 }
 else
 {
  abort($config-&gt;{'errors'}-&gt;{'above_root'});
 }
}
else
{
 abort($config-&gt;{'errors'}-&gt;{'not_exist'});
}

#
### End ###</pre></body></html>