1/* 2 Unix SMB/CIFS implementation. 3 Core SMB2 server 4 5 Copyright (C) Stefan Metzmacher 2009 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. 19*/ 20 21#include "includes.h" 22#include "smbd/globals.h" 23#include "../libcli/smb/smb_common.h" 24 25NTSTATUS smbd_smb2_request_process_keepalive(struct smbd_smb2_request *req) 26{ 27 const uint8_t *inbody; 28 int i = req->current_idx; 29 DATA_BLOB outbody; 30 size_t expected_body_size = 0x04; 31 size_t body_size; 32 33 if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) { 34 return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER); 35 } 36 37 inbody = (const uint8_t *)req->in.vector[i+1].iov_base; 38 39 body_size = SVAL(inbody, 0x00); 40 if (body_size != expected_body_size) { 41 return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER); 42 } 43 44 /* TODO: update some time stamps */ 45 46 outbody = data_blob_talloc(req->out.vector, NULL, 0x04); 47 if (outbody.data == NULL) { 48 return smbd_smb2_request_error(req, NT_STATUS_NO_MEMORY); 49 } 50 51 SSVAL(outbody.data, 0x00, 0x04); /* struct size */ 52 SSVAL(outbody.data, 0x02, 0); /* reserved */ 53 54 return smbd_smb2_request_done(req, outbody, NULL); 55} 56