svn commit: samba r12092 - in
branches/SAMBA_4_0/source/smb_server/smb2: .
metze at samba.org
metze at samba.org
Tue Dec 6 13:26:25 GMT 2005
Author: metze
Date: 2005-12-06 13:26:24 +0000 (Tue, 06 Dec 2005)
New Revision: 12092
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12092
Log:
- add dummy functions for the missing SMB2 opcodes
- implement keepalive and logoff
metze
Modified:
branches/SAMBA_4_0/source/smb_server/smb2/config.mk
branches/SAMBA_4_0/source/smb_server/smb2/fileio.c
branches/SAMBA_4_0/source/smb_server/smb2/negprot.c
branches/SAMBA_4_0/source/smb_server/smb2/receive.c
branches/SAMBA_4_0/source/smb_server/smb2/sesssetup.c
Changeset:
Modified: branches/SAMBA_4_0/source/smb_server/smb2/config.mk
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb2/config.mk 2005-12-06 12:33:32 UTC (rev 12091)
+++ branches/SAMBA_4_0/source/smb_server/smb2/config.mk 2005-12-06 13:26:24 UTC (rev 12092)
@@ -7,7 +7,8 @@
negprot.o \
sesssetup.o \
tcon.o \
- fileio.o
+ fileio.o \
+ keepalive.o
REQUIRED_SUBSYSTEMS = \
NTVFS LIBPACKET LIBCLI_SMB2
# End SUBSYSTEM SMB2_PROTOCOL
Modified: branches/SAMBA_4_0/source/smb_server/smb2/fileio.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb2/fileio.c 2005-12-06 12:33:32 UTC (rev 12091)
+++ branches/SAMBA_4_0/source/smb_server/smb2/fileio.c 2005-12-06 13:26:24 UTC (rev 12092)
@@ -33,6 +33,11 @@
smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED);
}
+void smb2srv_flush_recv(struct smb2srv_request *req)
+{
+ smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED);
+}
+
void smb2srv_read_recv(struct smb2srv_request *req)
{
smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED);
@@ -43,6 +48,16 @@
smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED);
}
+void smb2srv_lock_recv(struct smb2srv_request *req)
+{
+ smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED);
+}
+
+void smb2srv_ioctl_recv(struct smb2srv_request *req)
+{
+ smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED);
+}
+
void smb2srv_cancel_recv(struct smb2srv_request *req)
{
smb2srv_send_error(req, NT_STATUS_NOT_IMPLEMENTED);
Modified: branches/SAMBA_4_0/source/smb_server/smb2/negprot.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb2/negprot.c 2005-12-06 12:33:32 UTC (rev 12091)
+++ branches/SAMBA_4_0/source/smb_server/smb2/negprot.c 2005-12-06 13:26:24 UTC (rev 12092)
@@ -123,8 +123,6 @@
return;
}
- SIVAL(req->out.hdr, SMB2_HDR_STATUS, NT_STATUS_V(req->status));
-
SSVAL(req->out.body, 0x02, io->out._pad);
SIVAL(req->out.body, 0x04, io->out.unknown2);
memcpy(req->out.body+0x08, io->out.sessid, 16);
Modified: branches/SAMBA_4_0/source/smb_server/smb2/receive.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb2/receive.c 2005-12-06 12:33:32 UTC (rev 12091)
+++ branches/SAMBA_4_0/source/smb_server/smb2/receive.c 2005-12-06 13:26:24 UTC (rev 12092)
@@ -56,7 +56,7 @@
SIVAL(req->out.hdr, 0, SMB2_MAGIC);
SSVAL(req->out.hdr, SMB2_HDR_LENGTH, SMB2_HDR_BODY);
SSVAL(req->out.hdr, SMB2_HDR_PAD1, 0);
- SIVAL(req->out.hdr, SMB2_HDR_STATUS, 0);
+ SIVAL(req->out.hdr, SMB2_HDR_STATUS, NT_STATUS_V(req->status));
SSVAL(req->out.hdr, SMB2_HDR_OPCODE, SVAL(req->in.hdr, SMB2_HDR_OPCODE));
SSVAL(req->out.hdr, SMB2_HDR_PAD2, 0);
SIVAL(req->out.hdr, SMB2_HDR_FLAGS, 0x00000001);
@@ -133,6 +133,9 @@
case SMB2_OP_SESSSETUP:
smb2srv_sesssetup_recv(req);
return NT_STATUS_OK;
+ case SMB2_OP_LOGOFF:
+ smb2srv_logoff_recv(req);
+ return NT_STATUS_OK;
case SMB2_OP_TCON:
smb2srv_tcon_recv(req);
return NT_STATUS_OK;
@@ -145,15 +148,27 @@
case SMB2_OP_CLOSE:
smb2srv_close_recv(req);
return NT_STATUS_OK;
+ case SMB2_OP_FLUSH:
+ smb2srv_flush_recv(req);
+ return NT_STATUS_OK;
case SMB2_OP_READ:
smb2srv_read_recv(req);
return NT_STATUS_OK;
case SMB2_OP_WRITE:
smb2srv_write_recv(req);
return NT_STATUS_OK;
+ case SMB2_OP_LOCK:
+ smb2srv_lock_recv(req);
+ return NT_STATUS_OK;
+ case SMB2_OP_IOCTL:
+ smb2srv_ioctl_recv(req);
+ return NT_STATUS_OK;
case SMB2_OP_CANCEL:
smb2srv_cancel_recv(req);
return NT_STATUS_OK;
+ case SMB2_OP_KEEPALIVE:
+ smb2srv_keepalive_recv(req);
+ return NT_STATUS_OK;
case SMB2_OP_FIND:
smb2srv_find_recv(req);
return NT_STATUS_OK;
Modified: branches/SAMBA_4_0/source/smb_server/smb2/sesssetup.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb2/sesssetup.c 2005-12-06 12:33:32 UTC (rev 12091)
+++ branches/SAMBA_4_0/source/smb_server/smb2/sesssetup.c 2005-12-06 13:26:24 UTC (rev 12092)
@@ -27,13 +27,6 @@
#include "smb_server/smb2/smb2_server.h"
#include "smbd/service_stream.h"
-struct smb2srv_session {
- struct smb2srv_session *prev,*next;
- uint64_t uid;
- struct gensec_security *gensec_ctx;
- struct auth_session_info *session_info;
-};
-
static NTSTATUS smb2srv_sesssetup_backend(struct smb2srv_request *req, struct smb2_session_setup *io)
{
NTSTATUS status = NT_STATUS_ACCESS_DENIED;
@@ -134,7 +127,6 @@
return;
}
- SIVAL(req->out.hdr, SMB2_HDR_STATUS, NT_STATUS_V(req->status));
SBVAL(req->out.hdr, SMB2_HDR_UID, io->out.uid);
SSVAL(req->out.body, 0x02, io->out._pad);
@@ -183,3 +175,52 @@
}
smb2srv_sesssetup_send(req, io);
}
+
+static NTSTATUS smb2srv_logoff_backend(struct smb2srv_request *req)
+{
+ /* TODO: call ntvfs backends to close file of this session */
+ talloc_free(req->session);
+ req->session = NULL;
+ return NT_STATUS_OK;
+}
+
+static void smb2srv_logoff_send(struct smb2srv_request *req)
+{
+ NTSTATUS status;
+
+ if (NT_STATUS_IS_ERR(req->status)) {
+ smb2srv_send_error(req, req->status);
+ return;
+ }
+
+ status = smb2srv_setup_reply(req, 0x04, 0);
+ if (!NT_STATUS_IS_OK(status)) {
+ smbsrv_terminate_connection(req->smb_conn, nt_errstr(status));
+ talloc_free(req);
+ return;
+ }
+
+ SSVAL(req->out.body, 0x02, 0);
+
+ smb2srv_send_reply(req);
+}
+
+void smb2srv_logoff_recv(struct smb2srv_request *req)
+{
+ uint16_t _pad;
+
+ if (req->in.body_size < 0x04) {
+ smb2srv_send_error(req, NT_STATUS_FOOBAR);
+ return;
+ }
+
+ _pad = SVAL(req->in.body, 0x02);
+
+ req->status = smb2srv_logoff_backend(req);
+
+ if (req->control_flags & SMB2SRV_REQ_CTRL_FLAG_NOT_REPLY) {
+ talloc_free(req);
+ return;
+ }
+ smb2srv_logoff_send(req);
+}
More information about the samba-cvs
mailing list