RetroZilla/xpfe/bootstrap/init.d/moz_patch_checker.dtksh
2015-10-20 23:03:22 -04:00

294 lines
11 KiB
Plaintext

#!/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 <roland.mainz@nrubsig.org>
# 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.