aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Ryabitsev <konstantin@linuxfoundation.org>2021-05-05 13:24:42 -0400
committerKonstantin Ryabitsev <konstantin@linuxfoundation.org>2021-05-05 13:24:42 -0400
commit111c56cbe7a6b7a1b425f23681fd39b2296c4a39 (patch)
tree5e42b467c3fe6139a687e5b60b4ba3bbda59da9b
parentd27e5a8000f3a8bc706e5d4fb1ae724d9dd34d05 (diff)
downloadpatatt-111c56cbe7a6b7a1b425f23681fd39b2296c4a39.tar.gz
A few more usability/UI tweaks
- support validating an entire mbox file - fix sendemail hook invocation Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
-rw-r--r--.gitignore1
-rw-r--r--patatt/__init__.py33
-rwxr-xr-xsendemail-validate-hook2
3 files changed, 22 insertions, 14 deletions
diff --git a/.gitignore b/.gitignore
index 6966957..d368c60 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@ __pycache__
*.egg-info
build
dist
+outgoing
diff --git a/patatt/__init__.py b/patatt/__init__.py
index 39ed6f6..a0cbb7d 100644
--- a/patatt/__init__.py
+++ b/patatt/__init__.py
@@ -880,11 +880,20 @@ def validate_message(msgdata: bytes, sources: list) -> list:
def cmd_validate(cmdargs, config: dict):
- try:
- messages = _load_messages(cmdargs)
- except IOError as ex:
- logger.critical('E: %s', ex)
- sys.exit(1)
+ import mailbox
+ if len(cmdargs.msgfile) == 1:
+ # Try to open as an mbox file
+ mbox = mailbox.mbox(cmdargs.msgfile[0])
+ messages = dict()
+ for msg in mbox:
+ subject = msg.get('Subject', 'No subject')
+ messages[subject] = msg.as_bytes()
+ else:
+ try:
+ messages = _load_messages(cmdargs)
+ except IOError as ex:
+ logger.critical('E: %s', ex)
+ sys.exit(1)
ddir = get_data_dir()
pdir = os.path.join(ddir, 'public')
@@ -896,21 +905,19 @@ def cmd_validate(cmdargs, config: dict):
for fn, msgdata in messages.items():
try:
goodsigs = validate_message(msgdata, sources)
- logger.critical('PASS: %s', os.path.basename(fn))
for identity, signtime, keysrc, algo in goodsigs:
- logger.info(' by : %s (%s)', identity, algo)
+ logger.critical('PASS | %s | %s', identity, fn)
if keysrc:
- logger.info(' key: %s', keysrc)
+ logger.info(' key: %s/%s', algo, keysrc)
else:
- logger.info(' key: default keyring')
+ logger.info(' key: default GnuPG keyring')
except ValidationError as ex:
allgood = False
- logger.critical('FAIL: %s', os.path.basename(fn))
- logger.critical(' err: %s', ex)
+ logger.critical('FAIL | err: %s | %s', ex, fn)
except RuntimeError as ex:
allgood = False
- logger.critical('E: %s: %s' % (fn, ex))
+ logger.critical('ERR | err: %s | %s', ex, fn)
if not allgood:
sys.exit(1)
@@ -1012,7 +1019,7 @@ def command() -> None:
sp_sign.set_defaults(func=cmd_sign)
sp_val = subparsers.add_parser('validate', help='Validate a devsig-signed message')
- sp_val.add_argument('msgfile', nargs='*', help='Signed RFC2822 message files to validate')
+ sp_val.add_argument('msgfile', nargs='*', help='Individual signed message files to validate or an mbox')
sp_val.set_defaults(func=cmd_validate)
sp_gen = subparsers.add_parser('genkey', help='Generate a new ed25519 keypair')
diff --git a/sendemail-validate-hook b/sendemail-validate-hook
index 17281a6..3ee80e5 100755
--- a/sendemail-validate-hook
+++ b/sendemail-validate-hook
@@ -6,6 +6,6 @@ else
# Assume we're symlinked into a git checkout
REAL_SCRIPT=$(realpath -e ${BASH_SOURCE[0]})
SCRIPT_TOP="${SCRIPT_TOP:-$(dirname ${REAL_SCRIPT})}"
- PATATT_TOP=$(realpath -e ${SCRIPT_TOP}/..)
+ PATATT_TOP=$(realpath -e ${SCRIPT_TOP})
exec env PYTHONPATH="${PATATT_TOP}" python3 "${PATATT_TOP}/patatt/__init__.py" sign --hook "${1}"
fi