HiddenStore option may be useful

Jason openssh at lakedaemon.net
Mon Apr 16 02:01:07 EST 2007


William Ahern wrote:
> On Sat, Apr 14, 2007 at 10:54:43PM -0400, Jason wrote:
>> Thomas Blank wrote:
>>> I'm missing a HiddenStore option in OpenSSH, known from some ftp-server 
>>> implementations like ProFTPd.
>>>
>>> Consider the following scenario:
>>> - A process PROCA is frequently polling the directory for a file called 
>>> myfile.txt
>>> - Someone transfers this file via sftp or scp to the directory
>>> - While transfer is going on and the file is not completely written, 
>>> PROCA reads in the file and removes is
>>> -> Corrupt data is seen by PROCA
>>>
>>> Knowing this problem you have to solutions:
>>> 1. PROCA must check if myfile.txt is changing (filesize, mtime...) and 
>>> wait until it does not change any more
>>> 2. sftp and scp use a HiddenStore by writing the file with a unique 
>>> filename (eg. .myfile.txt) and renaming it at the end of the transfer 
>>> (mv .myfile.txt myfile.txt)
>>>
>>> What do you think about this?
>> Why not have PROCA use inotify?
>>
>> See /usr/src/linux/Documentation/filesystems/inotify.txt
>>
> 
> How does that address the race condition? inotify is just a better poll in
> this case. It doesn't even tell you how many processes have an open
> descriptor.

Given that PROCA is there before the file is created, inotify allows you
to detect when a new file is created (IN_CREATE), opened (IN_OPEN), and
how many times that occurred.  Once PROCA receives enough file close
events (IN_CLOSE) to match the create and all the opens (if they
occurred), then it can consider the file transfer is finished and pull
it out of the directory.

On a technical note, inotify is _not_ a better poll,  rather it is
interrupt driven (select() on file descriptor created by inotify_init()).

hth,

Jason.


More information about the openssh-unix-dev mailing list