/usr/bin/pasaffe-dump-db is in pasaffe 0.38-0ubuntu1.
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 | #!/usr/bin/python3
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
### BEGIN LICENSE
# Copyright (C) 2011 Jamie Strandboge <jamie@canonical.com>
# Based on work by Marc Deslauriers <marc.deslauriers@canonical.com>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 3, as published
# by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranties of
# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
### END LICENSE
import getpass
import sys
import os
import struct
import time
from optparse import OptionParser
import gettext
from gettext import gettext as _
gettext.textdomain('pasaffe')
# Add project root directory (enable symlink and trunk execution)
PROJECT_ROOT_DIRECTORY = os.path.abspath(
os.path.dirname(os.path.dirname(os.path.realpath(sys.argv[0]))))
python_path = []
if os.path.abspath(__file__).startswith('/opt'):
syspath = sys.path[:] # copy to avoid infinite loop in pending objects
for path in syspath:
opt_path = path.replace('/usr', '/opt/extras.ubuntu.com/pasaffe')
python_path.insert(0, opt_path)
sys.path.insert(0, opt_path)
if (os.path.exists(os.path.join(PROJECT_ROOT_DIRECTORY, 'pasaffe'))
and PROJECT_ROOT_DIRECTORY not in sys.path):
python_path.insert(0, PROJECT_ROOT_DIRECTORY)
sys.path.insert(0, PROJECT_ROOT_DIRECTORY)
if python_path:
os.putenv('PYTHONPATH', "%s:%s" % (os.getenv('PYTHONPATH', ''), ':'.join(python_path))) # for subprocesses
from pasaffe_lib import readdb
from pasaffe_lib.helpers import get_database_path
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="specify alternate GPass database file", metavar="FILE")
parser.add_option("-m", "--masterpassword", dest="master",
default=None, help="specify Pasaffe database master password")
parser.add_option("-q", "--quiet", dest="quiet", action="store_true",
default=False, help="quiet messages")
(options, args) = parser.parse_args()
if options.filename == None:
db_filename = get_database_path()
else:
db_filename = options.filename
if not os.path.exists(db_filename):
print("\n\nERROR: Could not locate database file!")
sys.exit(1)
if not options.quiet:
print("WARNING: this will display all password entries.")
count = 0
max_tries = 3
while count < max_tries:
count += 1
if options.master != None:
master = options.master
else:
master = getpass.getpass("Password> ")
try:
passfile = readdb.PassSafeFile(db_filename, master)
break
except ValueError:
print("Sorry, try again.")
if count >= max_tries:
print(("%d incorrect password attempts" % (count)))
sys.exit(1)
record_dict = { 'Entry' : 3,
'Username' : 4,
'Notes' : 5,
'Password' : 6,
'URL' : 13
}
for record in sorted(list(passfile.records.values()), key=lambda entry: entry[3].lower()):
# specify order of labels and values
for label in ['Entry', 'Username', 'Password', 'URL', 'Notes']:
record_type = record_dict[label]
if record_type in record and record[record_type] != "":
print(("%s: %s" % (label, record[record_type])))
print("")
|