✘✘ GRAYBYTE WORDPRESS FILE MANAGER ✘✘

​🇳​​🇦​​🇲​​🇪♯➤ beluga.o2switch.net ​🇻​♯➤ 4.18.0-553.123.2.lve.el8.x86_64 #1 SMP 🇾​♯➤ 2026

𝗛𝗢𝗠𝗘 𝗜𝗗 ♯➤ 185.154.139.77 ♯➤ 𝗔𝗗𝗠𝗜𝗡 𝗜𝗗 216.73.216.254
𝗢𝗣𝗧𝗜𝗢𝗡𝗦 ♯ CRL ♯➤ 𝗢𝗞 ┃ WGT ♯➤ 𝗢𝗞 ┃ SDO ♯➤ 𝗢𝗙𝗙 ┃ PKEX ♯➤ 𝗢𝗙𝗙
𝗗𝗘𝗔𝗖𝗧𝗜𝗩𝗔𝗧𝗘𝗗 ♯➤ 𝗔𝗟𝗟 𝗪𝗢𝗥𝗞𝗜𝗡𝗚....

𝗛𝗢𝗠𝗘
𝗖𝗨𝗥𝗥𝗘𝗡𝗧 𝗙𝗜𝗟𝗘 : /opt/alt/python35/lib64/python3.5/Tools/scripts//mailerdaemon.py
#! /opt/alt/python35/bin/python3.5
"""Classes to parse mailer-daemon messages."""

import calendar
import email.message
import re
import os
import sys


class Unparseable(Exception):
    pass


class ErrorMessage(email.message.Message):
    def __init__(self):
        email.message.Message.__init__(self)
        self.sub = ''

    def is_warning(self):
        sub = self.get('Subject')
        if not sub:
            return 0
        sub = sub.lower()
        if sub.startswith('waiting mail'):
            return 1
        if 'warning' in sub:
            return 1
        self.sub = sub
        return 0

    def get_errors(self):
        for p in EMPARSERS:
            self.rewindbody()
            try:
                return p(self.fp, self.sub)
            except Unparseable:
                pass
        raise Unparseable

# List of re's or tuples of re's.
# If a re, it should contain at least a group (?P<email>...) which
# should refer to the email address.  The re can also contain a group
# (?P<reason>...) which should refer to the reason (error message).
# If no reason is present, the emparse_list_reason list is used to
# find a reason.
# If a tuple, the tuple should contain 2 re's.  The first re finds a
# location, the second re is repeated one or more times to find
# multiple email addresses.  The second re is matched (not searched)
# where the previous match ended.
# The re's are compiled using the re module.
emparse_list_list = [
    'error: (?P<reason>unresolvable): (?P<email>.+)',
    ('----- The following addresses had permanent fatal errors -----\n',
     '(?P<email>[^ \n].*)\n( .*\n)?'),
    'remote execution.*\n.*rmail (?P<email>.+)',
    ('The following recipients did not receive your message:\n\n',
     ' +(?P<email>.*)\n(The following recipients did not receive your message:\n\n)?'),
    '------- Failure Reasons  --------\n\n(?P<reason>.*)\n(?P<email>.*)',
    '^<(?P<email>.*)>:\n(?P<reason>.*)',
    '^(?P<reason>User mailbox exceeds allowed size): (?P<email>.+)',
    '^5\\d{2} <(?P<email>[^\n>]+)>\\.\\.\\. (?P<reason>.+)',
    '^Original-Recipient: rfc822;(?P<email>.*)',
    '^did not reach the following recipient\\(s\\):\n\n(?P<email>.*) on .*\n +(?P<reason>.*)',
    '^ <(?P<email>[^\n>]+)> \\.\\.\\. (?P<reason>.*)',
    '^Report on your message to: (?P<email>.*)\nReason: (?P<reason>.*)',
    '^Your message was not delivered to +(?P<email>.*)\n +for the following reason:\n +(?P<reason>.*)',
    '^ was not +(?P<email>[^ \n].*?) *\n.*\n.*\n.*\n because:.*\n +(?P<reason>[^ \n].*?) *\n',
    ]
