From 5a4bc87c675dd76627a0d413707139f2e0530eea Mon Sep 17 00:00:00 2001 From: pcanterino <> Date: Sat, 17 Jan 2004 18:13:32 +0000 Subject: [PATCH] Now, we are using an extern configuration file. The format of the configuration file is INI-like, but it has no sections and uses the #-sign for comments. Currently, the parser is very simple. It doesn't support quotation marks around the keys and values, for example. --- devedit.dat | 13 ++++++++ devedit.pl | 39 +++++++++------------- modules/Config/DevEdit.pm | 70 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 23 deletions(-) create mode 100644 devedit.dat create mode 100644 modules/Config/DevEdit.pm diff --git a/devedit.dat b/devedit.dat new file mode 100644 index 0000000..63f2928 --- /dev/null +++ b/devedit.dat @@ -0,0 +1,13 @@ +# This is the configuration file of Dev-Editor +# All the settings are explained in the ReadMe file +# +# Please don't use quotation marks around the keys and values! + +fileroot = D:/Server/WWW/dokumente/devedit-test +httproot = /devedit-test/ +timeformat = %d.%m.%Y %H:%M +uselist_file = uselist +lock_file = uselist.lock +lock_timeout = 10 + +# End of configuration file \ No newline at end of file diff --git a/devedit.pl b/devedit.pl index 62ef34d..a525ec0 100644 --- a/devedit.pl +++ b/devedit.pl @@ -6,34 +6,27 @@ # Dev-Editor's main program # # Author: Patrick Canterino -# Last modified: 2003-12-02 +# Last modified: 2004-01-16 # use strict; use CGI::Carp qw(fatalsToBrowser); -use vars qw(%config); - use lib 'modules'; use CGI; -use Command; +use Config::DevEdit; use File::UseList; + +use Command; use Output; use Tool; -### Settings ### +use constant CONFIGFILE => 'devedit.dat'; -%config = ( - fileroot => 'D:/Server/WWW/dokumente/devedit-test', - httproot => '/devedit-test/', - timeformat => '%d.%m.%Y %H:%M', - uselist_file => 'uselist', - lock_file => 'uselist.lock', - lock_timeout => '10' - ); +# Read the configuration file -### End Settings ### +my $config = read_config(CONFIGFILE); # Read the most important form data @@ -62,14 +55,14 @@ if($newfile ne '') # ... check if the directory exists ... - unless(-d clean_path($config{'fileroot'}."/".$dir)) + unless(-d clean_path($config->{'fileroot'}."/".$dir)) { abort("The directory where you want to create this file or directory doesn't exist."); } # ... and check if the path is above the root directory - unless(($new_physical,$new_virtual) = check_path($config{'fileroot'},$dir)) + unless(($new_physical,$new_virtual) = check_path($config->{'fileroot'},$dir)) { abort("You aren't allowed to create files and directories above the virtual root directory."); } @@ -82,17 +75,17 @@ if($newfile ne '') # This check has to be performed first, or abs_path() will be confused -if(-e clean_path($config{'fileroot'}."/".$file)) +if(-e clean_path($config->{'fileroot'}."/".$file)) { - if(my ($physical,$virtual) = check_path($config{'fileroot'},$file)) + if(my ($physical,$virtual) = check_path($config->{'fileroot'},$file)) { # Create a File::UseList object and load the list - my $uselist = new File::UseList(listfile => $config{'uselist_file'}, - lockfile => $config{'lock_file'}, - timeout => $config{'lock_timeout'}); + my $uselist = new File::UseList(listfile => $config->{'uselist_file'}, + lockfile => $config->{'lock_file'}, + timeout => $config->{'lock_timeout'}); - $uselist->lock or abort("Locking of $config{'uselist_file'} failed. Try it again in a moment. If the problem persists, ask someone to recreate the lock file ($config{'lock_file'})."); + $uselist->lock or abort("Locking of $config->{'uselist_file'} failed. Try it again in a moment. If the problem persists, ask someone to recreate the lock file ($config->{'lock_file'})."); $uselist->load; # Create a hash with data submitted by user @@ -105,7 +98,7 @@ if(-e clean_path($config{'fileroot'}."/".$file)) uselist => $uselist, cgi => $cgi); - my $output = exec_command($command,\%data,\%config); # Execute the command... + my $output = exec_command($command,\%data,$config); # Execute the command... $uselist->unlock; # ... unlock the list with files in use... print $$output; # ... and print the output of the command diff --git a/modules/Config/DevEdit.pm b/modules/Config/DevEdit.pm new file mode 100644 index 0000000..8adfd35 --- /dev/null +++ b/modules/Config/DevEdit.pm @@ -0,0 +1,70 @@ +package Config::DevEdit; + +# +# Dev-Editor - Module Config::DevEdit +# +# Parse the configuration file +# +# Author: Patrick Canterino +# Last modified: 2004-01-16 +# + +use strict; + +use vars qw(@EXPORT); +use Carp qw(croak); + +### Export ### + +use base qw(Exporter); + +@EXPORT = qw(read_config); + +# read_config() +# +# Parse the configuration file +# +# Params: Path to configuration file +# +# Return: Configuration (Hash Reference) + +sub read_config($) +{ + my $file = shift; + local *CF; + + open(CF,"<$file") or croak("Open $file: $!"); + read(CF, my $data, -s $file); + close(CF); + + my @lines = split(/\015\012|\012|\015/,$data); + my $config = {}; + + foreach my $line(@lines) + { + next if($line =~ /^\s*#/); + next if($line !~ /^.+=.+$/); + + my ($key,$value) = split(/=/,$line,2); + + # Remove whitespaces at the beginning and at the end + + $key =~ s/^\s*//g; + $key =~ s/\s*$//g; + $value =~ s/^\s*//g; + $value =~ s/\s*$//g; + + croak "Double defined value '$key' in configuration file '$file'" if($config->{$key}); + + $config->{$key} = $value; + } + + return $config; +} + +# it's true, baby ;-) + +1; + +# +### End ### \ No newline at end of file -- 2.34.1