Deleted Added
full compact
conf.c (125823) conf.c (132946)
1/*
1/*
2 * Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
2 * Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers.
3 * All rights reserved.
4 * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
5 * Copyright (c) 1988, 1993
6 * The Regents of the University of California. All rights reserved.
7 *
8 * By using this file, you agree to the terms and conditions set
9 * forth in the LICENSE file which can be found at the top level of
10 * the sendmail distribution.
11 *
3 * All rights reserved.
4 * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
5 * Copyright (c) 1988, 1993
6 * The Regents of the University of California. All rights reserved.
7 *
8 * By using this file, you agree to the terms and conditions set
9 * forth in the LICENSE file which can be found at the top level of
10 * the sendmail distribution.
11 *
12 * $FreeBSD: head/contrib/sendmail/src/conf.c 125823 2004-02-14 21:58:08Z gshapiro $
12 * $FreeBSD: head/contrib/sendmail/src/conf.c 132946 2004-08-01 01:16:16Z gshapiro $
13 */
14
15#include <sendmail.h>
16
13 */
14
15#include <sendmail.h>
16
17SM_RCSID("@(#)$Id: conf.c,v 8.972.2.54 2004/01/08 21:54:55 ca Exp $")
17SM_RCSID("@(#)$Id: conf.c,v 8.1047 2004/07/14 21:54:23 ca Exp $")
18
19#include <sendmail/pathnames.h>
20#if NEWDB
21# include "sm/bdb.h"
22#endif /* NEWDB */
23
24# include <sys/ioctl.h>
25# include <sys/param.h>

--- 51 unchanged lines hidden (view full) ---

77 { "resent-from", H_FROM|H_RESENT, NULL },
78 { "resent-reply-to", H_FROM|H_RESENT, NULL },
79 { "sender", H_FROM, NULL },
80 { "from", H_FROM, NULL },
81 { "reply-to", H_FROM, NULL },
82 { "errors-to", H_FROM|H_ERRORSTO, NULL },
83 { "full-name", H_ACHECK, NULL },
84 { "return-receipt-to", H_RECEIPTTO, NULL },
18
19#include <sendmail/pathnames.h>
20#if NEWDB
21# include "sm/bdb.h"
22#endif /* NEWDB */
23
24# include <sys/ioctl.h>
25# include <sys/param.h>

--- 51 unchanged lines hidden (view full) ---

77 { "resent-from", H_FROM|H_RESENT, NULL },
78 { "resent-reply-to", H_FROM|H_RESENT, NULL },
79 { "sender", H_FROM, NULL },
80 { "from", H_FROM, NULL },
81 { "reply-to", H_FROM, NULL },
82 { "errors-to", H_FROM|H_ERRORSTO, NULL },
83 { "full-name", H_ACHECK, NULL },
84 { "return-receipt-to", H_RECEIPTTO, NULL },
85 { "delivery-receipt-to", H_RECEIPTTO, NULL },
85 { "disposition-notification-to", H_FROM, NULL },
86
87 /* destination fields */
88 { "to", H_RCPT, NULL },
89 { "resent-to", H_RCPT|H_RESENT, NULL },
90 { "cc", H_RCPT, NULL },
91 { "resent-cc", H_RCPT|H_RESENT, NULL },
92 { "bcc", H_RCPT|H_BCC, NULL },

--- 162 unchanged lines hidden (view full) ---

255 numprocs = get_num_procs_online();
256 SpaceSub = ' '; /* option B */
257 QueueLA = 8 * numprocs; /* option x */
258 RefuseLA = 12 * numprocs; /* option X */
259 WkRecipFact = 30000L; /* option y */
260 WkClassFact = 1800L; /* option z */
261 WkTimeFact = 90000L; /* option Z */
262 QueueFactor = WkRecipFact * 20; /* option q */
86 { "disposition-notification-to", H_FROM, NULL },
87
88 /* destination fields */
89 { "to", H_RCPT, NULL },
90 { "resent-to", H_RCPT|H_RESENT, NULL },
91 { "cc", H_RCPT, NULL },
92 { "resent-cc", H_RCPT|H_RESENT, NULL },
93 { "bcc", H_RCPT|H_BCC, NULL },

--- 162 unchanged lines hidden (view full) ---

256 numprocs = get_num_procs_online();
257 SpaceSub = ' '; /* option B */
258 QueueLA = 8 * numprocs; /* option x */
259 RefuseLA = 12 * numprocs; /* option X */
260 WkRecipFact = 30000L; /* option y */
261 WkClassFact = 1800L; /* option z */
262 WkTimeFact = 90000L; /* option Z */
263 QueueFactor = WkRecipFact * 20; /* option q */
263#if _FFR_QUARANTINE
264 QueueMode = QM_NORMAL; /* what queue items to act upon */
264 QueueMode = QM_NORMAL; /* what queue items to act upon */
265#endif /* _FFR_QUARANTINE */
266 FileMode = (RealUid != geteuid()) ? 0644 : 0600;
267 /* option F */
268 QueueFileMode = (RealUid != geteuid()) ? 0644 : 0600;
269 /* option QueueFileMode */
270
271 if (((pw = sm_getpwnam("mailnull")) != NULL && pw->pw_uid != 0) ||
272 ((pw = sm_getpwnam("sendmail")) != NULL && pw->pw_uid != 0) ||
273 ((pw = sm_getpwnam("daemon")) != NULL && pw->pw_uid != 0))

--- 60 unchanged lines hidden (view full) ---

334 DoubleBounceAddr = "postmaster";
335 MaxHeadersLength = MAXHDRSLEN;
336 MaxMimeHeaderLength = MAXLINE;
337 MaxMimeFieldLength = MaxMimeHeaderLength / 2;
338 MaxForwardEntries = 0;
339 FastSplit = 1;
340#if SASL
341 AuthMechanisms = newstr(AUTH_MECHANISMS);
265 FileMode = (RealUid != geteuid()) ? 0644 : 0600;
266 /* option F */
267 QueueFileMode = (RealUid != geteuid()) ? 0644 : 0600;
268 /* option QueueFileMode */
269
270 if (((pw = sm_getpwnam("mailnull")) != NULL && pw->pw_uid != 0) ||
271 ((pw = sm_getpwnam("sendmail")) != NULL && pw->pw_uid != 0) ||
272 ((pw = sm_getpwnam("daemon")) != NULL && pw->pw_uid != 0))

--- 60 unchanged lines hidden (view full) ---

333 DoubleBounceAddr = "postmaster";
334 MaxHeadersLength = MAXHDRSLEN;
335 MaxMimeHeaderLength = MAXLINE;
336 MaxMimeFieldLength = MaxMimeHeaderLength / 2;
337 MaxForwardEntries = 0;
338 FastSplit = 1;
339#if SASL
340 AuthMechanisms = newstr(AUTH_MECHANISMS);
341 AuthRealm = NULL;
342 MaxSLBits = INT_MAX;
343#endif /* SASL */
344#if STARTTLS
345 TLS_Srv_Opts = TLS_I_SRV;
346#endif /* STARTTLS */
347#ifdef HESIOD_INIT
348 HesiodContext = NULL;
349#endif /* HESIOD_INIT */

--- 14 unchanged lines hidden (view full) ---

