\nActive Directory >> Zentrack Import\n\n"; echo "Active Directory >> Zentrack Users Database Import Tool

\n"; echo "Run on: " . date(DATE_RFC822) . "

\n"; // Query AD for user accounts $ad = ldap_connect($dc) or die("Couldn't connect to AD!"); echo "Connected to AD via LDAP
\n"; // Required for AD/Server 2003? ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0); $bd = ldap_bind($ad,$user,$pw) or die("Couldn't bind to AD!"); echo "Bound to AD via LDAP
\n"; // Recursive Query: $ldapResults = ldap_search($ad, $dn, $filter, $attributes); // Same-Level Query: // Uncomment the following line and comment out the line above to search only the same OU level // $ldapResults = ldap_list($ad, $dn, $filter, $attributes); $entries = ldap_get_entries($ad, $ldapResults); echo "Found ".$entries["count"]." entries in AD via LDAP Search
\n"; // Match AD users accounts to MySQL user table $db = mysql_connect($mysql_server,$mysql_user,$mysql_password); if (!$db) { die('Could not connect: ' . mysql_error()); } echo "Connected to MySQL server ".$mysql_server."
\n"; mysql_select_db($mysql_database, $db); // begin loop through the DB usernames and if they aren't in AD delete them $sql = "SELECT login,notes FROM zentrack_users"; $result = mysql_query($sql, $db); if (!$result) { $message = 'Invalid query: ' . mysql_error($db) . "
"; $message .= 'Whole query: ' . $sql . "
"; die($message); } $deletedcount = 0; $totalrows = mysql_num_rows($result); echo "Found " . $totalrows . " entries in DB via SQL Search
\n"; echo "
"; while ($row = mysql_fetch_array($result)) { $namearray[] = strtolower($row['login']); $otherarray[] = $row['notes']; } for ($j=0; $j<($totalrows); $j++) { $inAD = false; $exemptuser = false; if ($namearray[$j] == $adminexempt) { echo "
Admin User : " . $namearray[$j] . "
\n"; $exemptuser = true; } if (($otherarray[$j] == $otherexempt) && (!$exemptuser)) { echo "Exempt User: : " . $namearray[$j] . "
\n"; $exemptuser = true; } if (!$exemptuser) { for ($i=0; $i<$entries["count"]; $i++) { if ($namearray[$j] == strtolower($entries[$i]["samaccountname"][0])) { $i=$entries["count"]; $inAD=true; } } if (!($inAD)) { DeleteUser( $j, $db, $namearray[$j]); ++$deletedcount; } } } // end loop through the DB usernames and if they aren't in AD delete them $usersadded=0; $usersupdated=0; echo "
\n"; for ($i=0; $i<$entries["count"]; $i++) { // look up AD user account in MySQL database // add to database if user does not exist in database already // update all user DB fields if they are already in the database so the DB matches AD // PLEASE NOTE: All "index" values must be in lower-case! This is a PHP array handling quirk? $username = $entries[$i]["samaccountname"][0]; if (DatabaseLookup($username, $db)) { // echo $i." : AD user: ".$username." found in database
\n"; if (UpdateUser( $i, $db, $entries[$i]["givenname"][0], $entries[$i]["sn"][0], $entries[$i]["samaccountname"][0], $entries[$i]["mail"][0])) { ++$usersupdated; } } else { // echo $i." : AD user: ".$username." not found in database
\n"; AddUser( $i, $db, $entries[$i]["givenname"][0], $entries[$i]["sn"][0], $entries[$i]["samaccountname"][0], $entries[$i]["mail"][0]); ++$usersadded; } } echo "
"; if (($deletedcount>0)||($usersadded>0)||($usersupdated>0)) { echo "
\n"; } echo "Number of users deleted : " . $deletedcount . "
\n"; echo "Number of users added : " . $usersadded . "
\n"; echo "Number of users updated : " . $usersupdated . "
\n"; echo "\n"; ldap_unbind($ad); mysql_close($db); // // DatabaseLookup - Check for match between AD account and Users table in MySQL // function DatabaseLookup( $cn, $db ) { // check for match against mysql database $sql = "SELECT login FROM zentrack_users WHERE login = '".mysql_real_escape_string($cn)."'"; $result = mysql_query($sql, $db); if (!$result) { $message = 'Invalid query: ' . mysql_error($db) . "
"; $message .= 'Whole query: ' . $sql . "
"; die($message); } if (mysql_error($db) != "") { echo mysql_error($db) . "
"; } if (mysql_errno($db) != 0) { echo mysql_errno($db) . "
"; } $num_rows = mysql_num_rows($result); return ($num_rows > 0); } // AddUser - Adds record to MySQL Zentrack Users table function AddUser ($i, $db, $fname, $lname, $uname, $email_add) { $sql = "INSERT INTO zentrack_users (fname, lname, login, initials, access_level, email) VALUES (" . " '" . mysql_real_escape_string($fname) . "', " . " '" . mysql_real_escape_string($lname) . "', " . " '" . mysql_real_escape_string(strtolower($uname)) . "', " . " '" . mysql_real_escape_string(strtolower($uname)) . "', " . " '" . mysql_real_escape_string('2') . "', " . " '" . mysql_real_escape_string(strtolower($email_add)) . "')"; $result = mysql_query($sql, $db); if (mysql_error($db) != "") { echo mysql_error($db) . "
"; } if (mysql_errno($db) != 0) { echo mysql_errno($db) . "
"; } if (mysql_affected_rows()>0) { echo "LDAP user " . $i . " : " . $sql . "
\n" ; } //echo $i . " : INSERT effected " .mysql_affected_rows(). " rows
\n"; } // UpdateUser - Updates record in MySQL Zentrack Users table function UpdateUser ($i, $db, $fname, $lname, $uname, $email_add) { $sql = "UPDATE zentrack_users SET fname='" . mysql_real_escape_string($fname) . "', lname='" . mysql_real_escape_string($lname) . "', email='" . mysql_real_escape_string($email_add) . "', initials='" . mysql_real_escape_string(strtolower($uname)) . "' WHERE login='" . mysql_real_escape_string($uname) . "'"; $result = mysql_query($sql, $db); if (mysql_error($db) != "") { echo mysql_error($db) . "
"; } if (mysql_errno($db) != 0) { echo mysql_errno($db) . "
"; } if (mysql_affected_rows()>0) { echo "LDAP user " . $i . " : " . $sql . "
\n" ; return true; } //echo $i . " : Update effected " .mysql_affected_rows(). " rows
\n"; } // DeleteUser - Deletes records from the MySQL Zentrack Users table function DeleteUser ($i, $db, $uname) { $sql = "DELETE FROM zentrack_users WHERE login = '" . $uname . "'"; $result = mysql_query($sql, $db); if (mysql_error($db) != "") { echo mysql_error($db) . "
"; } if (mysql_errno($db) != 0) { echo mysql_errno($db) . "
"; } if (mysql_affected_rows()>0) { echo "LDAP user " . $i . " : " . $sql . "
\n" ; } //echo $i . " : Delete effected " .mysql_affected_rows(). " rows
\n"; } ?>