Files
metasploit-gs/lib/rex/proto/ldap/dn_binary.rb
T
2024-04-08 11:32:53 +10:00

38 lines
1.3 KiB
Ruby
Executable File

module Rex
module Proto
module LDAP
# Handle converting objects into the DN-Binary syntax
# See: https://learn.microsoft.com/en-us/windows/win32/adschema/s-object-dn-binary
class DnBinary
def initialize(dn, data)
self.dn = dn
self.data = data
end
# Turn a DN-Binary string into a structured object containing data and a DN
# @param str [String] A DN-Binary-formatted string
def self.decode(str)
groups = str.match(/B:(\d+):(([a-fA-F0-9]{2})*):(.*)/)
raise ArgumentError.new('Invalid DN Binary string') if groups.nil?
length = groups[1].to_i
raise ArgumentError.new('Invalid DN Binary string length') if groups[2].length != length
data = [groups[2]].pack('H*')
DnBinary.new(groups[4], data)
end
# Turn this structured object containing data and a DN into a DN-Binary string
# @return [String] The DN-Binary-formatted string
def encode
data_hex = self.data.unpack('H*')[0]
"B:#{data_hex.length}:#{data_hex}:#{self.dn}"
end
attr_accessor :data # Raw bytes
attr_accessor :dn # LDAP Distinguished name
end
end
end
end