Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 Jun 2016 17:06:26 -0700
From:      Cy Schubert <Cy.Schubert@komquats.com>
To:        Niclas Zeising <zeising@freebsd.org>
Cc:        Adrian Chadd <adrian@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r288291 - head/etc
Message-ID:  <201606190006.u5J06Qk6009591@slippy.cwsent.com>
In-Reply-To: Message from Niclas Zeising <zeising@freebsd.org> of "Sun, 19 Jun 2016 00:06:32 %2B0200." <2171b966-35c7-2dad-2c0f-f23061cb677a@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
In message <2171b966-35c7-2dad-2c0f-f23061cb677a@freebsd.org>, Niclas 
Zeising w
rites:
> On 09/27/15 06:03, Adrian Chadd wrote:
> > Author: adrian
> > Date: Sun Sep 27 04:03:11 2015
> > New Revision: 288291
> > URL: https://svnweb.freebsd.org/changeset/base/288291
> > 
> > Log:
> >   Enforce consistent limits of daemons run from rc.subr:
> >   
> >   * Allow the user to configure the login class to use in rc.conf
> >     by using {daemon}_login_class, which;
> >   * Use the daemon class by default;
> >   * .. and then use 'limits' to set the login class so it works both
> >     via init at startup (which runs this in 'daemon' class) and via
> >     whichever root environment (eg command line, other daemons, etc.)
> >   
> >   Reviewed by:	dteske
> >   Differential Revision:	https://reviews.freebsd.org/D3630
> > 
> > Modified:
> >   head/etc/rc.subr
> > 
> > Modified: head/etc/rc.subr
> > ===========================================================================
> ===
> > --- head/etc/rc.subr	Sun Sep 27 03:46:55 2015	(r288290)
> > +++ head/etc/rc.subr	Sun Sep 27 04:03:11 2015	(r288291)
> > @@ -768,6 +768,8 @@ check_startmsgs()
> >  #
> >  #	${name}_prepend	n	Command added before ${command}.
> >  #
> > +#	${name}_login_class n	Login class to use, else "daemon".
> > +#
> >  #	${rc_arg}_cmd	n	If set, use this as the method when invoked;
> >  #				Otherwise, use default command (see below)
> >  #
> > @@ -942,7 +944,7 @@ run_rc_command()
> >  	    _nice=\$${name}_nice	_user=\$${name}_user \
> >  	    _group=\$${name}_group	_groups=\$${name}_groups \
> >  	    _fib=\$${name}_fib		_env=\$${name}_env \
> > -	    _prepend=\$${name}_prepend
> > +	    _prepend=\$${name}_prepend	_login_class=\${${name}_login_class:-da
> emon}
> >  
> >  	if [ -n "$_user" ]; then	# unset $_user if running as that user
> >  		if [ "$_user" = "$(eval $IDCMD)" ]; then
> > @@ -1050,6 +1052,9 @@ $command $rc_flags $command_args"
> >  				fi
> >  			fi
> >  
> > +					# Prepend default limits
> > +			_doit="limits -C $_login_class $_doit"
>                                ^^^^^^^^^^
> > +
> >  					# run the full command
> >  					#
> >  			if ! _run_rc_doit "$_doit"; then
> 
> Apologies for waking so late.
> This breaks the start of scripts running before file systems are
> mounted, for example /etc/rc.d/ddb, if / and /usr are on separate
> partitions.  The issue is that limits is /usr/bin/limits, and for
> obvious reasons can't be found before /usr is mounted.
> I suggest either move /usr/bin/limits to /bin/limits or avoid using it
> altogether.
> Do you want me to open a PR to track this issue?
> Regards!

A simple solution might be,

Index: rc.subr
===================================================================
--- rc.subr	(revision 302001)
+++ rc.subr	(working copy)
@@ -1071,8 +1071,13 @@
 				fi
 			fi
 
+			# Before we prepend limits, test if limits is
+			# available (/usr is mounted) so that limits can
+			# be run.
+			if limits >/dev/null 2>&1; then
 					# Prepend default limits
-			_doit="limits -C $_login_class $_doit"
+				_doit="limits -C $_login_class $_doit"
+			fi
 
 					# run the full command
 					#


-- 
Cheers,
Cy Schubert <Cy.Schubert@cschubert.com>
FreeBSD UNIX:  <cy@FreeBSD.org>   Web:  http://www.FreeBSD.org

	The need of the many outweighs the greed of the few.






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