aboutsummaryrefslogtreecommitdiff
path: root/src/mailman_pgp/rules
diff options
context:
space:
mode:
authorJ08nY2017-08-21 17:20:29 +0200
committerJ08nY2017-08-21 17:20:29 +0200
commitc74e96f813542d94592bf80c24afdec5d6988b2a (patch)
treee4d8374afd9fcd985a12de636771a9e4203ab96d /src/mailman_pgp/rules
parent54ad58f448f23cd26bbfad6abcfe5e4ca9b686ee (diff)
downloadmailman-pgp-c74e96f813542d94592bf80c24afdec5d6988b2a.tar.gz
mailman-pgp-c74e96f813542d94592bf80c24afdec5d6988b2a.tar.zst
mailman-pgp-c74e96f813542d94592bf80c24afdec5d6988b2a.zip
Diffstat (limited to 'src/mailman_pgp/rules')
-rw-r--r--src/mailman_pgp/rules/signature.py11
-rw-r--r--src/mailman_pgp/rules/tests/test_signature.py21
2 files changed, 31 insertions, 1 deletions
diff --git a/src/mailman_pgp/rules/signature.py b/src/mailman_pgp/rules/signature.py
index 998e9c3..b7d4b5c 100644
--- a/src/mailman_pgp/rules/signature.py
+++ b/src/mailman_pgp/rules/signature.py
@@ -35,7 +35,7 @@ from mailman_pgp.model.sighash import PGPSigHash
from mailman_pgp.pgp.wrapper import PGPWrapper
from mailman_pgp.utils.email import get_email
from mailman_pgp.utils.moderation import record_action
-from mailman_pgp.utils.pgp import hashes, verifies
+from mailman_pgp.utils.pgp import hashes, verifies, expired
@public
@@ -96,6 +96,15 @@ class Signature:
return True
verifications = list(wrapped.verify(key))
+ # verifications is a list of SignatureVerification, only contains
+ # sigs that appear to be by the pgp_address.key
+
+ if expired(verifications):
+ action = pgp_list.expired_sig_action
+ if action != Action.defer:
+ record_action(msg, msgdata, action, email,
+ 'Signature is expired.')
+ return True
# Take the `invalid_sig_action` if the verification failed.
if not verifies(verifications):
diff --git a/src/mailman_pgp/rules/tests/test_signature.py b/src/mailman_pgp/rules/tests/test_signature.py
index ff9b9c4..72f2c70 100644
--- a/src/mailman_pgp/rules/tests/test_signature.py
+++ b/src/mailman_pgp/rules/tests/test_signature.py
@@ -16,6 +16,8 @@
# this program. If not, see <http://www.gnu.org/licenses/>.
""""""
+import time
+from datetime import timedelta
from unittest import TestCase
from mailman.app.lifecycle import create_list
@@ -35,6 +37,7 @@ from mailman_pgp.database import mm_transaction, transaction
from mailman_pgp.model.address import PGPAddress
from mailman_pgp.model.list import PGPMailingList
from mailman_pgp.model.sighash import PGPSigHash
+from mailman_pgp.pgp.mime import MIMEWrapper
from mailman_pgp.pgp.wrapper import PGPWrapper
from mailman_pgp.rules.signature import Signature
from mailman_pgp.testing.layers import PGPConfigLayer
@@ -160,6 +163,24 @@ To: test@example.com
matches = self.rule.check(self.mlist, self.msg_mime_signed, msgdata)
self.assertFalse(matches)
+ def test_expired_sig_action(self):
+ with transaction():
+ self.pgp_list.unsigned_msg_action = Action.defer
+ self.pgp_list.inline_pgp_action = Action.defer
+ self.pgp_list.expired_sig_action = Action.hold
+ self.pgp_list.invalid_sig_action = Action.defer
+ self.pgp_list.revoked_sig_action = Action.defer
+ self.pgp_list.duplicate_sig_action = Action.defer
+
+ msgdata = {}
+ wrapped = MIMEWrapper(self.msg_clear)
+ msg = wrapped.sign(self.sender_key, expires=timedelta(seconds=1))
+ time.sleep(2)
+ matches = self.rule.check(self.mlist, msg, msgdata)
+
+ self.assertTrue(matches)
+ self.assertAction(msgdata, Action.hold, ['Signature is expired.'])
+
def test_invalid_sig_action(self):
with transaction():
self.pgp_list.unsigned_msg_action = Action.defer