コード例 #1
0
ファイル: keepasssync.py プロジェクト: havocesp/keepasssync
def openDatabase(db_path, db_pass):
    '''
    Check if databases file exist and open it as read only
    Return the database
    '''

    if len(db_pass) == 0:
        db_pass = input('Enter password for ' + db_path + ' :')

    try:
        # Check if file exist, raise an exception if not
        if not os.path.isfile(db_path):
            raise FileNotFoundError(db_path)

        db = KPDBv1(db_path, db_pass, read_only=True)

    # Execption Handler for the kppy opener
    except KPError as err:
        print(err)
        print('Error while opening ' + db_path)
        print('Quitting...')
        quit()

    except FileNotFoundError:
        print('No File found at ' + db_path)
        print('Quitting...')
        quit()

    return db
コード例 #2
0
def empty_kppy_db(request, tmpdir):
    assert isinstance(tmpdir, py.path.local)
    kdb_path = tmpdir.join('test_db.kdb')

    passpie_keepass.prepare_pycrypto_for_import()
    from kppy.database import KPDBv1, KPError
    db = KPDBv1(str(kdb_path), password='******', new=True)

    def cleanup():
        db.close()

    return db
コード例 #3
0
 def load(self):
     """
     Load the keepass database into memory for processing
     :raise IOError: Fails if the file doesn't exist
     """
     if not hasattr(self, 'reader'):
         if not os.path.isfile(self.path):
             raise IOError('No such keepass file {}'.format(self.path))
         self.reader = KPDBv1(filepath=self.path,
                              read_only=True,
                              keyfile=self.keyfile,
                              password=self.password)
         self.reader.load()
コード例 #4
0
def main(k_db, k_passphrase):
    # open kepass db
    try:
        db = KPDBv1(k_db, k_passphrase, read_only=True)
        db.load()
    except KPError as e:
        print(e)
        sys.exit(1)

    items = ''
    for entry in db.entries:
        if entry.title != 'Meta-Info':
            print entry.title
            password = entry.password
            username = entry.username
            if username != 'SYSTEM':
                print " \_", username, password
    db.close()
コード例 #5
0
    def handle(self, filepath):
        passphrase = click.prompt('Keepass passphrase', hide_input=True)

        try:
            # TODO add keyfile support
            db = KPDBv1(filepath=str(filepath),
                        password=str(passphrase),
                        read_only=True)
            db.load()
        except KPError as e:
            self.log(str(e))
            return []
        except Exception as e:
            self.log(str(e))
            return []
        else:
            try:
                credentials = []

                for entry in db.entries:
                    group_names_str = self.compute_group_name(entry)

                    entry_fullname = make_fullname(entry.username,
                                                   group_names_str)

                    credential_dict = {
                        'fullname': entry_fullname,
                        'name': group_names_str,
                        'login': entry.username,
                        'password': entry.password,
                        'comment': (entry.comment or '').strip(),
                        'modified': entry.creation,
                    }
                    credentials.append(credential_dict)

                return credentials
            finally:
                db.close()
