Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 Mar 2006 00:48:24 +0100
From:      Florent Thoumie <flz@xbsd.org>
To:        Brooks Davis <brooks@one-eyed-alien.net>
Cc:        freebsd-rc@freebsd.org
Subject:   Re: rc.subr / rc.d/sshd patch for review
Message-ID:  <D1279151-8F6F-4D9A-A17C-63490E3BA9A8@xbsd.org>
In-Reply-To: <9783E661-7B92-47ED-ABF3-EC1AC4369CE0@xbsd.org>
References:  <1143202549.16053.145.camel@mayday.esat.net> <20060324205627.GA18100@odin.ac.hmc.edu> <00E087F1-81E4-4580-A655-50F3DD8A471F@xbsd.org> <1143461191.4290.5.camel@mayday.esat.net> <20060327183745.GA19473@odin.ac.hmc.edu> <1143556715.65237.4.camel@mayday.esat.net> <20060328170842.GA16561@odin.ac.hmc.edu> <9783E661-7B92-47ED-ABF3-EC1AC4369CE0@xbsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mar 28, 2006, at 6:30 PM, Florent Thoumie wrote:

> On Mar 28, 2006, at 6:08 PM, Brooks Davis wrote:
>
>> On Tue, Mar 28, 2006 at 03:38:35PM +0100, Florent Thoumie wrote:
>>> On Mon, 2006-03-27 at 10:37 -0800, Brooks Davis wrote:
>>>> On Mon, Mar 27, 2006 at 01:06:30PM +0100, Florent Thoumie wrote:
>>>>> On Sat, 2006-03-25 at 11:06 +0000, Florent Thoumie wrote:
>>>>>> On Mar 24, 2006, at 8:56 PM, Brooks Davis wrote:
>>>>>>
>>>>>>> On Fri, Mar 24, 2006 at 12:15:49PM +0000, Florent Thoumie wrote:
>>>>>>>> This is based on Oliver's patch for rc.d/sshd that can be  
>>>>>>>> found in
>>>>>>>> Gnats.
>>>>>>>>
>>>>>>>> In load_rc_config, I'm extracting prefix from ${command} (or
>>>>>>>> ${name}_program, which part is moved from run_rc_command), and
>>>>>>>> setting
>>>>>>>> etcdir accordingly.
>>>>>>>>
>>>>>>>> The point is that some scripts (like rc.d/sshd) can be used  
>>>>>>>> for base
>>>>>>>> sshd as well as ports sshd, and makes possible to source
>>>>>>>> ${prefix}/etc/rc.conf.d/${name}.
>>>>>>>>
>>>>>>>> This patch also documents ${name}_program above run_rc_command
>>>>>>>> (though
>>>>>>>> it's actually used in load_rc_config).
>>>>>>>
>>>>>>> Is command always set?  I'm pretty sure it isn't so this may  
>>>>>>> not be
>>>>>>> entierly
>>>>>>> safe.  If it's not set, should we try to guess prefix from $0?
>>>>>>
>>>>>> Somehow, command gets set to the right value, but you're  
>>>>>> right, I'm
>>>>>> missing a bit here.
>>>>>
>>>>> Hum, re-reading rc.subr, you were right, so I just did what you
>>>>> supposed.
>>>>
>>>> Thinking about this a bit more, in the guessing frmo $0 case,  
>>>> your proposed
>>>> code:
>>>>
>>>> +		prefix=${0%/etc/rc.d/*}/
>>>>
>>>> won't work reliably when the user uses a relative path. I think  
>>>> something
>>>> like this would be better:
>>>>
>>>> 		_tmp=`/bin/realpath $0`
>>>> 		prefix=${_tmp%/etc/rc.d/*}/
>>>
>>> Indeed, fixed.
>>>
>>>>>>> The other issue I see is that instead of:
>>>>>>>
>>>>>>> 	if [ -f ${etcdir}/rc.conf.d/"$_command" ]; then
>>>>>>> 		debug "Sourcing ${etcdir}/rc.conf.d/${_command}"
>>>>>>> 		. ${etcdir}/rc.conf.d/"$_command"
>>>>>>> 	fi
>>>>>>>
>>>>>>> I think we should do:
>>>>>>>
>>>>>>> 	if [ -f /etc/rc.conf.d/"$_command" ]; then
>>>>>>> 		debug "Sourcing /etc/rc.conf.d/${_command}"
>>>>>>> 		. /etc/rc.conf.d/"$_command"
>>>>>>> 	fi
>>>>>>> 	if [ "${etcdir}" != "/etc" -a -f ${etcdir}/
>>>>>>> rc.conf.d/"$_command" ]; then
>>>>>>> 		debug "Sourcing ${etcdir}/rc.conf.d/${_command}"
>>>>>>> 		. ${etcdir}/rc.conf.d/"$_command"
>>>>>>> 	fi
>>>>>>>
>>>>>>> That preserves the old behavior while adding support for
>>>>>>> ${prefix}/etc/rc.conf.d.
>>>>>>
>>>>>> Fair enough, but I'd like to add a note saying that /etc/ 
>>>>>> rc.conf.d/$
>>>>>> {name} is deprecated for ${etcdir} != "/etc".
>>>>
>>>> The deprecation warning should not be printed in the case that $ 
>>>> {etcdir}
>>>> is /etc.  You should also avoid sourcing the file twice in the /etc
>>>> case.  The easiest way to do that is probably to make the first  
>>>> case
>>>> contingent on ${etcdir} != /etc.
>>>
>>> Next time I'll test my changes (and sleep more).
>>>
>>> Did that too, and added a check to test if there's a
>>> ${etcdir}/rc.conf.d/${_command} file.
>>
>> Testing prefix=/ isn't sufficent since prefix could also be /usr.   
>> You
>> should check etcdir=/etc.
>
> True.
>
>> I don't think there's much point in the second test.  I don't like  
>> silent
>> ignoring of files, it's really hard to debug.  Instead, I'd source  
>> the file
>> in that case, but print a warning that two files exist.
>
> I thought there might be cases where you'd want different options  
> in /etc/rc.conf.d/$name and $etcdir/rc.conf.d/$name. So keeping  
> both made sense.
>
>>> Patch updated : http://people.freebsd.org/~flz/local/rc.d-sshd.diff
>>>
>>> BTW, I think that we should s/_command/_name/ in load_rc_config 
>>> (), this
>>> is a bit confusing.
>>
>> That sounds reasonable.
>
> Ok, will do then.
>
> I've merged latest rc.subr changes from NetBSD too, will post the  
> diff with everything tomorrow in the (european) morning.

Here's new diff (merge from NetBSD + load_rc_config changes) :

http://people.freebsd.org/~flz/local/rc.d-merge-sshd.diff

I'm still unsure about what you proposed (warning when both /etc/ 
rc.conf.d/${name} and ${etcdir}/rc.conf.d/${name}  exist). It would  
be nice to have comments from somebody else.

-- 
Florent Thoumie
flz@FreeBSD.org
FreeBSD Committer





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?D1279151-8F6F-4D9A-A17C-63490E3BA9A8>