lib/win32/security/acl.rb in win32-security-0.1.2 vs lib/win32/security/acl.rb in win32-security-0.1.3
- old
+ new
@@ -4,145 +4,145 @@
require 'windows/msvcrt/buffer'
# The Win32 module serves as a namespace only.
module Win32
- # The Security class serves as a toplevel class namespace.
- class Security
+ # The Security class serves as a toplevel class namespace.
+ class Security
- # The ACL class encapsulates an Access Control List.
- class ACL
- include Windows::Error
- include Windows::Security
- include Windows::Limits
- include Windows::MSVCRT::Buffer
+ # The ACL class encapsulates an Access Control List.
+ class ACL
+ include Windows::Error
+ include Windows::Security
+ include Windows::Limits
+ include Windows::MSVCRT::Buffer
- # The version of the Win32::Security::ACL class.
- VERSION = '0.1.0'
+ # The version of the Win32::Security::ACL class.
+ VERSION = '0.1.0'
- # The binary representation of the ACL structure
- attr_reader :acl
+ # The binary representation of the ACL structure
+ attr_reader :acl
- # The revision level.
- attr_reader :revision
+ # The revision level.
+ attr_reader :revision
- # Creates and returns a new Win32::Security::ACL object. This object
- # encapsulates an ACL structure, including a binary representation of
- # the ACL itself, and the revision information.
- #
- def initialize(revision = ACL_REVISION)
- acl = 0.chr * 8 # This can be increased later as needed
+ # Creates and returns a new Win32::Security::ACL object. This object
+ # encapsulates an ACL structure, including a binary representation of
+ # the ACL itself, and the revision information.
+ #
+ def initialize(revision = ACL_REVISION)
+ acl = 0.chr * 8 # This can be increased later as needed
- unless InitializeAcl(acl, acl.size, revision)
- raise Error, get_last_error
- end
+ unless InitializeAcl(acl, acl.size, revision)
+ raise Error, get_last_error
+ end
- @acl = acl
- @revision = revision
- end
+ @acl = acl
+ @revision = revision
+ end
- # Returns the number of ACE's in the ACL object.
- #
- def ace_count
- buf = 0.chr * 12 # sizeof(ACL_SIZE_INFORMATION)
+ # Returns the number of ACE's in the ACL object.
+ #
+ def ace_count
+ buf = 0.chr * 12 # sizeof(ACL_SIZE_INFORMATION)
- unless GetAclInformation(@acl, buf, buf.size, AclSizeInformation)
- raise Error, get_last_error
- end
+ unless GetAclInformation(@acl, buf, buf.size, AclSizeInformation)
+ raise Error, get_last_error
+ end
- buf[0, 4].unpack('L')[0]
- end
+ buf[0, 4].unpack('L')[0]
+ end
- # Adds an access allowed ACE to the given +sid+. The +mask+ is a
- # bitwise OR'd value of access rights.
- #
- def add_access_allowed_ace(sid, mask=0)
- unless AddAccessAllowedAce(@acl, @revision, mask, sid)
- raise Error, get_last_error
- end
- end
+ # Adds an access allowed ACE to the given +sid+. The +mask+ is a
+ # bitwise OR'd value of access rights.
+ #
+ def add_access_allowed_ace(sid, mask=0)
+ unless AddAccessAllowedAce(@acl, @revision, mask, sid)
+ raise Error, get_last_error
+ end
+ end
- # Adds an access denied ACE to the given +sid+.
- #
- def add_access_denied_ace(sid, mask=0)
- unless AddAccessDeniedAce(@acl, @revision, mask, sid)
- raise Error, get_last_error
- end
- end
+ # Adds an access denied ACE to the given +sid+.
+ #
+ def add_access_denied_ace(sid, mask=0)
+ unless AddAccessDeniedAce(@acl, @revision, mask, sid)
+ raise Error, get_last_error
+ end
+ end
- # Adds an ACE to the ACL object with the given +revision+ at +index+
- # or the end of the chain if no index is specified.
- #
- # Returns the index if successful.
- #--
- # This is untested and will require an actual implementation of
- # Win32::Security::Ace before it can work properly.
- #
- def add_ace(ace, index=MAXDWORD)
- unless AddAce(@acl, @revision, index, ace, ace.length)
- raise Error, get_last_error
- end
+ # Adds an ACE to the ACL object with the given +revision+ at +index+
+ # or the end of the chain if no index is specified.
+ #
+ # Returns the index if successful.
+ #--
+ # This is untested and will require an actual implementation of
+ # Win32::Security::Ace before it can work properly.
+ #
+ def add_ace(ace, index=MAXDWORD)
+ unless AddAce(@acl, @revision, index, ace, ace.length)
+ raise Error, get_last_error
+ end
- index
- end
+ index
+ end
- # Deletes an ACE from the ACL object at +index+, or from the end of
- # the chain if no index is specified.
- #
- # Returns the index if successful.
- #--
- # This is untested and will require an actual implementation of
- # Win32::Security::Ace before it can work properly.
- #
- def delete_ace(index=MAXDWORD)
- unless DeleteAce(@ace, index)
- raise Error, get_last_error
- end
+ # Deletes an ACE from the ACL object at +index+, or from the end of
+ # the chain if no index is specified.
+ #
+ # Returns the index if successful.
+ #--
+ # This is untested and will require an actual implementation of
+ # Win32::Security::Ace before it can work properly.
+ #
+ def delete_ace(index=MAXDWORD)
+ unless DeleteAce(@ace, index)
+ raise Error, get_last_error
+ end
- index
- end
+ index
+ end
- # Finds and returns a pointer (address) to an ACE in the ACL at the
- # given +index+. If no index is provided, then an address to the
- # first free byte of the ACL is returned.
- #
- def find_ace(index = nil)
- ptr = [0].pack('L')
+ # Finds and returns a pointer (address) to an ACE in the ACL at the
+ # given +index+. If no index is provided, then an address to the
+ # first free byte of the ACL is returned.
+ #
+ def find_ace(index = nil)
+ ptr = [0].pack('L')
- if index.nil?
- unless FindFirstFreeAce(@acl, ptr)
- raise Error, get_last_error
- end
- else
- unless GetAce(@acl, index, ptr)
- raise Error, get_last_error
- end
- end
+ if index.nil?
+ unless FindFirstFreeAce(@acl, ptr)
+ raise Error, get_last_error
+ end
+ else
+ unless GetAce(@acl, index, ptr)
+ raise Error, get_last_error
+ end
+ end
- [ptr].pack('p*').unpack('L')[0]
- end
+ [ptr].pack('p*').unpack('L')[0]
+ end
- # Sets the revision information level, where the +revision_level+
- # can be ACL_REVISION1, ACL_REVISION2, ACL_REVISION3 or ACL_REVISION4.
- #
- # Returns the revision level if successful.
- #
- def revision=(revision_level)
- buf = [revision_level].pack('L')
+ # Sets the revision information level, where the +revision_level+
+ # can be ACL_REVISION1, ACL_REVISION2, ACL_REVISION3 or ACL_REVISION4.
+ #
+ # Returns the revision level if successful.
+ #
+ def revision=(revision_level)
+ buf = [revision_level].pack('L')
- unless SetAclInformation(@acl, buf, buf.size, AclRevisionInformation)
- raise Error, get_last_error
- end
+ unless SetAclInformation(@acl, buf, buf.size, AclRevisionInformation)
+ raise Error, get_last_error
+ end
- @revision = revision_level
+ @revision = revision_level
- revision_level
- end
+ revision_level
+ end
- # Returns whether or not the ACL is a valid ACL.
- #
- def valid?
- IsValidAcl(@acl)
- end
+ # Returns whether or not the ACL is a valid ACL.
+ #
+ def valid?
+ IsValidAcl(@acl)
end
- end
+ end
+ end
end