socsvn commit: r237121 -
soc2012/tzabal/client-side/akcrs-head/usr.sbin/crashreport
tzabal at FreeBSD.org
tzabal at FreeBSD.org
Tue Jun 5 10:38:41 UTC 2012
Author: tzabal
Date: Tue Jun 5 10:38:39 2012
New Revision: 237121
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=237121
Log:
Updated version of crashreport. Patch from Lars Engels is included.
Modified:
soc2012/tzabal/client-side/akcrs-head/usr.sbin/crashreport/crashreport.sh
Modified: soc2012/tzabal/client-side/akcrs-head/usr.sbin/crashreport/crashreport.sh
==============================================================================
--- soc2012/tzabal/client-side/akcrs-head/usr.sbin/crashreport/crashreport.sh Tue Jun 5 09:49:31 2012 (r237120)
+++ soc2012/tzabal/client-side/akcrs-head/usr.sbin/crashreport/crashreport.sh Tue Jun 5 10:38:39 2012 (r237121)
@@ -6,9 +6,10 @@
# the FreeBSD developers.
#
-. /etc/rc.conf
+[ -f /etc/rc.conf ] && . /etc/rc.conf
-PROG=`/usr/bin/basename $0`
+# Basename
+PROG=${0##*/}
print_usage()
{
@@ -31,7 +32,7 @@
## Check if the user that executes the script is root
user=`/usr/bin/id -u`
-if [ "${user}" != "0" ]; then
+if [ ${user} -ne 0 ]; then
error 'Only the superuser (uid 0) can use this program.'
exit 1
fi
@@ -39,15 +40,15 @@
## Get positional parameters
while getopts "d:f:e:" opt; do
- case "$opt" in
+ case "${opt}" in
d)
- _dumpdir=$OPTARG
+ _dumpdir="${OPTARG}"
;;
f)
- _file=$OPTARG
+ _file="${OPTARG}"
;;
e)
- _email=$OPTARG
+ _email="${OPTARG}"
;;
*)
print_usage
@@ -61,9 +62,9 @@
if [ -z "${_dumpdir}" ]; then
# dumpdir of /etc/rc.conf
if [ -z "${dumpdir}" ]; then
- _dumpdir=${DUMPDIR}
+ _dumpdir="${DUMPDIR}"
else
- _dumpdir=${dumpdir}
+ _dumpdir="${dumpdir}"
fi
fi
@@ -85,20 +86,26 @@
CORE="${_dumpdir}/core.txt"
TEXTDUMP="${_dumpdir}/textdump.tar"
+flag=1
if [ -z "${_file}" ]; then
# Find it using the file bounds
if [ -r "${BOUNDS}" ]; then
value=`head -n 1 ${BOUNDS}`
- X=$((value - 1))
- if [ -f "${CORE}.${X}" ]; then
- _file=`basename "${CORE}.${X}"`
- else
- _file=`basename "${TEXTDUMP}.${X}"`
+ if [ ${value} -ge 1 ]; then
+ flag=0
+ X=$((value - 1))
+ if [ -f "${CORE}.${X}" ]; then
+ _file="${CORE##*/}.${X}"
+ else
+ _file="${TEXTDUMP##*/}.${X}"
+ fi
fi
+ fi
+
# Otherwise, use this (heavier) way
- else
- _file=`ls ${_dumpdir} | egrep '[a-z]+\.[a-z]+\.[0-9]+' | \
- sort -n -t . -k 3 | tail -1`
+ if [ ${flag} -eq 1 ]; then
+ _file="`ls ${_dumpdir} | egrep '[a-z]+\.[a-z]+\.[0-9]+' | \
+ sort -n -t . -k 3 | tail -1`"
fi
fi
@@ -114,16 +121,16 @@
_email="${email}"
fi
-if [ -z "$_email" ]; then
+if [ -z "${_email}" ]; then
error 'No email address for contact is specified.'
exit 6
fi
# Check if the given email address is valid based on its format.
-echo ${_email} | egrep '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$' \
- > /dev/null
+echo "${_email}" | egrep '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$' \
+ > /dev/null 2>&1
-if [ "$?" != "0" ]; then
+if [ $? -ne 0 ]; then
error "Email address ${_email} is invalid."
exit 7
fi
@@ -134,14 +141,16 @@
email_file=`mktemp /tmp/crashreport.XXXXXX`
echo "${_email}" > ${email_file}
-tar -czf ${report} -C ${_dumpdir} ${_file} -C `dirname ${email_file}` \
- `basename ${email_file}`
+tar -czf ${report} -C "${_dumpdir}" "${_file}" -C ${email_file%/*} \
+ ${email_file##*/}
-if [ "$?" != "0" ]; then
- error 'An error occurred when bundling the report.'
+if [ $? -ne 0 ]; then
+ error 'An error occurred while bundling the report.'
exit 8
fi
+rm -f "${email_file}"
+
## Send the report to the Central Collector machine
user="reporter"
@@ -183,11 +192,18 @@
4A2OywvWcs45QnlxYmKUIL6x8stKQAbtuHkbda3v/4ts/+6Y0jss
-----END RSA PRIVATE KEY-----" > ${user_private_key_file}
-scp -o GlobalKnownHostsFile=${host_public_key_file} -o BatchMode=yes \
- -i ${user_private_key_file} -q ${report} ${user}@${hostname}:
+scp -o GlobalKnownHostsFile="${host_public_key_file}" -o BatchMode=yes \
+ -i "${user_private_key_file}" -q "${report}" "${user}@${hostname}:"
+
+if [ $? -ne 0 ]; then
+ error 'An error occurred while sending the report.'
+ exit 9
+fi
+
+rm -f ${host_public_key_file} ${user_private_key_file}
## Everything went smoothly
-echo "Crash report has been sent successfully.\
-Check your email for confirmation."
-exit 0
\ No newline at end of file
+echo "Kernel crash report has been sent successfully. \
+Check your email for confirmation of the report."
+exit 0
More information about the svn-soc-all
mailing list