# compile the re's in the list and store them in-place.
for i in range(len(emparse_list_list)):
    x = emparse_list_list[i]
    if type(x) is type(''):
        x = re.compile(x, re.MULTILINE)
    else:
        xl = []
        for x in x:
            xl.append(re.compile(x, re.MULTILINE))
        x = tuple(xl)
        del xl
    emparse_list_list[i] = x
    del x
del i

# list of re's used to find reasons (error messages).
# if a string, "<>" is replaced by a copy of the email address.
# The expressions are searched for in order.  After the first match,
# no more expressions are searched for.  So, order is important.
emparse_list_reason = [
    r'^5\d{2} <>\.\.\. (?P<reason>.*)',
    '<>\.\.\. (?P<reason>.*)',
    re.compile(r'^<<< 5\d{2} (?P<reason>.*)', re.MULTILINE),
    re.compile('===== stderr was =====\nrmail: (?P<reason>.*)'),
    re.compile('^Diagnostic-Code: (?P<reason>.*)', re.MULTILINE),
    ]
emparse_list_from = re.compile('^From:', re.IGNORECASE|re.MULTILINE)
def emparse_list(fp, sub):
    data = fp.read()
    res = emparse_list_from.search(data)
    if res is None:
        from_index = len(data)
    else:
        from_index = res.start(0)
    errors = []
    emails = []
    reason = None
    for regexp in emparse_list_list:
        if type(regexp) is type(()):
            res = regexp[0].search(data, 0, from_index)
            if res is not None:
                try:
                    reason = res.group('reason')
                except IndexError:
                    pass
                while 1:
                    res = regexp[1].match(data, res.end(0), from_index)
                    if res is None:
                        break
                    emails.append(res.group('email'))
                break
        else:
            res = regexp.search(data, 0, from_index)
            if res is not None:
                emails.append(res.group('email'))
                try:
                    reason = res.group('reason')
                except IndexError:
                    pass
                break
    if not emails:
        raise Unparseable
    if not reason:
        reason = sub
        if reason[:15] == 'returned mail: ':
            reason = reason[15:]
        for regexp in emparse_list_reason:
            if type(regexp) is type(''):
                for i in range(len(emails)-1,-1,-1):
                    email = emails[i]
                    exp = re.compile(re.escape(email).join(regexp.split('<>')), re.MULTILINE)
                    res = exp.search(data)
                    if res is not None:
                        errors.append(' '.join((email.strip()+': '+res.group('reason')).split()))
                        del emails[i]
                continue
            res = regexp.search(data)
            if res is not None:
                reason = res.group('reason')
                break
    for email in emails:
        errors.append(' '.join((email.strip()+': '+reason).split()))
    return errors

EMPARSERS = [emparse_list]

def sort_numeric(a, b):
    a = int(a)
    b = int(b)
    if a < b:
        return -1
    elif a > b:
        return 1
    else:
        return 0

def parsedir(dir, modify):
    os.chdir(dir)
    pat = re.compile('^[0-9]*$')
    errordict = {}
    errorfirst = {}
    errorlast = {}
    nok = nwarn = nbad = 0

    # find all numeric file names and sort them
    files = list(filter(lambda fn, pat=pat: pat.match(fn) is not None, os.listdir('.')))
    files.sort(sort_numeric)

    for fn in files:
        # Lets try to parse the file.
        fp = open(fn)
        m = email.message_from_file(fp, _class=ErrorMessage)
        sender = m.getaddr('From')
        print('%s\t%-40s\t'%(fn, sender[1]), end=' ')

        if m.is_warning():
            fp.close()
            print('warning only')
            nwarn = nwarn + 1
            if modify:
                os.rename(fn, ','+fn)
##              os.unlink(fn)
            continue

        try:
            errors = m.get_errors()
        except Unparseable:
            print('** Not parseable')
            nbad = nbad + 1
            fp.close()
            continue
        print(len(errors), 'errors')

        # Remember them
        for e in errors:
            try:
                mm, dd = m.getdate('date')[1:1+2]
                date = '%s %02d' % (calendar.month_abbr[mm], dd)
            except:
                date = '??????'
            if e not in errordict:
                errordict[e] = 1
                errorfirst[e] = '%s (%s)' % (fn, date)
            else:
                errordict[e] = errordict[e] + 1
            errorlast[e] = '%s (%s)' % (fn, date)

        fp.close()
        nok = nok + 1
        if modify:
            os.rename(fn, ','+fn)
