#!/bin/sh #------------------------------------------------------------------------------ # syslog.cgi - show the syslog-file # # Creation: 24.02.2001 tg # Last Update: $Id$ # #------------------------------------------------------------------------------ # get main helper functions . /srv/www/include/cgi-helper # log destination for all messages that do not match any configured selector global_protocol_file=/var/log/messages # Functions get_file_from_target () { syslogfile= echo "$FORM_target" | grep -q '^[[:digit:]]\+$' || return [ ${FORM_target} -lt $SYSLOG_DEST_N ] || return eval syslogfile=\$SYSLOG_DEST_${FORM_target}_LOGFILE eval selectors=\$SYSLOG_DEST_${FORM_target}_SELECTORS } dump_log () { if [ -f "$syslogfile" ] then case $FORM_filter in "") cat $syslogfile ;; *) grep -v $FORM_filter $syslogfile ;; esac fi } format_output () { htmlspecialchars | while read line do case "$line" in '') ;; *) set -f set -- $line def="$1 $2$3$4" case $5$6$7 in "--MARK--"*|"lastmessagerepeated"*) def="$def " sn=4 facil="mark" ;; kernel*) def="$def$5 $6" sn=6 facil="$6" ;; *) def="$def$5" sn=5 facil="$5" ;; esac shift $sn echo "$def$*" set +f ;; esac done } parse_syslog_conf() { SYSLOG_DEST_N=0 local global_protocol_file_found= selectors logfile while read selectors logfile do # ignore everything that is not a file (pipes, devices, remote hosts...) case $logfile in /*) [ -e "$logfile" -a ! -f "$logfile" ] && continue ;; *) continue ;; esac [ "$logfile" = "$global_protocol_file" ] && global_protocol_file_found=1 eval SYSLOG_DEST_${SYSLOG_DEST_N}_SELECTORS=\$selectors eval SYSLOG_DEST_${SYSLOG_DEST_N}_LOGFILE=\$logfile SYSLOG_DEST_N=$((SYSLOG_DEST_N+1)) done < /etc/syslog.conf if [ -z "$global_protocol_file_found" -a -f "$global_protocol_file" ] then eval SYSLOG_DEST_${SYSLOG_DEST_N}_SELECTORS= eval SYSLOG_DEST_${SYSLOG_DEST_N}_LOGFILE=\$global_protocol_file SYSLOG_DEST_N=$((SYSLOG_DEST_N+1)) fi } : ${FORM_action:=view} # Security check_rights "logs" "$FORM_action" if [ ! -f /etc/syslog.conf ] then show_html_header "$_MN_err" show_error "$_MN_err" "$_SLOG_nosyslog" show_html_footer else parse_syslog_conf case $FORM_action in reset|$_MN_reset) get_file_from_target case $syslogfile in "") ;; *) > $syslogfile ;; esac echo "Location: $myname?target=$FORM_target" echo ;; download|$_MN_download) get_file_from_target case $syslogfile in "") ;; *) if [ -f "$syslogfile" ] then http_header download "ctype=text/plain;filename=`basename $syslogfile`" dump_log fi ;; esac ;; *) # standard sort method is normal : ${FORM_sort:=normal} case $FORM_sort in reverse) invsort="normal" ;; *) FORM_sort="normal" # make sure we don't have to escape $FORM_sort invsort="reverse" ;; esac # show all rows if the "all rows" button is pressed case $FORM_showall in "") ;; *) FORM_lines="$_MN_all" ;; esac # sanitize no. of rows: show the default of 50 rows if nothing or nonsens (no integer) is specified case $FORM_lines in all|"$_MN_all") ;; *[^0-9]*|"") FORM_lines=50 ;; esac for i in $(seq 0 $((SYSLOG_DEST_N-1))) do eval target=\$SYSLOG_DEST_${i}_SELECTORS eval to=\$SYSLOG_DEST_${i}_LOGFILE case $FORM_target in ""|"$i") tabs="${tabs}\"$_SLOG_syslogfile: $to\" no " FORM_target="$i" ;; *) tabs="${tabs}\"$_SLOG_syslogfile: $to\" \"$myname?target=$i&lines=$FORM_lines&sort=$FORM_sort\" " ;; esac done show_html_header "Syslog" get_file_from_target case $syslogfile in "") show_error "$_MN_err" "$_SLOG_nofile (Index $(echo "$FORM_target" | htmlspecialchars))" ;; *) case $FORM_lines in all|"$_MN_all") # is "all" n="$_MN_all" case $FORM_sort in normal) dump_log | format_output > /tmp/sysout.$$ ;; *) dump_log | sed '1!G;h;$!d' | format_output > /tmp/sysout.$$ ;; esac ;; *) # is an integer n=$FORM_lines case $FORM_sort in normal) dump_log | do_tail $n | format_output > /tmp/sysout.$$ ;; *) dump_log | do_tail $n | sed '1!G;h;$!d' | format_output > /tmp/sysout.$$ ;; esac ;; esac eval show_tab_header $tabs echo "

$_SLOG_syslogfile: $syslogfile ($(echo "$selectors" | htmlspecialchars))

" # Display form to change number of shown rows of logfile cat <<-EOF
 $_MN_rows  
EOF echo "" cat /tmp/sysout.$$ rm /tmp/sysout.$$ echo '
$_MN_date\"$_MN_time$_SLOG_loghost$_SLOG_syslogfacil$_SLOG_message
' show_tab_footer ;; esac show_html_footer ;; esac fi