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 1677 dp # Common Development and Distribution License (the "License"). 7 1677 dp # 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 0 stevel # 23 8503 Pengcheng # Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 0 stevel # Use is subject to license terms. 25 0 stevel # 26 0 stevel 27 0 stevel # 28 0 stevel # NOTE: When a change is made to the source file for 29 0 stevel # /etc/minor_perm, a corresponding change must be made to 30 0 stevel # this class-action script. 31 0 stevel # 32 0 stevel # - If an existing entry in minor_perm is having its 33 0 stevel # attributes e.g. permissions, ownership changed, 34 0 stevel # add it to the list produced by make_chattr_list below. 35 0 stevel # 36 0 stevel # - If an existing entry must be deleted, add it to 37 0 stevel # the list produced by make_delete_list below. 38 0 stevel # 39 0 stevel # - If a new entry must be added to the file, add it to the 40 0 stevel # list produced by make_add_list. 41 0 stevel # 42 0 stevel # - If a new entry is being added to minor_perm, but there 43 0 stevel # may already be devices of that name on the system (e.g. 44 0 stevel # we used the system default permissions in a previous release), 45 0 stevel # and those old devices now need to have their attributes changed, 46 0 stevel # add it to the make_chattr_list AND the make_add_list lists 47 0 stevel # 48 0 stevel 49 0 stevel # 50 0 stevel # If an entry in /etc/minor_perm needs to have its attributes 51 0 stevel # changed, identify the entry in the list copied to /etc/chattr.$$ 52 0 stevel # by this function. The fields are: 53 0 stevel # 54 0 stevel # <device>:<minor> <old_attrs> <new_attrs> <optional list of logical 55 0 stevel # devices whose attributes 56 0 stevel # will need to be changed> 57 0 stevel # 58 0 stevel # where an <attribute list> := <perm> <user> <group> 59 0 stevel # 60 0 stevel # NOTE: this list should also contain entries for nodes that previously 61 0 stevel # were not in /etc/minor_perm (which means the default mode of 600, 62 0 stevel # owner/group == root/sys), but now have an entry 63 2712 nn35248 # 64 0 stevel 65 0 stevel make_chattr_list() 66 0 stevel { 67 0 stevel cat > /tmp/chattr.$$ << EOF 68 0 stevel vol:volctl 0600 root sys 0666 root sys /dev/volctl 69 0 stevel clone:llc1 0600 root sys 0666 root sys /dev/llc1 70 0 stevel log:conslog 0620 root sys 0666 root sys /dev/conslog 71 0 stevel sy:tty 0666 root sys 0666 root tty /dev/tty 72 0 stevel icmp:icmp 0600 root sys 0666 root sys /dev/rawip 73 0 stevel icmp6:icmp6 0600 root sys 0666 root sys /dev/rawip6 74 0 stevel ip:ip 0660 root sys 0666 root sys /dev/ip 75 0 stevel ip6:ip6 0660 root sys 0666 root sys /dev/ip6 76 0 stevel rts:rts 0660 root sys 0666 root sys /dev/rts 77 0 stevel keysock:keysock 0600 root sys 0666 root sys /dev/keysock 78 0 stevel ipsecah:ipsecah 0600 root sys 0666 root sys /dev/ipsecah 79 0 stevel ipsecesp:ipsecesp 0600 root sys 0666 root sys /dev/ipsecesp 80 0 stevel spdsock:spdsock 0600 root sys 0666 root sys /dev/spdsock 81 0 stevel sad:admin 0600 root sys 0666 root sys /dev/sad/admin 82 0 stevel fssnap:ctl 0600 root sys 0666 root sys /dev/fssnapctl 83 0 stevel fssnap:* 0600 root sys 0640 root sys /dev/fssnap/* 84 0 stevel clone:dnet 0600 root sys 0666 root sys /dev/dnet 85 0 stevel dnet:* 0600 root sys 0666 root sys /dev/dnet* 86 0 stevel clone:elxl 0600 root sys 0666 root sys /dev/elxl 87 0 stevel elxl:* 0600 root sys 0666 root sys /dev/elxl* 88 0 stevel clone:iprb 0600 root sys 0666 root sys /dev/iprb 89 0 stevel iprb:* 0600 root sys 0666 root sys /dev/iprb* 90 0 stevel clone:pcelx 0600 root sys 0666 root sys /dev/pcelx 91 0 stevel pcelx:* 0600 root sys 0666 root sys /dev/pcelx* 92 0 stevel clone:spwr 0600 root sys 0666 root sys /dev/spwr 93 0 stevel spwr:* 0600 root sys 0666 root sys /dev/spwr* 94 0 stevel cpc:* 0600 root sys 0666 root sys /devices/pseudo/cpc* 95 0 stevel ipf:* 0600 root sys 0666 root sys /dev/ipf 96 0 stevel pfil:* 0600 root sys 0666 root sys /dev/pfil 97 907 rs135747 scsi_vhci:devctl 0600 root sys 0666 root sys /devices/scsi_vhci:devctl 98 1677 dp fbt:fbt 0600 root sys 0644 root sys /dev/dtrace/provider/fbt 99 1677 dp lockstat:* 0600 root sys 0644 root sys /dev/dtrace/provider/lockstat 100 1677 dp profile:profile 0600 root sys 0644 root sys /dev/dtrace/provider/profile 101 1677 dp sdt:sdt 0600 root sys 0644 root sys /dev/dtrace/provider/sdt 102 1677 dp systrace:systrace 0600 root sys 0644 root sys /dev/dtrace/provider/systrace 103 3147 xc151355 clone:bge 0600 root sys 0666 root sys /dev/bge 104 7072 xy150489 clone:igb 0600 root sys 0666 root sys /dev/igb 105 6621 bt150084 clone:ixgbe 0600 root sys 0666 root sys /dev/ixgbe 106 10253 xiuyan clone:myri10ge 0600 root sys 0666 root sys /dev/myri10ge 107 3147 xc151355 clone:rge 0600 root sys 0666 root sys /dev/rge 108 3147 xc151355 clone:xge 0600 root sys 0666 root sys /dev/xge 109 3147 xc151355 clone:nge 0600 root sys 0666 root sys /dev/nge 110 3147 xc151355 clone:chxge 0600 root sys 0666 root sys /dev/chxge 111 3147 xc151355 clone:pcn 0600 root sys 0666 root sys /dev/pcn 112 3147 xc151355 clone:rtls 0600 root sys 0666 root sys /dev/rtls 113 9999 Wang clone:arn 0600 root sys 0666 root sys /dev/arn 114 3147 xc151355 clone:ath 0600 root sys 0666 root sys /dev/ath 115 9113 Pengcheng clone:atu 0600 root sys 0666 root sys /dev/atu 116 4102 xh158540 clone:ipw 0600 root sys 0666 root sys /dev/ipw 117 7555 Fei clone:iwh 0600 root sys 0666 root sys /dev/iwh 118 4102 xh158540 clone:iwi 0600 root sys 0666 root sys /dev/iwi 119 6169 hx147065 clone:iwk 0600 root sys 0666 root sys /dev/iwk 120 10893 Quaker clone:iwp 0600 root sys 0666 root sys /dev/iwp 121 10741 Fei clone:mwl 0600 root sys 0666 root sys /dev/mwl 122 4102 xh158540 clone:pcwl 0600 root sys 0666 root sys /dev/pcwl 123 4102 xh158540 clone:pcan 0600 root sys 0666 root sys /dev/pcan 124 4609 zf162725 clone:ral 0600 root sys 0666 root sys /dev/ral 125 4689 ql147931 clone:rtw 0600 root sys 0666 root sys /dev/rtw 126 8000 Quaker clone:rum 0600 root sys 0666 root sys /dev/rum 127 9983 Fei clone:rwd 0600 root sys 0666 root sys /dev/rwd 128 9172 Fei clone:rwn 0600 root sys 0666 root sys /dev/rwn 129 10128 Fei clone:uath 0600 root sys 0666 root sys /dev/uath 130 6629 zf162725 clone:ural 0600 root sys 0666 root sys /dev/ural 131 9485 Mikore clone:urtw 0600 root sys 0666 root sys /dev/urtw 132 4128 hx147065 clone:wpi 0600 root sys 0666 root sys /dev/wpi 133 8503 Pengcheng clone:zyd 0600 root sys 0666 root sys /dev/zyd 134 5181 gd78059 clone:afe 0600 root sys 0666 root sys /dev/afe 135 5181 gd78059 clone:dmfe 0600 root sys 0666 root sys /dev/dmfe 136 5181 gd78059 clone:mxfe 0600 root sys 0666 root sys /dev/mxfe 137 3147 xc151355 bge:* 0600 root sys 0666 root sys /dev/bge* 138 7072 xy150489 igb:* 0600 root sys 0666 root sys /dev/igb* 139 6621 bt150084 ixgbe:* 0600 root sys 0666 root sys /dev/ixgbe* 140 10253 xiuyan myri10ge:* 0600 root sys 0666 root sys /dev/myri10ge* 141 3147 xc151355 rge:* 0600 root sys 0666 root sys /dev/rge* 142 3147 xc151355 xge:* 0600 root sys 0666 root sys /dev/xge* 143 3147 xc151355 nge:* 0600 root sys 0666 root sys /dev/nge* 144 3147 xc151355 e1000g:* 0666 root root 0666 root sys /dev/e1000g* 145 3147 xc151355 chxge:* 0600 root sys 0666 root sys /dev/chxge* 146 3147 xc151355 pcn:* 0600 root sys 0666 root sys /dev/pcn* 147 3147 xc151355 rtls:* 0600 root sys 0666 root sys /dev/rtls* 148 9999 Wang arn:* 0600 root sys 0666 root sys /dev/arn* 149 3147 xc151355 ath:* 0600 root sys 0666 root sys /dev/ath* 150 9113 Pengcheng atu:* 0600 root sys 0666 root sys /dev/atu* 151 4102 xh158540 ipw:* 0600 root sys 0666 root sys /dev/ipw* 152 7555 Fei iwh:* 0600 root sys 0666 root sys /dev/iwh* 153 4102 xh158540 iwi:* 0600 root sys 0666 root sys /dev/iwi* 154 6169 hx147065 iwk:* 0600 root sys 0666 root sys /dev/iwk* 155 10893 Quaker iwp:* 0600 root sys 0666 root sys /dev/iwp* 156 10741 Fei mwl:* 0600 root sys 0666 root sys /dev/mwl* 157 4102 xh158540 pcwl:* 0600 root sys 0666 root sys /dev/pcwl* 158 4102 xh158540 pcan:* 0600 root sys 0666 root sys /dev/pcan* 159 4609 zf162725 ral:* 0600 root sys 0666 root sys /dev/ral* 160 4689 ql147931 rtw:* 0600 root sys 0666 root sys /dev/rtw* 161 8000 Quaker rum:* 0600 root sys 0666 root sys /dev/rum* 162 9983 Fei rwd:* 0600 root sys 0666 root sys /dev/rwd* 163 9172 Fei rwn:* 0600 root sys 0666 root sys /dev/rwn* 164 10128 Fei uath:* 0600 root sys 0666 root sys /dev/uath* 165 6629 zf162725 ural:* 0600 root sys 0666 root sys /dev/ural* 166 9485 Mikore urtw:* 0600 root sys 0666 root sys /dev/urtw* 167 4128 hx147065 wpi:* 0600 root sys 0666 root sys /dev/wpi* 168 8503 Pengcheng zyd:* 0600 root sys 0666 root sys /dev/zyd* 169 5181 gd78059 afe:* 0600 root sys 0666 root sys /dev/afe* 170 5181 gd78059 dmfe:* 0600 root sys 0666 root sys /dev/dmfe* 171 5181 gd78059 mxfe:* 0600 root sys 0666 root sys /dev/mxfe* 172 6939 johnlev balloon:* 0600 root sys 0444 root sys /dev/xen/balloon 173 6939 johnlev domcaps:* 0600 root sys 0444 root sys /dev/xen/domcaps 174 6939 johnlev evtchn:* 0600 root sys 0666 root sys /dev/xen/evtchn 175 6939 johnlev privcmd:* 0600 root sys 0666 root sys /dev/xen/privcmd 176 6939 johnlev xenbus:* 0600 root sys 0666 root sys /dev/xen/xenbus 177 7756 Mark xpvtap:* 0600 root sys 0666 root sys /devices/xpvd/xpvtap* 178 0 stevel EOF 179 0 stevel } 180 0 stevel 181 0 stevel # 182 0 stevel # If an entry in /etc/minor_perm needs to be deleted, identify 183 0 stevel # the entry in the list copied to /etc/delete.$$ by this function. 184 0 stevel # The fields are: 185 0 stevel # 186 0 stevel # <device>:<minor> <optional list of logical devices to be deleted> 187 2712 nn35248 # 188 0 stevel 189 0 stevel make_delete_list() 190 0 stevel { 191 0 stevel cat > /tmp/delete.$$ << EOF 192 0 stevel rip:rawip 193 0 stevel consfb:consfb 194 2712 nn35248 clone:el 195 2712 nn35248 clone:elx 196 0 stevel clone:sle 197 0 stevel clone:sie 198 0 stevel clone:sp 199 0 stevel clone:ip 200 0 stevel clone:icmp 201 0 stevel clone:udp 202 0 stevel clone:tcp 203 0 stevel clone:rts 204 0 stevel clone:arp 205 0 stevel clone:ipsecah 206 0 stevel clone:ipsecesp 207 0 stevel clone:keysock 208 0 stevel clone:smc 209 0 stevel clone:tr 210 6856 gd78059 clone:sbpro 211 0 stevel elx:* 212 6856 gd78059 sbpro:* 213 0 stevel win:* 214 0 stevel cmtp:* 215 0 stevel profile:profile 216 3359 myers asy:[a-z] 217 3359 myers asy:[a-z],cu 218 4059 dp i2o_bs:* 219 9772 Peter vni:* 220 0 stevel EOF 221 0 stevel } 222 0 stevel 223 0 stevel # 224 0 stevel # If an entry needs to be added to /etc/minor_perm, add the first 225 0 stevel # field of the entry to the list created by this function. The 226 0 stevel # remainder of the entry will be extracted from the /etc/minor_perm 227 0 stevel # in the package being installed, so it is not necessary to supply 228 0 stevel # it here. 229 0 stevel # 230 0 stevel 231 0 stevel make_add_list() 232 0 stevel { 233 0 stevel cat > /tmp/add.$$ << EOF 234 0 stevel vol:volctl 235 0 stevel clone:llc1 236 0 stevel tnf:tnfctl 237 0 stevel tnf:tnfmap 238 0 stevel st:* 239 0 stevel pm:* 240 0 stevel devinfo:devinfo 241 0 stevel openeepr:openprom 242 0 stevel wc:* 243 0 stevel ip:ip 244 0 stevel ip6:ip6 245 8023 Phil ipnet:lo0 246 0 stevel icmp:icmp 247 0 stevel icmp6:icmp6 248 0 stevel udp:udp 249 0 stevel udp6:udp6 250 0 stevel tcp:tcp 251 0 stevel tcp6:tcp6 252 0 stevel rts:rts 253 0 stevel arp:arp 254 0 stevel poll:* 255 0 stevel pool:pool 256 0 stevel pool:poolctl 257 0 stevel cpc:shared 258 0 stevel sysmsg:msglog 259 0 stevel sysmsg:sysmsg 260 0 stevel ipsecah:ipsecah 261 0 stevel ipsecesp:ipsecesp 262 0 stevel keysock:keysock 263 0 stevel spdsock:spdsock 264 0 stevel devinfo:devinfo,ro 265 0 stevel lofi:* 266 0 stevel lofi:ctl 267 0 stevel sgen:* 268 0 stevel fssnap:* 269 0 stevel fssnap:ctl 270 0 stevel rsm:* 271 0 stevel random:* 272 0 stevel mm:allkmem 273 0 stevel clone:dnet 274 0 stevel dnet:* 275 0 stevel clone:elxl 276 0 stevel elxl:* 277 0 stevel clone:ibd 278 0 stevel ibd:* 279 0 stevel clone:iprb 280 0 stevel iprb:* 281 0 stevel clone:pcelx 282 0 stevel pcelx:* 283 0 stevel clone:spwr 284 0 stevel spwr:* 285 0 stevel sysevent:* 286 0 stevel ramdisk:* 287 0 stevel ramdisk:ctl 288 0 stevel cryptoadm:cryptoadm 289 0 stevel crypto:crypto 290 0 stevel dtrace:* 291 0 stevel fasttrap:fasttrap 292 0 stevel ipf:* 293 0 stevel pfil:* 294 0 stevel bl:* 295 0 stevel sctp:* 296 0 stevel sctp6:* 297 9772 Peter dlpistub:* 298 0 stevel cpuid:self 299 0 stevel clone:bge 300 7072 xy150489 clone:igb 301 6621 bt150084 clone:ixgbe 302 10253 xiuyan clone:myri10ge 303 3147 xc151355 clone:rge 304 3147 xc151355 clone:xge 305 3147 xc151355 clone:nge 306 3147 xc151355 clone:e1000g 307 3147 xc151355 clone:chxge 308 3147 xc151355 clone:pcn 309 3147 xc151355 clone:rtls 310 9999 Wang clone:arn 311 3147 xc151355 clone:ath 312 9113 Pengcheng clone:atu 313 4102 xh158540 clone:ipw 314 7555 Fei clone:iwh 315 4102 xh158540 clone:iwi 316 6169 hx147065 clone:iwk 317 10893 Quaker clone:iwp 318 10741 Fei clone:mwl 319 4102 xh158540 clone:pcwl 320 4102 xh158540 clone:pcan 321 4609 zf162725 clone:ral 322 4689 ql147931 clone:rtw 323 8000 Quaker clone:rum 324 9983 Fei clone:rwd 325 9172 Fei clone:rwn 326 10128 Fei clone:uath 327 6629 zf162725 clone:ural 328 9485 Mikore clone:urtw 329 4128 hx147065 clone:wpi 330 8503 Pengcheng clone:zyd 331 5181 gd78059 clone:afe 332 5181 gd78059 clone:dmfe 333 5181 gd78059 clone:mxfe 334 0 stevel bge:* 335 7072 xy150489 igb:* 336 6621 bt150084 ixgbe:* 337 10253 xiuyan myri10ge:* 338 3147 xc151355 rge:* 339 3147 xc151355 xge:* 340 3147 xc151355 nge:* 341 3147 xc151355 e1000g:* 342 3147 xc151355 chxge:* 343 3147 xc151355 pcn:* 344 3147 xc151355 rtls:* 345 9999 Wang arn:* 346 3147 xc151355 ath:* 347 9113 Pengcheng atu:* 348 4102 xh158540 ipw:* 349 7555 Fei iwh:* 350 4102 xh158540 iwi:* 351 6169 hx147065 iwk:* 352 10893 Quaker iwp:* 353 10741 Fei mwl:* 354 4102 xh158540 pcwl:* 355 4102 xh158540 pcan:* 356 4609 zf162725 ral:* 357 4689 ql147931 rtw:* 358 8000 Quaker rum:* 359 9983 Fei rwd:* 360 9172 Fei rwn:* 361 10128 Fei uath:* 362 6629 zf162725 ural:* 363 9485 Mikore urtw:* 364 4128 hx147065 wpi:* 365 8503 Pengcheng zyd:* 366 5181 gd78059 afe:* 367 5181 gd78059 dmfe:* 368 5181 gd78059 mxfe:* 369 0 stevel bmc:bmc 370 0 stevel dld:* 371 437 mws smbios:smbios 372 789 ahrens zfs:* 373 789 ahrens zfs:zfs 374 907 rs135747 scsi_vhci:* 375 1400 krishna kssl:* 376 1677 dp fbt:fbt 377 1677 dp profile:profile 378 1677 dp sdt:sdt 379 5895 yz147064 softmac:* 380 1677 dp systrace:systrace 381 2712 nn35248 lx_ptm:lx_ptmajor 382 2712 nn35248 lx_systrace:* 383 3253 mec physmem:* 384 3359 myers asy:* 385 3359 myers asy:*,cu 386 4581 sherrym ucode:* 387 6573 phitran acpi_drv:* 388 5331 amw smbsrv:* 389 5440 jm199354 vscan:* 390 6007 thurlow nsmb:* 391 6784 johnlev balloon:* 392 6784 johnlev domcaps:* 393 6784 johnlev evtchn:* 394 6784 johnlev privcmd:* 395 6784 johnlev xenbus:* 396 10616 Sebastien iptunq:* 397 7532 Sean fm:* 398 7730 Vikram amd_iommu:* 399 7756 Mark xpvtap:* 400 10491 Rishi clone:bridge 401 0 stevel EOF 402 0 stevel } 403 0 stevel 404 0 stevel PATH="/sbin:/usr/sbin:/usr/bin:/usr/sadm/install/bin" 405 0 stevel export PATH 406 0 stevel 407 0 stevel # Internal routine to create a sed script which can be used to 408 0 stevel # escape all shell globbing metacharacters in a path. 409 0 stevel 410 0 stevel create_esc_sedscript() 411 0 stevel { 412 0 stevel cat > /tmp/esc.sed.$$ << EOF 413 0 stevel s/\*/\\\\*/g 414 0 stevel s/\?/\\\\?/g 415 0 stevel s/\[/\\\\[/g 416 0 stevel s/\]/\\\\]/g 417 0 stevel EOF 418 0 stevel } 419 0 stevel 420 0 stevel # Internal routine to convert an entry in a /tmp/chwhatever.$$ file to 421 0 stevel # an appropriately escaped pattern which can be used to grep into minor_perm. 422 0 stevel 423 0 stevel entry2pattern() 424 0 stevel { 425 0 stevel # the first argument is the 'key' field from the change file. 426 0 stevel # entries can contain shell globbing characters to match 427 0 stevel # several devices - hence all the palaver below. 428 0 stevel 429 0 stevel printf '%s' `echo "$1" | sed \ 430 0 stevel -e 's/\*/\\\\*/g' -e 's/\?/\\\\?/g' \ 431 0 stevel -e 's/\./\\\\./g' -e 's/\[/\\\\[/g' \ 432 0 stevel -e 's/\]/\\\\]/g'` 433 0 stevel shift 434 0 stevel 435 0 stevel # the remaining optional arguments are tokens separated by white-space 436 0 stevel 437 0 stevel if [ $# = 0 ] ; then 438 0 stevel printf '[ \t]' 439 0 stevel else 440 0 stevel while [ -n "$1" ] 441 0 stevel do 442 0 stevel printf '[ \t][ \t]*%s' $1 443 0 stevel shift 444 0 stevel done 445 0 stevel printf '[ \t]*$' 446 0 stevel fi 447 0 stevel } 448 0 stevel 449 0 stevel while read src dest 450 0 stevel do 451 0 stevel if [ ! -f $dest ] ; then 452 0 stevel cp $src $dest 453 0 stevel else 454 0 stevel rm -f /tmp/*.$$ 455 0 stevel create_esc_sedscript 456 0 stevel make_chattr_list 457 0 stevel make_delete_list 458 0 stevel make_add_list 459 0 stevel 460 0 stevel # 461 0 stevel # Process the list of devices whose attributes are to be 462 0 stevel # changed. Find those that actually need to be 463 0 stevel # applied to the file. For each change that needs 464 0 stevel # to be applied, add an entry for it to the sed 465 0 stevel # script that will eventually be applied to the 466 0 stevel # currently-installed /etc/minor_perm file. Also, 467 0 stevel # add an entry to the /tmp/chdevs.$$ file, which 468 0 stevel # contains the list of logical names of devices 469 0 stevel # whose permissions need to be changed. 470 0 stevel # 471 0 stevel 472 0 stevel cat /tmp/chattr.$$ | \ 473 0 stevel while read key oldp oldu oldg newp newu newg chdevs 474 0 stevel do 475 0 stevel do_chdevs=no 476 0 stevel 477 0 stevel # 478 0 stevel # First determine whether the device entry 479 0 stevel # is already in the file, but with the old 480 0 stevel # permissions. If so, the entry needs to be 481 0 stevel # modified and the devices in the chdevs list 482 0 stevel # need to have their permissions and ownerships 483 0 stevel # changed. 484 0 stevel # 485 0 stevel grepstr=`entry2pattern "${key}" $oldp $oldu $oldg` 486 0 stevel if grep "$grepstr" $dest > /dev/null 2>&1; then 487 0 stevel echo "s/${grepstr}/$key $newp $newu $newg/" \ 488 0 stevel >> /tmp/sedscript.$$ 489 0 stevel do_chdevs=yes 490 0 stevel fi 491 0 stevel 492 0 stevel # 493 0 stevel # Now determine whether the device entry is 494 0 stevel # in the file at all. If not, it is a new 495 0 stevel # entry, but there may already be devices 496 0 stevel # on the system whose permissions need to 497 0 stevel # be changed. 498 0 stevel # 499 0 stevel grepstr=`entry2pattern "${key}"` 500 0 stevel grep "${grepstr}" $dest > /dev/null 2>&1 501 0 stevel if [ $? != 0 ] ; then 502 0 stevel do_chdevs=yes 503 0 stevel fi 504 0 stevel 505 0 stevel if [ $do_chdevs = yes -a "$chdevs" != "" ] ; then 506 0 stevel xchdevs=`echo "$chdevs" | \ 507 0 stevel sed -f /tmp/esc.sed.$$` 508 0 stevel for m in $xchdevs ; do 509 0 stevel echo "$m" $oldp $oldu $oldg \ 510 0 stevel $newp $newu $newg >> /tmp/chdevs.$$ 511 0 stevel done 512 0 stevel fi 513 0 stevel done 514 0 stevel 515 0 stevel # sort the "change attributes" list 516 0 stevel if [ -s /tmp/chdevs.$$ ] ; then 517 0 stevel sort -u /tmp/chdevs.$$ > /tmp/tmp.$$ 518 0 stevel mv /tmp/tmp.$$ /tmp/chdevs.$$ 519 0 stevel fi 520 0 stevel 521 0 stevel # 522 0 stevel # Process the list of devices to be deleted. 523 0 stevel # Find those that actually need to be deleted 524 0 stevel # from the file. For each entry to be deleted, 525 0 stevel # add an entry for it to the sed script that will 526 0 stevel # eventually be applied to the currently-installed 527 0 stevel # /etc/minor_perm file. Also, add an entry to the 528 0 stevel # /tmp/deldevs.$$ file, which contains the list of 529 0 stevel # logical names of devices to be deleted. 530 0 stevel # 531 0 stevel 532 0 stevel cat /tmp/delete.$$ | while read key deldevs 533 0 stevel do 534 0 stevel grepstr=`entry2pattern "${key}"` 535 0 stevel if grep "$grepstr" $dest > /dev/null 2>&1; then 536 0 stevel echo "/${grepstr}/d" >> /tmp/sedscript.$$ 537 0 stevel if [ "$deldevs" != "" ] ; then 538 0 stevel xdeldevs=`echo "$deldevs" | \ 539 0 stevel sed -f /tmp/esc.sed.$$` 540 0 stevel for m in $xdeldevs ; do 541 0 stevel echo "$m" >> /tmp/deldevs.$$ 542 0 stevel done 543 0 stevel fi 544 0 stevel fi 545 0 stevel done 546 0 stevel if [ -s /tmp/deldevs.$$ ] ; then 547 0 stevel sort -u /tmp/deldevs.$$ > /tmp/tmp.$$ 548 0 stevel mv /tmp/tmp.$$ /tmp/deldevs.$$ 549 0 stevel fi 550 0 stevel 551 0 stevel # 552 0 stevel # Apply the sed script possibly built above to the 553 0 stevel # currently-installed /etc/minor_perm file. 554 0 stevel # 555 0 stevel 556 0 stevel if [ -s /tmp/sedscript.$$ ] ; then 557 0 stevel sed -f /tmp/sedscript.$$ $dest > /tmp/tmp.$$ 558 0 stevel cp /tmp/tmp.$$ $dest 559 0 stevel fi 560 0 stevel 561 0 stevel # For all entries in minor_perm whose attributes had 562 0 stevel # to be corrected, correct the relevant attributes of the 563 0 stevel # already-existing devices that correspond to those 564 0 stevel # entries. 565 0 stevel # 566 0 stevel if [ -s /tmp/chdevs.$$ -a "$PKG_INSTALL_ROOT" != "" -a \ 567 0 stevel "$PKG_INSTALL_ROOT" != "/" ] ; then 568 0 stevel cat /tmp/chdevs.$$ |\ 569 0 stevel while read device oldp oldu oldg newp newu newg 570 0 stevel do 571 0 stevel # 572 0 stevel # Note that we take pains -only- to change 573 0 stevel # the permission/ownership of devices that 574 0 stevel # have kept their original permissions. 575 0 stevel # 576 0 stevel for dev in $PKG_INSTALL_ROOT/$device; do 577 0 stevel find $dev -follow -perm $oldp -exec \ 578 0 stevel chmod $newp $dev \; >/dev/null 2>&1 579 0 stevel find $dev -follow -user $oldu -exec \ 580 0 stevel chown $newu $dev \; >/dev/null 2>&1 581 0 stevel find $dev -follow -group $oldg -exec \ 582 0 stevel chgrp $newg $dev \; >/dev/null 2>&1 583 0 stevel done 584 0 stevel done 585 0 stevel fi 586 0 stevel 587 0 stevel # 588 0 stevel # For all entries in minor_perm that were deleted, 589 0 stevel # remove the /dev entries that point to device nodes 590 0 stevel # that correspond to those entries. 591 0 stevel # 592 0 stevel if [ -s /tmp/deldevs.$$ -a "$PKG_INSTALL_ROOT" != "" -a \ 593 0 stevel "$PKG_INSTALL_ROOT" != "/" ] ; then 594 0 stevel cat /tmp/deldevs.$$ | while read device 595 0 stevel do 596 0 stevel rm -f $PKG_INSTALL_ROOT/$device 597 0 stevel done 598 0 stevel fi 599 0 stevel 600 0 stevel cat /tmp/add.$$ | while read key 601 0 stevel do 602 0 stevel grepstr=`entry2pattern "${key}"` 603 0 stevel grep "$grepstr" $dest > /dev/null 2>&1 604 0 stevel if [ $? != 0 ] ; then 605 0 stevel grep "$grepstr" $src >> $dest 606 0 stevel fi 607 0 stevel done 608 0 stevel 609 0 stevel rm -f /tmp/*.$$ 610 0 stevel fi 611 0 stevel done 612 0 stevel 613 0 stevel exit 0 614