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