HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux acmehomecare 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC 2025 x86_64
User: www-data (33)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //proc/thread-self/cwd/wp-content/plugins/wp-fail2ban/lib/syslog.php
<?php declare(strict_types=1);
/**
 * Syslog wrapper
 *
 * @package wp-fail2ban
 * @since   4.4.0   Require PHP 7.4
 * @since   4.3.4.0
 */
namespace    org\lecklider\charles\wordpress\wp_fail2ban;

use function org\lecklider\charles\wordpress\wp_fail2ban\core\remote_addr;

defined('ABSPATH') or exit;

abstract class Syslog
{
    /**
     * Helper: Build tag part
     *
     * @since  4.4.0    Add return type
     * @since  4.3.4.0
     *
     * @return string
     */
    protected static function getTag(): string
    {
        return (Config::get('WP_FAIL2BAN_SYSLOG_SHORT_TAG'))
            ? 'wp'
            : 'wordpress';
    }

    /**
     * Helper: Build host part
     *
     * @since  4.4.0    Add return type
     * @since  4.3.4.0
     *
     * @return string
     */
    protected static function getHost(): string
    {
        $host   = (array_key_exists('WP_FAIL2BAN_HTTP_HOST', $_ENV))
                    ? $_ENV['WP_FAIL2BAN_HTTP_HOST'] // @codeCoverageIgnore
                    : $_SERVER['HTTP_HOST'];

        if (is_multisite() && !SUBDOMAIN_INSTALL) {
            if (!is_main_site()) {
                $blog = get_blog_details(get_current_blog_id(), false);
                $host .= '/'.trim($blog->path, '/');
            }
        }

        /**
         * Some varieties of syslogd have difficulty if $host is too long
         * @since 3.5.0
         */
        if (0 < ($len = Config::get('WP_FAIL2BAN_TRUNCATE_HOST'))) {
            $host = substr($host, 0, $len);
        }

        return $host;
    }

    /**
     * Update list of last syslog messages
     *
     * @since  4.4.0    Add return type
     * @since  4.3.4.0
     *
     * @param  int      $level
     * @param  string   $msg
     *
     * @return void
     *
     * @codeCoverageIgnore
     */
    protected static function updateLastMessages(int $level, string $msg): void
    {
        if (!Config::get('WP_FAIL2BAN_DISABLE_LAST_LOG')) {
            if (!is_array($last_messages = get_site_option('wp-fail2ban-messages', []))) {
                $last_messages = [];
            }
            $message = [
                'dt' => gmdate('Y-m-d H:i:s'),
                'lvl' => ConvertData::intToSyslogPriorityName($level),
                'msg' => $msg
            ];
            array_unshift($last_messages, $message);
            $last_messages = array_slice($last_messages, 0, 5);
            update_site_option('wp-fail2ban-messages', $last_messages);
        }
    }

    /**
     * Open
     *
     * @since  4.4.0    Add return type
     * @since  4.3.4.0
     *
     * @param  string   $log
     *
     * @return bool
     */
    public static function open(string $log = 'WP_FAIL2BAN_AUTH_LOG'): bool
    {
        $tag    = self::getTag();
        $host   = self::getHost();

        $options    = Config::get('WP_FAIL2BAN_OPENLOG_OPTIONS');
        $facility   = Config::get($log);
        $ident      = "$tag($host)";
        if (null !== ($rv = apply_filters(__METHOD__, null, $ident, $options, $facility))) {
            return $rv;
        }

        if (false === \openlog($ident, $options, $facility)) {
            error_log('WPf2b: Cannot open syslog', 0); // @codeCoverageIgnore

        } else {
            if (defined('WP_FAIL2BAN_TRACE')) {
                error_log('WPf2b: Opened syslog', 0); // @codeCoverageIgnore
            }
            return true;
        }

        return false; // @codeCoverageIgnore
    }

    /**
     * Write
     *
     * @since  4.4.0    Add return type
     * @since  4.3.4.0
     *
     * @param  int          $level
     * @param  string       $msg
     * @param  string|null  $remote_addr
     *
     * @return bool
     */
    public static function write(int $level, string $msg, string $remote_addr = null): bool
    {
        $rv = false;

        if (null === ($rv = apply_filters(__METHOD__, null, $level, $msg, $remote_addr))) {
            $msg .= ' from ';
            $msg .= (is_null($remote_addr))
                        ? remote_addr()
                        : $remote_addr;

            if (false === ($rv = \syslog($level, $msg))) {
                error_log("WPf2b: Cannot write to syslog: '{$msg}'", 0); // @codeCoverageIgnore
            } elseif (defined('WP_FAIL2BAN_TRACE')) {
                error_log("WPf2b: Wrote to syslog: '{$msg}'", 0); // @codeCoverageIgnore
            }
        }

        if (defined('PHPUNIT_COMPOSER_INSTALL')) {
            echo "$level|$msg";
        }

        self::updateLastMessages($level, $msg);

        return $rv ?? false;
    }

    /**
     * Close
     *
     * @since  4.4.0    Add return type
     * @since  4.3.4.0
     *
     * @return bool
     */
    public static function close(): bool
    {
        if (null === ($rv = apply_filters(__FUNCTION__, null))) {
            $rv = \closelog();
        }

        return $rv;
    }

    /**
     * Wrapper: write a single log entry
     *
     * @since  4.4.0    Add return type
     * @since  4.3.4.0
     *
     * @param  int      $level      LOG_DEBUG|LOG_INFO|LOG_NOTICE|LOG_WARNING|LOG_ERR
     * @param  string   $msg
     * @param  string   $log
     * @param  string   $remote_addr
     *
     * @return bool
     */
    public static function single(int $level, string $msg, string $log = 'WP_FAIL2BAN_AUTH_LOG', string $remote_addr = null): bool
    {
        $rv = false;

        if (self::open($log)) {
            $rv = self::write($level, $msg, $remote_addr);
            self::close();
        }

        return $rv;
    }
}