* Fix a bug where invalid key removes all file entries. * __ssh_authorized_key: add key validation.
This commit is contained in:
		
					parent
					
						
							
								ac04edc233
							
						
					
				
			
			
				commit
				
					
						8883196efb
					
				
			
		
					 3 changed files with 20 additions and 5 deletions
				
			
		| 
						 | 
					@ -20,7 +20,12 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# extract the keytype and base64 encoded key ignoring any options and comment
 | 
					# extract the keytype and base64 encoded key ignoring any options and comment
 | 
				
			||||||
type_and_key="$(cat "$__object/parameter/key" | tr ' ' '\n' | awk '/^(ssh|ecdsa)-[^ ]+/ { printf $1" "; getline; printf $1 }')"
 | 
					type_and_key="$(cat "$__object/parameter/key" | tr ' ' '\n' | awk '/^(ssh|ecdsa)-[^ ]+/ { printf $1" "; getline; printf $1 }')"
 | 
				
			||||||
 | 
					# If type_and_key is empty, which is the case with an invalid key, do not grep $file because it results
 | 
				
			||||||
 | 
					# in greping everything in file and all entries from file are removed.
 | 
				
			||||||
 | 
					if [ -n "${type_and_key}" ]
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
    file="$(cat $__object/parameter/file)"
 | 
					    file="$(cat $__object/parameter/file)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # get any entries that match the type and key
 | 
					    # get any entries that match the type and key
 | 
				
			||||||
    grep ".*$type_and_key\([ \n]\|$\)" "$file" || true
 | 
					    grep ".*$type_and_key\([ \n]\|$\)" "$file" || true
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,15 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set -u
 | 
					set -u
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					the_key="$(cat "$__object/parameter/key")"
 | 
				
			||||||
 | 
					# validate key
 | 
				
			||||||
 | 
					validated_key="$(echo "${the_key}" | tr ' ' '\n' | awk '/^(ssh|ecdsa)-[^ ]+/ { printf $1" "; getline; printf $1 }')"
 | 
				
			||||||
 | 
					if [ -z "${validated_key}" ]
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
					    echo "Key is invalid: \"${the_key}\"" >&2
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
remove_line() {
 | 
					remove_line() {
 | 
				
			||||||
   file="$1"
 | 
					   file="$1"
 | 
				
			||||||
   line="$2"
 | 
					   line="$2"
 | 
				
			||||||
| 
						 | 
					@ -55,11 +64,11 @@ mkdir "$__object/files"
 | 
				
			||||||
   fi
 | 
					   fi
 | 
				
			||||||
   if [ -f "$__object/parameter/comment" ]; then
 | 
					   if [ -f "$__object/parameter/comment" ]; then
 | 
				
			||||||
      # extract the keytype and base64 encoded key ignoring any options and comment
 | 
					      # extract the keytype and base64 encoded key ignoring any options and comment
 | 
				
			||||||
      printf '%s ' "$(cat "$__object/parameter/key" | tr ' ' '\n' | awk '/^(ssh|ecdsa)-[^ ]+/ { printf $1" "; getline; printf $1 }')"
 | 
					      printf '%s ' "$(echo "${the_key}" | tr ' ' '\n' | awk '/^(ssh|ecdsa)-[^ ]+/ { printf $1" "; getline; printf $1 }')"
 | 
				
			||||||
      # override the comment with the one explicitly given
 | 
					      # override the comment with the one explicitly given
 | 
				
			||||||
      printf '%s' "$(cat "$__object/parameter/comment")"
 | 
					      printf '%s' "$(cat "$__object/parameter/comment")"
 | 
				
			||||||
   else
 | 
					   else
 | 
				
			||||||
      printf '%s' "$(cat "$__object/parameter/key")"
 | 
					      printf '%s' "${the_key}"
 | 
				
			||||||
   fi
 | 
					   fi
 | 
				
			||||||
   printf '\n'
 | 
					   printf '\n'
 | 
				
			||||||
) > "$__object/files/should"
 | 
					) > "$__object/files/should"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,7 @@ next:
 | 
				
			||||||
	* Type __install_stage: Fix __debug -> __cdist_log_level (Darko Poljak)
 | 
						* Type __install_stage: Fix __debug -> __cdist_log_level (Darko Poljak)
 | 
				
			||||||
	* Documentation: Document __cdist_log_level (Darko Poljak)
 | 
						* Documentation: Document __cdist_log_level (Darko Poljak)
 | 
				
			||||||
	* Core: Log ERROR to stderr and rest to stdout (Darko Poljak, Steven Armstrong)
 | 
						* Core: Log ERROR to stderr and rest to stdout (Darko Poljak, Steven Armstrong)
 | 
				
			||||||
 | 
						* Type __ssh_authorized_key: Bugfix the case where invalid key clears a file and add key validation (Darko Poljak)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
4.6.1: 2017-08-30
 | 
					4.6.1: 2017-08-30
 | 
				
			||||||
	* Type __user: Explore with /etc files (passwd, group, shadow) (Philippe Gregoire)
 | 
						* Type __user: Explore with /etc files (passwd, group, shadow) (Philippe Gregoire)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue