Hi All

I am a complete novice in terms of PHP/ LDAP so am probably way out of my depth.

We are using Joomla! as a CMS for our corporate Intranet. I was hoping to find an extension that would pull back a phone/ email directory from Active Directory (on W2K3). Having failed to find an extension, I started looking at writing something myself.

I have pinched a script I found on the internet and it works in a limited way.

I can connect/ bind etc. But I can only search within a specified OU.

Our AD is organised like this:

DOMAIN
----Office
--------Dept
------------Users
--------Dept
------------Users
--------Dept
------------Users
----Office
--------Dept
------------Users
--------Dept
------------Users
etc...

I would like my script to search all of the offices & depts for users matching certain criteria.

The script I pinched consists of a search page:

Code:

<form action="script.php" method="post">
    Search criteria:<br />
    <input type="text" name="keyword" size="20"
           maxlength="20" value="" /><br />
    Filter:<br />
    <select name="filter">
        <option value="">Choose One:</option>
        <option value="sn">Last Name</option>
        <option value="telephonenumber">Phone</option>
        <option value="l">City</option>
    </select><br />
    <input type="submit" value="Search!" />
  </form>

Which passes parameters to the script below (names have been changed to protect the innocent!):

Code:

<?php

// Designate a few variables
$host = "ldap://###.##.##.##";
$user = "ben.powell@jephson.org.uk";
$pswd = "myPassw0rd";

$ad = ldap_connect($host)
      or die( "Could not connect!" );

// Set version number
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3)
     or die ("Could not set ldap protocol");

// Binding to ldap server
$bd = ldap_bind($ad, $user, $pswd)
      or die ("Could not bind");

// Create the DN
$dn = " OU=IT Customer Support, OU=Office Central, DC=domain, DC=local";

// Specify only those parameters we're interested in displaying
$attrs = array("displayName","userPrincipalName","physicalDeliveryOfficeName","givenName", "telephoneNumber");

// Create the filter from the search parameters
$filter = $_POST['filter']."=".$_POST['keyword']."*";

$search = ldap_search($ad, $dn, $filter, $attrs)
          or die ("ldap search failed");

$entries = ldap_get_entries($ad, $search);

if ($entries["count"] > 0) {
  echo "<table border='1' width='90%'>";
  echo "<tr>";
  echo "<td>Name:</td>";
  echo "<td>Office:</td>";
  echo "<td>Email:</td>";
  echo "<td>Telephone:</td>";
  echo "</tr>";

for ($i=0; $i<$entries["count"]; $i++) {
  echo "<tr>";
  echo "<td>".$entries[$i]["displayname"][0]."</td>";
  echo "<td>".$entries[$i]["physicaldeliveryofficename"][0]."</td>";
  echo "<td> <a href='mailto:".$entries[$i]["userprincipalname"][0]."'>".$entries[$i]["userprincipalname"][0]."</a></td>";
  echo "<td>".$entries[$i]["telephonenumber"][0]."</td>";
  echo "</tr>";
}
  echo "</table>";
} else {
   echo "<p>No results found!</p>";
}

ldap_unbind($ad);

?>

This works fine and I can find anyone within the "OU=IT Customer Support, OU=Office Central" department.

Unfortunately I can't figure out how to make it search the whole tree. According to the PHP site, it does this by default, but I can't figure out what I need to change. Is it the $dn= bit? I have tried everything I can think of here.

Any help would be gratefully received.

Thanks

Ben

    Write a Reply...