Ejemplo n.º 1
0
    def run(self):
        if not self.runable:
            print 'Process not runable, returning'
            return False

        # Drop privileges
        os.setgroups([])
        os.setgid(self.gid)
        os.setuid(self.uid)

        ppid = os.getppid()
        while True:
            try:
                line = self.work_queue.get(timeout=0.5)
                if not line:
                    'Parent process is asking us to exit'
                    return True
                line = line.decode('utf-8').encode('ASCII', 'ignore')
            except KeyboardInterrupt:
                return False
            except UnicodeDecodeError:
                print 'Unicode Error, skipping entry'
                continue
            except QueueEmpty:
                if os.getppid() != ppid:
                    return False
                continue
            try:
                entry = SyslogEntry.from_line(line)
            except pyparsing.exceptions.Exception:
                continue
            self.process_entry(entry)
Ejemplo n.º 2
0
    def test_details(self):
        se = SyslogEntry.from_line(valids[0])
        self.assertEqual(se.msg,
                         """'su root' failed for lonvick on /dev/pts/8""")
        self.assertEqual(se.timestamp.year, 2003)
        self.assertEqual(se.hostname, 'mymachine.example.com')
        self.assertEqual(se.msgid, 'ID47')

        se = SyslogEntry.from_line(valids[3])
        self.assertEqual(len(se.structured_data.elements), 2)
        self.assertEqual(len(se.structured_data.elements[0].sd_params), 3)
        self.assertEqual(len(se.structured_data.elements[1].sd_params), 1)

        se = SyslogEntry.from_line(valids[4])
        self.assertEqual(len(se.structured_data.elements), 1)
        self.assertEqual(
            len(list(se.structured_data.elements[0].sd_params.allitems())), 6)
        self.assertEqual(
            len(list(se.structured_data.elements[0].sd_params.getall("file"))),
            2)

        se = SyslogEntry.from_line(valids[5])
        self.assertEqual(str(se), valids[5])

        se = SyslogEntry(prival=165,
                         version=1,
                         timestamp=datetime(2003, 10, 11, 22, 14, 15, 3000),
                         hostname='mymachine.example.com',
                         app_name='evntslog',
                         procid=None,
                         msgid='ID47',
                         structured_data=StructuredData([
                             SDElement('exampleSDID@32473',
                                       [('iut', '3'),
                                        ('eventSource', 'Application'),
                                        ('eventID', '1011')])
                         ]),
                         msg=u'An application event log entry...')
        self.assertEqual(str(se), valids[6])

        se = SyslogEntry.from_line(valids[7])
        self.assertEqual(se.timestamp.year, 2011)
Ejemplo n.º 3
0
 def handle(self):
     if self.server.use_tls:
         return self.handle_tls()
     while True:
         line = self.connection.readline()
         if not line:
             break
         syslog_entry = SyslogEntry.from_line(line)
         if syslog_entry:
             self.handle_entry(syslog_entry)
         else:
             self.handle_error(line)
Ejemplo n.º 4
0
 def handle(self):
     if self.server.use_tls:
         return self.handle_tls()
     while True:
         line = self.connection.readline()
         if not line:
             break
         syslog_entry = SyslogEntry.from_line(line)
         if syslog_entry:
             self.handle_entry(syslog_entry)
         else:
             self.handle_error(line)
Ejemplo n.º 5
0
    def _process_request(self, request):
        """Processing of the log entry. Later this will do more work"""
        syslog_dict = {}
        try:
            logging.debug("INCOMING REQ: %s" % request)
            syslog_entry = SyslogEntry.from_line(request)
            syslog_dict = syslog_entry.__dict__
            syslog_dict = get_severity_and_facility(syslog_dict)
        except Exception as out:
            logging.error(out)

        logging.debug("Processing request...")
        self.send_to_amqp(syslog_dict)
Ejemplo n.º 6
0
    def _process_request(self, request):
        """Processing of the log entry. Later this will do more work"""
        syslog_dict = {}
        try:
            logging.debug("INCOMING REQ: %s" % request)
            syslog_entry = SyslogEntry.from_line(request)
            syslog_dict = syslog_entry.__dict__
            syslog_dict = get_severity_and_facility(syslog_dict)
        except Exception as out:
            logging.error(out)

        logging.debug("Processing request...")
        self.send_to_amqp(syslog_dict)
Ejemplo n.º 7
0
 def handle_tls(self):
     buf = ''
     while True:
         r = self.request.recv(1)
         if not r:
             break # EOF
         if r != ' ':
             buf += r
         else:
             try:
                 msg_len = int(buf)
             except:
                 # Protocol error
                 return
             buf = ''
             for i in xrange(msg_len):
                 buf += self.request.recv(1)
             syslog_entry = SyslogEntry.from_line(buf)
             buf = ''
             if syslog_entry is None:
                 self.handle_error(buf)
             self.handle_entry(syslog_entry)
Ejemplo n.º 8
0
 def handle_tls(self):
     buf = ''
     while True:
         r = self.request.recv(1)
         if not r:
             break # EOF
         if r != ' ':
             buf += r
         else:
             try:
                 msg_len = int(buf)
             except:
                 # Protocol error
                 return
             buf = ''
             for i in xrange(msg_len):
                 buf += self.request.recv(1)
             syslog_entry = SyslogEntry.from_line(buf)
             buf = ''
             if syslog_entry is None:
                 self.handle_error(buf)
             self.handle_entry(syslog_entry)
Ejemplo n.º 9
0
 def test_class(self):
     for v in valids:
         se = SyslogEntry.from_line(v)
         self.assertTrue(se is not None)