improve license notices
[vpn-setup] / vpn-mk-client-cert
index 014008dbe21a5b87be52bc3a36ca703a918fe55e..7bad5446f87bd6998297dcf470457ee09fd52815 100755 (executable)
@@ -1,5 +1,12 @@
 #!/bin/bash
-# Copyright (C) 2016 Ian Kelling
+# I, Ian Kelling, follow the GNU license recommendations at
+# https://www.gnu.org/licenses/license-recommendations.en.html. They
+# recommend that small programs, < 300 lines, be licensed under the
+# Apache License 2.0. This file contains or is part of one or more small
+# programs. If a small program grows beyond 300 lines, I plan to switch
+# its license to GPL.
+
+# Copyright 2024 Ian Kelling
 
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -13,6 +20,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+
 set -eE -o pipefail
 trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
 
@@ -40,7 +48,7 @@ usage: ${0##*/} VPN_SERVER_HOST
 -f               Force. Proceed even if cert already exists.
 -n CONFIG_NAME   default is client
 -o SERVER_CONFIG_NAME  Default is CONFIG_NAME
--r               Install certs to the current directory instead of /etc/openvpn
+-r               Install certs to the current directory instead of /etc/openvpn/client
 -s SCRIPT_PATH   Use custom up/down script at SCRIPT_PATH. If client host is
                  not localhost, the script is copied to it. The default
                  script used to be /etc/openvpn/update-resolv-conf, but now
@@ -127,8 +135,25 @@ else
   keydir=/etc/openvpn/client
 fi
 
-port=$(echo '/^port/ {print $2}' | ssh $ssh_arg root@$host awk -f - /etc/openvpn/server/$name.conf | tail -n1)
 
+if ! $force; then
+  cert_to_test=$f
+  if [[ $client_host ]]; then
+    cert_to_test=$(mktemp)
+    ssh $ssh_arg root@$client_host cat $f 2>/dev/null >$cert_to_test ||:
+  fi
+  if openssl x509 -checkend $(( 60 * 60 * 24 * 30 )) -noout -in $cert_to_test &>/dev/null; then
+    if [[ $client_host ]]; then
+      prefix="$shell"
+    fi
+    if $prefix test -s $keydir/ta-$name.key -a -s $keydir/ca-$name.crt; then
+      echo "$0: cert already exists. exiting early"
+      exit 0
+    fi
+  fi
+fi
+
+port=$(echo '/^port/ {print $2}' | ssh $ssh_arg root@$host awk -f - /etc/openvpn/server/$name.conf | tail -n1)
 
 $shell "dd of=$keydir/$name.conf" <<EOF
 # From example config, from debian stretch to buster
@@ -185,21 +210,6 @@ if ! $rel; then
   $shell 'cd /etc/openvpn; for f in client/*; do ln -sf $f .; done'
 fi
 
-cert_to_test=$f
-if [[ $client_host ]]; then
-  cert_to_test=$(mktemp)
-  ssh $ssh_arg root@$client_host cat $f 2>/dev/null >$cert_to_test ||:
-fi
-if ! $force && openssl x509 -checkend $(( 60 * 60 * 24 * 30 )) -noout -in $cert_to_test &>/dev/null; then
-  if [[ $client_host ]]; then
-    prefix="$shell"
-  fi
-  if $prefix test -s $keydir/ta-$name.key -a -s $keydir/ca-$name.crt; then
-    echo "$0: cert already exists. exiting early"
-  fi
-  exit 0
-fi
-
 if ! $rel; then
   dirarg="-C $keydir"
 fi