#!/bin/sh /etc/rc.common # Copyright (C) 2014 OpenWrt.org # shellcheck disable=SC3043 # shellcheck disable=SC2034 # shellcheck disable=SC3037 # shellcheck disable=SC2154 # shellcheck disable=SC2129 START=20 USE_PROCD=1 UCI_CONF="rsyslog" CONFIG_FILE="/var/etc/rsyslog.conf" BASE_CONFIG_FILE="/etc/rsyslog.conf" modules="" selectors="" forwarders="" handle_selector() { local config="$1" local src local dst config_get src "${config}" source config_get dst "${config}" destination if [ "${src}" != "" ] && [ "$dst" != "" ]; then selectors="${selectors}\n${src}\t${dst}\n" fi } handle_forwarder() { local config="$1" local src local target local protocol local port local rfc local opts config_get src "${config}" source config_get target "${config}" target config_get protocol "${config}" protocol "udp" config_get port "${config}" port "514" config_get rfc "${config}" rfc "3164" if [ "$rfc" = "5424" ]; then opts='Template="RSYSLOG_SyslogProtocol23Format" TCP_Framing="octet-counted"' fi if [ "${src}" != "" ] && [ "${target}" != "" ]; then action="action(type=\"omfwd\" target=\"$target\" port=\"$port\" protocol=\"$protocol\" $opts action.resumeRetryCount=\"100\" queue.type=\"linkedList\" queue.size=\"10000\")" forwarders="${forwarders}\n${src}\t${action}\n" fi } expand_config() { local input_t="" local input_u="" config_load "${UCI_CONF}" config_list_foreach syslog modules handle_module config_get_bool tcp_input syslog tcp_input if [ "${tcp_input}" -eq 1 ]; then modules="${modules} imtcp" config_get tcp_port syslog tcp_input_port input_t="input(type=\"imtcp\" port=\"${tcp_port}\")" fi config_get_bool udp_input syslog udp_input if [ "${udp_input}" -eq 1 ]; then modules="${modules} imudp" config_get udp_port syslog udp_input_port input_u="input(type=\"imudp\" port=\"${udp_port}\")" fi config_get template syslog default_template config_foreach handle_selector selector config_foreach handle_forwarder forwarder mkdir -p "$(dirname ${CONFIG_FILE})" # shellcheck disable=SC2188 > ${CONFIG_FILE} echo "include(file=\"${BASE_CONFIG_FILE}\" mode=\"optional\")" >> ${CONFIG_FILE} for m in ${modules}; do echo "module(load=\"${m}\")" >> ${CONFIG_FILE} done echo "${input_t}" >> ${CONFIG_FILE} echo "${input_u}" >> ${CONFIG_FILE} echo "\$ActionFileDefaultTemplate ${template}" >> ${CONFIG_FILE} echo -e "${selectors}" >> ${CONFIG_FILE} echo -e "${forwarders}" >> ${CONFIG_FILE} } handle_module() { local module="$1" modules="${modules} $module" } start_service() { expand_config procd_open_instance procd_set_param command /usr/sbin/rsyslogd -f ${CONFIG_FILE} -n procd_close_instance } service_triggers() { procd_add_reload_trigger ${UCI_CONF} }