Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 May 1995 22:57:47 +0100
From:      Mark Valentine <mark@linus.demon.co.uk>
To:        current@FreeBSD.org
Subject:   MAKEDEV and device permissions
Message-ID:  <199505142157.WAA14963@linus.demon.co.uk>

next in thread | raw e-mail | index | archive | help
MAKEDEV seems to be a bit confused about how to set the permissions
on several devices (e.g. fd*).  It temporarily uses a less restrictive
umask than the one it starts off with, but then chmods the devices
to be more restricted anyway.  In the case of joy*, it doesn't set
the umask back.  (Apart from this last bit, the problem is only one
of internal consistency.)

Suggested fix: (policy) decide which one is right.  Make the chmod
calls agree, and remove the umask adjustments.  (Personally, I prefer
devices such as floppy and tape to be operator-writeable, but rc.local
can handle non-default policy.)  To be consistent, modify the parts
which rely only on the umask to use chmod instead.  The enclosed
patch is one way to go about it.

I've also removed the umask calls around the invocation of
MAKEDEV.local, since the default MAKEDEV.local sets the umask
explicitly anyway.  The worst case where "local" isn't the last
argument to MAKEDEV and MAKEDEV.local leaves an inappropriate
umask is pretty obscure, expecially if MAKEDEV no longer relies
on the umask.

The labpc* stuff could probably be a bit more explicit, since the
devices are group writeable, but the group is defaulted.

In the case of the audio devices, perhaps we need a hook into the 
login process to enable at least these to be readable/writeable by
whoever logs in on the "console".  (I've left them relying on umask
here.)

This patch is against:

#       $Id: MAKEDEV,v 1.91 1995/05/07 23:04:03 ache Exp $

It also fixes a minor complaint when creating the matcd devices.

		Mark.

--- /dev/MAKEDEV	Tue May  9 23:08:39 1995
+++ /tmp/MAKEDEV	Sun May 14 22:32:52 1995
@@ -198,7 +198,7 @@
 
 # Create device files for new Archive/Wangtek QIC-02 tape driver (vak)
 wt*)
-	umask 7 ; u=`expr $i : '..\(.*\)'`
+	u=`expr $i : '..\(.*\)'`
 	if [ x$u = x ]; then u=0; fi
 	rm -f r[Ww]t$u nr[Ww]t$u r[Ww]t$u[a-f] nr[Ww]t$u[a-f]
 	mknod rwt${u}   c 10 `expr  0 + $u`	# default density, 512b blocks
@@ -216,11 +216,11 @@
 #	mknod rwt${u}f  c 10 `expr 48 + $u`	# 600 megabytes?
 #	mknod nrwt${u}f c 10 `expr 52 + $u`
 	chown root.operator r[Ww]t$u nr[Ww]t$u r[Ww]t$u[a-f] nr[Ww]t$u[a-f]
-	umask 77
+	chmod 600 r[Ww]t$u nr[Ww]t$u r[Ww]t$u[a-f] nr[Ww]t$u[a-f]
 	;;
 
 fd*)
-	umask 2 ; unit=`expr $i : '..\(.*\)'`
+	unit=`expr $i : '..\(.*\)'`
 	name=fd; blk=2; chr=9;
 	rm -f $name$unit* r$name$unit*
 	case $unit in
@@ -300,12 +300,11 @@
 		echo bad unit for disk in: $i
 		;;
 	esac
-	umask 77
 	;;
 
 
 ft*)
-	umask 2 ; unit=`expr $i : '..\(.*\)'`
+	unit=`expr $i : '..\(.*\)'`
 	name=ft; blk=2; chr=9;
 	rm -f $name$unit* r$name$unit*
 	case $unit in
@@ -321,12 +320,10 @@
 		echo bad unit for tape in: $i
 		;;
 	esac
-	umask 77
 	;;
 
 # Individual slices.
 sd*s*|vn*s*|wd*s*)
-	umask 37
 	case $i in
 	sd*s*) name=sd; blk=4;  chr=13;;
 	wd*s*) name=wd; blk=0;  chr=3;;
@@ -369,6 +366,7 @@
 			esac
 			chgrp operator $name$unit$slicename* \
 				      r$name$unit$slicename*
+			chmod 640 $name$unit$slicename* r$name$unit$slicename
 			;;
 		*)
 			echo bad slice for disk in: $i
@@ -379,11 +377,9 @@
 		echo bad unit for disk in: $i "(unit=$unit, slice=$slice, part=$part)"
 		;;
 	esac
-	umask 77
 	;;
 
 sd*|vn*|wd*)
-	umask 37
 	case $i in
 	sd*) name=sd; blk=4;  chr=13;;
 	wd*) name=wd; blk=0;  chr=3;;
@@ -408,13 +404,14 @@
 		echo bad unit for disk in: $i
 		;;
 	esac
-	umask 77
 	;;
 
 uk*)
 	unit=`expr $i : 'uk\(.*\)'`
 	rm -f uk$unit
 	mknod uk$unit c 31 $unit
