1 <?php
3 class filterSYSTEMS {
5 static function query($base, $scope, $filter, $attributes, $category, $objectStorage= "")
6 {
7 $ui = get_userinfo();
9 // Check whether the arp handling active or not
10 $arp_handling_active = ($this->config->search("ArpNewDevice","CLASS",array('tabs')) != "")
12 $entries = filterLDAP::query($base, $scope, $filter, $attributes, $category, $objectStorage);
13 foreach($entries as $key => $entry){
14 if(preg_match("/".preg_quote(get_ou('systemIncomingRDN'),'/')."/i", $entry['dn'])){
16 // Detect incoming types
17 if(in_array('gotoWorkstation', $entry['objectClass'])){
18 $entries[$key]['objectClass'][] = 'FAKE_OC_NewWorkstation';
19 $entries[$key]['cn'][0].= " <i>("._("New workstation").")</i>";
20 }elseif(in_array('gotoTerminal', $entry['objectClass'])){
21 $entries[$key]['objectClass'][] = 'FAKE_OC_NewTerminal';
22 $entries[$key]['cn'][0].= " <i>("._("New terminal").")</i>";
23 }elseif($arp_handling_active &&
24 in_array('GOhard', $entry['objectClass']) &&
25 !isset($entry['gotoMode'][0])){
26 $entries[$key]['objectClass'][] = 'FAKE_OC_ArpNewDevice';
27 $entries[$key]['cn'][0].= " <i>("._("New unknown device").")</i>";
28 }elseif(in_array('GOhard', $entry['objectClass'])){
29 $entries[$key]['objectClass'][] = 'FAKE_OC_NewDevice';
30 $entries[$key]['cn'][0].= " <i>("._("New device").")</i>";
31 }
33 // Detect SAMBA machines
34 }elseif(in_array('sambaSamAccount', $entry['objectClass']) && preg_match("/\$$/", $entry['cn'][0])){
35 $entries[$key]['objectClass'][] = 'FAKE_OC_winstation';
37 // Detect Workstation & templates
38 }elseif(in_array('gotoWorkstation', $entry['objectClass'])){
39 if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
40 $entries[$key]['objectClass'][] = 'FAKE_OC_WorkstationTemplate';
41 }
42 $pwd_acl = $ui->get_permissions($entry['dn'],'workstation/workgeneric','userPassword');
43 if(preg_match("/w/",$pwd_acl)){
44 $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
45 }
47 // Detect Terminal & templates
48 }elseif(in_array('gotoTerminal', $entry['objectClass'])){
49 if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
50 $entries[$key]['objectClass'][] = 'FAKE_OC_TerminalTemplate';
51 }
52 $pwd_acl = $ui->get_permissions($entry['dn'],'terminal/termgeneric','userPassword');
53 if(preg_match("/w/",$pwd_acl)){
54 $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
55 }
57 // Detect Server & templates
58 }elseif(in_array('goServer', $entry['objectClass'])){
59 if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
60 $entries[$key]['objectClass'][] = 'FAKE_OC_ServerTemplate';
61 }
62 $pwd_acl = $ui->get_permissions($entry['dn'],'server/servgeneric','userPassword');
63 if(preg_match("/w/",$pwd_acl)){
64 $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
65 }
67 // Detect ieee802Device
68 }elseif(in_array('ieee802Device', $entry['objectClass'])){
69 $pwd_acl = $ui->get_permissions($entry['dn'],'component/componentGeneric','userPassword');
70 if(preg_match("/w/",$pwd_acl)){
71 $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
72 }
73 }
75 // Detect object states
76 foreach(array('gotoWorkstation','gotoTerminal','goServer') as $type){
77 if(in_array($type, $entry['objectClass'])){
79 if(isset($entry['gotoMode'][0]) && preg_match("/locked/i", $entry['gotoMode'][0])){
80 $entries[$key]['objectClass'][] = $type."__IS_LOCKED";
81 }elseif(isset($entry['FAIstate'][0])){
82 switch (preg_replace('/:.*$/', '', $entry['FAIstate'][0])) {
83 case 'error':
84 $state= '__IS_ERROR';
85 break;
86 case 'installing':
87 case 'install':
88 case 'sysinfo':
89 case 'softupdate':
90 case 'scheduledupdate':
91 $state= '__IS_BUSY';
92 break;
93 default: $state ="";
94 }
95 if(!empty($state)) $entries[$key]['objectClass'][] = $type.$state;
96 }
97 }
98 }
99 }
101 // Append opsi stuff ...
102 global $config;
103 $ui = get_userinfo();
104 if(preg_match("/FAIstate=__NETBOOT__/", $filter) &&
105 class_available('opsi') &&
106 $base == $config->current['BASE']){
108 // Check ACLs and opsi handle
109 $opsi_acl = $ui->get_permissions($base,"opsi/opsiProperties");
110 $opsi = new opsi($config);
111 $objects = array();
112 if($opsi instanceof opsi && $opsi->enabled() && preg_match("/r/",$opsi_acl)){
114 // Get list of opsi hosts
115 $opsi_clients = $opsi->get_hosts_for_system_management();
116 if($opsi->is_error()){
117 msg_dialog::display(_("Error"),msgPool::siError($opsi->get_error()),ERROR_DIALOG);
118 }else{
119 foreach($opsi_clients as $entry){
120 $entry['objectClass'] = array("FAKE_OC_OpsiHost");
121 $item = array('count' => count($entry));
122 foreach($entry as $name => $value){
123 $item[] = $name;
124 $item[$name] = $value;
125 }
126 $entries[] = $item;
127 }
128 }
129 }
130 }
131 return($entries);
132 }
133 }
135 ?>