adding directions on how to build a deb package from the source.
[monkeysphere.git] / src / common
index 4fec4520026ea02e6e696108778848cd2daf3abd..22ed1b15dd5580e318d5fd20ae3b201f6679f213 100644 (file)
@@ -98,11 +98,12 @@ cutline() {
 lock() {
     local use_lockfileprogs=true
     local action="$1"
-    local file="$file"
+    local file="$2"
 
     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)
@@ -133,6 +134,54 @@ lock() {
     esac
 }
 
+
+# for portability, between gnu date and BSD date.
+# arguments should be:  number longunits format
+
+# e.g. advance_date 20 seconds +%F
+advance_date() {
+    local gnutry
+    local number="$1"
+    local longunits="$2"
+    local format="$3"
+    local shortunits
+
+    # try things the GNU way first 
+    if date -d "$number $longunits" "$format" >&/dev/null ; then
+       date -d "$number $longunits" "$format"
+    else
+       # otherwise, convert to (a limited version of) BSD date syntax:
+       case "$longunits" in
+           years)
+               shortunits=y
+               ;;
+           months)
+               shortunits=m
+               ;;
+           weeks)
+               shortunits=w
+               ;;
+           days)
+               shortunits=d
+               ;;
+           hours)
+               shortunits=H
+               ;;
+           minutes)
+               shortunits=M
+               ;;
+           seconds)
+               shortunits=S
+               ;;
+           *)
+               # this is a longshot, and will likely fail; oh well.
+               shortunits="$longunits"
+       esac
+       date "-v+${number}${shortunits}" "$format"
+    fi
+}
+
+
 # check that characters are in a string (in an AND fashion).
 # used for checking key capability
 # check_capability capability a [b...]
@@ -350,9 +399,9 @@ check_key_file_permissions() {
     local gAccess
     local oAccess
 
-    # function to check that an octal corresponds to writability
+    # function to check that the given permission corresponds to writability
     is_write() {
-       [ "$1" -eq 2 -o "$1" -eq 3 -o "$1" -eq 6 -o "$1" -eq 7 ]
+       [ "$1" = "w" ]
     }
 
     user="$1"
@@ -361,10 +410,9 @@ check_key_file_permissions() {
     # return 0 is path does not exist
     [ -e "$path" ] || return 0
 
-    owner=$(stat --format '%U' "$path")
-    access=$(stat --format '%a' "$path")
-    gAccess=$(echo "$access" | cut -c2)
-    oAccess=$(echo "$access" | cut -c3)
+    owner=$(ls -l "$path" | awk '{ print $3 }')
+    gAccess=$(ls -l "$path" | cut -c6)
+    oAccess=$(ls -l "$path" | cut -c9)
 
     # check owner
     if [ "$owner" != "$user" -a "$owner" != 'root' ] ; then
@@ -725,7 +773,7 @@ process_host_known_hosts() {
            if [ "$HASH_KNOWN_HOSTS" = 'true' ] ; then
                # FIXME: this is really hackish cause ssh-keygen won't
                # hash from stdin to stdout
-               tmpfile=$(mktemp)
+               tmpfile=$(mktemp ${TMPDIR:-/tmp}/tmp.XXXXXXXXXX)
                ssh2known_hosts "$host" "$sshKey" > "$tmpfile"
                ssh-keygen -H -f "$tmpfile" 2> /dev/null
                cat "$tmpfile" >> "$KNOWN_HOSTS"
@@ -788,7 +836,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 +979,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