+	chgrp operator uk$unit
+	chmod 640 uk$unit
 	;;
 
 worm*)
@@ -426,6 +423,7 @@
 	name=worm
 	rm -f r${name}${unit}
 	mknod r${name}${unit} c $chr ${unit}
+	chmod 600 r${name}${unit}
 	rm -f r${name}${unit}.ctl
 	mknod r${name}${unit}.ctl c $chr `expr $unit + $scsictl `
 	chmod 600 r${name}${unit}.ctl
@@ -442,6 +440,7 @@
 	unit=`expr $unit + 1 - 1`
 	rm -f ${name}${unit}
 	mknod ${name}${unit} c $chr $unit
+	chmod 600 ${name}${unit}
 	rm -f ${name}${unit}.ctl
 	mknod ${name}${unit}.ctl c $chr `expr $unit + $scsictl `
 	chmod 600 ${name}${unit}.ctl
@@ -464,27 +463,27 @@
 	esac
 	case $class in
 	0|1|2|3|4|5|6|7)
-		umask 0
 		eval `echo $offset $name | awk ' { b=$1; n=$2 } END { \
 			for (i = 0; i < 32; i++) {
 				c = substr("0123456789abcdefghijklmnopqrstuv", i + 1, 1); \
 				printf("rm -f tty%s%s pty%s%s; \
 					mknod tty%s%s c 5 %d; \
 					mknod pty%s%s c 6 %d; \
-					chown root.wheel tty%s%s pty%s%s;", \
+					chown root.wheel tty%s%s pty%s%s; \
+					chmod 666 tty%s%s pty%s%s;", \
 					n, c, n, c, \
 					n, c, b+i, \
 					n, c, b+i, \
+					n, c, n, c, \
 					n, c, n, c); \
 			} \
 		}'`
-		umask 77
 		;;
 	esac
 	;;
 
 st*)
-	umask 2 ; unit=`expr $i : '..\(.*\)'`
+	unit=`expr $i : '..\(.*\)'`
 	chr=14;
 
 	#remove old stype names
@@ -524,11 +523,10 @@
 		echo bad unit for tape in: $i
 		;;
 	esac
-	umask 77
 	;;
 
 ch*)
-	umask 2 ; unit=`expr $i : '..\(.*\)'`
+	unit=`expr $i : '..\(.*\)'`
 	case $i in
 	ch*) name=ch;  chr=17;;
 	esac
@@ -546,11 +544,9 @@
 		echo bad unit for media changer in: $i
 		;;
 	esac
-	umask 77
 	;;
 
 cd*|mcd*|scd*)
-	umask 2 ;
 	case $i in
 	cd*) unit=`expr $i : '..\(.*\)'`; name=cd; blk=6; chr=15;;
 	mcd*) unit=`expr $i : '...\(.*\)'`; name=mcd; blk=7; chr=29;;
@@ -577,15 +573,14 @@
 		echo bad unit for disk in: $i
 		;;
 	esac
-	umask 77
 	;;
 
 matcd*)
-	umask 2 ;
 	case $i in
 	matcd*) unit=`expr $i : '.....\(.*\)'`; name=matcd; blk=17; chr=46;;
 	esac
 	rm -f $name$unit? r$name$unit?
+	rm -f $name${unit}l? r$name${unit}l?
 	case $unit in
 	0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15)
 		mknod ${name}${unit}a	b $blk `expr $unit '*' 8 + 0`
@@ -606,7 +601,6 @@
 		echo bad unit for disk in: $i
 		;;
 	esac
-	umask 77
 	;;
 
 lpt*)
@@ -617,6 +611,8 @@
 	mknod lpctl$unit c 16 `expr $unit + 128`
 	chown root.wheel lpt$unit
 	chown root.wheel lpctl$unit
+	chmod 600 lpt$unit
+	chmod 600 lpctl$unit
 	;;
 
 tw*)
@@ -624,6 +620,7 @@
 	rm -f tw$unit
 	mknod tw$unit c 19 $unit
 	chown root.operator tw$unit
+	chmod 600 tw$unit
 	;;
 
 # Use this to create virtual consoles for syscons, pcvt or codrv
@@ -635,8 +632,9 @@
 	eval `echo ${chr} ${units} | awk ' { c=$1; n=$2 } END {
 		for (i = 0; i < n; i++)
 			printf("rm -f ttyv%01x; mknod ttyv%01x c %d %d; \
-				chown root.wheel ttyv%01x;", \
-				i, i, c, i, i); }'`
+				chown root.wheel ttyv%01x; \
+				chmod 600 ttyv%01x;", \
+				i, i, c, i, i, i, i); }'`
 	ln -fs ttyv0 vga	# XXX X still needs this pccons relic
 	;;
 
@@ -645,16 +643,17 @@
 	rm -f bpf$unit
 	mknod bpf$unit c 23 $unit
 	chown root.wheel bpf$unit
