Sophie

Sophie

distrib > Mandriva > 2009.0 > x86_64 > media > contrib-release > by-pkgid > 1e7e9638edf0671daaacd16b3392c029 > files > 14

ruby-ldap-0.9.7-3mdv2008.1.x86_64.rpm

#!/usr/bin/env ruby
# $Id: search.cgi,v 1.1.1.1 2002/11/06 07:56:34 ttate Exp $

require 'cgi'
require 'ldap'

cgi = CGI.new
ldap_host = cgi['host'][0] || 'localhost'
ldap_port = cgi['port'][0] || LDAP::LDAP_PORT
ldap_base_dn = cgi['base'][0] || ''
ldap_filter  = cgi['filter'][0] || ''
ldap_attrs   = (cgi['attrs'][0] || '').split(",")
if( ! ldap_attrs[0] )
  ldap_attrs = nil
end
max_entries  = 50

def html_tag(attr, val)
  tagged_val = val
  case attr.downcase
  when 'mail'
    tagged_val = "<a href=\"mailto:#{val}\">#{val}</a>"
  when 'telephonenumber','tel','telephone',/phone$/
    tagged_val = "<a href=\"tel:#{val.gsub(/[\(\)\-\s]/,'')}\">#{val}</a>"
  when 'fax'
    tagged_val = "<a href=\"fax:#{val.gsub(/[\(\)\-\s]/,'')}\">#{val}</a>"
  end
  case val.downcase
  when /^http:.+/
    tagged_val = "<a href=\"#{val}\">#{val}</a>"
  end
  tagged_val
end

def print_entry(entry)
  print("<table border=1>\n")
  print("<tr><td>dn</td><td>#{entry.dn}</td></tr>\n")
  entry.attrs.each{|attr|
    entry.vals(attr).each{|val|
      print("<tr><td>#{attr}</td><td>#{html_tag(attr,val)}</td></tr>\n")
    }
  }
  print("</table>\n")
  print("<p>\n")
end


print("Content-Type: text/html\n\n")
print("<html><body>\n")
begin
  ldap_conn = LDAP::Conn.new(ldap_host, ldap_port.to_i)
  ldap_conn.bind{
    i = 0
    ldap_conn.search(ldap_base_dn, LDAP::LDAP_SCOPE_SUBTREE,
		     ldap_filter, ldap_attrs){|entry|
      i += 1
      if( i > max_entries )
	raise(RuntimeError,"too many entries are found.")
      end
      print_entry(entry)
    }
  }
rescue LDAP::ResultError => msg
  print(msg)
rescue Exception => ex
  print(ex)
end
print("</body></html>\n")