checking a keyserver should warn at level INFO, since it is a potential information...
[monkeysphere.git] / src / common
index 34d9b5adfcace1cf8cf4858788a03d602ade4e4a..7768335082be95af78567a26983897e38a6229f1 100644 (file)
@@ -4,6 +4,8 @@
 #
 # Written by
 # Jameson Rollins <jrollins@fifthhorseman.net>
+# Jamie McClelland <jm@mayfirst.org>
+# Daniel Kahn Gillmor <dkg@fifthhorseman.net>
 #
 # Copyright 2008, released under the GPL, version 3 or later
 
@@ -26,15 +28,57 @@ failure() {
     exit ${2:-'255'}
 }
 
-# write output to stderr
+# write output to stderr based on specified LOG_LEVEL the first
+# parameter is the priority of the output, and everything else is what
+# is echoed to stderr
 log() {
+    local priority
     local level
+    local output
+    local alllevels
+    local found=
 
-    level="$1"
+    # don't include SILENT in alllevels: it's handled separately
+    # list in decreasing verbosity (all caps).
+    # separate with $IFS explicitly, since we do some fancy footwork
+    # elsewhere.
+    alllevels="DEBUG${IFS}VERBOSE${IFS}INFO${IFS}ERROR"
+
+    # translate lowers to uppers in global log level
+    LOG_LEVEL=$(echo "$LOG_LEVEL" | tr "[:lower:]" "[:upper:]")
+
+    # just go ahead and return if the log level is silent
+    if [ "$LOG_LEVEL" = 'SILENT' ] ; then
+       return
+    fi
+
+    for level in $alllevels ; do 
+       if [ "$LOG_LEVEL" = "$level" ] ; then
+           found=true
+       fi
+    done
+    if [ -z "$found" ] ; then
+       # default to INFO:
+       LOG_LEVEL=INFO
+    fi
+
+    # get priority from first parameter, translating all lower to
+    # uppers
+    priority=$(echo "$1" | tr "[:lower:]" "[:upper:]")
     shift
 
-    echo -n "ms: " >&2
-    echo "$@" >&2
+    # scan over available levels
+    for level in $alllevels ; do
+       # output if the log level matches, set output to true
+       # this will output for all subsequent loops as well.
+       if [ "$LOG_LEVEL" = "$level" ] ; then
+           output=true
+       fi
+       if [ "$priority" = "$level" -a "$output" = 'true' ] ; then
+           echo -n "ms: " >&2
+           echo "$@" >&2
+       fi
+    done
 }
 
 # cut out all comments(#) and blank lines from standard input
@@ -441,7 +485,7 @@ process_user_id() {
 
     # if the gpg query return code is not 0, return 1
     if [ "$?" -ne 0 ] ; then
-        log error " no primary keys found."
+        log verbose " no primary keys found."
         return 1
     fi
 
@@ -458,7 +502,7 @@ process_user_id() {
                lastKeyOK=
                fingerprint=
 
-               log error " primary key found: $keyid"
+               log verbose " primary key found: $keyid"
 
                # if overall key is not valid, skip
                if [ "$validity" != 'u' -a "$validity" != 'f' ] ; then
@@ -507,7 +551,7 @@ process_user_id() {
                # output a line for the primary key
                # 0 = ok, 1 = bad
                if [ "$keyOK" -a "$uidOK" -a "$lastKeyOK" ] ; then
-                   log error "  * acceptable primary key."
+                   log verbose "  * acceptable primary key."
                    if [ -z "$sshKey" ] ; then
                        log error "    ! primary key could not be translated (not RSA or DSA?)."
                    else
@@ -563,7 +607,7 @@ process_user_id() {
                # output a line for the sub key
                # 0 = ok, 1 = bad
                if [ "$keyOK" -a "$uidOK" -a "$lastKeyOK" ] ; then
-                   log error "  * acceptable sub key."
+                   log verbose "  * acceptable sub key."
                    if [ -z "$sshKey" ] ; then
                        log error "    ! sub key could not be translated (not RSA or DSA?)."
                    else
@@ -598,7 +642,7 @@ process_host_known_hosts() {
     host="$1"
     userID="ssh://${host}"
 
-    log info "processing: $host"
+    log verbose "processing: $host"
 
     nKeys=0
     nKeysOK=0
@@ -699,7 +743,7 @@ update_known_hosts() {
 
     # note if the known_hosts file was updated
     if [ "$(file_hash "$KNOWN_HOSTS")" != "$fileCheck" ] ; then
-       log info "known_hosts file updated."
+       log verbose "known_hosts file updated."
     fi
 
     # if an acceptable host was found, return 0
@@ -722,7 +766,7 @@ update_known_hosts() {
 process_known_hosts() {
     local hosts
 
-    log info "processing known_hosts file..."
+    log verbose "processing known_hosts file..."
 
     hosts=$(meat "$KNOWN_HOSTS" | cut -d ' ' -f 1 | grep -v '^|.*$' | tr , ' ' | tr '\n' ' ')
 
@@ -747,7 +791,7 @@ process_uid_authorized_keys() {
 
     userID="$1"
 
-    log info "processing: $userID"
+    log verbose "processing: $userID"
 
     nKeys=0
     nKeysOK=0
@@ -842,7 +886,7 @@ update_authorized_keys() {
 
     # note if the authorized_keys file was updated
     if [ "$(file_hash "$AUTHORIZED_KEYS")" != "$fileCheck" ] ; then
-       log info "authorized_keys file updated."
+       log verbose "authorized_keys file updated."
     fi
 
     # if an acceptable id was found, return 0
@@ -869,7 +913,7 @@ process_authorized_user_ids() {
 
     authorizedUserIDs="$1"
 
-    log info "processing authorized_user_ids file..."
+    log verbose "processing authorized_user_ids file..."
 
     if ! meat "$authorizedUserIDs" > /dev/null ; then
        log error "no user IDs to process."