SCCS-vsn: usr.sbin/sendmail/src/domain.c 5.38
SCCS-vsn: usr.sbin/sendmail/src/version.c 5.140
SCCS-vsn: usr.sbin/sendmail/src/readcf.c 5.55
#ifndef lint
#ifdef NAMED_BIND
#ifndef lint
#ifdef NAMED_BIND
-static char sccsid[] = "@(#)domain.c 5.37 (Berkeley) %G% (with name server)";
+static char sccsid[] = "@(#)domain.c 5.38 (Berkeley) %G% (with name server)";
-static char sccsid[] = "@(#)domain.c 5.37 (Berkeley) %G% (without name server)";
+static char sccsid[] = "@(#)domain.c 5.38 (Berkeley) %G% (without name server)";
#endif
#endif /* not lint */
#endif
#endif /* not lint */
- ** We do at least one level of search if
- ** - there is no dot and RES_DEFNAME is set, or
- ** - there is at least one dot, there is no trailing dot,
- ** and RES_DNSRCH is set.
+ ** We assume that RES_DEFNAMES and RES_DNSRCH are set -- if we
+ ** don't want this behaviour, don't use $[ ... $] at all!
- if (ret < 0 &&
- ((n == 0 && _res.options & RES_DEFNAMES) ||
- (n > 0 && *--cp != '.' && _res.options & RES_DNSRCH)))
+ if (ret < 0 && (n == 0 || (n > 0 && *--cp != '.')))
{
for (domain = _res.dnsrch; *domain; domain++)
{
{
for (domain = _res.dnsrch; *domain; domain++)
{
-static char sccsid[] = "@(#)readcf.c 5.54 (Berkeley) %G%";
+static char sccsid[] = "@(#)readcf.c 5.55 (Berkeley) %G%";
#endif /* not lint */
# include "sendmail.h"
# include <sys/stat.h>
# include <unistd.h>
#endif /* not lint */
# include "sendmail.h"
# include <sys/stat.h>
# include <unistd.h>
+#ifdef NAMED_BIND
+# include <arpa/nameser.h>
+# include <resolv.h>
+#endif
/*
** READCF -- read control file.
/*
** READCF -- read control file.
static BITMAP StickyOpt; /* set if option is stuck */
static BITMAP StickyOpt; /* set if option is stuck */
+
+#ifdef NAMED_BIND
+
+struct resolverflags
+{
+ char *rf_name; /* name of the flag */
+ long rf_bits; /* bits to set/clear */
+} ResolverFlags[] =
+{
+ "debug", RES_DEBUG,
+ "aaonly", RES_AAONLY,
+ "usevc", RES_USEVC,
+ "primary", RES_PRIMARY,
+ "igntc", RES_IGNTC,
+ "recurse", RES_RECURSE,
+ "defnames", RES_DEFNAMES,
+ "stayopen", RES_STAYOPEN,
+ "dnsrch", RES_DNSRCH,
+ NULL, 0
+};
+
+#endif
+
setoption(opt, val, sticky)
char opt;
char *val;
bool sticky;
{
setoption(opt, val, sticky)
char opt;
char *val;
bool sticky;
{
extern bool atobool();
extern time_t convtime();
extern int QueueLA;
extern bool atobool();
extern time_t convtime();
extern int QueueLA;
break;
case 'I': /* use internet domain name server */
break;
case 'I': /* use internet domain name server */
- UseNameServer = atobool(val);
+#ifdef NAMED_BIND
+ UseNameServer = TRUE;
+ for (p = val; *p != 0; )
+ {
+ bool clearmode;
+ char *q;
+ struct resolverflags *rfp;
+
+ while (*p == ' ')
+ p++;
+ if (*p == '\0')
+ break;
+ clearmode = FALSE;
+ if (*p == '-')
+ clearmode = TRUE;
+ else if (*p != '+')
+ p--;
+ p++;
+ q = p;
+ while (*p != '\0' && !isspace(*p))
+ p++;
+ if (*p != '\0')
+ *p++ = '\0';
+ for (rfp = ResolverFlags; rfp->rf_name != NULL; rfp++)
+ {
+ if (strcasecmp(q, rfp->rf_name) == 0)
+ break;
+ }
+ if (clearmode)
+ _res.options &= ~rfp->rf_bits;
+ else
+ _res.options |= rfp->rf_bits;
+ }
+ if (tTd(8, 2))
+ printf("_res.options = %x\n", _res.options);
+#else
+ usrerr("name server (I option) specified but BIND not compiled in");
+#endif
break;
case 'i': /* ignore dot lines in message */
break;
case 'i': /* ignore dot lines in message */
-static char sccsid[] = "@(#)version.c 5.139 (Berkeley) %G%";
+static char sccsid[] = "@(#)version.c 5.140 (Berkeley) %G%";
-char Version[] = "ALPHA-5.139";
+char Version[] = "ALPHA-5.140";