diff -ruN /opt/SUNWut.orig/bin/utset /opt/SUNWut/bin/utset
--- /opt/SUNWut.orig/bin/utset	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/bin/utset	2008-10-30 10:22:52.000000000 +0100
@@ -870,7 +870,7 @@
       print "$R $S"
     done
   ) |
-  (export LC_ALL=C; sort -t 'x' +0 -1n +1 -2n +2 -3n)
+  (export LC_ALL=C; sort -t 'x' -k 1,1n -k 2,2n -k 3,3n )
 
   exit 0
 fi
diff -ruN /opt/SUNWut.orig/lib/dhcp/isc/dhcp_config_linux /opt/SUNWut/lib/dhcp/isc/dhcp_config_linux
--- /opt/SUNWut.orig/lib/dhcp/isc/dhcp_config_linux	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/dhcp/isc/dhcp_config_linux	2008-10-30 10:22:52.000000000 +0100
@@ -7,7 +7,11 @@
 #
 
 UTDHCPDIR="$ETCDIR"/net/dhcp
-DHCPDCONF=/etc/dhcpd.conf
+if [[ -f "/etc/dhcp3/dhcpd.conf" ]]; then
+	DHCPDCONF=/etc/dhcp3/dhcpd.conf
+else
+	DHCPDCONF=/etc/dhcpd.conf
+fi
 UTDHCPFILE="$UTDHCPDIR"/utdhcp
 OPTIONSFILENAME="SunRay-options"
 OPTIONSFILE="$UTDHCPDIR"/"$OPTIONSFILENAME"
@@ -30,12 +34,16 @@
 DUMMY_SUBNET_COMMENT="# Sun Ray: dummy subnet to support DHCP clients on remote subnets"
 
 CheckChrooted() {
-	grep $CHROOTKEY $SYSDHCPD | grep -i yes 2>/dev/null 1>&2
-	if [[ $? -eq 0 ]]; then
-		CHROOTED=true
+	if [[ -f $SYSDHCPD ]]; then
+		grep $CHROOTKEY $SYSDHCPD | grep -i yes 2>/dev/null 1>&2
+		if [[ $? -eq 0 ]]; then
+			CHROOTED=true
+		else
+			CHROOTED=false
+		fi
 	else
 		CHROOTED=false
-	fi	
+	fi
 }
 
 GenerateOptionsDHCPDBlock() {
diff -ruN /opt/SUNWut.orig/lib/dhcp/isc/utdhcpservice /opt/SUNWut/lib/dhcp/isc/utdhcpservice
--- /opt/SUNWut.orig/lib/dhcp/isc/utdhcpservice	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/dhcp/isc/utdhcpservice	2008-10-30 10:22:52.000000000 +0100
@@ -49,9 +49,14 @@
 
 # names of files and directories that will be touched by this script
 #
-DHCP_CONFIG="/etc/dhcpd.conf";
+if [[ -f "/etc/dhcp3/dhcpd.conf" ]]; then
+	DHCP_CONFIG="/etc/dhcp3/dhcpd.conf"
+else
+	DHCP_CONFIG="/etc/dhcpd.conf"
+fi
 DHCP_CONFIG_SAMPLE_RHAS="/usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample";
 DHCP_CONFIG_SAMPLE_SLES="/usr/share/doc/packages/dhcp-server/dhcpd.conf";
+DHCP_CONFIG_SAMPLE_DEB="/usr/share/doc/dhcp3-server/examples/dhcpd.conf";
 TMPDIR="/var/opt/SUNWut/tmp"
 CORONA_NAME="SunRay";
 CORONA_TITLE="Sun Ray";
@@ -59,6 +64,8 @@
 	DHCP_DIR="/var/lib/dhcp";
 elif [ -d /var/lib/dhcpd ]; then
 	 DHCP_DIR="/var/lib/dhcpd";
+elif [ -d /var/lib/dhcp3 ]; then
+	DHCP_DIR="/var/lib/dhcp3";
 fi
 
 SUNRAY_FILE_MARK="${CORONA_TITLE} default DHCP config file"
@@ -76,6 +83,7 @@
 typeset DHCP_RUNNING=true
 typeset DHCP_PACKAGE_RH="dhcp"
 typeset DHCP_PACKAGE_SU="dhcp-server"
+typeset DHCP_PACKAGE_DEB="dhcp3-server"
 typeset DHCP_PACKAGE="DHCP"
 typeset DHCP_STATE="online"
 
@@ -97,7 +105,12 @@
     typeset PACKAGE="${DHCP_PACKAGE}"
     if $DHCP_INSTALLED ; then
       # get the actual package name including version and release
-      PACKAGE="$(rpm -q ${DHCP_PACKAGE} 2> /dev/null)"
+	DPKG=$(which dpkg1)
+	if [[ -f "$DPKG" ]]; then
+	  PACKAGE="$(dpkg -l | grep dhcp3-server | awk '{print $2$3}' 2> /dev/null)"
+	else
+ 	  PACKAGE="$(rpm -q ${DHCP_PACKAGE} 2> /dev/null)"
+	fi
     fi
     if ! $DHCP_RUNNING && [ $DHCP_STATE != "unconfigured" ] ; then
       DHCP_STATE="disabled"
@@ -122,12 +135,18 @@
           DHCP_CONFIG_SAMPLE=${DHCP_CONFIG_SAMPLE_RHAS}
        elif [ -f ${DHCP_CONFIG_SAMPLE_SLES} ]; then
            DHCP_CONFIG_SAMPLE=${DHCP_CONFIG_SAMPLE_SLES}
+       elif [ -f ${DHCP_CONFIG_SAMPLE_DEB} ]; then
+           DHCP_CONFIG_SAMPLE=${DHCP_CONFIG_SAMPLE_DEB}
        fi
        diff ${DHCP_CONFIG} ${DHCP_CONFIG_SAMPLE} > /dev/null 2>&1
        if [[ $? == 0 ]]; then
             mv ${DHCP_CONFIG} ${DHCP_CONFIG}.sunray
        else
-	   dhcpd -t > /dev/null 2>&1
+           if [[ -f "/usr/sbin/dhcpd3" ]]; then
+       		dhcpd3 -t > /dev/null 2>&1
+	   else
+		   dhcpd -t > /dev/null 2>&1
+	   fi
 	   if [[ $? == 0 ]]; then
 		cat > ${DHCP_CONFIG}.$$ <<-!
 # ${SUNRAY_FILE_MARK} /etc/dhcpd.conf
@@ -208,7 +227,11 @@
       return 3
     fi
 
-    /etc/init.d/dhcpd start > /dev/null 2>&1
+    if [[ -f /etc/init.d/dhcp3-server ]]; then
+        /etc/init.d/dhcp3-server start > /dev/null 2>&1
+    else
+        /etc/init.d/dhcpd start > /dev/null 2>&1
+    fi 
     return $?
 }
 
@@ -216,8 +239,11 @@
     if ! $DHCP_ENABLED ; then
       return 3
     fi
-
-    /etc/init.d/dhcpd stop > /dev/null 2>&1
+    if [[ -f /etc/init.d/dhcp3-server ]]; then
+        /etc/init.d/dhcp3-server  stop > /dev/null 2>&1
+    else
+        /etc/init.d/dhcpd stop > /dev/null 2>&1
+    fi
     return $?
 }
 
@@ -225,8 +251,11 @@
     if ! $DHCP_ENABLED ; then
       return 3
     fi
-
-    /etc/init.d/dhcpd restart > /dev/null 2>&1
+    if [[ -f /etc/init.d/dhcp3-server ]]; then
+        /etc/init.d/dhcp3-server  restart > /dev/null 2>&1
+    else
+        /etc/init.d/dhcpd restart > /dev/null 2>&1
+    fi
     return $?
 }
 
@@ -237,11 +266,16 @@
 if [[ $? -ne 0 ]] ; then
   ${UT_BASEDIR}/lib/utprodinfo -t installed ${DHCP_PACKAGE_SU} 2>/dev/null 1>&2
   if [[ $? -ne 0 ]]; then
-    DHCP_INSTALLED=false
-    DHCP_ENABLED=false
-    DHCP_CONFIGURED=false
-    DHCP_RUNNING=false
-    DHCP_STATE="uninstalled"
+    ${UT_BASEDIR}/lib/utprodinfo -t installed ${DHCP_PACKAGE_DEB} 2>/dev/null 1>&2
+    if [[ $? -ne 0 ]]; then
+      DHCP_INSTALLED=false
+      DHCP_ENABLED=false
+      DHCP_CONFIGURED=false
+      DHCP_RUNNING=false
+      DHCP_STATE="uninstalled"
+    else
+      DHCP_PACKAGE=${DHCP_PACKAGE_DEB}
+    fi
   else
     DHCP_PACKAGE=${DHCP_PACKAGE_SU}
   fi
@@ -266,8 +300,11 @@
     	if [[ $? != 0 ]] ; then
       	    DHCP_CONFIGURED=false	# Interface / subnet not defined
     	fi
-
-    	/etc/init.d/dhcpd status 2> /dev/null | grep "running" >/dev/null 2>&1
+        if [[ -f "/etc/init.d/dhcp3-server" ]]; then
+            /etc/init.d/dhcp3-server status 2> /dev/null | grep "running" >/dev/null 2>&1
+        else
+	    /etc/init.d/dhcpd status 2> /dev/null | grep "running" >/dev/null 2>&1
+	fi
     	if [[ $? -ne 0 ]]; then
       	    DHCP_RUNNING=false
     	fi
diff -ruN /opt/SUNWut.orig/lib/iu_modules/M08GDM /opt/SUNWut/lib/iu_modules/M08GDM
--- /opt/SUNWut.orig/lib/iu_modules/M08GDM	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/iu_modules/M08GDM	2008-10-30 10:22:52.000000000 +0100
@@ -312,7 +312,7 @@
 #
 if IsInstallRequired; then
 	# when installing, pick up the build number from the rpm in the CD image
-	typeset TMP_NAME=`ls -1tr ${GDM_DIR}/${GDM_NAME}-${GDM_OUR_VERSION}-?*.i386.rpm | tail -1`
+	typeset TMP_NAME=`ls -1tr ${GDM_DIR}/${GDM_NAME}-${GDM_OUR_VERSION}-?*.i386.rpm | tail -n 1`
 	TMP_NAME=${TMP_NAME##*-}
 	export GDM_RELEASE=${TMP_NAME%%\.i386*}
 else
diff -ruN /opt/SUNWut.orig/lib/iu_modules/M10SunDS /opt/SUNWut/lib/iu_modules/M10SunDS
--- /opt/SUNWut.orig/lib/iu_modules/M10SunDS	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/iu_modules/M10SunDS	2008-10-30 10:22:52.000000000 +0100
@@ -98,7 +98,7 @@
           # NOTE: head -2 to deal with the case the first line is blank.
           # we need only to know if there is anything under the subtree.
           #
-          ANY=$(ldapsearch -b "$BASE" -s one "objectclass=*" dn 2>&- | head -2)
+          ANY=$(ldapsearch -b "$BASE" -s one "objectclass=*" dn 2>&- | head -n 2)
           search_st=$?
           if [[ $search_st -eq 0 ]]; then
             # subtree exists, check if empty
diff -ruN /opt/SUNWut.orig/lib/iu_modules/M40AuthMgr /opt/SUNWut/lib/iu_modules/M40AuthMgr
--- /opt/SUNWut.orig/lib/iu_modules/M40AuthMgr	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/iu_modules/M40AuthMgr	2008-10-30 10:22:52.000000000 +0100
@@ -261,19 +261,19 @@
 
     # try to set keyval to uncommented pair first
     old_keyval=$(grep "=" $oldfile 2>&- |
-        grep "^[ 	]*${key}[= 	]" | tail -1)
+        grep "^[ 	]*${key}[= 	]" | tail -n 1)
     # if no uncommented pair, take the last commented pair
     [[ -z "$old_keyval" ]] && \
       old_keyval=$(grep "=" $oldfile 2>&- |
-      grep "^[# 	]*${key}[= 	]" | tail -1)
+      grep "^[# 	]*${key}[= 	]" | tail -n 1)
 
     # try to set keyval to uncommented pair first
     new_keyval=$(grep "=" $newfile 2>&- |
-        grep "^[ 	]*${key}[= 	]" | tail -1)
+        grep "^[ 	]*${key}[= 	]" | tail -n 1)
     # if no uncommented pair, take the last commented pair
     [[ -z "$new_keyval" ]] && \
       new_keyval=$(grep "=" $newfile 2>&- |
-      grep "^[# 	]*${key}[= 	]" | tail -1)
+      grep "^[# 	]*${key}[= 	]" | tail -n 1)
 
 #
 # Check if this parameter does not have to be modified
diff -ruN /opt/SUNWut.orig/lib/support_lib/iu_lib /opt/SUNWut/lib/support_lib/iu_lib
--- /opt/SUNWut.orig/lib/support_lib/iu_lib	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/support_lib/iu_lib	2008-10-30 10:22:52.000000000 +0100
@@ -200,8 +200,8 @@
 
     for patchid in $all_patches; do
       print -n "... checking patch ${patchid} ... "
-      exist=$(grep "${patchid}-[0-9][0-9]" ${showrev_p} | head -1)
-      patch=$(\ls -1 "$dir" 2>&- | grep "^${patchid}" | tail -1)
+      exist=$(grep "${patchid}-[0-9][0-9]" ${showrev_p} | head -n -1)
+      patch=$(\ls -1 "$dir" 2>&- | grep "^${patchid}" | tail -n -1)
       pkgs=$(cd "${dir}/${patch}" 2>&-; \ls -1 */pkginfo 2>&- | 
         sed -e 's:/pkginfo::g')
 
