- Fix header folding to use \n only to align with milter protocol

requirements
This commit is contained in:
Scott Kitterman
2018-03-03 14:39:20 -05:00
parent fc583a6e3c
commit c01c04b83f
3 changed files with 37 additions and 1 deletions
+2
View File
@@ -1,6 +1,8 @@
0.9.4 UNRELEASED 0.9.4 UNRELEASED
- Create PID directory if it is missing - Create PID directory if it is missing
- Fix crash when verifying if domain for signing was not set - Fix crash when verifying if domain for signing was not set
- Fix header folding to use \n only to align with milter protocol
requirements
0.9.3 2018-03-02 0.9.3 2018-03-02
- Fixup csl dataset processing for single item lists - Fixup csl dataset processing for single item lists
+2 -1
View File
@@ -40,6 +40,7 @@ from dkimpy_milter.util import setExceptHook
from dkimpy_milter.util import write_pid from dkimpy_milter.util import write_pid
from dkimpy_milter.util import read_keyfile from dkimpy_milter.util import read_keyfile
from dkimpy_milter.util import own_socketfile from dkimpy_milter.util import own_socketfile
from dkimpy_milter.util import fold
__version__ = "0.9.4" __version__ = "0.9.4"
FWS = re.compile(r'\r?\n[ \t]+') FWS = re.compile(r'\r?\n[ \t]+')
@@ -176,7 +177,7 @@ class dkimMilter(Milter.Base):
if self.arresults: if self.arresults:
h = authres.AuthenticationResultsHeader(authserv_id = self.receiver, h = authres.AuthenticationResultsHeader(authserv_id = self.receiver,
results=self.arresults) results=self.arresults)
h = dkim.fold(str(h)) h = fold(str(h))
if milterconfig.get('Syslog'): if milterconfig.get('Syslog'):
syslog.syslog(str(h)) syslog.syslog(str(h))
name,val = str(h).split(': ',1) name,val = str(h).split(': ',1)
+33
View File
@@ -16,6 +16,39 @@
# with this program; if not, write to the Free Software Foundation, Inc., # with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
def fold(header):
"""Fold a header line into multiple crlf-separated lines at column 72.
Borrowed from dkimpy and updated to only add \n instead of \r\n because
that's what the milter protocol wants.
>>> text(fold(b'foo'))
'foo'
>>> text(fold(b'foo '+b'foo'*24).splitlines()[0])
'foo '
>>> text(fold(b'foo'*25).splitlines()[-1])
' foo'
>>> len(fold(b'foo'*25).splitlines()[0])
72
"""
i = header.rfind(b"\r\n ")
if i == -1:
pre = b""
else:
i += 3
pre = header[:i]
header = header[i:]
maxleng = 72
while len(header) > maxleng:
i = header[:maxleng].rfind(b" ")
if i == -1:
j = maxleng
else:
j = i + 1
pre += header[:j] + b"\n "
header = header[j:]
namelen = 0
return pre + header
def user_group(userid): def user_group(userid):
"""Return user and group from UserID""" """Return user and group from UserID"""
import grp import grp