SILENT KILLERPanel

Current Path: > > usr > lib64 > > python3.8


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //usr/lib64//python3.8

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
asyncio Directory - -
collections Directory - -
concurrent Directory - -
config-3.8-x86_64-linux-gnu Directory - -
ctypes Directory - -
curses Directory - -
dbm Directory - -
distutils Directory - -
email Directory - -
encodings Directory - -
ensurepip Directory - -
html Directory - -
http Directory - -
importlib Directory - -
json Directory - -
lib-dynload Directory - -
lib2to3 Directory - -
logging Directory - -
multiprocessing Directory - -
pydoc_data Directory - -
site-packages Directory - -
sqlite3 Directory - -
tkinter Directory - -
turtledemo Directory - -
unittest Directory - -
urllib Directory - -
venv Directory - -
wsgiref Directory - -
xml Directory - -
xmlrpc Directory - -
LICENSE.txt File 13937 bytes June 06 2023 13:32:21.
__future__.py File 5147 bytes June 06 2023 13:32:21.
__phello__.foo.py File 64 bytes June 06 2023 13:32:21.
_bootlocale.py File 1801 bytes June 06 2023 13:32:21.
_collections_abc.py File 26100 bytes June 06 2023 13:32:21.
_compat_pickle.py File 8749 bytes June 06 2023 13:32:21.
_compression.py File 5340 bytes June 06 2023 13:32:21.
_dummy_thread.py File 6027 bytes June 06 2023 13:32:21.
_markupbase.py File 14598 bytes June 06 2023 13:32:21.
_osx_support.py File 21774 bytes June 06 2023 13:32:21.
_py_abc.py File 6189 bytes June 06 2023 13:32:21.
_pydecimal.py File 228666 bytes June 06 2023 13:32:21.
_pyio.py File 93177 bytes June 06 2023 13:32:21.
_sitebuiltins.py File 3115 bytes June 06 2023 13:32:21.
_strptime.py File 25268 bytes June 06 2023 13:32:21.
_sysconfigdata__linux_x86_64-linux-gnu.py File 38510 bytes October 17 2023 18:12:19.
_sysconfigdata_d_linux_x86_64-linux-gnu.py File 38237 bytes October 17 2023 18:03:44.
_threading_local.py File 7220 bytes June 06 2023 13:32:21.
_weakrefset.py File 5735 bytes June 06 2023 13:32:21.
abc.py File 4489 bytes June 06 2023 13:32:21.
aifc.py File 32814 bytes June 06 2023 13:32:21.
antigravity.py File 477 bytes June 06 2023 13:32:21.
argparse.py File 96015 bytes June 06 2023 13:32:21.
ast.py File 19234 bytes June 06 2023 13:32:21.
asynchat.py File 11328 bytes June 06 2023 13:32:21.
asyncore.py File 20094 bytes June 06 2023 13:32:21.
base64.py File 20382 bytes June 06 2023 13:32:21.
bdb.py File 32056 bytes June 06 2023 13:32:21.
binhex.py File 13954 bytes June 06 2023 13:32:21.
bisect.py File 2214 bytes June 06 2023 13:32:21.
bz2.py File 12558 bytes June 06 2023 13:32:21.
cProfile.py File 7010 bytes June 06 2023 13:32:21.
calendar.py File 24832 bytes June 06 2023 13:32:21.
cgi.py File 33934 bytes October 17 2023 18:02:14.
cgitb.py File 12096 bytes June 06 2023 13:32:21.
chunk.py File 5435 bytes June 06 2023 13:32:21.
cmd.py File 14860 bytes June 06 2023 13:32:21.
code.py File 10622 bytes June 06 2023 13:32:21.
codecs.py File 36667 bytes June 06 2023 13:32:21.
codeop.py File 6330 bytes June 06 2023 13:32:21.
colorsys.py File 4064 bytes June 06 2023 13:32:21.
compileall.py File 13678 bytes June 06 2023 13:32:21.
configparser.py File 54374 bytes June 06 2023 13:32:21.
contextlib.py File 24995 bytes June 06 2023 13:32:21.
contextvars.py File 129 bytes June 06 2023 13:32:21.
copy.py File 8661 bytes June 06 2023 13:32:21.
copyreg.py File 7135 bytes June 06 2023 13:32:21.
crypt.py File 3610 bytes June 06 2023 13:32:21.
csv.py File 16144 bytes June 06 2023 13:32:21.
dataclasses.py File 49973 bytes June 06 2023 13:32:21.
datetime.py File 88287 bytes June 06 2023 13:32:21.
decimal.py File 320 bytes June 06 2023 13:32:21.
difflib.py File 84058 bytes June 06 2023 13:32:21.
dis.py File 20570 bytes June 06 2023 13:32:21.
doctest.py File 104543 bytes June 06 2023 13:32:21.
dummy_threading.py File 2815 bytes June 06 2023 13:32:21.
enum.py File 38136 bytes June 06 2023 13:32:21.
filecmp.py File 9830 bytes June 06 2023 13:32:21.
fileinput.py File 14709 bytes June 06 2023 13:32:21.
fnmatch.py File 4079 bytes June 06 2023 13:32:21.
formatter.py File 15143 bytes June 06 2023 13:32:21.
fractions.py File 24329 bytes June 06 2023 13:32:21.
ftplib.py File 35129 bytes June 06 2023 13:32:21.
functools.py File 37406 bytes June 06 2023 13:32:21.
genericpath.py File 4975 bytes June 06 2023 13:32:21.
getopt.py File 7489 bytes June 06 2023 13:32:21.
getpass.py File 5994 bytes June 06 2023 13:32:21.
gettext.py File 27138 bytes June 06 2023 13:32:21.
glob.py File 5697 bytes June 06 2023 13:32:21.
gzip.py File 21413 bytes June 06 2023 13:32:21.
hashlib.py File 8333 bytes October 17 2023 18:02:14.
heapq.py File 22877 bytes June 06 2023 13:32:21.
hmac.py File 7850 bytes October 17 2023 18:02:14.
imaplib.py File 53606 bytes June 06 2023 13:32:21.
imghdr.py File 3808 bytes June 06 2023 13:32:21.
imp.py File 10536 bytes June 06 2023 13:32:21.
inspect.py File 118550 bytes June 06 2023 13:32:21.
io.py File 3541 bytes June 06 2023 13:32:21.
ipaddress.py File 71644 bytes June 06 2023 13:32:21.
keyword.py File 945 bytes June 06 2023 13:32:21.
linecache.py File 5330 bytes June 06 2023 13:32:21.
locale.py File 78191 bytes June 06 2023 13:32:21.
lzma.py File 12983 bytes June 06 2023 13:32:21.
mailbox.py File 78661 bytes June 06 2023 13:32:21.
mailcap.py File 9067 bytes June 06 2023 13:32:21.
mimetypes.py File 21664 bytes June 06 2023 13:32:21.
modulefinder.py File 24430 bytes June 06 2023 13:32:21.
netrc.py File 5566 bytes June 06 2023 13:32:21.
nntplib.py File 43261 bytes June 06 2023 13:32:21.
ntpath.py File 27734 bytes June 06 2023 13:32:21.
nturl2path.py File 2887 bytes June 06 2023 13:32:21.
numbers.py File 10244 bytes June 06 2023 13:32:21.
opcode.py File 5808 bytes June 06 2023 13:32:21.
operator.py File 10711 bytes June 06 2023 13:32:21.
optparse.py File 60369 bytes June 06 2023 13:32:21.
os.py File 38995 bytes June 06 2023 13:32:21.
pathlib.py File 52610 bytes June 06 2023 13:32:21.
pdb.py File 62738 bytes June 06 2023 13:32:21.
pickle.py File 64467 bytes June 06 2023 13:32:21.
pickletools.py File 93486 bytes June 06 2023 13:32:21.
pipes.py File 8916 bytes June 06 2023 13:32:21.
pkgutil.py File 21500 bytes June 06 2023 13:32:21.
platform.py File 40425 bytes June 06 2023 13:32:21.
plistlib.py File 32220 bytes June 06 2023 13:32:21.
poplib.py File 15077 bytes June 06 2023 13:32:21.
posixpath.py File 15627 bytes June 06 2023 13:32:21.
pprint.py File 21484 bytes June 06 2023 13:32:21.
profile.py File 23546 bytes June 06 2023 13:32:21.
pstats.py File 27345 bytes June 06 2023 13:32:21.
pty.py File 4807 bytes June 06 2023 13:32:21.
py_compile.py File 8203 bytes October 17 2023 18:02:14.
pyclbr.py File 15255 bytes June 06 2023 13:32:21.
pydoc.py File 106700 bytes October 17 2023 18:12:57.
queue.py File 11356 bytes June 06 2023 13:32:21.
quopri.py File 7252 bytes June 06 2023 13:32:21.
random.py File 28802 bytes June 06 2023 13:32:21.
re.py File 15861 bytes June 06 2023 13:32:21.
reprlib.py File 5267 bytes June 06 2023 13:32:21.
rlcompleter.py File 7097 bytes June 06 2023 13:32:21.
runpy.py File 12052 bytes June 06 2023 13:32:21.
sched.py File 6442 bytes June 06 2023 13:32:21.
secrets.py File 2038 bytes June 06 2023 13:32:21.
selectors.py File 18561 bytes June 06 2023 13:32:21.
shelve.py File 8527 bytes June 06 2023 13:32:21.
shlex.py File 13325 bytes June 06 2023 13:32:21.
shutil.py File 51761 bytes June 06 2023 13:32:21.
signal.py File 2273 bytes June 06 2023 13:32:21.
site.py File 21838 bytes October 17 2023 18:02:14.
smtpd.py File 34709 bytes June 06 2023 13:32:21.
smtplib.py File 45001 bytes June 06 2023 13:32:21.
sndhdr.py File 7099 bytes June 06 2023 13:32:21.
socket.py File 35243 bytes June 06 2023 13:32:21.
socketserver.py File 27296 bytes June 06 2023 13:32:21.
sre_compile.py File 26695 bytes June 06 2023 13:32:21.
sre_constants.py File 7154 bytes June 06 2023 13:32:21.
sre_parse.py File 40230 bytes June 06 2023 13:32:21.
ssl.py File 50760 bytes June 06 2023 13:32:21.
stat.py File 5485 bytes June 06 2023 13:32:21.
statistics.py File 39690 bytes June 06 2023 13:32:21.
string.py File 10535 bytes June 06 2023 13:32:21.
stringprep.py File 12917 bytes June 06 2023 13:32:21.
struct.py File 257 bytes June 06 2023 13:32:21.
subprocess.py File 78250 bytes June 06 2023 13:32:21.
sunau.py File 18375 bytes June 06 2023 13:32:21.
symbol.py File 2109 bytes October 17 2023 18:04:15.
symtable.py File 8021 bytes June 06 2023 13:32:21.
sysconfig.py File 24896 bytes October 17 2023 18:12:55.
tabnanny.py File 11406 bytes June 06 2023 13:32:21.
tarfile.py File 106473 bytes October 17 2023 18:02:14.
telnetlib.py File 23254 bytes June 06 2023 13:32:21.
tempfile.py File 27537 bytes June 06 2023 13:32:21.
textwrap.py File 19407 bytes June 06 2023 13:32:21.
this.py File 1003 bytes June 06 2023 13:32:21.
threading.py File 50820 bytes June 06 2023 13:32:21.
timeit.py File 13480 bytes June 06 2023 13:32:21.
token.py File 2368 bytes June 06 2023 13:32:21.
tokenize.py File 25841 bytes June 06 2023 13:32:21.
trace.py File 29870 bytes June 06 2023 13:32:21.
traceback.py File 23611 bytes June 06 2023 13:32:21.
tracemalloc.py File 17076 bytes June 06 2023 13:32:21.
tty.py File 879 bytes June 06 2023 13:32:21.
turtle.py File 143716 bytes June 06 2023 13:32:21.
types.py File 9713 bytes June 06 2023 13:32:21.
typing.py File 68962 bytes June 06 2023 13:32:21.
uu.py File 7277 bytes October 17 2023 18:12:57.
uuid.py File 30515 bytes October 17 2023 18:02:14.
warnings.py File 19688 bytes June 06 2023 13:32:21.
wave.py File 18230 bytes June 06 2023 13:32:21.
weakref.py File 21387 bytes June 06 2023 13:32:21.
webbrowser.py File 24083 bytes June 06 2023 13:32:21.
xdrlib.py File 5913 bytes June 06 2023 13:32:21.
zipapp.py File 7535 bytes June 06 2023 13:32:21.
zipfile.py File 87728 bytes June 06 2023 13:32:21.
zipimport.py File 30765 bytes June 06 2023 13:32:21.

Reading File: //usr/lib64//python3.8/mailcap.py

"""Mailcap file handling.  See RFC 1524."""

import os
import warnings
import re

__all__ = ["getcaps","findmatch"]


def lineno_sort_key(entry):
    # Sort in ascending order, with unspecified entries at the end
    if 'lineno' in entry:
        return 0, entry['lineno']
    else:
        return 1, 0

_find_unsafe = re.compile(r'[^\xa1-\U0010FFFF\w@+=:,./-]').search

class UnsafeMailcapInput(Warning):
    """Warning raised when refusing unsafe input"""


# Part 1: top-level interface.

def getcaps():
    """Return a dictionary containing the mailcap database.

    The dictionary maps a MIME type (in all lowercase, e.g. 'text/plain')
    to a list of dictionaries corresponding to mailcap entries.  The list
    collects all the entries for that MIME type from all available mailcap
    files.  Each dictionary contains key-value pairs for that MIME type,
    where the viewing command is stored with the key "view".

    """
    caps = {}
    lineno = 0
    for mailcap in listmailcapfiles():
        try:
            fp = open(mailcap, 'r')
        except OSError:
            continue
        with fp:
            morecaps, lineno = _readmailcapfile(fp, lineno)
        for key, value in morecaps.items():
            if not key in caps:
                caps[key] = value
            else:
                caps[key] = caps[key] + value
    return caps

def listmailcapfiles():
    """Return a list of all mailcap files found on the system."""
    # This is mostly a Unix thing, but we use the OS path separator anyway
    if 'MAILCAPS' in os.environ:
        pathstr = os.environ['MAILCAPS']
        mailcaps = pathstr.split(os.pathsep)
    else:
        if 'HOME' in os.environ:
            home = os.environ['HOME']
        else:
            # Don't bother with getpwuid()
            home = '.' # Last resort
        mailcaps = [home + '/.mailcap', '/etc/mailcap',
                '/usr/etc/mailcap', '/usr/local/etc/mailcap']
    return mailcaps


# Part 2: the parser.
def readmailcapfile(fp):
    """Read a mailcap file and return a dictionary keyed by MIME type."""
    warnings.warn('readmailcapfile is deprecated, use getcaps instead',
                  DeprecationWarning, 2)
    caps, _ = _readmailcapfile(fp, None)
    return caps


def _readmailcapfile(fp, lineno):
    """Read a mailcap file and return a dictionary keyed by MIME type.

    Each MIME type is mapped to an entry consisting of a list of
    dictionaries; the list will contain more than one such dictionary
    if a given MIME type appears more than once in the mailcap file.
    Each dictionary contains key-value pairs for that MIME type, where
    the viewing command is stored with the key "view".
    """
    caps = {}
    while 1:
        line = fp.readline()
        if not line: break
        # Ignore comments and blank lines
        if line[0] == '#' or line.strip() == '':
            continue
        nextline = line
        # Join continuation lines
        while nextline[-2:] == '\\\n':
            nextline = fp.readline()
            if not nextline: nextline = '\n'
            line = line[:-2] + nextline
        # Parse the line
        key, fields = parseline(line)
        if not (key and fields):
            continue
        if lineno is not None:
            fields['lineno'] = lineno
            lineno += 1
        # Normalize the key
        types = key.split('/')
        for j in range(len(types)):
            types[j] = types[j].strip()
        key = '/'.join(types).lower()
        # Update the database
        if key in caps:
            caps[key].append(fields)
        else:
            caps[key] = [fields]
    return caps, lineno

