[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).



Package: lintian
Severity: wishlist
Tags: patch

Hi,

Attached is the following:

  commit 288035a951de277d0248ce28c561fbf7f8646839
  Author: Chris Lamb <lamby@debian.org>
  Date:   Tue Sep 27 16:28:04 2016 +0200
  
      checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).
      
      Signed-off-by: Chris Lamb <lamby@debian.org>
  
   checks/init.d.desc          |  5 +++++
   checks/init.d.pm            | 12 +++++++++---
   t/tests/legacy-scripts/desc |  2 ++
   t/tests/legacy-scripts/tags |  1 +
   4 files changed, 17 insertions(+), 3 deletions(-)


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby@debian.org / chris-lamb.co.uk
       `-
>From 288035a951de277d0248ce28c561fbf7f8646839 Mon Sep 17 00:00:00 2001
From: Chris Lamb <lamby@debian.org>
Date: Tue, 27 Sep 2016 16:28:04 +0200
Subject: [PATCH] checks/init.d: Check for initscripts that source
 /lib/lsb/init-functions without declaring the corresponding dependency on
 lsb-base (>= 3.0-6).

Signed-off-by: Chris Lamb <lamby@debian.org>
---
 checks/init.d.desc          |  5 +++++
 checks/init.d.pm            | 12 +++++++++---
 t/tests/legacy-scripts/desc |  2 ++
 t/tests/legacy-scripts/tags |  1 +
 4 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/checks/init.d.desc b/checks/init.d.desc
index ce33ba5..5b31754 100644
--- a/checks/init.d.desc
+++ b/checks/init.d.desc
@@ -370,3 +370,8 @@ Info: The given init script declares a dependency on the
  totally broken.
 Ref: https://wiki.debian.org/LSBInitScripts
 
+Tag: init.d-script-needs-depends-on-lsb-base
+Severity: important
+Certainty: possible
+Info: The given init script sources <tt>/lib/lsb/init-functions</tt> without
+ declaring the corresponding dependency on lsb-base (>= 3.0-6).
diff --git a/checks/init.d.pm b/checks/init.d.pm
index f91afa1..4174a4d 100644
--- a/checks/init.d.pm
+++ b/checks/init.d.pm
@@ -198,7 +198,7 @@ sub run {
 
         # Check if file exists in package and check the script for
         # other issues if it was included in the package.
-        check_init($initd_path);
+        check_init($initd_path, $info);
     }
 
     return unless $initd_dir and $initd_dir->is_dir;
@@ -222,7 +222,7 @@ sub run {
         # coverage in the first pass.
         unless ($initd_postinst{$script->basename}) {
             tag $tagname, $script;
-            check_init($script);
+            check_init($script, $info);
         }
     }
 
@@ -230,7 +230,7 @@ sub run {
 }
 
 sub check_init {
-    my ($initd_path) = @_;
+    my ($initd_path, $info) = @_;
 
     # In an upstart system, such as Ubuntu, init scripts are symlinks to
     # upstart-job.  It doesn't make sense to check the syntax of upstart-job,
@@ -321,6 +321,12 @@ sub check_init {
         while ($l =~ s/^[^\#]*?(start|stop|restart|force-reload|status)//o) {
             $tag{$1} = 1;
         }
+
+        if ($l =~ m{^\s*\.\s+/lib/lsb/init-functions}
+            && not $info->relation('strong')->implies('lsb-base (>= 3.0-6)')) {
+            tag 'init.d-script-needs-depends-on-lsb-base',
+              $initd_path, "(line $.)";
+        }
     }
     close($fd);
 
diff --git a/t/tests/legacy-scripts/desc b/t/tests/legacy-scripts/desc
index d95a521..ee8dc4e 100644
--- a/t/tests/legacy-scripts/desc
+++ b/t/tests/legacy-scripts/desc
@@ -4,3 +4,5 @@ Sequence: 9999
 Version: 6ds-1ubuntu0.5.10.1
 Type: non-native
 Description: Legacy test "scripts"
+Test-For:
+ init.d-script-needs-depends-on-lsb-base
diff --git a/t/tests/legacy-scripts/tags b/t/tests/legacy-scripts/tags
index 3f2854c..0436902 100644
--- a/t/tests/legacy-scripts/tags
+++ b/t/tests/legacy-scripts/tags
@@ -10,6 +10,7 @@ E: scripts: init.d-script-does-not-implement-required-option etc/init.d/lsb-brok
 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: init.d-script-needs-depends-on-lsb-base etc/init.d/skeleton (line 40)
 E: scripts: missing-dep-for-interpreter jruby => jruby | jruby1.0 | jruby1.1 | jruby1.2 (usr/bin/jruby-broken)
 E: scripts: missing-dep-for-interpreter lefty => graphviz (usr/bin/lefty-foo)
 E: scripts: package-installs-python-bytecode usr/lib/python2.3/site-packages/test.pyc
-- 
2.9.3


Reply to: