+ if(-l clean_path($config->{'fileroot'}.'/'.$dir))
+ {
+ abort($config->{'errors'}->{'dir_not_exist'},'/');
+ }
+
+ # ... and check if the path is above the root directory
+
+ unless(($new_physical,$new_virtual) = check_path($config->{'fileroot'},$dir))
+ {
+ abort($config->{'errors'}->{'create_ar'},'/');
+ }
+
+ # Check if we have enough permissions to create a file
+ # in this directory
+
+ unless(-r $new_physical && -w $new_physical && -x $new_physical)
+ {
+ abort($config->{'errors'}->{'dir_no_create'},'/',{DIR => $new_virtual});
+ }
+
+ # Create the physical and the virtual path
+
+ $new_physical = File::Spec->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->{'fileroot'}.'/'.$file) || -l clean_path($config->{'fileroot'}.'/'.$file))
+{
+ if(my ($physical,$virtual) = check_path($config->{'fileroot'},$file))
+ {