From owner-freebsd-rc@FreeBSD.ORG Wed Jan 6 02:52:09 2010 Return-Path: Delivered-To: freebsd-rc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 500DE1065676 for ; Wed, 6 Jan 2010 02:52:09 +0000 (UTC) (envelope-from rfarmer@predatorlabs.net) Received: from qw-out-2122.google.com (qw-out-2122.google.com [74.125.92.25]) by mx1.freebsd.org (Postfix) with ESMTP id 1056B8FC14 for ; Wed, 6 Jan 2010 02:52:08 +0000 (UTC) Received: by qw-out-2122.google.com with SMTP id 9so3781471qwb.7 for ; Tue, 05 Jan 2010 18:51:57 -0800 (PST) MIME-Version: 1.0 Received: by 10.224.127.40 with SMTP id e40mr3934461qas.60.1262744822854; Tue, 05 Jan 2010 18:27:02 -0800 (PST) X-Originating-IP: [128.95.133.98] Date: Tue, 5 Jan 2010 18:27:02 -0800 Message-ID: From: Rob Farmer To: freebsd-rc@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Subject: devfs ruleset processing in rc.subr X-BeenThere: freebsd-rc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Discussion related to /etc/rc.d design and implementation." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Jan 2010 02:52:09 -0000 Hello, I am trying to fix an issue with the port shells/scponly's rc.d script and I think I may have come across a bug in /etc/rc.subr related to devfs. Here's what I'm trying to do: make_devfs() { # $1 is the user name whose home directory needs a minimal # devfs created. If ~/dev exists, it will be deleted. eval DEV="~$1/dev" while /sbin/umount "${DEV}" 2>/dev/null; do :; done /bin/rm -rf "${DEV}" /bin/mkdir -p "${DEV}" devfs_domount "${DEV}" if devfs_init_rulesets; then devfs_apply_ruleset "1" "${DEV}" && \ devfs_apply_ruleset "2" "${DEV}" || \ /sbin/umount "${DEV}" 2>/dev/null fi } The devfs_apply_ruleset function doesn't seem to process its arguments properly - it fails on the second invocation: + devfs_apply_ruleset 1 /home/test/dev + local devdir rs _me + [ -n 1 ] + eval 'rs=$1' + rs=1 + [ -n /home/test/dev ] + devdir='-m /home/test/dev' + _me=devfs_apply_ruleset + [ -z 1 ] + debug 'devfs_apply_ruleset: applying ruleset (1) to mount-point (/home/test/dev)' + /sbin/devfs -m /home/test/dev rule -s 1 applyset + return 0 + devfs_apply_ruleset 2 /home/test/dev + local devdir rs _me + [ -n 2 ] + eval 'rs=$2' + rs=/home/test/dev + [ -n /home/test/dev ] + devdir='-m /home/test/dev' + _me=devfs_apply_ruleset + [ -z /home/test/dev ] + debug 'devfs_apply_ruleset: applying ruleset (/home/test/dev) to mount-point (/home/test/dev)' + /sbin/devfs -m /home/test/dev rule -s /home/test/dev applyset devfs rule: error converting to number: /home/test/dev + warn 'devfs_apply_ruleset: unable to apply ruleset /home/test/dev to /home/test/dev' + [ -x /usr/bin/logger ] + logger 'scponlyc: WARNING: devfs_apply_ruleset: unable to apply ruleset /home/test/dev to /home/test/dev' + echo 'scponlyc: WARNING: devfs_apply_ruleset: unable to apply ruleset /home/test/dev to /home/test/dev' scponlyc: WARNING: devfs_apply_ruleset: unable to apply ruleset /home/test/dev to /home/test/dev + return 1 + /sbin/umount /home/test/dev + read USER + _return=0 + [ 0 -ne 0 ] + return 0 + _run_rc_postcmd + [ -n '' ] + return 0 + return 0 The following fixes it for me (on 9.0): Index: rc.subr =================================================================== --- rc.subr (revision 201473) +++ rc.subr (working copy) @@ -1378,7 +1378,7 @@ devfs_set_ruleset() { local devdir rs _me - [ -n "$1" ] && eval rs=\$$1 || rs= + [ -n "$1" ] && eval rs=$1 || rs= [ -n "$2" ] && devdir="-m "$2"" || devdir= _me="devfs_set_ruleset" @@ -1403,7 +1403,7 @@ devfs_apply_ruleset() { local devdir rs _me - [ -n "$1" ] && eval rs=\$$1 || rs= + [ -n "$1" ] && eval rs=$1 || rs= [ -n "$2" ] && devdir="-m "$2"" || devdir= _me="devfs_apply_ruleset" So, my question is, is this a bug or am I not understanding something here? ---- Rob Farmer