# File lib/net/ldap/dataset.rb, line 38
      def self.read_ldif io
        ds = Dataset.new
        io = IOFilter.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
            elsif line =~ /^dn:[\s]*/i
              dn = $'
              ds[dn] = Hash.new {|k,v| k[v] = []}
            elsif line.length == 0
              dn = nil
            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.intern] << attrvalue
            end

            line = nextline
          end
        end

        ds
      end