fix bugs in authorized_* file permission checking.
authorJameson Graef Rollins <jrollins@phys.columbia.edu>
Tue, 28 Oct 2008 18:37:04 +0000 (14:37 -0400)
committerJameson Graef Rollins <jrollins@phys.columbia.edu>
Tue, 28 Oct 2008 18:46:02 +0000 (14:46 -0400)
debian/changelog
debian/control
src/common
src/monkeysphere
src/monkeysphere-server

index 83253a68496226fc65b82ee72233c0dc5276f4c8..31319024b9c421fe389cd4dd5b20303295da13c3 100644 (file)
@@ -1,3 +1,9 @@
+monkeysphere (0.18-1) UNRELEASED; urgency=low
+
+  * Fix bugs in authorized_{user_ids,keys} file permission checking.
+
+ -- Jameson Graef Rollins <jrollins@phys.columbia.edu>  Tue, 28 Oct 2008 14:36:16 -0400
+
 monkeysphere (0.17-1) experimental; urgency=low
 
   [ Jameson Graef Rollins ]  
index 8f5aeef99690523860cb415d0aea1464586a72af..efd734bc63fac199fc97996f9bb7254c50d4d7f1 100644 (file)
@@ -2,7 +2,7 @@ Source: monkeysphere
 Section: net
 Priority: extra
 Maintainer: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
-Uploaders: Jameson Rollins <jrollins@fifthhorseman.net>
+Uploaders: Jameson Graef Rollins <jrollins@phys.columbia.edu>
 Build-Depends: debhelper (>= 7.0), libgnutls-dev (>= 2.4.0)
 Standards-Version: 3.8.0.1
 Homepage: http://web.monkeysphere.info/
index 5d92b26f0a283d6cc1ea4d113eb54f9a3fd5696b..68a69e94ba6cf891d557915f686d5dcedc43ae8b 100644 (file)
@@ -24,7 +24,7 @@ export SYSCONFIGDIR
 
 # failure function.  exits with code 255, unless specified otherwise.
 failure() {
-    echo "$1" >&2
+    [ "$1" ] && echo "$1" >&2
     exit ${2:-'255'}
 }
 
@@ -393,8 +393,9 @@ test_gpg_expire() {
 # check that a file is properly owned, and that all it's parent
 # directories are not group/other writable
 check_key_file_permissions() {
-    local user
+    local uname
     local path
+    local stat
     local access
     local gAccess
     local oAccess
@@ -404,30 +405,36 @@ check_key_file_permissions() {
        [ "$1" = "w" ]
     }
 
-    user="$1"
+    uname="$1"
     path="$2"
 
-    # return 0 is path does not exist
-    [ -e "$path" ] || return 0
+    # return 255 if cannot stat file
+    if ! stat=$(ls -ld "$path" 2>/dev/null) ; then
+        log error "could not stat path '$path'."
+       return 255
+    fi
 
-    owner=$(ls -l "$path" | awk '{ print $3 }')
-    gAccess=$(ls -l "$path" | cut -c6)
-    oAccess=$(ls -l "$path" | cut -c9)
+    owner=$(echo "$stat" | awk '{ print $3 }')
+    gAccess=$(echo "$stat" | cut -c6)
+    oAccess=$(echo "$stat" | cut -c9)
 
-    # check owner
-    if [ "$owner" != "$user" -a "$owner" != 'root' ] ; then
+    # return 1 if path has invalid owner
+    if [ "$owner" != "$uname" -a "$owner" != 'root' ] ; then
+       log error "improper ownership on path '$path'."
        return 1
     fi
 
-    # check group/other writability
+    # return 2 if path has group or other writability
     if is_write "$gAccess" || is_write "$oAccess" ; then
+       log error "improper group or other writability on path '$path'."
        return 2
     fi
 
+    # return zero if all clear, or go to next path
     if [ "$path" = '/' ] ; then
        return 0
     else
-       check_key_file_permissions $(dirname "$path")
+       check_key_file_permissions "$uname" $(dirname "$path")
     fi
 }
 
@@ -1018,7 +1025,7 @@ process_authorized_user_ids() {
     log debug "processing authorized_user_ids file..."
 
     if ! meat "$authorizedUserIDs" > /dev/null ; then
-       log debug "no user IDs to process."
+       log debug " no user IDs to process."
        return
     fi
 
index dd689b5bfd45ca4b5dc6abbe97fe59b6096b7ac5..5703995f5edff3a21ca9e3de6bbea885c86be8c9 100755 (executable)
@@ -347,14 +347,10 @@ case $COMMAND in
        MODE='authorized_keys'
 
        # check permissions on the authorized_user_ids file path
-       if ! check_key_file_permissions "$USER" "$AUTHORIZED_USER_IDS" ; then
-           failure "Improper permissions on authorized_user_ids file path."
-       fi
+       check_key_file_permissions "$USER" "$AUTHORIZED_USER_IDS" || failure
 
        # check permissions on the authorized_keys file path
-       if ! check_key_file_permissions "$USER" "$AUTHORIZED_KEYS" ; then
-           failure "Improper permissions on authorized_keys file path."
-       fi
+       check_key_file_permissions "$USER" "$AUTHORIZED_KEYS" || failure
 
         # exit if the authorized_user_ids file is empty
        if [ ! -e "$AUTHORIZED_USER_IDS" ] ; then
index 6ca6a4f7a3b4d6023cc39014a78c65e2c1f13322..617c10a19ceeea4e7a73ab6facded3a1177e71cc 100755 (executable)
@@ -213,7 +213,7 @@ update_users() {
                    ". ${SYSSHAREDIR}/common; process_authorized_user_ids $TMP_AUTHORIZED_USER_IDS"
                RETURN="$?"
            else
-               log error "Improper permissions on path '$AUTHORIZED_USER_IDS'."
+               log verbose "not processing authorized_user_ids."
            fi
        fi
 
@@ -226,7 +226,7 @@ update_users() {
                log verbose "adding raw authorized_keys file... "
                cat "$rawAuthorizedKeys" >> "$AUTHORIZED_KEYS"
            else
-               log error "Improper permissions on path '$RAW_AUTHORIZED_KEYS'.  Not added to authorized_keys file."
+               log verbose "not adding raw authorized_keys file."              
            fi
        fi
 
@@ -371,7 +371,7 @@ EOF
     (umask 077 && \
        gpg_host --export-secret-key "$fingerprint" | \
        openpgp2ssh "$fingerprint" > "${SYSDATADIR}/ssh_host_rsa_key")
-    log info "Private SSH host key output to file: ${SYSDATADIR}/ssh_host_rsa_key"
+    log info "private SSH host key output to file: ${SYSDATADIR}/ssh_host_rsa_key"
 }
 
 # extend the lifetime of a host key: