doc/share/pgpkeys/addkey.sh

85 lines
2.1 KiB
Bash

#!/bin/sh
#
# $FreeBSD$
#
LANG=C; export LANG
unset LC_ALL
unset LC_MESSAGES
me="$1"
if [ -z "${me}" ]; then
me=$(id -nu)
else
shift
fi
id="$@"
if [ -z "${id}" ]; then
id="${me}@freebsd.org"
fi
gpg=$(which gpg)
if [ ! -x "${gpg}" ]; then
echo "GnuPG does not seem to be installed" >/dev/stderr
exit 1
fi
echo "Retrieving key..."
keylist=$(gpg --list-keys ${id})
echo "${keylist}" | grep '^pub'
id=$(echo "${keylist}" | awk '/^pub/ { print $2 }' | sed 's%.*/%%' | sort -u)
id=$(echo $id)
if [ "${#id}" -lt 8 ]; then
echo "Invalid key ID." >/dev/stderr
exit 1
elif [ "${#id}" -gt 8 ]; then
echo "WARNING: Multiple keys; exporting all. If this is not what you want," >/dev/stderr
echo "WARNING: you should specify a key ID on the command line." >/dev/stderr
fi
fp=$(gpg --fingerprint ${id})
[ $? -eq 0 ] || exit 1
key=$(gpg --no-version --armor --export ${id})
[ $? -eq 0 ] || exit 1
keyfile="${me}.key"
if [ -f "${keyfile}" ]; then
rcsid=$(grep '^<!-- \$Free.*-->$' "${keyfile}")
fi
if [ -z "${rcsid}" ]; then
rcsid='<!-- $''FreeBSD''$ -->'
fi
echo "Generating ${keyfile}..."
(
echo "${rcsid}"
echo '<!--'
echo "sh $0 ${me} ${id};"
echo '-->'
echo '<programlisting role="pgpfingerprint"><![CDATA['
echo "${fp}"
echo ']]></programlisting>'
echo '<programlisting role="pgpkey"><![CDATA['
echo "${key}"
echo ']]></programlisting>'
) >"${keyfile}"
echo "Adding key to entity list..."
mv pgpkeys.ent pgpkeys.ent.orig || exit 1
(
cat pgpkeys.ent.orig
printf '<!ENTITY pgpkey.%.*s SYSTEM "%s">' 16 "${me}" "${keyfile}"
) | sort -u >pgpkeys.ent
echo
echo "Unless you are already listed there, you should now add the"
echo "following text to chapter.sgml in the appropriate position in"
echo "the developer section (unless this is a role key or you are a"
echo "core member.) Remember to keep the list sorted by last name!"
echo
echo " <sect2 id=\"pgpkey-${me}\">"
echo " <title>&a.${me};</title>"
echo " &pgpkey.${me};"
echo " </sect2>"
echo
echo "If this is a new entry, don't forget to 'cvs add ${keyfile}',"
echo "and to commit both ${keyfile} and pgpkeys.ent."