Ver código fonte

return 421 when pgp encryption fails

Son NK 5 anos atrás
pai
commit
9b1ca0a2f1
1 arquivos alterados com 20 adições e 16 exclusões
  1. 20 16
      email_handler.py

+ 20 - 16
email_handler.py

@@ -344,14 +344,10 @@ def prepare_pgp_message(orig_msg: Message, pgp_fingerprint: str):
 
     second = MIMEApplication("octet-stream", _encoder=encoders.encode_7or8bit)
     second.add_header("Content-Disposition", "inline")
-    try:
-        # encrypt original message
-        encrypted_data = pgp_utils.encrypt_file(
-            BytesIO(orig_msg.as_bytes()), pgp_fingerprint
-        )
-    except PGPException:
-        LOG.error("Exit due to PGP fail")
-        exit()
+    # encrypt original message
+    encrypted_data = pgp_utils.encrypt_file(
+        BytesIO(orig_msg.as_bytes()), pgp_fingerprint
+    )
     second.set_payload(encrypted_data)
     msg.attach(second)
 
@@ -421,7 +417,14 @@ def forward_email_to_mailbox(
     # create PGP email if needed
     if mailbox.pgp_finger_print and user.is_premium() and not alias.disable_pgp:
         LOG.d("Encrypt message using mailbox %s", mailbox)
-        msg = prepare_pgp_message(msg, mailbox.pgp_finger_print)
+        try:
+            msg = prepare_pgp_message(msg, mailbox.pgp_finger_print)
+        except PGPException:
+            LOG.error(
+                "Cannot encrypt message %s -> %s. %s %s", contact, alias, mailbox, user
+            )
+            # so the client can retry later
+            return False, "421 SL E12"
 
     # add custom header
     add_or_replace_header(msg, "X-SimpleLogin-Type", "Forward")
@@ -608,7 +611,14 @@ def handle_reply(envelope, smtp: SMTP, msg: Message, rcpt_to: str) -> (bool, str
     # create PGP email if needed
     if contact.pgp_finger_print and user.is_premium():
         LOG.d("Encrypt message for contact %s", contact)
-        msg = prepare_pgp_message(msg, contact.pgp_finger_print)
+        try:
+            msg = prepare_pgp_message(msg, contact.pgp_finger_print)
+        except PGPException:
+            LOG.error(
+                "Cannot encrypt message %s -> %s. %s %s", alias, contact, mailbox, user
+            )
+            # so the client can retry later
+            return False, "421 SL E13"
 
     smtp.sendmail(
         alias.email,
@@ -1065,12 +1075,6 @@ class MailHandler:
             return handle(envelope, smtp)
 
 
-def exit():
-    pid = os.getpid()
-    LOG.warning("kill pid %s", pid)
-    os.kill(pid, 9)
-
-
 if __name__ == "__main__":
     controller = Controller(MailHandler(), hostname="0.0.0.0", port=20381)