lintian: r738 - in trunk: checks debian testset testset/scripts testset/scripts/debian
Author: rra
Date: 2006-09-04 01:17:09 +0200 (Mon, 04 Sep 2006)
New Revision: 738
Added:
trunk/testset/scripts/debian/postinst
trunk/testset/scripts/debian/postrm
trunk/testset/scripts/init-lsb-broken
trunk/testset/scripts/init-no-lsb
trunk/testset/scripts/init-skeleton
Modified:
trunk/checks/init.d
trunk/checks/init.d.desc
trunk/debian/changelog
trunk/testset/scripts/debian/rules
trunk/testset/scripts/debian/scripts.conffiles
trunk/testset/tags.scripts
Log:
The "LSB init script" release
* checks/init.d{.desc,}:
+ [RA] Added a warning for init scripts missing an LSB keyword
section, checks of the syntax of such a section if present, and
some basic semantic checks of the easiest fields. Based on initial
work by Carlos Villegas. (Closes: #377740)
Modified: trunk/checks/init.d
===================================================================
--- trunk/checks/init.d 2006-09-03 21:56:29 UTC (rev 737)
+++ trunk/checks/init.d 2006-09-03 23:17:09 UTC (rev 738)
@@ -23,6 +23,17 @@
use Tags;
use Util;
+# A list of valid LSB keywords. The value is 0 if optional and 1 if required.
+my %lsb_keywords = (provides => 1,
+ 'required-start' => 1,
+ 'required-stop' => 1,
+ 'should-start' => 0,
+ 'should-stop' => 0,
+ 'default-start' => 1,
+ 'default-stop' => 1,
+ 'short-description' => 1,
+ 'description' => 0);
+
sub run {
my $pkg = shift;
@@ -142,14 +153,84 @@
if (-f $initd_file) {
# yes! check it...
open(IN,$initd_file) or fail("cannot open init.d file $initd_file: $!");
- my %tag;
+ my (%tag, %lsb);
while (defined(my $l = <IN>)) {
+ if ($l =~ m/^\#\#\# BEGIN INIT INFO/) {
+ if ($lsb{BEGIN}) {
+ tag "init.d-script-has-duplicate-lsb-section", "/etc/init.d/$_";
+ next;
+ }
+ $lsb{BEGIN} = 1;
+ my $last;
+
+ # We have an LSB keyword section. Parse it and save the data
+ # in %lsb for analysis.
+ while (defined(my $l = <IN>)) {
+ if ($l =~ /^\#\#\# END INIT INFO/) {
+ $lsb{END} = 1;
+ last;
+ } elsif ($l !~ /^\#/) {
+ tag "init.d-script-has-unterminated-lsb-section", "/etc/init.d/$_:$.";
+ last;
+ } elsif ($l =~ /^\# ([a-zA-Z-]+):\s*(.*?)\s*$/) {
+ my $keyword = lc $1;
+ my $value = $2;
+ tag "init.d-script-has-duplicate-lsb-keyword", "/etc/init.d/$_:$. $keyword"
+ if $lsb{$keyword};
+ tag "init.d-script-has-unknown-lsb-keyword", "/etc/init.d/$_:$. $keyword"
+ unless (defined ($lsb_keywords{$keyword}) || $keyword =~ /^x-/);
+ $lsb{$keyword} = $value;
+ $last = $keyword;
+ } elsif ($l =~ /^\#(\t| )/ && $last eq 'description') {
+ my $value = $l;
+ $value =~ s/^\#\s*//;
+ $lsb{description} .= ' ' . $value;
+ } else {
+ tag "init.d-script-has-bad-lsb-line", "/etc/init.d/$_:$.";
+ }
+ }
+ }
+
while ($l =~ s/(start|stop|restart|force-reload)//o) {
$tag{$1} = 1;
}
- }
+ }
close(IN);
+ # Make sure all of the required keywords are present.
+ if (not $lsb{BEGIN}) {
+ tag "init.d-script-missing-lsb-section", "/etc/init.d/$_";
+ } else {
+ for my $keyword (keys %lsb_keywords) {
+ if ($lsb_keywords{$keyword} && !$lsb{$keyword}) {
+ tag "init.d-script-missing-lsb-keyword", "/etc/init.d/$_ $keyword";
+ }
+ }
+ }
+
+ # Check the runlevels.
+ my %start;
+ if ($lsb{'default-start'}) {
+ for my $runlevel (split (/\s+/, $lsb{'default-start'})) {
+ if ($runlevel =~ /^[sS0-6]$/) {
+ $start{lc $runlevel} = 1;
+ } else {
+ tag "init.d-script-has-bad-start-runlevel", "/etc/init.d/$_ $runlevel";
+ }
+ }
+ }
+ if ($lsb{'default-stop'}) {
+ for my $runlevel (split (/\s+/, $lsb{'default-stop'})) {
+ if ($runlevel =~ /^[sS0-6]$/) {
+ if ($start{$runlevel}) {
+ tag "init.d-script-has-conflicting-start-stop", "/etc/init.d/$_ $runlevel";
+ }
+ } else {
+ tag "init.d-script-has-bad-stop-runlevel", "/etc/init.d/$_ $runlevel";
+ }
+ }
+ }
+
# all tags included in file?
$tag{'start'} or tag "init.d-script-does-not-implement-required-option", "/etc/init.d/$_ start";
$tag{'stop'} or tag "init.d-script-does-not-implement-required-option", "/etc/init.d/$_ stop";
Modified: trunk/checks/init.d.desc
===================================================================
--- trunk/checks/init.d.desc 2006-09-03 21:56:29 UTC (rev 737)
+++ trunk/checks/init.d.desc 2006-09-03 23:17:09 UTC (rev 738)
@@ -74,3 +74,87 @@
not registered in the <tt>postinst</tt> script. This is usually a bug,
unless you omit the links intentionally for some reason or create the
links some other way.
+
+Tag: init.d-script-has-duplicate-lsb-section
+Type: error
+Ref: http://wiki.debian.org/LSBInitScripts
+Info: This <tt>/etc/init.d</tt> script has more than one LSB keyword
+ section. These sections start with <tt>### BEGIN INIT INFO</tt> and end
+ with <tt>### END INIT INFO</tt>. There should be only one such section
+ per init script.
+
+Tag: init.d-script-has-unterminated-lsb-section
+Type: error
+Ref: http://wiki.debian.org/LSBInitScripts
+Info: This <tt>/etc/init.d</tt> script has an LSB keyword section starting
+ with <tt>### BEGIN INIT INFO</tt> but either has no matching <tt>### END
+ INIT INFO</tt> or has lines between those two markers that are not
+ comments. The line number given is the first line that doesn't look like
+ part of an LSB keyword section. There must be an end marker after all
+ the keyword settings and there must not be any lines between those
+ markers that do not begin with <tt>#</tt>.
+
+Tag: init.d-script-has-duplicate-lsb-keyword
+Type: warning
+Ref: http://wiki.debian.org/LSBInitScripts
+Info: The given keyword was set twice in the LSB keyword section in this
+ <tt>/etc/init.d</tt> script. This is probably a mistake; the behavior of
+ setting the same keyword twice is undefined.
+
+Tag: init.d-script-has-unknown-lsb-keyword
+Type: warning
+Ref: http://wiki.debian.org/LSBInitScripts
+Info: The given keyword was set in the LSB keyword section in this
+ <tt>/etc/init.d</tt> script but isn't one of the known LSB keywords and
+ doesn't begin with <tt>X-</tt>. One of the standard keywords may have
+ been misspelled.
+
+Tag: init.d-script-has-bad-lsb-line
+Type: warning
+Ref: http://wiki.debian.org/LSBInitScripts
+Info: This line in the LSB keyword section of an <tt>/etc/init.d</tt>
+ script doesn't match the required formatting of that section. Note that
+ keyword settings must start with <tt>#</tt>, a single space, the keyword,
+ a colon, and some whitespace, followed by the value (if any). Only the
+ Description keyword allows continuation lines, and continuation lines
+ must begin with <tt>#</tt> and either a tab or two or more spaces.
+
+Tag: init.d-script-missing-lsb-section
+Type: warning
+Ref: http://wiki.debian.org/LSBInitScripts
+Info: This <tt>/etc/init.d</tt> script does not have an LSB keyword
+ section (or the <tt>### BEGIN INIT INFO</tt> tag is incorrect). This
+ section provides description and runlevel information in a standard
+ format and provides dependency information that can be used to
+ parallelize the boot process. Please consider adding it.
+
+Tag: init.d-script-missing-lsb-keyword
+Type: warning
+Ref: http://wiki.debian.org/LSBInitScripts
+Info: This <tt>/etc/init.d</tt> script has an LSB keyword section, but it
+ is missing the given required LSB keyword. If the value of this keyword
+ should be empty, please still include it in the LSB keyword section with
+ an empty value.
+
+Tag: init.d-script-has-bad-start-runlevel
+Type: warning
+Ref: http://wiki.debian.org/LSBInitScripts
+Info: The given runlevel specified in the Default-Start keyword of the LSB
+ keyword section of this <tt>/etc/init.d</tt> script isn't one of the
+ recognized standard runlevels (S, 0, 1, 2, 3, 4, 5, and 6).
+
+Tag: init.d-script-has-bad-stop-runlevel
+Type: warning
+Ref: http://wiki.debian.org/LSBInitScripts
+Info: The given runlevel specified in the Default-Stop keyword of the LSB
+ keyword section of this <tt>/etc/init.d</tt> script isn't one of the
+ recognized standard runlevels (S, 0, 1, 2, 3, 4, 5, and 6).
+
+Tag: init.d-script-has-conflicting-start-stop
+Type: warning
+Ref: http://wiki.debian.org/LSBInitScripts
+Info: The given runlevel was included in both the Default-Start and
+ Default-Stop keywords of the LSB keyword section of this
+ <tt>/etc/init.d</tt> script. Since it doesn't make sense to both start
+ and stop a service in the same runlevel, there is probably an error in
+ one or the other of these keywords.
Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog 2006-09-03 21:56:29 UTC (rev 737)
+++ trunk/debian/changelog 2006-09-03 23:17:09 UTC (rev 738)
@@ -1,5 +1,7 @@
lintian (1.23.24) UNRELEASED; urgency=low
+ The "LSB init script" release
+
* checks/control-files:
+ [RA] perm2oct definition moved to Util.pm.
* checks/cruft{.desc,}:
@@ -12,6 +14,11 @@
error. Thanks, Adeodato Simó. (Closes: #384476)
* checks/files:
+ [RA] perm2oct definition moved to Util.pm.
+ * checks/init.d{.desc,}:
+ + [RA] Added a warning for init scripts missing an LSB keyword
+ section, checks of the syntax of such a section if present, and
+ some basic semantic checks of the easiest fields. Based on initial
+ work by Carlos Villegas. (Closes: #377740)
* checks/menus:
+ [RA] perm2oct definition moved to Util.pm.
* checks/scripts:
@@ -25,7 +32,7 @@
+ [RA] Move perm2oct to here and improve recognition of s, S, t, and T
characters. Thanks to Justin B. Rye for patch. (Closes: #376119)
- -- Russ Allbery <rra@debian.org> Sun, 3 Sep 2006 14:55:54 -0700
+ -- Russ Allbery <rra@debian.org> Sun, 3 Sep 2006 16:16:25 -0700
lintian (1.23.23) unstable; urgency=low
Added: trunk/testset/scripts/debian/postinst
===================================================================
--- trunk/testset/scripts/debian/postinst 2006-09-03 21:56:29 UTC (rev 737)
+++ trunk/testset/scripts/debian/postinst 2006-09-03 23:17:09 UTC (rev 738)
@@ -0,0 +1,11 @@
+#!/bin/sh
+set -e
+if [ -x "/etc/init.d/lsb-broken" ] ; then
+ update-rc.d lsb-broken defaults >/dev/null
+fi
+if [ -x "/etc/init.d/no-lsb" ] ; then
+ update-rc.d no-lsb defaults >/dev/null
+fi
+if [ -x "/etc/init.d/skeleton" ] ; then
+ update-rc.d skeleton defaults >/dev/null
+fi
Added: trunk/testset/scripts/debian/postrm
===================================================================
--- trunk/testset/scripts/debian/postrm 2006-09-03 21:56:29 UTC (rev 737)
+++ trunk/testset/scripts/debian/postrm 2006-09-03 23:17:09 UTC (rev 738)
@@ -0,0 +1,7 @@
+#!/bin/sh
+set -e
+if [ "$1" = purge ] ; then
+ update-rc.d lsb-broken remove >/dev/null
+ update-rc.d no-lsb remove >/dev/null
+ update-rc.d skeleton remove >/dev/null
+fi
Modified: trunk/testset/scripts/debian/rules
===================================================================
--- trunk/testset/scripts/debian/rules 2006-09-03 21:56:29 UTC (rev 737)
+++ trunk/testset/scripts/debian/rules 2006-09-03 23:17:09 UTC (rev 738)
@@ -9,6 +9,7 @@
binary-indep:
install -d $(tmp)/usr/bin/
install -d $(tmp)/etc/X11/Xsession.d/
+ install -d $(tmp)/etc/init.d/
install -d $(tmp)/usr/share/scripts/
install -d $(tmp)/usr/share/doc/scripts/
install -d $(tmp)/usr/lib/python2.3/site-packages/
@@ -37,6 +38,10 @@
install -m 755 gccbug.dpatch $(tmp)/usr/share/scripts/
install -m 755 gccbug.dpatch $(tmp)/usr/src/scripts/
+ install -m 755 init-skeleton $(tmp)/etc/init.d/skeleton
+ install -m 755 init-no-lsb $(tmp)/etc/init.d/no-lsb
+ install -m 755 init-lsb-broken $(tmp)/etc/init.d/lsb-broken
+
install -m 755 phpfoo $(tmp)/usr/share/scripts/
sed 's/php$$/php5/' phpfoo > $(tmp)/usr/share/scripts/php5foo
chmod 755 $(tmp)/usr/share/scripts/php5foo
@@ -65,6 +70,8 @@
gzip -9 $(tmp)/usr/share/doc/scripts/changelog
cp debian/scripts.conffiles $(tmp)/DEBIAN/conffiles
+ install -m 755 debian/postinst $(tmp)/DEBIAN/postinst
+ install -m 755 debian/postrm $(tmp)/DEBIAN/postrm
dpkg-gencontrol -isp
dpkg --build $(tmp) ..
Modified: trunk/testset/scripts/debian/scripts.conffiles
===================================================================
--- trunk/testset/scripts/debian/scripts.conffiles 2006-09-03 21:56:29 UTC (rev 737)
+++ trunk/testset/scripts/debian/scripts.conffiles 2006-09-03 23:17:09 UTC (rev 738)
@@ -1 +1,3 @@
+/etc/init.d/lsb-broken
+/etc/init.d/no-lsb
/etc/X11/Xsession.d/xsession-test
Added: trunk/testset/scripts/init-lsb-broken
===================================================================
--- trunk/testset/scripts/init-lsb-broken 2006-09-03 21:56:29 UTC (rev 737)
+++ trunk/testset/scripts/init-lsb-broken 2006-09-03 23:17:09 UTC (rev 738)
@@ -0,0 +1,34 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: bad-lsb
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# Default-Start: 1 2 3 4 5
+# Default-Stop: S 0 1 6 X
+# Short-Description: Example initscript
+# but this can't be continued
+# Description: An example of a bad LSB section in an init script.
+# This continuation is allowed (with spaces).
+# This one is too (with tabs).
+# X-Debian-Foo: Some unknown but valid keyword.
+# Foo: Some invalid keyword.
+
+# Whoops, no terminating line.
+
+# And then we have this duplicate section.
+### BEGIN INIT INFO
+# Required-Start: This one doesn't count.
+### END INIT INFO
+
+# Hey, look at all of those missing actions! But stop isn't missing.
+case "$1" in
+ start|stop)
+ echo "Blah"
+ ;;
+ *)
+ echo "Usage: foo start" >&2
+ exit 3
+ ;;
+esac
+
+:
Added: trunk/testset/scripts/init-no-lsb
===================================================================
--- trunk/testset/scripts/init-no-lsb 2006-09-03 21:56:29 UTC (rev 737)
+++ trunk/testset/scripts/init-no-lsb 2006-09-03 23:17:09 UTC (rev 738)
@@ -0,0 +1,17 @@
+#! /bin/sh
+# No LSB section, but otherwise okay. (Well, the messages are bad, but we
+# don't check that yet.)
+
+case "$1" in
+ start)
+ echo "Blah starting"
+ ;;
+ stop)
+ echo "Blah stopping"
+ ;;
+ restart|force-reload)
+ echo "Blah restarting"
+ ;;
+esac
+
+:
Added: trunk/testset/scripts/init-skeleton
===================================================================
--- trunk/testset/scripts/init-skeleton 2006-09-03 21:56:29 UTC (rev 737)
+++ trunk/testset/scripts/init-skeleton 2006-09-03 23:17:09 UTC (rev 738)
@@ -0,0 +1,155 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: skeleton
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# Default-Start: 2 3 4 5
+# Default-Stop: S 0 1 6
+# Short-Description: Example initscript
+# Description: This file should be used to construct scripts to be
+# placed in /etc/init.d.
+### END INIT INFO
+
+# Author: Foo Bar <foobar@baz.org>
+#
+# Please remove the "Author" lines above and replace them
+# with your own name if you copy and modify this script.
+
+# Do NOT "set -e"
+
+# PATH should only include /usr/* if it runs after the mountnfs.sh script
+PATH=/usr/sbin:/usr/bin:/sbin:/bin
+DESC="Description of the service"
+NAME=daemonexecutablename
+DAEMON=/usr/sbin/$NAME
+DAEMON_ARGS="--options args"
+PIDFILE=/var/run/$NAME.pid
+SCRIPTNAME=/etc/init.d/$NAME
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+# Load the VERBOSE setting and other rcS variables
+[ -f /etc/default/rcS ] && . /etc/default/rcS
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
+. /lib/lsb/init-functions
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+ || return 1
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
+ $DAEMON_ARGS \
+ || return 2
+ # Add code here, if necessary, that waits for the process to be ready
+ # to handle requests from services started subsequently which depend
+ # on this one. As a last resort, sleep for some time.
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+ start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
+ RETVAL="$?"
+ [ "$RETVAL" = 2 ] && return 2
+ # Wait for children to finish too if this is a daemon that forks
+ # and if the daemon is only ever run from this initscript.
+ # If the above conditions are not satisfied then add some other code
+ # that waits for the process to drop all resources that could be
+ # needed by services started subsequently. A last resort is to
+ # sleep for some time.
+ start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+ [ "$?" = 2 ] && return 2
+ # Many daemons don't delete their pidfiles when they exit.
+ rm -f $PIDFILE
+ return "$RETVAL"
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+ #
+ # If the daemon can reload its configuration without
+ # restarting (for example, when it is sent a SIGHUP),
+ # then implement that here.
+ #
+ start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
+ return 0
+}
+
+case "$1" in
+ start)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
+ do_start
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ stop)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ #reload|force-reload)
+ #
+ # If do_reload() is not implemented then leave this commented out
+ # and leave 'force-reload' as an alias for 'restart'.
+ #
+ #log_daemon_msg "Reloading $DESC" "$NAME"
+ #do_reload
+ #log_end_msg $?
+ #;;
+ restart|force-reload)
+ #
+ # If the "reload" option is implemented then remove the
+ # 'force-reload' alias
+ #
+ log_daemon_msg "Restarting $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1)
+ do_start
+ case "$?" in
+ 0) log_end_msg 0 ;;
+ 1) log_end_msg 1 ;; # Old process is still running
+ *) log_end_msg 1 ;; # Failed to start
+ esac
+ ;;
+ *)
+ # Failed to stop
+ log_end_msg 1
+ ;;
+ esac
+ ;;
+ *)
+ #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+ exit 3
+ ;;
+esac
+
+:
Modified: trunk/testset/tags.scripts
===================================================================
--- trunk/testset/tags.scripts 2006-09-03 21:56:29 UTC (rev 737)
+++ trunk/testset/tags.scripts 2006-09-03 23:17:09 UTC (rev 738)
@@ -1,5 +1,10 @@
E: scripts source: package-uses-debhelper-but-lacks-build-depends
E: scripts: calls-suidperl-directly ./usr/bin/suidperlfoo
+E: scripts: file-in-etc-not-marked-as-conffile /etc/init.d/skeleton
+E: scripts: init.d-script-does-not-implement-required-option /etc/init.d/lsb-broken force-reload
+E: scripts: init.d-script-does-not-implement-required-option /etc/init.d/lsb-broken restart
+E: scripts: init.d-script-has-duplicate-lsb-section /etc/init.d/lsb-broken
+E: scripts: init.d-script-has-unterminated-lsb-section /etc/init.d/lsb-broken:15
E: scripts: missing-dep-for-interpreter lefty => graphviz (./usr/bin/lefty-foo)
E: scripts: no-copyright-file
E: scripts: php-script-but-no-php-cli-dep ./usr/share/scripts/phpfoo
@@ -12,6 +17,8 @@
E: scripts: wrong-path-for-ruby ./usr/bin/rubyfoo #!/bin/ruby1.8
W: scripts source: ancient-standards-version 3.2.1 (current is 3.7.2)
W: scripts source: changelog-should-mention-nmu
+W: scripts source: maintainer-script-lacks-debhelper-token debian/postinst
+W: scripts source: maintainer-script-lacks-debhelper-token debian/postrm
W: scripts source: package-uses-deprecated-debhelper-compat-version 1
W: scripts source: source-nmu-has-incorrect-version-number 6
W: scripts source: uses-dh-python-with-no-pycompat
@@ -31,6 +38,14 @@
W: scripts: executable-is-not-world-readable usr/bin/perl-bizarre-2 0750 != 0755
W: scripts: executable-is-not-world-readable usr/bin/suidperlfoo2 4751
W: scripts: executable-not-elf-or-script ./usr/bin/perl-bizarre-3
+W: scripts: init.d-script-has-bad-lsb-line /etc/init.d/lsb-broken:4
+W: scripts: init.d-script-has-bad-lsb-line /etc/init.d/lsb-broken:9
+W: scripts: init.d-script-has-bad-stop-runlevel /etc/init.d/lsb-broken X
+W: scripts: init.d-script-has-conflicting-start-stop /etc/init.d/lsb-broken 1
+W: scripts: init.d-script-has-unknown-lsb-keyword /etc/init.d/lsb-broken:14 foo
+W: scripts: init.d-script-missing-lsb-keyword /etc/init.d/lsb-broken required-start
+W: scripts: init.d-script-missing-lsb-section /etc/init.d/no-lsb
+W: scripts: init.d-script-not-marked-as-conffile /etc/init.d/skeleton
W: scripts: non-standard-executable-perm usr/bin/perl-bizarre-3 0754 != 0755
W: scripts: non-standard-setuid-executable-perm usr/bin/suidperlfoo 4555
W: scripts: package-installs-python-pyc usr/lib/python2.3/site-packages/test.pyc
Reply to: