summaryrefslogtreecommitdiff
path: root/src/share
diff options
context:
space:
mode:
Diffstat (limited to 'src/share')
-rw-r--r--src/share/mh/set_expire27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/share/mh/set_expire b/src/share/mh/set_expire
index 68a8dfd..f9a5507 100644
--- a/src/share/mh/set_expire
+++ b/src/share/mh/set_expire
@@ -19,20 +19,25 @@ set_expire() {
local extendBy
local keyID
-if [ -z "$1" ] ; then
- cat <<EOF >&2
-Must specify expiration. The possibilities are:
+local formatMsg='
+The possibilities are:
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
- <n>y = key expires in n years
-EOF
- failure
+ <n>y = key expires in n years'
+
+
+if [ -z "$1" ] ; then
+ failure "Must specify expiration.$formatMsg"
fi
extendBy="$1"
shift
+if ! <<<"$extendBy" egrep -q '^[[:digit:]]+[wmy]?$' ; then
+ failure "'$extendBy' is not a valid expiration date.$formatMsg"
+fi
+
keyID=$(check_key_input "$@")
if [ "$PROMPT" != "false" ] ; then
@@ -55,6 +60,16 @@ EOF
update_pgp_pub_file
+if [ 0 == "$extendBy" ] ; then
+ log info "Key ${keyID} no longer expires."
+else
+ if expiry=$(gpg_host_list_keys "${keyID}" | grep ^pub: | head -n1 | cut -f7 -d: ) ; then
+ log info "Key ${keyID} now expires at $(date '+%F %T' --date "1970-01-01 0:00 UTC + ${expiry} seconds")"
+ else
+ log error "Failed to retrieve new expiration date for key ${keyID}"
+ fi
+fi
+
log info <<EOF
NOTE: Key expiration date adjusted, but not yet published.
Run '$PGRM publish-key' to publish the new expiration date.