* Matthew Toseland <[EMAIL PROTECTED]> [2007-04-12 18:16:26]:

> Okay, in summary:

Almost everything described below has been implemented in r12615 and
prior that... check it :)

Ok, I got rid of TestFileAccess messages.

> 
> WRITE ACCESS
> ------------
> 
> Write access has to be per directory. The reason for this is that we
> cannot write to an existing file created by the client: We have to write
> to a temporary file in the same dir and then rename over the target, to
> avoid symlink attacks.
> 
> Thus the directory-based TestDDA code works pretty well for this (sorry
> I still haven't read it).
> 
> READ ACCESS
> -----------
> 
> For directories where the node has write access, TestDDA can demonstrate
> that the client has read access. For directories where the node does not
> have write access, the easiest thing is simply to force the client to
> use UploadFrom=direct. Later on we may provide an alternate mechanism,
> such as a challenge to hash the file with a certain salt, or a request
> for specific random offsets from the file. (The whole purpose of DDA is
> to save disk space).
> 
> ERROR CODES
> -----------
> 
> Because clients need backwards compatibility, they may want to just
> submit the ClientGet or ClientPut, and if they get an error message,
> respond to it by doing a TestDDA. If the node gets a request to upload a
> file, (once this mechanism is mandatory), it should return an error
> message requiring the client to either do a TestDDA or just upload the
> file directly. If we have already done a TestDDA and this has failed
> then there should be a different error code, and the client should
> upload the file directly. The client should not be able to distinguish
> between "the node can't see the directory at all" and "the node can't
> create a file in the directory" when doing TestDDA.
> 
> TestFileAccessReply
> -------------------
> 
> I am not convinced that this is useful. It is not a simple "are we on
> the same machine" test because there are many cases where there are
> partially shared filesystems on different machines. If the file does
> exist, we cannot write to it (that is one of our security precautions,
> maybe it should be revisited). If it doesn't, it is the directory which
> we are querying, not the file, and the only way to be sure we can write
> it is to do a full TestDDA. So it seems a confusing API to me, and
> possibly one that can be exploited to leak information. It might be
> useful to be able to check the status of previous TestDDA's, but I'm not
> convinced that being able to verify that the node can read from / write
> to a specific file is useful. What is the specific use case here? A
> client which only wants to show files which both the node and the client
> can read? There's no point, just show what the client can read, and
> upload directly if necessary.
> 
> On Thu, Apr 12, 2007 at 04:47:46PM +0200, Florent Daignière (NextGen$) wrote:
> > * Matthew Toseland <[EMAIL PROTECTED]> [2007-04-12 15:38:35]:
> > 
> > > On Thu, Apr 12, 2007 at 02:26:38PM +0200, Florent Daignière (NextGen$) 
> > > wrote:
> > > > * [EMAIL PROTECTED] <[EMAIL PROTECTED]> [2007-04-12 14:06:28]:
> > > > 
> > > > > I looked over your source, but where is the point when the node READS
> > > > > the file written by the client? It looks like the readFile is created
> > > > > by the node?
> > > > > 
> > > > > Did I misunderstand this?
> > > >
> > 
> > It's a variable naming missundersting: readFile is the file the node
> > writes and the client reads.
> > 
> > > > Yes, "known issue" ... in the final version of the protocol the client
> > > > will choose the filename and the node will return if it can read from
> > > > it or not (assuming the file isn't empty).
> > > 
> > > Why would the filename be created by the client?
> > > 
> > > I thought the protocol was that the node writes a file which the client
> > > must read, then it tells the client to write a specific block of data to
> > > a specific file which the client must create.
> > 
> > That's how it's implemented at the moment but it sucks... If you want
> > for instance to be able to use DDA (even read access only) on a directory
> > the node hasn't write access to it won't work as the node won't be able to
> > write the file the client is supposed to read.
> > 
> > I have created and documented two new messages : TestFileAccessQuery and
> > TestFileAccessReply; Those will probably be usefull to figure out if the
> > node and the FCP client are on the same computer.
> > 
> > I guess the solution will be to require the client to send us a hash of
> > the content he wants us to insert... but it requires both the client and
> > the node to compute the hash, and that obviously sucks :)
> > 
> > NextGen$


Attachment: signature.asc
Description: Digital signature

_______________________________________________
Devl mailing list
[EMAIL PROTECTED]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to