aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Schmidt <jeff.jschmidt@gmail.com>2023-05-07 10:46:56 +0000
committerRobert Clausecker <fuz@FreeBSD.org>2023-05-08 08:25:49 +0000
commit809ff8bfc9d4b3221ed5c5329d70d40ba3c8e900 (patch)
tree83f925b3fafc78b7ea2bfc7b693fab82967ef063
parent2fa8f41807783fc0236b4987c54154a9c68bdcf3 (diff)
downloadports-809ff8bfc9d4b3221ed5c5329d70d40ba3c8e900.tar.gz
ports-809ff8bfc9d4b3221ed5c5329d70d40ba3c8e900.zip
mail/queue-repair: fix with Python 3
Submitter becomes maintainer. Obtained from: https://notes.sagredo.eu/en/qmail-notes-185/queue-repair-21.html PR: 271273 MFH: 2023Q2
-rw-r--r--mail/queue-repair/Makefile4
-rw-r--r--mail/queue-repair/files/patch-queue__repair.py250
2 files changed, 252 insertions, 2 deletions
diff --git a/mail/queue-repair/Makefile b/mail/queue-repair/Makefile
index d1f87269d25c..451c4b9f79fe 100644
--- a/mail/queue-repair/Makefile
+++ b/mail/queue-repair/Makefile
@@ -1,10 +1,10 @@
PORTNAME= queue-repair
PORTVERSION= 0.9.0
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= mail python
MASTER_SITES= http://pyropus.ca/software/${PORTNAME}/
-MAINTAINER= ports@FreeBSD.org
+MAINTAINER= jeff.jschmidt@gmail.com
COMMENT= Qmail queue diagnostic and repair tool
WWW= http://pyropus.ca/software/queue-repair/
diff --git a/mail/queue-repair/files/patch-queue__repair.py b/mail/queue-repair/files/patch-queue__repair.py
new file mode 100644
index 000000000000..e6bbfde3be65
--- /dev/null
+++ b/mail/queue-repair/files/patch-queue__repair.py
@@ -0,0 +1,250 @@
+https://bz-attachments.freebsd.org/attachment.cgi?id=242009
+
+--- queue_repair.py.orig 2003-10-22 15:54:13 UTC
++++ queue_repair.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/local/bin/python3.9
+ '''queue_repair.py - qmail tools in Python.
+ Copyright (C) 2001 Charles Cazabon <pqt @ discworld.dyndns.org>
+
+@@ -58,7 +58,7 @@ users = {
+
+ groups = {
+ 'qmail' : None,
+- 'nofiles' : None,
++ 'qnofiles' : None,
+ }
+
+ dirs = {
+@@ -66,24 +66,24 @@ dirs = {
+ # key: pathname - all paths are relative to conf-qmail
+ # data: (user, group, mode, split)
+ # split is: 0 : no, 1 : yes, -1 : only with big-todo
+- 'queue' : ('qmailq', 'qmail', 0750, 0),
+- 'queue/bounce' : ('qmails', 'qmail', 0700, 0),
+- 'queue/info' : ('qmails', 'qmail', 0700, 1),
+- 'queue/intd' : ('qmailq', 'qmail', 0700, -1),
+- 'queue/local' : ('qmails', 'qmail', 0700, 1),
+- 'queue/lock' : ('qmailq', 'qmail', 0750, 0),
+- 'queue/mess' : ('qmailq', 'qmail', 0750, 1),
+- 'queue/pid' : ('qmailq', 'qmail', 0700, 0),
+- 'queue/remote' : ('qmails', 'qmail', 0700, 1),
+- 'queue/todo' : ('qmailq', 'qmail', 0750, -1),
++ 'queue' : ('qmailq', 'qmail', 0o750, 0),
++ 'queue/bounce' : ('qmails', 'qmail', 0o700, 0),
++ 'queue/info' : ('qmails', 'qmail', 0o700, 1),
++ 'queue/intd' : ('qmailq', 'qmail', 0o700, -1),
++ 'queue/local' : ('qmails', 'qmail', 0o700, 1),
++ 'queue/lock' : ('qmailq', 'qmail', 0o750, 0),
++ 'queue/mess' : ('qmailq', 'qmail', 0o750, 1),
++ 'queue/pid' : ('qmailq', 'qmail', 0o700, 0),
++ 'queue/remote' : ('qmails', 'qmail', 0o700, 1),
++ 'queue/todo' : ('qmailq', 'qmail', 0o750, -1),
+ }
+
+ nondirs = {
+ # Files to check; format is:
+ # key: pathname - all paths are relative to conf-qmail
+ # data: (user, group, mode)
+- 'queue/lock/sendmutex' : ('qmails', 'qmail', 0600),
+- 'queue/lock/tcpto' : ('qmailr', 'qmail', 0644),
++ 'queue/lock/sendmutex' : ('qmails', 'qmail', 0o600),
++ 'queue/lock/tcpto' : ('qmailr', 'qmail', 0o644),
+ }
+
+
+@@ -105,7 +105,7 @@ def primes(min, max):
+ while i <= max:
+ for p in primelist:
+ if (i % p == 0) or (p * p > i): break
+- if (i % p <> 0):
++ if (i % p != 0):
+ primelist.append(i)
+ if i >= min:
+ result.append(i)
+@@ -151,8 +151,8 @@ def determine_users():
+ '''
+ global users, groups
+ msg('finding qmail UIDs/GIDs...')
+- us = users.keys()
+- gs = groups.keys()
++ us = list(users.keys())
++ gs = list(groups.keys())
+ for u in us:
+ if users[u]:
+ # Handle case of someone else determining UIDs for us
+@@ -182,7 +182,7 @@ def check_dir(path, user, group, mode):
+ that it has octal mode mode. If testmode is set, create path if it
+ doesn't exist.
+ '''
+- if checked_dir.has_key(path):
++ if path in checked_dir:
+ return
+ msg(' checking directory %s...' % path)
+ if not os.path.exists(path):
+@@ -208,7 +208,7 @@ def chown(path, user, group):
+
+ Verify path is owned by user:group, and make it so if testmode is not set.
+ '''
+- if checked_owner.has_key(path):
++ if path in checked_owner:
+ return
+ uid = users[user]
+ gid = groups[group]
+@@ -223,7 +223,7 @@ def chown(path, user, group):
+ msg(' fixed, %s ownership %i:%i' % (path, s[ST_UID], s[ST_GID]))
+ else:
+ msg(' testmode, not fixing')
+- except OSError, o:
++ except OSError as o:
+ err(o or '[no error message]')
+ checked_owner[path] = None
+
+@@ -233,7 +233,7 @@ def chmod(path, mode):
+
+ Verify path has mode mode, and make it so if testmode is not set.
+ '''
+- if checked_mode.has_key(path):
++ if path in checked_mode:
+ return
+ try:
+ s = os.stat(path)
+@@ -247,7 +247,7 @@ def chmod(path, mode):
+ msg(' changed %s mode to %o' % (path, newmode))
+ else:
+ msg(' testmode, not fixing')
+- except OSError, o:
++ except OSError as o:
+ err(o or '[no error message]')
+ checked_mode[path] = None
+
+@@ -259,7 +259,7 @@ def determine_split():
+ '''
+ splits = []
+ msg('determining conf-split...')
+- for (path, (user, group, mode, is_split)) in dirs.items():
++ for (path, (user, group, mode, is_split)) in list(dirs.items()):
+ if is_split != 1:
+ continue
+ highest = 0
+@@ -311,7 +311,7 @@ def determine_bigtodo(split):
+ else:
+ msg(' found unexpected direntry %s' % p)
+
+- if splits == range(split):
++ if splits == list(range(split)):
+ # big-todo apparently in use
+ bigtodo = 1
+ msg(' big-todo found')
+@@ -330,14 +330,14 @@ def check_dirs(paths, split, bigtodo):
+ Verify ownership, mode, and contents of each queue directory in paths.
+ '''
+ msg('checking main queue directories...')
+- _dirs = paths.keys()
++ _dirs = list(paths.keys())
+ _dirs.sort()
+ for path in _dirs:
+ (user, group, mode, is_split) = paths[path]
+ check_dir(path, user, group, mode)
+
+ msg('checking split sub-directories...')
+- for (path, (user, group, mode, is_split)) in paths.items():
++ for (path, (user, group, mode, is_split)) in list(paths.items()):
+ if path in ('queue', 'queue/lock'):
+ # Nothing in these directories to check at this point
+ continue
+@@ -345,7 +345,7 @@ def check_dirs(paths, split, bigtodo):
+ if not this_split:
+ splits = []
+ else:
+- splits = range(split)
++ splits = list(range(split))
+ for i in splits:
+ splitpath = os.path.join(path, str(i))
+ check_dir(splitpath, user, group, mode)
+@@ -428,7 +428,7 @@ def check_files(paths):
+ Verify ownership and mode of each queue file in paths.
+ '''
+ msg('checking files...')
+- for (path, (user, group, mode)) in paths.items():
++ for (path, (user, group, mode)) in list(paths.items()):
+ if os.path.exists(path):
+ if not os.path.isfile(path):
+ msg(' %s is not a file' % path)
+@@ -467,7 +467,7 @@ def check_trigger():
+ if not os.path.exists(path) and not testmode:
+ os.mkfifo(path)
+ chown(path, user, group)
+- chmod(path, 0622)
++ chmod(path, 0o622)
+
+ #######################################
+ def check_messages(path, split):
+@@ -516,7 +516,7 @@ def fix_inode_names(paths, split, bigtodo, misnamed):
+ check_messages(). Correct split sub-directory location as well.
+ '''
+ msg('fixing misnamed messages...')
+- for (path, (user, junk, junk, is_split)) in paths.items():
++ for (path, (user, junk, junk, is_split)) in list(paths.items()):
+ for (oldhash, oldno, newno) in misnamed:
+ if not is_splitdir(is_split, bigtodo):
+ old_p = os.path.join(path, str(oldno))
+@@ -544,17 +544,17 @@ def check_hash_and_ownership(paths, split, bigtodo):
+ of all files found.
+ '''
+ msg('checking split locations...')
+- for (path, (user, group, junk, is_split)) in paths.items():
++ for (path, (user, group, junk, is_split)) in list(paths.items()):
+ if path in ('queue', 'queue/lock'):
+ # Nothing in these directories to check at this point
+ continue
+ elif path in ('queue/mess', 'queue/todo'):
+- mode = 0644
++ mode = 0o644
+ else:
+- mode = 0600
++ mode = 0o600
+ this_split = is_splitdir(is_split, bigtodo)
+ if this_split:
+- splits = range(split)
++ splits = list(range(split))
+ else:
+ splits = ['']
+ for splitval in splits:
+@@ -635,7 +635,7 @@ def check_queue(qmaildir=confqmail, test=1, force_spli
+ wd = os.getcwd()
+ try:
+ os.chdir(qmaildir)
+- except StandardError:
++ except Exception:
+ err('failed to chdir to %s' % qmaildir)
+
+ if testmode:
+@@ -747,7 +747,7 @@ def main():
+ if force_split < 1:
+ raise ValueError
+ except ValueError:
+- raise getopt.error, 'split value must be a positive integer (%s)' % value
++ raise getopt.error('split value must be a positive integer (%s)' % value)
+ elif option in ('-n', '--no-bigtodo'):
+ force_bigtodo = -1
+ elif option in ('-b', '--bigtodo'):
+@@ -765,10 +765,10 @@ def main():
+ create = 1
+ if args:
+ if len(args) > 1:
+- raise getopt.error, 'conf-qmail must be a single argument (%s)' % string.join(args)
++ raise getopt.error('conf-qmail must be a single argument (%s)' % string.join(args))
+ qmaildir = args[0]
+
+- except getopt.error, o:
++ except getopt.error as o:
+ err('Error: %s' % o, showhelp=1)
+
+ check_queue(qmaildir, test, force_split, force_bigtodo, create, mathishard)
+@@ -776,3 +776,4 @@ def main():
+ #######################################
+ if __name__ == '__main__':
+ main()
++