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   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