Home | History | Annotate | Download | only in common_files
      1      0     stevel #! /bin/sh
      2      0     stevel #
      3      0     stevel # CDDL HEADER START
      4      0     stevel #
      5      0     stevel # The contents of this file are subject to the terms of the
      6   1106        mrj # Common Development and Distribution License (the "License").
      7   1106        mrj # You may not use this file except in compliance with the License.
      8      0     stevel #
      9      0     stevel # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10      0     stevel # or http://www.opensolaris.org/os/licensing.
     11      0     stevel # See the License for the specific language governing permissions
     12      0     stevel # and limitations under the License.
     13      0     stevel #
     14      0     stevel # When distributing Covered Code, include this CDDL HEADER in each
     15      0     stevel # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16      0     stevel # If applicable, add the following below this CDDL HEADER, with the
     17      0     stevel # fields enclosed by brackets "[]" replaced with your own identifying
     18      0     stevel # information: Portions Copyright [yyyy] [name of copyright owner]
     19      0     stevel #
     20      0     stevel # CDDL HEADER END
     21      0     stevel #
     22   1106        mrj 
     23      0     stevel #
     24   9772      Peter # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     25      0     stevel # Use is subject to license terms.
     26      0     stevel #
     27      0     stevel 
     28      0     stevel #
     29      0     stevel #  NOTE:  When a change is made to the source file for
     30      0     stevel #  /etc/minor_perm, a corresponding change must be made to
     31      0     stevel #  this class-action script.
     32      0     stevel #
     33      0     stevel #  -	If an existing entry in minor_perm is having its
     34      0     stevel #	attributes e.g. permissions, ownership changed,
     35      0     stevel #	add it to the list produced by make_chattr_list below.
     36      0     stevel #
     37      0     stevel #  -	If an existing entry must be deleted, add it to
     38      0     stevel #	the list produced by make_delete_list below.
     39      0     stevel #
     40      0     stevel #  -	If a new entry must be added to the file, add it to the
     41      0     stevel #	list produced by make_add_list.
     42      0     stevel #
     43      0     stevel #  -	If a new entry is being added to minor_perm, but there
     44      0     stevel #	may already be devices of that name on the system (e.g.
     45      0     stevel #	we used the system default permissions in a previous release),
     46      0     stevel #	and those old devices now need to have their attributes changed,
     47      0     stevel #	add it to the make_chattr_list AND the make_add_list lists
     48      0     stevel #
     49      0     stevel 
     50      0     stevel #
     51      0     stevel #  If an entry in /etc/minor_perm needs to have its attributes
     52      0     stevel #  changed, identify the entry in the list copied to /etc/chattr.$$
     53      0     stevel #  by this function.   The fields are:
     54      0     stevel #
     55      0     stevel #  <device>:<minor> <old_attrs> <new_attrs> <optional list of logical
     56      0     stevel #					      devices whose attributes
     57      0     stevel #					      will need to be changed>
     58      0     stevel #
     59      0     stevel #  where an <attribute list> := <perm> <user> <group>
     60      0     stevel #					
     61      0     stevel 
     62      0     stevel make_chattr_list() {
     63      0     stevel cat > /tmp/chattr.$$ << EOF
     64      0     stevel audio:*				0666 root sys 0600 root sys	/dev/sound/*
     65      0     stevel vol:volctl			0600 root sys 0666 root sys	/dev/volctl
     66      0     stevel sad:user			0600 root sys 0666 root sys	/dev/sad/user
     67      0     stevel se:*				0666 root sys 0600 uucp uucp	/dev/cua/*
     68      0     stevel zs:*				0666 root sys 0600 uucp uucp	/dev/cua/*
     69      0     stevel su:*				0666 root sys 0600 uucp uucp	/dev/cua/*
     70      0     stevel ssd:*			0666 root sys 0640 root sys	/dev/dsk/* /dev/rdsk/*
     71      0     stevel dad:*			0600 root sys 0640 root sys	/dev/dsk/* /dev/rdsk/*
     72      0     stevel cpc:*			0600 root sys 0666 root sys	/devices/pseudo/cpc*
     73      0     stevel log:conslog			0622 root sys 0666 root sys	/dev/conslog
     74      0     stevel sy:tty				0666 root sys 0666 root tty	/dev/tty
     75      0     stevel cvc:*				0666 root sys 0600 root sys
     76      0     stevel cvcredir:*			0666 root sys 0600 root sys
     77      0     stevel ssm:*				0600 root sys 0640 root sys	/devices/ssm*:*
     78      0     stevel icmp:icmp			0600 root sys 0666 root sys	/dev/rawip
     79      0     stevel icmp6:icmp6			0600 root sys 0666 root sys	/dev/rawip6
     80      0     stevel ip:ip				0660 root sys 0666 root sys	/dev/ip
     81      0     stevel ip6:ip6				0660 root sys 0666 root sys	/dev/ip6
     82      0     stevel rts:rts				0660 root sys 0666 root sys	/dev/rts
     83      0     stevel keysock:keysock			0600 root sys 0666 root sys	/dev/keysock
     84      0     stevel ipsecah:ipsecah			0600 root sys 0666 root sys	/dev/ipsecah
     85      0     stevel ipsecesp:ipsecesp		0600 root sys 0666 root sys	/dev/ipsecesp
     86      0     stevel spdsock:spdsock			0600 root sys 0666 root sys	/dev/spdsock
     87      0     stevel sad:admin			0600 root sys 0666 root sys	/dev/sad/admin
     88      0     stevel fssnap:ctl			0600 root sys 0666 root sys	/dev/fssnapctl
     89      0     stevel fssnap:*			0600 root sys 0640 root sys	/dev/fssnap/*
     90      0     stevel clone:ce			0600 root sys 0666 root sys	/dev/ce
     91      0     stevel clone:eri			0600 root sys 0666 root sys	/dev/eri
     92      0     stevel clone:ge			0600 root sys 0666 root sys	/dev/ge
     93      0     stevel clone:hme			0600 root sys 0666 root sys	/dev/hme
     94      0     stevel clone:qfe			0600 root sys 0666 root sys	/dev/qfe
     95      0     stevel clone:bge			0600 root sys 0666 root sys	/dev/bge
     96   7072   xy150489 clone:igb			0600 root sys 0666 root sys	/dev/igb
     97   6621   bt150084 clone:ixgbe			0600 root sys 0666 root sys	/dev/ixgbe
     98  10253     xiuyan clone:myri10ge			0600 root sys 0666 root sys	/dev/myri10ge
     99   3147   xc151355 clone:rge			0600 root sys 0666 root sys	/dev/rge
    100   3147   xc151355 clone:xge			0600 root sys 0666 root sys	/dev/xge
    101   3147   xc151355 clone:nge			0600 root sys 0666 root sys	/dev/nge
    102   3147   xc151355 clone:e1000g			0666 root root 0666 root sys	/dev/e1000g
    103   3147   xc151355 clone:chxge			0600 root sys 0666 root sys	/dev/chxge
    104   3147   xc151355 clone:vsw			0600 root sys 0666 root sys	/dev/vsw
    105   3147   xc151355 clone:vnet			0600 root sys 0666 root sys	/dev/vnet
    106   4102   xh158540 clone:pcwl                      0600 root sys 0666 root sys     /dev/pcwl
    107   5181    gd78059 clone:pcan			0600 root sys 0666 root sys     /dev/pcan
    108   5181    gd78059 clone:afe			0600 root sys 0666 root sys     /dev/afe
    109   5181    gd78059 clone:mxfe			0600 root sys 0666 root sys     /dev/mxfe
    110   5181    gd78059 clone:rtls			0600 root sys 0666 root sys     /dev/rtls
    111      0     stevel bge:*				0600 root sys 0666 root sys	/dev/bge*
    112   7072   xy150489 igb:*				0600 root sys 0666 root sys	/dev/igb*
    113   6621   bt150084 ixgbe:*				0600 root sys 0666 root sys	/dev/ixgbe*
    114  10253     xiuyan myri10ge:*			0600 root sys 0666 root sys	/dev/myri10ge*
    115   3147   xc151355 rge:*				0600 root sys 0666 root sys	/dev/rge*
    116   3147   xc151355 xge:*				0600 root sys 0666 root sys	/dev/xge*
    117   3147   xc151355 nge:*				0600 root sys 0666 root sys	/dev/nge*
    118   3147   xc151355 e1000g:*			0666 root root 0666 root sys	/dev/e1000g*
    119   3147   xc151355 chxge:*				0600 root sys 0666 root sys	/dev/chxge*
    120   3147   xc151355 vsw:*				0600 root sys 0666 root sys	/dev/vsw*
    121   3147   xc151355 vnet:*				0600 root sys 0666 root sys	/dev/vnet*
    122   4102   xh158540 pcwl:*                          0600 root sys 0666 root sys     /dev/pcwl*
    123   4102   xh158540 pcan:*                          0600 root sys 0666 root sys     /dev/pcan*
    124      0     stevel clone:dmfe			0600 root sys 0666 root sys	/dev/dmfe
    125      0     stevel dmfe:*				0600 root sys 0666 root sys	/dev/dmfe*
    126      0     stevel clone:pcelx			0600 root sys 0666 root sys	/dev/pcelx
    127      0     stevel pcelx:*				0600 root sys 0666 root sys	/dev/pcelx*
    128   5181    gd78059 afe:*				0600 root sys 0666 root sys	/dev/afe*
    129   5181    gd78059 mxfe:*				0600 root sys 0666 root sys	/dev/mxfe*
    130   5181    gd78059 rtls:*				0600 root sys 0666 root sys	/dev/rtls*
    131      0     stevel ipf:*				0600 root sys 0666 root sys	/dev/ipf
    132      0     stevel pfil:*				0600 root sys 0666 root sys	/dev/pfil
    133    907   rs135747 scsi_vhci:devctl	0600 root sys 0666 root sys /devices/scsi_vhci:devctl
    134   1677         dp fbt:fbt			0600 root sys 0644 root sys /dev/dtrace/provider/fbt
    135   1677         dp lockstat:*		0600 root sys 0644 root sys /dev/dtrace/provider/lockstat
    136   1677         dp profile:profile		0600 root sys 0644 root sys /dev/dtrace/provider/profile
    137   1677         dp sdt:sdt			0600 root sys 0644 root sys /dev/dtrace/provider/sdt
    138   1677         dp systrace:systrace	0600 root sys 0644 root sys /dev/dtrace/provider/systrace
    139      0     stevel EOF
    140      0     stevel }
    141      0     stevel 
    142      0     stevel 
    143      0     stevel #
    144      0     stevel #  If an entry in /etc/minor_perm needs to be deleted, identify
    145      0     stevel #  the entry in the list copied to /etc/delete.$$ by this function.
    146      0     stevel #  The fields are:
    147      0     stevel #
    148      0     stevel #  <device>:<minor>  <optional list of logical devices to be deleted>
    149      0     stevel #					
    150      0     stevel 
    151      0     stevel make_delete_list() {
    152      0     stevel cat > /tmp/delete.$$ << EOF
    153      0     stevel mm:mbio /dev/mbio /devices/pseudo/mm:mbio
    154      0     stevel mm:mbmem /dev/mbmem /devices/pseudo/mm:mbmem
    155      0     stevel clone:amd,0,aux,audio
    156      0     stevel sw:drum
    157      0     stevel rip:rawip
    158      0     stevel zs:*
    159      0     stevel consfb:consfb
    160      0     stevel win:*
    161      0     stevel rtvc:*
    162      0     stevel gt:*
    163      0     stevel mic:*
    164      0     stevel cgeight-p4:*
    165      0     stevel cgfour:*
    166      0     stevel cgtwo:*
    167      0     stevel id:*
    168      0     stevel xd:*
    169      0     stevel xt:*
    170      0     stevel xy:*
    171      0     stevel ie:*
    172      0     stevel be:*
    173      0     stevel se:ucm
    174      0     stevel se:ucmctl
    175      0     stevel clone:arp
    176      0     stevel clone:icmp
    177      0     stevel clone:ip
    178      0     stevel clone:tcp
    179      0     stevel clone:udp
    180      0     stevel clone:rts
    181      0     stevel clone:ipsecah
    182      0     stevel clone:ipsecesp
    183      0     stevel clone:keysock
    184   5181    gd78059 clone:le
    185      0     stevel su:*
    186      0     stevel profile:profile
    187      0     stevel clone:qe
    188      0     stevel cgfourteen:*
    189      0     stevel cgeight:*
    190      0     stevel SUNW,sx:*
    191      0     stevel sx_cmem:*
    192      0     stevel stc:*
    193   1106        mrj dbri:*
    194   1106        mrj SUNW,DBRId:*
    195   1106        mrj SUNW,DBRIe:*
    196   1106        mrj SUNW,DBRIf:*
    197   9772      Peter vni:*
    198      0     stevel EOF
    199      0     stevel }
    200      0     stevel 
    201      0     stevel #
    202      0     stevel #  If an entry needs to be added to /etc/minor_perm, add the first
    203      0     stevel #  field of the entry to the list created by this function.  The
    204      0     stevel #  remainder of the entry will be extracted from the /etc/minor_perm
    205      0     stevel #  in the package being installed, so it is not necessary to supply
    206      0     stevel #  it here.
    207      0     stevel #
    208      0     stevel 
    209      0     stevel make_add_list() {
    210      0     stevel cat > /tmp/add.$$ << EOF
    211      0     stevel clone:llc1
    212      0     stevel stc:*
    213      0     stevel mcpzsa:*
    214      0     stevel mcpp:*
    215      0     stevel vol:volctl
    216      0     stevel tl:*
    217      0     stevel tnf:tnfctl
    218      0     stevel tnf:tnfmap
    219      0     stevel zs:[a-z]
    220      0     stevel zs:[a-z],cu
    221      0     stevel sad:user
    222      0     stevel se:*
    223      0     stevel su:[a-z]
    224      0     stevel su:[a-z],cu
    225      0     stevel su:ssp
    226      0     stevel su:sspctl
    227      0     stevel fdthree:*
    228      0     stevel ssd:*
    229      0     stevel dad:*
    230      0     stevel pm:*
    231      0     stevel tod:*
    232      0     stevel SUNW,pmc:*
    233      0     stevel SUNW,mic:*
    234      0     stevel SUNW,fas:devctl
    235      0     stevel cvc:*
    236      0     stevel cvcredir:*
    237      0     stevel devinfo:devinfo
    238      0     stevel envctrltwo:*
    239      0     stevel se:[a-h]
    240      0     stevel se:[a-h],cu
    241      0     stevel se:[0-7],hdlc
    242      0     stevel se:ssp
    243      0     stevel se:sspctl
    244      0     stevel clone:hme
    245      0     stevel clone:eri
    246      0     stevel wc:*
    247      0     stevel arp:arp
    248      0     stevel icmp:icmp
    249      0     stevel icmp6:icmp6
    250      0     stevel ip:ip
    251      0     stevel ip6:ip6
    252   8023       Phil ipnet:lo0
    253      0     stevel tcp:tcp
    254      0     stevel tcp6:tcp6
    255      0     stevel udp:udp
    256      0     stevel udp6:udp6
    257      0     stevel rts:rts
    258      0     stevel poll:*
    259      0     stevel pool:pool
    260      0     stevel pool:poolctl
    261      0     stevel cpc:shared
    262      0     stevel sysmsg:msglog
    263      0     stevel sysmsg:sysmsg
    264      0     stevel ipsecah:ipsecah
    265      0     stevel ipsecesp:ipsecesp
    266      0     stevel keysock:keysock
    267      0     stevel spdsock:spdsock
    268      0     stevel devinfo:devinfo,ro
    269      0     stevel lofi:*
    270      0     stevel lofi:ctl
    271      0     stevel sgen:*
    272      0     stevel fssnap:*
    273      0     stevel fssnap:ctl
    274      0     stevel pcf8574:*
    275      0     stevel pcf8591:*
    276      0     stevel gpio_87317:*
    277      0     stevel rsm:*
    278      0     stevel random:*
    279      0     stevel mm:allkmem
    280      0     stevel ssm:*
    281      0     stevel bscv:*
    282      0     stevel clone:bge
    283   7072   xy150489 clone:igb
    284   6621   bt150084 clone:ixgbe
    285  10253     xiuyan clone:myri10ge
    286   3147   xc151355 clone:rge
    287   3147   xc151355 clone:xge
    288   3147   xc151355 clone:nge
    289   3147   xc151355 clone:e1000g
    290   3147   xc151355 clone:chxge
    291   3147   xc151355 clone:vsw
    292   3147   xc151355 clone:vnet
    293   4102   xh158540 clone:pcwl
    294   4102   xh158540 clone:pcan
    295   5181    gd78059 clone:afe
    296   5181    gd78059 clone:mxfe
    297   5181    gd78059 clone:rtls
    298      0     stevel bge:*
    299   7072   xy150489 igb:*
    300   6621   bt150084 ixgbe:*
    301  10253     xiuyan myri10ge:*
    302   3147   xc151355 rge:*
    303   3147   xc151355 xge:*
    304   3147   xc151355 nge:*
    305   3147   xc151355 e1000g:*
    306   3147   xc151355 chxge:*
    307   3147   xc151355 vsw:*
    308   3147   xc151355 vnet:*
    309   4102   xh158540 pcwl:*
    310   4102   xh158540 pcan:*
    311   5181    gd78059 afe:*
    312   5181    gd78059 mxfe:*
    313   5181    gd78059 rtls:*
    314      0     stevel clone:dmfe
    315      0     stevel dmfe:*
    316      0     stevel clone:pcelx
    317      0     stevel pcelx:*
    318      0     stevel clone:ibd
    319      0     stevel ibd:*
    320      0     stevel sysevent:*
    321      0     stevel ramdisk:*
    322      0     stevel ramdisk:ctl
    323      0     stevel cryptoadm:cryptoadm
    324      0     stevel crypto:crypto
    325      0     stevel dtrace:*
    326      0     stevel fasttrap:fasttrap
    327      0     stevel ipf:*
    328      0     stevel pfil:*
    329      0     stevel bl:*
    330      0     stevel sctp:*
    331      0     stevel sctp6:*
    332   9772      Peter dlpistub:*
    333      0     stevel cpuid:self
    334      0     stevel ntwdt:*
    335      0     stevel dld:*
    336      0     stevel mdesc:*
    337    789     ahrens zfs:*
    338    789     ahrens zfs:zfs
    339    907   rs135747 scsi_vhci:*
    340   1400    krishna kssl:*
    341   1677         dp fbt:fbt
    342   1677         dp profile:profile
    343   1677         dp sdt:sdt
    344   5895   yz147064 softmac:*
    345   1677         dp systrace:systrace
    346   3253        mec physmem:*
    347   5331        amw smbsrv:*
    348   5440   jm199354 vscan:*
    349   6007    thurlow nsmb:*
    350   6516   ky115808 bmc:bmc
    351  10616  Sebastien iptunq:*
    352   7532       Sean fm:*
    353  10491      Rishi clone:bridge
    354      0     stevel EOF
    355      0     stevel }
    356      0     stevel 
    357      0     stevel PATH="/sbin:/usr/sbin:/usr/bin:/usr/sadm/install/bin"
    358      0     stevel export PATH
    359      0     stevel 
    360      0     stevel # Internal routine to create a sed script which can be used to
    361      0     stevel # escape all shell globbing metacharacters in a path.
    362      0     stevel 
    363      0     stevel create_esc_sedscript()
    364      0     stevel {
    365      0     stevel cat > /tmp/esc.sed.$$ << EOF
    366      0     stevel s/\*/\\\\*/g
    367      0     stevel s/\?/\\\\?/g
    368      0     stevel s/\[/\\\\[/g
    369      0     stevel s/\]/\\\\]/g
    370      0     stevel EOF
    371      0     stevel }
    372      0     stevel 
    373      0     stevel # Internal routine to convert an entry in a /tmp/chwhatever.$$ file to
    374      0     stevel # an appropriately escaped pattern which can be used to grep into minor_perm.
    375      0     stevel 
    376      0     stevel entry2pattern()
    377      0     stevel {
    378      0     stevel 	# the first argument is the 'key' field from the change file.
    379      0     stevel 	# entries can contain shell globbing characters to match
    380      0     stevel 	# several devices - hence all the palaver below.
    381      0     stevel 
    382      0     stevel 	printf '%s' `echo "$1" | sed \
    383      0     stevel 		-e 's/\*/\\\\*/g'	-e 's/\?/\\\\?/g'	\
    384      0     stevel 		-e 's/\./\\\\./g'	-e 's/\[/\\\\[/g'	\
    385      0     stevel 		-e 's/\]/\\\\]/g'`
    386      0     stevel 	shift
    387      0     stevel 
    388      0     stevel 	# the remaining optional arguments are tokens separated by white-space
    389      0     stevel 
    390      0     stevel 	if [ $# = 0 ] ; then
    391      0     stevel 		printf '[ \t]'
    392      0     stevel 	else
    393      0     stevel 		while [ -n "$1" ]
    394      0     stevel 		do
    395      0     stevel 			printf '[ \t][ \t]*%s' $1
    396      0     stevel 			shift
    397      0     stevel 		done
    398      0     stevel 		printf '[ \t]*$'
    399      0     stevel 	fi
    400      0     stevel }
    401      0     stevel 
    402      0     stevel while read src dest
    403      0     stevel do
    404      0     stevel 	if [ ! -f $dest ] ; then
    405      0     stevel 		cp $src $dest
    406      0     stevel 	else
    407      0     stevel 		rm -f /tmp/*.$$
    408      0     stevel 		create_esc_sedscript
    409      0     stevel 		make_chattr_list
    410      0     stevel 		make_delete_list
    411      0     stevel 		make_add_list
    412      0     stevel 
    413      0     stevel 		#
    414      0     stevel 		#  Process the list of devices whose attributes are to be
    415      0     stevel 		#  changed.  Find those that actually need to be
    416      0     stevel 		#  applied to the file.  For each change that needs
    417      0     stevel 		#  to be applied, add an entry for it to the sed
    418      0     stevel 		#  script that will eventually be applied to the
    419      0     stevel 		#  currently-installed /etc/minor_perm file.  Also,
    420      0     stevel 		#  add an entry to the /tmp/chdevs.$$ file, which
    421      0     stevel 		#  contains the list of logical names of devices
    422      0     stevel 		#  whose permissions need to be changed.
    423      0     stevel 		#
    424      0     stevel 
    425      0     stevel 		cat /tmp/chattr.$$ | \
    426      0     stevel 		while read key oldp oldu oldg newp newu newg chdevs
    427      0     stevel 		do
    428      0     stevel 			do_chdevs=no
    429      0     stevel 
    430      0     stevel 			#
    431      0     stevel 			#  First determine whether the device entry
    432      0     stevel 			#  is already in the file, but with the old
    433      0     stevel 			#  permissions.  If so, the entry needs to be
    434      0     stevel 			#  modified and the devices in the chdevs list
    435      0     stevel 			#  need to have their permissions and ownerships
    436      0     stevel 			#  changed.
    437      0     stevel 			#
    438      0     stevel 			grepstr=`entry2pattern "${key}" $oldp $oldu $oldg`
    439      0     stevel 			if grep "$grepstr" $dest > /dev/null 2>&1; then
    440      0     stevel 				echo "s/${grepstr}/$key $newp $newu $newg/" \
    441      0     stevel 				    >> /tmp/sedscript.$$
    442      0     stevel 				do_chdevs=yes
    443      0     stevel 			fi
    444      0     stevel 
    445      0     stevel 			#
    446      0     stevel 			#  Now determine whether the device entry is
    447      0     stevel 			#  in the file at all.  If not, it is a new
    448      0     stevel 			#  entry, but there may already be devices
    449      0     stevel 			#  on the system whose permissions need to
    450      0     stevel 			#  be changed.
    451      0     stevel 			#
    452      0     stevel 			grepstr=`entry2pattern "${key}"`
    453      0     stevel 			grep "${grepstr}" $dest > /dev/null 2>&1
    454      0     stevel 			if [ $? != 0 ] ; then
    455      0     stevel 				do_chdevs=yes
    456      0     stevel 			fi
    457      0     stevel 
    458      0     stevel 			if [ $do_chdevs = yes -a "$chdevs" != "" ] ; then
    459      0     stevel 				xchdevs=`echo "$chdevs" | \
    460      0     stevel 				    sed -f /tmp/esc.sed.$$`
    461      0     stevel 				for m in $xchdevs ; do
    462      0     stevel 					echo "$m" $oldp $oldu $oldg \
    463      0     stevel 					    $newp $newu $newg >> /tmp/chdevs.$$
    464      0     stevel 				done
    465      0     stevel 			fi
    466      0     stevel 		done
    467      0     stevel 
    468      0     stevel 		#
    469      0     stevel 		#  Make sure /dev/volctl gets its permissions corrected.
    470      0     stevel 		#  (systems upgraded from 2.2 to 2.3 may have a correct
    471      0     stevel 		#  entry for /dev/volctl in the /etc/minor_perm file
    472      0     stevel 		#  but the actual /dev/volctl node may have the wrong
    473      0     stevel 		#  permissions.)
    474      0     stevel 		#
    475      0     stevel 
    476      0     stevel 		echo /dev/volctl 0600 root sys 0666 root sys >> /tmp/chdevs.$$
    477      0     stevel 
    478      0     stevel 		if [ -s /tmp/chdevs.$$ ] ; then
    479      0     stevel 			sort -u /tmp/chdevs.$$ > /tmp/tmp.$$
    480      0     stevel 			mv /tmp/tmp.$$ /tmp/chdevs.$$
    481      0     stevel 		fi
    482      0     stevel 
    483      0     stevel 		#
    484      0     stevel 		#  Process the list of devices to be deleted.
    485      0     stevel 		#  Find those that actually need to be deleted
    486      0     stevel 		#  from the file.  For each entry to be deleted,
    487      0     stevel 		#  add an entry for it to the sed script that will
    488      0     stevel 		#  eventually be applied to the  currently-installed
    489      0     stevel 		#  /etc/minor_perm file.  Also, add an entry to the
    490      0     stevel 		#  /tmp/deldevs.$$ file, which contains the list of
    491      0     stevel 		#  logical names of devices to be deleted.
    492      0     stevel 		#
    493      0     stevel 
    494      0     stevel 		cat /tmp/delete.$$ | while read key deldevs
    495      0     stevel 		do
    496      0     stevel 			grepstr=`entry2pattern "${key}"`
    497      0     stevel 			if grep "$grepstr" $dest > /dev/null 2>&1; then
    498      0     stevel 				echo "/${grepstr}/d" >> /tmp/sedscript.$$
    499      0     stevel 				if [ "$deldevs" != "" ] ; then
    500      0     stevel 					xdeldevs=`echo "$deldevs" | \
    501      0     stevel 					    sed -f /tmp/esc.sed.$$`
    502      0     stevel 					for m in $xdeldevs ; do
    503      0     stevel 						echo "$m" >> /tmp/deldevs.$$
    504      0     stevel 					done
    505      0     stevel 				fi
    506      0     stevel 			fi
    507      0     stevel 		done
    508      0     stevel 		if [ -s /tmp/deldevs.$$ ] ; then
    509      0     stevel 			sort -u /tmp/deldevs.$$ > /tmp/tmp.$$
    510      0     stevel 			mv /tmp/tmp.$$ /tmp/deldevs.$$
    511      0     stevel 		fi
    512      0     stevel 
    513      0     stevel 		#
    514      0     stevel 		#  Apply the sed script built above to the
    515      0     stevel 		#  currently-installed /etc/minor_perm file.
    516      0     stevel 		#
    517      0     stevel 
    518      0     stevel 		if [ -s /tmp/sedscript.$$ ] ; then
    519      0     stevel 			sed -f /tmp/sedscript.$$ $dest > /tmp/tmp.$$
    520      0     stevel 			cp /tmp/tmp.$$ $dest
    521      0     stevel 		fi
    522      0     stevel 
    523      0     stevel 		#
    524      0     stevel 		#  Special case code to handle bug in 2.1, 2.2, and
    525      0     stevel 		#  early 2.3 releases:  the link from /dev/sound/*
    526      0     stevel 		#  has one extra set of "../"'s in the link.  This
    527      0     stevel 		#  doesn't cause problems in normal operation 
    528      0     stevel 		#  because ".."'s that would take the search path
    529      0     stevel 		#  higher than the real root are ignored.  However,
    530      0     stevel 		#  during upgrade, when the system being upgraded is
    531      0     stevel 		#  mounted at /a, the extra ".." in the link causes
    532      0     stevel 		#  the link to be unresolvable.  The link must be
    533      0     stevel 		#  corrected so that the chmod of /dev/sound/*
    534      0     stevel 		#  works.
    535      0     stevel 		#
    536      0     stevel 
    537      0     stevel 		if [ "$PKG_INSTALL_ROOT" != "" -a "$PKG_INSTALL_ROOT" != "/" ]
    538      0     stevel 		then
    539      0     stevel 			for i in $PKG_INSTALL_ROOT/dev/sound/* ; do
    540      0     stevel 				if [ "$i" = "$PKG_INSTALL_ROOT/dev/sound/*" ]
    541      0     stevel 				then
    542      0     stevel 					break;
    543      0     stevel 				fi
    544      0     stevel 
    545      0     stevel 				# if it's not a symlink, continue
    546      0     stevel 				if [ ! -h $i ] ; then
    547      0     stevel 					continue
    548      0     stevel 				fi
    549      0     stevel 
    550      0     stevel 				ls -L $i >/dev/null 2>&1
    551      0     stevel 				if [ $? = 0 ] ; then
    552      0     stevel 					#  link is already OK
    553      0     stevel 					continue
    554      0     stevel 				fi
    555      0     stevel 
    556      0     stevel 				# otherwise, link can't be followed
    557      0     stevel 
    558      0     stevel 				# build the correct link
    559      0     stevel 				link=`ls -l $i | sed 's,.* ,,'`
    560      0     stevel 				link=`expr $link : '\.\.\/\(.*\)'`
    561      0     stevel 				if [ "$link" = "" ] ; then
    562      0     stevel 					continue;
    563      0     stevel 				fi
    564      0     stevel 
    565      0     stevel 				# build a test link
    566      0     stevel 				rm -f $PKG_INSTALL_ROOT/dev/sound/test.$$
    567      0     stevel 				ln -s $link $PKG_INSTALL_ROOT/dev/sound/test.$$
    568      0     stevel 
    569      0     stevel 				# test the link
    570      0     stevel 				ls -L $PKG_INSTALL_ROOT/dev/sound/test.$$ \
    571      0     stevel 					>/dev/null 2>&1
    572      0     stevel 
    573      0     stevel 				# it worked, so replace old link with new
    574      0     stevel 				if [ $? = 0 ] ; then
    575      0     stevel 					rm -f $i
    576      0     stevel 					ln -s $link $i
    577      0     stevel 				fi
    578      0     stevel 				rm -f $PKG_INSTALL_ROOT/dev/sound/test.$$
    579      0     stevel 			done
    580      0     stevel 		fi
    581      0     stevel 
    582      0     stevel 		#  For all entries in minor_perm whose attributes had
    583      0     stevel 		#  to be corrected, correct the relevant attributes of the
    584      0     stevel 		#  already-existing devices that correspond to those
    585      0     stevel 		#  entries.
    586      0     stevel 		#
    587      0     stevel 		if [ -s /tmp/chdevs.$$ -a "$PKG_INSTALL_ROOT" != ""  -a \
    588      0     stevel 		     "$PKG_INSTALL_ROOT" != "/" ] ; then
    589      0     stevel 			cat /tmp/chdevs.$$ |\
    590      0     stevel 			while read device oldp oldu oldg newp newu newg
    591      0     stevel 			do
    592      0     stevel 				#
    593      0     stevel 				# Note that we take pains -only- to change
    594      0     stevel 				# the permission/ownership of devices that
    595      0     stevel 				# have kept their original permissions.
    596      0     stevel 				#
    597      0     stevel 				for dev in $PKG_INSTALL_ROOT/$device; do
    598      0     stevel 					find $dev -follow -perm $oldp -exec \
    599      0     stevel 					    chmod $newp $dev \; >/dev/null 2>&1
    600      0     stevel 					find $dev -follow -user $oldu -exec \
    601      0     stevel 					    chown $newu $dev \; >/dev/null 2>&1
    602      0     stevel 					find $dev -follow -group $oldg -exec \
    603      0     stevel 					    chgrp $newg $dev \; >/dev/null 2>&1
    604      0     stevel 				done
    605      0     stevel 			done
    606      0     stevel 		fi
    607      0     stevel 
    608      0     stevel 		#
    609      0     stevel 		#  For all entries in minor_perm that were deleted,
    610      0     stevel 		#  remove the /dev entries that point to device nodes
    611      0     stevel 		#  that correspond to those entries.
    612      0     stevel 		#
    613      0     stevel 		if [ -s /tmp/deldevs.$$ -a "$PKG_INSTALL_ROOT" != ""  -a \
    614      0     stevel 		     "$PKG_INSTALL_ROOT" != "/" ] ; then
    615      0     stevel 			cat /tmp/deldevs.$$ | while read device
    616      0     stevel 			do
    617      0     stevel 				rm -f $PKG_INSTALL_ROOT/$device
    618      0     stevel 			done
    619      0     stevel 		fi
    620      0     stevel 
    621      0     stevel 
    622      0     stevel 		cat /tmp/add.$$ | while read key
    623      0     stevel 		do
    624      0     stevel 			grepstr=`entry2pattern "${key}"`
    625      0     stevel 			grep "$grepstr" $dest > /dev/null 2>&1
    626      0     stevel 			if [ $? != 0 ] ; then
    627      0     stevel 				grep "$grepstr" $src >> $dest
    628      0     stevel 			fi
    629      0     stevel 		done
    630      0     stevel 
    631      0     stevel 		rm -f /tmp/*.$$
    632      0     stevel 	fi
    633      0     stevel done
    634      0     stevel 
    635      0     stevel exit 0
    636      0     stevel 
    637