153 lines
5.2 KiB
PHP
153 lines
5.2 KiB
PHP
<?php
|
|
/**
|
|
* PHP LDAP CLASS FOR MANIPULATING ACTIVE DIRECTORY
|
|
* Version 4.0.4
|
|
*
|
|
* PHP Version 5 with SSL and LDAP support
|
|
*
|
|
* Written by Scott Barnett, Richard Hyland
|
|
* email: scott@wiggumworld.com, adldap@richardhyland.com
|
|
* http://adldap.sourceforge.net/
|
|
*
|
|
* Copyright (c) 2006-2012 Scott Barnett, Richard Hyland
|
|
*
|
|
* We'd appreciate any improvements or additions to be submitted back
|
|
* to benefit the entire community :)
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* @category ToolsAndUtilities
|
|
* @package adLDAP
|
|
* @subpackage Computers
|
|
* @author Scott Barnett, Richard Hyland
|
|
* @copyright (c) 2006-2012 Scott Barnett, Richard Hyland
|
|
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html LGPLv2.1
|
|
* @revision $Revision: 97 $
|
|
* @version 4.0.4
|
|
* @link http://adldap.sourceforge.net/
|
|
*/
|
|
require_once(dirname(__FILE__) . '/../adLDAP.php');
|
|
require_once(dirname(__FILE__) . '/../collections/adLDAPComputerCollection.php');
|
|
|
|
/**
|
|
* COMPUTER MANAGEMENT FUNCTIONS
|
|
*/
|
|
class adLDAPComputers {
|
|
|
|
/**
|
|
* The current adLDAP connection via dependency injection
|
|
*
|
|
* @var adLDAP
|
|
*/
|
|
protected $adldap;
|
|
|
|
public function __construct(adLDAP $adldap) {
|
|
$this->adldap = $adldap;
|
|
}
|
|
|
|
/**
|
|
* Get information about a specific computer. Returned in a raw array format from AD
|
|
*
|
|
* @param string $computerName The name of the computer
|
|
* @param array $fields Attributes to return
|
|
* @return array
|
|
*/
|
|
public function info($computerName, $fields = NULL)
|
|
{
|
|
if ($computerName === NULL) { return false; }
|
|
if (!$this->adldap->getLdapBind()) { return false; }
|
|
|
|
$filter = "(&(objectClass=computer)(cn=" . $computerName . "))";
|
|
if ($fields === NULL) {
|
|
$fields = array("memberof","cn","displayname","dnshostname","distinguishedname","objectcategory","operatingsystem","operatingsystemservicepack","operatingsystemversion");
|
|
}
|
|
$sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
|
|
$entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
|
|
|
|
return $entries;
|
|
}
|
|
|
|
/**
|
|
* Find information about the computers. Returned in a raw array format from AD
|
|
*
|
|
* @param string $computerName The name of the computer
|
|
* @param array $fields Array of parameters to query
|
|
* @return mixed
|
|
*/
|
|
public function infoCollection($computerName, $fields = NULL)
|
|
{
|
|
if ($computerName === NULL) { return false; }
|
|
if (!$this->adldap->getLdapBind()) { return false; }
|
|
|
|
$info = $this->info($computerName, $fields);
|
|
|
|
if ($info !== false) {
|
|
$collection = new adLDAPComputerCollection($info, $this->adldap);
|
|
return $collection;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check if a computer is in a group
|
|
*
|
|
* @param string $computerName The name of the computer
|
|
* @param string $group The group to check
|
|
* @param bool $recursive Whether to check recursively
|
|
* @return array
|
|
*/
|
|
public function inGroup($computerName, $group, $recursive = NULL)
|
|
{
|
|
if ($computerName === NULL) { return false; }
|
|
if ($group === NULL) { return false; }
|
|
if (!$this->adldap->getLdapBind()) { return false; }
|
|
if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } // use the default option if they haven't set it
|
|
|
|
//get a list of the groups
|
|
$groups = $this->groups($computerName, array("memberof"), $recursive);
|
|
|
|
//return true if the specified group is in the group list
|
|
if (in_array($group, $groups)){
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Get the groups a computer is in
|
|
*
|
|
* @param string $computerName The name of the computer
|
|
* @param bool $recursive Whether to check recursively
|
|
* @return array
|
|
*/
|
|
public function groups($computerName, $recursive = NULL)
|
|
{
|
|
if ($computerName === NULL) { return false; }
|
|
if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } //use the default option if they haven't set it
|
|
if (!$this->adldap->getLdapBind()){ return false; }
|
|
|
|
//search the directory for their information
|
|
$info = @$this->info($computerName, array("memberof", "primarygroupid"));
|
|
$groups = $this->adldap->utilities()->niceNames($info[0]["memberof"]); //presuming the entry returned is our guy (unique usernames)
|
|
|
|
if ($recursive === true) {
|
|
foreach ($groups as $id => $groupName){
|
|
$extraGroups = $this->adldap->group()->recursiveGroups($groupName);
|
|
$groups = array_merge($groups, $extraGroups);
|
|
}
|
|
}
|
|
|
|
return $groups;
|
|
}
|
|
|
|
}
|
|
?>
|