diff options
author | Andrew Tridgell <tridge@samba.org> | 2008-05-26 14:59:58 +1000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2008-05-26 14:59:58 +1000 |
commit | c5c1b3706af13fe729f435e7bf4ec1e73b719eef (patch) | |
tree | 6ecb77e05b0cbdfa219369b5b24da0e274698c81 | |
parent | 5df9e0576ebd8ad737bb2580b52788601b6cf854 (diff) | |
download | samba-c5c1b3706af13fe729f435e7bf4ec1e73b719eef.tar.gz samba-c5c1b3706af13fe729f435e7bf4ec1e73b719eef.tar.bz2 samba-c5c1b3706af13fe729f435e7bf4ec1e73b719eef.zip |
allow larger streams using the TDB backend
(This used to be commit 8c0d756eb887477da867e069dbde3a7ad98d4ae0)
-rw-r--r-- | source4/librpc/idl/xattr.idl | 3 | ||||
-rw-r--r-- | source4/ntvfs/posix/pvfs_streams.c | 13 |
2 files changed, 11 insertions, 5 deletions
diff --git a/source4/librpc/idl/xattr.idl b/source4/librpc/idl/xattr.idl index 2010d51ce1..520341e6aa 100644 --- a/source4/librpc/idl/xattr.idl +++ b/source4/librpc/idl/xattr.idl @@ -86,7 +86,8 @@ interface xattr /* stream data is stored in attributes with the given prefix */ const char *XATTR_DOSSTREAM_PREFIX = "user.DosStream."; - const int XATTR_MAX_STREAM_SIZE = 0x4000; + const int XATTR_MAX_STREAM_SIZE = 0x4000; + const int XATTR_MAX_STREAM_SIZE_TDB = 0x100000; typedef struct { uint32 flags; diff --git a/source4/ntvfs/posix/pvfs_streams.c b/source4/ntvfs/posix/pvfs_streams.c index 3cd9952fd5..30d7ce2477 100644 --- a/source4/ntvfs/posix/pvfs_streams.c +++ b/source4/ntvfs/posix/pvfs_streams.c @@ -276,9 +276,12 @@ ssize_t pvfs_stream_write(struct pvfs_state *pvfs, if (count == 0) { return 0; } - if (offset > XATTR_MAX_STREAM_SIZE) { - errno = ENOSPC; - return -1; + + if (count+offset > XATTR_MAX_STREAM_SIZE) { + if (!pvfs->ea_db || count+offset > XATTR_MAX_STREAM_SIZE_TDB) { + errno = ENOSPC; + return -1; + } } /* we have to load the existing stream, then modify, then save */ @@ -332,7 +335,9 @@ NTSTATUS pvfs_stream_truncate(struct pvfs_state *pvfs, DATA_BLOB blob; if (length > XATTR_MAX_STREAM_SIZE) { - return NT_STATUS_DISK_FULL; + if (!pvfs->ea_db || length > XATTR_MAX_STREAM_SIZE_TDB) { + return NT_STATUS_DISK_FULL; + } } /* we have to load the existing stream, then modify, then save */ |