Note: This is a beta release of Red Hat Bugzilla 5.0. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Also email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback here.
Bug 1556 - Logic error in the pidofproc subroutine in /etc/rc.d/init.d/functions
Summary: Logic error in the pidofproc subroutine in /etc/rc.d/init.d/functions
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: initscripts
Version: 6.0
Hardware: i386
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Cristian Gafton
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 1999-03-17 03:53 UTC by Mike McHenry
Modified: 2008-05-01 15:37 UTC (History)
0 users

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 1999-03-17 16:44:06 UTC


Attachments (Terms of Use)

Description Mike McHenry 1999-03-17 03:53:35 UTC
I apologize in advance for the length of this report.
Please feel free to email me at mmchen@minn.net if any of
this does not seem clear.

This bug regards the subroutine called 'pidofproc' in the
file /etc/rc.d/init.d/functions. This subroutine is
responsible for determining the pid of a process for the
init.d start/stop scripts if all else fails. Under certain
circumstances this script will not work as it should.

Take a look at this line from /etc/rc.d/init.d/functions,
specifically the last check in pidofproc:

 # Finally try to extract it from ps
   ps auxw | awk 'BEGIN { prog=ARGV[1]; ARGC=1 }
     { if ((prog == $11) || (("(" prog ")") == $11) ||
          ((prog ":") == $11)) { print $2 ; exit 0 } }' $1

Now take a look at a "typical" ps auxw (shortened up)

root       515  0.4  0.0   720   216  ?  S   Feb 28  38:31
update (bdflush)
root      1563  0.0  0.1   856   472  ?  S    04:02   0:00
CROND
root      1718  0.0  0.4  1552  1044  ?  S    04:02
0:00 /usr/sbin/sendmail -FCronDaemon -odi -oem -or0s root
root      1732  2.8  0.3  1644   900  ?  S    04:02  29:49
perl /etc/mail/popauth.pl

Basically the pidofproc routine looks in the 11th column
for a "running program" and considers anything surrounded
by spaces a column. As you can see running 'pidofproc
update' will NOT return 515 as it should because of the
extra space introduced by "Feb 28". Hopefully this is
making some sense :) Another case which might cause
problems is shown in the last line but I won't go into that
one as most people are probably not running scripts out of
init.d.

Granted most daemons/init programs should have a PID
associated with them in /var/run and if they do the problem
with pidofproc will never become an issue. There are alot
of possibilities for things to slip through the cracks
though.

I would suggest modifying the line from pidofproc as
follows:

 # Finally try to extract it from ps
  ps ax | awk 'BEGIN { prog=ARGV[1]; ARGC=1 }
       { if ((prog == $5) || (("(" prog ")") == $5) ||
            ((prog ":") == $5)) { print $1 ; exit 0 } }' $1

Comment 1 Bill Nottingham 1999-03-17 16:44:59 UTC
fixed in a later initscripts (probably around 3.94 or so.)


Note You need to log in before you can comment on or make changes to this bug.