364 memset(&ConnectOnlyTo, '\0', sizeof ConnectOnlyTo);
365 DataFileBufferSize = 4096;
366 XscriptFileBufferSize = 4096;
367 for (i = 0; i < MAXRWSETS; i++)
368 RuleSetNames[i] = NULL;
369#if MILTER
370 InputFilters[0] = NULL;
371#endif /* MILTER */
342 MaxSLBits = INT_MAX;
343#endif /* SASL */
344#if STARTTLS
345 TLS_Srv_Opts = TLS_I_SRV;
346#endif /* STARTTLS */
347#ifdef HESIOD_INIT
348 HesiodContext = NULL;
349#endif /* HESIOD_INIT */

--- 14 unchanged lines hidden (view full) ---

364 memset(&ConnectOnlyTo, '\0', sizeof ConnectOnlyTo);
365 DataFileBufferSize = 4096;
366 XscriptFileBufferSize = 4096;
367 for (i = 0; i < MAXRWSETS; i++)
368 RuleSetNames[i] = NULL;
369#if MILTER
370 InputFilters[0] = NULL;
371#endif /* MILTER */
372#if _FFR_REJECT_LOG
373 RejectLogInterval = 3 HOURS;
372 RejectLogInterval = 3 HOURS;
374#endif /* _FFR_REJECT_LOG */
375#if _FFR_REQ_DIR_FSYNC_OPT
373#if REQUIRES_DIR_FSYNC
376 RequiresDirfsync = true;
374 RequiresDirfsync = true;
377#endif /* _FFR_REQ_DIR_FSYNC_OPT */
375#endif /* REQUIRES_DIR_FSYNC */
376 ConnectionRateWindowSize = 60;
378 setupmaps();
379 setupqueues();
380 setupmailers();
381 setupheaders();
382}
383
384
385/*

--- 250 unchanged lines hidden (view full) ---

636 dequote_init, null_map_open, null_map_close,
637 macro_map_lookup, null_map_store);
638
639 /* arithmetic map -- add/subtract/compare */
640 MAPDEF("arith", NULL, 0,
641 dequote_init, null_map_open, null_map_close,
642 arith_map_lookup, null_map_store);
643
377 setupmaps();
378 setupqueues();
379 setupmailers();
380 setupheaders();
381}
382
383
384/*

--- 250 unchanged lines hidden (view full) ---

635 dequote_init, null_map_open, null_map_close,
636 macro_map_lookup, null_map_store);
637
638 /* arithmetic map -- add/subtract/compare */
639 MAPDEF("arith", NULL, 0,
640 dequote_init, null_map_open, null_map_close,
641 arith_map_lookup, null_map_store);
642
643#if SOCKETMAP
644 /* arbitrary daemons */
645 MAPDEF("socket", NULL, MCF_ALIASOK,
646 map_parseargs, socket_map_open, socket_map_close,
647 socket_map_lookup, null_map_store);
648#endif /* SOCKETMAP */
649
644 if (tTd(38, 2))
645 {
646 /* bogus map -- always return tempfail */
647 MAPDEF("bogus", NULL, MCF_ALIASOK|MCF_OPTFILE,
648 map_parseargs, null_map_open, null_map_close,
649 bogus_map_lookup, null_map_store);
650 }
651}

--- 836 unchanged lines hidden (view full) ---

1488 long avenrun[3];
1489# else /* LA_TYPE == LA_INT */
1490# if LA_TYPE == LA_SHORT
1491 short avenrun[3];
1492# else /* LA_TYPE == LA_SHORT */
1493 double avenrun[3];
1494# endif /* LA_TYPE == LA_SHORT */
1495# endif /* LA_TYPE == LA_INT */
650 if (tTd(38, 2))
651 {
652 /* bogus map -- always return tempfail */
653 MAPDEF("bogus", NULL, MCF_ALIASOK|MCF_OPTFILE,
654 map_parseargs, null_map_open, null_map_close,
655 bogus_map_lookup, null_map_store);
656 }
657}

--- 836 unchanged lines hidden (view full) ---

