lkundrak / rpms / sendmail

Forked from rpms/sendmail 4 years ago
Clone
Blob Blame History Raw
--- sendmail-8.14.3/cf/m4/proto.m4.orig	2008-01-24 16:42:01.000000000 -0700
+++ sendmail-8.14.3/cf/m4/proto.m4	2010-04-01 11:24:43.000000000 -0600
@@ -251,6 +251,9 @@ _OPTION(SevenBitInput, `confSEVEN_BIT_IN
 # 8-bit data handling
 _OPTION(EightBitMode, `confEIGHT_BIT_HANDLING', `pass8')
 
+# DSCP marking of traffic (IP_TOS)
+_OPTION(InetQoS, `confINET_QOS', `none')
+
 # wait for alias file rebuild (default units: minutes)
 _OPTION(AliasWait, `confALIAS_WAIT', `5m')
 
--- sendmail-8.14.3/cf/cf/submit.mc.orig	2006-04-04 23:54:41.000000000 -0600
+++ sendmail-8.14.3/cf/cf/submit.mc	2010-03-19 12:08:25.000000000 -0600
@@ -22,6 +22,8 @@
 define(`_USE_DECNET_SYNTAX_', `1')dnl support DECnet
 define(`confTIME_ZONE', `USE_TZ')dnl
 define(`confDONT_INIT_GROUPS', `True')dnl
+dnl # If you're operating in a DSCP/RFC-4594 environment with QoS
+dnl define(`confINET_QOS', `AF11')dnl
 define(`confPID_FILE', `/var/run/sm-client.pid')dnl
 dnl define(`confDIRECT_SUBMISSION_MODIFIERS',`C')dnl
 FEATURE(`use_ct_file')dnl
--- sendmail-8.14.3/sendmail/sendmail.h.orig	2008-02-15 16:19:58.000000000 -0700
+++ sendmail-8.14.3/sendmail/sendmail.h	2009-11-28 14:11:51.000000000 -0700
@@ -2373,7 +2373,9 @@ EXTERN struct termescape	TermEscape;	/* 
 EXTERN SOCKADDR	ConnectOnlyTo;	/* override connection address (for testing) */
 EXTERN SOCKADDR RealHostAddr;	/* address of host we are talking to */
 extern const SM_EXC_TYPE_T EtypeQuickAbort; /* type of a QuickAbort exception */
-
+#if defined(SOL_IP) && defined(IP_TOS)
+EXTERN int		InetQoS;	/* QoS mapping */
+#endif
 
 EXTERN int ConnectionRateWindowSize;
 
--- sendmail-8.14.3/sendmail/daemon.c.orig	2008-02-13 17:20:26.000000000 -0700
+++ sendmail-8.14.3/sendmail/daemon.c	2009-11-28 14:16:37.000000000 -0700
@@ -104,6 +104,8 @@
 
 static time_t	NextDiskSpaceCheck = 0;
 
+int		InetQoS = 0;			/* none by default */
+
 /*
 **  GETREQUESTS -- open mail IPC port and get requests.
 **
@@ -1131,6 +1131,12 @@ opendaemonsocket(d, firsttime)
 			(void) setsockopt(d->d_socket, SOL_SOCKET,
 					  SO_KEEPALIVE, (char *)&on, sizeof(on));
 
+#if defined(SOL_IP) && defined(IP_TOS)
+			if (d->d_addr.sa.sa_family == AF_INET && InetQoS != 0x00)
+				(void) setsockopt(d->d_socket, SOL_IP,
+						  IP_TOS, (char *)&InetQoS, sizeof(InetQoS));
+#endif
+
 #ifdef SO_RCVBUF
 			if (d->d_tcprcvbufsize > 0)
 			{
--- sendmail-8.14.3/sendmail/readcf.c.orig	2008-02-14 10:25:14.000000000 -0700
+++ sendmail-8.14.3/sendmail/readcf.c	2009-12-10 00:12:23.000000000 -0700
@@ -2271,6 +2271,10 @@
 # define O_RCPTTHROTDELAY	0xe6
 	{ "BadRcptThrottleDelay",	O_RCPTTHROTDELAY,	OI_SAFE	},
 #endif /* _FFR_RCPTTHROTDELAY */
+#if defined(SOL_IP) && defined(IP_TOS)
+# define O_INETQOS		0xe7
+	{ "InetQoS",			O_INETQOS,	OI_NONE },
+#endif
 
 	{ NULL,				'\0',		OI_NONE	}
 };
@@ -2351,6 +2355,37 @@
 };
 #endif /* STARTTLS && _FFR_TLS_1 */
 
+#ifdef O_INETQOS
+static struct qosmap
+{
+	char	*name;		/* name of the setting */
+	int	value;		/* corresponding setsockopt() value */
+} QoSMap[] = {
+	{ "CS0",	0x00 },
+	{ "CS1",	0x20 },
+	{ "AF11",	0x28 },
+	{ "AF12",	0x30 },
+	{ "AF13",	0x38 },
+	{ "CS2",	0x40 },
+	{ "AF21",	0x48 },
+	{ "AF22",	0x50 },
+	{ "AF23",	0x58 },
+	{ "CS3",	0x60 },
+	{ "AF31",	0x68 },
+	{ "AF32",	0x70 },
+	{ "AF33",	0x78 },
+	{ "CS4",	0x80 },
+	{ "AF41",	0x88 },
+	{ "AF42",	0x90 },
+	{ "AF43",	0x98 },
+	{ "CS5",	0xa0 },
+	{ "CS6",	0xc0 },
+	{ "CS7",	0xe0 },
+	{ "none",	0x00 },
+	{ NULL,		0    }
+};
+#endif
+
 
 # define CANONIFY(val)
 
@@ -3985,6 +4020,33 @@
 		break;
 #endif /* _FFR_BADRCPT_SHUTDOWN */
 
+#ifdef O_INETQOS
+	  case O_INETQOS:
+		{
+			struct qosmap *qmp;
+			InetQoS = -1;
+
+			for (qmp = QoSMap; qmp->name != NULL; ++qmp) {
+				if (!strcmp(val, qmp->name)) {
+					InetQoS = qmp->value;
+					break;
+				}
+			}
+
+			/*
+			** we could allow writing it as a hex value, but
+ 			** we don't at this time.
+ 			**/
+			if (qmp->name == NULL) {
+				(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
+						     "Warning: Option: %s unknown parameter '%s'\n",
+						     OPTNAME, val);
+				break;
+			}
+			break;
+		}
+#endif
+
 	  default:
 		if (tTd(37, 1))
 		{