1 <?php
3 class rsyslog extends plugin
4 {
5 var $plHeadline= "rSyslog";
6 var $plDescription= "View system logs";
8 var $servers = array();
9 var $selected_server = "";
10 var $selected_host = "";
12 function rsyslog (&$config, $dn= NULL)
13 {
14 $this->config= &$config;
15 $this->ui = get_userinfo();
17 // Get list of rsyslog servers
18 $ldap = $this->config->get_ldap_link();
19 $ldap->cd($this->config->current['BASE']);
20 $ldap->search("objectClass=rSyslogServer",array("cn","rSyslogUser","rSyslogDatabase","rSyslogPassword"));
21 while($attrs = $ldap->fetch()){
22 if(empty($this->selected_server)) $this->selected_server = $attrs['cn'][0];
23 $s = array('cn' => $attrs['cn'][0], 'dn' => $attrs['dn'], 'Password' => '', 'status' => 'ok');
24 $s['User'] = $attrs['rSyslogUser'][0];
25 $s['Database'] = $attrs['rSyslogDatabase'][0];
26 $s['Hosts'] = array();
27 $s['ACL'] = "";
28 if(isset($attrs['rSyslogPassword'])) $s['Password'] = $attrs['rSyslogPassword'][0];
29 $this->servers[$attrs['cn'][0]] = $s;
30 }
32 // Check for installed mysql extension, if missing abort
33 $this->mysql_extension_installed = is_callable("mysql_connect");
34 if(!$this->mysql_extension_installed) return;
36 // Test server connetivity
37 $ui = get_userinfo();
38 foreach($this->servers as $name => $server)
39 {
40 $link = @mysql_pconnect($server['cn'], $server['User'], $server['Password']);
41 if ($link === FALSE){
42 new log("debug","gosa_logging","dbconnect",array(),@mysql_error());
43 $this->servers[$name]['status'] = "connectfailed";
44 $this->servers[$name]['error'] = @mysql_error();
45 continue;
46 }elseif (! @mysql_select_db($server['Database'])){
47 new log("debug","gosa_logging","selectdb",array(),@mysql_error());
48 $this->servers[$name]['status'] = "dbmissing";
49 $this->servers[$name]['error'] = @mysql_error();
50 continue;
51 }else{
52 $this->servers[$name]['status'] = "ok";
53 $this->servers[$name]['error'] = "";
55 // Detect ACLs
56 $this->servers[$name]['ACL'] = $ui->get_permissions($server['dn'], 'server/rsyslog','viewEntries');
58 // Get list of Hosts using this log server..
59 if(preg_match('/r/', $this->servers[$name]['ACL'])){
60 $query = "SELECT distinct(FromHost) FROM SystemEvents;";
61 $res = @mysql_query($query, $link);
62 if($res){
63 while($attrs = @mysql_fetch_assoc($res)){
64 $this->servers[$name]['Hosts'][$attrs['FromHost']] = $attrs['FromHost'];
65 }
66 }else{
67 $this->servers[$name]['status'] = "query_failed";
68 $this->servers[$name]['error'] = @mysql_error();
69 }
70 }
71 }
72 }
73 }
75 function execute()
76 {
77 $smarty = get_smarty();
78 $ui = get_userinfo();
80 if(!isset($this->servers[$this->selected_server]) || !count($this->servers[$this->selected_server]['Hosts'])){
81 $hosts = array('-' => _("-"));
82 }else{
83 $hosts = array('all' => _("All"));
84 $hosts = array_merge($hosts,$this->servers[$this->selected_server]['Hosts']);
85 }
87 $smarty->assign("servers",$this->servers);
88 $smarty->assign("hosts",$hosts);
89 $smarty->assign("selected_server",$this->selected_server);
90 $smarty->assign("selected_host",$this->selected_host);
91 $smarty->assign("result", $this->get_result());
92 return($smarty->fetch(get_template_path("rSyslog.tpl", TRUE)));
93 }
95 function get_result()
96 {
97 $result = array();
98 $result['entries'] = array();
99 $result['status'] = "ok";
100 $result['error'] = "";
102 // Check whether the selected server exists.
103 if(!isset($this->servers[$this->selected_server])){
104 $this->servers[$name]['status'] = sprintf(_("The selected server '%s' does not exists!"),$this->selected_server);
105 $this->servers[$name]['error'] = $this->servers[$this->selected_server]['error'];
106 return($result);
107 }
109 // Check database connectivity
110 $name = $this->selected_server;
111 $server = $this->servers[$name];
112 $link = @mysql_pconnect($server['cn'], $server['User'], $server['Password']);
113 if ($link === FALSE){
114 new log("debug","gosa_logging","dbconnect",array(),@mysql_error());
115 $this->servers[$name]['status'] = "connectfailed";
116 $this->servers[$name]['error'] = @mysql_error();
117 }elseif (! @mysql_select_db($server['Database'])){
118 new log("debug","gosa_logging","selectdb",array(),@mysql_error());
119 $this->servers[$name]['status'] = "dbmissing";
120 $this->servers[$name]['error'] = @mysql_error();
121 }else{
122 $this->servers[$name]['status'] = "ok";
123 $this->servers[$name]['error'] = "";
124 }
126 // Get log entries matching the selected filter
127 if(preg_match('/r/', $this->servers[$name]['ACL'])){
128 $query = "SELECT * FROM SystemEvents LIMIT 10;";
129 $res = @mysql_query($query, $link);
130 if($res){
131 while($attrs = @mysql_fetch_assoc($res)){
132 $result['entries'][] = $attrs;
133 }
134 $this->servers[$name]['status'] = "ok";
135 $this->servers[$name]['error'] = "";
136 }else{
137 $this->servers[$name]['status'] = "query_failed";
138 $this->servers[$name]['error'] = @mysql_error();
139 }
140 }
141 $result['status'] =$this->servers[$name]['status'];
142 $result['error'] =$this->servers[$name]['error'];
143 return($result);
144 }
147 function save_object()
148 {
149 foreach(array("selected_host","selected_server") as $attr){
150 if(isset($_POST[$attr])) $this->$attr = get_post($attr);
151 }
152 }
153 }
154 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
155 ?>