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 continue; // We do not need templates anymore, we've ogroups now.
42 //$entries[$key]['objectClass'][] = 'FAKE_OC_WorkstationTemplate';
43 }
44 $pwd_acl = $ui->get_permissions($entry['dn'],'workstation/workgeneric','userPassword');
45 if(preg_match("/w/",$pwd_acl)){
46 $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
47 }
49 // Detect Terminal & templates
50 }elseif(in_array('gotoTerminal', $entry['objectClass'])){
51 if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
52 continue; // We do not need templates anymore, we've ogroups now.
53 //$entries[$key]['objectClass'][] = 'FAKE_OC_TerminalTemplate';
54 }
55 $pwd_acl = $ui->get_permissions($entry['dn'],'terminal/termgeneric','userPassword');
56 if(preg_match("/w/",$pwd_acl)){
57 $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
58 }
60 // Detect Server & templates
61 }elseif(in_array('goServer', $entry['objectClass'])){
62 if(!isset($entry['macAddress'][0]) || $entry['macAddress'][0] == "-"){
63 continue; // We do not need templates anymore, we've ogroups now.
64 //$entries[$key]['objectClass'][] = 'FAKE_OC_ServerTemplate';
65 }
66 $pwd_acl = $ui->get_permissions($entry['dn'],'server/servgeneric','userPassword');
67 if(preg_match("/w/",$pwd_acl)){
68 $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
69 }
71 // Detect ieee802Device
72 }elseif(in_array('ieee802Device', $entry['objectClass'])){
73 $pwd_acl = $ui->get_permissions($entry['dn'],'component/componentGeneric','userPassword');
74 if(preg_match("/w/",$pwd_acl)){
75 $entries[$key]['objectClass'][] = 'FAKE_OC_PWD_changeAble';
76 }
77 }
79 // Detect object states
80 foreach(array('gotoWorkstation','gotoTerminal','goServer') as $type){
81 if(in_array($type, $entry['objectClass'])){
83 if(isset($entry['gotoMode'][0]) && preg_match("/locked/i", $entry['gotoMode'][0])){
84 $entries[$key]['objectClass'][] = $type."__IS_LOCKED";
85 }elseif(isset($entry['FAIstate'][0])){
86 switch (preg_replace('/:.*$/', '', $entry['FAIstate'][0])) {
87 case 'error':
88 $state= '__IS_ERROR';
89 break;
90 case 'installing':
91 case 'install':
92 case 'sysinfo':
93 case 'softupdate':
94 case 'scheduledupdate':
95 $state= '__IS_BUSY';
96 break;
97 default: $state ="";
98 }
99 if(!empty($state)) $entries[$key]['objectClass'][] = $type.$state;
100 }
101 }
102 }
103 }
105 // Append opsi stuff ...
106 global $config;
107 $ui = get_userinfo();
108 if(preg_match("/FAIstate=__NETBOOT__/", $filter) &&
109 class_available('opsi') &&
110 $base == $config->current['BASE']){
112 // Get filter regex ...
113 $regex = "";
114 if(preg_match("/\(cn=[^\)\$]*\)/", $filter)){
115 $regex = trim(preg_replace("/^.*\(cn=([^\)\$]*)\).*$/","\\1", $filter),"* ");
116 }
118 // Check ACLs and opsi handle
119 $opsi_acl = $ui->get_permissions($base,"opsi/opsiProperties");
120 $opsi = new opsi($config);
121 $objects = array();
122 if($opsi instanceof opsi && $opsi->enabled() && preg_match("/r/",$opsi_acl)){
124 // Get list of opsi hosts
125 $opsi_clients = $opsi->get_hosts_for_system_management();
126 if($opsi->is_error()){
127 msg_dialog::display(_("Error"),msgPool::siError($opsi->get_error()),ERROR_DIALOG);
128 }else{
129 foreach($opsi_clients as $entry){
130 if(empty($regex) || preg_match('/'.preg_quote($regex,'/').'/i',$entry['cn'])){
131 $entry['objectClass'] = array("FAKE_OC_OpsiHost");
132 $item = array('count' => count($entry));
133 foreach($entry as $name => $value){
134 $item[] = $name;
135 $item[$name] = $value;
136 }
137 $entries[] = $item;
138 }
139 }
140 }
141 }
142 }
143 return($entries);
144 }
145 }
147 ?>