]> code.citadel.org Git - citadel.git/commitdiff
canon headers: replace multiple whitespace with one space
authorArt Cancro <ajc@citadel.org>
Mon, 13 May 2024 15:53:46 +0000 (15:53 +0000)
committerArt Cancro <ajc@citadel.org>
Mon, 13 May 2024 15:53:46 +0000 (15:53 +0000)
citadel/server/modules/smtp/dkim.c
citadel/server/modules/smtp/serv_smtpclient.c
citadel/tests/dkimtester/dkimtester.c

index 81cf04d1a49c7f3712d8f9a1f5042078a9564f63..5f1c4b2f570db3c0bfc874c34abf97ceb09b72e4 100644 (file)
@@ -255,8 +255,27 @@ void dkim_canonicalize_unfolded_headers(StrBuf *headers) {
                }
                char *end_of_this_line = strstr(ptr, "\r\n");
 
-               // remove whitespace at the end of the line
+               // replace all multiple whitespace runs with a single space
                int replaced_something;
+               do {
+                       replaced_something = 0;
+                       char *double_space = strstr(ptr, "  ");                 // space-space?
+                       if (!double_space) {
+                               double_space = strstr(ptr, " \t");              // space-tab?
+                       }
+                       if (!double_space) {
+                               double_space = strstr(ptr, "\t ");              // tab-space?
+                       }
+                       if (!double_space) {
+                               double_space = strstr(ptr, "\t\t");             // tab-tab?
+                       }
+                       if (double_space) {
+                               StrBufReplaceToken(headers, (long)(double_space-cheaders), 2, HKEY(" "));
+                               ++replaced_something;
+                       }
+               } while (replaced_something);
+
+               // remove whitespace at the end of the line
                do {
                        replaced_something = 0;
                        char *trailing_space = strstr(ptr, " \r\n");            // line ends in a space?
index ea7289e38be659b27a88882865d86b6a0ed5b2c4..52d7e4a947fa57d18ffe14c20d3558d93a736b29 100644 (file)
@@ -233,7 +233,6 @@ int smtp_attempt_delivery(long msgid, char *recp, char *envelope_from, char *sou
        s.TheMessage = CC->redirect_buffer;
        CC->redirect_buffer = NULL;
 
-#if 0
        // FIXME genericize this
        char *pkey_in =
                "-----BEGIN PRIVATE KEY-----\n"
@@ -266,7 +265,6 @@ int smtp_attempt_delivery(long msgid, char *recp, char *envelope_from, char *sou
                "-----END PRIVATE KEY-----\n"
        ;
        dkim_sign(s.TheMessage, pkey_in, "dev.citadel.org", "foo");
-#endif
 
        // Prepare the buffer for transmittal
        s.bytes_total = StrLength(s.TheMessage);
index f255e141dda430d622e0927e7bec1b26ab40b460..271a93f81f6241d4af2fd38d0936b94b6d2f3ee3 100644 (file)
@@ -62,7 +62,7 @@ int main(int argc, char *argv[]) {
                "From: Fred Bloggs <bloggs@dev.citadel.org>\r\n"
                "X-irrelevant-header: wow mom 303\r\n"
                "To: Bread Floggs <bf@example.com>\r\n"
-               "Subject: The ultimate test message!      \r\n"
+               "Subject: The ultimate  test message\r\n"
                "Message-ID: <73294856-8726543-473298@dev.citadel.org>\r\n"
                "\r\n"
                "Hi.\r\n"