OpenSolaris_b135/pkgdefs/common_files/i.logindevperm

#!/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 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

PATH="/usr/bin:/usr/sbin:${PATH}"
export PATH

while read src dest; do
	if [ ! -f $dest ]; then
		cp -p $src $dest
		continue;
	fi

	newdest=/tmp/i.logindevperm.$$
	cat /dev/null > $newdest

	while read line; do
		# if not an entry, just print as is and move to next record
		entry=`echo "$line" | egrep "^[# 	]*/[a-zA-Z0-9\/]+[ 	]+[0-9]+[ 	]+"`
		if [ -z "$entry" ]; then
			echo "$line"
			continue
		fi

		# extract 'devices' field
		devices=`echo "$line" | awk '{print $3}'`
		if [ -z "$devices" ]; then
			echo "$line"
			continue
		fi

		# extract 'drivers' field
		drivers=`echo "$line" | awk '{print $4}'`
		found_driver=`echo "$drivers" | egrep "^driver="`
		if [ -z "$found_driver" ]; then
			drivers=""
		fi

		devices=`echo "$devices" | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g' | sed 's/\+/\\\+/g' | sed 's/\*/\\\*/g'`

		# if dest has an entry for these devices and the difference
		# between dest entry and src entry is not only
		# "/dev/console" vs. "/dev/vt/active", preserve dest entry
		dest_entry=`egrep "^[# 	]*/[a-zA-Z0-9\/]+[ 	]+[0-9]+[ 	]+$devices[ 	]*$drivers" $dest | tail -1 2>/dev/null`
		tmp_line=`echo "$line" | sed 's:/dev/vt/active:/dev/console:'`

		if [ -n "$dest_entry" ] && [ "$dest_entry" != "$tmp_line" ]; then
			echo "$dest_entry"
		else
			echo "$line"
		fi
	done < $src > $newdest

	# now carry over user's own entries
	while read line; do
		# skip non-entries
		entry=`echo "$line" | egrep "^[# 	]*/[a-zA-Z0-9\/]+[ 	]+[0-9]+[ 	]+"`
		if [ -z "$entry" ]; then
			continue
		fi

		# extract 'devices' field
		devices=`echo "$line" | awk '{print $3}'`
		if [ -z "$devices" ]; then
			continue
		fi

		# extract 'drivers' field
		drivers=`echo "$line" | awk '{print $4}'`
		found_driver=`echo "$drivers" | egrep "^driver="`
		if [ -z "$found_driver" ]; then
			drivers=""
		fi

		devices=`echo "$devices" | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g' | sed 's/\+/\\\+/g' | sed 's/\*/\\\*/g'`

		# if dest has an entry for these devices, preserve that
		dest_entry=`egrep "^[# 	]*/[a-zA-Z0-9\/]+[ 	]+[0-9]+[ 	]+"$devices"[ 	]*"$drivers"" $newdest | tail -1 2>/dev/null`
		if [ -z "$dest_entry" ]; then
			echo "$line"
		fi
	done < $dest >> $newdest

	cp $newdest $dest
	rm -f $newdest
done

exit 0