|  | @@ -13,10 +13,10 @@
 | 
	
		
			
				|  |  |  #    Check tor does not overwrite existing keys (existing behaviour)
 | 
	
		
			
				|  |  |  #
 | 
	
		
			
				|  |  |  # Exit Statuses:
 | 
	
		
			
				|  |  | -#  -2: test failed - tor did not generate the key files on first run
 | 
	
		
			
				|  |  | -#  -1: a command failed - the test could not be completed
 | 
	
		
			
				|  |  |  #   0: test succeeded - tor regenerated/kept the files
 | 
	
		
			
				|  |  |  #   1: test failed - tor did not regenerate/keep the files
 | 
	
		
			
				|  |  | +#   2: test failed - tor did not generate the key files on first run
 | 
	
		
			
				|  |  | +#   3: a command failed - the test could not be completed
 | 
	
		
			
				|  |  |  #
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  if [ $# -lt 1 ]; then
 | 
	
	
		
			
				|  | @@ -25,14 +25,25 @@ if [ $# -lt 1 ]; then
 | 
	
		
			
				|  |  |    exit $?
 | 
	
		
			
				|  |  |  fi
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export DATA_DIR=`mktemp -d -t tor_zero_length_keys.XXXXXX`
 | 
	
		
			
				|  |  | +DATA_DIR=`mktemp -d -t tor_zero_length_keys.XXXXXX`
 | 
	
		
			
				|  |  | +if [ -z "$DATA_DIR" ]; then
 | 
	
		
			
				|  |  | +  echo "Failure: mktemp invocation returned empty string" >&2
 | 
	
		
			
				|  |  | +  exit 3
 | 
	
		
			
				|  |  | +fi
 | 
	
		
			
				|  |  | +if [ ! -d "$DATA_DIR" ]; then
 | 
	
		
			
				|  |  | +  echo "Failure: mktemp invocation result doesn't point to directory" >&2
 | 
	
		
			
				|  |  | +  exit 3
 | 
	
		
			
				|  |  | +fi
 | 
	
		
			
				|  |  | +trap "rm -rf '$DATA_DIR'" 0
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  # DisableNetwork means that the ORPort won't actually be opened.
 | 
	
		
			
				|  |  |  # 'ExitRelay 0' suppresses a warning.
 | 
	
		
			
				|  |  |  TOR="./src/or/tor --hush --DisableNetwork 1 --ShutdownWaitLength 0 --ORPort 12345 --ExitRelay 0"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -if [ -s "$DATA_DIR"/keys/secret_id_key -a -s "$DATA_DIR"/keys/secret_onion_key -a -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
 | 
	
		
			
				|  |  | -  echo "Failure: Previous tor keys present in tor data directory"
 | 
	
		
			
				|  |  | -  exit -1
 | 
	
		
			
				|  |  | +if [ -s "$DATA_DIR"/keys/secret_id_key ] && [ -s "$DATA_DIR"/keys/secret_onion_key ] &&
 | 
	
		
			
				|  |  | +   [ -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
 | 
	
		
			
				|  |  | +  echo "Failure: Previous tor keys present in tor data directory" >&2
 | 
	
		
			
				|  |  | +  exit 3
 | 
	
		
			
				|  |  |  else
 | 
	
		
			
				|  |  |    echo "Generating initial tor keys"
 | 
	
		
			
				|  |  |    $TOR --DataDirectory "$DATA_DIR" --PidFile "$DATA_DIR"/pid &
 | 
	
	
		
			
				|  | @@ -43,15 +54,16 @@ else
 | 
	
		
			
				|  |  |    wait $TOR_PID
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    # tor must successfully generate non-zero-length key files
 | 
	
		
			
				|  |  | -  if [ -s "$DATA_DIR"/keys/secret_id_key -a -s "$DATA_DIR"/keys/secret_onion_key -a -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
 | 
	
		
			
				|  |  | +  if [ -s "$DATA_DIR"/keys/secret_id_key ] && [ -s "$DATA_DIR"/keys/secret_onion_key ] &&
 | 
	
		
			
				|  |  | +     [ -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
 | 
	
		
			
				|  |  |      true #echo "tor generated the initial key files"
 | 
	
		
			
				|  |  |    else
 | 
	
		
			
				|  |  |      echo "Failure: tor failed to generate the initial key files"
 | 
	
		
			
				|  |  | -    exit -2
 | 
	
		
			
				|  |  | +    exit 2
 | 
	
		
			
				|  |  |    fi
 | 
	
		
			
				|  |  |  fi
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#ls -lh  "$DATA_DIR"/keys/ || exit -1
 | 
	
		
			
				|  |  | +#ls -lh  "$DATA_DIR"/keys/ || exit 3
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # backup and keep/delete/create zero-length files for the keys
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -62,17 +74,17 @@ cp -r "$DATA_DIR"/keys "$DATA_DIR"/keys.old
 | 
	
		
			
				|  |  |  # delete keys for -d or -z
 | 
	
		
			
				|  |  |  if [ "$1" != "-e" ]; then
 | 
	
		
			
				|  |  |    FILE_DESC="regenerates deleted"
 | 
	
		
			
				|  |  | -  rm "$DATA_DIR"/keys/secret_id_key || exit -1
 | 
	
		
			
				|  |  | -  rm "$DATA_DIR"/keys/secret_onion_key || exit -1
 | 
	
		
			
				|  |  | -  rm "$DATA_DIR"/keys/secret_onion_key_ntor || exit -1
 | 
	
		
			
				|  |  | +  rm "$DATA_DIR"/keys/secret_id_key || exit 3
 | 
	
		
			
				|  |  | +  rm "$DATA_DIR"/keys/secret_onion_key || exit 3
 | 
	
		
			
				|  |  | +  rm "$DATA_DIR"/keys/secret_onion_key_ntor || exit 3
 | 
	
		
			
				|  |  |  fi
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # create empty files for -z
 | 
	
		
			
				|  |  |  if [ "$1" = "-z" ]; then
 | 
	
		
			
				|  |  |    FILE_DESC="regenerates zero-length"
 | 
	
		
			
				|  |  | -  touch "$DATA_DIR"/keys/secret_id_key || exit -1
 | 
	
		
			
				|  |  | -  touch "$DATA_DIR"/keys/secret_onion_key || exit -1
 | 
	
		
			
				|  |  | -  touch "$DATA_DIR"/keys/secret_onion_key_ntor || exit -1
 | 
	
		
			
				|  |  | +  touch "$DATA_DIR"/keys/secret_id_key || exit 3
 | 
	
		
			
				|  |  | +  touch "$DATA_DIR"/keys/secret_onion_key || exit 3
 | 
	
		
			
				|  |  | +  touch "$DATA_DIR"/keys/secret_onion_key_ntor || exit 3
 | 
	
		
			
				|  |  |  fi
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  echo "Running tor again to check if it $FILE_DESC keys"
 | 
	
	
		
			
				|  | @@ -83,10 +95,11 @@ sleep 5
 | 
	
		
			
				|  |  |  kill $TOR_PID
 | 
	
		
			
				|  |  |  wait $TOR_PID
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#ls -lh "$DATA_DIR"/keys/ || exit -1
 | 
	
		
			
				|  |  | +#ls -lh "$DATA_DIR"/keys/ || exit 3
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # tor must always have non-zero-length key files
 | 
	
		
			
				|  |  | -if [ -s "$DATA_DIR"/keys/secret_id_key -a -s "$DATA_DIR"/keys/secret_onion_key -a -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
 | 
	
		
			
				|  |  | +if [ -s "$DATA_DIR"/keys/secret_id_key ] && [ -s "$DATA_DIR"/keys/secret_onion_key ] &&
 | 
	
		
			
				|  |  | +   [ -s "$DATA_DIR"/keys/secret_onion_key_ntor ]; then
 | 
	
		
			
				|  |  |    # check if the keys are different to the old ones
 | 
	
		
			
				|  |  |    diff -q -r "$DATA_DIR"/keys "$DATA_DIR"/keys.old > /dev/null
 | 
	
		
			
				|  |  |    SAME_KEYS=$?
 |