def parseline(line):
    """Parse one entry in a mailcap file and return a dictionary.

    The viewing command is stored as the value with the key "view",
    and the rest of the fields produce key-value pairs in the dict.
    """
    fields = []
    i, n = 0, len(line)
    while i < n:
        field, i = parsefield(line, i, n)
        fields.append(field)
        i = i+1 # Skip semicolon
    if len(fields) < 2:
        return None, None
    key, view, rest = fields[0], fields[1], fields[2:]
    fields = {'view': view}
    for field in rest:
        i = field.find('=')
        if i < 0:
            fkey = field
            fvalue = ""
        else:
            fkey = field[:i].strip()
            fvalue = field[i+1:].strip()
        if fkey in fields:
            # Ignore it
            pass
        else:
            fields[fkey] = fvalue
    return key, fields

def parsefield(line, i, n):
    """Separate one key-value pair in a mailcap entry."""
    start = i
    while i < n:
        c = line[i]
        if c == ';':
            break
        elif c == '\\':
            i = i+2
        else:
            i = i+1
    return line[start:i].strip(), i


# Part 3: using the database.

def findmatch(caps, MIMEtype, key='view', filename="/dev/null", plist=[]):
    """Find a match for a mailcap entry.

    Return a tuple containing the command line, and the mailcap entry
    used; (None, None) if no match is found.  This may invoke the
    'test' command of several matching entries before deciding which
    entry to use.

    """
    if _find_unsafe(filename):
        msg = "Refusing to use mailcap with filename %r. Use a safe temporary filename." % (filename,)
        warnings.warn(msg, UnsafeMailcapInput)
        return None, None
    entries = lookup(caps, MIMEtype, key)
    # XXX This code should somehow check for the needsterminal flag.
    for e in entries:
        if 'test' in e:
            test = subst(e['test'], filename, plist)
            if test is None:
                continue
            if test and os.system(test) != 0:
                continue
        command = subst(e[key], MIMEtype, filename, plist)
        if command is not None:
            return command, e
    return None, None

