Tk Library Source Code

View Ticket
Login
Ticket UUID: 3312880
Title: FTP command "RNFR" checks filesystem paths
Type: Bug Version: None
Submitter: rkeene Created on: 2011-06-07 03:06:37
Subsystem: ftpd Assigned To: andreas_kupries
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2011-08-10 03:39:54
Resolution: Fixed Closed By: andreas_kupries
    Closed on: 2011-08-09 20:39:54
Description:
RNFR checks the native filesystem for the pathname specified.

The offending logic is:
        if {[file exists $path]} {...}

This will fail unless you are using the native filesystem driver and a docroot of "/"

To check for existence, perhaps rename could be called with "newname" of "" (empty string) ?
User Comments: andreas_kupries added on 2011-08-10 03:39:54:

allow_comments - 1

Fixed in CVS head. Plus a fix in ftpd::fsFile::fs (branch 'rename', sock -> outchan).

rkeene added on 2011-06-23 23:03:52:

File Added - 415767: ftpd1.2.5-bug3312880.diff

rkeene added on 2011-06-07 10:55:48:
--- ftpd1.2.5/ftpd.tcl(revision 2177)
+++ ftpd1.2.5/ftpd.tcl(working copy)
@@ -1301,7 +1301,7 @@
 
     set path [file join $data(cwd) $filename]
 
-    if {[file exists $path]} {
+    if {[::ftpd::Fs exists $path]} {
         if {[::ftpd::hasCallback authFileCmd]} {
             set cmd $::ftpd::cfg(authFileCmd)
             lappend cmd $data(user) $path write
@@ -1358,7 +1358,7 @@
     }
 
 
-    if {![catch {::ftpd::Fs rename $data(renameFrom) $path} msg]} {
+    if {![catch {::ftpd::Fs rename $data(renameFrom) $path $sock} msg]} {
         unset data(renameFrom)
     } else {
         unset data(renameFrom)

Attachments: