mirror of
https://github.com/samba-team/samba.git
synced 2025-03-12 20:58:37 +03:00
We need to reply to SMB2_GETINFO_FILE with a class of SMB2_FILE_STANDARD_INFO on an IPC$ share.
Otherwise a Win7 client issues this request twice (2xroundtrips) if we return NOT_SUPPORTED. We do the same for SMB1 in call_trans2qpipeinfo() Jeremy. Autobuild-User: Jeremy Allison <jra@samba.org> Autobuild-Date: Fri Jan 28 22:53:18 CET 2011 on sn-devel-104
This commit is contained in:
parent
fc16baaf91
commit
f2900a8b04
@ -199,6 +199,36 @@ struct smbd_smb2_getinfo_state {
|
||||
DATA_BLOB out_output_buffer;
|
||||
};
|
||||
|
||||
static void smb2_ipc_getinfo(struct tevent_req *req,
|
||||
struct smbd_smb2_getinfo_state *state,
|
||||
struct tevent_context *ev,
|
||||
uint8_t in_info_type,
|
||||
uint8_t in_file_info_class)
|
||||
{
|
||||
/* We want to reply to SMB2_GETINFO_FILE
|
||||
with a class of SMB2_FILE_STANDARD_INFO as
|
||||
otherwise a Win7 client issues this request
|
||||
twice (2xroundtrips) if we return NOT_SUPPORTED.
|
||||
NB. We do the same for SMB1 in call_trans2qpipeinfo() */
|
||||
|
||||
if (in_info_type == 0x01 && /* SMB2_GETINFO_FILE */
|
||||
in_file_info_class == 0x05) { /* SMB2_FILE_STANDARD_INFO */
|
||||
state->out_output_buffer = data_blob_talloc(state,
|
||||
NULL, 24);
|
||||
if (tevent_req_nomem(state->out_output_buffer.data, req)) {
|
||||
return;
|
||||
}
|
||||
|
||||
memset(state->out_output_buffer.data,0,24);
|
||||
SOFF_T(state->out_output_buffer.data,0,4096LL);
|
||||
SIVAL(state->out_output_buffer.data,16,1);
|
||||
SIVAL(state->out_output_buffer.data,20,1);
|
||||
tevent_req_done(req);
|
||||
} else {
|
||||
tevent_req_nterror(req, NT_STATUS_NOT_SUPPORTED);
|
||||
}
|
||||
}
|
||||
|
||||
static struct tevent_req *smbd_smb2_getinfo_send(TALLOC_CTX *mem_ctx,
|
||||
struct tevent_context *ev,
|
||||
struct smbd_smb2_request *smb2req,
|
||||
@ -249,7 +279,8 @@ static struct tevent_req *smbd_smb2_getinfo_send(TALLOC_CTX *mem_ctx,
|
||||
}
|
||||
|
||||
if (IS_IPC(conn)) {
|
||||
tevent_req_nterror(req, NT_STATUS_NOT_SUPPORTED);
|
||||
smb2_ipc_getinfo(req, state, ev,
|
||||
in_info_type, in_file_info_class);
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user