blob: 7b36d406aba966737fdcb33aa7b87b6fa2d61d72 [file] [log] [blame]
Jari Aalto726f6381996-08-26 18:22:31 +00001#!/bin/sh -
2#
Jari Aaltoccc6cda1996-12-23 17:02:34 +00003# bashbug - create a bug report and mail it to the bug address
4#
5# The bug address depends on the release status of the shell. Versions
Jari Aaltof73dda02001-11-13 17:56:06 +00006# with status `devel', `alpha', `beta', or `rc' mail bug reports to
Jari Aaltob80f6442004-07-27 13:29:18 +00007# chet@cwru.edu and, optionally, to bash-testers@cwru.edu.
Jari Aaltocce855b1998-04-17 19:52:44 +00008# Other versions send mail to bug-bash@gnu.org.
Jari Aalto726f6381996-08-26 18:22:31 +00009#
Jari Aaltob80f6442004-07-27 13:29:18 +000010# Copyright (C) 1996-2004 Free Software Foundation, Inc.
Jari Aalto7117c2d2002-07-17 14:10:11 +000011#
Jari Aalto31859422009-01-12 13:36:28 +000012# This program is free software: you can redistribute it and/or modify
13# it under the terms of the GNU General Public License as published by
14# the Free Software Foundation, either version 3 of the License, or
15# (at your option) any later version.
Jari Aalto7117c2d2002-07-17 14:10:11 +000016#
Jari Aalto31859422009-01-12 13:36:28 +000017# This program is distributed in the hope that it will be useful,
18# but WITHOUT ANY WARRANTY; without even the implied warranty of
19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20# GNU General Public License for more details.
Jari Aalto7117c2d2002-07-17 14:10:11 +000021#
Jari Aalto31859422009-01-12 13:36:28 +000022# You should have received a copy of the GNU General Public License
23# along with this program. If not, see <http://www.gnu.org/licenses/>.
Jari Aalto7117c2d2002-07-17 14:10:11 +000024
25#
Jari Aalto726f6381996-08-26 18:22:31 +000026# configuration section:
Jari Aaltof73dda02001-11-13 17:56:06 +000027# these variables are filled in by the make target in Makefile
Jari Aalto726f6381996-08-26 18:22:31 +000028#
Jari Aaltoccc6cda1996-12-23 17:02:34 +000029MACHINE="!MACHINE!"
30OS="!OS!"
31CC="!CC!"
32CFLAGS="!CFLAGS!"
33RELEASE="!RELEASE!"
34PATCHLEVEL="!PATCHLEVEL!"
35RELSTATUS="!RELSTATUS!"
36MACHTYPE="!MACHTYPE!"
Jari Aalto726f6381996-08-26 18:22:31 +000037
Jari Aaltoccc6cda1996-12-23 17:02:34 +000038PATH=/bin:/usr/bin:/usr/local/bin:$PATH
Jari Aalto726f6381996-08-26 18:22:31 +000039export PATH
40
Jari Aaltob80f6442004-07-27 13:29:18 +000041# Check if TMPDIR is set, default to /tmp
Jari Aaltof73dda02001-11-13 17:56:06 +000042: ${TMPDIR:=/tmp}
Jari Aaltof73dda02001-11-13 17:56:06 +000043
Jari Aaltob80f6442004-07-27 13:29:18 +000044#Securely create a temporary directory for the temporary files
45TEMPDIR=$TMPDIR/bbug.$$
46(umask 077 && mkdir $TEMPDIR) || {
47 echo "$0: could not create temporary directory" >&2
48 exit 1
49}
Jari Aaltof73dda02001-11-13 17:56:06 +000050
Jari Aaltob80f6442004-07-27 13:29:18 +000051TEMPFILE1=$TEMPDIR/bbug1
52TEMPFILE2=$TEMPDIR/bbug2
53
Jari Aaltobb706242000-03-17 21:46:59 +000054USAGE="Usage: $0 [--help] [--version] [bug-report-email-address]"
55VERSTR="GNU bashbug, version ${RELEASE}.${PATCHLEVEL}-${RELSTATUS}"
56
57do_help= do_version=
58
59while [ $# -gt 0 ]; do
60 case "$1" in
61 --help) shift ; do_help=y ;;
62 --version) shift ; do_version=y ;;
63 --) shift ; break ;;
64 -*) echo "bashbug: ${1}: invalid option" >&2
65 echo "$USAGE" >& 2
66 exit 2 ;;
67 *) break ;;
68 esac
69done
70
71if [ -n "$do_version" ]; then
72 echo "${VERSTR}"
73 exit 0
74fi
75
76if [ -n "$do_help" ]; then
77 echo "${VERSTR}"
78 echo "${USAGE}"
79 echo
80 cat << HERE_EOF
81Bashbug is used to send mail to the Bash maintainers
82for when Bash doesn't behave like you'd like, or expect.
83
84Bashbug will start up your editor (as defined by the shell's
85EDITOR environment variable) with a preformatted bug report
86template for you to fill in. The report will be mailed to the
Chet Ramey00018032011-11-21 20:51:19 -050087bug-bash mailing list by default. See the manual for details.
Jari Aaltobb706242000-03-17 21:46:59 +000088
89If you invoke bashbug by accident, just quit your editor without
90saving any changes to the template, and no bug report will be sent.
91HERE_EOF
92 exit 0
93fi
Jari Aaltod166f041997-06-05 14:59:13 +000094
95# Figure out how to echo a string without a trailing newline
96N=`echo 'hi there\c'`
97case "$N" in
98*c) n=-n c= ;;
99*) n= c='\c' ;;
100esac
101
Jari Aaltob80f6442004-07-27 13:29:18 +0000102BASHTESTERS="bash-testers@cwru.edu"
Jari Aalto726f6381996-08-26 18:22:31 +0000103
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000104case "$RELSTATUS" in
Jari Aaltob80f6442004-07-27 13:29:18 +0000105alpha*|beta*|devel*|rc*) BUGBASH=chet@cwru.edu ;;
Jari Aaltof73dda02001-11-13 17:56:06 +0000106*) BUGBASH=bug-bash@gnu.org ;;
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000107esac
108
Jari Aaltod166f041997-06-05 14:59:13 +0000109case "$RELSTATUS" in
Jari Aaltof73dda02001-11-13 17:56:06 +0000110alpha*|beta*|devel*|rc*)
Jari Aaltobb706242000-03-17 21:46:59 +0000111 echo "$0: This is a testing release. Would you like your bug report"
Jari Aaltod166f041997-06-05 14:59:13 +0000112 echo "$0: to be sent to the bash-testers mailing list?"
113 echo $n "$0: Send to bash-testers? $c"
114 read ans
115 case "$ans" in
116 y*|Y*) BUGBASH="${BUGBASH},${BASHTESTERS}" ;;
117 esac ;;
118esac
119
120BUGADDR="${1-$BUGBASH}"
Jari Aalto726f6381996-08-26 18:22:31 +0000121
Jari Aaltobb706242000-03-17 21:46:59 +0000122if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ]; then
Jari Aalto28ef6c32001-04-06 19:14:31 +0000123 if [ -x /usr/bin/editor ]; then
124 DEFEDITOR=editor
125 elif [ -x /usr/local/bin/ce ]; then
Jari Aaltobb706242000-03-17 21:46:59 +0000126 DEFEDITOR=ce
127 elif [ -x /usr/local/bin/emacs ]; then
128 DEFEDITOR=emacs
129 elif [ -x /usr/contrib/bin/emacs ]; then
130 DEFEDITOR=emacs
131 elif [ -x /usr/bin/emacs ]; then
132 DEFEDITOR=emacs
133 elif [ -x /usr/bin/xemacs ]; then
134 DEFEDITOR=xemacs
135 elif [ -x /usr/contrib/bin/jove ]; then
136 DEFEDITOR=jove
137 elif [ -x /usr/local/bin/jove ]; then
138 DEFEDITOR=jove
139 elif [ -x /usr/bin/vi ]; then
140 DEFEDITOR=vi
141 else
142 echo "$0: No default editor found: attempting to use vi" >&2
143 DEFEDITOR=vi
144 fi
145fi
146
147
148: ${EDITOR=$DEFEDITOR}
Jari Aalto726f6381996-08-26 18:22:31 +0000149
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000150: ${USER=${LOGNAME-`whoami`}}
151
Jari Aaltob80f6442004-07-27 13:29:18 +0000152trap 'rm -rf "$TEMPDIR"; exit 1' 1 2 3 13 15
153trap 'rm -rf "$TEMPDIR"' 0
Jari Aalto726f6381996-08-26 18:22:31 +0000154
155UN=
156if (uname) >/dev/null 2>&1; then
157 UN=`uname -a`
158fi
159
160if [ -f /usr/lib/sendmail ] ; then
161 RMAIL="/usr/lib/sendmail"
Jari Aaltobb706242000-03-17 21:46:59 +0000162 SMARGS="-i -t"
Jari Aalto726f6381996-08-26 18:22:31 +0000163elif [ -f /usr/sbin/sendmail ] ; then
164 RMAIL="/usr/sbin/sendmail"
Jari Aaltobb706242000-03-17 21:46:59 +0000165 SMARGS="-i -t"
Jari Aalto726f6381996-08-26 18:22:31 +0000166else
167 RMAIL=rmail
Jari Aaltobb706242000-03-17 21:46:59 +0000168 SMARGS="$BUGADDR"
Jari Aalto726f6381996-08-26 18:22:31 +0000169fi
170
Jari Aaltof73dda02001-11-13 17:56:06 +0000171INITIAL_SUBJECT='[50 character or so descriptive subject here (for reference)]'
Jari Aaltocce855b1998-04-17 19:52:44 +0000172
Jari Aaltof73dda02001-11-13 17:56:06 +0000173cat > "$TEMPFILE1" <<EOF
Jari Aalto726f6381996-08-26 18:22:31 +0000174From: ${USER}
175To: ${BUGADDR}
Jari Aaltof73dda02001-11-13 17:56:06 +0000176Subject: ${INITIAL_SUBJECT}
Jari Aalto726f6381996-08-26 18:22:31 +0000177
178Configuration Information [Automatically generated, do not change]:
179Machine: $MACHINE
180OS: $OS
181Compiler: $CC
182Compilation CFLAGS: $CFLAGS
183uname output: $UN
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000184Machine Type: $MACHTYPE
Jari Aalto726f6381996-08-26 18:22:31 +0000185
186Bash Version: $RELEASE
187Patch Level: $PATCHLEVEL
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000188Release Status: $RELSTATUS
Jari Aalto726f6381996-08-26 18:22:31 +0000189
190Description:
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000191 [Detailed description of the problem, suggestion, or complaint.]
Jari Aalto726f6381996-08-26 18:22:31 +0000192
193Repeat-By:
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000194 [Describe the sequence of events that causes the problem
195 to occur.]
Jari Aalto726f6381996-08-26 18:22:31 +0000196
197Fix:
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000198 [Description of how to fix the problem. If you don't know a
199 fix for the problem, don't include this section.]
Jari Aalto726f6381996-08-26 18:22:31 +0000200EOF
201
Jari Aaltof73dda02001-11-13 17:56:06 +0000202cp "$TEMPFILE1" "$TEMPFILE2"
203chmod u+w "$TEMPFILE1"
Jari Aalto726f6381996-08-26 18:22:31 +0000204
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000205trap '' 2 # ignore interrupts while in editor
206
Jari Aaltof73dda02001-11-13 17:56:06 +0000207edstat=1
208while [ $edstat -ne 0 ]; do
209 $EDITOR "$TEMPFILE1"
210 edstat=$?
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000211
Jari Aaltof73dda02001-11-13 17:56:06 +0000212 if [ $edstat -ne 0 ]; then
213 echo "$0: editor \`$EDITOR' exited with nonzero status."
214 echo "$0: Perhaps it was interrupted."
215 echo "$0: Type \`y' to give up, and lose your bug report;"
216 echo "$0: type \`n' to re-enter the editor."
217 echo $n "$0: Do you want to give up? $c"
218
219 read ans
220 case "$ans" in
221 [Yy]*) exit 1 ;;
222 esac
223
224 continue
225 fi
226
227 # find the subject from the temp file and see if it's been changed
228 CURR_SUB=`grep '^Subject: ' "$TEMPFILE1" | sed 's|^Subject:[ ]*||' | sed 1q`
229
230 case "$CURR_SUB" in
231 "${INITIAL_SUBJECT}")
232 echo
233 echo "$0: You have not changed the subject from the default."
234 echo "$0: Please use a more descriptive subject header."
235 echo "$0: Type \`y' to give up, and lose your bug report;"
236 echo "$0: type \`n' to re-enter the editor."
237 echo $n "$0: Do you want to give up? $c"
238
239 read ans
240 case "$ans" in
241 [Yy]*) exit 1 ;;
242 esac
243
244 echo "$0: The editor will be restarted in five seconds."
245 sleep 5
246 edstat=1
247 ;;
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000248 esac
Jari Aaltof73dda02001-11-13 17:56:06 +0000249
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000250done
251
Jari Aaltob80f6442004-07-27 13:29:18 +0000252trap 'rm -rf "$TEMPDIR"; exit 1' 2 # restore trap on SIGINT
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000253
Jari Aaltof73dda02001-11-13 17:56:06 +0000254if cmp -s "$TEMPFILE1" "$TEMPFILE2"
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000255then
256 echo "File not changed, no bug report submitted."
257 exit
Jari Aalto726f6381996-08-26 18:22:31 +0000258fi
259
Chet Ramey00018032011-11-21 20:51:19 -0500260echo $n "Send bug report to ${BUGADDR}? [y/n] $c"
Jari Aaltod166f041997-06-05 14:59:13 +0000261read ans
262case "$ans" in
263[Nn]*) exit 0 ;;
264esac
265
Jari Aaltof73dda02001-11-13 17:56:06 +0000266${RMAIL} $SMARGS < "$TEMPFILE1" || {
267 cat "$TEMPFILE1" >> $HOME/dead.bashbug
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000268 echo "$0: mail failed: report saved in $HOME/dead.bashbug" >&2
269}
270
Jari Aalto726f6381996-08-26 18:22:31 +0000271exit 0