diff --git a/admin/rsyslog/Makefile b/admin/rsyslog/Makefile index 596fb2e25c..a93595df19 100644 --- a/admin/rsyslog/Makefile +++ b/admin/rsyslog/Makefile @@ -72,6 +72,8 @@ define Package/rsyslog/install $(INSTALL_CONF) ./files/rsyslog.conf $(1)/etc $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/rsyslog.init $(1)/etc/init.d/rsyslog + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_CONF) ./files/rsyslog $(1)/etc/config endef define Package/rsyslog/config diff --git a/admin/rsyslog/files/rsyslog b/admin/rsyslog/files/rsyslog new file mode 100644 index 0000000000..b4cd422f62 --- /dev/null +++ b/admin/rsyslog/files/rsyslog @@ -0,0 +1,28 @@ +config syslog syslog + option tcp_input '0' + option tcp_input_port '514' + option udp_input '1' + option udp_input_port '514' + option default_template 'RSYSLOG_TraditionalFileFormat' + list modules 'imuxsock' + list modules 'imklog' + +config selector + option source '*.info;mail.none;authpriv.none;cron.none' + option destination '/var/log/messages' + +config selector + option source 'authpriv.*' + option destination '/var/log/secure' + +config selector + option source 'mail.*' + option destination '/var/log/maillog' + +config selector + option source 'cron.*' + option destination '/var/log/cron' + +config selector + option source 'local7.*' + option destination '/var/log/boot.log' diff --git a/admin/rsyslog/files/rsyslog.init b/admin/rsyslog/files/rsyslog.init index 20eb2a41f1..496308e036 100644 --- a/admin/rsyslog/files/rsyslog.init +++ b/admin/rsyslog/files/rsyslog.init @@ -5,8 +5,100 @@ START=20 USE_PROCD=1 +UCI_CONF="rsyslog" +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 + + > ${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 -n procd_close_instance } + + +service_triggers() +{ + procd_add_reload_trigger ${UCI_CONF} +}