K2LL33D SHELL

 Apache/2.4.7 (Ubuntu)
 Linux sman1baleendah 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
 uid=33(www-data) gid=33(www-data) groups=33(www-data)
 safemode : OFF
 MySQL: ON | Perl: ON | cURL: OFF | WGet: ON
  >  / usr / lib / python3 / dist-packages / apport / crashdb_impl /
server ip : 104.21.89.46

your ip : 172.69.130.154

H O M E


Filename/usr/lib/python3/dist-packages/apport/crashdb_impl/debian.py
Size4.21 kb
Permissionrw-r--r--
Ownerroot : root
Create time27-Apr-2025 09:55
Last modified04-Apr-2014 22:30
Last accessed07-Jul-2025 07:11
Actionsedit | rename | delete | download (gzip)
Viewtext | code | image
'''Debian crash database interface.'''

# Debian adaptation Copyright (C) 2012 Ritesh Raj Sarraf <[email protected]>
#
# 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 smtplib, tempfile
from email.mime.text import MIMEText

import apport
import apport.crashdb


class CrashDatabase(apport.crashdb.CrashDatabase):
'''
Debian crash database
This is a Apport CrashDB implementation for interacting with Debian BTS
'''
def __init__(self, auth_file, options):
'''
Initialize crash database connection.

Debian implementation is pretty basic as most of its bug management
processes revolve around the email interface
'''
apport.crashdb.CrashDatabase.__init__(self, auth_file, options)
self.options = options

if not self.options.get('smtphost'):
self.options['smtphost'] = 'reportbug.debian.org'

if not self.options.get('recipient'):
self.options['recipient'] = '[email protected]'

def accepts(self, report):
'''
Check if this report can be uploaded to this database.
Checks for the proper settings of apport.
'''
if not self.options.get('sender') and 'UnreportableReason' not in report:
report['UnreportableReason'] = 'Please configure sender settings in /etc/apport/crashdb.conf'

# At this time, we are not ready to take CrashDumps
if 'Stacktrace' in report and not report.has_useful_stacktrace():
report['UnreportableReason'] = 'Incomplete backtrace. Please install the debug symbol packages'

return apport.crashdb.CrashDatabase.accepts(self, report)

def upload(self, report, progress_callback=None):
'''Upload given problem report return a handle for it.

In Debian, we use BTS, which is heavily email oriented
This method crafts the bug into an email report understood by Debian BTS
'''
# first and foremost, let's check if the apport bug filing settings are set correct
assert self.accepts(report)

# Frame the report in the format the BTS understands
try:
(buggyPackage, buggyVersion) = report['Package'].split(' ')
except (KeyError, ValueError):
return False

temp = tempfile.NamedTemporaryFile()

temp.file.write(('Package: ' + buggyPackage + '\n').encode('UTF-8'))
temp.file.write(('Version: ' + buggyVersion + '\n\n\n').encode('UTF-8'))
temp.file.write(('=============================\n\n').encode('UTF-8'))

# Let's remove the CoreDump first

# Even if we have a valid backtrace, we already are reporting it as text
# We don't want to send very large emails to the BTS.
# OTOH, if the backtrace is invalid, has_useful_backtrace() will already
# deny reporting of the bug report.
try:
del report['CoreDump']
except KeyError:
pass

# Now write the apport bug report
report.write(temp)

temp.file.seek(0)

msg = MIMEText(temp.file.read().decode('UTF-8'))
msg['Subject'] = report['Title']
msg['From'] = self.options['sender']
msg['To'] = self.options['recipient']

# Subscribe the submitted to the bug report
msg.add_header('X-Debbugs-CC', self.options['sender'])
msg.add_header('Usertag', 'apport-%s' % report['ProblemType'].lower())

s = smtplib.SMTP(self.options['smtphost'])
s.sendmail(self.options['sender'], self.options['recipient'], msg.as_string().encode('UTF-8'))
s.quit()

def get_comment_url(self, report, handle):
'''
Return an URL that should be opened after report has been uploaded
and upload() returned handle.

Should return None if no URL should be opened (anonymous filing without
user comments); in that case this function should do whichever
interactive steps it wants to perform.
'''
return None