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