This file is indexed.

/usr/sbin/yhsm-db-import is in yhsm-yubikey-ksm 1.0.4k-3.

This file is owned by root:root, with mode 0o755.

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/usr/bin/python
#
# Copyright (c) 2013-2014 Yubico AB
# See the file COPYING for licence statement.
#
"""
Import AEADs to database.
"""

#import lib
import os
import sys
import io
import hashlib
import re
import time
import argparse
import sqlalchemy

from os.path import abspath
sys.path.append('Lib')
from pyhsm.util import key_handle_to_int
from pyhsm.yubikey import modhex_decode
import pyhsm.aead_cmd


##########################
# Functions Declarations #
##########################



#
# extract keyhandle value from the path
#
def extract_keyhandle(path, filepath):

    keyhandle = filepath.lstrip(path)
    keyhandle = keyhandle.split("/")
    return keyhandle[0]

#
#insert_query: this functions read the response fields and creates sql query. then inserts everything inside the database
#
def insert_query(publicId, aead, keyhandle, aeadobj):

    #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;


#################################
# END of functions declariation #
#################################

#######################
#                     #
# Initialization Area #
#                     #
#######################

parser = argparse.ArgumentParser(description='Import AEADs into the database')

parser.add_argument('path', action="store", type=str)
parser.add_argument('dburl', action="store")

args = vars(parser.parse_args())

if len(sys.argv) != 3:
    print("\nUsage: python import_aeads.py /path/to/keyhandle/ database_url\ni.e. python import_aeads.py /root/aeads/ mysql://root:password@localhost:3306/database_name")
    sys.exit(2)

if not os.path.isdir(sys.argv[1]):
    print("\nInvalid path, check your spelling.\n")
    sys.exit(2)

#set the path
path = args['path']
#mysql url
databaseUrl = args['dburl']

try:
    #check database connection
    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"
    sys.exit(1)

####################
# Computation area #
####################

for root, subFolders, files in os.walk(path):
    if files:
        aead = None
        nonce = None
        key_handle = None

        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(public_id, aead, keyhandle, aeadobj):
            print "WARNING: could not insert %s" % public_id

#close sqlalchemy
connection.close()

#exit without error
sys.exit(0)