Finally, do not cache a connection when SMTPUTF8 is
required but the server does not support that feature.
Files: smtp/smtp.h, smtp/smtp_key.c, smtp/smtp_proto.c.
+
+20250919
+
+ Cleanup: unnecessary header parsing code. Viktor Dukhovni.
+ File: cleanup/cleanup_message.c.
+
+ Bugfix (defect introduced: Postfix 3.8, date 20220128): the
+ 'postconf -e' output order for new main.cf entries was no
+ longer deterministic. Problem reported by Oleksandr Natalenko,
+ diagnosis by Eray Aslan. File: postconf/postconf_edit.c.
+
+ Add missing meta_directory and shlib_directory settings to
+ the stock main.cf file. Problem diagnosed by Eray Aslan.
+ File: conf/main.cf.
+
+20250920
+
+ Added back a hunk of patch 20250911 that had somehow gone
+ missing. File: smtp/smtp.h.
# readme_directory: The location of the Postfix README files.
#
readme_directory =
+
+# shlib_directory: The location of the Postfix *.so library files and
+# database plugins.
+shlib_directory =
+
+# meta_directory: The location of non-executable files that are shared
+# between multiple Postfix instances.
+meta_directory = /etc/postfix
+
inet_protocols = ipv4
argv_add(state->auto_hdrs, vstring_str(header_buf), ARGV_END);
}
if (hdr_opts->type == HDR_TLS_REQUIRED && var_tls_required_enable) {
- char *cp = vstring_str(header_buf) + strlen(hdr_opts->name) + 1;
-
- while (ISSPACE(*cp))
- cp++;
- if (strcasecmp(cp, "no") == 0)
+ if (strcasecmp(hdrval, "no") == 0)
state->sendopts |= SOPT_REQUIRETLS_HEADER;
else
msg_warn("ignoring malformed header: '%.100s'",
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20250911"
+#define MAIL_RELEASE_DATE "20250920"
#define MAIL_VERSION_NUMBER "3.11"
#ifdef SNAPSHOT
}
}
+/* pcf_cmp_ht_key - qsort helper for ht_info pointer array */
+
+static int pcf_cmp_ht_key(const void *a, const void *b)
+{
+ HTABLE_INFO **ap = (HTABLE_INFO **) a;
+ HTABLE_INFO **bp = (HTABLE_INFO **) b;
+
+ return (strcmp(ap[0]->key, bp[0]->key));
+}
+
/* pcf_edit_main - edit main.cf file */
void pcf_edit_main(int mode, int argc, char **argv)
* Generate new entries for parameters that were not found.
*/
if (mode & PCF_EDIT_CONF) {
- for (ht_info = ht = htable_list(table); *ht; ht++) {
+ ht_info = htable_list(table);
+ qsort((void *) ht_info, table->used, sizeof(*ht_info), pcf_cmp_ht_key);
+ for (ht = ht_info; *ht; ht++) {
cvalue = (struct cvalue *) ht[0]->value;
if (cvalue->found == 0)
vstream_fprintf(dst, "%s = %s\n", ht[0]->key, cvalue->value);
#define SMTP_FEATURE_FROM_PROXY (1<<22) /* proxied connection */
/*
- * Features that passivate under the endpoint.
+ * Features that passivate under the endpoint. Be sure to passivate all
+ * features that are needed in SMTP_KEY_MASK_SCACHE_DEST_LABEL, otherwise a
+ * reused connection may be stored under the wrong key.
*/
#define SMTP_FEATURE_ENDPOINT_MASK \
(~(SMTP_FEATURE_BEST_MX | SMTP_FEATURE_RSET_REJECTED \