diff -ruN /opt/SUNWut.orig/lib/support_lib/sras_config /opt/SUNWut/lib/support_lib/sras_config
--- /opt/SUNWut.orig/lib/support_lib/sras_config	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/support_lib/sras_config	2008-10-30 10:22:52.000000000 +0100
@@ -392,13 +392,13 @@
 		else
 			if [[ $APACHE_INSTALLED == "both" ]]; then
 				if [[ $OS == "Linux" ]]; then
-					if ! ReplyIsYes "\nThere is an instance of Apache detected in both" \
+					if ! ReplyIsYes "\nThere is an istance of Apache detected in both" \
 				      	      "\n/etc/httpd and /usr/apache.  The default is /etc/httpd." \
 				      	      "\nWould you like to use this instance?  Answering \"no\"" \
 				      	      "\nwill configure the /usr/apache instance." ; then
 						APACHETMP="$ETC_OPT_UT"/http/templates/apache.tpl
-  						APACHECTL="/usr/apache/bin/apachectl"	
-						APACHEDIR="/usr/apache/conf"
+  						APACHECTL="/usr/bin/apache2ctl"	
+						APACHEDIR="/etc/apache2"
 						APACHECFG="$APACHEDIR"/httpd.conf
 					fi
 					UT_LOCATION=$APACHEDIR
@@ -580,6 +580,13 @@
 		rm -f /etc/opt/SUNWut/http/auto.start
 	fi
 	print ${APACHECTL} > /etc/opt/SUNWut/http/auto.start
+       if [[ -f /etc/default/apache2 ]]; then
+               . /etc/default/apache2
+               if [[ "$NO_START" = "1" ]]; then
+                       echo "# 0 = start on boot; 1 = don't start on boot" > /etc/default/apache2
+                       echo "NO_START=0" >> /etc/default/apache2
+               fi
+       fi
 }
 
 function RemoveAutoStart {
@@ -898,6 +905,8 @@
 	if [[ $OS == "Linux" ]]; then
 		if [[ -f /etc/httpd/conf/magic || -f /etc/httpd/magic ]]; then
 			HTTPD_SCRIPT=/usr/sbin/httpd
+                elif [[ -f /etc/apache2/magic ]]; then
+                        HTTPD_SCRIPT=/usr/sbin/apache2
 		fi
 	fi
 
@@ -938,6 +947,8 @@
 			BUNDLED_MAGIC=/etc/httpd/conf/magic
 		elif [[ -f /etc/httpd/magic ]]; then
 			BUNDLED_MAGIC=/etc/httpd/magic
+                elif [[ -f /etc/apache2/magic ]]; then
+                        BUNDLED_MAGIC=/etc/apache2/magic
 		fi
 		;;
 	esac
@@ -1066,11 +1077,26 @@
 			fi
                 	STATUS=1
         	fi
+
+	# Check for apache in Debian/Ubuntu location
+	elif [[ -f /etc/apache2/magic ]]; then
+		APACHEDIR="/etc/apache2"
+		APACHETMP="$ETC_OPT_UT"/http/templates/apache.tpl.debian
+		APACHECTL="/etc/init.d/apache2"
 	fi
         ;;
   esac
   if [[ -n $APACHEDIR ]]; then
-  	APACHECFG="$APACHEDIR"/httpd.conf
+       if [[ "$OS" = "Linux" ]]; then
+               . /etc/lsb-release
+               if [[ "$DISTRIB_ID" = "Ubuntu" ]] || [[ "$DISTRIB_ID" = "Debian" ]]; then
+                       APACHECFG="$APACHEDIR"/apache2.conf
+               else
+                       APACHECFG="$APACHEDIR"/httpd.conf
+               fi
+       else
+               APACHECFG="$APACHEDIR"/httpd.conf
+       fi
   fi
   ApacheInstalled
 
diff -ruN /opt/SUNWut.orig/lib/support_lib/upgrade_lib /opt/SUNWut/lib/support_lib/upgrade_lib
--- /opt/SUNWut.orig/lib/support_lib/upgrade_lib	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/support_lib/upgrade_lib	2008-10-30 10:22:52.000000000 +0100
@@ -56,9 +56,9 @@
   for key in $(awk -F= '{ print $1 }' $oldfile 2>&- | grep -v "^#" |
       sort -u); do
     old_keyval=$(grep "^[ 	]*$key[= 	]" $oldfile 2>&- |
-        tail -1)
+        tail -n 1)
     new_keyval=$(grep "^[ 	]*$key[= 	]" $newfile 2>&- |
-        tail -1)
+        tail -n 1)
     if [[ -n "$old_keyval" && -n "$new_keyval" ]]; then
       if [[ "$old_keyval" != "$new_keyval" ]]; then
         DoUpgrade "$key" "$old_keyval" "$new_keyval" "$newfile"
@@ -116,7 +116,7 @@
   fi
   for key in $(grep -v "^#" "$oldfile" 2>&- | awk -F= '{ print $1 }' |
       sort -u); do
-    line=$(grep "^${key}[ 	=]" "$oldfile" 2>&- | tail -1)
+    line=$(grep "^${key}[ 	=]" "$oldfile" 2>&- | tail -n 1)
     grep "$line" "$newfile" 2>&1 >/dev/null || \
       DoAppend "$line" "$newfile"
   done
@@ -564,7 +564,7 @@
     return 1
   fi
 
-  _RETURN_VAL=$(ls -1 ${TARFILE}* | tail -1)
+  _RETURN_VAL=$(ls -1 ${TARFILE}* | tail -n 1)
 
   return 0
 
diff -ruN /opt/SUNWut.orig/lib/utadmingid /opt/SUNWut/lib/utadmingid
--- /opt/SUNWut.orig/lib/utadmingid	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/utadmingid	2008-10-30 10:22:52.000000000 +0100
@@ -15,7 +15,7 @@
 ETCDIR="/etc/opt/SUNWut"
 UTADMINPW=${ETCDIR}/utadmin.pw
 if [ -f $UTADMINPW ] ; then
-	WEBGUI_GROUP=`/bin/ls -gn $UTADMINPW | /bin/awk '{print $3}' `
+	WEBGUI_GROUP=`/bin/ls -gn $UTADMINPW | awk '{print $3}' `
 fi
 WEBGUI_GROUP=${WEBGUI_GROUP:-root}
 print $WEBGUI_GROUP
diff -ruN /opt/SUNWut.orig/lib/utctl.d/features/utcronctl /opt/SUNWut/lib/utctl.d/features/utcronctl
--- /opt/SUNWut.orig/lib/utctl.d/features/utcronctl	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/utctl.d/features/utcronctl	2008-10-30 10:22:52.000000000 +0100
@@ -37,13 +37,13 @@
 		return
 	fi
 
-	(set +e; head -1 $CRONFILE | \
+	(set +e; head -n 1 $CRONFILE | \
 	    grep "^# DO NOT EDIT THIS FILE - edit the master and reinstall" \
 	    > /dev/null 2>&1)
 	if [ $? -eq 0 ]; then
 		# comment exists, remove them
 		cat /dev/null >$TMPFILE_COMM
-		head -3 $CRONFILE | sed \
+		head -n 3 $CRONFILE | sed \
 		-e "/^# DO NOT EDIT THIS FILE - edit the master and reinstall/d" \
 		-e "/^# (\/[^ ]* installed/d" \
 		-e "/^# (Cron version/d" >> $TMPFILE_COMM
diff -ruN /opt/SUNWut.orig/lib/utdmsession /opt/SUNWut/lib/utdmsession
--- /opt/SUNWut.orig/lib/utdmsession	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/utdmsession	2008-10-30 10:22:52.000000000 +0100
@@ -26,7 +26,7 @@
 #exec >/var/tmp/utdmsession.$$ 2>&1       # Debug
 #set -x
 
-MOD="`/bin/basename $0`"
+MOD="`basename $0`"
 USAGE="usage: $MOD [-c|-d] Xdisplay [-z tag]"
 UTMNT_DIRLOCK=".session"
 
diff -ruN /opt/SUNWut.orig/lib/utdtsession /opt/SUNWut/lib/utdtsession
--- /opt/SUNWut.orig/lib/utdtsession	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/utdtsession	2008-10-30 10:22:52.000000000 +0100
@@ -554,7 +554,7 @@
 	# so that a new session can be created.
 
 	# get the existing session ID
-	oldsid=$(head -1 $tif)
+	oldsid=$(head -n 1 $tif)
 
 	# get the existing session type
 	OLD_SESSION_TYPE=""
diff -ruN /opt/SUNWut.orig/lib/utgdmconfigpath /opt/SUNWut/lib/utgdmconfigpath
--- /opt/SUNWut.orig/lib/utgdmconfigpath	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/utgdmconfigpath	2008-10-30 10:24:45.000000000 +0100
@@ -10,12 +10,12 @@
 if [ "`uname -s`" = "SunOS" ]; then
     GDM_DIR=/etc/X11/gdm/
 else
-    GDM_PATH=`rpm -ql "gdm" | grep "custom.conf"`
+    GDM_PATH=`dpkg -L "gdm" | grep "gdm.conf"`
     if [ $? != 0 ]; then
 	print -u2 "Cannot determine GDM install directory"
 	exit 1;
     fi
-    GDM_DIR=${GDM_PATH%%custom\.conf*}
+    GDM_DIR=${GDM_PATH%%gdm\.conf*}
 fi
 print $GDM_DIR
 exit 0
diff -ruN /opt/SUNWut.orig/lib/utprodinfo /opt/SUNWut/lib/utprodinfo
--- /opt/SUNWut.orig/lib/utprodinfo	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/utprodinfo	2008-10-30 10:22:52.000000000 +0100
@@ -75,6 +75,8 @@
 set -A SunOS_Mapped_Sed
 # Mapped parameter query format for the Linux packaging utility
 set -A Linux_Mapped_Param
+# Mapped parameter query format for the dpkg packaging utility
+set -A Debian_Mapped_Param
 # Maximum number of parameters allowed
 typeset -i MAXParam=1
 
@@ -82,42 +84,51 @@
 Param[${MAXParam}]="BASEDIR"
 SunOS_Mapped_Param[${MAXParam}]="BASEDIR"
 Linux_Mapped_Param[${MAXParam}]="%{INSTALLPREFIX}"
+Debian_Mapped_Param[${MAXParam}]="INSTALLPREFIX"
 let MAXParam+=1
 # --- VERSION - version number with the build info.  Ex: 2.0_37.b
 Param[${MAXParam}]="VERSION"
 SunOS_Mapped_Param[${MAXParam}]="VERSION"
 SunOS_Mapped_Sed[${MAXParam}]="s/\([0-9]\{1,\}\.[0-9]\{1,\}_[0-9]\{1,2\}\.\{0,1\}[a-z]\{0,1\}\),.*/\1/"
 Linux_Mapped_Param[${MAXParam}]="%{VERSION}_%{RELEASE}"
+Debian_Mapped_Param[${MAXParam}]="DEBVERSION"
 let MAXParam+=1
 # --- PSTAMP - product timestamp
 Param[${MAXParam}]="PSTAMP"
 SunOS_Mapped_Param[${MAXParam}]="PSTAMP"
 Linux_Mapped_Param[${MAXParam}]="%{BUILDTIME:date}"
+Debian_Mapped_Param[${MAXParam}]=""
 let MAXParam+=1
 # --- NAME - description of the package.
 Param[${MAXParam}]="NAME"
 SunOS_Mapped_Param[${MAXParam}]="NAME"
 Linux_Mapped_Param[${MAXParam}]="%{SUMMARY}"
+Debian_Mapped_Param[${MAXParam}]='${Description;40}'
 let MAXParam+=1
 # --- PRODVERS - product version without the build info.  Ex: 2.0
 Param[${MAXParam}]="PRODVERS"
 SunOS_Mapped_Param[${MAXParam}]="SUNW_PRODVERS"
 Linux_Mapped_Param[${MAXParam}]="%{VERSION}"
+Debian_Mapped_Param[${MAXParam}]="DEBPRODVERS"
 let MAXParam+=1
 # --- PKGNAME - package name. Ex: SUNWuto
 Param[${MAXParam}]="PKGNAME"
 SunOS_Mapped_Param[${MAXParam}]="PKGINST"
 Linux_Mapped_Param[${MAXParam}]="%{NAME}"
+Debian_Mapped_Param[${MAXParam}]='${Package}\\n'
 let MAXParam+=1
 # --- INSTDATE - date the package is installed on the system.
 Param[${MAXParam}]="INSTDATE"
 SunOS_Mapped_Param[${MAXParam}]="INSTDATE"
 Linux_Mapped_Param[${MAXParam}]="%{INSTALLTIME:date}"
+Debian_Mapped_Param[${MAXParam}]=""
 let MAXParam+=1
 # --- PATCHLIST - list of patches installed for this package.
 Param[${MAXParam}]="PATCHLIST"
 SunOS_Mapped_Param[${MAXParam}]="PATCHLIST"
 Linux_Mapped_Param[${MAXParam}]=""
+Debian_Mapped_Param[${MAXParam}]=""
+
 let MAXParam+=1
 
 
@@ -156,14 +167,22 @@
 			# add key name manipulation sed script
 			SEDLIST="${SEDLIST} -e s/^${SunOS_Mapped_Param[${1}]}=/${Param[${1}]}=/"
 		fi
-	else
-		if [[ -n "${Linux_Mapped_Param[${1}]}" ]]; then
+	elif [[ ${PREFIX} = "Debian" ]]; then
+		if [[ -n "${Debian_Mapped_Param[${1}]}" ]]; then
 			if ${2}; then
-				MAPPEDLIST="${MAPPEDLIST}${Param[${1}]}=${Linux_Mapped_Param[${1}]}\\n"
+				MAPPEDLIST="${MAPPEDLIST}${Param[${1}]}=${Debian_Mapped_Param[${1}]}\\n"
 			else
-				MAPPEDLIST="${Linux_Mapped_Param[${1}]}\\n"
+				MAPPEDLIST="${Debian_Mapped_Param[${1}]}\\n"
 			fi
 		fi
+	else
+                if [[ -n "${Linux_Mapped_Param[${1}]}" ]]; then
+                        if ${2}; then
+                                MAPPEDLIST="${MAPPEDLIST}${Param[${1}]}=${Linux_Mapped_Param[${1}]}\\n"
+                        else
+                                MAPPEDLIST="${Linux_Mapped_Param[${1}]}\\n"
+                        fi
+                fi
 	fi
 }
 
