search("ArpNewDevice","CLASS",array('tabs')) != "");
$entries = filterLDAP::query($base, $scope, $filter, $attributes, $category, $objectStorage);
foreach($entries as $key => $entry){
if(preg_match("/".preg_quote(get_ou('systemIncomingRDN'),'/')."/i", $entry['dn'])){
// Detect incoming types
if(in_array('gotoWorkstation', $entry['objectClass'])){
$entries[$key]['objectClass'][] = 'FAKE_OC_NewWorkstation';
$entries[$key]['cn'][0].= " ("._("New workstation").")";
}elseif(in_array('gotoTerminal', $entry['objectClass'])){
$entries[$key]['objectClass'][] = 'FAKE_OC_NewTerminal';
$entries[$key]['cn'][0].= " ("._("New terminal").")";
}elseif($arp_handling_active &&
in_array('GOhard', $entry['objectClass']) &&
!isset($entry['gotoMode'][0])){
$entries[$key]['objectClass'][] = 'FAKE_OC_ArpNewDevice';
$entries[$key]['cn'][0].= " ("._("New unknown device").")";
}elseif(in_array('GOhard', $entry['objectClass'])){
$entries[$key]['objectClass'][] = 'FAKE_OC_NewDevice';
$entries[$key]['cn'][0].= " ("._("New device").")";
}
// Detect SAMBA machines
}elseif(in_array('sambaSamAccount', $entry['objectClass']) && preg_match("/\$$/", $entry['cn'][0])){
$entries[$key]['objectClass'][] = 'FAKE_OC_winstation';
// Detect Workstation & templates
}elseif(in_array('gotoWorkstation', $entry['objectClass'])){
if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
continue; // We do not need templates anymore, we've ogroups now.
//$entries[$key]['objectClass'][] = 'FAKE_OC_WorkstationTemplate';
}
$pwd_acl = $ui->get_permissions($entry['dn'],'workstation/workgeneric','userPassword');
if(preg_match("/w/",$pwd_acl)){
$entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
}
// Detect Terminal & templates
}elseif(in_array('gotoTerminal', $entry['objectClass'])){
if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
continue; // We do not need templates anymore, we've ogroups now.
//$entries[$key]['objectClass'][] = 'FAKE_OC_TerminalTemplate';
}
$pwd_acl = $ui->get_permissions($entry['dn'],'terminal/termgeneric','userPassword');
if(preg_match("/w/",$pwd_acl)){
$entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
}
// Detect Server & templates
}elseif(in_array('goServer', $entry['objectClass'])){
if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
continue; // We do not need templates anymore, we've ogroups now.
//$entries[$key]['objectClass'][] = 'FAKE_OC_ServerTemplate';
}
$pwd_acl = $ui->get_permissions($entry['dn'],'server/servgeneric','userPassword');
if(preg_match("/w/",$pwd_acl)){
$entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
}
// Detect ieee802Device
}elseif(in_array('ieee802Device', $entry['objectClass'])){
$pwd_acl = $ui->get_permissions($entry['dn'],'component/componentGeneric','userPassword');
if(preg_match("/w/",$pwd_acl)){
$entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
}
}
// Detect object states
foreach(array('gotoWorkstation','gotoTerminal','goServer') as $type){
if(in_array($type, $entry['objectClass'])){
if(isset($entry['gotoMode'][0]) && preg_match("/locked/i", $entry['gotoMode'][0])){
$entries[$key]['objectClass'][] = $type."__IS_LOCKED";
}elseif(isset($entry['FAIstate'][0])){
switch (preg_replace('/:.*$/', '', $entry['FAIstate'][0])) {
case 'error':
$state= '__IS_ERROR';
break;
case 'installing':
case 'install':
case 'sysinfo':
case 'softupdate':
case 'scheduledupdate':
$state= '__IS_BUSY';
break;
default: $state ="";
}
if(!empty($state)) $entries[$key]['objectClass'][] = $type.$state;
}
}
}
}
// Append opsi stuff ...
global $config;
$ui = get_userinfo();
if(preg_match("/FAIstate=__NETBOOT__/", $filter) &&
class_available('opsi') &&
$base == $config->current['BASE']){
// Get filter regex ...
$regex = "";
if(preg_match("/\(cn=[^\)\$]*\)/", $filter)){
$regex = trim(preg_replace("/^.*\(cn=([^\)\$]*)\).*$/","\\1", $filter),"* ");
}
// Check ACLs and opsi handle
$opsi_acl = $ui->get_permissions($base,"opsi/opsiProperties");
$opsi = new opsi($config);
$objects = array();
if($opsi instanceof opsi && $opsi->enabled() && preg_match("/r/",$opsi_acl)){
// Get list of opsi hosts
$opsi_clients = $opsi->get_hosts_for_system_management();
if($opsi->is_error()){
msg_dialog::display(_("Error"),msgPool::siError($opsi->get_error()),ERROR_DIALOG);
}else{
foreach($opsi_clients as $entry){
if(empty($regex) || preg_match('/'.preg_quote($regex,'/').'/i',$entry['cn'])){
$entry['objectClass'] = array("FAKE_OC_OpsiHost");
$item = array('count' => count($entry));
foreach($entry as $name => $value){
$item[] = $name;
$item[$name] = $value;
}
$entries[] = $item;
}
}
}
}
}
return($entries);
}
}
?>