Added password arg to set_shared_user_password.sh

BUG=none
TEST=Ran script, from within chroot, with no args(prompts for password),
one password arg, and multiple args(prints usage and exits), and each time
echo'd the password before it is encrypted.  Each time it is correct.  From
outside chroot, it only prints an error and exits.

Change-Id: I9380511e8784e4979e664281c751fe6e6defe7ab
Reviewed-on: https://gerrit.chromium.org/gerrit/25397
Tested-by: Isaac Simha <isimha@nvidia.com>
Reviewed-by: Brian Harring <ferringb@chromium.org>
Commit-Ready: Isaac Simha <isimha@nvidia.com>
diff --git a/set_shared_user_password.sh b/set_shared_user_password.sh
index acc2c8a..91ee8d5 100755
--- a/set_shared_user_password.sh
+++ b/set_shared_user_password.sh
@@ -1,22 +1,35 @@
 #!/bin/bash
 
-# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
 # Script to set the password for the shared user account. Stores the MD5crypt'd
 # password to a file inside chroot, for use by build_image.
 
-# This can only run inside the chroot.
-. "$(dirname "$0")/common.sh" || exit 1
+# Make sure common.sh is here.
+SCRIPT_ROOT=$(dirname $(readlink -f "$0"))
+. "${SCRIPT_ROOT}/common.sh" || { echo "Unable to load common.sh"; exit 1; }
+
+assert_inside_chroot
 
 # Die on any errors.
 switch_to_strict_mode
 
 SHARED_USER_PASSWD_FILE="/etc/shared_user_passwd.txt"
 
-# Get password
-read -p "Enter password for shared user account: " PASSWORD
+# If optional password argument is supplied, set password to that.
+if [[ $# > 1 ]]; then
+  echo "Too many arguments."
+  echo "usage: $0 [password]"
+  exit 1
+elif [[ $# == 1 ]]; then
+  PASSWORD=$1
+  exec "$0" < <(echo "$PASSWORD")
+else
+  # Get password
+  read -s -p "Enter password for shared user account: " PASSWORD
+fi
 
 CRYPTED_PASSWD="$(echo "$PASSWORD" | openssl passwd -1 -stdin)"
 PASSWORD="gone now"