[LON-CAPA-cvs] cvs: loncom /publisher loncfile.pm

albertel lon-capa-cvs@mail.lon-capa.org
Mon, 28 Oct 2002 23:23:41 -0000


albertel		Mon Oct 28 18:23:41 2002 EDT

  Modified files:              
    /loncom/publisher	loncfile.pm 
  Log:
  - Fixes BUG#910, when copying files using ../ it simplifies the message
  
  
Index: loncom/publisher/loncfile.pm
diff -u loncom/publisher/loncfile.pm:1.18 loncom/publisher/loncfile.pm:1.19
--- loncom/publisher/loncfile.pm:1.18	Mon Sep  9 22:31:26 2002
+++ loncom/publisher/loncfile.pm	Mon Oct 28 18:23:41 2002
@@ -10,7 +10,7 @@
 # 
 
 #
-# $Id: loncfile.pm,v 1.18 2002/09/10 02:31:26 foxr Exp $
+# $Id: loncfile.pm,v 1.19 2002/10/28 23:23:41 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -493,10 +493,11 @@
 	    my $newfilename = $ENV{'form.newfilename'};
 	    $request->print(&checksuffix($filename, $newfilename));
 	    $request->print(&exists($user, $domain, $dir, $newfilename));
+	    my $dest=&SimplifyDir($dir,$newfilename);
 	    $request->print('<input type=hidden name=newfilename value="'.
 			    $newfilename.
-			    '"><p>Rename <tt>'.$filename.'</tt> to <tt>'.
-			    $dir.'/'.$newfilename.'</tt>?</p>');
+			    '"><p>Rename <tt>'.$filename.'</tt><br /> to <tt>'.
+			    $dest.'</tt>?</p>');
 	    &CloseForm1($request, $cancelurl);
 	} else {
 	    $request->print('<p>No new filename specified</p></form>');
@@ -587,18 +588,46 @@
   $cancelurl    =~ s/\/public_html//;
     
 
-
   if(-e $filename) {
     $request->print(&checksuffix($filename,$newfilename));
     $request->print(&exists($user, $domain, $dir, $newfilename));
+    my $dest=&SimplifyDir($dir,$newfilename);
     $request->print('<input type = hidden name = newfilename value = "'.
 		    $dir.'/'.$newfilename.
-		    '"><p>Copy <tt>'.$filename.'</tt> to'.
-		    '<tt>'.$dir.'/'.$newfilename.'</tt>/?</p>');
+		    '"><p>Copy <tt>'.$filename.'</tt><br />  to '.
+		    '<tt>'.$dest.'</tt>?</p>');
     &CloseForm1($request, $cancelurl);
   } else {
     $request->print('<p>No such file <tt>'.$filename.'</p></form>');
   }
+}
+
+=pod
+
+=item SimplifyDir
+
+  Removes all extra / and all .. references
+
+Parameters:
+
+=over 4
+
+=item $dir - string [in] a directory name
+
+=item $file - string [in] a file reference relative to $dir
+
+=back
+
+Results: the concatenated path.
+
+=cut
+
+sub SimplifyDir {
+    my ($dir,$file) = @_;
+    my $location = $dir. '/'.$file;
+    $location=~s://+:/:g; # remove duplicate /
+    while ($location=~m:/\.\./:) {$location=~s:/[^/]+/\.\./:/:g;}#remove dir/..
+    return $location;
 }
 
 =pod