module OpenSSL::X509::Name::RFC2253DN

def scan(dn)

def scan(dn)
  str = dn
  ary = []
  while true
    if md = TypeAndValue.match(str)
      matched = md.to_s
      remain = md.post_match
      type = md[1]
      value, tag = expand_value(md[2], md[3], md[4]) rescue nil
      if value
        type_and_value = [type, value]
        type_and_value.push(tag) if tag
        ary.unshift(type_and_value)
        if remain.length > 2 && remain[0] == ?,
          str = remain[1..-1]
          next
        elsif remain.length > 2 && remain[0] == ?+
          raise OpenSSL::X509::NameError,
            "multi-valued RDN is not supported: #{dn}"
        elsif remain.empty?
          break
        end
      end
    end
    msg_dn = dn[0, dn.length - str.length] + " =>" + str
    raise OpenSSL::X509::NameError, "malformed RDN: #{msg_dn}"
  end
  return ary
end