OpenSolaris_b135/pkgdefs/common_files/i.services

#!/bin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

write_comment() {
cat > /tmp/services.cmt.$$ << EOF
#
# The following customer-specific entries were found in the ${filename} file
# prior to an upgrade.  Note that ${thing} names and their corresponding
# ${number} numbers must be registered with ${registrar}, ${regurl}, and
# entries not registered as such may not be preserved automatically by
# future upgrades.
#
EOF
}

while read src dest
do
	if [ ! -f $dest ] ; then
		cp $src $dest
	else
	    
	    	# Adjust message as appropriate to target file.

	    	d=`basename $dest`

		# Assume english plural of word not ending in s.
		# no need for heroic natural language processing, we can
		# tweak things in the case statement below.

		t=`basename $d s`
		filename=${d}
		thing=${t}
		number=${t}
		registrar=IANA
		regurl=http://www.iana.org

		# Override cases we know about.
		case ${d} in
		services)
			number="port"
			;;
	        esac
		
		grep -v "^#" $dest | \
		while read service port rest_of_line; do
			grep "^$service[ 	]*$port[ 	]*" \
			    $src > /dev/null 2>&1
			if [ $? != 0 ]; then
			    # not in the new source
			    grep "^$service[ 	]*$port[ 	]*" \
				/tmp/services.$$ > /dev/null 2>&1
			    if [ $? != 0 ]; then
				# also not a duplicate, get ONE line here
				grep "^$service[ 	]*$port[ 	]*" \
				    $dest | line >> /tmp/services.$$
			    fi
			fi
		done

		cat $src > /tmp/d.$$
		if [ -f /tmp/services.$$ ]; then
			write_comment
			cat /tmp/services.cmt.$$ >> /tmp/d.$$
			cat /tmp/services.$$ >> /tmp/d.$$
			rm -f /tmp/services.$$ /tmp/services.cmt.$$
		fi
		cp /tmp/d.$$ $dest
		rm -f /tmp/d.$$

		# Set correct permissions on services file
		chmod 0644 $dest
	fi
done

exit 0