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>
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>
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>
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>