From b4398d1bbc14eb5f2138dfbbe7facc5ab0b13c26 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 23 2018 13:45:00 +0000 Subject: [PATCH 1/3] Fix loading pagure's configuration in the milter Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure-milters/comment_email_milter.py b/pagure-milters/comment_email_milter.py index c339beb..d6c6df1 100644 --- a/pagure-milters/comment_email_milter.py +++ b/pagure-milters/comment_email_milter.py @@ -21,7 +21,7 @@ import requests from Milter.utils import parse_addr -import pagure +import pagure.config if 'PAGURE_CONFIG' not in os.environ \ From 0bfe821906a03e5efc429673d6e8f66584ffeaf9 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 23 2018 13:45:00 +0000 Subject: [PATCH 2/3] Fix querying the DB and saving to it in the milter Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure-milters/comment_email_milter.py b/pagure-milters/comment_email_milter.py index d6c6df1..e69c7fb 100644 --- a/pagure-milters/comment_email_milter.py +++ b/pagure-milters/comment_email_milter.py @@ -22,6 +22,7 @@ import requests from Milter.utils import parse_addr import pagure.config +import pagure.lib if 'PAGURE_CONFIG' not in os.environ \ @@ -154,12 +155,14 @@ class PagureMilter(Milter.Base): # they are trying to forge their ID into someone else's salt = _config.get('SALT_EMAIL') from_email = clean_item(msg['From']) + session = pagure.lib.create_session(_config['DB_URL']) try: - user = pagure.lib.get_user(pagure.SESSION, from_email) + user = pagure.lib.get_user(session, from_email) except: self.log( "Could not find an user in the DB associated with %s" % from_email) + session.remove() return Milter.CONTINUE hashes = [] @@ -172,22 +175,27 @@ class PagureMilter(Milter.Base): self.log('hash list: %s' % hashes) self.log('tohash: %s' % tohash) self.log('Hash does not correspond to the destination') + session.remove() return Milter.CONTINUE if msg['From'] and msg['From'] == _config.get('FROM_EMAIL'): self.log("Let's not process the email we send") + session.remove() return Milter.CONTINUE msg_id = clean_item(msg_id) if msg_id and '-ticket-' in msg_id: self.log('Processing issue') + session.remove() return self.handle_ticket_email(msg, msg_id) elif msg_id and '-pull-request-' in msg_id: self.log('Processing pull-request') + session.remove() return self.handle_request_email(msg, msg_id) else: self.log('Not a pagure ticket or pull-request email, let it go') + session.remove() return Milter.CONTINUE def handle_ticket_email(self, emailobj, msg_id): From ef61f6e189c0b0cb1da9765f6585854f3a9ab6b7 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 23 2018 13:45:00 +0000 Subject: [PATCH 3/3] Ensure we are writing out bytes as this is what is expected Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure-milters/comment_email_milter.py b/pagure-milters/comment_email_milter.py index e69c7fb..037dff3 100644 --- a/pagure-milters/comment_email_milter.py +++ b/pagure-milters/comment_email_milter.py @@ -94,20 +94,22 @@ class PagureMilter(Milter.Base): # on the MTA. self.fp = BytesIO() self.canon_from = '@'.join(parse_addr(mailfrom)) - self.fp.write('From %s %s\n' % (self.canon_from, time.ctime())) + from_txt = 'From %s %s\n' % (self.canon_from, time.ctime()) + self.fp.write(from_txt.encode('utf-8')) return Milter.CONTINUE @Milter.noreply def header(self, name, hval): ''' Headers ''' # add header to buffer - self.fp.write("%s: %s\n" % (name, hval)) + header_txt = "%s: %s\n" % (name, hval) + self.fp.write(header_txt.encode('utf-8')) return Milter.CONTINUE @Milter.noreply def eoh(self): ''' End of Headers ''' - self.fp.write("\n") + self.fp.write(b"\n") return Milter.CONTINUE @Milter.noreply