SOURCES: syslogd-listfiles.sh - rewritten using less execs and usi...
glen
glen at pld-linux.org
Mon Aug 1 20:45:17 CEST 2005
Author: glen Date: Mon Aug 1 18:45:17 2005 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- rewritten using less execs and using awk
- besides that fixed remote logging and shell pipes and anything else that didn't work
---- Files affected:
SOURCES:
syslogd-listfiles.sh (1.1 -> 1.2)
---- Diffs:
================================================================
Index: SOURCES/syslogd-listfiles.sh
diff -u SOURCES/syslogd-listfiles.sh:1.1 SOURCES/syslogd-listfiles.sh:1.2
--- SOURCES/syslogd-listfiles.sh:1.1 Sat Apr 15 14:05:34 2000
+++ SOURCES/syslogd-listfiles.sh Mon Aug 1 20:45:12 2005
@@ -7,10 +7,12 @@
usage ()
{
- cat > /dev/stderr <<EOF
-PLD GNU/Linux syslogd-listfiles =VER=. Copyright (C) 2000 S.Zagrodzki.
-This is free software; see the GNU General Public Licence
-version 2 or later for copying conditions. There is NO warranty.
+ local VER=$(echo '$Revision$' | awk '{print $2}')
+ cat 2>&1 <<EOF
+PLD Linux syslogd-listfiles $VER. Copyright (C) 2000 S.Zagrodzki,
+Copyright (C) 2005 Elan Ruusamäe. This is free software; see the GNU General
+Public Licence version 2 or later for copying conditions. There is NO
+warranty.
Usage: syslogd-listfiles <options>
Options: -f file specifies another syslog.conf file
@@ -19,6 +21,10 @@
--news include news logfiles, too
-w | --weekly use weekly pattern instead of daily
EOF
+# TODO from original .pl file:
+# --ignore-size don't rotate files which got too large
+# --large nnn define what is large in bytes (default: 10MB)
+# -s pattern skip files matching pattern
}
while [ -n "$1" ]; do
@@ -51,51 +57,43 @@
esac
done
-while read LINIA; do
- if echo "$LINIA" | grep -qv "^#" && [ -n "$LINIA" ]; then
- LINIA="`echo "$LINIA" | sed 's/^[[:space:]]*//'`"
- if [ "$LINIA" = "${LINIA%\\}" ]; then
- LINIA="`echo "$LINIA" | sed \
- -e "s/[[:space:]]\+/ /g" \
- -e 's/ -/ /g' \
- `"
- if
- echo "$LINIA" | grep -qv " /dev" &&\
- echo "$LINIA" | grep -qv " \*"
- then
- PAT="`echo "$LINIA" | cut -f 1`"
- FILE="`echo "$LINIA" | cut -f 2`"
- OUTPUT=0
- if
- echo "$PAT" |\
- grep -qv 'news\.\(crit|err|notice\)' ||\
- [ "$OPT_NEWS" = "1" ]
- then
- if [ "$OPT_ALL" = "1" ]; then
- OUTPUT=1
- elif [ "$OPT_AUTH" = "1" ]; then
- echo "$PAT" |\
- grep 'auth[^\.]*\.' |\
- grep -qv 'auth[^\.]*\.none' &&\
- OUTPUT=1
- else
- echo "$PAT" | grep -q '\*\.\*'
- I="$?"
- if [ "$I" = "0" ] &&\
- [ "$OPT_DAILY" = "1" ]
- then
- OUTPUT=1
- elif [ "$I" = "1" ] &&\
- [ "$OPT_DAILY" = "0" ]
- then
- OUTPUT=1
- fi
- fi
- fi
- if [ "$OUTPUT" = "1" ]; then
- echo "$FILE"
- fi
- fi
- fi
- fi
-done < "$CONF"
+# some magic is appearing here, line continuations are parsed by shell so we
+# need not to take extra care on that.
+egrep -v '^(#|[ \t]*$)' "$CONF" | while read line; do
+ echo "$line"
+done | awk -vopt_news=$OPT_NEWS -vopt_all=$OPT_ALL -vopt_auth=$OPT_AUTH -vopt_daily=$OPT_DAILY '{
+ file = $NF;
+ sub("^-", "", file);
+
+ # skip /dev and not full paths (skips effectively remote logging and program pipes)
+ if (file ~ /^\/dev/ || file !~ /^\//) {
+ next;
+ }
+ pat = substr($0, 0, length($0) - length($NF));
+
+ # These files are handled by news.daily from INN, so we ignore them
+ if (!opt_news && (pat ~ /news\.(\*|crit|err|info|notice)/)) {
+ next;
+ }
+
+ output = 0;
+ if (opt_all) {
+ output = 1;
+ } else if (opt_auth) {
+ if (pat ~ /auth[^\.]*\./ && pat !~ /auth[^\.]*\.none/) {
+ output = 1;
+ }
+ } else {
+ everything = (pat ~ /\*\.\*/);
+ if ((everything && opt_daily)) {
+ output = 1
+ }
+ if ((!everything && !opt_daily)) {
+ output = 1
+ }
+ }
+
+ if (output) {
+ print file;
+ }
+}'
================================================================
---- CVS-web:
http://cvs.pld-linux.org/SOURCES/syslogd-listfiles.sh?r1=1.1&r2=1.2&f=u
More information about the pld-cvs-commit
mailing list