X-Git-Url: https://git.p6c8.net/devedit.git/blobdiff_plain/0aaec66139adc1f24ca5426a8fd181480e5955c3..6cbef69555b48386fee70b73bac2c3df4d15ff6a:/modules/Tool.pm?ds=sidebyside diff --git a/modules/Tool.pm b/modules/Tool.pm index 96370c1..d9a20f7 100644 --- a/modules/Tool.pm +++ b/modules/Tool.pm @@ -6,7 +6,7 @@ package Tool; # Some shared sub routines # # Author: Patrick Canterino -# Last modified: 2005-04-22 +# Last modified: 2005-06-10 # use strict; @@ -32,12 +32,11 @@ use base qw(Exporter); encode_html equal_url file_name + is_forbidden_file mode_string multi_string upper_path); -use Carp qw(croak); - # check_path() # # Check if a virtual path is above a virtual root directory @@ -69,9 +68,8 @@ sub check_path($$) $first = abs_path($first); my $last = file_name($path); - $last = '' if($last eq '.'); - if($last eq '..' || ($^O eq 'MSWin32' && $last =~ m!^\.\.\.+$!)) + if(-d $first.'/'.$last && not -l $first.'/'.$last) { $first = abs_path($first.'/'.$last); $last = ''; @@ -257,6 +255,29 @@ sub file_name($) return $path; } +# is_forbidden_file() +# +# Check if a file is in the list of forbidden files +# +# Params: 1. Array Reference containing the list +# 2. Filename to check +# +# Return: Status code (Boolean) + +sub is_forbidden_file($$) +{ + my ($list,$file) = @_; + $file =~ s!/+$!!g; + + foreach my $entry(@$list) + { + return 1 if($file eq $entry); + return 1 if(index($file,$entry.'/') == 0); + } + + return; +} + # mode_string() # # Convert a file mode number into a human readable string (rwxr-x-r-x)