Current File : //sbin/mkpop3dcert
#! /bin/sh
#
#
# Copyright 2000-2007 Double Precision, Inc.  See COPYING for
# distribution information.
#
# This is a short script to q`uickly generate a self-signed X.509 key for
# ESMTP STARTTLS.  Normally this script would get called by an automatic
# package installation routine.

CERTNAME=$(basename $0 | sed -e 's/^mk//;s/cert$//')

PEMFILE="$1"

if [ -z "$PEMFILE" ]; then
	# Note: this is not the full file name, but lacking the
	# extension, e.g. just "/etc/courier/esmtpd"
	PEMFILE=/etc/courier/$CERTNAME
fi

if test "gnutls" = "openssl"
then
	test -x /usr/bin/openssl || exit 0
else
	test -x /usr/bin/certtool || exit 0
fi

if test -f "$PEMFILE".pem
then
	echo "${PEMFILE}.pem already exists."
	exit 1
fi

cleanup() {
	rm -f "$PEMFILE".rand
	rm -f "$PEMFILE".pem
	rm -f "$PEMFILE".key
	rm -f "$PEMFILE".cert
	exit 1
}

cd /etc/courier
umask 077
BITS="$BITS"
set -e

install -b -m 600 -o "courier" /dev/null "$PEMFILE".pem

if test "gnutls" = "openssl"
then
	dd if=/dev/urandom of="$PEMFILE".rand count=1 2>/dev/null
	/usr/bin/openssl req -new -x509 -days 365 -nodes \
		  -config /etc/courier/$CERTNAME.cnf -out "$PEMFILE".pem -keyout "$PEMFILE".pem || cleanup

	if test "$BITS" = ""
	then
		BITS="2048"
	fi

	/usr/bin/openssl dhparam -2 -rand "$PEMFILE".rand $BITS >>"$PEMFILE".pem || cleanup
	/usr/bin/openssl x509 -text -noout -in "$PEMFILE".pem > "$PEMFILE".cert || cleanup
	cat "$PEMFILE".cert >>"$PEMFILE".pem
	rm -f "$PEMFILE".rand "$PEMFILE".cert
else
	if test "$BITS" = ""
	then
		BITS="high"
	fi

	install -b -m 600 -o "courier" /dev/null "$PEMFILE".key
	install -v -m 600 -o "courier" /dev/null "$PEMFILE".cert

	/usr/bin/certtool --generate-privkey --sec-param=$BITS --outfile "$PEMFILE".key || cleanup
	/usr/bin/certtool --generate-self-signed --load-privkey "$PEMFILE".key --outfile "$PEMFILE".cert --template /etc/courier/$CERTNAME.cnf || cleanup

	cp /dev/null "$PEMFILE".pem
	chmod 600 "$PEMFILE".pem
	chown courier "$PEMFILE".pem
	cat "$PEMFILE".key "$PEMFILE".cert >"$PEMFILE".pem
	rm -f "$PEMFILE".key "$PEMFILE".cert
fi