Source code for insights.parsers.xinetd_conf

"""
XinetdConf - files ``/etc/xinetd.conf`` and in ``/etc/xinetd.d/``
=================================================================

This module provides parsing for the ``/etc/xinetd.conf`` and
``/etc/xinetd.d/*`` files.

Sample input data of file ``/etc/xinetd.conf`` looks like::

    defaults
    {
            enabled                 =
            no_access               = 0.0.0.0/0
            instances               = 60
            per_source              = 128
            log_type                = SYSLOG authpriv
            log_on_success	    = HOST PID DURATION EXIT
            log_on_failure	    = HOST
            cps                     = 25 30
            max_load                = 2
    }

    includedir /etc/xinetd.d

Sample input data of file ``/etc/xinetd.d/tftp`` looks like::

    service tftp
    {
            socket_type             = dgram
            protocol                = udp
            wait                    = yes
            user                    = root
            server                  = /usr/sbin/in.tftpd
            server_args             = -s /var/lib/tftpboot
            disable                 = yes
            per_source              = 11
            cps                     = 100 2
            flags                   = IPv4
    }

Examples:

    >>> xinetd_conf = shared[XinetdConf].data
    >>> assert xinetd_conf.get('is_valid') == True
    >>> assert xinetd_conf.get('is_includedir') == True
    >>> xinetd_conf.get('is_includedir')
    '/etc/xinetd.d'
    >>> 'defaults' in xinetd_conf
    True
    >>> xinetd_conf.get('defaults')
    {   'enabled': '',
        'v6only': 'no',
        'log_on_failure': 'HOST',
        'umask': '002',
        'log_on_success': 'PID HOST DURATION EXIT',
        'instances': '50',
        'per_source': '10',
        'groups': 'yes',
        'cps': '50 10',
        'log_type': 'SYSLOG daemon info'
    }
    >>> 'tftp' in xinetd_conf
    True
    >>> xinetd_conf.get('tftp')
    {	'protocol': 'udp',
        'socket_type': 'dgram',
        'server': '/usr/sbin/in.tftpd',
        'server_args': '-s /var/lib/tftpboot',
        'disable': 'yes',
        'flags': 'IPv4',
        'user': 'root',
        'per_source': '11',
        'cps': '100 2',
        'wait': 'yes'
    }
    >>> 'abc' in xinetd_conf
    False
    >>> xinetd_conf.get('abc')
    >>>
    >>>
    >>> XINETD_CONF_BAD = '''
    ... defaults {
    ...         umask           = 002
    ... }
    ...
    ... includedir /etc/xinetd.d
    ... '''
    >>> xinetd_conf = shared[XinetdConf].data
    >>> assert xinetd_conf.get('is_valid') == False
    >>> 'defaults' in xinetd_conf
    False

"""

from .. import LegacyItemAccess, Parser, parser, get_active_lines
from insights.specs import Specs


[docs] @parser(Specs.xinetd_conf) class XinetdConf(LegacyItemAccess, Parser): """Parse contents of file ``/etc/xinetd.conf`` and ``/etc/xinetd.d/*``."""
[docs] def parse_content(self, content): self.data = {} self.is_valid = True section = None for line in get_active_lines(content): if "{" == line: section_con = {} elif "}" == line: self.data[section] = section_con section = None elif "includedir" in line: self.data["includedir"] = line.split(None, 1)[-1] elif not section and "defaults" == line: section = line elif not section and "service" in line: section = line.split(None, 1)[-1] elif "=" in line: key, _, value = line.partition("=") section_con[key.strip()] = value.strip() else: self.is_valid = False break self.is_includedir = '/etc/xinetd.d' == self.data.get('includedir')