devfs ruleset processing in rc.subr
Rob Farmer
rfarmer at predatorlabs.net
Wed Jan 6 02:52:09 UTC 2010
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
More information about the freebsd-rc
mailing list