Package: sysv-rc
Version: 2.86.ds1-61

/etc/init.d/rc may execute S##<name>  or K##<name> scripts twice
if <name> starts with upper case characters.

/etc/init.d/rc execution loop works in principle as follows:

generate alphabetically ordered list of all S* or K* files in the rc*.d
directory
set current level number to empty string
for all files in list:
        remove leading S or K from file name
        remove trailing <name> fom file name
        compare resulting ## number with current level number
        if numbers do not match
                set current level number to resulting ## number
                generate list of all files matching S##.* (or K##.*
respectively)
                execute all script file found by the name pattern
matching
        fi
rof                     

However, the script seems not to properly recognize and truncate <name>
parts starting with upper case letters.
So, if one defines a start script like S99Tomcat
the script does not only extract the number part 99 but also the upper
case character(s) setting level number to 99T
Would s.o. name a script S99TOMCAT the resulting level number would be
S99TOMCAT
        
This alone does not produce an error, because the script does match the
pattern S##.* (with ## being S99TOMCAT) and will be executed.

But for the case that another script with same level number exists,
S99TOMCAT will be executed twice.
e.g: two scripts: S99TOMCAT and S99apache.
for S99apache the resulting level number is 99.
the loop then executes all scripts matching the pattern S99.*, which is
s99apache and S99TOMCAT.
for S99TOMCAT the resulting level number is 99TOMCAT, which does not
match the curren level number 99.
As a result the rc script handles 99TOMCAT like another level number and
executes all scripts matching S99TOMCAT.* - and starts therefore
S99TOMCAT for the second time.

Reply via email to