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