/usr/lib/python2.7/dist-packages/pyhsm/ksm/db_import.py is in yhsm-yubikey-ksm 1.2.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | #
# Copyright (c) 2013-2014 Yubico AB
# See the file COPYING for licence statement.
#
"""
Import AEADs to database.
"""
import os
import re
import sys
import argparse
import sqlalchemy
from pyhsm.util import key_handle_to_int
import pyhsm.aead_cmd
def extract_keyhandle(path, filepath):
"""extract keyhandle value from the path"""
keyhandle = filepath.lstrip(path)
keyhandle = keyhandle.split("/")
return keyhandle[0]
def insert_query(connection, publicId, aead, keyhandle, aeadobj):
"""this functions read the response fields and creates sql query. then
inserts everything inside the database"""
# turn the keyhandle into an integer
keyhandle = key_handle_to_int(keyhandle)
if not keyhandle == aead.key_handle:
print("WARNING: keyhandle does not match aead.key_handle")
return None
# creates the query object
try:
sql = aeadobj.insert().values(public_id=publicId, keyhandle=aead.key_handle, nonce=aead.nonce, aead=aead.data)
# insert the query
result = connection.execute(sql)
return result
except sqlalchemy.exc.IntegrityError:
pass
return None
def main():
parser = argparse.ArgumentParser(description='Import AEADs into the database')
parser.add_argument('path', help='filesystem path of where to find AEADs')
parser.add_argument('dburl', help='connection URL for the database')
args = parser.parse_args()
path = args.path
databaseUrl = args.dburl
if not os.path.isdir(path):
print("\nInvalid path, check your spelling.\n")
return 2
try:
engine = sqlalchemy.create_engine(databaseUrl)
#SQLAlchemy voodoo
metadata = sqlalchemy.MetaData()
aeadobj = sqlalchemy.Table('aead_table', metadata, autoload=True, autoload_with=engine)
connection = engine.connect()
except:
print("FATAL: Database connect failure")
return 1
for root, subFolders, files in os.walk(path):
if files:
if not re.match(r'^[cbdefghijklnrtuv]+$', files[0]):
continue
#build file path
filepath = os.path.join(root, files[0])
#extract the key handle from the path
keyhandle = extract_keyhandle(path, filepath)
kh_int = pyhsm.util.key_handle_to_int(keyhandle)
#instantiate a new aead object
aead = pyhsm.aead_cmd.YHSM_GeneratedAEAD(None, kh_int, '')
aead.load(filepath)
#set the public_id
public_id = str(files[0])
#check it is old format aead
if not aead.nonce:
#configure values for oldformat
aead.nonce = pyhsm.yubikey.modhex_decode(public_id).decode('hex')
aead.key_handle = key_handle_to_int(keyhandle)
if not insert_query(connection, public_id, aead, keyhandle, aeadobj):
print("WARNING: could not insert %s" % public_id)
#close sqlalchemy
connection.close()
if __name__ == '__main__':
sys.exit(main())
|