New expansion operator base64d, and base64 as synonym for str2b64. Bug 1746
authorJeremy Harris <jgh146exb@wizmail.org>
Wed, 30 Dec 2015 18:12:19 +0000 (18:12 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Wed, 30 Dec 2015 20:37:55 +0000 (20:37 +0000)
doc/doc-docbook/spec.xfpt
doc/doc-txt/NewStuff
src/src/expand.c
test/scripts/0000-Basic/0002
test/stdout/0002

index 7e59c304de5c39a854e020e915bfe4a6f712aef1..6f6ee4557282ce027ac6cadbdb2bfe88001e0902 100644 (file)
@@ -10033,6 +10033,20 @@ environments where Exim uses base 36 instead of base 62 for its message
 identifiers, base-36 digits. The number is converted to decimal and output as a
 string.
 
 identifiers, base-36 digits. The number is converted to decimal and output as a
 string.
 
+.new
+.vitem &*${base64:*&<&'string'&>&*}*&
+.cindex "expansion" "base64 encoding"
+.cindex "base64 encoding" "in string expansion"
+.cindex "&%base64%& expansion item"
+This operator converts a string into one that is base64 encoded.
+
+.vitem &*${base64d:*&<&'string'&>&*}*&
+.cindex "expansion" "base64 decoding"
+.cindex "base64 decoding" "in string expansion"
+.cindex "&%base64d%& expansion item"
+This operator converts a base64-encoded string into the un-coded form.
+.wen
+
 
 .vitem &*${domain:*&<&'string'&>&*}*&
 .cindex "domain" "extraction"
 
 .vitem &*${domain:*&<&'string'&>&*}*&
 .cindex "domain" "extraction"
@@ -10463,10 +10477,10 @@ the system administrator. &*Warning*&: The file size may be incorrect on 32-bit
 systems for files larger than 2GB.
 
 .vitem &*${str2b64:*&<&'string'&>&*}*&
 systems for files larger than 2GB.
 
 .vitem &*${str2b64:*&<&'string'&>&*}*&
-.cindex "expansion" "base64 encoding"
-.cindex "base64 encoding" "in string expansion"
 .cindex "&%str2b64%& expansion item"
 .cindex "&%str2b64%& expansion item"
-This operator converts a string into one that is base64 encoded.
+.new
+Now deprecated, a synonym for the &%base64%& expansion operator.
+.wen
 
 
 
 
 
 
index 7385212cc7c4c713ba3ffe7b7e99b6a946f7f973..e82feffccfaaef01e39f0fb51da71c40e2d224cb 100644 (file)
@@ -28,6 +28,9 @@ Version 4.87
 
  6. New $dkim_key_length variable.
 
 
  6. New $dkim_key_length variable.
 
+ 7. New base64d and base64 expansion items (the existing str2b64 being a
+    synonym of the latter).
+
 
 Version 4.86
 ------------
 
 Version 4.86
 ------------
index d707c2cdb8607b2e83320a4446d72203f99b71f4..fad8cc7c7d3abfb67fbdfebfe5e0a909dba6bb4a 100644 (file)
@@ -201,6 +201,8 @@ static uschar *op_table_main[] = {
   US"addresses",
   US"base62",
   US"base62d",
   US"addresses",
   US"base62",
   US"base62d",
+  US"base64",
+  US"base64d",
   US"domain",
   US"escape",
   US"eval",
   US"domain",
   US"escape",
   US"eval",
@@ -241,6 +243,8 @@ enum {
   EOP_ADDRESSES,
   EOP_BASE62,
   EOP_BASE62D,
   EOP_ADDRESSES,
   EOP_BASE62,
   EOP_BASE62D,
+  EOP_BASE64,
+  EOP_BASE64D,
   EOP_DOMAIN,
   EOP_ESCAPE,
   EOP_EVAL,
   EOP_DOMAIN,
   EOP_ESCAPE,
   EOP_EVAL,
@@ -6883,12 +6887,27 @@ while (*s != 0)
       /* Convert string to base64 encoding */
 
       case EOP_STR2B64:
       /* Convert string to base64 encoding */
 
       case EOP_STR2B64:
+      case EOP_BASE64:
         {
         uschar *encstr = b64encode(sub, Ustrlen(sub));
         yield = string_cat(yield, &size, &ptr, encstr, Ustrlen(encstr));
         continue;
         }
 
         {
         uschar *encstr = b64encode(sub, Ustrlen(sub));
         yield = string_cat(yield, &size, &ptr, encstr, Ustrlen(encstr));
         continue;
         }
 
+      case EOP_BASE64D:
+        {
+        uschar *s;
+        int len = b64decode(sub, &s);
+       if (len < 0)
+          {
+          expand_string_message = string_sprintf("string \"%s\" is not "
+            "well-formed for \"%s\" operator", sub, name);
+          goto EXPAND_FAILED;
+          }
+        yield = string_cat(yield, &size, &ptr, s, Ustrlen(s));
+        continue;
+        }
+
       /* strlen returns the length of the string */
 
       case EOP_STRLEN:
       /* strlen returns the length of the string */
 
       case EOP_STRLEN:
index bf2c1068c039afa36e5573f0591a39f40c048c90..105134da33c9fd2f659c2bfa4d6166f84b9fd9fc 100644 (file)
@@ -258,6 +258,10 @@ substr: ${s_1:}
 substr: ${substr_10:abc}
 str2b64:${str2b64:abcd}
 str2b64:${str2b64:The quick brown \n fox}
 substr: ${substr_10:abc}
 str2b64:${str2b64:abcd}
 str2b64:${str2b64:The quick brown \n fox}
+base64: ${base64:abcd}
+base64: ${base64:The quick brown \n fox}
+base64d:${base64d:YWJjZA==}
+base64d:${base64d:VGhlIHF1aWNrIGJyb3duIAogZm94}
 strlen: ${strlen:}
 strlen: ${strlen:a}
 strlen: ${strlen:abcdefgh}
 strlen: ${strlen:}
 strlen: ${strlen:a}
 strlen: ${strlen:abcdefgh}
index 3018dce1f947047e5f95a62d86ec6125a9d1f5dc..5293d25874e25a0a474ccec44d3279bedb05727e 100644 (file)
 > substr: 
 > str2b64:YWJjZA==
 > str2b64:VGhlIHF1aWNrIGJyb3duIAogZm94
 > substr: 
 > str2b64:YWJjZA==
 > str2b64:VGhlIHF1aWNrIGJyb3duIAogZm94
+> base64: YWJjZA==
+> base64: VGhlIHF1aWNrIGJyb3duIAogZm94
+> base64d:abcd
+> base64d:The quick brown 
+ fox
 > strlen: 0
 > strlen: 1
 > strlen: 8
 > strlen: 0
 > strlen: 1
 > strlen: 8