1#! /usr/bin/sh 2# 3# CDDL HEADER START 4# 5# The contents of this file are subject to the terms of the 6# Common Development and Distribution License, Version 1.0 only 7# (the "License"). You may not use this file except in compliance 8# with the License. 9# 10# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 11# or http://www.opensolaris.org/os/licensing. 12# See the License for the specific language governing permissions 13# and limitations under the License. 14# 15# When distributing Covered Code, include this CDDL HEADER in each 16# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 17# If applicable, add the following below this CDDL HEADER, with the 18# fields enclosed by brackets "[]" replaced with your own identifying 19# information: Portions Copyright [yyyy] [name of copyright owner] 20# 21# CDDL HEADER END 22# 23# 24# ident "%Z%%M% %I% %E% SMI" 25# 26# Copyright 2004 Sun Microsystems, Inc. All rights reserved. 27# Use is subject to license terms. 28# 29 30# Start by cleaning out obsolete instances. For each one that 31# exists in the repository, remove it. 32inetd_obsolete_instances=" 33 network/nfs/rquota:ticlts 34 network/nfs/rquota:udp 35 network/rexec:tcp 36 network/rexec:tcp6 37 network/rpc/gss:ticotsord 38 network/rpc/mdcomm:tcp 39 network/rpc/mdcomm:tcp6 40 network/rpc/meta:tcp 41 network/rpc/meta:tcp6 42 network/rpc/metamed:tcp 43 network/rpc/metamed:tcp6 44 network/rpc/metamh:tcp 45 network/rpc/metamh:tcp6 46 network/rpc/rex:tcp 47 network/rpc/rstat:ticlts 48 network/rpc/rstat:udp 49 network/rpc/rstat:udp6 50 network/rpc/rusers:udp 51 network/rpc/rusers:udp6 52 network/rpc/rusers:ticlts 53 network/rpc/rusers:tcp 54 network/rpc/rusers:tcp6 55 network/rpc/rusers:ticotsord 56 network/rpc/rusers:ticots 57 network/rpc/spray:ticlts 58 network/rpc/spray:udp 59 network/rpc/spray:udp6 60 network/rpc/wall:ticlts 61 network/rpc/wall:udp 62 network/rpc/wall:udp6 63 network/security/krb5_prop:tcp 64 network/security/ktkt_warn:ticotsord 65 network/shell:tcp 66 network/shell:tcp6only 67 platform/sun4u/dcs:tcp 68 platform/sun4u/dcs:tcp6 69" 70 71for i in $inetd_obsolete_instances; do 72 enable=`svcprop -p general/enabled $i` 73 if [ $? = 0 ]; then 74 # Instance found, so disable and delete 75 svcadm disable $i 76 svccfg delete $i 77 if [ "$enable" = "true" ]; then 78 # Instance was enabled, so enable the replacement. 79 # We must do this here because the profile which 80 # normally enables these is only applied on first 81 # install of smf. 82 s=`echo $i | cut -f1 -d:` 83 svcadm enable $s:default 84 fi 85 fi 86done 87 88 89# The Following blocks of code cause the inetconv generated services to be 90# re-generated, so that the latest inetconv modifications are applied to all 91# services generated by it. 92 93inetdconf_entries_file=/tmp/iconf_entries.$$ 94 95# Create sed script that prints out inetd.conf src line from inetconv generated 96# manifest. 97cat <<EOF > /tmp/inetd-upgrade.$$.sed 98/propval name='source_line'/{ 99n 100s/'//g 101p 102} 103/from the inetd.conf(4) format line/{ 104n 105p 106} 107EOF 108 109# get list of inetconv generated manifests 110inetconv_manifests=`/usr/bin/find /var/svc/manifest -type f -name \*.xml | \ 111 /usr/bin/xargs /usr/bin/grep -l "Generated by inetconv"` 112 113# For each inetconv generated manifest determine the instances that should 114# be disabled when the new manifests are imported, and generate a file with 115# the inetd.conf entries from all the manifests for consumption by inetconv. 116 117> $inetdconf_entries_file 118inetconv_services="" 119instances_to_disable="" 120 121for manifest in $inetconv_manifests; do 122 123 manifest_instances=`/usr/sbin/svccfg inventory $manifest | \ 124 egrep "svc:/.*:.*"` 125 manifest_service=`/usr/sbin/svccfg inventory $manifest | \ 126 egrep -v "svc:/.*:.*"` 127 128 instance_disabled="" 129 default_enabled="" 130 enabled="" 131 132 for instance in $manifest_instances; do 133 # if the instance doesn't exist in the repository skip it 134 svcprop -q $instance 135 if [ $? -ne 0 ]; then 136 continue 137 fi 138 139 enabled=`svcprop -p general/enabled $instance` 140 141 default_instance=`echo $instance | grep ":default"` 142 if [ "$default_instance" != "" ]; then 143 default_enabled=$enabled 144 else 145 # add all non-default instances to disable list 146 instances_to_disable="$instances_to_disable \ 147 $instance" 148 if [ "$enabled" != "true" ]; then 149 instance_disabled="true" 150 fi 151 fi 152 done 153 154 # if none of the manifest's instances existed, skip this manifest 155 if [ "$enabled" = "" ]; then 156 continue 157 fi 158 159 # If the default instance existed and was disabled, or if didn't 160 # exist and one of the other instances was disabled, add the default 161 # to the list of instances to disable. 162 if [ "$default_enabled" = "false" -o "$default_enabled" = "" -a \ 163 "$instance_disabled" = "true" ]; then 164 instances_to_disable="$instances_to_disable \ 165 $manifest_service:default" 166 fi 167 168 # add the manifest's inetd.conf src line to file for inetconv 169 sed -n -f /tmp/inetd-upgrade.$$.sed $manifest >> \ 170 $inetdconf_entries_file 171done 172 173rm /tmp/inetd-upgrade.$$.sed 174 175# Run inetconv on generated file, overwriting previous manifests and values 176# in repository. 177/usr/sbin/inetconv -f -i $inetdconf_entries_file 178 179# disable the necessary instances 180for inst in $instances_to_disable; do 181 svcadm disable $inst 182done 183 184 185# If there is a saved config file from upgrade, use it to enable services 186saved_config=/etc/inet/inetd.conf.preupgrade 187 188if [ -f ${saved_config} ]; then 189 /usr/sbin/inetconv -e -i ${saved_config} 190fi 191 192# Now convert the remaining entries in inetd.conf to service manifests 193/usr/sbin/inetconv 194 195# Now disable myself as the upgrade is done 196svcadm disable network/inetd-upgrade 197 198exit 0 199