From fa2aeb658c22784edbb5a890e5de648b41069252 Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor Date: Fri, 5 Sep 2008 11:21:29 -0400 Subject: abstract lockfile functions to be able to Depend: lockfile-progs | lockfile --- src/common | 72 +++++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 57 insertions(+), 15 deletions(-) (limited to 'src/common') diff --git a/src/common b/src/common index 2b05c3c..4fec452 100644 --- a/src/common +++ b/src/common @@ -91,6 +91,48 @@ cutline() { head --line="$1" "$2" | tail -1 } +# this is a wrapper for doing lock functions. +# +# it lets us depend on either lockfile-progs (preferred) or procmail's +# lockfile, and should +lock() { + local use_lockfileprogs=true + local action="$1" + local file="$file" + + if ! ( which lockfile-create >/dev/null 2>/dev/null ) ; then + if ! ( which lockfile >/dev/null ); then + failure "Neither lockfile-create nor lockfile are in the path!" + use_lockfileprogs= + fi + + case "$action" in + create) + if [ -n "$use_lockfileprogs" ] ; then + lockfile-create "$file" || failure "unable to lock '$file'" + else + lockfile -r 20 "${file}.lock" || failure "unable to lock '$file'" + fi + ;; + touch) + if [ -n "$use_lockfileprogs" ] ; then + lockfile-touch "$file" + else + # Nothing to do here + fi + ;; + remove) + if [ -n "$use_lockfileprogs" ] ; then + lockfile-remove "$file" + else + rm -f "${file}.lock" + fi + ;; + *) + failure "bad argument for lock subfunction '$action'" + esac +} + # check that characters are in a string (in an AND fashion). # used for checking key capability # check_capability capability a [b...] @@ -724,11 +766,10 @@ update_known_hosts() { nHostsOK=0 nHostsBAD=0 - # set the trap to remove any lockfiles on exit - trap "lockfile-remove $KNOWN_HOSTS" EXIT - - # create a lockfile on known_hosts - lockfile-create "$KNOWN_HOSTS" + # create a lockfile on known_hosts: + lock create "$KNOWN_HOSTS" + # FIXME: we're discarding any pre-existing EXIT trap; is this bad? + trap "lock remove $KNOWN_HOSTS" EXIT # note pre update file checksum fileCheck="$(file_hash "$KNOWN_HOSTS")" @@ -747,11 +788,12 @@ update_known_hosts() { esac # touch the lockfile, for good measure. - lockfile-touch --oneshot "$KNOWN_HOSTS" + lock touch --oneshot "$KNOWN_HOSTS" done - # remove the lockfile - lockfile-remove "$KNOWN_HOSTS" + # remove the lockfile and the trap + lock remove "$KNOWN_HOSTS" + trap - EXIT # note if the known_hosts file was updated if [ "$(file_hash "$KNOWN_HOSTS")" != "$fileCheck" ] ; then @@ -862,11 +904,10 @@ update_authorized_keys() { nIDsOK=0 nIDsBAD=0 - # set the trap to remove any lockfiles on exit - trap "lockfile-remove $AUTHORIZED_KEYS" EXIT - # create a lockfile on authorized_keys - lockfile-create "$AUTHORIZED_KEYS" + lock create "$AUTHORIZED_KEYS" + # FIXME: we're discarding any pre-existing EXIT trap; is this bad? + trap "lock remove $AUTHORIZED_KEYS" EXIT # note pre update file checksum fileCheck="$(file_hash "$AUTHORIZED_KEYS")" @@ -890,11 +931,12 @@ update_authorized_keys() { esac # touch the lockfile, for good measure. - lockfile-touch --oneshot "$AUTHORIZED_KEYS" + lock touch --oneshot "$AUTHORIZED_KEYS" done - # remove the lockfile - lockfile-remove "$AUTHORIZED_KEYS" + # remove the lockfile and the trap + lock remove "$AUTHORIZED_KEYS" + trap - EXIT # note if the authorized_keys file was updated if [ "$(file_hash "$AUTHORIZED_KEYS")" != "$fileCheck" ] ; then -- cgit v1.2.3 From a266aa89051dad0e057c1e042d483b9f86e67e59 Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor Date: Fri, 5 Sep 2008 13:09:26 -0400 Subject: fix lockfile wrapper; it was sloppily constructed. --- src/common | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/common') diff --git a/src/common b/src/common index 4fec452..40ba8de 100644 --- a/src/common +++ b/src/common @@ -103,6 +103,7 @@ lock() { if ! ( which lockfile-create >/dev/null 2>/dev/null ) ; then if ! ( which lockfile >/dev/null ); then failure "Neither lockfile-create nor lockfile are in the path!" + fi use_lockfileprogs= fi @@ -116,9 +117,9 @@ lock() { ;; touch) if [ -n "$use_lockfileprogs" ] ; then - lockfile-touch "$file" + lockfile-touch --oneshot "$file" else - # Nothing to do here + : Nothing to do here fi ;; remove) @@ -131,7 +132,7 @@ lock() { *) failure "bad argument for lock subfunction '$action'" esac -} + # check that characters are in a string (in an AND fashion). # used for checking key capability @@ -788,7 +789,7 @@ update_known_hosts() { esac # touch the lockfile, for good measure. - lock touch --oneshot "$KNOWN_HOSTS" + lock touch "$KNOWN_HOSTS" done # remove the lockfile and the trap @@ -931,7 +932,7 @@ update_authorized_keys() { esac # touch the lockfile, for good measure. - lock touch --oneshot "$AUTHORIZED_KEYS" + lock touch "$AUTHORIZED_KEYS" done # remove the lockfile and the trap -- cgit v1.2.3 From 74bd3557fe340555629fd8615c31fe4b6a8b8174 Mon Sep 17 00:00:00 2001 From: Jameson Graef Rollins Date: Fri, 5 Sep 2008 10:40:31 -0700 Subject: add curly brace end to lock function that was oddly removed at one point. --- src/common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/common') diff --git a/src/common b/src/common index 40ba8de..25f7e4e 100644 --- a/src/common +++ b/src/common @@ -132,7 +132,7 @@ lock() { *) failure "bad argument for lock subfunction '$action'" esac - +} # check that characters are in a string (in an AND fashion). # used for checking key capability -- cgit v1.2.3