@@ -323,6 +342,14 @@
 	return $?
 }
 
+Debian_dispAll() {
+       $DEBUG
+        # NOTE: must sort first so that we can return the exit code from grep
+	dpkg -l | grep "Sun Ray"
+	return $?
+}
+
+
 #
 # dispParams - displays the parameter information in key-value form.
 # $1 - package name
@@ -345,6 +372,43 @@
 	return 0
 }
 
+Debian_dispParams() {
+        $DEBUG
+        if ! ${PREFIX}_testPkg installed $PKGNAME; then
+                # package not installed;
+                print -u2 "${ERROR_PREF} package $PKGNAME not installed"
+                return 1
+        fi
+
+        buildParamList "$@"
+        if [[ $? -eq 1 ]]; then
+                # found no params, just return
+                return 0
+        fi
+
+	# This is becaue the alien converted packaged are lowercase
+	DEB="`echo "${PKGNAME}" | tr '[A-Z]' '[a-z]'`"
+	VERSION=""
+	PRODVERS=""
+
+	# The below is a bit of a hack to get the correct informtin out of dpkg-query
+	# it always returns /opt as the basedir
+
+	if [ "`echo "${MAPPEDLIST}"|grep "DEBVERSION"`" ]; then
+		VERSION="`dpkg-query -f '${Version}\n' -W "${DEB}" | sed -e 's/-/_/'`"
+	fi
+	if [ "`echo "${MAPPEDLIST}"|grep "DEBPRODVERS"`" ]; then
+		PRODVERS="`dpkg-query -f '${Version}\n' -W "${DEB}" | sed -e 's/-.*$//'`"
+	fi
+
+	QL="`echo "${MAPPEDLIST}"|sed -e 's/INSTALLPREFIX/\/opt/g' -e "s/DEBVERSION/${VERSION}/g" -e "s/DEBPRODVERS/${PRODVERS}/g"`"
+	if [ "`echo "${QL}"|grep '\\$'`" ]; then
+		dpkg-query -f "${QL}" -W "${DEB}"
+	else
+		echo "${QL}"
+	fi
+        return 0
+}
 
 #
 # testPkg - test the condition specified on the package.
@@ -377,6 +441,34 @@
 	return 1
 }
 
+Debian_testPkg() {
+        $DEBUG
+        if [[ $# -ne 2 ]]; then
+                return 1
+        fi
+	DEB="`echo "$2" | tr '[A-Z]' '[a-z]'`"
+        case $1 in
+        "installed")    # package installed, could be either partial or complete
+                dpkg-query -W $DEB > /dev/null 2>&1
+                return $?;;
+        "partial")      # package partially installed
+                #
+                # rpm does not understand the concept of partially installed packages.
+                # So, for now, we always return 1 (ie. false) since it can never be
+                # partially installed packages.
+                #
+                return 1;;
+        "complete")     # package completely installed
+		# dpkg format does not have a verify option, this will return if installed even partially
+                dpkg-query -q $DEB > /dev/null 2>&1
+                return $?;;
+        esac
+
+        # invalid test condition
+        print -u2 "${ERROR_PREF} invalid test operation \"$1\"."
+        return 1
+}
+
 
 PREFIX=`uname -s`
 if [[ -z "$PREFIX" ]]; then
@@ -384,6 +476,12 @@
 	print -u2 "${ERROR_PREF} unable to determince the OS running on this system."
 	exit 1
 fi
+if [[ "$PREFIX" = "Linux" ]]; then
+	. /etc/lsb-release
+        if [[ "$DISTRIB_ID" = "Ubuntu" ]] || [[ "$DISTRIB_ID" = "Debian" ]]; then
+		PREFIX="Debian"
+	fi
+fi
 
 OPMODE=""
 SUBOP=""
diff -ruN /opt/SUNWut.orig/lib/utwebadmin /opt/SUNWut/lib/utwebadmin
--- /opt/SUNWut.orig/lib/utwebadmin	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/utwebadmin	2008-10-30 10:22:52.000000000 +0100
@@ -92,7 +92,7 @@
     if [ ! -n "$rootShell" ]; then
         rootShell=/bin/sh
     fi
-    for shell in `cat /etc/shells`
+    for shell in `egrep -v '^#' /etc/shells`
     do
         if [ $shell != $rootShell ]; then
             SU_SHELL="-s $shell"
diff -ruN /opt/SUNWut.orig/lib/utxsun /opt/SUNWut/lib/utxsun
--- /opt/SUNWut.orig/lib/utxsun	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/utxsun	2008-10-30 10:22:52.000000000 +0100
@@ -31,12 +31,17 @@
 # fontpath is for a particular system. We'll grep through the
 # XF86Config file. For FCS we'll do this at install time and
 # keep the path in a file.
-if [[ -f /etc/X11/XF86Config ]] ; then
+if [[ -f /etc/X11/xorg.conf ]]; then
+	XCFG_FILE=/etc/X11/xorg.conf
+else
+	XCFG_FILE=/etc/X11/XF86Config
+fi
+if [[ -f $XCFG_FILE ]] ; then
 	# match lines with FontPath that are not commented out,
 	# accumulate the path, but remove double quotes before appending:
 	FONTPATH=$($AWK '$1 == "FontPath" { fp = fp "," substr($2,2,length($2)-2) } \
                         END { print substr(fp,2) } \
-                        ' /etc/X11/XF86Config)
+                        ' $XCFG_FILE)
 	if [ x$FONTPATH != x ] ; then
 		XMOREOPTS="-fp $FONTPATH"
 	fi