def lookup(caps, MIMEtype, key=None):
    entries = []
    if MIMEtype in caps:
        entries = entries + caps[MIMEtype]
    MIMEtypes = MIMEtype.split('/')
    MIMEtype = MIMEtypes[0] + '/*'
    if MIMEtype in caps:
        entries = entries + caps[MIMEtype]
    if key is not None:
        entries = [e for e in entries if key in e]
    entries = sorted(entries, key=lineno_sort_key)
    return entries

def subst(field, MIMEtype, filename, plist=[]):
    # XXX Actually, this is Unix-specific
    res = ''
    i, n = 0, len(field)
    while i < n:
        c = field[i]; i = i+1
        if c != '%':
            if c == '\\':
                c = field[i:i+1]; i = i+1
            res = res + c
        else:
            c = field[i]; i = i+1
            if c == '%':
                res = res + c
            elif c == 's':
                res = res + filename
            elif c == 't':
                if _find_unsafe(MIMEtype):
                    msg = "Refusing to substitute MIME type %r into a shell command." % (MIMEtype,)
                    warnings.warn(msg, UnsafeMailcapInput)
                    return None
                res = res + MIMEtype
            elif c == '{':
                start = i
                while i < n and field[i] != '}':
                    i = i+1
                name = field[start:i]
                i = i+1
                param = findparam(name, plist)
                if _find_unsafe(param):
                    msg = "Refusing to substitute parameter %r (%s) into a shell command" % (param, name)
                    warnings.warn(msg, UnsafeMailcapInput)
                    return None
                res = res + param
            # XXX To do:
            # %n == number of parts if type is multipart/*
            # %F == list of alternating type and filename for parts
            else:
                res = res + '%' + c
    return res

def findparam(name, plist):
    name = name.lower() + '='
    n = len(name)
    for p in plist:
        if p[:n].lower() == name:
            return p[n:]
    return ''


# Part 4: test program.

def test():
    import sys
    caps = getcaps()
    if not sys.argv[1:]:
        show(caps)
        return
    for i in range(1, len(sys.argv), 2):
        args = sys.argv[i:i+2]
        if len(args) < 2:
            print("usage: mailcap [MIMEtype file] ...")
            return
        MIMEtype = args[0]
        file = args[1]
        command, e = findmatch(caps, MIMEtype, 'view', file)
        if not command:
            print("No viewer found for", type)
        else:
            print("Executing:", command)
            sts = os.system(command)
            if sts:
                print("Exit status:", sts)

def show(caps):
    print("Mailcap files:")
    for fn in listmailcapfiles(): print("\t" + fn)
    print()
    if not caps: caps = getcaps()
    print("Mailcap entries:")
    print()
    ckeys = sorted(caps)
    for type in ckeys:
        print(type)
        entries = caps[type]
        for e in entries:
            keys = sorted(e)
            for k in keys:
                print("  %-15s" % k, e[k])
            print()

if __name__ == '__main__':
    test()

SILENT KILLER Tool