summaryrefslogtreecommitdiff
path: root/source4/ntvfs/ntvfs_generic.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2006-05-20 19:03:06 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:08:15 -0500
commite23cc70a72e6582e91bcfdaf1d6ed2191e7e23a6 (patch)
tree874e55f837a108229fbd77c3a87a9070d530280b /source4/ntvfs/ntvfs_generic.c
parentf9ddc0dde562b0976a05fc6ca07ea8c9ce0bd284 (diff)
downloadsamba-e23cc70a72e6582e91bcfdaf1d6ed2191e7e23a6.tar.gz
samba-e23cc70a72e6582e91bcfdaf1d6ed2191e7e23a6.tar.bz2
samba-e23cc70a72e6582e91bcfdaf1d6ed2191e7e23a6.zip
r15760: - add RAW_READ_SMB2 => generic mapping
- Implement SMB2 Read metze (This used to be commit d0ac0c5af44ba5aa8b18106c2ac26c0d194e59b4)
Diffstat (limited to 'source4/ntvfs/ntvfs_generic.c')
-rw-r--r--source4/ntvfs/ntvfs_generic.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/source4/ntvfs/ntvfs_generic.c b/source4/ntvfs/ntvfs_generic.c
index 119fef2c6d..922093a0a9 100644
--- a/source4/ntvfs/ntvfs_generic.c
+++ b/source4/ntvfs/ntvfs_generic.c
@@ -1165,13 +1165,16 @@ static NTSTATUS ntvfs_map_read_finish(struct ntvfs_module_context *ntvfs,
{
switch (rd->generic.level) {
case RAW_READ_READ:
- rd->read.out.nread = rd2->generic.out.nread;
+ rd->read.out.nread = rd2->generic.out.nread;
break;
case RAW_READ_READBRAW:
- rd->readbraw.out.nread = rd2->generic.out.nread;
+ rd->readbraw.out.nread = rd2->generic.out.nread;
break;
case RAW_READ_LOCKREAD:
- rd->lockread.out.nread = rd2->generic.out.nread;
+ rd->lockread.out.nread = rd2->generic.out.nread;
+ break;
+ case RAW_READ_SMB2:
+ rd->smb2.out.data.length= rd2->generic.out.nread;
break;
default:
return NT_STATUS_INVALID_LEVEL;
@@ -1259,6 +1262,22 @@ _PUBLIC_ NTSTATUS ntvfs_map_read(struct ntvfs_module_context *ntvfs,
status = ntvfs->ops->read(ntvfs, req, rd2);
}
break;
+
+ case RAW_READ_SMB2:
+ if (rd->smb2.in.length > UINT16_MAX) {
+ DEBUG(0,("%s: mapping SMB2 => generic length to large %u!\n",
+ __FUNCTION__, rd->smb2.in.length));
+ status = NT_STATUS_FOOBAR;
+ goto done;
+ }
+ rd2->readx.in.file.ntvfs= rd->smb2.in.file.ntvfs;
+ rd2->readx.in.offset = rd->smb2.in.offset;
+ rd2->readx.in.mincnt = rd->smb2.in.length;
+ rd2->readx.in.maxcnt = rd->smb2.in.length;
+ rd2->readx.in.remaining = 0;
+ rd2->readx.out.data = rd->smb2.out.data.data;
+ status = ntvfs->ops->read(ntvfs, req, rd2);
+ break;
}
done: