/[pxelator]/lib/PXElator/syslogd.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /lib/PXElator/syslogd.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 238 by dpavlin, Mon Aug 17 00:45:41 2009 UTC revision 239 by dpavlin, Mon Aug 17 00:51:24 2009 UTC
# Line 12  use server; Line 12  use server;
12  our $port = 514;  our $port = 514;
13  our $MAXLEN = 1524;  our $MAXLEN = 1524;
14    
15  sub start {  sub message {
16            my $sock = shift;
         my $sock = IO::Socket::INET->new(  
                 LocalPort => $port,  
                 Proto => 'udp',  
                 ReuseAddr => 1,  
         ) || die "can't listen to $port: $!";  
   
         CouchDB::audit('start', { port => $port });  
17    
18          my $buf;          my $buf;
19          while(1) {          $sock->recv($buf, $MAXLEN);
                 $sock->recv($buf, $MAXLEN);  
20    
21                  next unless $buf;          next unless $buf;
22    
23                  my ($port, $ipaddr) = sockaddr_in($sock->peername);          my ($port, $ipaddr) = sockaddr_in($sock->peername);
24                  my $log = {          my $log = {
25                          ip => join('.', unpack('C4',$ipaddr)),                  ip => join('.', unpack('C4',$ipaddr)),
26                          buf => $buf,                  buf => $buf,
27                  };          };
28    
29                  if ( $buf =~ s/<(\d+)>// ) {          if ( $buf =~ s/<(\d+)>// ) {
30                          $log->{pri}    = $1 % 8;                  $log->{pri}    = $1 % 8;
31                          $log->{facility} = ( $1 - $log->{pri} ) / 8;                  $log->{facility} = ( $1 - $log->{pri} ) / 8;
32                            
33                          $log->{timestamp} = $1 if $buf =~ s/^(\w\w\w\s+\d+\s+\d\d:\d\d:\d\d)\s*//;      # strip timestamp which some syslog servers insert here                  $log->{timestamp} = $1 if $buf =~ s/^(\w\w\w\s+\d+\s+\d\d:\d\d:\d\d)\s*//;      # strip timestamp which some syslog servers insert here
34    
35                          if ( $buf =~ s/^([^:]+)\s*:\s*// ) {                  if ( $buf =~ s/^([^:]+)\s*:\s*// ) {
36                                  my $tag = $1;                          my $tag = $1;
37                                  if ( $tag =~ m{^(\S+)\s(\S+)} ) {                          if ( $tag =~ m{^(\S+)\s(\S+)} ) {
38                                          $log->{tag} = $2;                                  $log->{tag} = $2;
39                                          $log->{hostname} = $1;                                  $log->{hostname} = $1;
40                                  } else {                          } else {
41                                          $log->{tag} = $tag;                                  $log->{tag} = $tag;
                                 }  
   
                                 if ( $log->{tag} =~ s/\[(\d+)\]$// ) {  
                                         $log->{pid} = $1;  
                                 } elsif ( $buf =~ s/^(\d+):\s*// ) {  
                                         $log->{pid} = $1;  
                                 }  
42                          }                          }
43    
44                          if ( $log->{tag} =~ m{CRON}i && $buf =~ m{^\((\w+)\) (.+) \((.+)\)$} ) {                          if ( $log->{tag} =~ s/\[(\d+)\]$// ) {
45                                  $log->{cron} = {                                  $log->{pid} = $1;
46                                          user => $1,                          } elsif ( $buf =~ s/^(\d+):\s*// ) {
47                                          command => $2,                                  $log->{pid} = $1;
                                         argument => $3,  
                                 };  
48                          }                          }
49                    }
50    
51                          $log->{message} = $buf;                  if ( $log->{tag} =~ m{CRON}i && $buf =~ m{^\((\w+)\) (.+) \((.+)\)$} ) {
52                            $log->{cron} = {
53                                    user => $1,
54                                    command => $2,
55                                    argument => $3,
56                            };
57                  }                  }
58    
59                  warn "log ",dump( $log );                  $log->{message} = $buf;
60                  CouchDB::audit( 'syslog', $log );          }
61    
62            warn "log ",dump( $log );
63            CouchDB::audit( 'syslog', $log );
64    }
65    
66    sub start {
67    
68            my $sock = IO::Socket::INET->new(
69                    LocalPort => $port,
70                    Proto => 'udp',
71                    ReuseAddr => 1,
72            ) || die "can't listen to $port: $!";
73    
74            CouchDB::audit('start', { port => $port });
75    
76            while(1) {
77                    message($sock);
78                  server->refresh;                  server->refresh;
79          }          }
   
80  }  }
81    
82  1;  1;

Legend:
Removed from v.238  
changed lines
  Added in v.239

  ViewVC Help
Powered by ViewVC 1.1.26