##          os.unlink(fn)

    print('--------------')
    print(nok, 'files parsed,',nwarn,'files warning-only,', end=' ')
    print(nbad,'files unparseable')
    print('--------------')
    list = []
    for e in errordict.keys():
        list.append((errordict[e], errorfirst[e], errorlast[e], e))
    list.sort()
    for num, first, last, e in list:
        print('%d %s - %s\t%s' % (num, first, last, e))

def main():
    modify = 0
    if len(sys.argv) > 1 and sys.argv[1] == '-d':
        modify = 1
        del sys.argv[1]
    if len(sys.argv) > 1:
        for folder in sys.argv[1:]:
            parsedir(folder, modify)
    else:
        parsedir('/ufs/jack/Mail/errorsinbox', modify)

if __name__ == '__main__' or sys.argv[0] == __name__:
    main()


Current_dir [ 𝗡𝗢𝗧 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ] Document_root [ 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ]


[ Back ]
𝗡𝗔𝗠𝗘
𝗦𝗜𝗭𝗘
𝗟𝗔𝗦𝗧 𝗧𝗢𝗨𝗖𝗛
𝗨𝗦𝗘𝗥
𝗦𝗧𝗔𝗧𝗨𝗦
𝗙𝗨𝗡𝗖𝗧𝗜𝗢𝗡𝗦
..
--
7 Feb 2025 5.02 AM
root / linksafe
0755
__pycache__
--
7 Feb 2025 5.02 AM
root / linksafe
0755
2to3
0.094 KB
1 Nov 2019 11.02 PM
root / linksafe
0755
README
4.669 KB
1 Nov 2019 11.02 PM
root / linksafe
0644
abitype.py
5.453 KB
31 May 2024 1.51 PM
root / linksafe
0755
analyze_dxp.py
4.085 KB
31 May 2024 1.51 PM
root / linksafe
0644
byext.py
3.835 KB
31 May 2024 1.51 PM
root / linksafe
0755
byteyears.py
1.622 KB
31 May 2024 1.51 PM
root / linksafe
0755
checkpip.py
0.793 KB
31 May 2024 1.51 PM
root / linksafe
0755
checkpyc.py
2.174 KB
31 May 2024 1.51 PM
root / linksafe
0755
cleanfuture.py
8.432 KB
31 May 2024 1.51 PM
root / linksafe
0755
combinerefs.py
4.321 KB
31 May 2024 1.51 PM
root / linksafe
0755
copytime.py
0.658 KB
31 May 2024 1.51 PM
root / linksafe
0755
crlf.py
0.628 KB
31 May 2024 1.51 PM
root / linksafe
0755
db2pickle.py
3.557 KB
31 May 2024 1.51 PM
root / linksafe
0755
diff.py
2.221 KB
31 May 2024 1.51 PM
root / linksafe
0755
dutree.doc
2.185 KB
1 Nov 2019 11.02 PM
root / linksafe
0644
dutree.py
1.581 KB
31 May 2024 1.51 PM
root / linksafe
0755
eptags.py
1.469 KB
31 May 2024 1.51 PM
root / linksafe
0755
find-uname.py
1.179 KB
31 May 2024 1.51 PM
root / linksafe
0755
find_recursionlimit.py
3.912 KB
31 May 2024 1.51 PM
root / linksafe
0755
finddiv.py
2.449 KB
31 May 2024 1.51 PM
root / linksafe
0755
findlinksto.py
1.057 KB
31 May 2024 1.51 PM
root / linksafe
0755
findnocoding.py
2.895 KB
31 May 2024 1.51 PM
root / linksafe
0755
fixcid.py
9.826 KB
31 May 2024 1.51 PM
root / linksafe
0755
fixdiv.py
13.565 KB
31 May 2024 1.51 PM
root / linksafe
0755
fixheader.py
1.19 KB
31 May 2024 1.51 PM
root / linksafe
0755
fixnotice.py
2.998 KB
31 May 2024 1.51 PM
root / linksafe
0755
fixps.py
0.89 KB
31 May 2024 1.51 PM
root / linksafe
0755
generate_opcode_h.py
1.504 KB
31 May 2024 1.51 PM
root / linksafe
0644
get-remote-certificate.py
2.656 KB
31 May 2024 1.51 PM
root / linksafe
0755
google.py
0.521 KB
31 May 2024 1.51 PM
root / linksafe
0755
gprof2html.py
2.188 KB
31 May 2024 1.51 PM
root / linksafe
0755
h2py.py
5.479 KB
31 May 2024 1.51 PM
root / linksafe
0755
highlight.py
8.951 KB
31 May 2024 1.51 PM
root / linksafe
0755
idle3
0.094 KB
1 Nov 2019 11.02 PM
root / linksafe
0755
ifdef.py
3.644 KB
31 May 2024 1.51 PM
root / linksafe
0755
import_diagnostics.py
0.987 KB
31 May 2024 1.51 PM
root / linksafe
0755
lfcr.py
0.636 KB
31 May 2024 1.51 PM
root / linksafe
0755
linktree.py
2.394 KB
31 May 2024 1.51 PM
root / linksafe
0755
lll.py
0.745 KB
31 May 2024 1.51 PM
root / linksafe
0755
mailerdaemon.py
7.862 KB
31 May 2024 1.51 PM
root / linksafe
0755
make_ctype.py
2.238 KB
31 May 2024 1.51 PM
root / linksafe
0755
md5sum.py
2.46 KB
31 May 2024 1.51 PM
root / linksafe
0755
mkreal.py
1.604 KB
31 May 2024 1.51 PM
root / linksafe
0755
ndiff.py
3.741 KB
31 May 2024 1.51 PM
root / linksafe
0755
nm2def.py
2.404 KB
31 May 2024 1.51 PM
root / linksafe
0755
objgraph.py
5.851 KB
31 May 2024 1.51 PM
root / linksafe
0755
parse_html5_entities.py
3.917 KB
31 May 2024 1.51 PM
root / linksafe
0755
parseentities.py
1.665 KB
31 May 2024 1.51 PM
root / linksafe
0755
patchcheck.py
9.358 KB
31 May 2024 1.51 PM
root / linksafe
0755
pathfix.py
4.772 KB
31 May 2024 1.51 PM
root / linksafe
0755
pdeps.py
3.834 KB
31 May 2024 1.51 PM
root / linksafe
0755
pickle2db.py
3.938 KB
31 May 2024 1.51 PM
root / linksafe
0755
pindent.py
16.736 KB
31 May 2024 1.51 PM
root / linksafe
0755
ptags.py
1.208 KB
31 May 2024 1.51 PM
root / linksafe
0755
pydoc3
0.078 KB
1 Nov 2019 11.02 PM
root / linksafe
0755
pysource.py
3.785 KB
31 May 2024 1.51 PM
root / linksafe
0755
pyvenv
0.227 KB
1 Nov 2019 11.02 PM
root / linksafe
0755
reindent-rst.py
0.272 KB
31 May 2024 1.51 PM
root / linksafe
0755
reindent.py
11.385 KB
31 May 2024 1.51 PM
root / linksafe
0755
rgrep.py
1.452 KB
31 May 2024 1.51 PM
root / linksafe
0755
run_tests.py
1.874 KB
31 May 2024 1.51 PM
root / linksafe
0644
serve.py
1.146 KB
31 May 2024 1.51 PM
root / linksafe
0755
suff.py
0.509 KB
31 May 2024 1.51 PM
root / linksafe
0755
svneol.py
3.422 KB
31 May 2024 1.51 PM
root / linksafe
0755
texi2html.py
68.535 KB
31 May 2024 1.51 PM
root / linksafe
0755
treesync.py
5.802 KB
31 May 2024 1.51 PM
root / linksafe
0755
untabify.py
1.276 KB
31 May 2024 1.51 PM
root / linksafe
0755
which.py
1.605 KB
31 May 2024 1.51 PM
root / linksafe
0755
win_add2path.py
1.619 KB
31 May 2024 1.51 PM
root / linksafe
0644

✘✘ GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME ✘✘
Static GIF Static GIF