sinistapenguin Posted February 20, 2008 Share Posted February 20, 2008 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.