Support certificates in base64 expansion operator. Bug 1762
[users/jgh/exim.git] / src / src / expand.c
index fad8cc7c7d3abfb67fbdfebfe5e0a909dba6bb4a..4d3dd6fd5197203d5b9a7e19c5a43fb4e6209d49 100644 (file)
@@ -6043,6 +6043,7 @@ while (*s != 0)
       case EOP_MD5:
       case EOP_SHA1:
       case EOP_SHA256:
+      case EOP_BASE64:
        if (s[1] == '$')
          {
          const uschar * s1 = s;
@@ -6888,15 +6889,17 @@ while (*s != 0)
 
       case EOP_STR2B64:
       case EOP_BASE64:
-        {
-        uschar *encstr = b64encode(sub, Ustrlen(sub));
-        yield = string_cat(yield, &size, &ptr, encstr, Ustrlen(encstr));
-        continue;
-        }
+       {
+       uschar * s = vp && *(void **)vp->value
+         ? tls_cert_der_b64(*(void **)vp->value)
+         : b64encode(sub, Ustrlen(sub));
+       yield = string_cat(yield, &size, &ptr, s, Ustrlen(s));
+       continue;
+       }
 
       case EOP_BASE64D:
         {
-        uschar *s;
+        uschar * s;
         int len = b64decode(sub, &s);
        if (len < 0)
           {