X-Git-Url: https://git.distorted.org.uk/~mdw/distorted-keys/blobdiff_plain/c47f2aba7d705252c660ba1ad0931fbb93122d80..0a155096e0d101cb30fbeccdfb630e0f14c0aaf9:/keyfunc.sh.in diff --git a/keyfunc.sh.in b/keyfunc.sh.in index ca14782..5b6320e 100644 --- a/keyfunc.sh.in +++ b/keyfunc.sh.in @@ -28,15 +28,26 @@ quis=${0##*/} ###-------------------------------------------------------------------------- ### Configuration variables. +## Automatically configured pathnames. PACKAGE="@PACKAGE@" VERSION="@VERSION@" bindir="@bindir@" -case ":$PATH:" in *:"$bindir":*) ;; *) PATH=$bindir:$PATH ;; esac - +## Read user configuration. if [ -f $ETC/keys.conf ]; then . $ETC/keys.conf; fi +## Maybe turn on debugging. case "${KEYS_DEBUG+t}" in t) set -x ;; esac +## Fake up caller credentials if not called via userv. +case "${USERV_USER+t}" in + t) ;; + *) USERV_USER=${LOGNAME-${USER-$(id -un)}} USERV_UID=$(id -u) ;; +esac +case "${USERV_GROUP+t}" in + t) ;; + *) USERV_GROUP=$(id -Gn) USERV_GID=$(id -gn) ;; +esac + ###-------------------------------------------------------------------------- ### Cleanup handling. @@ -163,7 +174,7 @@ getsysprofile () { profile=$1 ## Write the named system PROFILE to standard output. - $bindir/extract-profile $ETC/profile.d/ "$profile" + $bindir/extract-profile "$profile" $ETC/profile.d/ } setprops () { @@ -227,9 +238,9 @@ defprops g_props </dev/null \ - if=/dev/${kprop_random-random} bs=1 count=${kprop_nubsz-512} | - openssl dgst -${kprop_nubhash-sha384} -binary | + if=/dev/${kprop_random-random} bs=1 count=${kprop_nub_random_bytes-64} | + openssl dgst -${kprop_nub_hash-sha256} -binary | openssl base64 } nubid () { ## Compute a hash of the key nub in stdin, and write it to stdout in hex. - ## The property `nubidhash' is used. + ## The property `nubid_hash' is used. { echo "distorted-keys nubid"; cat -; } | - openssl dgst -${kprop_nubidhash-sha256} + openssl dgst -${kprop_nubid_hash-sha256} } subst () { @@ -353,7 +365,7 @@ read_profile () { userv "$user" cryptop-profile "$label" >$tmp/profile ;; nil) - $bindir/extract-profile $ETC/profile.d/ "$label" >$tmp/profile + $bindir/extract-profile "$label" $ETC/profile.d/ >$tmp/profile ;; esac @@ -424,7 +436,8 @@ k_verify () { notsupp verify; } prepare () { key=$1 op=$2 ## Prepare for a crypto operation OP, using the KEY. This validates the - ## key label, reads the profile, and checks the access-control list. + ## key label, reads the profile, and checks the access-control list. If OP + ## is `-' then allow the operation unconditionally. ## Find the key properties. parse_keylabel "$key" @@ -434,6 +447,7 @@ prepare () { ## Check whether we're allowed to do this thing. This is annoyingly ## fiddly. + case $op in -) return ;; esac eval acl=\${kprop_acl_$op-!owner} verdict=forbid while :; do @@ -474,7 +488,7 @@ prepare () { done case $verdict in - forbid) echo >&2 "$quis: $op access to key \`$key' forbidden"; exit ;; + forbid) echo >&2 "$quis: $op access to key \`$key' forbidden"; exit 1 ;; esac }