+	chmod 600 bpf$unit
 	;;
 
 speaker)
 	rm -f speaker
 	mknod speaker c 26 0
 	chown root.wheel speaker
+	chmod 600 speaker
 	;;
 
 cuaa?|cua?)
-	umask 7
 	unit=`expr $i : 'cua.*\(.\)$'`
 	rm -f cua*a$unit
 	m=`ttyminor $unit`
@@ -662,7 +661,7 @@
 	mknod cuaia$unit c 28 `expr $m + 32 + 128`
 	mknod cuala$unit c 28 `expr $m + 64 + 128`
 	chown uucp.dialer cua*a$unit
-	umask 77
+	chmod 660 cua*a$unit
 	;;
 
 tty0?|ttyd?|tty?)
@@ -673,10 +672,10 @@
 	mknod ttyid$unit c 28 `expr $m + 32`
 	mknod ttyld$unit c 28 `expr $m + 64`
 	chown root.wheel tty*d$unit
+	chmod 600 tty*d$unit
 	;;
 
 cuac?)
-	umask 7
 	unit=`expr $i : 'cua.*\(.\)$'`
 	rm -f cua*c$unit
 	m=`ttyminor $unit`
@@ -684,7 +683,7 @@
 	mknod cuaic$unit c 48 `expr $m + 32 + 128`
 	mknod cualc$unit c 48 `expr $m + 64 + 128`
 	chown uucp.dialer cua*c$unit
-	umask 77
+	chmod 660 cua*c$unit
 	;;
 
 ttyc?)
@@ -695,18 +694,18 @@
 	mknod ttyic$unit c 48 `expr $m + 32`
 	mknod ttylc$unit c 48 `expr $m + 64`
 	chown root.wheel tty*c$unit
+	chmod 600 tty*c$unit
 	;;
 
 # RISCom8 'rc' driver entries
 
 cuam?)
-	umask 7
 	unit=`expr $i : 'cua.*\(.\)$'`
 	rm -f cuam$unit
 	m=`ttyminor $unit`
 	mknod cuam$unit c 63 `expr $m + 128`
 	chown uucp.dialer cuam$unit
-	umask 77
+	chmod 660 cuam$unit
 	;;
 
 ttym?)
@@ -715,6 +714,7 @@
 	m=`ttyminor $unit`
 	mknod ttym$unit c 63 $m
 	chown root.wheel ttym$unit
+	chmod 600 ttym$unit
 	;;
 
 mse*)
@@ -723,6 +723,7 @@
 	rm -f mse$unit
 	mknod mse$unit c $chr `expr $unit '*' 2 + 1`	# non-blocking for X11
 	chown root.wheel mse$unit
+	chmod 600 mse$unit
 	;;
 
 psm*)
@@ -731,6 +732,7 @@
 	rm -f psm$unit
 	mknod psm$unit c $chr `expr $unit '*' 2 + 1`	# non-blocking for X11
 	chown root.wheel psm$unit
+	chmod 600 psm$unit
 	;;
 
 mouse*)
@@ -747,6 +749,7 @@
 	mknod pcaudio c 24 0
 	mknod pcaudioctl c 24 128
 	chown root.wheel pcaudio pcaudioctl
+	chmod 600 pcaudio pcaudioctl
 	;;
 
 socksys)
@@ -837,16 +840,17 @@
 	rm -f $i
 	mknod $i c 42 $unit
 	chown uucp.wheel $i
+	chmod 600 $i
 	;;
 
 cronyx)
 	rm -f cronyx
 	mknod cronyx c 42 63
 	chown root.wheel cronyx
+	chmod 600 cronyx
 	;;
 
 joy)
-	umask 2
 	rm -f joy0 joy1
 	mknod joy0 c 51 0
 	mknod joy1 c 51 1
@@ -865,6 +869,7 @@
 	rm -f tun$unit
 	mknod tun$unit c 52 $unit
 	chown uucp.dialer tun$unit
+	chmod 600 tun$unit
 	;;
 
 snp?)
@@ -937,7 +942,6 @@
 # labpcdio: Digital in and Digital out.
 #
 labpc*)
-	umask 7
 	case $i in
 	labpcaio*)
 		name=labpcaio
@@ -963,25 +967,24 @@
 		0|1|2|3|4|5|6|7)
 				rm -f $name$unit
 				mknod $name$unit c 66 `expr $offset + $unit `
+				chmod 660 $name$unit
 		;;
 		all)
 			for i in $all
 			do
 				rm -f $name$i
 				mknod $name$i c 66 `expr $offset + $i `
+				chmod 660 $name$i
 			done
 			;;
 		*)
 			echo "No such LabPC unit: $unit"
 			;;
 	esac
-	umask 77
 	;;
 
 local)
-	umask 0			# XXX should be elsewhere
 	sh MAKEDEV.local
-	umask 77
 	;;
 
 *)



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