########## # Filename: ldap_search.pl # # Author: Alec Resnick :: aresnick@mit.edu :: http://aresnick.mit.edu # # Version: 0.1 # # Date: 1 January 2008 # # Description: A quick hack to search through MIT's personnel records on a first name basis. Online at http://scripts.mit.edu/~aresnick/useful/ppl # # Modified from http://search.cpan.org/~gbarr/perl-ldap-0.34/lib/Net/LDAP/Examples.pod # # Copyleft 2007 ########## #!/usr/bin/perl -wT use CGI qw(:standard); use CGI::Carp qw(warningsToBrowser fatalsToBrowser); use Net::LDAP; use strict; sub LDAPsearch{ my ($ldap,$searchString,$attrs,$base) = @_; # Setting defaults if (!$base ) { $base = "dc=mit,dc=edu"; } if (!$attrs ) { $attrs = [ 'cn','mail' ]; } my $result = $ldap->search ( base => "$base", scope => "sub", filter => "$searchString", attrs => $attrs ); } sub initialize_HTML{ print header; # Trusting print_html was a pain print <<"ALL"; finding people\@mit

ALL } sub parse_form{ my %form; foreach my $p (param()) { $form{$p} = param($p); } return %form; } sub parse_queries{ # Hack for now, handle only one my (%form) = @_; my $query = $form{'query'}; my $queryString; $queryString = $query; # if ($query =~ /first:(.*)/){ $queryString = $1} # if ($query =~ /last:(.*)/){ $queryString = $1} print "Your query, ".$queryString." returned the following results. . .

"; return $queryString; } sub open_LDAP{ my ($ldapServer) = @_; my $ldap = Net::LDAP->new ( $ldapServer ) or die "$@"; my $mesg = $ldap->bind ( version => 3 ); # use for searches return $ldap; } sub parse_result{ my ($result) = @_; my %recordsTable; my @entries = $result->entries; my $entr; foreach $entr ( @entries ) { my $attr; foreach $attr ( sort $entr->attributes ) { # Skipping binary next if ( $attr =~ /;binary$/ ); $recordsTable{$entr}{$attr} = $entr->get_value ( $attr ); } } return %recordsTable; } sub print_result{ my (%recordsTable) = @_; my ($key, $value); while(($key, $value) = each(%recordsTable)) { my $name = $recordsTable{$key}{'cn'}; my $divID = $name; $divID =~ s/\s/_/; print "
\n"; print h3($name)."\n"; print "
    \n"; my ($attrName,$attrVal,%value); while(($attrName,$attrVal) = each(%$value)){ # skip binary we can't handle next if ( $attrVal =~ /;binary$/ ); print "
  • $attrName: ", $attrVal ,"
  • \n"; } print "
"; print "

"; print "
\n"; } } # Finally running everything initialize_HTML; my %form = parse_form; my $ldap = open_LDAP("ldap.mit.edu"); my @Attrs = ( ); my $searchString=parse_queries(%form); my $result = LDAPsearch ( $ldap, "cn=".$searchString, \@Attrs ); my %recordsTable = parse_result($result); print_result(%recordsTable); print end_html; # EOF