Commit graph

6 commits

Author SHA1 Message Date
Olga Kornievskaia
1d47cba1af dont set size of open for named attrs file
opens for create unchecked shouldn't have a non-zero size. if it does
it will either be ignored or flagged as an error.

casey notes that every open of named attributes is a create open.
even though we know the size of the file we are about to write,
we need to truncate it first, as setting the size will be ignored
by the server, leading to keeping the old size.
2012-06-11 12:12:26 -04:00
Casey Bodley
c66771cda6 ea: QueryEaInfo support for index, restart, single
nfs41_open_state stores current ea index, and increments it for each successful entry returned.  index is set to 0 when the 'restart' argument is given.  cached directory listing is freed after the listing is complete

QueryEaInfo now sends up its output buffer size, and the daemon uses this to limit its results.  added checks for buffer overflows, which required changes to the downcall structure

updated driver error mappings for map_setea_error()

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2012-05-03 10:58:42 -04:00
Olga Kornievskaia
17aac16946 use readdir to generate ea list
when given a null for FILE_GET_EA_INFORMATION, use READDIR to construct one with
 the full named attribute directory listing

new function read_entire_dir() allocates an initial buffer for readdir entries a
nd calls nfs41_readdir() repeatedly to fill it.  the buffer is realloc()ed as mo
re space is required, allowing the function to return a complete listing in a si
ngle buffer

new function calculate_ea_list_length() calculates the exact length of the FILE_
GET_EA_INFORMATION buffer required to hold all of the names from the directory l
isting

once the FILE_GET_EA_INFORMATION buffer is allocated, it is filled by populate_e
a_list() and cached with nfs41_open_state

handle_getexattr() remains largely unchanged

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2012-05-03 10:58:36 -04:00
Casey Bodley
7b8715ce8e ea: QueryEaInfo accepts a null EaList
check_nfs41_queryea_args() will now accept EaList == NULL, unless EAs are unsupported

moved handling of cygwin EAs to new function QueryCygwinEA()

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2012-05-03 10:58:29 -04:00
Casey Bodley
b2e6a60710 ea: refactor SetEaInfo for use on open
when open is given an ea buffer, pass it to new function nfs41_ea_set() after successful file creation.  matches NTFS behavior on all dispositions: sets EAs on FILE_CREATE, FILE_OVERWRITE, FILE_OVERWRITE_IF, FILE_SUPERSEDE.  does not set EAs on FILE_OPEN.  only sets EAs on FILE_OPEN_IF if file did not previously exist.  see new function create_with_ea()

nfs41_ea_set() returns nfs error codes.  uses NFS4ERR_FBIG when the EaValueLength exceeds NFS4_EASIZE (256).  this gets mapped to windows error ERROR_FILE_TOO_LARGE, which the driver now converts to STATUS_EA_TOO_LARGE

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2012-05-03 10:58:24 -04:00
Casey Bodley
5a4439a894 cosmetic: move ea get and set upcalls to separate file
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2012-05-03 10:58:01 -04:00