Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 10 Nov 2012 03:44:08 +0000 (UTC)
From:      Eitan Adler <eadler@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r242848 - head/usr.bin/ssh-copy-id
Message-ID:  <201211100344.qAA3i8dk019658@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: eadler
Date: Sat Nov 10 03:44:08 2012
New Revision: 242848
URL: http://svnweb.freebsd.org/changeset/base/242848

Log:
  Be a bit more paranoid.
  Use more portable constructs in order to allow upstream adoption
  Add per-file error messages
  
  Reviewed by:	jilles
  Approved by:	cperciva
  MFC after:	1 week

Modified:
  head/usr.bin/ssh-copy-id/ssh-copy-id.sh

Modified: head/usr.bin/ssh-copy-id/ssh-copy-id.sh
==============================================================================
--- head/usr.bin/ssh-copy-id/ssh-copy-id.sh	Sat Nov 10 02:08:40 2012	(r242847)
+++ head/usr.bin/ssh-copy-id/ssh-copy-id.sh	Sat Nov 10 03:44:08 2012	(r242848)
@@ -34,19 +34,18 @@ usage() {
 
 sendkey() {
 	local h="$1"
-	shift 1
-	local k="$@"
-	echo "$k" | ssh $port -S none $options "$user$h" /bin/sh -c \''
-		set -e;
-		umask 077;
-		keyfile=$HOME/.ssh/authorized_keys ;
-		mkdir -p $HOME/.ssh/ ;
-		while read alg key comment ; do
-			if ! grep -sqwF "$key" "$keyfile"; then
-				echo "$alg $key $comment" |
-				    tee -a "$keyfile" >/dev/null ;
-			fi ;
-		done
+	local k="$2"
+	printf "%s\n" "$k" | ssh $port -S none $options "$user$h" /bin/sh -c \'' \
+		set -e; \
+		umask 077; \
+		keyfile=$HOME/.ssh/authorized_keys ; \
+		mkdir -p -- "$HOME/.ssh/" ; \
+		while read alg key comment ; do \
+			[ -n "$key" ] || continue; \
+			if ! grep -sqwF "$key" "$keyfile"; then \
+				printf "$alg $key $comment\n" >> "$keyfile" ; \
+			fi ; \
+		done \
 	'\' 
 }
 
@@ -63,12 +62,17 @@ nl="
 "
 options=""
 
+IFS=$nl
+
 while getopts 'i:lo:p:' arg; do
 	case $arg in
 	i)	
 		hasarg="x"
-		if [ -f "$OPTARG" ]; then
-			keys="$(cat $OPTARG)$nl$keys"
+		if [ -r "$OPTARG" ]; then
+			keys="$(cat -- "$OPTARG")$nl$keys"
+		else
+			echo "File $OPTARG not found" >&2
+			exit 1
 		fi
 		;;
 	l)	
@@ -76,10 +80,10 @@ while getopts 'i:lo:p:' arg; do
 		agentKeys
 		;;
 	p)	
-		port="-p $OPTARG"
+		port=-p$nl$OPTARG
 		;;
 	o)	
-		options="$options -o '$OPTARG'"
+		options=$options$nl-o$nl$OPTARG
 		;;
 	*)	
 		usage
@@ -92,11 +96,11 @@ shift $((OPTIND-1))
 if [ -z "$hasarg" ]; then
 	agentKeys
 fi
-if [ -z "$keys" -o "$keys" = "$nl" ]; then
+if [ -z "$keys" ] || [ "$keys" = "$nl" ]; then
 	echo "no keys found" >&2
 	exit 1
 fi
-if [ -z "$@" ]; then
+if [ "$#" -eq 0 ]; then
 	usage
 fi
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211100344.qAA3i8dk019658>