diff options
author | Rene Mayrhofer <rene@mayrhofer.eu.org> | 2006-05-22 05:12:18 +0000 |
---|---|---|
committer | Rene Mayrhofer <rene@mayrhofer.eu.org> | 2006-05-22 05:12:18 +0000 |
commit | aa0f5b38aec14428b4b80e06f90ff781f8bca5f1 (patch) | |
tree | 95f3d0c8cb0d59d88900dbbd72110d7ab6e15b2a /programs/send-pr/send-pr.in | |
parent | 7c383bc22113b23718be89fe18eeb251942d7356 (diff) | |
download | vyos-strongswan-aa0f5b38aec14428b4b80e06f90ff781f8bca5f1.tar.gz vyos-strongswan-aa0f5b38aec14428b4b80e06f90ff781f8bca5f1.zip |
Import initial strongswan 2.7.0 version into SVN.
Diffstat (limited to 'programs/send-pr/send-pr.in')
-rwxr-xr-x | programs/send-pr/send-pr.in | 643 |
1 files changed, 643 insertions, 0 deletions
diff --git a/programs/send-pr/send-pr.in b/programs/send-pr/send-pr.in new file mode 100755 index 000000000..6cd202470 --- /dev/null +++ b/programs/send-pr/send-pr.in @@ -0,0 +1,643 @@ +#!/bin/sh +# Submit a problem report to a GNATS site. +# Copyright (C) 2001 Milan Zamazal +# Copyright (C) 1993, 2001 Free Software Foundation, Inc. +# Contributed by Brendan Kehoe (brendan@cygnus.com), based on a +# version written by Heinz G. Seidl (hgs@cygnus.com). +# Further edited by Milan Zamazal (pdm@zamazal.org). +# mktemp support by Yngve Svendsen (yngve.svendsen@clustra.com). +# +# This file is part of GNU GNATS. +# +# GNU GNATS is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# GNU GNATS is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU GNATS; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +# +# $Id: send-pr.in,v 1.1 2004/03/15 20:35:31 as Exp $ +# + +# The version of this send-pr. +VERSION=4.0-alpha + +#SWAN_VERSION= + +# The submitter-id for your site. +SUBMITTER=net + +# The place where our usual binaries live. +BINDIR=@IPSEC_DIR@ + +# The place where the builtin binaries are located. +LIBDIR=@IPSEC_LIBDIR@ +LIBEXECDIR=@IPSEC_EXECDIR@ + +# The default release for this host. +DEFAULT_RELEASE="gnats-4.0-alpha" + +# The default organization. +DEFAULT_ORGANIZATION="net" + +# How to read the passwd database. +PASSWD="cat /etc/passwd" + +# Is the mktemp command available? +MKTEMP="yes" + +ECHON=bsd + +# By default send-pr connects directly to the database. However, it +# can be configured to use an existing template file by setting the +# TEMPLATE variable below to point to a PR template generated from +# "send-pr -P". +TEMPLATE="$LIBDIR/ipsec_pr.template" + +# send-pr can use mail to submit PRs, instead of connecting to the +# database directly. MAILPROG needs to point to a compatible mailer +# (sendmail will work). If MAILPROG needs to have the address that +# the mail is being sent to specified on the command line, it should +# be specified here as well (for example, the command +# MAILPROG="mail bugs@foo.bar.com" +# should work). If sendmail is used, this should be set to +# MAILPROG="/usr/lib/sendmail -oi -t" +MAILPROG="/usr/sbin/sendmail -oi -t" + +# The address that PRs are sent to. Normally this can be left as "bugs"; +# however, if using mail to submit PRs, this should be set to the address +# where PRs should be sent. +MAILADDR="freeswan-bugs@freeswan.org" + +if [ $ECHON = bsd ] ; then + ECHON1="echo -n" + ECHON2= +elif [ $ECHON = sysv ] ; then + ECHON1=echo + ECHON2='\c' +else + ECHON1=echo + ECHON2= +fi + +# Configuration file to be read. It must be a shell script that can redefine +# the variables above to fit a local configuration. +CONFIGFILE=@IPSEC_DIR@/send-pr.conf + +if [ -r $CONFIGFILE ]; then + . $CONFIGFILE +fi + +# + +if [ -z "$TMPDIR" ]; then + TMPDIR=/tmp +else + if [ "`echo $TMPDIR | grep '/$'`" != "" ]; then + TMPDIR="`echo $TMPDIR | sed -e 's,/$,,'`" + fi +fi + +# TEMP: Temporary copy of the PR, to be edited by the user. +# BAD: The PR will end up here if the user aborts. +# REF: The 'reference' copy of the PR template, used to verify that the user +# actually did edit the template. +# FIXFIL: A sed script used to remove comments from the template before +# processing. +if [ $MKTEMP = yes ]; then + TEMP=`mktemp $TMPDIR/pXXXXXX` || exit 1 + BAD=`mktemp $TMPDIR/pbadXXXXXX` || exit 1 + REF=`mktemp $TMPDIR/pfXXXXXX` || exit 1 + FIXFIL=`mktemp $TMPDIR/fixXXXXXX` || exit 1 +else + TEMP=$TMPDIR/p$$ + BAD=$TMPDIR/pbad$$ + REF=$TMPDIR/pf$$ + FIXFIL=$TMPDIR/fix$$ + bad_temp=0 + : > $TEMP || bad_temp=1 + : > $BAD || bad_temp=1 + : > $REF || bad_temp=1 + : > $FIXFIL || bad_temp=1 + if [ $bad_temp = 1 ]; then + rm -f $TEMP $BAD $REF $FIXFIL + exit 1; + fi +fi +REMOVE_TEMP="rm -f $TEMP $BAD $REF" + +# find a user name +if [ "$LOGNAME" = "" ]; then + if [ "$USER" != "" ]; then + LOGNAME="$USER" + else + LOGNAME="UNKNOWN" + fi +fi + +FROM="$LOGNAME" +REPLYTO="${REPLY_TO:-${REPLYTO:-$LOGNAME}}" +if [ "x$MAILPROG" != "x" ] +then + RESP_ALIAS="`query-pr --adm-field responsible --adm-key $LOGNAME --adm-subfield alias 2>/dev/null`" +else + RESP_ALIAS="" +fi + +# Find out the name of the originator of this PR. +if [ -n "$NAME" ]; then + DEFAULT_ORIGINATOR="$NAME" +elif [ -f $HOME/.fullname ]; then + DEFAULT_ORIGINATOR="`sed -e '1q' $HOME/.fullname`" +else + # Must use temp file due to incompatibilities in quoting behavior + # and to protect shell metacharacters in the expansion of $LOGNAME + $PASSWD | grep "^$LOGNAME:" | awk -F: '{print $5}' | sed -e 's/,.*//' > $TEMP + if [ "x$RESP_ALIAS" != "x" ] + then + DEFAULT_ORIGINATOR="$RESP_ALIAS (`cat $TEMP`)" + else + DEFAULT_ORIGINATOR="$FROM (`cat $TEMP`)" + fi + rm -f $TEMP +fi + +if [ -z "$ORGANIZATION" ] +then + ORGANIZATION="$DEFAULT_ORGANIZATION"; +fi + +if [ -n "$ORGANIZATION" -a "x$ORGANIZATION" != "xunknown" ]; then + if [ -f "$ORGANIZATION" ]; then + ORGANIZATION="`cat $ORGANIZATION`" + fi + if [ -n "$ORGANIZATION" ]; then + ORGANIZATION="$ORGANIZATION" + elif [ -f $HOME/.organization ]; then + ORGANIZATION="`cat $HOME/.organization`" + fi +fi + +if [ "x$ORGANIZATION" = "xunknown" ]; then + cat <<__EOF__ +It seems that send-pr is not installed with your organization set to a useful +value. To fix this, you need to edit the configuration file +$CONFIGFILE +and fill in the organization with the correct value. + +__EOF__ + ORGANIZATION=""; +fi 1>&2 + +# If they don't have a preferred editor set, then use +if [ -z "$VISUAL" ]; then + if [ -z "$EDITOR" ]; then + EDIT=vi + else + EDIT="$EDITOR" + fi +else + EDIT="$VISUAL" +fi + +# Find out some information. +SYSTEM=`( [ -f /bin/uname ] && /bin/uname -a ) || \ + ( [ -f /usr/bin/uname ] && /usr/bin/uname -a ) || echo "" | sed -e 's,|,\\|,'` + +# Our base command name. +COMMAND=`echo $0 | sed -e 's,.*/,,'` +USAGE="Usage: $COMMAND [OPTION]... + + -b --batch run without printing most messages + --barf include a full barf inline rather than just look + -c --cc=LINE put LINE to the CC header + -d --database=DATABASE submit PR to DATABASE + -f --file=FILE read the PR template from FILE (\`-' for stdin) + -p --print just print the template and exit + --request-id send a request for a user id + -s --severity=SEVERITY PR severity + + -h --help display this help and exit + -V --version output version information and exit +" +REMOVE= +BATCH= +CC= +DEFAULT_SEVERITY= +BARF=${BARF-false} + +if [ "$SYSTEM" != "" ] +then + DEFAULT_ENVIRONMENT="System: $SYSTEM" +fi + +if [ "$SWAN_VERSION" != "" ] +then + DEFAULT_VERSION="$SWAN_VERSION"; +else + DEFAULT_VERSION=`ipsec --versioncode` +fi +DEFAULT_VERSION=`echo $DEFAULT_VERSION | sed -e 's,\/,\\\/,'` + +while [ $# -gt 0 ]; do + case "$1" in + -r) ;; # Ignore for backward compat. + -f | --file) if [ $# -eq 1 ]; then echo "$USAGE"; exit 1; fi + shift ; IN_FILE="$1" + if [ "$IN_FILE" != "-" -a ! -r "$IN_FILE" ]; then + echo "$COMMAND: cannot read $IN_FILE" + exit 1 + fi + ;; + -b | --batch) BATCH=true ;; + --barf) BARF=true ;; + -c | --cc) if [ $# -eq 1 ]; then echo "$USAGE"; exit 1; fi + shift ; CC="$1" + ;; + -d | --database) if [ $# -eq 1 ]; then echo "$USAGE"; exit 1; fi + shift; GNATSDB="$1"; export GNATSDB + ;; + -s | --severity) if [ $# -eq 1 ]; then echo "$USAGE"; exit 1; fi + shift ; DEFAULT_SEVERITY="$1" + ;; + -p | -P | --print) PRINT=true ;; + --request-id) REQUEST_ID=true ;; + -h | --help) echo "$USAGE"; exit 0 ;; + -V | --version) echo "$VERSION"; exit 0 ;; + -*) echo "$USAGE" ; exit 1 ;; + *) echo "$USAGE" ; exit 1 ;; + esac + shift +done + +if [ "x$SUBMITTER" = "x" ] +then + SUBMITTER="unknown" +fi + +if [ "x$SUBMITTER" = "xunknown" -a -z "$REQUEST_ID" -a -z "$IN_FILE" ]; then + cat << '__EOF__' +It seems that send-pr is not installed with your unique submitter-id. +You need to run + + install-sid YOUR-SID + +where YOUR-SID is the identification code you received with `send-pr'. +`send-pr' will automatically insert this value into the template field +`>Submitter-Id'. If you've downloaded `send-pr' from the Net, use `net' +for this value. If you do not know your id, run `send-pr --request-id' to +get one from your support site. +__EOF__ + exit 1 +fi + +# So the template generation code finds it. +DEFAULT_SUBMITTERID=${SUBMITTER} + +# Catch some signals. ($xs kludge needed by Sun /bin/sh) +xs=0 +trap 'rm -f $REF $TEMP $FIXFIL; exit $xs' 0 +trap 'echo "$COMMAND: Aborting ..."; rm -f $REF $TEMP $FIXFIL; xs=1; exit' 1 3 13 15 + +if [ "x$PRINT" = "xtrue" ]; then + FROM="<FROM>" + REPLYTO="<REPLYTO>" + DEFAULT_ORIGINATOR="<DEFAULT_ORIGINATOR>" + DEFAULT_SUBMITTERID="<SUBMITTER>" +fi + +# If they told us to use a specific file, then do so. +if [ -n "$IN_FILE" ]; then + if [ "$IN_FILE" = "-" ]; then + # The PR is coming from the standard input. + cat > $TEMP + else + # Use the file they named. + cat $IN_FILE > $TEMP + fi +else + if [ -n "$TEMPLATE" -a -z "$PRINT_INTERN" ]; then + # If their TEMPLATE points to a bogus entry, then bail. + if [ ! -f "$TEMPLATE" -o ! -r "$TEMPLATE" -o ! -s "$TEMPLATE" ]; then + echo "$COMMAND: can't seem to read your template file (\`$TEMPLATE'), ignoring TEMPLATE" + sleep 1 + PRINT_INTERN=bad_prform + fi + fi + + if [ -n "$TEMPLATE" -a -z "$PRINT_INTERN" ]; then + sed "s/<FROM>/$FROM/;s/<REPLYTO>/$REPLYTO/;s/<DEFAULT_ORIGINATOR>/$DEFAULT_ORIGINATOR/;s/<SUBMITTER>/$DEFAULT_SUBMITTERID/;s|<DEFAULT_ENVIRONMENT>|$DEFAULT_ENVIRONMENT|;s/<DEFAULT_BARF>/$DEFAULT_BARF/;s/<DEFAULT_VERSION>/$DEFAULT_VERSION/;" < $TEMPLATE > $TEMP || + ( echo "$COMMAND: could not copy $TEMPLATE" ; xs=1; exit ) + else + # Which genius thought of iterating through this loop twice, when the + # cp command would suffice? + for file in $TEMP ; do + cat > $file << '__EOF__' +SEND-PR: -*- send-pr -*- +SEND-PR: Lines starting with `SEND-PR' will be removed automatically, as +SEND-PR: will all comments (text enclosed in `<' and `>'). +SEND-PR: +SEND-PR: Please consult the send-pr man page `send-pr(1)' or the Texinfo +SEND-PR: manual if you are not sure how to fill out a problem report. +SEND-PR: Note that the Synopsis field is mandatory. The Subject (for +SEND-PR: the mail) will be made the same as Synopsis unless explicitly +SEND-PR: changed. +SEND-PR: +SEND-PR: Choose from the following categories: +SEND-PR: +__EOF__ + + # Format the categories so they fit onto lines. + CATEGORIES=`${BINDIR}/query-pr --valid-values Category`; + l=`echo "$CATEGORIES" | \ + awk 'BEGIN {max = 0; } { if (length($0) > max) { max = length($0); } } + END {print max + 1;}'` + c=`expr 61 / $l` + if [ $c -eq 0 ]; then c=1; fi + echo "$CATEGORIES" | \ + awk 'BEGIN {printf "SEND-PR: "; i = 0 } + { printf ("%-'$l'.'$l's", $0); + if ((++i % '$c') == 0) { printf "\nSEND-PR: " } } + END { printf "\nSEND-PR:\n"; }' >> $file + + cat >> $file << __EOF__ +To: $MAILADDR +Subject: +From: $FROM +Reply-To: $REPLYTO +Cc: $CC +X-send-pr-version: $VERSION +X-GNATS-Notify: + + +__EOF__ + + # + # Iterate through the list of input fields. fieldname is the + # name of the field. fmtname is the formatted name of the field, + # with >, : and extra spaces to cause the field contents to be + # aligned. + # + ${BINDIR}/query-pr --list-input-fields | awk '{a[NR]=$1""; mnr = NR+1; len = length($1) + 2; if (mlen < len) mlen = len; } END { for (x = 1; x < mnr; x++) { b = ">"a[x]":"; printf ("%s %-"mlen"s&\n", a[x], b); } }' | while read fieldname fmtname + do + fmtname="`echo "$fmtname" | sed 's/[&]$//;'`" + upname="`echo $fieldname | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/;s/-//g;'`" + # Grab the default value for this field. + eval 'default_val="$DEFAULT_'${upname}'"' + # What's stored in the field? + type=`${BINDIR}/query-pr --field-type $fieldname | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + case $type in + enum) + if [ "$default_val" != "" ] + then + desc=$default_val; + else + if [ "$fieldname" != "Category" ] + then + values=`${BINDIR}/query-pr --valid-values $fieldname | tr '\n' ' ' | sed 's/ *$//g;s/ / | /g;s/^/[ /;s/$/ ]/;'` + valslen=`echo "$values" | wc -c` + else + values="choose from a category listed above" + valslen=1; + fi + if [ "$valslen" -gt 160 ] + then + desc="<`${BINDIR}/query-pr --field-description $fieldname` (one line)>"; + else + desc="<${values} (one line)>"; + fi + dpat=`echo "$desc" | tr '\]\[*+^$|\()&/' '............'` + echo "/^>${fieldname}:/ s/${dpat}//" >> $FIXFIL + fi + echo "${fmtname}${desc}" >> $file + ;; + multitext) + if [ "$default_val" != "" ] + then + desc=" $default_val"; + else + desc=" <`${BINDIR}/query-pr --field-description $fieldname` (multiple lines)>"; + dpat=`echo "$desc" | tr '\]\[*+^$|\()&/' '............'` + echo "s/^${dpat}//" >> $FIXFIL + fi + echo "${fmtname}" >> $file; + echo "$desc" >> $file; + ;; + *) + if [ "$default_val" != "" ] + then + desc="${default_val}" + else + desc="<`${BINDIR}/query-pr --field-description $fieldname` (one line)>" + dpat=`echo "$desc" | tr '\]\[*+^$|\()&/' '............'` + echo "/^>${fieldname}:/ s/${dpat}//" >> $FIXFIL + fi + echo "${fmtname}${desc}" >> $file + ;; + esac + done + done + fi + + if [ "$PRINT" = true -o "$PRINT_INTERN" = true ]; then + cat $TEMP + xs=0; exit + fi + + if $BARF + then + ipsec barf >>$TEMP + else + ipsec look >>$TEMP + fi + + cp $TEMP $REF + + chmod u+w $TEMP + if [ -z "$REQUEST_ID" ]; then + eval $EDIT $TEMP + else + ed -s $TEMP << '__EOF__' +/^Subject/s/^Subject:.*/Subject: request for a customer id/ +/^>Category/s/^>Category:.*/>Category: send-pr/ +w +q +__EOF__ + fi + + if cmp -s $REF $TEMP ; then + echo "$COMMAND: problem report not filled out, therefore not sent" + xs=1; exit + fi +fi + +# TEMP is the PR that we are editing. When we're done, REF will contain +# the final PR to be sent. + +while [ -z "$REQUEST_ID" ]; do + CNT=0 + + # + # Remove comments. + # + echo '/^SEND-PR:/d' >> $FIXFIL + sed -f $FIXFIL $TEMP > $REF + + # REF now has the actual PR that we want to send. + + # + # Check that synopsis is not empty. + # + if grep "^>Synopsis:[ ]*$" $REF > /dev/null + then + echo "$COMMAND: Synopsis must not be empty." + CNT=`expr $CNT + 1` + fi + + if [ "x$MAILPROG" = "x" ] + then + # Since we're not using mail, use pr-edit to check the PR. We can't + # do much checking otherwise, sorry. + $LIBEXECDIR/pr-edit --check-initial < $REF || CNT=`expr $CNT + 1` + fi + + [ $CNT -gt 0 -a -z "$BATCH" ] && + echo "Errors were found with the problem report." + + while true; do + if [ -z "$BATCH" ]; then + $ECHON1 "a)bort, e)dit or s)end? $ECHON2" + read input + else + if [ $CNT -eq 0 ]; then + input=s + else + input=a + fi + fi + case "$input" in + a*) + if [ -z "$BATCH" ]; then + echo "$COMMAND: the problem report remains in $BAD and is not sent." + mv $TEMP $BAD + else + echo "$COMMAND: the problem report is not sent." + fi + xs=1; exit + ;; + e*) + eval $EDIT $TEMP + continue 2 + ;; + s*) + break 2 + ;; + esac + done +done + +# +# Make sure the mail has got a Subject. If not, use the same as +# in Synopsis. +# + +if grep '^Subject:[ ]*$' $REF > /dev/null +then + SYNOPSIS=`grep '^>Synopsis:' $REF | sed -e 's/^>Synopsis:[ ]*//'` + ed -s $REF << __EOF__ +/^Subject:/s/:.*\$/: $SYNOPSIS/ +w +q +__EOF__ +fi + +while : +do + if [ "x$MAILPROG" != "x" ] + then + # Use mail to send the PR. + if $MAILPROG < $REF + then + echo "$COMMAND: problem report mailed" + xs=0; exit + else + echo "$MAILPROG failed!" + fi + else + if $LIBEXECDIR/pr-edit --submit < $REF; then + echo "$COMMAND: problem report filed" + xs=0; exit + else + echo "$COMMAND: the problem report is not sent." + fi + fi + while true + do + if [ -z "$BATCH" ]; then + $ECHON1 "a)bort or s)end? (file=$REF) $ECHON2" + read input + case "$input" in + a*) + break 2 ;; + s*) + break ;; + esac + else + break 2; + fi + done +done + +if [ -z "$BATCH" ]; then + echo "$COMMAND: the problem report remains in $BAD and is not sent." + mv $TEMP $BAD +else + echo "$COMMAND: the problem report is not sent, is in $REF." +fi + +xs=1; exit; + +# +# $Log: send-pr.in,v $ +# Revision 1.1 2004/03/15 20:35:31 as +# added files from freeswan-2.04-x509-1.5.3 +# +# Revision 1.10 2003/07/14 12:26:17 mcr +# use | as delimitor for $DEFAULT_ENVIRONMENT. +# switch | to \\| when in $DEFAULT_ENVIRONMENT. +# this is due to PR#236 where the "uname" output +# says GNU/Linux, screwing up sed. +# +# Revision 1.9 2003/02/03 21:51:06 mcr +# if MAILPROG fails, then offer to try again. +# +# Revision 1.8 2002/12/10 02:28:13 mcr +# adjusted template to use gnats-bugs@freeswan.org +# fix sed script to deal with version sanitizer. +# +# Revision 1.7 2002/12/10 02:17:34 mcr +# need to init variables first +# +# Revision 1.6 2002/12/10 02:16:23 mcr +# adjusted send-pr to look at LIBDIR, not LIBEXECDIR +# +# Revision 1.5 2002/09/30 16:04:05 mcr +# fix for sed bug in "send-pr" +# +# Revision 1.4 2002/04/24 07:36:10 mcr +# Moved from ./utils/send-pr.sh,v +# +# Revision 1.3 2001/11/27 15:02:55 mcr +# added rcsids. +# fixed submission address to be freeswan-bugs@freeswan.org +# use new ipsec --versioncode to get version info. +# +# |