mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-08-13 18:59:18 +02:00
SMB2: Correctly report server start time in SMB2_NEGOTIATE response
This commit is contained in:
parent
f693f7ff77
commit
641613ae8e
3 changed files with 8 additions and 6 deletions
|
@ -21,7 +21,7 @@ namespace SMBLibrary.Server.SMB2
|
||||||
public const string SMB2xxxDialect = "SMB 2.???";
|
public const string SMB2xxxDialect = "SMB 2.???";
|
||||||
|
|
||||||
// Special case - SMB2 client initially connecting using SMB1
|
// Special case - SMB2 client initially connecting using SMB1
|
||||||
internal static SMB2Command GetNegotiateResponse(List<string> smb2Dialects, GSSProvider securityProvider, ConnectionState state, Guid serverGuid)
|
internal static SMB2Command GetNegotiateResponse(List<string> smb2Dialects, GSSProvider securityProvider, ConnectionState state, Guid serverGuid, DateTime serverStartTime)
|
||||||
{
|
{
|
||||||
NegotiateResponse response = new NegotiateResponse();
|
NegotiateResponse response = new NegotiateResponse();
|
||||||
response.Header.Credits = 1;
|
response.Header.Credits = 1;
|
||||||
|
@ -44,12 +44,12 @@ namespace SMBLibrary.Server.SMB2
|
||||||
response.MaxReadSize = 65536;
|
response.MaxReadSize = 65536;
|
||||||
response.MaxWriteSize = 65536;
|
response.MaxWriteSize = 65536;
|
||||||
response.SystemTime = DateTime.Now;
|
response.SystemTime = DateTime.Now;
|
||||||
response.ServerStartTime = DateTime.Today;
|
response.ServerStartTime = serverStartTime;
|
||||||
response.SecurityBuffer = securityProvider.GetSPNEGOTokenInitBytes();
|
response.SecurityBuffer = securityProvider.GetSPNEGOTokenInitBytes();
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static SMB2Command GetNegotiateResponse(NegotiateRequest request, GSSProvider securityProvider, ConnectionState state, Guid serverGuid)
|
internal static SMB2Command GetNegotiateResponse(NegotiateRequest request, GSSProvider securityProvider, ConnectionState state, Guid serverGuid, DateTime serverStartTime)
|
||||||
{
|
{
|
||||||
NegotiateResponse response = new NegotiateResponse();
|
NegotiateResponse response = new NegotiateResponse();
|
||||||
if (request.Dialects.Contains(SMB2Dialect.SMB210))
|
if (request.Dialects.Contains(SMB2Dialect.SMB210))
|
||||||
|
@ -71,7 +71,7 @@ namespace SMBLibrary.Server.SMB2
|
||||||
response.MaxReadSize = 65536;
|
response.MaxReadSize = 65536;
|
||||||
response.MaxWriteSize = 65536;
|
response.MaxWriteSize = 65536;
|
||||||
response.SystemTime = DateTime.Now;
|
response.SystemTime = DateTime.Now;
|
||||||
response.ServerStartTime = DateTime.Today;
|
response.ServerStartTime = serverStartTime;
|
||||||
response.SecurityBuffer = securityProvider.GetSPNEGOTokenInitBytes();
|
response.SecurityBuffer = securityProvider.GetSPNEGOTokenInitBytes();
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ namespace SMBLibrary.Server
|
||||||
if (command is NegotiateRequest)
|
if (command is NegotiateRequest)
|
||||||
{
|
{
|
||||||
NegotiateRequest request = (NegotiateRequest)command;
|
NegotiateRequest request = (NegotiateRequest)command;
|
||||||
SMB2Command response = NegotiateHelper.GetNegotiateResponse(request, m_securityProvider, state, m_serverGuid);
|
SMB2Command response = NegotiateHelper.GetNegotiateResponse(request, m_securityProvider, state, m_serverGuid, m_serverStartTime);
|
||||||
if (state.ServerDialect != SMBDialect.NotSet)
|
if (state.ServerDialect != SMBDialect.NotSet)
|
||||||
{
|
{
|
||||||
state = new SMB2ConnectionState(state, AllocatePersistentFileID);
|
state = new SMB2ConnectionState(state, AllocatePersistentFileID);
|
||||||
|
|
|
@ -35,6 +35,7 @@ namespace SMBLibrary.Server
|
||||||
private Socket m_listenerSocket;
|
private Socket m_listenerSocket;
|
||||||
private bool m_listening;
|
private bool m_listening;
|
||||||
private Guid m_serverGuid;
|
private Guid m_serverGuid;
|
||||||
|
private DateTime m_serverStartTime;
|
||||||
|
|
||||||
public event EventHandler<LogEntry> OnLogEntry;
|
public event EventHandler<LogEntry> OnLogEntry;
|
||||||
|
|
||||||
|
@ -48,6 +49,7 @@ namespace SMBLibrary.Server
|
||||||
m_securityProvider = securityProvider;
|
m_securityProvider = securityProvider;
|
||||||
m_serverAddress = serverAddress;
|
m_serverAddress = serverAddress;
|
||||||
m_serverGuid = Guid.NewGuid();
|
m_serverGuid = Guid.NewGuid();
|
||||||
|
m_serverStartTime = DateTime.Now;
|
||||||
m_transport = transport;
|
m_transport = transport;
|
||||||
m_enableSMB1 = enableSMB1;
|
m_enableSMB1 = enableSMB1;
|
||||||
m_enableSMB2 = enableSMB2;
|
m_enableSMB2 = enableSMB2;
|
||||||
|
@ -247,7 +249,7 @@ namespace SMBLibrary.Server
|
||||||
List<string> smb2Dialects = SMB2.NegotiateHelper.FindSMB2Dialects(message);
|
List<string> smb2Dialects = SMB2.NegotiateHelper.FindSMB2Dialects(message);
|
||||||
if (smb2Dialects.Count > 0)
|
if (smb2Dialects.Count > 0)
|
||||||
{
|
{
|
||||||
SMB2Command response = SMB2.NegotiateHelper.GetNegotiateResponse(smb2Dialects, m_securityProvider, state, m_serverGuid);
|
SMB2Command response = SMB2.NegotiateHelper.GetNegotiateResponse(smb2Dialects, m_securityProvider, state, m_serverGuid, m_serverStartTime);
|
||||||
if (state.ServerDialect != SMBDialect.NotSet)
|
if (state.ServerDialect != SMBDialect.NotSet)
|
||||||
{
|
{
|
||||||
state = new SMB2ConnectionState(state, AllocatePersistentFileID);
|
state = new SMB2ConnectionState(state, AllocatePersistentFileID);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue