c7c2b6
diff --git a/src/global/mail_params.c b/src/global/mail_params.c
c7c2b6
index 91c70f7..483613c 100644
c7c2b6
--- a/src/global/mail_params.c
c7c2b6
+++ b/src/global/mail_params.c
c7c2b6
@@ -379,6 +379,8 @@ int     warn_compat_break_smtputf8_enable;
c7c2b6
 int     warn_compat_break_chroot;
c7c2b6
 int     warn_compat_break_relay_restrictions;
c7c2b6
 
c7c2b6
+bool    var_rhel_ipv6_normalize;
c7c2b6
+
c7c2b6
 /* check_myhostname - lookup hostname and validate */
c7c2b6
 
c7c2b6
 static const char *check_myhostname(void)
c7c2b6
@@ -825,6 +827,7 @@ void    mail_params_init()
c7c2b6
 	VAR_LONG_QUEUE_IDS, DEF_LONG_QUEUE_IDS, &var_long_queue_ids,
c7c2b6
 	VAR_STRICT_SMTPUTF8, DEF_STRICT_SMTPUTF8, &var_strict_smtputf8,
c7c2b6
 	VAR_ENABLE_ORCPT, DEF_ENABLE_ORCPT, &var_enable_orcpt,
c7c2b6
+	VAR_RHEL_IPV6_NORMALIZE, DEF_RHEL_IPV6_NORMALIZE, &var_rhel_ipv6_normalize,
c7c2b6
 	0,
c7c2b6
     };
c7c2b6
     const char *cp;
c7c2b6
diff --git a/src/global/mail_params.h b/src/global/mail_params.h
c7c2b6
index e4358ca..74459d9 100644
c7c2b6
--- a/src/global/mail_params.h
c7c2b6
+++ b/src/global/mail_params.h
c7c2b6
@@ -3153,7 +3153,7 @@ extern char *var_local_rwr_clients;
c7c2b6
   * EHLO keyword filter.
c7c2b6
   */
c7c2b6
 #define VAR_SMTPD_EHLO_DIS_WORDS	"smtpd_discard_ehlo_keywords"
c7c2b6
-#define DEF_SMTPD_EHLO_DIS_WORDS	""
c7c2b6
+#define DEF_SMTPD_EHLO_DIS_WORDS	"chunking"
c7c2b6
 extern char *var_smtpd_ehlo_dis_words;
c7c2b6
 
c7c2b6
 #define VAR_SMTPD_EHLO_DIS_MAPS		"smtpd_discard_ehlo_keyword_address_maps"
c7c2b6
@@ -4199,9 +4199,13 @@ extern int var_postlogd_watchdog;
c7c2b6
 #define INFO_LOG_ADDR_FORM_NAME_INTERNAL	"internal"
c7c2b6
 
c7c2b6
 #define VAR_INFO_LOG_ADDR_FORM	"info_log_address_format"
c7c2b6
-#define DEF_INFO_LOG_ADDR_FORM	INFO_LOG_ADDR_FORM_NAME_EXTERNAL
c7c2b6
+#define DEF_INFO_LOG_ADDR_FORM	INFO_LOG_ADDR_FORM_NAME_INTERNAL
c7c2b6
 extern char *var_info_log_addr_form;
c7c2b6
 
c7c2b6
+#define VAR_RHEL_IPV6_NORMALIZE	"rhel_ipv6_normalize"
c7c2b6
+#define DEF_RHEL_IPV6_NORMALIZE	0
c7c2b6
+extern bool var_rhel_ipv6_normalize;
c7c2b6
+
c7c2b6
 /* LICENSE
c7c2b6
 /* .ad
c7c2b6
 /* .fi
c7c2b6
diff --git a/src/smtpd/smtpd.c b/src/smtpd/smtpd.c
c7c2b6
index da7227f..53e640e 100644
c7c2b6
--- a/src/smtpd/smtpd.c
c7c2b6
+++ b/src/smtpd/smtpd.c
c7c2b6
@@ -4334,6 +4334,7 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
c7c2b6
     SMTPD_TOKEN *argp;
c7c2b6
     char   *raw_value;
c7c2b6
     char   *attr_value;
c7c2b6
+    const char *bare_value;
c7c2b6
     char   *attr_name;
c7c2b6
     int     update_namaddr = 0;
c7c2b6
     int     name_status;
c7c2b6
@@ -4481,15 +4482,31 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
c7c2b6
 		UPDATE_STR(state->addr, attr_value);
c7c2b6
 		UPDATE_STR(state->rfc_addr, attr_value);
c7c2b6
 	    } else {
c7c2b6
-		neuter(attr_value, NEUTER_CHARACTERS, '?');
c7c2b6
-		if (normalize_mailhost_addr(attr_value, &state->rfc_addr,
c7c2b6
+		if (var_rhel_ipv6_normalize) {
c7c2b6
+			neuter(attr_value, NEUTER_CHARACTERS, '?');
c7c2b6
+		}
c7c2b6
+		if ((var_rhel_ipv6_normalize &&
c7c2b6
+		    normalize_mailhost_addr(attr_value, &state->rfc_addr,
c7c2b6
 					    &state->addr,
c7c2b6
-					    &state->addr_family) < 0) {
c7c2b6
+					    &state->addr_family) < 0) ||
c7c2b6
+		    (!var_rhel_ipv6_normalize &&
c7c2b6
+			(bare_value = valid_mailhost_addr(attr_value, DONT_GRIPE)) == 0)) {
c7c2b6
 		    state->error_mask |= MAIL_ERROR_PROTOCOL;
c7c2b6
 		    smtpd_chat_reply(state, "501 5.5.4 Bad %s syntax: %s",
c7c2b6
 				     XCLIENT_ADDR, attr_value);
c7c2b6
 		    return (-1);
c7c2b6
 		}
c7c2b6
+		if (!var_rhel_ipv6_normalize) {
c7c2b6
+		    UPDATE_STR(state->addr, bare_value);
c7c2b6
+		    UPDATE_STR(state->rfc_addr, attr_value);
c7c2b6
+#ifdef HAS_IPV6
c7c2b6
+		    if (strncasecmp(attr_value, INET_PROTO_NAME_IPV6 ":",
c7c2b6
+			    sizeof(INET_PROTO_NAME_IPV6 ":") - 1) == 0)
c7c2b6
+			state->addr_family = AF_INET6;
c7c2b6
+		    else
c7c2b6
+#endif
c7c2b6
+			state->addr_family = AF_INET;
c7c2b6
+                }
c7c2b6
 	    }
c7c2b6
 	    update_namaddr = 1;
c7c2b6
 	}
c7c2b6
@@ -4569,17 +4586,25 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
c7c2b6
 		attr_value = SERVER_ADDR_UNKNOWN;
c7c2b6
 		UPDATE_STR(state->dest_addr, attr_value);
c7c2b6
 	    } else {
c7c2b6
+		if (var_rhel_ipv6_normalize) {
c7c2b6
 #define NO_NORM_RFC_ADDR		((char **) 0)
c7c2b6
 #define NO_NORM_ADDR_FAMILY	((int *) 0)
c7c2b6
-		neuter(attr_value, NEUTER_CHARACTERS, '?');
c7c2b6
-		if (normalize_mailhost_addr(attr_value, NO_NORM_RFC_ADDR,
c7c2b6
+			neuter(attr_value, NEUTER_CHARACTERS, '?');
c7c2b6
+		}
c7c2b6
+		if ((var_rhel_ipv6_normalize &&
c7c2b6
+		    normalize_mailhost_addr(attr_value, NO_NORM_RFC_ADDR,
c7c2b6
 					    &state->dest_addr,
c7c2b6
-					    NO_NORM_ADDR_FAMILY) < 0) {
c7c2b6
+					    NO_NORM_ADDR_FAMILY) < 0) ||
c7c2b6
+		    (!var_rhel_ipv6_normalize &&
c7c2b6
+			(bare_value = valid_mailhost_addr(attr_value, DONT_GRIPE)) == 0)) {
c7c2b6
 		    state->error_mask |= MAIL_ERROR_PROTOCOL;
c7c2b6
 		    smtpd_chat_reply(state, "501 5.5.4 Bad %s syntax: %s",
c7c2b6
 				     XCLIENT_DESTADDR, attr_value);
c7c2b6
 		    return (-1);
c7c2b6
 		}
c7c2b6
+		if (!var_rhel_ipv6_normalize) {
c7c2b6
+			UPDATE_STR(state->dest_addr, bare_value);
c7c2b6
+		}
c7c2b6
 	    }
c7c2b6
 	    /* XXX Require same address family as client address. */
c7c2b6
 	}
c7c2b6
@@ -4690,6 +4715,7 @@ static int xforward_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
c7c2b6
     SMTPD_TOKEN *argp;
c7c2b6
     char   *raw_value;
c7c2b6
     char   *attr_value;
c7c2b6
+    const char *bare_value;
c7c2b6
     char   *attr_name;
c7c2b6
     int     updated = 0;
c7c2b6
     static const NAME_CODE xforward_flags[] = {
c7c2b6
@@ -4808,15 +4834,22 @@ static int xforward_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
c7c2b6
 		UPDATE_STR(state->xforward.addr, attr_value);
c7c2b6
 	    } else {
c7c2b6
 		neuter(attr_value, NEUTER_CHARACTERS, '?');
c7c2b6
-		if (normalize_mailhost_addr(attr_value,
c7c2b6
+		if ((var_rhel_ipv6_normalize &&
c7c2b6
+		    normalize_mailhost_addr(attr_value,
c7c2b6
 					    &state->xforward.rfc_addr,
c7c2b6
 					    &state->xforward.addr,
c7c2b6
-					    NO_NORM_ADDR_FAMILY) < 0) {
c7c2b6
+					    NO_NORM_ADDR_FAMILY) < 0) ||
c7c2b6
+		    (!var_rhel_ipv6_normalize &&
c7c2b6
+			(bare_value = valid_mailhost_addr(attr_value, DONT_GRIPE)) == 0)) {
c7c2b6
 		    state->error_mask |= MAIL_ERROR_PROTOCOL;
c7c2b6
 		    smtpd_chat_reply(state, "501 5.5.4 Bad %s syntax: %s",
c7c2b6
 				     XFORWARD_ADDR, attr_value);
c7c2b6
 		    return (-1);
c7c2b6
 		}
c7c2b6
+		if (!var_rhel_ipv6_normalize) {
c7c2b6
+		    UPDATE_STR(state->xforward.addr, bare_value);
c7c2b6
+		    UPDATE_STR(state->xforward.rfc_addr, attr_value);
c7c2b6
+		}
c7c2b6
 	    }
c7c2b6
 	    break;
c7c2b6