aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rwxr-xr-xlib/keyringer/csr.sh145
-rw-r--r--lib/keyringer/functions52
2 files changed, 47 insertions, 150 deletions
diff --git a/lib/keyringer/csr.sh b/lib/keyringer/csr.sh
deleted file mode 100755
index 881a46f..0000000
--- a/lib/keyringer/csr.sh
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/bin/sh
-# csr.sh: Certificate Signing Request Generator
-# Copyright(c) 2005 Evaldo Gardenali <evaldo@gardenali.biz>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# ChangeLog:
-# Mon May 23 00:14:37 BRT 2005 - evaldo - Initial Release
-# Thu Nov 3 10:11:51 GMT 2005 - chrisc - $HOME removed so that key and csr
-# are generated in the current directory
-# Wed Nov 16 10:42:42 GMT 2005 - chrisc - Updated to match latest version on
-# the CAcert wiki, rev #73
-# http://wiki.cacert.org/wiki/VhostTaskForce
-# Mon Jan 4 18:37:28 BRST 2010 - rhatto - Support for non-interactive mode
-
-
-# be safe about permissions
-LASTUMASK=`umask`
-umask 077
-
-# OpenSSL for HPUX needs a random file
-RANDOMFILE="$HOME/.rnd"
-
-# create a config file for openssl
-CONFIG=`mktemp -q /tmp/openssl-conf.XXXXXXXX`
-if [ ! $? -eq 0 ]; then
- echo "Could not create temporary config file. exiting"
- exit 1
-fi
-
-echo "Private Key and Certificate Signing Request Generator"
-echo "This script was designed to suit the request format needed by"
-echo "the CAcert Certificate Authority. www.CAcert.org"
-echo
-
-HOST="$1"
-COMMONNAME="$2"
-SAN="$3"
-
-if [ -z "$HOST" ]; then
- printf "Short Hostname (ie. imap big_srv www2): "
- read HOST
-fi
-
-if [ -z "$COMMONNAME" ]; then
- printf "FQDN/CommonName (ie. www.example.com) : "
- read COMMONNAME
-fi
-
-if [ -z "$SAN" ]; then
- echo "Type SubjectAltNames for the certificate, one per line. Enter a blank line to finish"
- SAN=1 # bogus value to begin the loop
- SANAMES="" # sanitize
- while [ ! "$SAN" = "" ]; do
- printf "SubjectAltName: DNS:"
- read SAN
- if [ "$SAN" = "" ]; then break; fi # end of input
- if [ "$SANAMES" = "" ]; then
- SANAMES="DNS:$SAN"
- else
- SANAMES="$SANAMES,DNS:$SAN"
- fi
- done
-else
- SANAMES="DNS:$SAN"
-fi
-
-# Config File Generation
-
-cat <<EOF > "$CONFIG"
-# -------------- BEGIN custom openssl.cnf -----
- HOME = $HOME
-EOF
-
-if [ "`uname -s`" = "HP-UX" ]; then
- echo " RANDFILE = $RANDOMFILE" >> "$CONFIG"
-fi
-
-cat <<EOF >> "$CONFIG"
- oid_section = new_oids
- [ new_oids ]
- [ req ]
- default_days = 730 # how long to certify for
- default_keyfile = ${HOST}_privatekey.pem
- distinguished_name = req_distinguished_name
- encrypt_key = no
- string_mask = nombstr
-EOF
-
-if [ ! "$SANAMES" = "" ]; then
- echo "req_extensions = v3_req # Extensions to add to certificate request" >> "$CONFIG"
-fi
-
-cat <<EOF >> "$CONFIG"
- [ req_distinguished_name ]
- commonName = Common Name (eg, YOUR name)
- commonName_default = $COMMONNAME
- commonName_max = 64
- [ v3_req ]
-EOF
-
-if [ ! "$SANAMES" = "" ]; then
- echo "subjectAltName=$SANAMES" >> "$CONFIG"
-fi
-
-echo "# -------------- END custom openssl.cnf -----" >> "$CONFIG"
-
-echo "Running OpenSSL..."
-# The first one doesn't work, the second one does:
-#openssl req -batch -config "$CONFIG" -newkey rsa -out ${HOST}_csr.pem
-openssl req -batch -config "$CONFIG" -newkey rsa:2048 -out "${HOST}_csr.pem"
-
-echo "Copy the following Certificate Request and paste into CAcert website to obtain a Certificate."
-echo "When you receive your certificate, you 'should' name it something like ${HOST}_server.pem"
-echo
-cat ${HOST}_csr.pem
-echo
-printf "The Certificate request is also available in '%s_csr.pem'\n" "$HOST"
-printf "The Private Key is stored in '%s_privatekey.pem'\n" "$HOST"
-echo
-
-rm "$CONFIG"
-
-#restore umask
-umask "$LASTUMASK"
-
diff --git a/lib/keyringer/functions b/lib/keyringer/functions
index a1c95a8..dc1ce0f 100644
--- a/lib/keyringer/functions
+++ b/lib/keyringer/functions
@@ -225,15 +225,45 @@ function keyringer_set_env {
# Configuration version tracking to help keyring upgrades
function keyringer_check_version {
+ if [ "$KEYRINGER_CHECK_VERSION" == "false" ]; then
+ return
+ fi
+
if [ ! -f "$VERSION_INFO" ]; then
- echo "Creating configuration version file..."
- echo 0 > "$VERSION_INFO"
- if keyringer_is_git "$BASEDIR"; then
- keyringer_exec git "$BASEDIR" add config/version
+ echo "Configuration version file not found, trying to pull from remotes..."
+ # Do not use keyringer_exec as it would trigger keyringer_check_version again
+ ( cd "$BASEDIR" && git pull )
+
+ if [ ! -f "$VERSION_INFO" ]; then
+ echo "Creating configuration version file..."
+ echo 0 > "$VERSION_INFO"
+ if keyringer_is_git "$BASEDIR"; then
+ keyringer_exec git "$BASEDIR" add config/version
+ echo "Pushing configuration version file to remotes..."
+ for remote in "$BASEDIR/.git/refs/remotes/*"; do
+ keyringer_exec git "$BASEDIR" push $remote master
+ done
+ fi
fi
fi
VERSION="`cat $VERSION_INFO`"
+
+ # Check if config version is supported by keyringer
+ if [ "$VERSION" != "$KEYRINGER_VERSION" ]; then
+ echo "Configuration version differs from keyringer version, trying to pull from remotes"
+ # Do not use keyringer_exec as it would trigger keyringer_check_version again
+ ( cd "$BASEDIR" && git pull )
+
+ if [ "$VERSION" != "$KEYRINGER_VERSION" ]; then
+ NEWEST="`echo -e "$VERSION\n$KEYRINGER_VERSION" | sort -V | tail -n 1`"
+ if [ "$NEWEST" == "$VERSION" ]; then
+ echo "Fatal: keyringer version: $KEYRINGER_VERSION / config version: $VERSION"
+ echo "Please upgrade your keyringer application"
+ exit 1
+ fi
+ fi
+ fi
}
# Configuration upgrades
@@ -248,7 +278,10 @@ function keyringer_upgrade {
keyringer_exec git "$BASEDIR" add $RECIPIENTS_BASE/default
keyringer_exec git "$BASEDIR" add config/version
keyringer_exec git "$BASEDIR" commit -m "Config-upgrade-0.1"
- echo "Upgrade to version 0.1 completed"
+ echo "Upgrade to version 0.1 completed, pushing to remotes..."
+ for remote in "$BASEDIR/.git/refs/remotes/*"; do
+ keyringer_exec git "$BASEDIR" push $remote master
+ done
fi
# Update version information
@@ -307,6 +340,10 @@ function keyringer_action_usage {
# Check recipients
function keyringer_check_recipients {
+ if [ "$KEYRINGER_CHECK_RECIPIENTS" == "false" ]; then
+ return
+ fi
+
# Check if recipients file is empty.
if [ "`grep -vE "^#|^$" "$RECIPIENTS"/* | wc -l`" == 0 ] && [ "$SUBCOMMAND" != "edit" ]; then
echo "Fatal: no recipients configured for this keyring."
@@ -359,6 +396,7 @@ function keyringer_set_recipients {
keyringer_set_default_recipients
else
candidate="$1"
+ candidate_no_extension="`echo $1 | sed -e 's/.asc$//'`"
# Find the first matching recipient
while [ ! -z "$candidate" ] && [ "$candidate" != "." ] && [ "$candidate" != "/" ]; do
@@ -366,6 +404,10 @@ function keyringer_set_recipients {
RECIPIENTS_FILE="$RECIPIENTS/$candidate"
RECIPIENTS_FILE_BASE="$RECIPIENTS_BASE/$candidate"
return
+ elif [ -e "$RECIPIENTS/$candidate_no_extension" ]; then
+ RECIPIENTS_FILE="$RECIPIENTS/$candidate_no_extension"
+ RECIPIENTS_FILE_BASE="$RECIPIENTS_BASE/$candidate_no_extension"
+ return
fi
candidate="`dirname $candidate`"