1494 long avenrun[3];
1495# else /* LA_TYPE == LA_INT */
1496# if LA_TYPE == LA_SHORT
1497 short avenrun[3];
1498# else /* LA_TYPE == LA_SHORT */
1499 double avenrun[3];
1500# endif /* LA_TYPE == LA_SHORT */
1501# endif /* LA_TYPE == LA_INT */
1496 extern int errno;
1497 extern off_t lseek();
1498
1499 if (kmem < 0)
1500 {
1501# ifdef _AUX_SOURCE
1502 (void) sm_strlcpy(Nl[X_AVENRUN].n_name, LA_AVENRUN,
1503 sizeof Nl[X_AVENRUN].n_name);
1504 Nl[1].n_name[0] = '\0';

--- 91 unchanged lines hidden (view full) ---

1596# include <sys/ksym.h>
1597
1598int
1599getla()
1600{
1601 int j;
1602 static int kmem = -1;
1603 long avenrun[3];
1502 extern off_t lseek();
1503
1504 if (kmem < 0)
1505 {
1506# ifdef _AUX_SOURCE
1507 (void) sm_strlcpy(Nl[X_AVENRUN].n_name, LA_AVENRUN,
1508 sizeof Nl[X_AVENRUN].n_name);
1509 Nl[1].n_name[0] = '\0';

--- 91 unchanged lines hidden (view full) ---

1601# include <sys/ksym.h>
1602
1603int
1604getla()
1605{
1606 int j;
1607 static int kmem = -1;
1608 long avenrun[3];
1604 extern int errno;
1605 struct mioc_rksym mirk;
1606
1607 if (kmem < 0)
1608 {
1609 kmem = open("/dev/kmem", 0, 0);
1610 if (kmem < 0)
1611 {
1612 if (tTd(3, 1))

--- 211 unchanged lines hidden (view full) ---

1824}
1825
1826#endif /* LA_TYPE == LA_PROCSTR */
1827
1828#if LA_TYPE == LA_IRIX6
1829
1830# include <sys/sysmp.h>
1831
1609 struct mioc_rksym mirk;
1610
1611 if (kmem < 0)
1612 {
1613 kmem = open("/dev/kmem", 0, 0);
1614 if (kmem < 0)
1615 {
1616 if (tTd(3, 1))

--- 211 unchanged lines hidden (view full) ---

1828}
1829
1830#endif /* LA_TYPE == LA_PROCSTR */
1831
1832#if LA_TYPE == LA_IRIX6
1833
1834# include <sys/sysmp.h>
1835
1836# ifdef _UNICOSMP
1837# define CAST_SYSMP(x) (x)
1838# else /* _UNICOSMP */
1839# define CAST_SYSMP(x) ((x) & 0x7fffffff)
1840# endif /* _UNICOSMP */
1841
1832int
1833getla(void)
1834{
1835 int j;
1836 static int kmem = -1;
1837 int avenrun[3];
1838
1839 if (kmem < 0)

--- 13 unchanged lines hidden (view full) ---

1853 sm_dprintf("getla: fcntl(/dev/kmem, FD_CLOEXEC): %s\n",
1854 sm_errstring(errno));
1855 (void) close(kmem);
1856 kmem = -1;
1857 return -1;
1858 }
1859 }
1860
1842int
1843getla(void)
1844{
1845 int j;
1846 static int kmem = -1;
1847 int avenrun[3];
1848
1849 if (kmem < 0)

--- 13 unchanged lines hidden (view full) ---

1863 sm_dprintf("getla: fcntl(/dev/kmem, FD_CLOEXEC): %s\n",
1864 sm_errstring(errno));
1865 (void) close(kmem);
1866 kmem = -1;
1867 return -1;
1868 }
1869 }
1870
1861 if (lseek(kmem, (sysmp(MP_KERNADDR, MPKA_AVENRUN) & 0x7fffffff), SEEK_SET) == -1 ||
1871 if (lseek(kmem, CAST_SYSMP(sysmp(MP_KERNADDR, MPKA_AVENRUN)), SEEK_SET)
1872 == -1 ||
1862 read(kmem, (char *) avenrun, sizeof(avenrun)) < sizeof(avenrun))
1863 {
1864 if (tTd(3, 1))
1865 sm_dprintf("getla: lseek or read: %s\n",
1866 sm_errstring(errno));
1867 return -1;
1868 }
1869 if (tTd(3, 5))

--- 319 unchanged lines hidden (view full) ---

2189refuseconnections(name, e, d, active)
2190 char *name;
2191 ENVELOPE *e;
2192 int d;
2193 bool active;
2194{
2195 static time_t lastconn[MAXDAEMONS];
2196 static int conncnt[MAXDAEMONS];
1873 read(kmem, (char *) avenrun, sizeof(avenrun)) < sizeof(avenrun))
1874 {
1875 if (tTd(3, 1))
1876 sm_dprintf("getla: lseek or read: %s\n",
1877 sm_errstring(errno));
1878 return -1;
1879 }
1880 if (tTd(3, 5))

--- 319 unchanged lines hidden (view full) ---

2200refuseconnections(name, e, d, active)
2201 char *name;
2202 ENVELOPE *e;
2203 int d;
2204 bool active;
2205{
2206 static time_t lastconn[MAXDAEMONS];
2207 static int conncnt[MAXDAEMONS];
2197#if _FFR_REJECT_LOG
2198 static time_t firstrejtime[MAXDAEMONS];
2199 static time_t nextlogtime[MAXDAEMONS];
2208 static time_t firstrejtime[MAXDAEMONS];
2209 static time_t nextlogtime[MAXDAEMONS];
2200#endif /* _FFR_REJECT_LOG */
2201
2202#if XLA
2203 if (!xla_smtp_ok())
2204 return true;
2205#endif /* XLA */
2206
2210
2211#if XLA
2212 if (!xla_smtp_ok())
2213 return true;
2214#endif /* XLA */
2215
2216 SM_ASSERT(d >= 0);
2217 SM_ASSERT(d < MAXDAEMONS);
2207 if (ConnRateThrottle > 0)
2208 {
2209 time_t now;
2210
2211 now = curtime();
2212 if (active)
2213 {
2214 if (now != lastconn[d])

--- 15 unchanged lines hidden (view full) ---

2230 }
2231 else if (now != lastconn[d])
2232 conncnt[d] = 0;
2233 }
2234
2235 sm_getla();
2236 if (RefuseLA > 0 && CurrentLA >= RefuseLA)
2237 {
2218 if (ConnRateThrottle > 0)
2219 {
2220 time_t now;
2221
2222 now = curtime();
2223 if (active)
2224 {
2225 if (now != lastconn[d])

--- 15 unchanged lines hidden (view full) ---

2241 }
2242 else if (now != lastconn[d])
2243 conncnt[d] = 0;
2244 }
2245
2246 sm_getla();
2247 if (RefuseLA > 0 && CurrentLA >= RefuseLA)
2248 {
2238# if _FFR_REJECT_LOG
2239 time_t now;
2240
2249 time_t now;
2250
2241# define R2_MSG_LA "have been rejecting connections on daemon %s for %s"
2242# endif /* _FFR_REJECT_LOG */
2243# define R_MSG_LA "rejecting connections on daemon %s: load average: %d"
2251# define R_MSG_LA "rejecting connections on daemon %s: load average: %d"
2252# define R2_MSG_LA "have been rejecting connections on daemon %s for %s"
2244 sm_setproctitle(true, e, R_MSG_LA, name, CurrentLA);
2245 if (LogLevel > 8)
2246 sm_syslog(LOG_NOTICE, NOQID, R_MSG_LA, name, CurrentLA);
2253 sm_setproctitle(true, e, R_MSG_LA, name, CurrentLA);
2254 if (LogLevel > 8)
2255 sm_syslog(LOG_NOTICE, NOQID, R_MSG_LA, name, CurrentLA);
2247# if _FFR_REJECT_LOG
2248 now = curtime();
2249 if (firstrejtime[d] == 0)
2250 {
2251 firstrejtime[d] = now;
2252 nextlogtime[d] = now + RejectLogInterval;
2253 }
2254 else if (nextlogtime[d] < now)
2255 {
2256 sm_syslog(LOG_ERR, NOQID, R2_MSG_LA, name,
2257 pintvl(now - firstrejtime[d], true));
2258 nextlogtime[d] = now + RejectLogInterval;
2259 }
2256 now = curtime();
2257 if (firstrejtime[d] == 0)
2258 {
2259 firstrejtime[d] = now;
2260 nextlogtime[d] = now + RejectLogInterval;
2261 }
2262 else if (nextlogtime[d] < now)
2263 {
2264 sm_syslog(LOG_ERR, NOQID, R2_MSG_LA, name,
2265 pintvl(now - firstrejtime[d], true));
2266 nextlogtime[d] = now + RejectLogInterval;
2267 }
2260# endif /* _FFR_REJECT_LOG */
2261 return true;
2262 }
2268 return true;
2269 }
2263# if _FFR_REJECT_LOG
2264 else
2265 firstrejtime[d] = 0;
2270 else
2271 firstrejtime[d] = 0;
2266# endif /* _FFR_REJECT_LOG */
2267
2268 if (DelayLA > 0 && CurrentLA >= DelayLA)
2269 {
2270 time_t now;
2271 static time_t log_delay = (time_t) 0;
2272
2273# define MIN_DELAY_LOG 90 /* wait before logging this again */
2274# define D_MSG_LA "delaying connections on daemon %s: load average=%d >= %d"

--- 1689 unchanged lines hidden (view full) ---

3964 char *addr;
3965 extern int hosts_ctl();
3966#endif /* TCPWRAPPERS */
3967
3968 if (tTd(48, 3))
3969 sm_dprintf("validate_connection(%s, %s)\n",
3970 hostname, anynet_ntoa(sap));
3971
2272
2273 if (DelayLA > 0 && CurrentLA >= DelayLA)
2274 {
2275 time_t now;
2276 static time_t log_delay = (time_t) 0;
2277
2278# define MIN_DELAY_LOG 90 /* wait before logging this again */
2279# define D_MSG_LA "delaying connections on daemon %s: load average=%d >= %d"

--- 1689 unchanged lines hidden (view full) ---

3969 char *addr;
3970 extern int hosts_ctl();
3971#endif /* TCPWRAPPERS */
3972
3973 if (tTd(48, 3))
3974 sm_dprintf("validate_connection(%s, %s)\n",
3975 hostname, anynet_ntoa(sap));
3976
3977 connection_rate_check(sap, e);
3972 if (rscheck("check_relay", hostname, anynet_ntoa(sap),
3973 e, RSF_RMCOMM|RSF_COUNT, 3, NULL, NOQID) != EX_OK)
3974 {
3975 static char reject[BUFSIZ*2];
3976 extern char MsgBuf[];
3977
3978 if (tTd(48, 4))
3979 sm_dprintf(" ... validate_connection: BAD (rscheck)\n");

--- 1171 unchanged lines hidden (view full) ---

5151# endif /* _SC_NPROCESSORS_ONLN */
5152#endif /* USESYSCTL */
5153
5154 if (nproc <= 0)
5155 nproc = 1;
5156 return nproc;
5157}
5158/*
3978 if (rscheck("check_relay", hostname, anynet_ntoa(sap),
3979 e, RSF_RMCOMM|RSF_COUNT, 3, NULL, NOQID) != EX_OK)
3980 {
3981 static char reject[BUFSIZ*2];
3982 extern char MsgBuf[];
3983
3984 if (tTd(48, 4))
3985 sm_dprintf(" ... validate_connection: BAD (rscheck)\n");

--- 1171 unchanged lines hidden (view full) ---

5157# endif /* _SC_NPROCESSORS_ONLN */
5158#endif /* USESYSCTL */
5159
5160 if (nproc <= 0)
5161 nproc = 1;
5162 return nproc;
5163}
5164/*
5165** SM_CLOSEFROM -- close file descriptors
5166**
5167** Parameters:
5168** lowest -- first fd to close
5169** highest -- last fd + 1 to close
5170**
5171** Returns:
5172** none
5173*/
5174
5175void
5176sm_closefrom(lowest, highest)
5177 int lowest, highest;
5178{
5179#if HASCLOSEFROM
5180 closefrom(lowest);
5181#else /* HASCLOSEFROM */
5182 int i;
5183
5184 for (i = lowest; i < highest; i++)
5185 (void) close(i);
5186#endif /* HASCLOSEFROM */
5187}
5188#if HASFDWALK
5189/*
5190** CLOSEFD_WALK -- walk fd's arranging to close them
5191** Callback for fdwalk()
5192**
5193** Parameters:
5194** lowest -- first fd to arrange to be closed
5195** fd -- fd to arrange to be closed
5196**
5197** Returns:
5198** zero
5199*/
5200
5201static int
5202closefd_walk(lowest, fd)
5203 void *lowest;
5204 int fd;
5205{
5206 if (fd >= *(int *)lowest)
5207 (void) fcntl(fd, F_SETFD, FD_CLOEXEC);
5208 return 0;
5209}
5210#endif /* HASFDWALK */
5211/*
5212** SM_CLOSE_ON_EXEC -- arrange for file descriptors to be closed
5213**
5214** Parameters:
5215** lowest -- first fd to arrange to be closed
5216** highest -- last fd + 1 to arrange to be closed
5217**
5218** Returns:
5219** none
5220*/
5221
5222void
5223sm_close_on_exec(highest, lowest)
5224 int highest, lowest;
5225{
5226#if HASFDWALK
5227 (void) fdwalk(closefd_walk, &lowest);
5228#else /* HASFDWALK */
5229 int i, j;
5230
5231 for (i = lowest; i < highest; i++)
5232 {
5233 if ((j = fcntl(i, F_GETFD, 0)) != -1)
5234 (void) fcntl(i, F_SETFD, j | FD_CLOEXEC);
5235 }
5236#endif /* HASFDWALK */
5237}
5238/*
5159** SEED_RANDOM -- seed the random number generator
5160**
5161** Parameters:
5162** none
5163**
5164** Returns:
5165** none
5166*/

--- 365 unchanged lines hidden (view full) ---

5532#endif /* NEEDLINK */
5533
5534/*
5535** Compile-Time options
5536*/
5537
5538char *CompileOptions[] =
5539{
5239** SEED_RANDOM -- seed the random number generator
5240**
5241** Parameters:
5242** none
5243**
5244** Returns:
5245** none
5246*/

--- 365 unchanged lines hidden (view full) ---

5612#endif /* NEEDLINK */
5613
5614/*
5615** Compile-Time options
5616*/
5617
5618char *CompileOptions[] =
5619{
5620#if ALLOW_255
5621 "ALLOW_255",
5622#endif /* ALLOW_255 */
5540#if NAMED_BIND
5541# if DNSMAP
5542 "DNSMAP",
5543# endif /* DNSMAP */
5544#endif /* NAMED_BIND */
5545#if EGD
5546 "EGD",
5547#endif /* EGD */

--- 86 unchanged lines hidden (view full) ---

5634# endif /* SASL >= 20000 */
5635#endif /* SASL */
5636#if SCANF
5637 "SCANF",
5638#endif /* SCANF */
5639#if SMTPDEBUG
5640 "SMTPDEBUG",
5641#endif /* SMTPDEBUG */
5623#if NAMED_BIND
5624# if DNSMAP
5625 "DNSMAP",
5626# endif /* DNSMAP */
5627#endif /* NAMED_BIND */
5628#if EGD
5629 "EGD",
5630#endif /* EGD */

--- 86 unchanged lines hidden (view full) ---

5717# endif /* SASL >= 20000 */
5718#endif /* SASL */
5719#if SCANF
5720 "SCANF",
5721#endif /* SCANF */
5722#if SMTPDEBUG
5723 "SMTPDEBUG",
5724#endif /* SMTPDEBUG */
5725#if SOCKETMAP
5726 "SOCKETMAP",
5727#endif /* SOCKETMAP */
5642#if STARTTLS
5643 "STARTTLS",
5644#endif /* STARTTLS */
5645#if SUID_ROOT_FILES_OK
5646 "SUID_ROOT_FILES_OK",
5647#endif /* SUID_ROOT_FILES_OK */
5648#if TCPWRAPPERS
5649 "TCPWRAPPERS",

--- 5 unchanged lines hidden (view full) ---

5655 "TLS_VRFY_PER_CTX",
5656#endif /* TLS_VRFY_PER_CTX */
5657#if USERDB
5658 "USERDB",
5659#endif /* USERDB */
5660#if USE_LDAP_INIT
5661 "USE_LDAP_INIT",
5662#endif /* USE_LDAP_INIT */
5728#if STARTTLS
5729 "STARTTLS",
5730#endif /* STARTTLS */
5731#if SUID_ROOT_FILES_OK
5732 "SUID_ROOT_FILES_OK",
5733#endif /* SUID_ROOT_FILES_OK */
5734#if TCPWRAPPERS
5735 "TCPWRAPPERS",

--- 5 unchanged lines hidden (view full) ---

5741 "TLS_VRFY_PER_CTX",
5742#endif /* TLS_VRFY_PER_CTX */
5743#if USERDB
5744 "USERDB",
5745#endif /* USERDB */
5746#if USE_LDAP_INIT
5747 "USE_LDAP_INIT",
5748#endif /* USE_LDAP_INIT */
5749#if USE_TTYPATH
5750 "USE_TTYPATH",
5751#endif /* USE_TTYPATH */
5663#if XDEBUG
5664 "XDEBUG",
5665#endif /* XDEBUG */
5666#if XLA
5667 "XLA",
5668#endif /* XLA */
5669 NULL
5670};
5671
5672
5673/*
5674** OS compile options.
5675*/
5676
5677char *OsCompileOptions[] =
5678{
5679#if ADDRCONFIG_IS_BROKEN
5680 "ADDRCONFIG_IS_BROKEN",
5681#endif /* ADDRCONFIG_IS_BROKEN */
5752#if XDEBUG
5753 "XDEBUG",
5754#endif /* XDEBUG */
5755#if XLA
5756 "XLA",
5757#endif /* XLA */
5758 NULL
5759};
5760
5761
5762/*
5763** OS compile options.
5764*/
5765
5766char *OsCompileOptions[] =
5767{
5768#if ADDRCONFIG_IS_BROKEN
5769 "ADDRCONFIG_IS_BROKEN",
5770#endif /* ADDRCONFIG_IS_BROKEN */
5682#if ALLOW_255
5683 "ALLOW_255",
5684#endif /* ALLOW_255 */
5685#ifdef AUTO_NETINFO_HOSTS
5686 "AUTO_NETINFO_HOSTS",
5687#endif /* AUTO_NETINFO_HOSTS */
5688#ifdef AUTO_NIS_ALIASES
5689 "AUTO_NIS_ALIASES",
5690#endif /* AUTO_NIS_ALIASES */
5691#if BROKEN_RES_SEARCH
5692 "BROKEN_RES_SEARCH",

--- 5 unchanged lines hidden (view full) ---

5698 "BOGUS_O_EXCL",
5699#endif /* BOGUS_O_EXCL */
5700#if DEC_OSF_BROKEN_GETPWENT
5701 "DEC_OSF_BROKEN_GETPWENT",
5702#endif /* DEC_OSF_BROKEN_GETPWENT */
5703#if FAST_PID_RECYCLE
5704 "FAST_PID_RECYCLE",
5705#endif /* FAST_PID_RECYCLE */
5771#ifdef AUTO_NETINFO_HOSTS
5772 "AUTO_NETINFO_HOSTS",
5773#endif /* AUTO_NETINFO_HOSTS */
5774#ifdef AUTO_NIS_ALIASES
5775 "AUTO_NIS_ALIASES",
5776#endif /* AUTO_NIS_ALIASES */
5777#if BROKEN_RES_SEARCH
5778 "BROKEN_RES_SEARCH",

--- 5 unchanged lines hidden (view full) ---

5784 "BOGUS_O_EXCL",
5785#endif /* BOGUS_O_EXCL */
5786#if DEC_OSF_BROKEN_GETPWENT
5787 "DEC_OSF_BROKEN_GETPWENT",
5788#endif /* DEC_OSF_BROKEN_GETPWENT */
5789#if FAST_PID_RECYCLE
5790 "FAST_PID_RECYCLE",
5791#endif /* FAST_PID_RECYCLE */
5792#if HASCLOSEFROM
5793 "HASCLOSEFROM",
5794#endif /* HASCLOSEFROM */
5706#if HASFCHOWN
5707 "HASFCHOWN",
5708#endif /* HASFCHOWN */
5709#if HASFCHMOD
5710 "HASFCHMOD",
5711#endif /* HASFCHMOD */
5795#if HASFCHOWN
5796 "HASFCHOWN",
5797#endif /* HASFCHOWN */
5798#if HASFCHMOD
5799 "HASFCHMOD",
5800#endif /* HASFCHMOD */
5801#if HASFDWALK
5802 "HASFDWALK",
5803#endif /* HASFDWALK */
5712#if HASFLOCK
5713 "HASFLOCK",
5714#endif /* HASFLOCK */
5715#if HASGETDTABLESIZE
5716 "HASGETDTABLESIZE",
5717#endif /* HASGETDTABLESIZE */
5718#if HASGETUSERSHELL
5719 "HASGETUSERSHELL",

--- 161 unchanged lines hidden (view full) ---

5881};
5882
5883/*
5884** FFR compile options.
5885*/
5886
5887char *FFRCompileOptions[] =
5888{
5804#if HASFLOCK
5805 "HASFLOCK",
5806#endif /* HASFLOCK */
5807#if HASGETDTABLESIZE
5808 "HASGETDTABLESIZE",
5809#endif /* HASGETDTABLESIZE */
5810#if HASGETUSERSHELL
5811 "HASGETUSERSHELL",

--- 161 unchanged lines hidden (view full) ---

5973};
5974
5975/*
5976** FFR compile options.
5977*/
5978
5979char *FFRCompileOptions[] =
5980{
5889#if _FFR_ADAPTIVE_EOL
5890 /* tries to be smart about \r\n versus \n from broken clients */
5891 /* known to be broken, do not use */
5892 "_FFR_ADAPTIVE_EOL",
5893#endif /* _FFR_ADAPTIVE_EOL */
5894#if _FFR_ALLOW_SASLINFO
5895 /* DefaultAuthInfo can be specified by user. */
5981#if _FFR_ALLOW_SASLINFO
5982 /* DefaultAuthInfo can be specified by user. */
5896 /* DefaultAuthInfo doesn't really work in 8.12 anymore. */
5983 /* DefaultAuthInfo doesn't really work in 8.13 anymore. */
5897 "_FFR_ALLOW_SASLINFO",
5898#endif /* _FFR_ALLOW_SASLINFO */
5984 "_FFR_ALLOW_SASLINFO",
5985#endif /* _FFR_ALLOW_SASLINFO */
5899#if _FFR_ALLOW_S0_ERROR_4XX
5900 /* Allow for tempfail from S0 (ruleset 0). */
5901 "_FFR_ALLOW_S0_ERROR_4XX",
5902#endif /* _FFR_ALLOW_S0_ERROR_4XX */
5903#if _FFR_BESTMX_BETTER_TRUNCATION
5904 /* Better truncation of list of MX records for dns map. */
5905 "_FFR_BESTMX_BETTER_TRUNCATION",
5906#endif /* _FFR_BESTMX_BETTER_TRUNCATION */
5907#if _FFR_BLOCK_PROXIES
5908 /*
5909 ** Try to deal with open HTTP proxies that are used to send spam
5910 ** by recognizing some commands from them.
5911 */
5912
5913 "_FFR_BLOCK_PROXIES",
5914#endif /* _FFR_BLOCK_PROXIES */
5986#if _FFR_BESTMX_BETTER_TRUNCATION
5987 /* Better truncation of list of MX records for dns map. */
5988 "_FFR_BESTMX_BETTER_TRUNCATION",
5989#endif /* _FFR_BESTMX_BETTER_TRUNCATION */
5990#if _FFR_BLOCK_PROXIES
5991 /*
5992 ** Try to deal with open HTTP proxies that are used to send spam
5993 ** by recognizing some commands from them.
5994 */
5995
5996 "_FFR_BLOCK_PROXIES",
5997#endif /* _FFR_BLOCK_PROXIES */
5915#if _FFR_CACHE_LPC
5916 /* Cache connections to LCP based mailers */
5917/* Christophe Wolfhugel of France Telecom Oleane */
5918 "_FFR_CACHE_LPC",
5919#endif /* _FFR_CACHE_LPC */
5920#if _FFR_CATCH_BROKEN_MTAS
5921 /* Deal with MTAs that send a reply during the DATA phase. */
5922 "_FFR_CATCH_BROKEN_MTAS",
5923#endif /* _FFR_CATCH_BROKEN_MTAS */
5998#if _FFR_CATCH_BROKEN_MTAS
5999 /* Deal with MTAs that send a reply during the DATA phase. */
6000 "_FFR_CATCH_BROKEN_MTAS",
6001#endif /* _FFR_CATCH_BROKEN_MTAS */
5924#if _FFR_CATCH_LONG_STRINGS
5925 /* Report long address strings instead of silently ignoring them. */
5926 "_FFR_CATCH_LONG_STRINGS",
5927#endif /* _FFR_CATCH_LONG_STRINGS */
5928#if _FFR_CHECK_EOM
5929 /* Enable check_eom ruleset */
5930 "_FFR_CHECK_EOM",
5931#endif /* _FFR_CHECK_EOM */
5932#if _FFR_CHK_QUEUE
5933 /* Stricter checks about queue directory permissions. */
5934 "_FFR_CHK_QUEUE",
5935#endif /* _FFR_CHK_QUEUE */
5936#if _FFR_CLIENT_SIZE
5937 /* Don't try to send mail if its size exceeds SIZE= of server. */
5938 "_FFR_CLIENT_SIZE",
5939#endif /* _FFR_CLIENT_SIZE */
5940#if _FFR_CONTROL_MSTAT
5941 /* Extended daemon status. */
5942 "_FFR_CONTROL_MSTAT",
5943#endif /* _FFR_CONTROL_MSTAT */
6002#if _FFR_CHECK_EOM
6003 /* Enable check_eom ruleset */
6004 "_FFR_CHECK_EOM",
6005#endif /* _FFR_CHECK_EOM */
6006#if _FFR_CHK_QUEUE
6007 /* Stricter checks about queue directory permissions. */
6008 "_FFR_CHK_QUEUE",
6009#endif /* _FFR_CHK_QUEUE */
6010#if _FFR_CLIENT_SIZE
6011 /* Don't try to send mail if its size exceeds SIZE= of server. */
6012 "_FFR_CLIENT_SIZE",
6013#endif /* _FFR_CLIENT_SIZE */
6014#if _FFR_CONTROL_MSTAT
6015 /* Extended daemon status. */
6016 "_FFR_CONTROL_MSTAT",
6017#endif /* _FFR_CONTROL_MSTAT */
6018#if _FFR_CRLPATH
6019 /* CRLPath; needs documentation; Al Smith */
6020 "_FFR_CRLPATH",
6021#endif /* _FFR_CRLPATH */
5944#if _FFR_DAEMON_NETUNIX
5945 /* Allow local (not just TCP) socket connection to server. */
5946 "_FFR_DAEMON_NETUNIX",
5947#endif /* _FFR_DAEMON_NETUNIX */
5948#if _FFR_DEAL_WITH_ERROR_SSL
5949 /* Deal with SSL errors by recognizing them as EOF. */
5950 "_FFR_DEAL_WITH_ERROR_SSL",
5951#endif /* _FFR_DEAL_WITH_ERROR_SSL */

--- 22 unchanged lines hidden (view full) ---

5974 /* Limit number of return values for DNS map. */
5975 "_FFR_DNSMAP_MULTILIMIT",
5976# endif /* _FFR_DNSMAP_MULTILIMIT */
5977#endif /* _FFR_DNSMAP_MULTI */
5978#if _FFR_DONTLOCKFILESFORREAD_OPTION
5979 /* Enable DontLockFilesForRead option. */
5980 "_FFR_DONTLOCKFILESFORREAD_OPTION",
5981#endif /* _FFR_DONTLOCKFILESFORREAD_OPTION */
6022#if _FFR_DAEMON_NETUNIX
6023 /* Allow local (not just TCP) socket connection to server. */
6024 "_FFR_DAEMON_NETUNIX",
6025#endif /* _FFR_DAEMON_NETUNIX */
6026#if _FFR_DEAL_WITH_ERROR_SSL
6027 /* Deal with SSL errors by recognizing them as EOF. */
6028 "_FFR_DEAL_WITH_ERROR_SSL",
6029#endif /* _FFR_DEAL_WITH_ERROR_SSL */

--- 22 unchanged lines hidden (view full) ---

6052 /* Limit number of return values for DNS map. */
6053 "_FFR_DNSMAP_MULTILIMIT",
6054# endif /* _FFR_DNSMAP_MULTILIMIT */
6055#endif /* _FFR_DNSMAP_MULTI */
6056#if _FFR_DONTLOCKFILESFORREAD_OPTION
6057 /* Enable DontLockFilesForRead option. */
6058 "_FFR_DONTLOCKFILESFORREAD_OPTION",
6059#endif /* _FFR_DONTLOCKFILESFORREAD_OPTION */
5982#if _FFR_DONT_STOP_LOOKING
5983 /* Continue with DNS lookups on ECONNREFUSED and TRY_AGAIN. */
5984/* Noted by Neil Rickert of Northern Illinois University */
5985 "_FFR_DONT_STOP_LOOKING",
5986#endif /* _FFR_DONT_STOP_LOOKING */
5987#if _FFR_DOTTED_USERNAMES
5988 /* Allow usernames with '.' */
5989 "_FFR_DOTTED_USERNAMES",
5990#endif /* _FFR_DOTTED_USERNAMES */
5991#if _FFR_DROP_TRUSTUSER_WARNING
5992 /*
5993 ** Don't issue this warning:
5994 ** "readcf: option TrustedUser may cause problems on systems

--- 34 unchanged lines hidden (view full) ---

6029
6030/* Peter Eriksson of Linkopings universitet */
6031 "_FFR_HANDLE_ISO8859_GECOS",
6032#endif /* _FFR_HANDLE_ISO8859_GECOS */
6033#if _FFR_HDR_TYPE
6034 /* Set 'h' in {addr_type} for headers. */
6035 "_FFR_HDR_TYPE",
6036#endif /* _FFR_HDR_TYPE */
6060#if _FFR_DOTTED_USERNAMES
6061 /* Allow usernames with '.' */
6062 "_FFR_DOTTED_USERNAMES",
6063#endif /* _FFR_DOTTED_USERNAMES */
6064#if _FFR_DROP_TRUSTUSER_WARNING
6065 /*
6066 ** Don't issue this warning:
6067 ** "readcf: option TrustedUser may cause problems on systems

--- 34 unchanged lines hidden (view full) ---

6102
6103/* Peter Eriksson of Linkopings universitet */
6104 "_FFR_HANDLE_ISO8859_GECOS",
6105#endif /* _FFR_HANDLE_ISO8859_GECOS */
6106#if _FFR_HDR_TYPE
6107 /* Set 'h' in {addr_type} for headers. */
6108 "_FFR_HDR_TYPE",
6109#endif /* _FFR_HDR_TYPE */
6110#if _FFR_HELONAME
6111 /* option to set heloname; Nik Clayton of FreeBSD */
6112 "_FFR_HELONAME",
6113#endif /* _FFR_HELONAME */
6037#if _FFR_HPUX_NSSWITCH
6038 /* Use nsswitch on HP-UX */
6039 "_FFR_HPUX_NSSWITCH",
6040#endif /* _FFR_HPUX_NSSWITCH */
6041#if _FFR_IGNORE_BOGUS_ADDR
6042 /* Ignore addresses for which prescan() failed */
6043 "_FFR_IGNORE_BOGUS_ADDR",
6044#endif /* _FFR_IGNORE_BOGUS_ADDR */
6045#if _FFR_IGNORE_EXT_ON_HELO
6046 /* Ignore extensions offered in response to HELO */
6047 "_FFR_IGNORE_EXT_ON_HELO",
6048#endif /* _FFR_IGNORE_EXT_ON_HELO */
6114#if _FFR_HPUX_NSSWITCH
6115 /* Use nsswitch on HP-UX */
6116 "_FFR_HPUX_NSSWITCH",
6117#endif /* _FFR_HPUX_NSSWITCH */
6118#if _FFR_IGNORE_BOGUS_ADDR
6119 /* Ignore addresses for which prescan() failed */
6120 "_FFR_IGNORE_BOGUS_ADDR",
6121#endif /* _FFR_IGNORE_BOGUS_ADDR */
6122#if _FFR_IGNORE_EXT_ON_HELO
6123 /* Ignore extensions offered in response to HELO */
6124 "_FFR_IGNORE_EXT_ON_HELO",
6125#endif /* _FFR_IGNORE_EXT_ON_HELO */
6049#if _FFR_LDAP_RECURSION
6050 /* Support LDAP recursion in LDAP responses */
6051/* Andrew Baucom */
6052 "_FFR_LDAP_RECURSION",
6053#endif /* _FFR_LDAP_RECURSION */
6054#if _FFR_LDAP_SETVERSION
6055 /* New LDAP map option for setting LDAP protocol version */
6056 "_FFR_LDAP_SETVERSION",
6057#endif /* _FFR_LDAP_SETVERSION */
6058#if _FFR_LDAP_URI
6059 /* Support LDAP URI form of specifying host/port (and allows ldaps) */
6060 "_FFR_LDAP_URI",
6061#endif /* _FFR_LDAP_URI */
6126#if _FFR_MAXDATASIZE
6127 /*
6128 ** It is possible that a header is larger than MILTER_CHUNK_SIZE,
6129 ** hence this shouldn't be used as limit for milter communication.
6130 ** see also libmilter/comm.c
6131 ** Gurusamy Sarathy of ActiveState
6132 */
6133
6134 "_FFR_MAXDATASIZE"
6135#endif /* _FFR_MAXDATASIZE */
6062#if _FFR_MAX_FORWARD_ENTRIES
6063 /* Try to limit number of .forward entries */
6064 /* (doesn't work) */
6065/* Randall S. Winchester of the University of Maryland */
6066 "_FFR_MAX_FORWARD_ENTRIES",
6067#endif /* _FFR_MAX_FORWARD_ENTRIES */
6068#if _FFR_MAX_SLEEP_TIME
6069 /* Limit sleep(2) time in libsm/clock.c */
6070 "_FFR_MAX_SLEEP_TIME",
6071#endif /* _FFR_MAX_SLEEP_TIME */
6136#if _FFR_MAX_FORWARD_ENTRIES
6137 /* Try to limit number of .forward entries */
6138 /* (doesn't work) */
6139/* Randall S. Winchester of the University of Maryland */
6140 "_FFR_MAX_FORWARD_ENTRIES",
6141#endif /* _FFR_MAX_FORWARD_ENTRIES */
6142#if _FFR_MAX_SLEEP_TIME
6143 /* Limit sleep(2) time in libsm/clock.c */
6144 "_FFR_MAX_SLEEP_TIME",
6145#endif /* _FFR_MAX_SLEEP_TIME */
6072#if _FFR_MESSAGEID_MACRO
6073 /* stick the message ID header's value in a macro */
6074 "_FFR_MESSAGEID_MACRO",
6075#endif /* _FFR_MESSAGEID_MACRO */
6076#if MILTER
6077# if _FFR_MILTER_421
6078 /* If a filter returns 421, close the SMTP connection */
6079 "_FFR_MILTER_421",
6080# endif /* _FFR_MILTER_421 */
6081# if _FFR_MILTER_MACROS_EOM
6082 /* Add an EOM macro set for milter */
6083 "_FFR_MILTER_MACROS_EOM",
6084# endif /* _FFR_MILTER_MACROS_EOM */
6085# if _FFR_MILTER_PERDAEMON
6086 /* Per DaemonPortOptions InputMailFilter lists */
6087 "_FFR_MILTER_PERDAEMON",
6088# endif /* _FFR_MILTER_PERDAEMON */
6089#endif /* MILTER */
6146#if _FFR_MILTER_NAGLE
6147 /* milter: turn off Nagle ("cork" on Linux) */
6148 /* John Gardiner Myers of Proofpoint */
6149 "_FFR_MILTER_NAGLE ",
6150#endif /* _FFR_MILTER_NAGLE */
6151#if _FFR_MILTER_NOHDR_RESP
6152 /* milter: no response expected when sending headers */
6153 /* John Gardiner Myers of Proofpoint */
6154 "_FFR_MILTER_NOHDR_RESP",
6155#endif /* _FFR_MILTER_NOHDR_RESP */
6156#if _FFR_MIME7TO8_OLD
6157 /* Old mime7to8 code, the new is broken for at least one example. */
6158 "_FFR_MIME7TO8_OLD",
6159#endif /* _FFR_MAX_SLEEP_TIME */
6090#if _FFR_NODELAYDSN_ON_HOLD
6091 /* Do not issue a DELAY DSN for mailers that use the hold flag. */
6092/* Steven Pitzl */
6093 "_FFR_NODELAYDSN_ON_HOLD",
6094#endif /* _FFR_NODELAYDSN_ON_HOLD */
6095#if _FFR_NO_PIPE
6096 /* Disable PIPELINING, delay client if used. */
6097 "_FFR_NO_PIPE",
6098#endif /* _FFR_NO_PIPE */
6160#if _FFR_NODELAYDSN_ON_HOLD
6161 /* Do not issue a DELAY DSN for mailers that use the hold flag. */
6162/* Steven Pitzl */
6163 "_FFR_NODELAYDSN_ON_HOLD",
6164#endif /* _FFR_NODELAYDSN_ON_HOLD */
6165#if _FFR_NO_PIPE
6166 /* Disable PIPELINING, delay client if used. */
6167 "_FFR_NO_PIPE",
6168#endif /* _FFR_NO_PIPE */
6099#if _FFR_QUARANTINE
6100 /* Quarantine items in the queue */
6101 "_FFR_QUARANTINE",
6102#endif /* _FFR_QUARANTINE */
6103#if _FFR_QUEUEDELAY
6104 /* Exponential queue delay; disabled in 8.13 since it isn't used. */
6105 "_FFR_QUEUEDELAY",
6106#endif /* _FFR_QUEUEDELAY */
6107#if _FFR_QUEUE_GROUP_SORTORDER
6108 /* Allow QueueSortOrder per queue group. */
6109/* XXX: Still need to actually use qgrp->qg_sortorder */
6110 "_FFR_QUEUE_GROUP_SORTORDER",
6111#endif /* _FFR_QUEUE_GROUP_SORTORDER */
6112#if _FFR_QUEUE_MACRO
6113 /* Define {queue} macro. */
6114 "_FFR_QUEUE_MACRO",
6115#endif /* _FFR_QUEUE_MACRO */
6169#if _FFR_QUEUEDELAY
6170 /* Exponential queue delay; disabled in 8.13 since it isn't used. */
6171 "_FFR_QUEUEDELAY",
6172#endif /* _FFR_QUEUEDELAY */
6173#if _FFR_QUEUE_GROUP_SORTORDER
6174 /* Allow QueueSortOrder per queue group. */
6175/* XXX: Still need to actually use qgrp->qg_sortorder */
6176 "_FFR_QUEUE_GROUP_SORTORDER",
6177#endif /* _FFR_QUEUE_GROUP_SORTORDER */
6178#if _FFR_QUEUE_MACRO
6179 /* Define {queue} macro. */
6180 "_FFR_QUEUE_MACRO",
6181#endif /* _FFR_QUEUE_MACRO */
6116#if _FFR_QUEUERETURN_DSN
6117 /*
6118 ** Provide an option for different Timeout.queue{warn,return} for
6119 ** DSN messages. These days, queues are filled with bounces for
6120 ** spam that will never make it to the sender and therefore slow
6121 ** down queue runs until they timeout.
6122 */
6123
6124 "_FFR_QUEUERETURN_DSN",
6125#endif /* _FFR_QUEUERETURN_DSN */
6126#if _FFR_QUEUE_RUN_PARANOIA
6127 /* Additional checks when doing queue runs. */
6128 "_FFR_QUEUE_RUN_PARANOIA",
6129#endif /* _FFR_QUEUE_RUN_PARANOIA */
6130#if _FFR_QUEUE_SCHED_DBG
6131 /* Debug output for the queue scheduler. */
6132 "_FFR_QUEUE_SCHED_DBG",
6133#endif /* _FFR_QUEUE_SCHED_DBG */
6134#if _FFR_REDIRECTEMPTY
6135 /*
6136 ** envelope <> can't be sent to mailing lists, only owner-
6137 ** send spam of this type to owner- of the list
6138 ** ---- to stop spam from going to mailing lists.
6139 */
6140
6141 "_FFR_REDIRECTEMPTY",
6142#endif /* _FFR_REDIRECTEMPTY */
6182#if _FFR_QUEUE_RUN_PARANOIA
6183 /* Additional checks when doing queue runs. */
6184 "_FFR_QUEUE_RUN_PARANOIA",
6185#endif /* _FFR_QUEUE_RUN_PARANOIA */
6186#if _FFR_QUEUE_SCHED_DBG
6187 /* Debug output for the queue scheduler. */
6188 "_FFR_QUEUE_SCHED_DBG",
6189#endif /* _FFR_QUEUE_SCHED_DBG */
6190#if _FFR_REDIRECTEMPTY
6191 /*
6192 ** envelope <> can't be sent to mailing lists, only owner-
6193 ** send spam of this type to owner- of the list
6194 ** ---- to stop spam from going to mailing lists.
6195 */
6196
6197 "_FFR_REDIRECTEMPTY",
6198#endif /* _FFR_REDIRECTEMPTY */
6143#if _FFR_REJECT_LOG
6144 /* Log when we start/stop rejecting connections due to load, etc */
6145 "_FFR_REJECT_LOG",
6146#endif /* _FFR_REJECT_LOG */
6147#if _FFR_REQ_DIR_FSYNC_OPT
6148 /* Add cf option to fsync() directories */
6149 "_FFR_REQ_DIR_FSYNC_OPT",
6150#endif /* _FFR_REQ_DIR_FSYNC_OPT */
6151#if _FFR_RESET_MACRO_GLOBALS
6152 /* Allow macro 'j' to be set dynamically via rulesets. */
6153 "_FFR_RESET_MACRO_GLOBALS",
6154#endif /* _FFR_RESET_MACRO_GLOBALS */
6199#if _FFR_RESET_MACRO_GLOBALS
6200 /* Allow macro 'j' to be set dynamically via rulesets. */
6201 "_FFR_RESET_MACRO_GLOBALS",
6202#endif /* _FFR_RESET_MACRO_GLOBALS */
6155#if _FFR_RESPOND_ALL
6156 /* in vacation: respond to every message, not just once per interval */
6157 "_FFR_RESPOND_ALL",
6158#endif /* _FFR_RESPOND_ALL */
6159#if _FFR_RHS
6160 /* Random shuffle for queue sorting. */
6161 "_FFR_RHS",
6162#endif /* _FFR_RHS */
6203#if _FFR_RHS
6204 /* Random shuffle for queue sorting. */
6205 "_FFR_RHS",
6206#endif /* _FFR_RHS */
6163#if _FFR_SASL_OPT_M
6164 /* Support SASL's SASL_SEC_MUTUAL_AUTH option */
6165 "_FFR_SASL_OPT_M",
6166#endif /* _FFR_SASL_OPT_M */
6167#if _FFR_SELECT_SHM
6168 /* Auto-select of shared memory key */
6169 "_FFR_SELECT_SHM",
6170#endif /* _FFR_SELECT_SHM */
6171#if _FFR_SHM_STATUS
6172 /* Donated code (unused). */
6173 "_FFR_SHM_STATUS",
6174#endif /* _FFR_SHM_STATUS */
6207#if _FFR_SELECT_SHM
6208 /* Auto-select of shared memory key */
6209 "_FFR_SELECT_SHM",
6210#endif /* _FFR_SELECT_SHM */
6211#if _FFR_SHM_STATUS
6212 /* Donated code (unused). */
6213 "_FFR_SHM_STATUS",
6214#endif /* _FFR_SHM_STATUS */
6215#if _FFR_SKIP_DOMAINS
6216 /* process every N'th domain instead of every N'th message */
6217 "_FFR_SKIP_DOMAINS"
6218#endif /* _FFR_SKIP_DOMAINS */
6175#if _FFR_SLEEP_USE_SELECT
6176 /* Use select(2) in libsm/clock.c to emulate sleep(2) */
6177 "_FFR_SLEEP_USE_SELECT ",
6178#endif /* _FFR_SLEEP_USE_SELECT */
6219#if _FFR_SLEEP_USE_SELECT
6220 /* Use select(2) in libsm/clock.c to emulate sleep(2) */
6221 "_FFR_SLEEP_USE_SELECT ",
6222#endif /* _FFR_SLEEP_USE_SELECT */
6179#if _FFR_SMFI_OPENSOCKET
6180 /* libmilter: smfi_opensocket() to force the socket open early */
6181 "_FFR_SMFI_OPENSOCKET",
6182#endif /* _FFR_SMFI_OPENSOCKET */
6183#if _FFR_SMTP_SSL
6184 /* Support for smtps (SMTP over SSL) */
6185 "_FFR_SMTP_SSL",
6186#endif /* _FFR_SMTP_SSL */
6187#if _FFR_SOFT_BOUNCE
6188 /* Turn all errors into temporary errors. */
6189 "_FFR_SOFT_BOUNCE",
6190#endif /* _FFR_SOFT_BOUNCE */
6191#if _FFR_SPT_ALIGN
6192 /*
6193 ** It looks like the Compaq Tru64 5.1A now aligns argv and envp to 64
6194 ** bit alignment, so unless each piece of argv and envp is a multiple
6195 ** of 8 bytes (including terminating NULL), initsetproctitle() won't
6196 ** use any of the space beyond argv[0]. Be sure to set SPT_ALIGN_SIZE
6197 ** if you use this FFR.
6198 */
6199
6200/* Chris Adams of HiWAAY Informations Services */
6201 "_FFR_SPT_ALIGN",
6202#endif /* _FFR_SPT_ALIGN */
6223#if _FFR_SOFT_BOUNCE
6224 /* Turn all errors into temporary errors. */
6225 "_FFR_SOFT_BOUNCE",
6226#endif /* _FFR_SOFT_BOUNCE */
6227#if _FFR_SPT_ALIGN
6228 /*
6229 ** It looks like the Compaq Tru64 5.1A now aligns argv and envp to 64
6230 ** bit alignment, so unless each piece of argv and envp is a multiple
6231 ** of 8 bytes (including terminating NULL), initsetproctitle() won't
6232 ** use any of the space beyond argv[0]. Be sure to set SPT_ALIGN_SIZE
6233 ** if you use this FFR.
6234 */
6235
6236/* Chris Adams of HiWAAY Informations Services */
6237 "_FFR_SPT_ALIGN",
6238#endif /* _FFR_SPT_ALIGN */
6203#if _FFR_STRIPBACKSL
6204 /*
6205 ** Strip backslash from addresses (so sender doesn't
6206 ** decide to ignore forward)
6207 */
6208
6209 "_FFR_STRIPBACKSL",
6210#endif /* _FFR_STRIPBACKSL */
6211#if _FFR_TIMERS
6212 /* Donated code (unused). */
6213 "_FFR_TIMERS",
6214#endif /* _FFR_TIMERS */
6215#if _FFR_TLS_1
6216 /* More STARTTLS options, e.g., secondary certs. */
6217 "_FFR_TLS_1",
6218#endif /* _FFR_TLS_1 */

--- 17 unchanged lines hidden ---
6239#if _FFR_TIMERS
6240 /* Donated code (unused). */
6241 "_FFR_TIMERS",
6242#endif /* _FFR_TIMERS */
6243#if _FFR_TLS_1
6244 /* More STARTTLS options, e.g., secondary certs. */
6245 "_FFR_TLS_1",
6246#endif /* _FFR_TLS_1 */

--- 17 unchanged lines hidden ---