From: Tony Mack Date: Tue, 29 Jan 2008 21:59:43 +0000 (+0000) Subject: changed name from sync_user_key X-Git-Tag: 2008-02-11-last-vmware-support~60 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=4aa3fbd3e07096fccbda2e3fdddb7c9f48e73cb0;p=tests.git changed name from sync_user_key --- diff --git a/qaapi/qa/tests/sync_person_key.py b/qaapi/qa/tests/sync_person_key.py new file mode 100755 index 0000000..aa26046 --- /dev/null +++ b/qaapi/qa/tests/sync_person_key.py @@ -0,0 +1,67 @@ +#!/usr/bin/env /usr/share/plc_api/plcsh +import os, sys +from Test import Test +from qa import utils + +class sync_person_key(Test): + """ + Make sure specified users public key on file matches whats + recorded at plc. Create a public/private keypair for the + specified user if one doesnt exist already. + """ + + def make_keys(self, path, name): + if not os.path.isdir(path): + os.mkdir(path) + key_path = path + os.sep + name + command = "ssh-keygen -f %(key_path)s -t rsa -N ''" % locals() + (stdout, stderr) = utils.popen(command) + + def call(self, email): + email_parts = email.split("@") + keys_filename = email_parts[0] + keys_path = self.config.KEYS_PATH + private_key_path = keys_path + os.sep + keys_filename + public_key_path = private_key_path + ".pub" + + # Validate person + persons = GetPersons([email], ['person_id', 'key_ids']) + if not persons: + raise Exception, "No such person %(email)s" + person = persons[0] + + # make keys if they dont already exist + if not os.path.isfile(private_key_path) or \ + not os.path.isfile(public_key_path): + # Make new keys + self.make_keys(keys_path, keys_filename) + if self.config.verbose: + utils.header("Made new key pair %(private_key_path)s %(public_key_path)s " %\ + locals()) + + # sync public key + public_key_file = open(public_key_path, 'r') + public_key = public_key_file.readline() + + keys = GetKeys(person['key_ids']) + if not keys: + # Add current key to db + key_fields = {'key_type': 'ssh', + 'key': public_key} + AddPersonKey(person['person_id'], key_fields) + if self.config.verbose: + utils.header("Added public key in %(public_key_path)s to db" % locals() ) + else: + # keys need to be checked and possibly updated + key = keys[0] + if key['key'] != public_key: + UpdateKey(key['key_id'], public_key) + if self.config.verbose: + utils.header("Updated plc with new public key in %(public_key_path)s " % locals()) + else: + if self.config.verbose: + utils.header("Key in %(public_key_path)s matchs public key in plc" % locals()) + +if __name__ == '__main__': + args = tuple(sys.argv[1:]) + sync_person_key()(*args)