#!/usr/dt/bin/dtksh # # Solaris patch checker script # # ***** BEGIN LICENSE BLOCK ***** # Version: MPL 1.1/GPL 2.0/LGPL 2.1 # # The contents of this file are subject to the Mozilla Public License Version # 1.1 (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" basis, # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License # for the specific language governing rights and limitations under the # License. # # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Roland Mainz # Portions created by the Initial Developer are Copyright (C) 2004 # the Initial Developer. All Rights Reserved. # # Contributor(s): # # Alternatively, the contents of this file may be used under the terms of # either the GNU General Public License Version 2 or later (the "GPL"), or # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), # in which case the provisions of the GPL or the LGPL are applicable instead # of those above. If you wish to allow use of your version of this file only # under the terms of either the GPL or the LGPL, and not to allow others to # use your version of this file under the terms of the MPL, indicate your # decision by deleting the provisions above and replace them with the notice # and other provisions required by the GPL or the LGPL. If you do not delete # the provisions above, a recipient may use your version of this file under # the terms of any one of the MPL, the GPL or the LGPL. # # ***** END LICENSE BLOCK ***** export PATH=/usr/xpg4/bin:/usr/sbin:/usr/bin # Enumerate installed patches enumerate_patch_list() { showrev -p | sort -n |grep "^Patch: " #cat patchlist.txt | grep "^Patch: " } # Exit with a warning for unsupported platforms unsupported_exit() { echo "# WARNING: Patch checker not supported for $(uname -sr) on $(uname -p)." exit 0 } # Setup list of required patches typeset -A required_patches case "$(uname -p)" in "sparc") case "$(uname -r)" in # Solaris 2.7/SPARC "5.7") required_patches=( [0]="106300-22" [0_title]="64-Bit Shared library patch for C++" [1]="106327-21" [1_title]="32-Bit Shared library patch for C++" [2]="106950-24" [2_title]="SunOS 5.7: linker patch" [3]="107650-08" [3_title]="OpenWindows 3.6.1 X11R6.4 Xprint Extension Patch" [4]="107636-10" [4_title]="SunOS 5.7: X Input & Output Method patch" [5]="108376-44" [5_title]="OpenWindows 3.6.1: Xsun Patch" [6]="112689-02" [6_title]="SunOS 5.7: UTF-8 locale ICONV patch" ) num_required_patches=7 ;; # Solaris 2.8/SPARC "5.8") required_patches=( [0]="108434-17" [0_title]="32-Bit Shared library patch for C++" [1]="108435-17" [1_title]="64-Bit Shared library patch for C++" [2]="108652-79" [2_title]="X11 6.5.1: Xsun patch" [3]="108773-18" [3_title]="SunOS 5.8: IIIM and X Input & Output Method patch" [4]="109147-27" [4_title]="SunOS 5.8: linker patch" [5]="109159-03" [5_title]="SunOS 5.8: Chinese iconv module updates" [6]="109704-03" [6_title]="SunOS 5.8: Japanese iconv patch" [7]="111721-04" [7_title]="SunOS 5.8: Math Library (libm) patch" [8]="113261-02" [8_title]="SunOS 5.8: UTF-8 locale ICONV patch" [9]="114542-01" [9_title]="SunOS 5.8: Adds extended Arabic support" [10]="111721-04" [10_title]="SunOS 5.8: Math Library (libm) patch" ) num_required_patches=11 ;; # Solaris 2.9/SPARC "5.9") required_patches=( [0]="111711-11" [0_title]="32-Bit Shared library patch for C++" [1]="111712-11" [1_title]="64-Bit Shared library patch for C++" [2]="111722-04" [2_title]="SunOS 5.9: Math Library (libm) patch" [3]="112661-06" [3_title]="SunOS 5.9: IIIM and X Input & Output Method patch" [4]="112785-34" [4_title]="X11 6.6.1: Xsun patch" [5]="112963-10" [5_title]="SunOS 5.9: linker patch" [6]="113902-03" [6_title]="SunOS 5.9: Asian UTF-8 iconv modules enhancement" [7]="114276-02" [7_title]="SunOS 5.9: Extended Arabic support in UTF-8" [8]="114641-02" [8_title]="SunOS 5.9: Japanese iconv for UTF-8 patch" [9]="111722-04" [9_title]="SunOS 5.9: Math Library (libm) patch" ) num_required_patches=10 ;; # Solaris 10/SPARC - no patches yet "5.10") exit 0 ;; *) unsupported_exit ;; esac ;; "i386") case "$(uname -r)" in # Solaris 2.7/x86 "5.7") required_patches=( [0]="106328-19" [0_title]="SunOS 5.7_x86: Shared library patch for C++" [1]="106951-25" [1_title]="SunOS 5.7_x86: Linker Patch" [2]="107651-08" [2_title]="OpenWindows 3.6.1_x86: X11R6.4 Xprint Extension Patch" [3]="107637-10" [3_title]="SunOS 5.7_x86: X Input & Output Method patch" [4]="108377-39" [4_title]="OpenWindows 3.6.1_x86: Xsun Patch" [5]="112690-01" [5_title]="SunOS 5.7_x86: UTF-8 locale ICONV patch" ) num_required_patches=6 ;; # Solaris 2.8/x86 "5.8") required_patches=( [0]="108436-13" [0_title]="SunOS 5.8_x86 Shared library patch for C++" [1]="108653-68" [1_title]="X11 6.4.1_x86: Xsun patch" [2]="108774-18" [2_title]="SunOS 5.8_x86: IIIM and X Input & Output Method patch" [3]="109148-28" [3_title]="SunOS 5.8_x86: linker patch" [4]="109160-03" [4_title]="SunOS 5.8_x86: Chinese iconv module updates" [5]="109705-03" [5_title]="SunOS 5.8_x86: Japanese iconv patch" [6]="112757-01" [6_title]="SunOS 5.8_x86: Math Library (libm) patch" [7]="113262-02" [7_title]="SunOS 5.8_x86: UTF-8 locale ICONV patch" [8]="114543-01" [8_title]="SunOS 5.8_x86: Adds extended Arabic support" [9]="112757-01" [9_title]="SunOS 5.8_x86: Math Library (libm) patch" ) num_required_patches=10 ;; # Solaris 2.9/x86 "5.9") required_patches=( [0]="111713-06" [0_title]="SunOS 5.9_x86: Shared library patch for C++" [1]="111728-03" [1_title]="SunOS 5.9_x86: Math Library (libm) patch" [2]="112662-04" [2_title]="SunOS 5.9_x86: IIIM and X Input & Output Method patch" [3]="112786-22" [3_title]="X11 6.6.1_x86: Xsun patch" [4]="113986-06" [4_title]="SunOS 5.9_x86: linker Patch" [5]="113903-03" [5_title]="SunOS 5.9_x86: Asian UTF-8 iconv modules enhancement" [6]="114277-02" [6_title]="SunOS 5.9_x86: Extended Arabic support in UTF-8 " [7]="114642-02" [7_title]="SunOS 5.9_x86: Japanese iconv for UTF-8 patch" [8]="111728-03" [8_title]="SunOS 5.9_x86: Math Library (libm) patch" ) num_required_patches=9 ;; # Solaris 10/x86 - no patches yet "5.10") exit 0 ;; *) unsupported_exit ;; esac ;; *) unsupported_exit ;; esac typeset -A patchmap # Fill patchmap enumerate_patch_list | while read i1 i2 i3 ; do patch_id="${i2%-*}" patch_rev="${i2#*-}" patchmap[${patch_id}]="${patch_rev}" done # Check patch requirements against the list of installed patches and # print out missing patches ... missing_patches_msg="$( count=0 while [ ${count} -lt ${num_required_patches} ] ; do req_patch_id="${required_patches[${count}]%-*}" req_patch_rev="${required_patches[${count}]#*-}" if [ "${patchmap[${req_patch_id}]}" = "" ] ; then echo "- patch ${req_patch_id} (\"${required_patches[${count}_title]}\"). Install ${required_patches[${count}]} (or higher)." fi count=$((${count} + 1)) done )" # ... and then the patches which need updates: low_rev_patches_msg="$( count=0 while [ ${count} -lt ${num_required_patches} ] ; do req_patch_id="${required_patches[${count}]%-*}" req_patch_rev="${required_patches[${count}]#*-}" if [ "${patchmap[${req_patch_id}]}" != "" ] ; then if [ ${req_patch_rev} -gt ${patchmap[${req_patch_id}]} ] ; then echo "- patch ${required_patches[${count}]} (or higher), currently installed patch ${req_patch_id}-${patchmap[${req_patch_id}]} (\"${required_patches[${count}_title]}\")." fi fi count=$((${count} + 1)) done )" # Build message text display_warning=false # Intro... msg=" \ One or more of the following Solaris patches are missing in your OS which are requirements to run Mozilla.\n \ Please contact your system adminstrator to install these patches. \n \ " # ... missing patches ... if [ "${missing_patches_msg}" != "" ] ; then msg="$(printf "%s\n%s\n%s\n " "${msg}" "* The following patches are not installed:" "${missing_patches_msg}")" display_warning=true fi # ... and the too old ones ... if [ "${low_rev_patches_msg}" != "" ] ; then msg="$(printf "%s\n%s\n%s\n " "${msg}" "* The following patches need to be updated to higher revisions:" "${low_rev_patches_msg}")" display_warning=true fi # Do we really need to display the dialog ? if [ "${display_warning}" = "false" ] ; then exit 0 fi # Display warning dialog dismissCB() { exit 0 } exitCB() { exit 1 } XtInitialize TOPLEVEL moz_patch_error MozPatchError "$@" XmCreateMessageBox MISSING_PATCHES_DIALOG ${TOPLEVEL} missing_patches_dialog \ messageString:"${msg}" \ dialogTitle:"Mozilla patch checker" \ okLabelString:"Ignore problem and start Mozilla" \ cancelLabelString:"Exit" \ dialogType:DIALOG_ERROR XmMessageBoxGetChild CANCEL_BUTTON ${MISSING_PATCHES_DIALOG} DIALOG_CANCEL_BUTTON XmMessageBoxGetChild HELP_BUTTON ${MISSING_PATCHES_DIALOG} DIALOG_HELP_BUTTON # Remove the unwanted help button XtUnmanageChild ${HELP_BUTTON} XtAddCallback ${MISSING_PATCHES_DIALOG} okCallback dismissCB XtAddCallback ${MISSING_PATCHES_DIALOG} cancelCallback exitCB XtDisplay DISP ${TOPLEVEL} XmInternAtom CLOSE_ATOM ${DISP} WM_DELETE_WINDOW false XmAddWMProtocolCallback ${TOPLEVEL} ${CLOSE_ATOM} exitCB XtSetValues ${TOPLEVEL} deleteResponse:DO_NOTHING XtManageChild ${MISSING_PATCHES_DIALOG} XtRealizeWidget ${TOPLEVEL} XtMainLoop echo "# should not be hit." exit 255 # EOF.