From cfc8d4a1f49a304ab8ff3e1dde7217a031cccf10 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 2 Jun 2009 11:54:00 +0200 Subject: s3:smbd: add smbd_smb2_fake_smb_request() metze --- source3/smbd/smb2_glue.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 source3/smbd/smb2_glue.c (limited to 'source3/smbd/smb2_glue.c') diff --git a/source3/smbd/smb2_glue.c b/source3/smbd/smb2_glue.c new file mode 100644 index 0000000000..c3c38542a0 --- /dev/null +++ b/source3/smbd/smb2_glue.c @@ -0,0 +1,51 @@ +/* + Unix SMB/CIFS implementation. + Core SMB2 server + + Copyright (C) Stefan Metzmacher 2009 + + 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 3 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, see . +*/ + +#include "includes.h" +#include "smbd/globals.h" +#include "../source4/libcli/smb2/smb2_constants.h" + +struct smb_request *smbd_smb2_fake_smb_request(struct smbd_smb2_request *req) +{ + struct smb_request *smbreq; + const uint8_t *inhdr; + int i = req->current_idx; + + inhdr = (const uint8_t *)req->in.vector[i+0].iov_base; + + smbreq = talloc_zero(req, struct smb_request); + if (smbreq == NULL) { + return NULL; + } + + smbreq->vuid = req->session->compat_vuser->vuid; + smbreq->tid = req->tcon->compat_conn->cnum; + smbreq->conn = req->tcon->compat_conn; + smbreq->smbpid = (uint16_t)IVAL(inhdr, SMB2_HDR_PID); + smbreq->flags2 = FLAGS2_UNICODE_STRINGS | + FLAGS2_32_BIT_ERROR_CODES | + FLAGS2_LONG_PATH_COMPONENTS | + FLAGS2_IS_LONG_NAME; + if (IVAL(inhdr, SMB2_HDR_FLAGS) & SMB2_HDR_FLAG_DFS) { + smbreq->flags2 |= FLAGS2_DFS_PATHNAMES; + } + + return smbreq; +} -- cgit