Add access denied ace support (#236)

Co-authored-by: Mohammed Aharrabi <AIM@gtt.fr>
This commit is contained in:
maharrabi 2023-12-14 18:55:57 +01:00 committed by GitHub
parent f3883fa8f5
commit b988c3feb0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 0 deletions

View file

@ -30,6 +30,8 @@ namespace SMBLibrary
{
case AceType.ACCESS_ALLOWED_ACE_TYPE:
return new AccessAllowedACE(buffer, offset);
case AceType.ACCESS_DENIED_ACE_TYPE:
return new AccessDeniedACE(buffer, offset);
default:
throw new NotImplementedException();
}

View file

@ -0,0 +1,48 @@
/* Copyright (C) 2014-2017 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
*
* You can redistribute this program and/or modify it under the terms of
* the GNU Lesser Public License as published by the Free Software Foundation,
* either version 3 of the License, or (at your option) any later version.
*/
using Utilities;
namespace SMBLibrary
{
public class AccessDeniedACE : ACE
{
public const int FixedLength = 8;
public AceHeader Header;
public AccessMask Mask;
public SID Sid;
public AccessDeniedACE()
{
Header = new AceHeader();
Header.AceType = AceType.ACCESS_DENIED_ACE_TYPE;
}
public AccessDeniedACE(byte[] buffer, int offset)
{
Header = new AceHeader(buffer, offset + 0);
Mask = (AccessMask)LittleEndianConverter.ToUInt32(buffer, offset + 4);
Sid = new SID(buffer, offset + 8);
}
public override void WriteBytes(byte[] buffer, ref int offset)
{
Header.AceSize = (ushort)this.Length;
Header.WriteBytes(buffer, ref offset);
LittleEndianWriter.WriteUInt32(buffer, ref offset, (uint)Mask);
Sid.WriteBytes(buffer, ref offset);
}
public override int Length
{
get
{
return FixedLength + Sid.Length;
}
}
}
}