Deleted Added
full compact
2c2
< * Copyright (c) 1998-2006 Sendmail, Inc. and its suppliers.
---
> * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers.
12c12
< * $FreeBSD: head/contrib/sendmail/src/conf.c 159613 2006-06-14 16:25:31Z gshapiro $
---
> * $FreeBSD: head/contrib/sendmail/src/conf.c 168520 2007-04-09 01:44:16Z gshapiro $
17c17
< SM_RCSID("@(#)$Id: conf.c,v 8.1082 2006/03/22 22:49:33 ca Exp $")
---
> SM_RCSID("@(#)$Id: conf.c,v 8.1128 2007/04/03 21:32:29 ca Exp $")
18a19
> #include <sm/sendmail.h>
23a25,27
> #include <daemon.h>
> #include "map.h"
>
162d165
< #if _FFR_PRIV_NOACTUALRECIPIENT
164d166
< #endif /* _FFR_PRIV_NOACTUALRECIPIENT */
382c384
< memset(&ConnectOnlyTo, '\0', sizeof ConnectOnlyTo);
---
> memset(&ConnectOnlyTo, '\0', sizeof(ConnectOnlyTo));
417c419
< sizeof defuserbuf);
---
> sizeof(defuserbuf));
436c438
< (void) sm_strlcpy(buf, "mqueue, P=/var/spool/mqueue", sizeof buf);
---
> (void) sm_strlcpy(buf, "mqueue, P=/var/spool/mqueue", sizeof(buf));
449c451
< sizeof buf);
---
> sizeof(buf));
453c455
< sizeof buf);
---
> sizeof(buf));
457c459
< sizeof buf);
---
> sizeof(buf));
667a670,676
> #if _FFR_DPRINTF_MAP
> /* dprintf map -- logs information to syslog */
> MAPDEF("dprintf", NULL, 0,
> dprintf_map_parseargs, null_map_open, null_map_close,
> dprintf_map_lookup, null_map_store);
> #endif /* _FFR_DPRINTF_MAP */
>
708,760d716
< ** Set up default hosts maps.
< */
<
< #if 0
< nmaps = switch_map_find("hosts", maptype, mapreturn);
< for (i = 0; i < nmaps; i++)
< {
< if (strcmp(maptype[i], "files") == 0 &&
< stab("hosts.files", ST_MAP, ST_FIND) == NULL)
< {
< (void) sm_strlcpy(buf, "hosts.files text -k 0 -v 1 /etc/hosts",
< sizeof buf);
< (void) makemapentry(buf);
< }
< # if NAMED_BIND
< else if (strcmp(maptype[i], "dns") == 0 &&
< stab("hosts.dns", ST_MAP, ST_FIND) == NULL)
< {
< (void) sm_strlcpy(buf, "hosts.dns dns A", sizeof buf);
< (void) makemapentry(buf);
< }
< # endif /* NAMED_BIND */
< # if NISPLUS
< else if (strcmp(maptype[i], "nisplus") == 0 &&
< stab("hosts.nisplus", ST_MAP, ST_FIND) == NULL)
< {
< (void) sm_strlcpy(buf, "hosts.nisplus nisplus -k name -v address hosts.org_dir",
< sizeof buf);
< (void) makemapentry(buf);
< }
< # endif /* NISPLUS */
< # if NIS
< else if (strcmp(maptype[i], "nis") == 0 &&
< stab("hosts.nis", ST_MAP, ST_FIND) == NULL)
< {
< (void) sm_strlcpy(buf, "hosts.nis nis -k 0 -v 1 hosts.byname",
< sizeof buf);
< (void) makemapentry(buf);
< }
< # endif /* NIS */
< # if NETINFO
< else if (strcmp(maptype[i], "netinfo") == 0 &&
< stab("hosts.netinfo", ST_MAP, ST_FIND) == NULL)
< {
< (void) sm_strlcpy(buf, "hosts.netinfo netinfo -v name /machines",
< sizeof buf);
< (void) makemapentry(buf);
< }
< # endif /* NETINFO */
< }
< #endif /* 0 */
<
< /*
767c723
< (void) sm_strlcpy(buf, "host host", sizeof buf);
---
> (void) sm_strlcpy(buf, "host host", sizeof(buf));
770c726
< (void) sm_strlcat(buf, " -a. -D", sizeof buf);
---
> (void) sm_strlcat(buf, " -a. -D", sizeof(buf));
786c742
< sizeof buf);
---
> sizeof(buf));
794c750
< sizeof buf);
---
> sizeof(buf));
803c759
< sizeof buf);
---
> sizeof(buf));
812c768
< sizeof buf);
---
> sizeof(buf));
821c777
< sizeof buf);
---
> sizeof(buf));
825,841c781,784
< }
< if (stab("aliases", ST_MAP, ST_FIND) == NULL)
< {
< (void) sm_strlcpy(buf, "aliases switch aliases", sizeof buf);
< (void) makemapentry(buf);
< }
<
< #if 0 /* "user" map class is a better choice */
< /*
< ** Set up default users maps.
< */
<
< nmaps = switch_map_find("passwd", maptype, mapreturn);
< for (i = 0; i < nmaps; i++)
< {
< if (strcmp(maptype[i], "files") == 0 &&
< stab("users.files", ST_MAP, ST_FIND) == NULL)
---
> #if LDAPMAP && defined(SUN_EXTENSIONS) && \
> defined(SUN_SIMPLIFIED_LDAP) && HASLDAPGETALIASBYNAME
> else if (strcmp(maptype[i], "ldap") == 0 &&
> stab("aliases.ldap", ST_MAP, ST_FIND) == NULL)
843c786
< (void) sm_strlcpy(buf, "users.files text -m -z: -k0 -v6 /etc/passwd",
---
> (void) strlcpy(buf, "aliases.ldap ldap -b . -h localhost -k mail=%0 -v mailgroup",
847,872c790
< # if NISPLUS
< else if (strcmp(maptype[i], "nisplus") == 0 &&
< stab("users.nisplus", ST_MAP, ST_FIND) == NULL)
< {
< (void) sm_strlcpy(buf, "users.nisplus nisplus -m -kname -vhome passwd.org_dir",
< sizeof buf);
< (void) makemapentry(buf);
< }
< # endif /* NISPLUS */
< # if NIS
< else if (strcmp(maptype[i], "nis") == 0 &&
< stab("users.nis", ST_MAP, ST_FIND) == NULL)
< {
< (void) sm_strlcpy(buf, "users.nis nis -m passwd.byname",
< sizeof buf);
< (void) makemapentry(buf);
< }
< # endif /* NIS */
< # if HESIOD
< else if (strcmp(maptype[i], "hesiod") == 0 &&
< stab("users.hesiod", ST_MAP, ST_FIND) == NULL)
< {
< (void) sm_strlcpy(buf, "users.hesiod hesiod", sizeof buf);
< (void) makemapentry(buf);
< }
< # endif /* HESIOD */
---
> #endif /* LDAPMAP && defined(SUN_EXTENSIONS) && ... */
874c792
< if (stab("users", ST_MAP, ST_FIND) == NULL)
---
> if (stab("aliases", ST_MAP, ST_FIND) == NULL)
876c794
< (void) sm_strlcpy(buf, "users switch -m passwd", sizeof buf);
---
> (void) sm_strlcpy(buf, "aliases switch aliases", sizeof(buf));
879d796
< #endif /* 0 */
880a798
>
1047c965
< sizeof buf) != NULL)
---
> sizeof(buf)) != NULL)
1329a1248,1266
>
> #ifdef SUN_EXTENSIONS
> static void
> init_md_sun()
> {
> struct stat sbuf;
>
> /* Check for large file descriptor */
> if (fstat(fileno(stdin), &sbuf) < 0)
> {
> if (errno == EOVERFLOW)
> {
> perror("stdin");
> exit(EX_NOINPUT);
> }
> }
> }
> #endif /* SUN_EXTENSIONS */
>
1362c1299
< #ifdef __QNX__
---
> #if defined(__QNX__) && !defined(__QNXNTO__)
1531c1468
< sizeof Nl[X_AVENRUN].n_name);
---
> sizeof(Nl[X_AVENRUN].n_name));
1536c1473
< if (knlist(Nl, 1, sizeof Nl[0]) < 0)
---
> if (knlist(Nl, 1, sizeof(Nl[0])) < 0)
2009c1946
< r = read(afd, &avenrun, sizeof avenrun);
---
> r = read(afd, &avenrun, sizeof(avenrun));
2156c2093
< (void) sm_snprintf(labuf, sizeof labuf, "%d", CurrentLA);
---
> (void) sm_snprintf(labuf, sizeof(labuf), "%d", CurrentLA);
2212,2219d2148
< # if 0 /* this code is reported to cause oscillation around RefuseLA */
< if (CurrentLA >= RefuseLA && QueueLA < RefuseLA)
< {
< if (tTd(3, 30))
< sm_dprintf("TRUE (CurrentLA >= RefuseLA)\n");
< return true;
< }
< # endif /* 0 */
2224a2154
>
2229d2158
< ** name -- daemon name (for error messages only)
2231c2160
< ** d -- number of daemon
---
> ** dn -- number of daemon.
2244,2245c2173
< refuseconnections(name, e, d, active)
< char *name;
---
> refuseconnections(e, dn, active)
2247c2175
< int d;
---
> int dn;
2253a2182
> int limit;
2263,2264c2192,2193
< SM_ASSERT(d >= 0);
< SM_ASSERT(d < MAXDAEMONS);
---
> SM_ASSERT(dn >= 0);
> SM_ASSERT(dn < MAXDAEMONS);
2272c2201
< if (now != lastconn[d])
---
> if (now != lastconn[dn])
2274,2275c2203,2204
< lastconn[d] = now;
< conncnt[d] = 1;
---
> lastconn[dn] = now;
> conncnt[dn] = 1;
2277c2206
< else if (conncnt[d]++ > ConnRateThrottle)
---
> else if (conncnt[dn]++ > ConnRateThrottle)
2282c2211,2212
< name, ConnRateThrottle);
---
> Daemons[dn].d_name,
> ConnRateThrottle);
2285c2215,2216
< name, ConnRateThrottle);
---
> Daemons[dn].d_name,
> ConnRateThrottle);
2289,2290c2220,2221
< else if (now != lastconn[d])
< conncnt[d] = 0;
---
> else if (now != lastconn[dn])
> conncnt[dn] = 0;
2300c2231
< sm_setproctitle(true, e, R_MSG_LM, name, memfree);
---
> sm_setproctitle(true, e, R_MSG_LM, Daemons[dn].d_name, memfree);
2302c2233,2234
< sm_syslog(LOG_NOTICE, NOQID, R_MSG_LM, name, memfree);
---
> sm_syslog(LOG_NOTICE, NOQID, R_MSG_LM,
> Daemons[dn].d_name, memfree);
2307c2239,2241
< if (RefuseLA > 0 && CurrentLA >= RefuseLA)
---
> limit = (Daemons[dn].d_refuseLA != DPO_NOTSET) ?
> Daemons[dn].d_refuseLA : RefuseLA;
> if (limit > 0 && CurrentLA >= limit)
2313c2247,2248
< sm_setproctitle(true, e, R_MSG_LA, name, CurrentLA);
---
> sm_setproctitle(true, e, R_MSG_LA, Daemons[dn].d_name,
> CurrentLA);
2315c2250,2251
< sm_syslog(LOG_NOTICE, NOQID, R_MSG_LA, name, CurrentLA);
---
> sm_syslog(LOG_NOTICE, NOQID, R_MSG_LA,
> Daemons[dn].d_name, CurrentLA);
2317c2253
< if (firstrejtime[d] == 0)
---
> if (firstrejtime[dn] == 0)
2319,2320c2255,2256
< firstrejtime[d] = now;
< nextlogtime[d] = now + RejectLogInterval;
---
> firstrejtime[dn] = now;
> nextlogtime[dn] = now + RejectLogInterval;
2322c2258
< else if (nextlogtime[d] < now)
---
> else if (nextlogtime[dn] < now)
2324,2326c2260,2262
< sm_syslog(LOG_ERR, NOQID, R2_MSG_LA, name,
< pintvl(now - firstrejtime[d], true));
< nextlogtime[d] = now + RejectLogInterval;
---
> sm_syslog(LOG_ERR, NOQID, R2_MSG_LA, Daemons[dn].d_name,
> pintvl(now - firstrejtime[dn], true));
> nextlogtime[dn] = now + RejectLogInterval;
2331c2267
< firstrejtime[d] = 0;
---
> firstrejtime[dn] = 0;
2333c2269,2271
< if (DelayLA > 0 && CurrentLA >= DelayLA)
---
> limit = (Daemons[dn].d_delayLA != DPO_NOTSET) ?
> Daemons[dn].d_delayLA : DelayLA;
> if (limit > 0 && CurrentLA >= limit)
2341c2279
< sm_setproctitle(true, e, D_MSG_LA, name, DelayLA);
---
> sm_setproctitle(true, e, D_MSG_LA, Daemons[dn].d_name, limit);
2345c2283
< name, CurrentLA, DelayLA);
---
> Daemons[dn].d_name, CurrentLA, limit);
2351c2289,2291
< if (MaxChildren > 0 && CurChildren >= MaxChildren)
---
> limit = (Daemons[dn].d_maxchildren != DPO_NOTSET) ?
> Daemons[dn].d_maxchildren : MaxChildren;
> if (limit > 0 && CurChildren >= limit)
2354c2294
< if (CurChildren >= MaxChildren)
---
> if (CurChildren >= limit)
2358c2298,2299
< name, CurChildren, MaxChildren);
---
> Daemons[dn].d_name, CurChildren,
> limit);
2361c2302,2303
< name, CurChildren, MaxChildren);
---
> Daemons[dn].d_name, CurChildren,
> limit);
2366a2309
>
2495c2438
< environ = (char **) xalloc(sizeof (char *) * (i + 1));
---
> environ = (char **) xalloc(sizeof(char *) * (i + 1));
2664c2607
< (void) sm_vsnprintf(buf, sizeof buf, fmt, ap);
---
> (void) sm_vsnprintf(buf, sizeof(buf), fmt, ap);
2674c2617
< expand(ProcTitlePrefix, prefix, sizeof prefix, e);
---
> expand(ProcTitlePrefix, prefix, sizeof(prefix), e);
2892c2835
< buf, sizeof buf) != NULL)
---
> buf, sizeof(buf)) != NULL)
3266c3209
< while (sm_io_fgets(shellf, SM_TIME_DEFAULT, buf, sizeof buf) != NULL)
---
> while (sm_io_fgets(shellf, SM_TIME_DEFAULT, buf, sizeof(buf)) != NULL)
3338c3281
< char *dir;
---
> const char *dir;
3376c3319
< if (statfs(dir, &fs, sizeof fs, 0) == 0)
---
> if (statfs(dir, &fs, sizeof(fs), 0) == 0)
3581c3524
< memset(&lfd, '\0', sizeof lfd);
---
> memset(&lfd, '\0', sizeof(lfd));
3946,3947d3888
< char *p;
<
3949,3950c3890
< if (p = getextenv("SOCK"))
< sm_setuserenv("SOCK", p);
---
> sm_setuserenv("SOCK", NULL);
4046c3986
< e, RSF_RMCOMM|RSF_COUNT, 3, NULL, NOQID) != EX_OK)
---
> e, RSF_RMCOMM|RSF_COUNT, 3, NULL, NOQID, NULL) != EX_OK)
4055c3995
< (void) sm_strlcpy(reject, MsgBuf, sizeof reject);
---
> (void) sm_strlcpy(reject, MsgBuf, sizeof(reject));
4057c3997
< (void) sm_strlcpy(reject, "Access denied", sizeof reject);
---
> (void) sm_strlcpy(reject, "Access denied", sizeof(reject));
4374c4314
< if (strlen(name) > sizeof hbuf - 1)
---
> if (strlen(name) > sizeof(hbuf) - 1)
4379c4319
< (void) sm_strlcpy(hbuf, name, sizeof hbuf);
---
> (void) sm_strlcpy(hbuf, name, sizeof(hbuf));
4431c4371
< buf6, sizeof buf6);
---
> buf6, sizeof(buf6));
4670c4610,4611
< if (sm_snprintf(hnb, sizeof hnb, "[%s]", hp->h_name) < sizeof hnb
---
> if (sm_snprintf(hnb, sizeof(hnb), "[%s]", hp->h_name) <
> sizeof(hnb)
4688,4689c4629,4630
< if (sm_snprintf(hnb, sizeof hnb,
< "[%s]", *ha) < sizeof hnb &&
---
> if (sm_snprintf(hnb, sizeof(hnb),
> "[%s]", *ha) < sizeof(hnb) &&
4802c4743
< len = lifc.lifc_len = numifs * sizeof (struct lifreq);
---
> len = lifc.lifc_len = numifs * sizeof(struct lifreq);
4859c4800
< if ((len - i) < sizeof *ifr)
---
> if ((len - i) < sizeof(*ifr))
4863,4864c4804,4805
< if (sa->sa.sa_len > sizeof ifr->lifr_addr)
< i += sizeof ifr->lifr_name + sa->sa.sa_len;
---
> if (sa->sa.sa_len > sizeof(ifr->lifr_addr))
> i += sizeof(ifr->lifr_name) + sa->sa.sa_len;
4869c4810
< i += sizeof ifr->ifr_name +
---
> i += sizeof(ifr->ifr_name) +
4872c4813
< i += sizeof *ifr;
---
> i += sizeof(*ifr);
4926c4867
< addr = anynet_ntop(&ia6, buf6, sizeof buf6);
---
> addr = anynet_ntop(&ia6, buf6, sizeof(buf6));
4933c4874
< addr = anynet_ntop(&ia6, buf6, sizeof buf6);
---
> addr = anynet_ntop(&ia6, buf6, sizeof(buf6));
4935c4876
< (void) sm_snprintf(ip_addr, sizeof ip_addr,
---
> (void) sm_snprintf(ip_addr, sizeof(ip_addr),
4937c4878
< (int) sizeof ip_addr - 3,
---
> (int) sizeof(ip_addr) - 3,
4952,4953c4893,4894
< (void) sm_snprintf(ip_addr, sizeof ip_addr, "[%.*s]",
< (int) sizeof ip_addr - 3, inet_ntoa(ia));
---
> (void) sm_snprintf(ip_addr, sizeof(ip_addr), "[%.*s]",
> (int) sizeof(ip_addr) - 3, inet_ntoa(ia));
5009c4950
< ifc.ifc_len = numifs * sizeof (struct ifreq);
---
> ifc.ifc_len = numifs * sizeof(struct ifreq);
5048c4989
< if ((ifc.ifc_len - i) < sizeof *ifr)
---
> if ((ifc.ifc_len - i) < sizeof(*ifr))
5052,5053c4993,4994
< if (sa->sa.sa_len > sizeof ifr->ifr_addr)
< i += sizeof ifr->ifr_name + sa->sa.sa_len;
---
> if (sa->sa.sa_len > sizeof(ifr->ifr_addr))
> i += sizeof(ifr->ifr_name) + sa->sa.sa_len;
5056c4997
< i += sizeof *ifr;
---
> i += sizeof(*ifr);
5101,5102c5042,5043
< (void) sm_snprintf(ip_addr, sizeof ip_addr, "[%.*s]",
< (int) sizeof ip_addr - 3,
---
> (void) sm_snprintf(ip_addr, sizeof(ip_addr), "[%.*s]",
> (int) sizeof(ip_addr) - 3,
5125c5066
< addr = anynet_ntop(&ia6, buf6, sizeof buf6);
---
> addr = anynet_ntop(&ia6, buf6, sizeof(buf6));
5133c5074
< addr = anynet_ntop(&ia6, buf6, sizeof buf6);
---
> addr = anynet_ntop(&ia6, buf6, sizeof(buf6));
5135c5076
< (void) sm_snprintf(ip_addr, sizeof ip_addr,
---
> (void) sm_snprintf(ip_addr, sizeof(ip_addr),
5137c5078
< (int) sizeof ip_addr - 3,
---
> (int) sizeof(ip_addr) - 3,
5216c5157
< sz = (size_t) sizeof nproc;
---
> sz = (size_t) sizeof(nproc);
5392c5333
< bufsize = sizeof buf0;
---
> bufsize = sizeof(buf0);
5422c5363,5368
< syslog(level, "%s", newstring);
---
> {
> if (tTd(89, 8))
> sm_dprintf("%s\n", newstring);
> else
> syslog(level, "%s", newstring);
> }
5424c5370,5375
< syslog(level, "%s: %s", id, newstring);
---
> {
> if (tTd(89, 8))
> sm_dprintf("%s: %s\n", id, newstring);
> else
> syslog(level, "%s: %s", id, newstring);
> }
5476c5427,5430
< syslog(level, "%s[%d]: %s ...", id, seq++, begin);
---
> if (tTd(89, 8))
> sm_dprintf("%s[%d]: %s ...\n", id, seq++, begin);
> else
> syslog(level, "%s[%d]: %s ...", id, seq++, begin);
5484a5439
> {
5486,5487c5441,5446
< syslog(level, "%s[%d]: log terminated, too many parts",
< id, seq);
---
> if (tTd(89, 8))
> sm_dprintf("%s[%d]: log terminated, too many parts\n",
> id, seq);
> else
> syslog(level, "%s[%d]: log terminated, too many parts",
> id, seq);
5491a5451
> }
5492a5453
> {
5494c5455,5458
< syslog(level, "%s[%d]: %s", id, seq, begin);
---
> if (tTd(89, 8))
> sm_dprintf("%s[%d]: %s\n", id, seq, begin);
> else
> syslog(level, "%s[%d]: %s", id, seq, begin);
5498a5463
> }
5537c5502
< (void) sm_vsnprintf(buf, sizeof buf, msg, ap);
---
> (void) sm_vsnprintf(buf, sizeof(buf), msg, ap);
5794a5760,5762
> #if SM_LDAP_ERROR_ON_MISSING_ARGS
> "SM_LDAP_ERROR_ON_MISSING_ARGS",
> #endif /* SM_LDAP_ERROR_ON_MISSING_ARGS */
5888a5857,5859
> #if HASLDAPGETALIASBYNAME
> "HASLDAPGETALIASBYNAME",
> #endif /* HASLDAPGETALIASBYNAME */
5960a5932,5934
> #if MILTER_NO_NAGLE
> "MILTER_NO_NAGLE ",
> #endif /* MILTER_NO_NAGLE */
6063,6070d6036
< #if _FFR_BLOCK_PROXIES
< /*
< ** Try to deal with open HTTP proxies that are used to send spam
< ** by recognizing some commands from them.
< */
<
< "_FFR_BLOCK_PROXIES",
< #endif /* _FFR_BLOCK_PROXIES */
6075,6078d6040
< #if _FFR_CHECK_EOM
< /* Enable check_eom ruleset */
< "_FFR_CHECK_EOM",
< #endif /* _FFR_CHECK_EOM */
6087,6090d6048
< #if _FFR_CONTROL_MSTAT
< /* Extended daemon status. */
< "_FFR_CONTROL_MSTAT",
< #endif /* _FFR_CONTROL_MSTAT */
6112,6115d6069
< #if _FFR_DM_PER_DAEMON
< /* DeliveryMode per DaemonPortOptions: 'D' */
< "_FFR_DM_PER_DAEMON",
< #endif /* _FFR_DM_PER_DAEMON */
6121,6132d6074
< #if _FFR_DNSMAP_BASE
< /* Specify a "base" domain for DNS lookups. */
< "_FFR_DNSMAP_BASE",
< #endif /* _FFR_DNSMAP_BASE */
< #if _FFR_DNSMAP_MULTI
< /* Allow multiple return values for DNS map. */
< "_FFR_DNSMAP_MULTI",
< # if _FFR_DNSMAP_MULTILIMIT
< /* Limit number of return values for DNS map. */
< "_FFR_DNSMAP_MULTILIMIT",
< # endif /* _FFR_DNSMAP_MULTILIMIT */
< #endif /* _FFR_DNSMAP_MULTI */
6140a6083,6097
> #if _FFR_DPO_CS
> /*
> ** Make DaemonPortOptions case sensitive.
> ** For some unknown reasons the code converted every option
> ** to uppercase (first letter only, as that's the only one that
> ** is actually checked). This prevented all new lower case options
> ** from working...
> ** The documentation doesn't say anything about case (in)sensitivity,
> ** which means it should be case sensitive by default,
> ** but it's not a good idea to change this within a patch release,
> ** so let's delay this to 8.15.
> */
>
> "_FFR_DPO_CS",
> #endif /* _FFR_DPO_CS */
6149a6107,6110
> #if _FFR_EIGHT_BIT_ADDR_OK
> /* EightBitAddrOK: allow 8-bit e-mail addresses */
> "_FFR_EIGHT_BIT_ADDR_OK",
> #endif /* _FFR_EIGHT_BIT_ADDR_OK */
6153a6115,6127
> #if _FFR_GETHBN_ExFILE
> /*
> ** According to Motonori Nakamura some gethostbyname()
> ** implementations (TurboLinux?) may (temporarily) fail
> ** due to a lack of file discriptors. Enabling this FFR
> ** will check errno for EMFILE and ENFILE and in case of a match
> ** cause a temporary error instead of a permanent error.
> ** The right solution is of course to file a bug against those
> ** systems such that they actually set h_errno = TRY_AGAIN.
> */
>
> "_FFR_GETHBN_ExFILE",
> #endif /* _FFR_GETHBN_ExFILE */
6170,6173d6143
< #if _FFR_LOG_GREET_PAUSE
< /* log time for greet_pause delay; from Nik Clayton */
< "_FFR_LOG_GREET_PAUSE",
< #endif /* _FFR_LOG_GREET_PAUSE */
6187,6194d6156
< #if _FFR_HDR_TYPE
< /* Set 'h' in {addr_type} for headers. */
< "_FFR_HDR_TYPE",
< #endif /* _FFR_HDR_TYPE */
< #if _FFR_HELONAME
< /* option to set heloname; Nik Clayton of FreeBSD */
< "_FFR_HELONAME",
< #endif /* _FFR_HELONAME */
6223,6230d6184
< #if _FFR_MAXKEY
< /* increase key size for LDAP lookups, see conf.h */
< "_FFR_MAXKEY",
< #endif /* _FFR_MAXKEY */
< #if _FFR_MAXNOOPCOMMANDS
< /* runtime option for "MaxNOOPCommands" */
< "_FFR_MAXNOOPCOMMANDS",
< #endif /* _FFR_MAXNOOPCOMMANDS */
6239,6248c6193,6221
< #if _FFR_MILTER_NAGLE
< /* milter: turn off Nagle ("cork" on Linux) */
< /* John Gardiner Myers of Proofpoint */
< "_FFR_MILTER_NAGLE ",
< #endif /* _FFR_MILTER_NAGLE */
< #if _FFR_MILTER_NOHDR_RESP
< /* milter: no response expected when sending headers */
< /* John Gardiner Myers of Proofpoint */
< "_FFR_MILTER_NOHDR_RESP",
< #endif /* _FFR_MILTER_NOHDR_RESP */
---
> #if _FFR_MILTER_CHECK
> "_FFR_MILTER_CHECK",
> #endif /* _FFR_MILTER_CHECK */
> #if _FFR_MILTER_CONVERT_ALL_LF_TO_CRLF
> /*
> ** milter_body() uses the same conversion algorithm as putbody()
> ** to translate the "local" df format (\n) to SMTP format (\r\n).
> ** However, putbody() and mime8to7() use different conversion
> ** algorithms.
> ** If the input date does not follow the SMTP standard
> ** (e.g., if it has "naked \r"s), then the output from putbody()
> ** and mime8to7() will most likely be different.
> ** By turning on this FFR milter_body() will try to "imitate"
> ** mime8to7().
> ** Note: there is no (simple) way to deal with both conversions
> ** in a consistent manner. Moreover, as the "GiGo" principle applies,
> ** it's not really worth to fix it.
> */
>
> "_FFR_MILTER_CONVERT_ALL_LF_TO_CRLF",
> #endif /* _FFR_MILTER_CONVERT_ALL_LF_TO_CRLF */
> #if _FFR_MILTER_CHECK_REJECTIONS_TOO
> /*
> ** Also send RCPTs that are rejected by check_rcpt to a milter
> ** (if requested during option negotiation).
> */
>
> "_FFR_MILTER_CHECK_REJECTIONS_TOO",
> #endif /* _FFR_MILTER_CHECK_REJECTIONS_TOO */
6270,6278c6243,6245
< #if _FFR_PRIV_NOACTUALRECIPIENT
< /*
< ** PrivacyOptions=noactualrecipient stops sendmail from putting
< ** X-Actual-Recipient lines in DSNs revealing the actual
< ** account that addresses map to. Patch from Dan Harkless.
< */
<
< "_FFR_PRIV_NOACTUALRECIPIENT",
< #endif /* _FFR_PRIV_NOACTUALRECIPIENT */
---
> #if _FFR_QF_PARANOIA
> "_FFR_QF_PARANOIA",
> #endif /* _FFR_QF_PARANOIA */
6317,6320d6283
< #if _FFR_SELECT_SHM
< /* Auto-select of shared memory key */
< "_FFR_SELECT_SHM",
< #endif /* _FFR_SELECT_SHM */
6352,6355d6314
< #if _FFR_SOFT_BOUNCE
< /* Turn all errors into temporary errors. */
< "_FFR_SOFT_BOUNCE",
< #endif /* _FFR_SOFT_BOUNCE */