diff options
Diffstat (limited to 'scripts/add-accounts')
-rwxr-xr-x | scripts/add-accounts | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/scripts/add-accounts b/scripts/add-accounts new file mode 100755 index 0000000..d2cddc0 --- /dev/null +++ b/scripts/add-accounts @@ -0,0 +1,131 @@ +#!/usr/bin/env python +# +# Copyright (C) 2008 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +A faux Setup Wizard. Stuffs one or two usernames + passwords into the +database on the device. +""" + +import sys +if sys.hexversion < 0x02040000: + print "This script requires python 2.4 or higher." + sys.exit(1) + +import getpass +import subprocess +import time +import sha + +DB = "/data/data/com.google.android.googleapps/databases/accounts.db" + +def RunCmd(args): + proc = subprocess.Popen(args, stdout=subprocess.PIPE) + out = proc.stdout.read() + if proc.wait(): + print + print "failed: %s" % " ".join(args) + return None + return out + +def GetProp(adb_flags, name): + args = ("adb",) + adb_flags + ("shell", "su", "root", + "/system/bin/getprop", name) + return RunCmd(args) + +def SetProp(adb_flags, name, value): + args = ("adb",) + adb_flags + ("shell", "su", "root", + "/system/bin/setprop", name, value) + return RunCmd(args) + +def DbExists(adb_flags): + args = ("adb",) + adb_flags + ("shell", "su", "root", + "/system/bin/ls", DB) + result = RunCmd(args) + if result is None: return None + return "No such file" not in result + +def main(argv): + if len(argv) == 1: + print ("usage: %s [adb flags] " + "[<dasher address[:password]>] " + "[<gmail address[:password]>]") % (argv[0],) + sys.exit(2) + + argv = argv[1:] + + gmail = None + dasher = None + while argv and "@" in argv[-1]: + addr = argv.pop() + if "@gmail.com" in addr or "@googlemail.com" in addr: + gmail = addr + else: + dasher = addr + + adb_flags = tuple(argv) + + while True: + db = DbExists(adb_flags) + if db is None: + print "failed to contact device; will retry in 3 seconds" + time.sleep(3) + continue + + if db: + print + print "GoogleLoginService has already started on this device;" + print "it's too late to use this script to add accounts." + print + print "This script only works on a freshly-wiped device (or " + print "emulator) while booting for the first time." + print + break + + hosted_account = GetProp(adb_flags, "ro.config.hosted_account").strip() + google_account = GetProp(adb_flags, "ro.config.google_account").strip() + + if dasher and hosted_account: + print + print "A dasher account is already configured on this device;" + print "can't add", hosted_account + print + dasher = None + + if gmail and google_account: + print + print "A google account is already configured on this device;" + print "can't add", google_account + print + gmail = None + + if not gmail and not dasher: break + + if dasher: + SetProp(adb_flags, "ro.config.hosted_account", dasher) + print "set hosted_account to", dasher + if gmail: + SetProp(adb_flags, "ro.config.google_account", gmail) + print "set google_account to", gmail + + break + + + + + + +if __name__ == "__main__": + main(sys.argv) |