Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Feb 2006 14:16:21 +0100 (CET)
From:      Anders Nordby <anders@FreeBSD.org>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   conf/93287: Make rc.subr jail-aware
Message-ID:  <20060213131621.3D5438DB14E@totem.fix.no>
Resent-Message-ID: <200602131320.k1DDK44O080482@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         93287
>Category:       conf
>Synopsis:       Make rc.subr jail-aware
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Feb 13 13:20:03 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Anders Nordby
>Release:        FreeBSD 6.0-RELEASE i386
>Organization:
-
>Environment:
System: FreeBSD totem.fix.no 6.0-RELEASE FreeBSD 6.0-RELEASE #0: Mon Nov 21 01:52:03 UTC 2005 root@master.fupp.net:/usr/obj/usr/src/sys/MASTER i386

>Description:

Starting and stopping of daemons without pid files in rc.subr is broken
when using jails. Trying to start a daemon in main OS (jid=0) fails if it
is already running a jail, and trying to stop it makes daemons with the
same process name die in all the jails.

>How-To-Repeat:

Install ports/net-mgmt/nrpe and/or any other port that uses rc.subr/rc_NG
for stopping and starting daemons that has no pid file. Start and stop
the daemon in jails and outside jail, running them at the same time.

>Fix:

Make rc.subr check that the process it looks for runs in the same jid. Patch
applies to 6.0-RELEASE and -CURRENT. Let me know if the patch should be
improved.

It would be a possibility to just check if jid=0. Inside the jail jid is
also 0 for all processes there, but that means we have to rely on that.

--- rc.subr.orig	Thu Nov  3 09:12:06 2005
+++ rc.subr	Mon Jan  9 13:40:17 2006
@@ -52,6 +52,7 @@
 CMD_OSTYPE="${SYSCTL_N} kern.ostype"
 OSTYPE=`${CMD_OSTYPE}`
 ID="/usr/bin/id"
+JID=`ps -p $$ -o jid | tail -1 | tr -d ' '`
 IDCMD="if [ -x $ID ]; then $ID -un; fi"
 
 case ${OSTYPE} in
@@ -271,14 +272,16 @@
 	fi
 
 	_proccheck='
-		ps 2>/dev/null -o "pid,command" '"$_psargs"' |
-		while read _npid '"$_fp_args"'; do
+		ps 2>/dev/null -o "pid,jid,command" '"$_psargs"' |
+		while read _npid _jid '"$_fp_args"'; do
 			case "$_npid" in
 			PID)
 				continue;;
 			esac; '"$_fp_match"'
-				echo -n "$_pref$_npid";
-				_pref=" "
+				if [ "$JID" -eq "$_jid" ];
+				then echo -n "$_pref$_npid";
+				_pref=" ";
+				fi
 				;;
 			esac
 		done'
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060213131621.3D5438DB14E>