[Bug 13445] New: Fuzzy searching in link-dest tries to open regular file as directory

samba-bugs at samba.org samba-bugs at samba.org
Fri May 18 20:18:51 UTC 2018


https://bugzilla.samba.org/show_bug.cgi?id=13445

            Bug ID: 13445
           Summary: Fuzzy searching in link-dest tries to open regular
                    file as directory
           Product: rsync
           Version: 3.1.3
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P5
         Component: core
          Assignee: wayned at samba.org
          Reporter: alguien at respiranto.de
        QA Contact: rsync-qa at samba.org

Created attachment 14205
  --> https://bugzilla.samba.org/attachment.cgi?id=14205&action=edit
Patch to handle ENOTDIR in flist.c:send_directory()

If rsync is called with doubled --fuzzy flag and --link-dest
(or --compare-dest, --copy-dest), it fails in a situation as described below.
The problem appears in both version 3.1.3 and the current development version
3.1.4dev.


Let there be the following directory structure

$PWD/
`- src/
   `- a/
      `- f
`- ref/
   `- a

where src/a/f and ref/a are regular files and the files src/a and ref/a
actually have the same name.

To create it:

$ mkdir -p src/a ref; touch src/a/f ref/a


Now let rsync copy files from src/ to tgt/ linking to (fuzzy matched) files
in ref/, as follows:

$ rsync --recursive --fuzzy --fuzzy --link-dest=../ref src/ tgt

Rsync fails with:

rsync: opendir "/tmp/rsync-test/tgt/../ref/a" failed: Not a directory (20)
rsync error: some files/attrs were not transferred (see previous errors) (code
23) at main.c(1189) [sender=3.1.3]


This is due to rsync trying to find a fuzzy match for src/a/f in ref/a, which
obviously fails, as ref/a is not a directory.

The problem arises in flist.c:send_directory() when called by
flist.c:get_dirlist() which in turn is called by
generator.c:recv_generator(), where the former two are called with ../ref/a .

Since the case of an inexistant directory is already handled in 
flist.c:send_directory(), that is probably also where to handle the case of
the filename referring to a file not being a directory.  See the attached
patch.

In fact, I am not sure that it is a good idea to just ignore ENOENT and
ENOTDIR if !am_sender, since those should also possibly mean a real error.
Or am I mistaken here?

-- 
You are receiving this mail because:
You are the QA Contact for the bug.



More information about the rsync mailing list