From 1fd1e2ba581c8ac67ba63fbb889fbedcc65bfbb9 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 20 Jun 2006 07:05:51 +0000 Subject: r16407: add parsing code the SMB2 GetInfo in the server metze (This used to be commit c4755c83c61c0cc822c69cd274056ec20ba66fdb) --- source4/smb_server/smb2/config.mk | 1 + source4/smb_server/smb2/fileinfo.c | 77 ++++++++++++++++++++++++++++++++++++++ source4/smb_server/smb2/fileio.c | 15 -------- 3 files changed, 78 insertions(+), 15 deletions(-) create mode 100644 source4/smb_server/smb2/fileinfo.c (limited to 'source4/smb_server') diff --git a/source4/smb_server/smb2/config.mk b/source4/smb_server/smb2/config.mk index d7401f19d0..7fc222eba3 100644 --- a/source4/smb_server/smb2/config.mk +++ b/source4/smb_server/smb2/config.mk @@ -8,6 +8,7 @@ OBJ_FILES = \ sesssetup.o \ tcon.o \ fileio.o \ + fileinfo.o \ keepalive.o PUBLIC_DEPENDENCIES = \ ntvfs LIBPACKET LIBCLI_SMB2 diff --git a/source4/smb_server/smb2/fileinfo.c b/source4/smb_server/smb2/fileinfo.c new file mode 100644 index 0000000000..366de56a66 --- /dev/null +++ b/source4/smb_server/smb2/fileinfo.c @@ -0,0 +1,77 @@ +/* + Unix SMB2 implementation. + + Copyright (C) Stefan Metzmacher 2006 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "libcli/smb2/smb2.h" +#include "libcli/smb2/smb2_calls.h" +#include "smb_server/smb_server.h" +#include "smb_server/service_smb_proto.h" +#include "smb_server/smb2/smb2_server.h" +#include "ntvfs/ntvfs.h" + +static void smb2srv_getinfo_send(struct ntvfs_request *ntvfs) +{ + struct smb2srv_request *req; + struct smb2_getinfo *info; + + SMB2SRV_CHECK_ASYNC_STATUS(info, struct smb2_getinfo); + SMB2SRV_CHECK(smb2srv_setup_reply(req, 0x08, True, 0)); + + /* TODO: this is maybe a o16s32_blob */ + SMB2SRV_CHECK(smb2_push_o16s16_blob(&req->out, 0x02, info->out.blob)); + SSVAL(req->out.body, 0x06, 0); + + smb2srv_send_reply(req); +} + +static NTSTATUS smb2srv_getinfo_backend(struct ntvfs_request *ntvfs, struct smb2_getinfo *info) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + +void smb2srv_getinfo_recv(struct smb2srv_request *req) +{ + struct smb2_getinfo *info; + + SMB2SRV_CHECK_BODY_SIZE(req, 0x30, True); + SMB2SRV_TALLOC_IO_PTR(info, struct smb2_getinfo); + SMB2SRV_SETUP_NTVFS_REQUEST(smb2srv_getinfo_send, NTVFS_ASYNC_STATE_MAY_ASYNC); + + info->in.level = SVAL(req->in.body, 0x02); + info->in.max_response_size = IVAL(req->in.body, 0x04); + info->in.unknown1 = IVAL(req->in.body, 0x08); + info->in.unknown2 = IVAL(req->in.body, 0x0C); + info->in.flags = IVAL(req->in.body, 0x10); + info->in.flags2 = IVAL(req->in.body, 0x14); + info->in.file.ntvfs = smb2srv_pull_handle(req, req->in.body, 0x18); + + SMB2SRV_CHECK_FILE_HANDLE(info->in.file.ntvfs); + SMB2SRV_CALL_NTVFS_BACKEND(smb2srv_getinfo_backend(req->ntvfs, info)); +} + +void smb2srv_setinfo_recv(struct smb2srv_request *req) +{ + smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED); +} + +void smb2srv_break_recv(struct smb2srv_request *req) +{ + smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED); +} diff --git a/source4/smb_server/smb2/fileio.c b/source4/smb_server/smb2/fileio.c index f873841e97..d42fb06f46 100644 --- a/source4/smb_server/smb2/fileio.c +++ b/source4/smb_server/smb2/fileio.c @@ -251,18 +251,3 @@ void smb2srv_notify_recv(struct smb2srv_request *req) { smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED); } - -void smb2srv_getinfo_recv(struct smb2srv_request *req) -{ - smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED); -} - -void smb2srv_setinfo_recv(struct smb2srv_request *req) -{ - smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED); -} - -void smb2srv_break_recv(struct smb2srv_request *req) -{ - smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED); -} -- cgit