コード例 #6
0
ファイル: server.py プロジェクト: wd13995/keepassc
    def __init__(self,
                 pidfile,
                 loglevel,
                 logfile,
                 address=None,
                 port=50002,
                 db=None,
                 password=None,
                 keyfile=None,
                 tls=False,
                 tls_dir=None,
                 tls_port=50003,
                 tls_req=False):
        Daemon.__init__(self, pidfile)

        try:
            logdir = realpath(expanduser(getenv('XDG_DATA_HOME')))
        except:
            logdir = realpath(expanduser('~/.local/share'))
        finally:
            logfile = join(logdir, 'keepassc', logfile)

        logging.basicConfig(format='[%(levelname)s] in %(filename)s:'
                            '%(funcName)s at %(asctime)s\n%(message)s',
                            level=loglevel,
                            filename=logfile,
                            filemode='a')

        if db is None:
            print('Need a database path')
            sys.exit(1)

        self.db_path = realpath(expanduser(db))

        # To use this idiom only once, I store the keyfile path
        # as a class attribute
        if keyfile is not None:
            keyfile = realpath(expanduser(keyfile))
        else:
            keyfile = None

        chdir("/var/empty")

        try:
            self.db = KPDBv1(self.db_path, password, keyfile)
            self.db.load()
        except KPError as err:
            print(err)
            logging.error(err.__str__())
            sys.exit(1)

        self.lookup = {
            b'FIND': self.find,
            b'GET': self.send_db,
            b'CHANGESECRET': self.change_password,
            b'NEWG': self.create_group,
            b'NEWE': self.create_entry,
            b'DELG': self.delete_group,
            b'DELE': self.delete_entry,
            b'MOVG': self.move_group,
            b'MOVE': self.move_entry,
            b'TITG': self.set_g_title,
            b'TITE': self.set_e_title,
            b'USER': self.set_e_user,
            b'URL': self.set_e_url,
            b'COMM': self.set_e_comment,
            b'PASS': self.set_e_pass,
            b'DATE': self.set_e_exp
        }

        self.sock = None
        self.net_sock = None
        self.tls_sock = None
        self.tls_req = tls_req

        if tls is True or tls_req is True:
            self.context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
            cert = join(tls_dir, "servercert.pem")
            key = join(tls_dir, "serverkey.pem")
            self.context.load_cert_chain(certfile=cert, keyfile=key)
        else:
            self.context = None

        try:
            # Listen for commands
            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.sock.bind(("localhost", 50000))
            self.sock.listen(5)
        except OSError as err:
            print(err)
            logging.error(err.__str__())
            sys.exit(1)
        else:
            logging.info('Server socket created on localhost:50000')

        if self.tls_req is False and address is not None:
            try:
                # Listen for commands
                self.net_sock = socket.socket(socket.AF_INET,
                                              socket.SOCK_STREAM)
                self.net_sock.bind((address, port))
                self.net_sock.listen(5)
            except OSError as err:
                print(err)
                logging.error(err.__str__())
                sys.exit(1)
            else:
                logging.info('Server socket created on ' + address + ':' +
                             str(port))

        if self.context is not None and address is not None:
            try:
                # Listen for commands
                self.tls_sock = socket.socket(socket.AF_INET,
                                              socket.SOCK_STREAM)
                self.tls_sock.bind((address, tls_port))
                self.tls_sock.listen(5)
            except OSError as err:
                print(err)
                logging.error(err.__str__())
                sys.exit(1)
            else:
                logging.info('TLS-Server socket created on ' + address + ':' +
                             str(tls_port))

        #Handle SIGTERM
        signal.signal(signal.SIGTERM, self.handle_sigterm)
コード例 #7
0
    return Password


check_arg()

t_file = sys.argv[1]
f = open(t_file, 'r')
s_list = []
for i in f.readlines():
    i = i.strip('\n')
    s_list.append(i)
f.close()
cus = s_list[0]
del s_list[0]
check_kdb_file(cus + '.kdb')
db = KPDBv1(new=True)
db.groups[0].remove_group()
db.create_group(cus)

for i in s_list:
    s = i.split('\t')
    server = s[0]
    ip = s[1]
    db.create_group(server, db.groups[0])
    G = db.groups[1]
    Password = Gen_pass()
    db.create_entry(G, 'ncadmin', 0, ip, 'ncadmin', Password, server)
    Password = Gen_pass()
    db.create_entry(G, 'root', 0, ip, 'root', Password, server)
    m = re.search('db\d$', server)
    if m:
コード例 #8
0
ファイル: keepasssync.py プロジェクト: havocesp/keepasssync
#### Test
#new_group_list=db1.groups+db2.groups
#print('Print the list  of groups')
#for group in new_group_list :
#    print(group.title,group.id_,group.db)
#    group.db=None
#
#new_group_set=set(new_group_list)
#print('Print the set of groups')
#
#for group in new_group_set :
#    print(group.title,group.id_,group.db)
## Creating the new database
dbnew = KPDBv1(filepath=dbnew_path,
               password=dbnew_pass,
               read_only=False,
               new=True)

# Creating the group architecture
dbnew = syncDb(dbnew, db1, db2)

dbnew = cleanDb(dbnew)

dbnew.save()
dbnew.close()
db1.close()
db2.close()

print('\nSync went good :D ')