SHA256
1
0
forked from pool/rpmlint

- another try to fix InitScriptCheck.py

OBS-URL: https://build.opensuse.org/package/show/devel:openSUSE:Factory:rpmlint/rpmlint?expand=0&rev=8
This commit is contained in:
Ludwig Nussel 2011-05-02 11:56:54 +00:00 committed by Git OBS Bridge
parent bcd3938836
commit d225b9bb62
3 changed files with 36 additions and 56 deletions

View File

@ -1,3 +1,8 @@
-------------------------------------------------------------------
Mon May 2 11:56:25 UTC 2011 - lnussel@suse.de
- another try to fix InitScriptCheck.py
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Apr 27 15:09:54 CEST 2011 - dmueller@suse.de Wed Apr 27 15:09:54 CEST 2011 - dmueller@suse.de

View File

@ -1,6 +1,8 @@
--- InitScriptCheck.py Index: InitScriptCheck.py
===================================================================
--- InitScriptCheck.py.orig
+++ InitScriptCheck.py +++ InitScriptCheck.py
@@ -51,7 +51,7 @@ @@ -50,7 +50,7 @@ class InitScriptCheck(AbstractCheck.Abst
return return
initscript_list = [] initscript_list = []
@ -9,17 +11,18 @@
# check chkconfig call in %post and %preun # check chkconfig call in %post and %preun
postin = pkg[rpm.RPMTAG_POSTIN] or pkg[rpm.RPMTAG_POSTINPROG] postin = pkg[rpm.RPMTAG_POSTIN] or pkg[rpm.RPMTAG_POSTINPROG]
@@ -60,6 +60,9 @@ @@ -59,6 +59,10 @@ class InitScriptCheck(AbstractCheck.Abst
for fname, pkgfile in pkg.files().items(): for fname, pkgfile in pkg.files().items():
+ if stat.S_ISLNK(pkgfile.mode) and fname.startswith("/usr/sbin/rc"): + if stat.S_ISLNK(pkgfile.mode) and (fname.startswith("/usr/sbin/rc") \
+ or fname.startswith("/sbin/rc")):
+ rclinks.add(fname.partition('/rc')[2]) + rclinks.add(fname.partition('/rc')[2])
+ +
if not fname.startswith('/etc/init.d/') and \ if not fname.startswith('/etc/init.d/') and \
not fname.startswith('/etc/rc.d/init.d/'): not fname.startswith('/etc/rc.d/init.d/'):
continue continue
@@ -199,6 +202,12 @@ @@ -194,6 +198,12 @@ class InitScriptCheck(AbstractCheck.Abst
if not subsys_regex_found: if not subsys_regex_found:
printError(pkg, 'subsys-not-used', fname) printError(pkg, 'subsys-not-used', fname)
@ -32,13 +35,13 @@
goodnames = (pkg.name.lower(), pkg.name.lower() + 'd') goodnames = (pkg.name.lower(), pkg.name.lower() + 'd')
if len(initscript_list) == 1 and initscript_list[0] not in goodnames: if len(initscript_list) == 1 and initscript_list[0] not in goodnames:
printWarning(pkg, 'incoherent-init-script-name', initscript_list[0], printWarning(pkg, 'incoherent-init-script-name', initscript_list[0],
@@ -229,6 +238,10 @@ @@ -216,6 +226,10 @@ a call to chkconfig.''',
'''The package contains an init script but doesn't contain a %postun '''The package contains an init script but doesn't contain a %preun with
with a call to %insserv_cleanup-postun''', a call to chkconfig.''',
+'suse-missing-rclink', +'suse-missing-rclink',
+'''The package contains an init script with the given name but does not +'''The package contains an init script with the given name but does not
+have contain the SUSE policy symlink /usr/sbin/rcFOO -> /etc/init.d/FOO''', +contain the SUSE policy symlink /usr/sbin/rcFOO -> /etc/init.d/FOO''',
+ +
'preun-without-chkconfig', 'preun-without-chkconfig',
'''The package contains an init script but doesn't call chkconfig in its '''The package contains an init script but doesn't call chkconfig in its

View File

@ -1,17 +1,18 @@
--- InitScriptCheck.py Index: InitScriptCheck.py
===================================================================
--- InitScriptCheck.py.orig
+++ InitScriptCheck.py +++ InitScriptCheck.py
@@ -29,6 +29,10 @@ @@ -29,6 +29,9 @@ dot_in_name_regex = re.compile('.*\..*')
use_deflevels = Config.getOption('UseDefaultRunlevels', True) use_deflevels = Config.getOption('UseDefaultRunlevels', True)
lsb_tags_regex = re.compile('^# ([\w-]+):\s*(.*?)\s*$') lsb_tags_regex = re.compile('^# ([\w-]+):\s*(.*?)\s*$')
lsb_cont_regex = re.compile('^#(?:\t| )(.*?)\s*$') lsb_cont_regex = re.compile('^#(?:\t| )(.*?)\s*$')
+insserv_regex=re.compile('^\s*sbin/insserv', re.MULTILINE) +stop_on_removal_regex=re.compile('/etc/init.d/\$service stop > /dev/null')
+stop_on_removal_regex=re.compile('^\s*%stop_on_removal\s+\S+', re.MULTILINE) +restart_on_update_regex=re.compile('/etc/init.d/\$service try-restart > /dev/null')
+restart_on_update_regex=re.compile('^\s*%restart_on_update\s\S+', re.MULTILINE) +insserv_cleanup_regex=re.compile('^\s*/sbin/insserv /etc/init.d$', re.MULTILINE)
+insserv_cleanup_regex=re.compile('^\s*%insserv_cleanup', re.MULTILINE)
LSB_KEYWORDS = ('Provides', 'Required-Start', 'Required-Stop', 'Should-Start', LSB_KEYWORDS = ('Provides', 'Required-Start', 'Required-Stop', 'Should-Start',
'Should-Stop', 'Default-Start', 'Default-Stop', 'Should-Stop', 'Default-Start', 'Default-Stop',
@@ -47,6 +51,13 @@ @@ -47,6 +50,13 @@ class InitScriptCheck(AbstractCheck.Abst
return return
initscript_list = [] initscript_list = []
@ -25,7 +26,7 @@
for fname, pkgfile in pkg.files().items(): for fname, pkgfile in pkg.files().items():
if not fname.startswith('/etc/init.d/') and \ if not fname.startswith('/etc/init.d/') and \
@@ -60,18 +71,19 @@ @@ -60,18 +70,15 @@ class InitScriptCheck(AbstractCheck.Abst
if dot_in_name_regex.match(basename): if dot_in_name_regex.match(basename):
printError(pkg, 'init-script-name-with-dot', fname) printError(pkg, 'init-script-name-with-dot', fname)
@ -35,47 +36,25 @@
- printError(pkg, 'init-script-without-chkconfig-postin', fname) - printError(pkg, 'init-script-without-chkconfig-postin', fname)
- elif not chkconfig_regex.search(postin): - elif not chkconfig_regex.search(postin):
- printError(pkg, 'postin-without-chkconfig', fname) - printError(pkg, 'postin-without-chkconfig', fname)
-
- preun = pkg[rpm.RPMTAG_PREUN] or pkg[rpm.RPMTAG_PREUNPROG] - preun = pkg[rpm.RPMTAG_PREUN] or pkg[rpm.RPMTAG_PREUNPROG]
if not preun: - if not preun:
- printError(pkg, 'init-script-without-chkconfig-preun', fname) - printError(pkg, 'init-script-without-chkconfig-preun', fname)
- elif not chkconfig_regex.search(preun): - elif not chkconfig_regex.search(preun):
- printError(pkg, 'preun-without-chkconfig', fname) - printError(pkg, 'preun-without-chkconfig', fname)
+ printError(pkg, 'init-script-without-%stop_on_removal-preun', fname)
+ elif not stop_on_removal_regex.search(preun):
+ printError(pkg, 'preun-without-%stop_on_removal-preun', fname)
+ +
+ if not postun: + if not preun or not stop_on_removal_regex.search(preun):
+ printError(pkg, 'init-script-without-%stop_on_removal-preun', fname)
+
+ if not postun or not restart_on_update_regex.search(postun):
+ printError(pkg, 'init-script-without-%restart_on_update-postun', fname) + printError(pkg, 'init-script-without-%restart_on_update-postun', fname)
+ else: +
+ if not restart_on_update_regex.search(postun): + if not postun or not insserv_cleanup_regex.search(postun):
+ printError(pkg, 'postun-without-%restart_on_update', fname) + printError(pkg, 'init-script-without-%insserv_cleanup-postun', fname)
+ if not insserv_cleanup_regex.search(postun):
+ printError(pkg, 'postun-without-%insserv_cleanup', fname)
status_found = False status_found = False
reload_found = False reload_found = False
@@ -202,10 +214,18 @@ @@ -264,6 +271,17 @@ of chkconfig don't work as expected with
'''The package contains an init script but doesn't call chkconfig in its
%post script.''',
-'init-script-without-chkconfig-preun',
+'init-script-without-%stop_on_removal-preun',
'''The package contains an init script but doesn't contain a %preun with
a call to chkconfig.''',
+'init-script-without-%insserv_cleanup-postun',
+'''The package contains an init script but doesn't contain a %postun
+with a call to %insserv_cleanup-postun''',
+
+'postun-without-%insserv_cleanup',
+'''The package contains an init script but doesn't contain a %postun
+with a call to %insserv_cleanup-postun''',
+
'preun-without-chkconfig',
'''The package contains an init script but doesn't call chkconfig in its
%preun script.''',
@@ -264,6 +284,24 @@
'init-script-non-executable', 'init-script-non-executable',
'''The init script should have at least the execution bit set for root '''The init script should have at least the execution bit set for root
in order for it to run at boot time.''', in order for it to run at boot time.''',
@ -83,16 +62,9 @@
+'init-script-without-%stop_on_removal-preun', +'init-script-without-%stop_on_removal-preun',
+'''The init script should have a %preun script that calls %stop_on_removal.''', +'''The init script should have a %preun script that calls %stop_on_removal.''',
+ +
+'preun-without-%stop_on_removal-preun',
+'''The init script is not listed in %stop_on_removal in %preun.''',
+
+'init-script-without-%insserv_cleanup-postun', +'init-script-without-%insserv_cleanup-postun',
+'''The package doesn't have a %insserv_cleanup call in %postun''', +'''The package doesn't have a %insserv_cleanup call in %postun''',
+ +
+'postun-without-%insserv_cleanup',
+'''The package has an init script that is inserted with insserv but
+doesn't have a %insserv_cleanup call in %postun''',
+
+'init-script-without-%restart_on_update-postun', +'init-script-without-%restart_on_update-postun',
+''' The package has an init script but is missing the %restart_on_update +''' The package has an init script but is missing the %restart_on_update
+call in %postun to automatically restart the daemon. This is optional, +call in %postun to automatically restart the daemon. This is optional,