/usr/lib/python3/dist-packages
NameSizeModeActions
acme/-0755rm
acme-1.21.0.egg-info/-0755rm
apport/-0755rm
apt/-0755rm
aptsources/-0755rm
apt_inst-stubs/-0755rm
apt_pkg-stubs/-0755rm
attr/-0755rm
attrs-21.2.0.egg-info/-0755rm
automat/-0755rm
Automat-20.2.0.egg-info/-0755rm
babel/-0755rm
Babel-2.8.0.egg-info/-0755rm
bcrypt/-0755rm
bcrypt-3.2.0.egg-info/-0755rm
beautifulsoup4-4.10.0.egg-info/-0755rm
blinker/-0755rm
boost/-0755rm
bs4/-0755rm
certbot/-0755rm
certbot-1.21.0.egg-info/-0755rm
certbot_apache/-0755rm
certbot_apache-1.21.0.egg-info/-0755rm
certbot_dns_cloudflare/-0755rm
certbot_dns_cloudflare-1.18.0.egg-info/-0755rm
certbot_nginx/-0755rm
certbot_nginx-1.21.0.egg-info/-0755rm
certifi/-0755rm
certifi-2020.6.20.egg-info/-0755rm
chardet/-0755rm
chardet-4.0.0.egg-info/-0755rm
click/-0755rm
click-8.0.3.egg-info/-0755rm
CloudFlare/-0755rm
cloudflare-2.8.14.egg-info/-0755rm
cloudinit/-0755rm
cloud_init-25.3.egg-info/-0755rm
colorama/-0755rm
colorama-0.4.4.egg-info/-0755rm
CommandNotFound/-0755rm
ConfigArgParse-1.5.3.egg-info/-0755rm
configobj-5.0.6.egg-info/-0755rm
constantly/-0755rm
constantly-15.1.0.egg-info/-0755rm
cryptography/-0755rm
cryptography-3.4.8.egg-info/-0755rm
dbus/-0755rm
dbus_python-1.2.18.egg-info/-0755rm
debian/-0755rm
debian_bundle/-0755rm
distro/-0755rm
distro-1.7.0.egg-info/-0755rm
distro_info-1.1+ubuntu0.2.egg-info/-0755rm
DistUpgrade/-0755rm
fail2ban/-0755rm
fail2ban-0.11.2.egg-info/-0755rm
gi/-0755rm
hamcrest/-0755rm
html5lib/-0755rm
html5lib-1.1.egg-info/-0755rm
httplib2/-0755rm
httplib2-0.20.2.egg-info/-0755rm
HweSupportStatus/-0755rm
hyperlink/-0755rm
hyperlink-21.0.0.egg-info/-0755rm
icu/-0755rm
idna/-0755rm
idna-3.3.egg-info/-0755rm
importlib_metadata/-0755rm
importlib_metadata-4.6.4.egg-info/-0755rm
incremental/-0755rm
incremental-21.3.0.egg-info/-0755rm
janitor/-0755rm
jeepney/-0755rm
jeepney-0.7.1.dist-info/-0755rm
jinja2/-0755rm
Jinja2-3.0.3.egg-info/-0755rm
josepy/-0755rm
josepy-1.10.0.egg-info/-0755rm
jsonpatch-1.32.egg-info/-0755rm
jsonpointer-2.0.egg-info/-0755rm
jsonschema/-0755rm
jsonschema-3.2.0.egg-info/-0755rm
jwt/-0755rm
keyring/-0755rm
keyring-23.5.0.egg-info/-0755rm
landscape/-0755rm
launchpadlib/-0755rm
launchpadlib-1.10.16.egg-info/-0755rm
lazr/-0755rm
lazr.restfulclient-0.14.4.egg-info/-0755rm
lazr.uri-1.0.6.egg-info/-0755rm
lxml/-0755rm
lxml-4.8.0.egg-info/-0755rm
magic/-0755rm
markupsafe/-0755rm
MarkupSafe-2.0.1.egg-info/-0755rm
more_itertools/-0755rm
more_itertools-8.10.0.egg-info/-0755rm
nacl/-0755rm
netifaces-0.11.0.egg-info/-0755rm
oauthlib/-0755rm
oauthlib-3.2.0.egg-info/-0755rm
OpenSSL/-0755rm
packaging/-0755rm
packaging-21.3.egg-info/-0755rm
parsedatetime/-0755rm
parsedatetime-2.6.egg-info/-0755rm
pexpect/-0755rm
pkg_resources/-0755rm
ptyprocess/-0755rm
ptyprocess-0.7.0.dist-info/-0755rm
pyasn1/-0755rm
pyasn1-0.4.8.egg-info/-0755rm
pyasn1_modules/-0755rm
PyGObject-3.42.1.egg-info/-0755rm
pygtkcompat/-0755rm
PyHamcrest-2.0.2.egg-info/-0755rm
PyICU-2.8.1.egg-info/-0755rm
PyJWT-2.3.0.egg-info/-0755rm
pymacaroons/-0755rm
pymacaroons-0.13.0.egg-info/-0755rm
PyNaCl-1.5.0.dist-info/-0755rm
pyOpenSSL-21.0.0.egg-info/-0755rm
pyparsing-2.4.7.egg-info/-0755rm
pyrfc3339/-0755rm
pyRFC3339-1.1.egg-info/-0755rm
pyrsistent/-0755rm
pyrsistent-0.18.1.egg-info/-0755rm
pyserial-3.5.egg-info/-0755rm
python_apt-2.4.0+ubuntu4.1.egg-info/-0755rm
python_debian-0.1.43+ubuntu1.1.egg-info/-0755rm
python_magic-0.4.24.egg-info/-0755rm
pytz/-0755rm
pytz-2022.1.egg-info/-0755rm
PyYAML-5.4.1.egg-info/-0755rm
requests/-0755rm
requests-2.25.1.egg-info/-0755rm
requests_toolbelt/-0755rm
requests_toolbelt-0.9.1.egg-info/-0755rm
secretstorage/-0755rm
SecretStorage-3.3.1.egg-info/-0755rm
serial/-0755rm
service_identity/-0755rm
service_identity-18.1.0.egg-info/-0755rm
setuptools/-0755rm
setuptools-59.6.0.egg-info/-0755rm
six-1.16.0.egg-info/-0755rm
softwareproperties/-0755rm
sos/-0755rm
sos-4.10.2.egg-info/-0755rm
soupsieve/-0755rm
soupsieve-2.3.1.egg-info/-0755rm
ssh_import_id/-0755rm
ssh_import_id-5.11.egg-info/-0755rm
systemd/-0755rm
twisted/-0755rm
Twisted-22.1.0.egg-info/-0755rm
uaclient/-0755rm
ubuntu_pro_client-8001.egg-info/-0755rm
ufw/-0755rm
unattended_upgrades-0.1.egg-info/-0755rm
UpdateManager/-0755rm
urllib3/-0755rm
urllib3-1.26.5.egg-info/-0755rm
wadllib/-0755rm
wadllib-1.3.6.egg-info/-0755rm
webencodings/-0755rm
webencodings-0.5.1.egg-info/-0755rm
yaml/-0755rm
zipp-1.0.0.egg-info/-0755rm
zope/-0755rm
zope.component-4.3.0.egg-info/-0755rm
zope.event-4.4.egg-info/-0755rm
zope.hookable-5.1.0.egg-info/-0755rm
zope.interface-5.4.0.egg-info/-0755rm
_distutils_hack/-0755rm
_yaml/-0755rm
__pycache__/-0755rm
apport_python_hook.py80630644editdlrm
apt_inst.cpython-310-x86_64-linux-gnu.so600640644editdlrm
apt_pkg.cpython-310-x86_64-linux-gnu.so3470960644editdlrm
augeas.py235550644editdlrm
blinker-1.4.egg-info39010644editdlrm
command_not_found-0.3.egg-info1890644editdlrm
configargparse.py498750644editdlrm
configobj.py896130644editdlrm
deb822.py2730644editdlrm
debconf.py67690644editdlrm
distro_info.py125280644editdlrm
jsonpatch.py288130644editdlrm
jsonpointer.py97960644editdlrm
lsb_release.py149010644editdlrm
netifaces.cpython-310-x86_64-linux-gnu.so232320644editdlrm
pexpect-4.8.0.egg-info22850644editdlrm
problem_report.py268670644editdlrm
pvectorc.cpython-310-x86_64-linux-gnu.so375520644editdlrm
pyasn1_modules-0.2.1.egg-info17220644editdlrm
pyinotify-0.9.6.egg-info14210644editdlrm
pyinotify.py890100644editdlrm
pyparsing.py2733650644editdlrm
python_augeas-0.5.0.egg-info2380644editdlrm
six.py345490644editdlrm
snack.py311340644editdlrm
systemd_python-234.egg-info5860644editdlrm
ufw-0.36.1.egg-info2630644editdlrm
validate.py472430644editdlrm
zipp.py69140644editdlrm
zope.component-4.3.0-nspkg.pth5290644editdlrm
zope.event-4.4-nspkg.pth5290644editdlrm
zope.hookable-5.1.0-nspkg.pth5290644editdlrm
zope.interface-5.4.0-nspkg.pth5290644editdlrm
_cffi_backend.cpython-310-x86_64-linux-gnu.so1944720644editdlrm
_dbus_bindings.cpython-310-x86_64-linux-gnu.so1681520644editdlrm
_dbus_glib_bindings.cpython-310-x86_64-linux-gnu.so230400644editdlrm
_pyrsistent_version.py230644editdlrm
_snack.cpython-310-x86_64-linux-gnu.so478880644editdlrm
_version.py210644editdlrm
Edit: /usr/lib/python3/dist-packages/apport_python_hook.py (8063B)
'''Python sys.excepthook hook to generate apport crash dumps.''' # Copyright (c) 2006 - 2009 Canonical Ltd. # Authors: Robert Collins # Martin Pitt # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. See http://www.gnu.org/copyleft/gpl.html for # the full text of the license. import os import sys CONFIG = '/etc/default/apport' def enabled(): '''Return whether Apport should generate crash reports.''' # This doesn't use apport.packaging.enabled() because it is too heavyweight # See LP: #528355 import re try: with open(CONFIG) as f: conf = f.read() return re.search(r'^\s*enabled\s*=\s*0\s*$', conf, re.M) is None except IOError: # if the file does not exist, assume it's enabled return True def apport_excepthook(exc_type, exc_obj, exc_tb): '''Catch an uncaught exception and make a traceback.''' # create and save a problem report. Note that exceptions in this code # are bad, and we probably need a per-thread reentrancy guard to # prevent that happening. However, on Ubuntu there should never be # a reason for an exception here, other than [say] a read only var # or some such. So what we do is use a try - finally to ensure that # the original excepthook is invoked, and until we get bug reports # ignore the other issues. # import locally here so that there is no routine overhead on python # startup time - only when a traceback occurs will this trigger. try: # ignore 'safe' exit types. if exc_type in (KeyboardInterrupt, ): return # if python apt modules are not built for the python version than it # is not supported. LP: #1774843 try: import apt_pkg # make pyflakes happy apt_pkg.DATE except ImportError: return # do not do anything if apport was disabled if not enabled(): return try: from cStringIO import StringIO StringIO # pyflakes except ImportError: from io import StringIO import re, traceback from apport.fileutils import likely_packaged, get_recent_crashes # apport will look up the package from the executable path. try: binary = os.path.realpath(os.path.join(os.getcwd(), sys.argv[0])) except (TypeError, AttributeError, IndexError): # the module has mutated sys.argv, plan B try: binary = os.readlink('/proc/%i/exe' % os.getpid()) except OSError: return # for interactive python sessions, sys.argv[0] == ''; catch that and # other irregularities if not os.access(binary, os.X_OK) or not os.path.isfile(binary): return # filter out binaries in user accessible paths if not likely_packaged(binary): return import apport.report pr = apport.report.Report() # special handling of dbus-python exceptions if hasattr(exc_obj, 'get_dbus_name'): name = exc_obj.get_dbus_name() if name == 'org.freedesktop.DBus.Error.NoReply': # NoReply is an useless crash, we do not even get the method it # was trying to call; needs actual crash from D-BUS backend (LP #914220) return elif name == 'org.freedesktop.DBus.Error.ServiceUnknown': dbus_service_unknown_analysis(exc_obj, pr) else: pr['_PythonExceptionQualifier'] = name # disambiguate OSErrors with errno: if exc_type == OSError and exc_obj.errno is not None: pr['_PythonExceptionQualifier'] = str(exc_obj.errno) # append a basic traceback. In future we may want to include # additional data such as the local variables, loaded modules etc. tb_file = StringIO() traceback.print_exception(exc_type, exc_obj, exc_tb, file=tb_file) pr['Traceback'] = tb_file.getvalue().strip() pr.add_proc_info(extraenv=['PYTHONPATH', 'PYTHONHOME']) pr.add_user_info() # override the ExecutablePath with the script that was actually running pr['ExecutablePath'] = binary if 'ExecutableTimestamp' in pr: pr['ExecutableTimestamp'] = str(int(os.stat(binary).st_mtime)) try: pr['PythonArgs'] = '%r' % sys.argv except AttributeError: pass if pr.check_ignored(): return mangled_program = re.sub('/', '_', binary) # get the uid for now, user name later user = os.getuid() pr_filename = '%s/%s.%i.crash' % (os.environ.get( 'APPORT_REPORT_DIR', '/var/crash'), mangled_program, user) crash_counter = 0 if os.path.exists(pr_filename): if apport.fileutils.seen_report(pr_filename): # flood protection with open(pr_filename, 'rb') as f: crash_counter = get_recent_crashes(f) + 1 if crash_counter > 1: return # remove the old file, so that we can create the new one with # os.O_CREAT|os.O_EXCL os.unlink(pr_filename) else: # don't clobber existing report return if crash_counter: pr['CrashCounter'] = str(crash_counter) with os.fdopen(os.open(pr_filename, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o640), 'wb') as f: pr.write(f) finally: # resume original processing to get the default behaviour, # but do not trigger an AttributeError on interpreter shutdown. if sys: sys.__excepthook__(exc_type, exc_obj, exc_tb) def dbus_service_unknown_analysis(exc_obj, report): from glob import glob import subprocess, re try: from configparser import ConfigParser, NoSectionError, NoOptionError (ConfigParser, NoSectionError, NoOptionError) # pyflakes except ImportError: # Python 2 from ConfigParser import ConfigParser, NoSectionError, NoOptionError # determine D-BUS name m = re.search(r'name\s+(\S+)\s+was not provided by any .service', exc_obj.get_dbus_message()) if not m: if sys.stderr: sys.stderr.write('Error: cannot parse D-BUS name from exception: ' + exc_obj.get_dbus_message()) return dbus_name = m.group(1) # determine .service file and Exec name for the D-BUS name services = [] # tuples of (service file, exe name, running) for f in glob('/usr/share/dbus-1/*services/*.service'): cp = ConfigParser(interpolation=None) cp.read(f, encoding='UTF-8') try: if cp.get('D-BUS Service', 'Name') == dbus_name: exe = cp.get('D-BUS Service', 'Exec') running = (subprocess.call(['pidof', '-sx', exe], stdout=subprocess.PIPE) == 0) services.append((f, exe, running)) except (NoSectionError, NoOptionError): if sys.stderr: sys.stderr.write('Invalid D-BUS .service file %s: %s' % ( f, exc_obj.get_dbus_message())) continue if not services: report['DbusErrorAnalysis'] = 'no service file providing ' + dbus_name else: report['DbusErrorAnalysis'] = 'provided by' for (service, exe, running) in services: report['DbusErrorAnalysis'] += ' %s (%s is %srunning)' % ( service, exe, ('' if running else 'not ')) def install(): '''Install the python apport hook.''' sys.excepthook = apport_excepthook