summaryrefslogtreecommitdiffstats
path: root/vendor/gems/net-ldap-0.2.2/lib/net/ldap/dataset.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gems/net-ldap-0.2.2/lib/net/ldap/dataset.rb')
-rw-r--r--vendor/gems/net-ldap-0.2.2/lib/net/ldap/dataset.rb154
1 files changed, 0 insertions, 154 deletions
diff --git a/vendor/gems/net-ldap-0.2.2/lib/net/ldap/dataset.rb b/vendor/gems/net-ldap-0.2.2/lib/net/ldap/dataset.rb
deleted file mode 100644
index 363d25971..000000000
--- a/vendor/gems/net-ldap-0.2.2/lib/net/ldap/dataset.rb
+++ /dev/null
@@ -1,154 +0,0 @@
-# -*- ruby encoding: utf-8 -*-
-##
-# An LDAP Dataset. Used primarily as an intermediate format for converting
-# to and from LDIF strings and Net::LDAP::Entry objects.
-class Net::LDAP::Dataset < Hash
- ##
- # Dataset object comments.
- attr_reader :comments
-
- def initialize(*args, &block) # :nodoc:
- super
- @comments = []
- end
-
- ##
- # Outputs an LDAP Dataset as an array of strings representing LDIF
- # entries.
- def to_ldif
- ary = []
- ary += @comments unless @comments.empty?
- keys.sort.each do |dn|
- ary << "dn: #{dn}"
-
- attributes = self[dn].keys.map { |attr| attr.to_s }.sort
- attributes.each do |attr|
- self[dn][attr.to_sym].each do |value|
- if attr == "userpassword" or value_is_binary?(value)
- value = [value].pack("m").chomp.gsub(/\n/m, "\n ")
- ary << "#{attr}:: #{value}"
- else
- ary << "#{attr}: #{value}"
- end
- end
- end
-
- ary << ""
- end
- block_given? and ary.each { |line| yield line}
-
- ary
- end
-
- ##
- # Outputs an LDAP Dataset as an LDIF string.
- def to_ldif_string
- to_ldif.join("\n")
- end
-
- ##
- # Convert the parsed LDIF objects to Net::LDAP::Entry objects.
- def to_entries
- ary = []
- keys.each do |dn|
- entry = Net::LDAP::Entry.new(dn)
- self[dn].each do |attr, value|
- entry[attr] = value
- end
- ary << entry
- end
- ary
- end
-
- ##
- # This is an internal convenience method to determine if a value requires
- # base64-encoding before conversion to LDIF output. The standard approach
- # in most LDAP tools is to check whether the value is a password, or if
- # the first or last bytes are non-printable. Microsoft Active Directory,
- # on the other hand, sometimes sends values that are binary in the middle.
- #
- # In the worst cases, this could be a nasty performance killer, which is
- # why we handle the simplest cases first. Ideally, we would also test the
- # first/last byte, but it's a bit harder to do this in a way that's
- # compatible with both 1.8.6 and 1.8.7.
- def value_is_binary?(value) # :nodoc:
- value = value.to_s
- return true if value[0] == ?: or value[0] == ?<
- value.each_byte { |byte| return true if (byte < 32) || (byte > 126) }
- false
- end
- private :value_is_binary?
-
- class << self
- class ChompedIO # :nodoc:
- def initialize(io)
- @io = io
- end
- def gets
- s = @io.gets
- s.chomp if s
- end
- end
-
- ##
- # Creates a Dataset object from an Entry object. Used mostly to assist
- # with the conversion of
- def from_entry(entry)
- dataset = Net::LDAP::Dataset.new
- hash = { }
- entry.each_attribute do |attribute, value|
- next if attribute == :dn
- hash[attribute] = value
- end
- dataset[entry.dn] = hash
- dataset
- end
-
- ##
- # Reads an object that returns data line-wise (using #gets) and parses
- # LDIF data into a Dataset object.
- def read_ldif(io)
- ds = Net::LDAP::Dataset.new
- io = ChompedIO.new(io)
-
- line = io.gets
- dn = nil
-
- while line
- new_line = io.gets
-
- if new_line =~ /^[\s]+/
- line << " " << $'
- else
- nextline = new_line
-
- if line =~ /^#/
- ds.comments << line
- yield :comment, line if block_given?
- elsif line =~ /^dn:[\s]*/i
- dn = $'
- ds[dn] = Hash.new { |k,v| k[v] = [] }
- yield :dn, dn if block_given?
- elsif line.empty?
- dn = nil
- yield :end, nil if block_given?
- elsif line =~ /^([^:]+):([\:]?)[\s]*/
- # $1 is the attribute name
- # $2 is a colon iff the attr-value is base-64 encoded
- # $' is the attr-value
- # Avoid the Base64 class because not all Ruby versions have it.
- attrvalue = ($2 == ":") ? $'.unpack('m').shift : $'
- ds[dn][$1.downcase.to_sym] << attrvalue
- yield :attr, [$1.downcase.to_sym, attrvalue] if block_given?
- end
-
- line = nextline
- end
- end
-
- ds
- end
- end
-end
-
-require 'net/ldap/entry' unless defined? Net::LDAP::Entry