Hello everyone,

This adds a cipher grade (TLS_CIPHER_SYSTEM/"system")
that by default uses the "PROFILE=SYSTEM" cipher list for
OpenSSL. Allows to optionally make postfix use the system-wide
crypto-policies profile via changing the *_tls_ciphers
config parameters.

Tried to make it as non-invasive as I could. Would love
to hear some opinions, as I'm not that familiar with the
postfix codebase. :)

Patch is for postfix-3.10.7.

Thanks beforehand for any responses.

- Fedor Vorobev

diff --git a/src/global/mail_params.h b/src/global/mail_params.h
index 799c61e..51ecb03 100644
--- a/src/global/mail_params.h
+++ b/src/global/mail_params.h
@@ -3394,6 +3394,10 @@ extern char *var_tls_export_ignored;
 #define DEF_TLS_NULL_CLIST     "eNULL" TLS_EXCL_REST ":!aNULL"
 extern char *var_tls_null_clist;
 
+#define VAR_TLS_SYSTEM_CLIST   "tls_system_cipherlist"
+#define DEF_TLS_SYSTEM_CLIST   "PROFILE=SYSTEM"
+extern char *var_tls_system_clist;
+
 #if defined(SN_X25519) && defined(NID_X25519)
 #define DEF_TLS_EECDH_AUTO_1 SN_X25519 " "
 #else
diff --git a/src/tls/tls.h b/src/tls/tls.h
index 96eb5a4..0f2455a 100644
--- a/src/tls/tls.h
+++ b/src/tls/tls.h
@@ -444,6 +444,7 @@ extern int tls_proto_mask_lims(const char *, int *, int *);
 #define TLS_CIPHER_LOW         3
 #define TLS_CIPHER_MEDIUM      4
 #define TLS_CIPHER_HIGH                5
+#define TLS_CIPHER_SYSTEM      6
 
 extern const NAME_CODE tls_cipher_grade_table[];
 
diff --git a/src/tls/tls_misc.c b/src/tls/tls_misc.c
index 8245a5e..11fdcf7 100644
--- a/src/tls/tls_misc.c
+++ b/src/tls/tls_misc.c
@@ -302,6 +302,7 @@ char   *var_tls_medium_clist;
 char   *var_tls_low_ignored;
 char   *var_tls_export_ignored;
 char   *var_tls_null_clist;
+char   *var_tls_system_clist;
 int     var_tls_daemon_rand_bytes;
 char   *var_tls_eecdh_auto;
 char   *var_tls_eecdh_strong;
@@ -520,6 +521,7 @@ const NAME_CODE tls_cipher_grade_table[] = {
     "medium", TLS_CIPHER_MEDIUM,
     "low", TLS_CIPHER_MEDIUM,
     "export", TLS_CIPHER_MEDIUM,
+    "system", TLS_CIPHER_SYSTEM,
     "null", TLS_CIPHER_NULL,
     "invalid", TLS_CIPHER_NONE,
     0, TLS_CIPHER_NONE,
@@ -673,6 +675,7 @@ void    tls_param_init(void)
        VAR_TLS_LOW_CLIST, DEF_TLS_LOW_CLIST, &var_tls_low_ignored, 0, 0,
        VAR_TLS_EXPORT_CLIST, DEF_TLS_EXPORT_CLIST, &var_tls_export_ignored, 0, 
0,
        VAR_TLS_NULL_CLIST, DEF_TLS_NULL_CLIST, &var_tls_null_clist, 1, 0,
+       VAR_TLS_SYSTEM_CLIST, DEF_TLS_SYSTEM_CLIST, &var_tls_system_clist, 1, 0,
        VAR_TLS_EECDH_AUTO, DEF_TLS_EECDH_AUTO, &var_tls_eecdh_auto, 0, 0,
        VAR_TLS_EECDH_STRONG, DEF_TLS_EECDH_STRONG, &var_tls_eecdh_strong, 0, 0,
        VAR_TLS_EECDH_ULTRA, DEF_TLS_EECDH_ULTRA, &var_tls_eecdh_ultra, 0, 0,
@@ -953,6 +956,9 @@ const char *tls_set_ciphers(TLS_SESS_STATE *TLScontext, 
const char *grade,
     case TLS_CIPHER_NULL:
        vstring_strcpy(buf, var_tls_null_clist);
        break;
+    case TLS_CIPHER_SYSTEM:
+       vstring_strcpy(buf, var_tls_system_clist);
+       break;
     default:
        /* Internal error, valid grade, but missing case label. */
        msg_panic("%s: unexpected cipher grade: %s", myname, grade);
-- 
2.52.0

_______________________________________________
Postfix-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to