diff -ruN /opt/SUNWut.orig/lib/xkb/keycodes/usb /opt/SUNWut/lib/xkb/keycodes/usb
--- /opt/SUNWut.orig/lib/xkb/keycodes/usb	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keycodes/usb	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,132 @@
+
+// keycodes are not biased to meet the X minimum keycode
+
+// USB
+
+default xkb_keycodes "basic" {
+
+    minimum= 8;
+    maximum= 235;
+
+    <AE01> = 34;
+    <AE02> = 35;
+    <AE03> = 36;
+    <AE04> = 37;
+    <AE05> = 38;
+    <AE06> = 39;
+    <AE07> = 40;
+    <AE08> = 41;
+    <AE09> = 42;
+    <AE10> = 43;
+    <AE11> = 49;
+    <AE12> = 50;
+
+    <AD01> = 24;
+    <AD02> = 30;
+    <AD03> = 12;
+    <AD04> = 25;
+    <AD05> = 27;
+    <AD06> = 32;
+    <AD07> = 28;
+    <AD08> = 16;
+    <AD09> = 22;
+    <AD10> = 23;
+    <AD11> = 51;
+    <AD12> = 52;
+
+    <AC01> = 8;
+    <AC02> = 26;
+    <AC03> = 11;
+    <AC04> = 13;
+    <AC05> = 14;
+    <AC06> = 15;
+    <AC07> = 17;
+    <AC08> = 18;
+    <AC09> = 19;
+    <AC10> = 55;
+    <AC11> = 56;
+
+    <AB01> = 33;
+    <AB02> = 31;
+    <AB03> = 10;
+    <AB04> = 29;
+    <AB05> = 9;
+    <AB06> = 21;
+    <AB07> = 20;
+    <AB08> = 58;
+    <AB09> = 59;
+    <AB10> = 60;
+
+    <RTRN> = 44;
+    <ESC>  = 45;
+    <BKSP> = 46;
+    <TAB>  = 47;
+    <BKSL> = 53;
+    <TLDE> = 57;
+
+    <LFSH> = 229;
+    <LCTL> = 228;
+    <LALT> = 230;
+    <SPCE> = 48;
+    <RALT> = 234;
+//    <RCTL> = 232;
+    <RTSH> = 233;
+};
+
+xkb_keycodes "84" {
+    include "usb(basic)"
+    <CAPS> = 61;
+    <FK01> = 62;
+    <FK02> = 63;
+    <FK03> = 64;
+    <FK04> = 65;
+    <FK05> = 66;
+    <FK06> = 67;
+    <FK07> = 68;
+    <FK08> = 69;
+    <FK09> = 70;
+    <FK10> = 71;
+    <SCLK> = 75;
+    <KPMU> = 89;
+    <KPSU> = 90;
+    <KPAD> = 91;
+    <KP1>  = 93;
+    <KP2>  = 94;
+    <KP3>  = 95;
+    <KP4>  = 96;
+    <KP5>  = 97;
+    <KP6>  = 98;
+    <KP7>  = 99;
+    <KP8>  = 100;
+    <KP9>  = 101;
+    <KP0>  = 102;
+    <KPDL> = 103;
+};
+
+xkb_keycodes "101" {
+    include "usb(84)"
+    <FK11> = 72;
+    <FK12> = 73;
+    <PRSC> = 74;
+    <PAUS> = 76;
+    <INS>  = 77;
+    <HOME> = 78;
+    <PGUP> = 79;
+    <DELE> = 80;
+    <END>  = 81;
+    <PGDN> = 82;
+    <RGHT> = 83;
+    <LEFT> = 84;
+    <DOWN> = 85;
+    <UP>   = 86;
+    <NMLK> = 87;
+    <KPDV> = 88;
+    <KPEN> = 92;
+};
+
+xkb_keycodes "104" {
+    include "usb(101)"
+    <LMTA> = 231;
+    <RMTA> = 235;
+    <MENU> = 105;
+};
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/ca /opt/SUNWut/lib/xkb/keymap/sun/ca
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/ca	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/ca	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,25 @@
+
+xkb_keymap "Canada4" {
+    xkb_keycodes	{ include "sun(type4tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/ca(type4)"	};
+    xkb_geometry	{ include "sun(type4tuv)"	};
+};
+
+xkb_keymap "Canada_Fr5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+ca"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Canada_Fr5_Hobo" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+ca"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/ch /opt/SUNWut/lib/xkb/keymap/sun/ch
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/ch	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/ch	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,81 @@
+
+xkb_keymap "Switzer_Fr4" {
+    xkb_keycodes	{ include "sun(type4tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type4)+fr"	};
+    xkb_geometry	{ include "sun(type4tuv)"	};
+};
+
+xkb_keymap "Switzer_Fr5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+fr"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Switzer_Fr5_Hobo" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+fr"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Switzer_Fr6" {
+    xkb_keycodes	{ include "sun(type6tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/sw(type5fr)"};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+xkb_keymap "Switzer_Fr6_usb" {
+    xkb_keycodes	{ include "sun(type6tuv_usb)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/sw(type5fr)"};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+xkb_keymap "Switzer_Ge4" {
+    xkb_keycodes	{ include "sun(type4tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type4)+de"	};
+    xkb_geometry	{ include "sun(type4tuv)"	};
+};
+
+xkb_keymap "Switzer_Ge5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+de"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Switzer_Ge5_Hobo" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+de"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Switzer_Ge6" {
+    xkb_keycodes	{ include "sun(type6tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/sw(type5de)"};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+xkb_keymap "Switzer_Ge6_usb" {
+    xkb_keycodes	{ include "sun(type6tuv_usb)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/sw(type5de)"};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/cz /opt/SUNWut/lib/xkb/keymap/sun/cz
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/cz	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/cz	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,9 @@
+
+xkb_keymap "Czech5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+cz"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/dk /opt/SUNWut/lib/xkb/keymap/sun/dk
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/dk	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/dk	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,41 @@
+
+xkb_keymap "Denmark4" {
+    xkb_keycodes	{ include "sun(type4tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type4)+dk"	};
+    xkb_geometry	{ include "sun(type4tuv)"	};
+};
+
+xkb_keymap "Denmark5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+dk"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Denmark5_Hobo" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+dk"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Denmark6" {
+    xkb_keycodes	{ include "sun(type6tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/dk(type5)"	};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+xkb_keymap "Denmark6_usb" {
+    xkb_keycodes	{ include "sun(type6tuv_usb)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/dk(type5)"	};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/gr /opt/SUNWut/lib/xkb/keymap/sun/gr
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/gr	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/gr	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,9 @@
+
+xkb_keymap "Greece5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/gr(type5)"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/hu /opt/SUNWut/lib/xkb/keymap/sun/hu
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/hu	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/hu	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,9 @@
+
+xkb_keymap "Hungary5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5basic)+sun/hu(type5)"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/it /opt/SUNWut/lib/xkb/keymap/sun/it
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/it	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/it	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,42 @@
+
+xkb_keymap "Italy4" {
+    xkb_keycodes	{ include "sun(type4tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type4)+it"	};
+    xkb_geometry	{ include "sun(type4tuv)"	};
+};
+
+xkb_keymap "Italy5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+it"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Italy5_Hobo" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+it"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Italy6" {
+    xkb_keycodes	{ include "sun(type6tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/it(type5)"	};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+xkb_keymap "Italy6_usb" {
+    xkb_keycodes	{ include "sun(type6tuv_usb)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/it(type5)"	};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/jp /opt/SUNWut/lib/xkb/keymap/sun/jp
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/jp	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/jp	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,42 @@
+
+xkb_keymap "Japan4" {
+    xkb_keycodes	{ include "sun(type4jp)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/jp(type4)"	};
+    xkb_geometry	{ include "sun(type4jp)"	};
+};
+
+xkb_keymap "Japan5" {
+    xkb_keycodes	{ include "sun(type5_jp)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/jp(type5)"	};
+    xkb_geometry	{ include "sun(type5jp)"	};
+};
+
+xkb_keymap "Japan5_Hobo" {
+    xkb_keycodes	{ include "sun(type5_jp)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/jp(type5)"	};
+    xkb_geometry	{ include "sun(type5jp)"	};
+};
+
+xkb_keymap "Japan6" {
+    xkb_keycodes	{ include "sun(type6_jp)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/jp(type5)"	};
+    xkb_geometry	{ include "sun(type6jp)"	};
+};
+
+xkb_keymap "Japan6_usb" {
+    xkb_keycodes	{ include "sun(type6_jp_usb)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/jp(type5)"	};
+    xkb_geometry	{ include "sun(type6jp)"	};
+};
+
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/ko /opt/SUNWut/lib/xkb/keymap/sun/ko
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/ko	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/ko	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,41 @@
+
+xkb_keymap "Korea4" {
+    xkb_keycodes	{ include "sun(type4)"		};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/ko(type4)"	};
+    xkb_geometry	{ include "sun(type4)"		};
+};
+
+xkb_keymap "Korea5" {
+    xkb_keycodes	{ include "sun(type5)"		};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/ko(type5)"	};
+    xkb_geometry	{ include "sun(type5)"		};
+};
+
+xkb_keymap "Korea5_Hobo" {
+    xkb_keycodes	{ include "sun(type5p)"		};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/ko(type5)"	};
+    xkb_geometry	{ include "sun(type5)"		};
+};
+
+xkb_keymap "Korea6" {
+    xkb_keycodes	{ include "sun(type6)"		};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/ko(type5)"	};
+    xkb_geometry	{ include "sun(type6)"		};
+};
+
+xkb_keymap "Korea6_usb" {
+    xkb_keycodes	{ include "sun(type6_usb)"		};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/ko(type5)"	};
+    xkb_geometry	{ include "sun(type6)"		};
+};
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/lt /opt/SUNWut/lib/xkb/keymap/sun/lt
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/lt	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/lt	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,9 @@
+
+xkb_keymap "Lithuania5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5basic)+sun/lt(type5)" };
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/lv /opt/SUNWut/lib/xkb/keymap/sun/lv
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/lv	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/lv	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,9 @@
+
+xkb_keymap "Latvia5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5basic)+sun/lv(type5)"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/nl /opt/SUNWut/lib/xkb/keymap/sun/nl
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/nl	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/nl	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,42 @@
+
+xkb_keymap "Netherland4" {
+    xkb_keycodes	{ include "sun(type4tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type4)+nl"	};
+    xkb_geometry	{ include "sun(type4tuv)"	};
+};
+
+xkb_keymap "Netherland5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+nl"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Netherland5_Hobo" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+nl"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Netherland6" {
+    xkb_keycodes	{ include "sun(type6tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+nl"	};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+xkb_keymap "Netherland6_usb" {
+    xkb_keycodes	{ include "sun(type6tuv_usb)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+nl"	};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/pt /opt/SUNWut/lib/xkb/keymap/sun/pt
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/pt	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/pt	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,42 @@
+
+xkb_keymap "Portugal4" {
+    xkb_keycodes	{ include "sun(type4tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type4)+pt"	};
+    xkb_geometry	{ include "sun(type4tuv)"	};
+};
+
+xkb_keymap "Portugal5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+pt"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Portugal5_Hobo" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+pt"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Portugal6" {
+    xkb_keycodes	{ include "sun(type6tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/pt(type5)"	};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+xkb_keymap "Portugal6_usb" {
+    xkb_keycodes	{ include "sun(type6tuv_usb)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/pt(type5)"	};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/tr /opt/SUNWut/lib/xkb/keymap/sun/tr
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/tr	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/tr	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,58 @@
+
+xkb_keymap "Turkey5" {
+    xkb_keycodes	{ include "sun(type5tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/tr(type5)"	};
+    xkb_geometry	{ include "sun(type5tuv)"	};
+};
+
+xkb_keymap "Turkey6" {
+    xkb_keycodes	{ include "sun(type6tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/tr"};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+xkb_keymap "Turkey6_usb" {
+    xkb_keycodes	{ include "sun(type6tuv_usb)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/tr"};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+xkb_keymap "TurkeyQ6" {
+    xkb_keycodes	{ include "sun(type6tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/tr(type6Q)"};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+xkb_keymap "TurkeyQ6_usb" {
+    xkb_keycodes	{ include "sun(type6tuv_usb)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/tr(type6Q)"};
+    xkb_geometry	{ include "sun(type6tuv)"	};
+};
+
+xkb_keymap "TurkeyF6" {
+    xkb_keycodes	{ include "sun(type6tuv)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/tr(type6F)"};
+    xkb_geometry	{ include "sun(type6)"	};
+};
+
+xkb_keymap "TurkeyF6_usb" {
+    xkb_keycodes	{ include "sun(type6tuv_usb)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/tr(type6F)"};
+    xkb_geometry	{ include "sun(type6)"	};
+};
+
+
diff -ruN /opt/SUNWut.orig/lib/xkb/keymap/sun/tw /opt/SUNWut/lib/xkb/keymap/sun/tw
--- /opt/SUNWut.orig/lib/xkb/keymap/sun/tw	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/keymap/sun/tw	2008-10-30 10:22:52.000000000 +0100
@@ -0,0 +1,42 @@
+
+xkb_keymap "Taiwan4" {
+    xkb_keycodes	{ include "sun(type4tw)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/tw(type4)"	};
+    xkb_geometry	{ include "sun(type4tw)"	};
+};
+
+xkb_keymap "Taiwan5" {
+    xkb_keycodes	{ include "sun(type5_tw)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/tw(type5)"	};
+    xkb_geometry	{ include "sun(type5tw)"	};
+};
+
+xkb_keymap "Taiwan5_Hobo" {
+    xkb_keycodes	{ include "sun(type5_tw)"	};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/tw(type5)"	};
+    xkb_geometry	{ include "sun(type5tw)"	};
+};
+
+xkb_keymap "Taiwan6" {
+    xkb_keycodes	{ include "sun(type6)"		};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/tw(type5)"	};
+    xkb_geometry	{ include "sun(type6)"	};
+};
+
+xkb_keymap "Taiwan6_usb" {
+    xkb_keycodes	{ include "sun(type6_usb)"		};
+    xkb_types		{ include "default"		};
+    xkb_compatibility	{ include "default"		};
+    xkb_symbols		{ include "sun/us(type5)+sun/tw(type5)"	};
+    xkb_geometry	{ include "sun(type6)"	};
+};
+
+
diff -ruN /opt/SUNWut.orig/lib/xkb/rules/xfree98 /opt/SUNWut/lib/xkb/rules/xfree98
--- /opt/SUNWut.orig/lib/xkb/rules/xfree98	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/rules/xfree98	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,29 @@
+//
+//  Rules for resolving XKB components for use with XFree86
+//  Copyright 1996 by Joseph Moss
+//
+//  $XFree86: xc/programs/xkbcomp/rules/xfree86,v 3.5 1996/12/17 21:03:59 dawes Exp $
+//
+
+! model 	=	keycodes	geometry
+  pc98		=	xfree98(pc98)	nec(pc98)
+  jp106		=	xfree98(jp106)	pc(jp106)
+
+! model		layout	=	symbols
+  pc98		nec/jp	=	nec/jp(pc98)
+  jp106		jp	=	jp
+
+! model		layout	=	compat		types
+  *		*	=	complete	complete
+
+! option		=	symbols
+  grp:switch		=	+group(switch)
+  grp:toggle		=	+group(toggle)
+  grp:shift_toggle	=	+group(shift_toggle)
+  grp:ctrl_shift_toggle	=	+group(ctrl_shift_toggle)
+  grp:ctrl_alt_toggle	=	+group(ctrl_alt_toggle)
+  ctrl:nocaps		=	+ctrl(nocaps)
+  ctrl:swapcaps		=	+ctrl(swapcaps)
+  ctrl:ctrl_ac		=	+ctrl(ctrl_ac)
+  ctrl:ctrl_aa		=	+ctrl(ctrl_aa)
+
diff -ruN /opt/SUNWut.orig/lib/xkb/rules/xfree98.lst /opt/SUNWut/lib/xkb/rules/xfree98.lst
--- /opt/SUNWut.orig/lib/xkb/rules/xfree98.lst	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/rules/xfree98.lst	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,30 @@
+//
+//  Rules descriptions for XFree86
+//  Copyright 1996 by Joseph Moss
+//
+//  $XFree86: xc/programs/xkbcomp/rules/xfree86.lst,v 3.3 1996/12/18 03:30:14 dawes Exp $
+
+! model
+  pc98		PC-98 series standard
+  jp106		Japanese 106-key
+
+! layout
+  pc98		PC98
+  jp		Japanese
+
+! variant
+  nodeadkeys	Eliminate dead keys
+
+! option
+  grp			Group Shift/Lock behavior
+  grp:switch		R-Alt switches group while pressed
+  grp:toggle		Right Alt key changes group
+  grp:shift_toggle 	Both Shift keys together change group
+  grp:ctrl_shift_toggle Control+Shift changes group
+  grp:ctrl_alt_toggle	Alt+Control changes group
+  ctrl			Control Key Position
+  ctrl:nocaps		Make CapsLock an additional Control
+  ctrl:swapcaps		Swap Control and Caps Lock
+  ctrl:ctrl_ac		Control key at left of 'A'
+  ctrl:ctrl_aa		Control key at bottom left
+
diff -ruN /opt/SUNWut.orig/lib/xkb/rules/xkb.dtd /opt/SUNWut/lib/xkb/rules/xkb.dtd
--- /opt/SUNWut.orig/lib/xkb/rules/xkb.dtd	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/rules/xkb.dtd	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+
+  Description: XKB configuration file DTD
+  Author: Sergey V. Udaltsov
+
+-->
+
+<!ELEMENT xkbConfigRegistry (modelList,layoutList,optionList)>
+
+<!ELEMENT modelList (model*)>
+
+<!ELEMENT model (configItem)>
+
+<!ELEMENT layoutList (layout*)>
+
+<!ELEMENT layout (configItem,variantList?)>
+
+<!ELEMENT optionList (group*)>
+
+<!ELEMENT variantList (variant*)>
+
+<!ELEMENT variant (configItem)>
+
+<!ELEMENT group (configItem,option*)>
+<!ATTLIST group
+          allowMultipleSelection (true|false) "false">
+
+<!ELEMENT option (configItem)>
+
+<!ELEMENT configItem (name,shortDescription*,description*)>
+
+<!ELEMENT name (#PCDATA)>
+
+<!ELEMENT shortDescription (#PCDATA)>
+<!ATTLIST shortDescription
+          lang CDATA #IMPLIED>
+
+<!ELEMENT description (#PCDATA)>
+<!ATTLIST description
+          lang CDATA #IMPLIED>
diff -ruN /opt/SUNWut.orig/lib/xkb/rules/xml2lst.pl /opt/SUNWut/lib/xkb/rules/xml2lst.pl
--- /opt/SUNWut.orig/lib/xkb/rules/xml2lst.pl	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/rules/xml2lst.pl	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,288 @@
+#!/usr/bin/perl
+
+# converts the <rules>.xml file to the old format <rules>.lst file
+#
+# Usage:
+#
+# perl xml2lst.pl [lang] < filename.xml > filename.lst
+#
+# author Ivan Pascal
+
+if (@ARGV) {
+   $lang = shift @ARGV;
+} else {
+   $lang = '';
+}
+
+$doc = new_document( 0, '');
+parse('', $doc);
+
+($reg)   = node_by_name($doc, '/xkbConfigRegistry');
+@models  = node_by_name($reg, 'modelList/model/configItem');
+@layouts = node_by_name($reg, 'layoutList/layout/configItem');
+@options = node_by_name($reg, 'optionList/group/configItem');
+
+print "! model\n";
+for $i (@models) {
+   ($name) = node_by_name($i, 'name');
+    @desc =  node_by_name($i, 'description');
+    $descr = with_attribute(\@desc, 'xml:lang='.$lang);
+    if (! defined $descr) {
+        $descr = with_attribute(\@desc, 'xml:lang=');
+    }
+    printf("  %-15s %s\n", text_child($name), text_child($descr));
+}
+
+print "\n! layout\n";
+for $i (@layouts) {
+   ($name) = node_by_name($i, 'name');
+    @desc =  node_by_name($i, 'description');
+    $descr = with_attribute(\@desc, 'xml:lang='.$lang);
+    if (! defined $descr ) {
+        $descr = with_attribute(\@desc, 'xml:lang=');
+    }
+    printf("  %-15s %s\n", text_child($name), text_child($descr));
+}
+
+print "\n! variant\n";
+for $l (@layouts) {
+   ($lname) = node_by_name($l, 'name');
+    @variants = node_by_name($l, '../variantList/variant/configItem');
+    for $v (@variants) {
+      ($name) = node_by_name($v, 'name');
+       @desc  = node_by_name($v, 'description');
+       $descr = with_attribute(\@desc, 'xml:lang='.$lang);
+       if (! defined $descr) {
+           $descr = with_attribute(\@desc, 'xml:lang=');
+       }
+       printf("  %-15s %s: %s\n",
+               text_child($name), text_child($lname), text_child($descr));
+    }
+}
+
+print "\n! options\n";
+for $g (@options) {
+   ($name) = node_by_name($g, 'name');
+    @desc =  node_by_name($g, 'description');
+    $descr = with_attribute(\@desc, 'xml:lang='.$lang);
+    if (! defined $descr) {
+        $descr = with_attribute(\@desc, 'xml:lang=');
+    }
+    printf("  %-20s %s\n", text_child($name), text_child($descr));
+
+    @opts = node_by_name($g, '../option/configItem');
+    for $o (@opts) {
+      ($name) = node_by_name($o, 'name');
+       @desc  = node_by_name($o, 'description');
+       $descr = with_attribute(\@desc, 'xml:lang='.$lang);
+       if (! defined $descr) {
+           $descr = with_attribute(\@desc, 'xml:lang=');
+       }
+       printf("  %-20s %s\n",
+               text_child($name), text_child($descr));
+    }
+}
+
+sub with_attribute {
+    local ($nodelist, $attrexpr) = @_;
+    local ($attr, $value) = split (/=/, $attrexpr);
+    local ($node, $attrvalue);
+    if (defined $value && $value ne '') {
+        $value =~ s/"//g;
+        foreach $node (@{$nodelist}) {
+           $attrvalue = node_attribute($node, $attr); 
+           if (defined $attrvalue && $attrvalue eq $value) {
+               return $node;
+           }
+        }
+    } else {
+        foreach $node (@{$nodelist}) {
+           if (! defined node_attribute($node, $attr)) {
+               return $node;
+           }
+        }
+    }
+    undef;
+}
+
+# Subroutines
+
+sub parse {
+   local $intag = 0;
+   my (@node_stack, $parent);
+   $parent = @_[1];
+   local ($tag, $text);
+
+   while (<>) {
+      chomp;
+      @str = split /([<>])/;
+      shift @str if ($str[0] eq '' || $str[0] =~ /^[ \t]*$/);
+
+      while (scalar @str) {
+         $token = shift @str;
+         if ($token eq '<') {
+            $intag = 1;
+            if (defined $text) {
+               add_text_node($parent, $text);
+               undef $text;
+            }
+         } elsif ($token eq '>') {
+            $intag = 0;
+            if ($tag =~ /^\/(.*)/) { # close tag
+               $parent = pop @node_stack;
+            } elsif ($tag =~ /^([^\/]*)\/$/) {
+               empty_tag($parent, $1);
+            } else {
+               if (defined ($node = open_tag($parent, $tag))) {
+                  push @node_stack, $parent;
+                  $parent = $node;
+               }
+            }
+            undef $tag;
+         } else {
+            if ($intag == 1) {
+               if (defined $tag) {
+                  $tag .= ' '. $token;
+               } else {
+                  $tag = $token;
+               }
+            } else {
+               if (defined $text) {
+                  $text .= "\n" . $token;
+               } else {
+                  $text = $token;
+               }
+            }
+         }
+      }
+   }
+}
+
+sub new_document {
+   $doc = new_node( 0, '', 'DOCUMENT');
+   $doc->{CHILDREN} = [];
+   return $doc;
+}
+
+sub new_node {
+  local ($parent_node, $tag, $type) = @_;
+
+  my %node;
+  $node{PARENT} = $parent_node;
+  $node{TYPE} = $type;
+
+  if ($type eq 'COMMENT' || $type eq 'TEXT') {
+     $node{TEXT} = $tag;
+     $node{NAME} = $type;
+     return \%node;
+  }
+
+  local ($tname, $attr) = split(' ', $tag, 2);
+  $node{NAME} = $tname;
+
+  if (defined $attr && $attr ne '') {
+     my %attr_table;
+     local @attr_list = split ( /"/, $attr);
+     local ($name, $value);
+     while (scalar @attr_list) {
+        $name = shift @attr_list;
+        $name =~ s/[ =]//g;
+        next if ($name eq '');
+        $value =  shift @attr_list;
+        $attr_table{$name} =$value;
+     }
+     $node{ATTRIBUTES} = \%attr_table;
+  }
+  return \%node;
+}
+
+sub add_node {
+  local ($parent_node, $node) = @_;
+  push @{$parent_node->{CHILDREN}}, $node;
+
+  local $tname = $node->{NAME};
+  if (defined $parent_node->{$tname}) {
+      push @{$parent_node->{$tname}}, $node
+  } else {
+      $parent_node->{$tname} = [ $node ];
+  }
+}
+
+sub empty_tag {
+   local ($parent_node, $tag) = @_;
+   local $node = new_node($parent_node, $tag, 'EMPTY');
+   add_node($parent_node, $node);
+}
+
+sub open_tag {
+   local ($parent_node, $tag) = @_;
+   local $node;
+
+   if ($tag =~ /^\?.*/ || $tag =~ /^\!.*/) {
+      $node = new_node($parent_node, $tag, 'COMMENT');
+      add_node($parent_node, $node);
+      undef; return;
+   } else {
+      $node = new_node($parent_node, $tag, 'NODE');
+      $node->{CHILDREN} = [];
+      add_node($parent_node, $node);
+      return $node;
+   }
+}
+
+sub add_text_node {
+   local ($parent_node, $text) = @_;
+   local $node = new_node($parent_node, $text, 'TEXT');
+   add_node($parent_node, $node);
+}
+
+sub node_by_name {
+   local ($node, $name) = @_;
+   local ($tagname, $path) = split(/\//, $name, 2);
+
+   my @nodelist;
+
+   if ($tagname eq '') {
+      while ($node->{PARENT} != 0) {
+         $node = $node->{PARENT};
+      }
+      sublist_by_name($node, $path, \@nodelist);
+   } else {
+      sublist_by_name($node, $name, \@nodelist);
+   }
+   return @nodelist;
+}
+
+sub sublist_by_name {
+   local ($node, $name, $res) = @_;
+   local ($tagname, $path) = split(/\//, $name, 2);
+
+   if (! defined $path) {
+       push @{$res}, (@{$node->{$tagname}});
+       return;
+   }
+
+   if ($tagname eq '..' && $node->{PARENT} != 0) {
+      $node = $node->{PARENT};
+      sublist_by_name($node, $path, $res);
+   } else {
+      local $n;
+      for $n (@{$node->{$tagname}}) {
+         sublist_by_name($n, $path, $res);
+      }
+   }
+}
+
+sub node_attribute {
+    local $node = @_[0];
+    if (defined $node->{ATTRIBUTES}) {
+       return $node->{ATTRIBUTES}{@_[1]};
+    }
+    undef;
+}
+
+sub text_child {
+    local ($node) = @_;
+    local ($child) = node_by_name($node, 'TEXT');
+    return $child->{TEXT};
+}
diff -ruN /opt/SUNWut.orig/lib/xkb/symbols/lt_a /opt/SUNWut/lib/xkb/symbols/lt_a
--- /opt/SUNWut.orig/lib/xkb/symbols/lt_a	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/symbols/lt_a	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,101 @@
+// $XConsortium: lt /main/3 1997/12/18 12:40:12 rch $
+
+partial alphanumeric_keys modifier_keys 
+xkb_symbols "basic" {
+
+    // Describes the differences between a very simple en_US
+    // keyboard and a very simple Lithuanian "azerty" keyboard
+
+    name[Group1]= "Lithuanian";
+
+    key	<TLDE> {[], [		grave,		asciitilde	]};
+    key <AE01> {[		exclam,		1		]};
+    key <AE02> {[               quotedbl,       2               ],
+                [		at				]};
+    key <AE03> {[		slash,		3		],
+                [		numbersign			]};
+    key <AE04> {[		semicolon,	4		],
+		[		dollar				]};
+    key <AE05> {[		colon,		5		],
+                [		percent				]};
+    key <AE06> {[		comma,		6		],
+                [		asciicircum			]};
+    key <AE07> {[		period,		7		],
+		[		ampersand			]};
+    key <AE08> {[		question,	8		],
+		[		asterisk			]};
+    key <AE09> {[		parenleft,	9		]};
+    key <AE10> {[		parenright,	0		]};
+    key <AE11> {[		underscore,	minus		],
+		[		minus,		underscore	]};
+    key <AE12> {[		plus,		equal		],
+		[		equal,		plus		]};
+    key	<AD01> {[		Aogonek,	aogonek		],
+		[		q,		Q		]};
+    key	<AD02> {[		zcaron,		Zcaron		],
+		[		w,		W		]};
+    key	<AD11> {[		iogonek,	Iogonek		],
+		[		bracketleft,	braceleft	]};
+    key	<AD12> {[ leftdoublequotemark,	doublelowquotemark	],
+		[		bracketright,	braceright	]};
+    key	<AC10> {[		uogonek,	Uogonek		],
+		[		semicolon,	colon		]};
+    key	<AC11> {[		eabovedot,	Eabovedot	],
+		[		apostrophe,	quotedbl	]};
+    key	<AB02> {[		umacron,	Umacron		],
+		[		x,		X		]};
+    key	<AB08> {[		ccaron,		Ccaron		],
+		[		comma,		less		]};
+    key	<AB09> {[		scaron,		Scaron		],
+		[		period,		greater		]};
+    key	<AB10> {[		eogonek,	Eogonek		],
+		[		slash,		question	]};
+
+    // End alphanumeric section
+    
+    // Begin modifier mappings 
+
+    modifier_map Shift  { Shift_L };
+    modifier_map Lock   { Caps_Lock, ISO_Lock };
+    modifier_map Control{ Control_L };
+    modifier_map Mod3   { Mode_switch };
+};
+
+xkb_symbols "generic101" {
+    include "lt(basic)"
+};
+
+xkb_symbols "pc101" {
+    include "lt(generic101)"
+};
+
+default
+xkb_symbols "pc102" {
+    include "lt(pc101)"
+    include "lt(left_switch)"
+};
+
+partial alphanumeric_keys 
+xkb_symbols "Sundeadkeys" {
+    include "lt(basic)" // for consistent naming
+};
+
+partial alphanumeric_keys 
+xkb_symbols "sundeadkeys" {
+    include "lt(Sundeadkeys)" // for consistent naming
+};
+
+partial alphanumeric_keys 
+xkb_symbols "nodeadkeys" {
+    include "lt(basic)" // for consistent naming
+};
+
+// definition for the extra key on 102-key keyboards
+// between left Control and Alt
+xkb_symbols "left_switch" {
+    key	<LSGT> {	[     Mode_switch,	 Multi_key 	],
+			[     Mode_switch,	 Multi_key 	]	};
+    // Begin modifier mappings 
+    modifier_map Mod3   { Mode_switch };
+};
+
diff -ruN /opt/SUNWut.orig/lib/xkb/symbols/lt_p /opt/SUNWut/lib/xkb/symbols/lt_p
--- /opt/SUNWut.orig/lib/xkb/symbols/lt_p	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/symbols/lt_p	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,75 @@
+// $XConsortium: lt_p /main/3 1997/12/18 12:40:12 rch $
+//
+// $XFree86: xc/programs/xkbcomp/symbols/lt_p,v 1.2 2000/10/28 00:34:07 dawes Exp $
+
+partial default alphanumeric_keys modifier_keys 
+xkb_symbols "basic" {
+
+    // Describes the differences between a very simple en_US
+    // keyboard and a very simple Lithuanian "programmer's" keyboard
+    // (qwerty layout with Lithuanian letters on the closer ascii ones)
+    // Don't rename this file because it includes 'lt_p'
+    // Extentions:  less/Euro/endash on 102nd key, AltGr+Space is nobreakspace
+    //  Usage:  setxkbmap lt_p
+    // Option	"XkbModel"	"pc105"
+    // Option	"XkbLayout"	"lt_p"
+
+    name[Group1]= "US/ASCII";
+    name[Group2]= "Lithuanian";
+
+    key <RTRN> {	[   Return,  ISO_Next_Group	]};
+    key <AD01> {        [         q,    Q               ],
+			[   umacron,    Umacron		]};
+    key <AD02> {        [         w,    W               ],
+			[ eabovedot,    Eabovedot	]};
+    key <AD03> {        [         e,    E               ],
+			[   eogonek,    Eogonek		]};
+    key <AD07> {        [         u,    U               ],
+			[   uogonek,	Uogonek		]};
+    key <AD08> {        [         i,    I               ],
+			[   iogonek,	Iogonek		]};
+    key <AC01> {        [         a,    A               ],
+			[   aogonek,	Aogonek		]};
+    key <AC02> {        [         s,    S               ],
+			[    scaron,	Scaron		]};
+    key <AC11> {        [ quoteright,   quotedbl        ],
+// this is actually right quote for Lithuanian
+			[ leftdoublequotemark, doublelowquotemark]};
+    key <AB01> {        [         z,    Z               ],
+			[    zcaron,	Zcaron		]};
+    key <AB03> {        [         c,    C               ],
+			[    ccaron,	Ccaron		]};
+    key <SPCE> {	[     space,	space		],
+			[ nobreakspace,	nobreakspace	]};
+
+    key	<LSGT> {	[      less,	EuroSign	],
+			[     endash			]};
+
+    // End alphanumeric section
+    
+    // Begin modifier mappings 
+
+    modifier_map Shift  { Shift_L };
+    modifier_map Lock   { Caps_Lock, ISO_Lock };
+    modifier_map Control{ Control_L };
+    modifier_map Mod3   { Mode_switch };
+};
+
+
+
+partial alphanumeric_keys 
+xkb_symbols "Sundeadkeys" {
+    include "lt_p(basic)" // for consistent naming
+};
+
+partial alphanumeric_keys 
+xkb_symbols "sundeadkeys" {
+    include "lt_p(Sundeadkeys)" // for consistent naming
+};
+
+partial alphanumeric_keys 
+xkb_symbols "nodeadkeys" {
+    include "lt_p(basic)" // for consistent naming
+};
+
+
diff -ruN /opt/SUNWut.orig/lib/xkb/symbols/mn /opt/SUNWut/lib/xkb/symbols/mn
--- /opt/SUNWut.orig/lib/xkb/symbols/mn	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/symbols/mn	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,253 @@
+// Mongolian standard keyboard
+// Author Sanlig Badral <badral@chinggis.com>
+// 2002/12/7 Version 1.0
+
+// $XFree86: xc/programs/xkbcomp/symbols/mn,v 1.1 2003/01/04 02:57:14 dawes Exp $
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+// Describes the differences between a very simple en_US keyboard
+// and a very simple Mongolian (cyrillic) keyboard
+
+  name[Group1]= "Latin";
+  name[Group2]= "Mongolian";
+
+  key.type = "THREE_LEVEL";
+
+  key <TLDE> {[ quoteleft, 	  asciitilde,        	degree              	],
+              [ equal,       	  plus,  		degree              	]};
+  key <AE01> {[ 1,                exclam,            	multiply            	],
+              [ 1,                numerosign,        	multiply            	]};
+  key <AE02> {[ 2,                at,                   division            	],
+              [ 2,                minus,              	division              	]};
+  key <AE03> {[ 3,                numbersign,  		plusminus        	],
+              [ 3,                quotedbl,        	plusminus      		]};
+  key <AE04> {[ 4,                dollar,               notsign             	],
+              [ 4,                0x010020ae,  		notsign              	]};
+  key <AE05> {[ 5,                percent,          	NoSymbol       		],
+              [ 5,                colon,		NoSymbol       		]};
+  key <AE06> {[ 6,                asciicircum,    	notequal          	],
+              [ 6,                period,              	notequal          	]};
+  key <AE07> {[ 7,                ampersand,   		ampersand     		],
+              [ 7,                underscore,          	ampersand    		]};
+  key <AE08> {[ 8,                asterisk,           	asterisk           	],
+              [ 8,                comma,            	asterisk           	]};
+  key <AE09> {[ 9,                parenleft,         	bracketleft       	],
+              [ 9,                percent,          	bracketleft      	]};
+  key <AE10> {[ 0,                parenright,       	bracketright   		],
+              [ 0,                question,       	bracketright   		]};
+  key <AE11> {[ minus,            underscore,    	X                    	],
+              [ Cyrillic_ie,   	  Cyrillic_IE,        	X                    	]};
+  key <AE12> {[ equal,            plus,                 L                      	],
+              [ Cyrillic_shcha,   Cyrillic_SHCHA,   	L       		]};
+
+  key <AD01> {[ q,                 Q,                 	apostrophe           	],
+              [ Cyrillic_ef,       Cyrillic_EF,       	apostrophe           	]};
+  key <AD02> {[ w,                 W,                 	grave                	],
+             [ Cyrillic_tse,      Cyrillic_TSE,       	grave               	]};
+  key <AD03> {[ e,                 E,                	EuroSign            	],
+              [ Cyrillic_u,        Cyrillic_U,        	EuroSign             	]};
+  key <AD04> {[ r,                 R,                 	registered          	],
+              [ Cyrillic_zhe,      Cyrillic_ZHE,      	registered           	]};
+  key <AD05> {[ t,                 T,                 	trademark            	],
+              [ Cyrillic_e,        Cyrillic_E,        	trademark            	]};
+  key <AD06> {[ y,                 Y,                 	yen                 	],
+              [ Cyrillic_en,       Cyrillic_EN,       	yen                  	]};
+  key <AD07> {[ u,                 U,                 	doublelowquotemark   	],
+              [ Cyrillic_ghe,      Cyrillic_GHE,      	doublelowquotemark   	]};
+  key <AD08> {[ i,                 I,                 	leftdoublequotemark  	],
+              [ Cyrillic_sha,      Cyrillic_SHA,      	leftdoublequotemark  	]};
+  // mongolian (ue) straight u
+  key <AD09> {[ o,                 O,                 	rightdoublequotemark 	],
+              [ 0x010004af,        0x010004ae,       	rightdoublequotemark 	]};
+  key <AD10> {[ p,                 P,                 	NoSymbol             	],
+              [ Cyrillic_ze,       Cyrillic_ZE,       	NoSymbol             	]};
+  key <AD11> {[ bracketleft,       braceleft,         	braceleft            	],
+              [ Cyrillic_ka,       Cyrillic_KA,      	braceleft            	]};
+  key <AD12> {[ bracketright,      braceright,        	braceright           	],
+              [ Cyrillic_hardsign, Cyrillic_HARDSIGN, 	braceright           	]};
+
+  key <AC01> {[ a,                 A,                 	mu                   	],
+              [ Cyrillic_shorti,   Cyrillic_SHORTI,   	mu                   	]};
+  key <AC02> {[ s,                 S,                 	sterling             	],
+              [ Cyrillic_yeru,     Cyrillic_YERU,     	sterling             	]};
+  key <AC03> {[ d,                 D,                 	dollar               	],
+              [ Cyrillic_be,       Cyrillic_BE,       	dollar               	]};
+  //oe mongolian (oe) barred o
+  key <AC04> {[ f,                 F,                 	cent                 	],
+              [ 0x010004e9,        0x010004e8,       	rightdoublequotemark 	]};
+  key <AC05> {[ g,                 G,                 	Cyrillic_yeru        	],
+              [ Cyrillic_a,        Cyrillic_A,        	Cyrillic_yeru        	]};
+  key <AC06> {[ h,                 H,                 	Cyrillic_YERU        	],
+              [ Cyrillic_ha,       Cyrillic_HA,       	Cyrillic_YERU        	]};
+  key <AC07> {[ j,                 J,                 	Cyrillic_e           	],
+              [ Cyrillic_er,       Cyrillic_ER,       	Cyrillic_e           	]};
+  key <AC08> {[ k,                 K,                 	Cyrillic_E           	],
+              [ Cyrillic_o,        Cyrillic_O,       	Cyrillic_E           	]};
+  key <AC09> {[ l,                 L,                 	numerosign           	],
+              [ Cyrillic_el,       Cyrillic_EL,       	numerosign           	]};
+  key <AC10> {[ semicolon,         colon,             	section              	],
+              [ Cyrillic_de,       Cyrillic_DE,       	section              	]};
+  key <AC11> {[ quoteright,        quotedbl,          	ellipsis             	],
+              [ Cyrillic_pe,       Cyrillic_PE,       	ellipsis             	]};
+  key <BKSL> {[ backslash,         bar,               	bar                  	],
+              [ exclam,            bar,     		bar                  	]};
+
+  key <LSGT> {[ less,              greater,           	NoSymbol             	],
+              [ parenleft,         parenright,         	NoSymbol             	]};
+  key <AB01> {[ z,                 Z,                 	emdash               	],
+              [ Cyrillic_ya,       Cyrillic_YA,       	emdash               	]};
+  key <AB02> {[ x,                 X,                 	endash               	],
+              [ Cyrillic_che,      Cyrillic_CHE,      	endash               	]};
+  key <AB03> {[ c,                 C,                 	copyright            	],
+              [ Cyrillic_io,       Cyrillic_IO,       	copyright            	]};
+  key <AB04> {[ v,                 V,                 	NoSymbol             	],
+              [ Cyrillic_es,       Cyrillic_ES,       	NoSymbol             	]};
+  key <AB05> {[ b,                 B,                 	NoSymbol             	],
+              [ Cyrillic_em,       Cyrillic_EM,       	NoSymbol             	]};
+  key <AB06> {[ n,                 N,                 	less                 	],
+              [ Cyrillic_i,        Cyrillic_I,        	less                 	]};
+  key <AB07> {[ m,                 M,                 	greater              	],
+              [ Cyrillic_te,       Cyrillic_TE,       	greater              	]};
+  key <AB08> {[ comma,             less,              	guillemotleft        	],
+              [ Cyrillic_softsign, Cyrillic_SOFTSIGN, 	guillemotleft        	]};
+  key <AB09> {[ period,            greater,           	guillemotright       	],
+              [ Cyrillic_ve,       Cyrillic_VE,       	guillemotright       	]};
+  key <AB10> {[ slash,             question,          	backslash            	],
+              [ Cyrillic_yu,       Cyrillic_YU,       	backslash            	]};
+
+  // End alphanumeric section
+
+  key <SPCE> {[ space,             space,             	nobreakspace         	]};
+  key <RALT> {  type="TWO_LEVEL",[ Mode_switch,		Multi_key		]};
+
+  // Begin modifier mappings
+
+  modifier_map Shift  { Shift_L };
+  modifier_map Lock   { Caps_Lock, ISO_Lock };
+  modifier_map Control{ Control_L };
+  modifier_map Mod3   { Mode_switch };
+};
+
+partial alphanumeric_keys
+xkb_symbols "mn(basic)" {
+
+  // Describes the differences between a very simple en_US keyboard
+  // and a very simple mongolian keyboard with publishing
+  // symbols in the third level.
+
+  name[Group1]= "Latin";
+  name[Group2]= "Mongolian";
+
+  key <TLDE> {[ quoteleft, 	  asciitilde        	],
+              [ equal,       	  plus  		]};
+  key <AE01> {[ 1,                exclam            	],
+              [ 1,                numerosign           	]};
+  key <AE02> {[ 2,                at                    ],
+              [ 2,                minus              	]};
+  key <AE03> {[ 3,                numbersign  		],
+              [ 3,                quotedbl        	]};
+  key <AE04> {[ 4,                dollar                ],
+              [ 4,                0x010020ae  		]};
+  key <AE05> {[ 5,                percent          	],
+              [ 5,                colon           	]};
+  key <AE06> {[ 6,                asciicircum    	],
+              [ 6,                period              	]};
+  key <AE07> {[ 7,                ampersand   		],
+              [ 7,                underscore          	]};
+  key <AE08> {[ 8,                asterisk           	],
+              [ 8,                comma            	]};
+  key <AE09> {[ 9,                parenleft         	],
+              [ 9,                percent          	]};
+  key <AE10> {[ 0,                parenright       	],
+              [ 0,                question       	]};
+  key <AE11> {[ minus,            underscore    	],
+              [ Cyrillic_ie,   	  Cyrillic_IE        	]};
+  key <AE12> {[ equal,            plus                  ],
+              [ Cyrillic_shcha,   Cyrillic_SHCHA   	]};
+
+  key <AD01> {[ q,                 Q			],
+              [ Cyrillic_ef,       Cyrillic_EF		]};
+  key <AD02> {[ w,                 W                 	],
+             [ Cyrillic_tse,      Cyrillic_TSE       	]};
+  key <AD03> {[ e,                 E                	],
+              [ Cyrillic_u,        Cyrillic_U        	]};
+  key <AD04> {[ r,                 R                 	],
+              [ Cyrillic_zhe,      Cyrillic_ZHE      	]};
+  key <AD05> {[ t,                 T                 	],
+              [ Cyrillic_e,        Cyrillic_E        	]};
+  key <AD06> {[ y,                 Y                 	],
+              [ Cyrillic_en,       Cyrillic_EN       	]};
+  key <AD07> {[ u,                 U                 	],
+              [ Cyrillic_ghe,      Cyrillic_GHE      	]};
+  key <AD08> {[ i,                 I                 	],
+              [ Cyrillic_sha,      Cyrillic_SHA      	]};
+  // mongolian (ue) straight u
+  key <AD09> {[ o,                 O                 	],
+              [ 0x010004af,        0x010004ae       	]};
+  key <AD10> {[ p,                 P                 	],
+              [ Cyrillic_ze,       Cyrillic_ZE       	]};
+  key <AD11> {[ bracketleft,       braceleft         	],
+              [ Cyrillic_ka,       Cyrillic_KA      	]};
+  key <AD12> {[ bracketright,      braceright        	],
+              [ Cyrillic_hardsign, Cyrillic_HARDSIGN 	]};
+
+  key <AC01> {[ a,                 A                 	],
+              [ Cyrillic_shorti,   Cyrillic_SHORTI   	]};
+  key <AC02> {[ s,                 S                 	],
+              [ Cyrillic_yeru,     Cyrillic_YERU     	]};
+  key <AC03> {[ d,                 D                 	],
+              [ Cyrillic_be,       Cyrillic_BE       	]};
+  //oe mongolian (oe) barred o
+  key <AC04> {[ f,                 F                 	],
+              [ 0x010004e9,        0x010004e8       	]};
+  key <AC05> {[ g,                 G                 	],
+              [ Cyrillic_a,        Cyrillic_A        	]};
+  key <AC06> {[ h,                 H                 	],
+              [ Cyrillic_ha,       Cyrillic_HA       	]};
+  key <AC07> {[ j,                 J                 	],
+              [ Cyrillic_er,       Cyrillic_ER       	]};
+  key <AC08> {[ k,                 K                 	],
+              [ Cyrillic_o,        Cyrillic_O       	]};
+  key <AC09> {[ l,                 L                 	],
+              [ Cyrillic_el,       Cyrillic_EL       	]};
+  key <AC10> {[ semicolon,         colon             	],
+              [ Cyrillic_de,       Cyrillic_DE       	]};
+  key <AC11> {[ quoteright,        quotedbl          	],
+              [ Cyrillic_pe,       Cyrillic_PE       	]};
+  key <BKSL> {[ backslash,         bar               	],
+              [ parenleft,         parenright     	]};
+
+  key <LSGT> {[ less,              greater           	],
+              [ less,              greater           	]};
+  key <AB01> {[ z,                 Z                 	],
+              [ Cyrillic_ya,       Cyrillic_YA       	]};
+  key <AB02> {[ x,                 X                 	],
+              [ Cyrillic_che,      Cyrillic_CHE      	]};
+  key <AB03> {[ c,                 C                 	],
+              [ Cyrillic_io,       Cyrillic_IO       	]};
+  key <AB04> {[ v,                 V                 	],
+              [ Cyrillic_es,       Cyrillic_ES       	]};
+  key <AB05> {[ b,                 B                 	],
+              [ Cyrillic_em,       Cyrillic_EM       	]};
+  key <AB06> {[ n,                 N                 	],
+              [ Cyrillic_i,        Cyrillic_I        	]};
+  key <AB07> {[ m,                 M                 	],
+              [ Cyrillic_te,       Cyrillic_TE       	]};
+  key <AB08> {[ comma,             less              	],
+              [ Cyrillic_softsign, Cyrillic_SOFTSIGN 	]};
+  key <AB09> {[ period,            greater           	],
+              [ Cyrillic_ve,       Cyrillic_VE       	]};
+  key <AB10> {[ slash,             question          	],
+              [ Cyrillic_yu,       Cyrillic_YU       	]};
+
+  key <RALT> {[ Alt_R,             Meta_R              ]};
+
+  // Begin modifier mappings
+
+  modifier_map Shift  { Shift_L };
+  modifier_map Lock   { Caps_Lock, ISO_Lock };
+  modifier_map Control{ Control_L };
+  modifier_map Mod3   { Mode_switch };
+};
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/indicator /opt/SUNWut/lib/xkb/torture/indicator
--- /opt/SUNWut.orig/lib/xkb/torture/indicator	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/indicator	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,68 @@
+// $Xorg: indicator,v 1.3 2000/08/17 19:54:46 cpqbld Exp $
+xkb_compatibility "torture" 
+
+virtual_modifiers NumLock,AltGr;
+
+interpret Any  {
+	action= NoAction();
+};
+
+indicator "Caps Lock" {
+	modifiers= Lock;
+};
+augment indicator "Caps Lock" {
+	allowExplicit= False;
+	modifiers= Control;
+};
+
+indicator "Shift Lock" {
+	allowExplicit= True;
+	modifiers= Control;
+	groups= 1;
+};
+override indicator "Shift Lock" {
+	allowExplicit= False;
+	whichModState= Locked;
+	modifiers= Shift;
+	groups= None;
+};
+
+include "torture/indicator1"
+
+augment indicator "Mod1" {
+	allowExplicit= False;
+	modifiers= Lock;
+};
+override indicator "Mod2" {
+	modifiers= Mod2;
+	controls= None;
+};
+
+indicator "Num Lock" {
+	allowExplicit= False;
+	modifiers= NumLock;
+};
+augment "torture/indicator2"
+
+indicator "Mouse Keys" {
+	allowExplicit= False;
+	groups= All-1;
+	modifiers= Shift+Control;
+	whichModState= Locked;
+};
+override "torture/indicator3"
+
+indicator "StickyKeys" {
+	allowExplicit= True;
+	groups= All-4;
+	modifiers= Mod5;
+	controls= MouseKeys;
+};
+replace indicator "StickyKeys" {
+	controls= StickyKeys;
+};
+augment indicator "StickyKeys" {
+	allowExplicit= False;
+};
+
+
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/indicator1 /opt/SUNWut/lib/xkb/torture/indicator1
--- /opt/SUNWut.orig/lib/xkb/torture/indicator1	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/indicator1	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,12 @@
+// $Xorg: indicator1,v 1.3 2000/08/17 19:54:47 cpqbld Exp $
+xkb_compatibility "torture1" 
+
+indicator "Mod1" {
+	modifiers= Mod1;
+};
+indicator "Mod2" {
+	allowExplicit= False;
+	modifiers= Lock;
+	controls= MouseKeys;
+};
+
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/indicator2 /opt/SUNWut/lib/xkb/torture/indicator2
--- /opt/SUNWut.orig/lib/xkb/torture/indicator2	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/indicator2	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,7 @@
+// $Xorg: indicator2,v 1.3 2000/08/17 19:54:47 cpqbld Exp $
+xkb_compatibility "torture2" 
+
+indicator "Num Lock" {
+	allowExplicit= True;
+	modifiers= Control;
+};
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/indicator3 /opt/SUNWut/lib/xkb/torture/indicator3
--- /opt/SUNWut.orig/lib/xkb/torture/indicator3	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/indicator3	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,8 @@
+// $Xorg: indicator3,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+xkb_compatibility "torture3" 
+
+indicator "Mouse Keys" {
+	groups= None;
+	modifiers= None;
+	controls= MouseKeys;
+};
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/mod_compat /opt/SUNWut/lib/xkb/torture/mod_compat
--- /opt/SUNWut.orig/lib/xkb/torture/mod_compat	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/mod_compat	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,35 @@
+// $Xorg: mod_compat,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+xkb_compatibility "torture" 
+
+virtual_modifiers NumLock,AltGr;
+
+interpret Any  {
+	action= NoAction();
+};
+
+modifier AltGr { groups= 0x7e; };
+augment modifier AltGr { modifiers= Mod1; };
+augment modifier AltGr  { groups= 0xfd; };
+override modifier AltGr  { groups= 0xfb; };
+
+modifier NumLock { modifiers= Mod2; };
+augment modifier NumLock { modifiers= Mod1; };
+
+include "torture/mod_compat1"
+augment modifier Shift { groups= 0x01; };
+augment modifier Shift { modifiers= Lock; };
+
+override modifier Lock { groups= 0x02; };
+override modifier Lock { modifiers= Control; };
+
+modifier Control { mods= None; };
+modifier Mod1 { mods= Mod1; groups= 0x08; };
+augment "torture/mod_compat2"
+
+modifier Mod2 { mods= None; groups= 0x10; };
+modifier Mod3 { mods= Mod3; groups= 0x20; };
+override "torture/mod_compat3"
+
+modifier Mod4 { mods= None; groups= 0x40; };
+modifier Mod5 { mods= Mod5; groups= 0x80; };
+include "torture/mod_compat4"
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/mod_compat1 /opt/SUNWut/lib/xkb/torture/mod_compat1
--- /opt/SUNWut.orig/lib/xkb/torture/mod_compat1	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/mod_compat1	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,5 @@
+// $Xorg: mod_compat1,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+xkb_compatibility "torture1" 
+
+modifier Shift { mods= Shift; };
+modifier Lock { mods= Lock; };
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/mod_compat2 /opt/SUNWut/lib/xkb/torture/mod_compat2
--- /opt/SUNWut.orig/lib/xkb/torture/mod_compat2	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/mod_compat2	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,5 @@
+// $Xorg: mod_compat2,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+xkb_compatibility "torture2" 
+
+modifier Control { groups= 0x4; mods= Mod1; };
+replace modifier Mod1 { mods= None; groups= 0x40; };
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/mod_compat3 /opt/SUNWut/lib/xkb/torture/mod_compat3
--- /opt/SUNWut.orig/lib/xkb/torture/mod_compat3	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/mod_compat3	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,5 @@
+// $Xorg: mod_compat3,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+xkb_compatibility "torture3" 
+
+modifier Mod2 { mods= Mod3; };
+replace modifier Mod3 { mods= None; groups= 0x01; };
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/mod_compat4 /opt/SUNWut/lib/xkb/torture/mod_compat4
--- /opt/SUNWut.orig/lib/xkb/torture/mod_compat4	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/mod_compat4	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,5 @@
+// $Xorg: mod_compat4,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+xkb_compatibility "torture4" 
+
+modifier Mod4 { mods= Mod5; };
+replace modifier Mod5 { mods= None; groups= 0x01; };
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/sym_interp /opt/SUNWut/lib/xkb/torture/sym_interp
--- /opt/SUNWut.orig/lib/xkb/torture/sym_interp	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/sym_interp	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,62 @@
+// $Xorg: sym_interp,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+xkb_compatibility "torture" 
+
+virtual_modifiers NumLock,AltGr;
+
+interpret Shift_L {
+	action= SetMods(mods=Shift);
+};
+augment interpret Shift_L {
+	repeat= True;
+	action= NoAction();
+};
+
+interpret Shift_R {
+	action= NoAction();
+};
+override interpret Shift_R {
+	repeat= True;
+	action= SetMods(mods=Shift);
+};
+
+include "torture/sym_interp1"
+
+augment interpret Control_L {
+	locking= True;
+	action= NoAction();
+};
+override interpret Control_R {
+	locking= False;
+	action= SetMods(mods=Control);
+};
+
+
+interpret ISO_Next_Group {
+	repeat= False;
+	action= LockGroup(group=+1);
+};
+augment "torture/sym_interp2"
+
+interpret ISO_Prev_Group {
+	action= NoAction();
+};
+override "torture/sym_interp3"
+
+interpret Num_Lock {
+	repeat= True;
+	action= NoAction();
+};
+replace interpret Num_Lock {
+	action= LockMods(mods=NumLock);
+};
+augment interpret Num_Lock {
+	virtualMod= NumLock;
+};
+
+interpret Mode_switch {
+	locking= True;
+	virtualMod= NumLock;
+	action= NoAction();
+};
+replace "torture/sym_interp4"
+
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/sym_interp1 /opt/SUNWut/lib/xkb/torture/sym_interp1
--- /opt/SUNWut.orig/lib/xkb/torture/sym_interp1	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/sym_interp1	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,12 @@
+// $Xorg: sym_interp1,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+xkb_compatibility "torture1" 
+
+interpret Control_L {
+	locking= False;
+	action= SetMods(mods=Control);
+};
+
+interpret Control_R {
+	locking= True;
+	action= NoAction();
+};
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/sym_interp2 /opt/SUNWut/lib/xkb/torture/sym_interp2
--- /opt/SUNWut.orig/lib/xkb/torture/sym_interp2	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/sym_interp2	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,7 @@
+// $Xorg: sym_interp2,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+xkb_compatibility "torture2" 
+
+interpret ISO_Next_Group {
+	repeat= True;
+	action= NoAction();
+};
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/sym_interp3 /opt/SUNWut/lib/xkb/torture/sym_interp3
--- /opt/SUNWut.orig/lib/xkb/torture/sym_interp3	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/sym_interp3	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,6 @@
+// $Xorg: sym_interp3,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+xkb_compatibility "torture3" 
+
+interpret ISO_Prev_Group {
+	action= LockGroup(group=-1);
+};
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/sym_interp4 /opt/SUNWut/lib/xkb/torture/sym_interp4
--- /opt/SUNWut.orig/lib/xkb/torture/sym_interp4	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/sym_interp4	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,9 @@
+// $Xorg: sym_interp4,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+xkb_compatibility "torture4" 
+
+virtual_modifiers NumLock,AltGr;
+
+interpret Mode_switch {
+	virtualMod= AltGr;
+	action= SetGroup(group=2);
+};
diff -ruN /opt/SUNWut.orig/lib/xkb/torture/types /opt/SUNWut/lib/xkb/torture/types
--- /opt/SUNWut.orig/lib/xkb/torture/types	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/torture/types	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,19 @@
+// $XConsortium $
+xkb_types "Common"
+
+virtual_modifiers Alt;
+
+type "TEST" {
+    modifiers = Shift;
+    map[Shift] = Level2;
+    level_name[Level1]= "Any";
+    level_name[Level2]= "Shift";
+};
+
+augment type "TEST" {
+    modifiers = Alt;
+    map[Alt] = Level2;
+    level_name[level2]= "Alt";
+};
+
+
diff -ruN /opt/SUNWut.orig/lib/xkb/types/cancel /opt/SUNWut/lib/xkb/types/cancel
--- /opt/SUNWut.orig/lib/xkb/types/cancel	1970-01-01 01:00:00.000000000 +0100
+++ /opt/SUNWut/lib/xkb/types/cancel	2008-10-29 07:25:15.000000000 +0100
@@ -0,0 +1,12 @@
+// $Xorg: cancel,v 1.3 2000/08/17 19:54:48 cpqbld Exp $
+partial default xkb_types "Shift_Cancels_Caps" {
+
+override type "TWO_LEVEL" {
+    modifiers = Shift+Lock;
+    map[Shift] = Level2;
+    preserve[Lock]= Lock;
+    level_name[Level1] = "Base";
+    level_name[Level2] = "Shift";
+};
+
+};
diff -ruN /opt/SUNWut.orig/lib/xmgr/gdm/add-dpy /opt/SUNWut/lib/xmgr/gdm/add-dpy
--- /opt/SUNWut.orig/lib/xmgr/gdm/add-dpy	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/lib/xmgr/gdm/add-dpy	2008-10-30 10:22:52.000000000 +0100
@@ -64,7 +64,7 @@
 xcdesc="DisplayManager.*_%d.exportList: SUN_SUNRAY_TOKEN=$token CORONA_TOKEN=$token"
 if [ "$type" = normal ]
 then
-	xsdesc=":%d SunRay local /usr/X11R6/bin/Xnewt :%d"
+	xsdesc=":%d SunRay local /opt/SUNWut/lib/Xnewt :%d"
 else
 	xsdesc="# :%d RESERVED"
 fi
diff -ruN /opt/SUNWut.orig/sbin/utadm /opt/SUNWut/sbin/utadm
--- /opt/SUNWut.orig/sbin/utadm	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/sbin/utadm	2008-10-30 10:22:52.000000000 +0100
@@ -5,7 +5,6 @@
 # Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-
 #
 #  Configuring SunRay interfaces:
 #  ------------------------------
@@ -219,17 +218,28 @@
 		else
 		  NETWORKS="${ETC_OPT_UT}/net/networks";
 		fi
-		DHCPCONFIG="/etc/dhcpd.conf"
+		if [[ -f "/etc/dhcp3/dhcpd.conf" ]]; then
+			DHCPCONFIG="/etc/dhcp3/dhcpd.conf"
+		else
+			DHCPCONFIG="/etc/dhcpd.conf"
+		fi
 		GREP=grep	# XXX need to figure out which <===
-		INIT_DHCP="/etc/init.d/dhcpd";
+		if [[ -f "/etc/init.d/dhcp3-server" ]]; then
+			INIT_DHCP="/etc/init.d/dhcp3-server"
+		else
+			INIT_DHCP="/etc/init.d/dhcpd"
+		fi
 		if [[ -d "/etc/sysconfig/network-scripts" ]] ; then
 		  IFCONFIG_SCRIPT="/etc/sysconfig/network-scripts/ifcfg-"
 		  IFCONFIG_BOOT="ONBOOT=yes"
 		  BOOTPROTO=none
-		else
-		  IFCONFIG_SCRIPT="/etc/sysconfig/network/ifcfg-"
-		  IFCONFIG_BOOT="STARTMODE=onboot"
+		elif [[ -f "/etc/network/interfaces" ]] ; then
+		  IFCONFIG_SCRIPT="/etc/network/interfaces"
 		  BOOTPROTO=static
+		else
+                  IFCONFIG_SCRIPT="/etc/sysconfig/network/ifcfg-"
+                  IFCONFIG_BOOT="STARTMODE=onboot"
+                  BOOTPROTO=static
 		fi
 		IFCFG_INET="";
 
@@ -991,6 +1001,10 @@
   # get the intf's symbolic name
   INTF_NAME=`getent hosts ${INTF_IPA} | awk '{print $2}'`;
   if [ -z "${INTF_NAME}" ]; then
+    # Work around for bug in Ubuntu getent Launchpad BugID 28585
+    INTF_NAME=`getent hosts | grep -w ${INTF_IPA} | awk '{print $2}'`
+  fi
+  if [ -z "${INTF_NAME}" ]; then
     print -u2 "Error: host name for ${INTF_IPA} not found"
     exit 1;
   fi
@@ -1145,8 +1159,40 @@
     ifconfig ${INTF} "${IPADDR}" up netmask "${NETMASK}" broadcast ${BROADCAST};
     RC=$?
     if [[ ${RC} -eq 0 ]] ; then
-      rm -f ${TMPDIR}/tmpfile.$$;
-      cat > ${TMPDIR}/tmpfile.$$ <<-!
+      . /etc/lsb-release 2 > /dev/null
+      if [[ "$DISTRIB_ID" = "Ubuntu" ]] || [[ "$DISTRIB_ID" = "Debian" ]]; then
+        rm -f ${TMPDIR}/tmpfile.$$;
+        cat > ${TMPDIR}/tmpfile.$$ <<-!
+# SUNRAY ADD
+auto ${INTF}
+iface ${INTF} inet ${BOOTPROTO}
+address ${IPADDR}
+netmask ${NETMASK}
+# SUNRAY ADD
+!
+        awk ' {
+          if (NF == "0") print $0;
+          else if ($1 == "allow") {print $0; param="false";}
+          else if ($1 == "mapping") {print $0; param="false";}
+          else if ($1 == "auto")
+            {if ($2 == Intf) print "# SUNRAY DEL "$0;
+             else print $0;
+             param="false";}
+          else if ($1 == "iface")
+            {if ($2 == Intf) {print "# SUNRAY DEL "$0; param="true";}
+             else {print $0; param="false";}}
+          else if (param == "true") print "# SUNRAY DEL "$0;
+          else {print $0; param="false";}
+          }' \
+          Intf=${INTF} \
+          ${IFCONFIG_SCRIPT} > ${IFCONFIG_SCRIPT}.$$
+
+        cat ${IFCONFIG_SCRIPT}.$$ ${TMPDIR}/tmpfile.$$ > ${IFCONFIG_SCRIPT}
+        rm -f ${TMPDIR}/tmpfile.$$ ${IFCONFIG_SCRIPT}.$$
+
+      else
+        rm -f ${TMPDIR}/tmpfile.$$;
+        cat > ${TMPDIR}/tmpfile.$$ <<-!
 DEVICE=${INTF} # SUNRAY ADD 
 USERCTL=no # SUNRAY ADD 
 ${IFCONFIG_BOOT} # SUNRAY ADD 
@@ -1156,17 +1202,18 @@
 NETMASK=${NETMASK} # SUNRAY ADD
 IPADDR=${IPADDR} # SUNRAY ADD
 !
-      if [[ -f ${IFCONFIG_SCRIPT}${INTF} ]] ; then
-	sed -e "/^"HWADDR"/!s/^/# SUNRAY DEL /" "${IFCONFIG_SCRIPT}${INTF}" > ${IFCONFIG_SCRIPT}${INTF}.$$
-        #
-        # change ether config so it starts on boot
-	
-	rm -f ${IFCONFIG_SCRIPT}${INTF}
-	cat ${IFCONFIG_SCRIPT}${INTF}.$$ ${TMPDIR}/tmpfile.$$ > ${IFCONFIG_SCRIPT}${INTF}
-	rm -f ${IFCONFIG_SCRIPT}${INTF}.$$ ${TMPDIR}/tmpfile.$$
-      else
-        mv -f ${TMPDIR}/tmpfile.$$ ${IFCONFIG_SCRIPT}${INTF};
-      fi
+         if [[ -f ${IFCONFIG_SCRIPT}${INTF} ]] ; then
+           sed -e "/.*/s/^/# SUNRAY DEL /" "${IFCONFIG_SCRIPT}${INTF}" > ${IFCONFIG_SCRIPT}${INTF}.$$
+           #
+           # change ether config so it starts on boot
+  	
+           rm -f ${IFCONFIG_SCRIPT}${INTF}
+ 	  cat ${IFCONFIG_SCRIPT}${INTF}.$$ ${TMPDIR}/tmpfile.$$ > ${IFCONFIG_SCRIPT}${INTF}
+ 	  rm -f ${IFCONFIG_SCRIPT}${INTF}.$$ ${TMPDIR}/tmpfile.$$
+         else
+           mv -f ${TMPDIR}/tmpfile.$$ ${IFCONFIG_SCRIPT}${INTF};
+         fi
+       fi
     fi
     print "### finished install of \"${INTF}\" interface";
     return $RC
@@ -1187,6 +1234,38 @@
       if [[ ! -s ${IFCONFIG_SCRIPT}${INTF} ]]; then
 	rm -f ${IFCONFIG_SCRIPT}${INTF}
       fi
+    elif [[ -f ${IFCONFIG_SCRIPT} ]] ; then
+      cp ${IFCONFIG_SCRIPT} ${IFCONFIG_SCRIPT}.$$
+      awk ' {
+       if (($2 == "SUNRAY" ) && ($3 == "DEL"))
+         {if (($4 == "auto") && ($5 == Intf))
+            {output="";
+             for (field=4; field<=NF; ++field) {output=output$field" ";} 
+             print output;
+             param="false";}
+          else if (($4 == "iface") && ($5 == Intf ))
+            {output=""; for (field=4; field<=NF; ++field) {output=output$field" ";}
+             print output;
+             param="true";}
+          else if (param == "true")
+            {output=""; for (field=4; field<=NF; ++field) {output=output$field" ";}
+             print output;
+             param="true";}
+          else {print $0; param="false";}
+         }
+       else if (($2 == "SUNRAY") && ($3 == "ADD"))
+         {if (comment_count == "1") {if (remove != "true") {print $0;};comment_count = "2";remove = "false";}
+          else if (comment_count == "2") {comment_count = "1";remove = "possible"}
+          else {comment_count = "1"; remove="possible";}
+         }
+       else if (remove == "possible")
+         if (($1 == "auto") && ($2 == Intf)) {remove="true";}
+         else {remove="false";print "# SUNRAY ADD"; print $0;}
+       else if (remove != "true") {print $0; param="false";}
+      }' \
+      Intf=${INTF} \
+      ${IFCONFIG_SCRIPT}.$$ > ${IFCONFIG_SCRIPT}
+      rm -f ${IFCONFIG_SCRIPT}.$$
     else
       print -u2 "Warning: unable to update ${IFCONFIG_SCRIPT}${INTF}";
     fi
@@ -1826,7 +1905,6 @@
     ${UTDHCPSERVICE} disable > /dev/null 2>&1
 }
 
-
 #
 # adds the SR network configuration for both interface and subnetwork only.
 #
@@ -3164,6 +3242,8 @@
 		lease_file=/var/lib/dhcpd/dhcpd.leases
 	elif [ -f /var/lib/dhcp/db/dhcpd.leases ]; then
                 lease_file=/var/lib/dhcp/db/dhcpd.leases
+	elif [ -f /var/lib/dhcp3/dhcpd.leases ]; then
+		lease_file=/var/lib/dhcp3/dhcpd.leases
         fi
 
 	rm -f $tmp_leases
diff -ruN /opt/SUNWut.orig/sbin/utconfig /opt/SUNWut/sbin/utconfig
--- /opt/SUNWut.orig/sbin/utconfig	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/sbin/utconfig	2008-10-30 10:22:52.000000000 +0100
@@ -240,7 +240,12 @@
     # Define Linux specific LDAP variables
     # Determine which LDAP client package is installed
     #
-    LCL_PACKAGE="$(rpm -qf /usr/bin/ldapadd 2>/dev/null)"
+    . /etc/lsb-release
+    if [[ "$DISTRIB_ID" = "Ubuntu" ]] || [[ "$DISTRIB_ID" = "Debian" ]]; then
+	LCL_PACKAGE="$(dpkg-query -S /usr/bin/ldapadd | awk -F: '{print $1}' 2>/dev/null)"
+    else
+        LCL_PACKAGE="$(rpm -qf /usr/bin/ldapadd 2>/dev/null)"
+    fi
 
     # Define Linux versions of LDAP client commands
     #
@@ -255,7 +260,11 @@
     # Define Linux specific filenames
     #
     ETCSERVICES="/etc/services"
-    DHCPCONFIG="/etc/dhcpd.conf"
+    if [[ -f "/etc/dhcp3/dhcpd.conf" ]]; then
+         DHCPCONFIG="/etc/dhcp3/dhcpd.conf"
+    else
+         DHCPCONFIG="/etc/dhcpd.conf"
+    fi
     ;;
 
   *)
diff -ruN /opt/SUNWut.orig/sbin/utfwadm /opt/SUNWut/sbin/utfwadm
--- /opt/SUNWut.orig/sbin/utfwadm	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/sbin/utfwadm	2008-10-30 10:22:52.000000000 +0100
@@ -144,7 +144,7 @@
 function GetVersion  {
     FW_FILE_INPUT=${1}
     # extract the version string and make file names
-    FW_TYPE=$(od -t x1 $FW_FILE_INPUT | head -1 | awk '{ print sprintf("%s%s%s%s", $2,$3,$4,$5)}') 2> /dev/null
+    FW_TYPE=$(od -t x1 $FW_FILE_INPUT | head -n 1 | awk '{ print sprintf("%s%s%s%s", $2,$3,$4,$5)}') 2> /dev/null
     case $FW_TYPE in
 	4badbeef | 8badbeef)	
             $UTWHAT $FW_FILE_INPUT > ${TMPDIR}/fw_strings.$$
diff -ruN /opt/SUNWut.orig/sbin/utinstall /opt/SUNWut/sbin/utinstall
--- /opt/SUNWut.orig/sbin/utinstall	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/sbin/utinstall	2008-10-30 10:22:52.000000000 +0100
@@ -241,7 +241,7 @@
 	 fi
 	 if [ "$G_OS" = "Linux" ]; then
 	    # Determine GDM Install Path
-	    GDM_PATH=`rpm -ql "gdm" | grep "Init/Default" `
+	    GDM_PATH=`dpkg -L "gdm" | grep "Init/Default" `
 	    if [ $? != 0 ]; then
         	print -u2 "Cannot determine GDM install directory"
 		break;
diff -ruN /opt/SUNWut.orig/sbin/utreplica /opt/SUNWut/sbin/utreplica
--- /opt/SUNWut.orig/sbin/utreplica	2008-10-30 10:20:00.000000000 +0100
+++ /opt/SUNWut/sbin/utreplica	2008-10-30 10:22:52.000000000 +0100
@@ -78,7 +78,13 @@
                         ETCSERVICES=/etc/inet/services
 			LOGFILE="/var/adm/log/$PROGRAM_ID.${TIMESTAMP}.log"
                         ;;
-                Linux)  LCL_PACKAGE="$(rpm -qf /usr/bin/ldapadd 2>/dev/null)"
+                Linux)  . /etc/lsb-release
+			if [[ "$DISTRIB_ID" = "Ubuntu" ]] || [[ "$DISTRIB_ID" = "Debian" ]]; then
+				LCL_PACKAGE="$(dpkg-query -S /usr/bin/ldapadd | awk -F: '{print $1}' 2>/dev/null)"
+			else
+				LCL_PACKAGE="$(rpm -qf /usr/bin/ldapadd 2>/dev/null)"
+			fi
+ 
                         LDAPSEARCH="/usr/bin/ldapsearch -x -LLL "
 			GREP=/bin/grep
                         ETCSERVICES=/etc/services
@@ -1130,7 +1136,7 @@
 		    Fatal "$server is already configured as a primary server."
 		elif print $remote_rep | egrep "$SECONDARY_ID"\
 			>/dev/null 2>&1; then
-		    typeset -l tmp_host=`print "$remote_rep" | tail -1`
+		    typeset -l tmp_host=`print "$remote_rep" | tail -n 1`
 		    if [ "${tmp_host}" != $HOSTNAME ]; then
 		    	Fatal "$server is already configured as a secondary server\n"\
 			   "with a different primary."
@@ -1169,7 +1175,7 @@
   then
 	# only check the first line of the file.  This avoids the problem of accidentally
 	# picking up the "replica" attribute which will also have the same string match.
-  	head -1 $DSSERV_REPLOG | grep '^replica: ' >/dev/null 2>&1
+  	head -n 1 $DSSERV_REPLOG | grep '^replica: ' >/dev/null 2>&1
   	if [ $? -ne 0 ]
 	then
 		cat /dev/null > $DSSERV_REPLOG
