Add flags to look in Apparently-To: or Delivered-To: fields. Inspired by jhawk.

This commit is contained in:
christos 2003-04-20 03:32:50 +00:00
parent 62d7b4df25
commit 3a1e3ae4c9
2 changed files with 36 additions and 9 deletions

View File

@ -1,4 +1,4 @@
.\" $NetBSD: vacation.1,v 1.17 2003/02/25 10:36:00 wiz Exp $
.\" $NetBSD: vacation.1,v 1.18 2003/04/20 03:32:50 christos Exp $
.\"
.\" Copyright (c) 1985, 1987, 1990, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@ -33,7 +33,7 @@
.\"
.\" @(#)vacation.1 8.2 (Berkeley) 4/28/95
.\"
.Dd April 28, 1995
.Dd April 19, 2003
.Dt VACATION 1
.Os
.Sh NAME
@ -45,8 +45,10 @@ indication
.Nm
.Fl i
.Op Fl r Ar interval
.Op Fl t Ar A|D
.Nm
.Op Fl a Ar alias
.Op Fl t Ar A|D
.Ar login
.Sh DESCRIPTION
.Nm
@ -97,6 +99,11 @@ are quite
dangerous, as it allows mailers to get into
.Dq I am on vacation
loops.
.It Fl t Ar A|D
Make
.Nm
look in addition to Apparently-To: (A) or Delivered-To: (D) headers
to determine the To: field.
.El
.Pp
No message will be sent unless

View File

@ -1,4 +1,4 @@
/* $NetBSD: vacation.c,v 1.21 2003/04/20 01:58:00 christos Exp $ */
/* $NetBSD: vacation.c,v 1.22 2003/04/20 03:32:50 christos Exp $ */
/*
* Copyright (c) 1983, 1987, 1993
@ -44,7 +44,7 @@ __COPYRIGHT("@(#) Copyright (c) 1983, 1987, 1993\n\
#if 0
static char sccsid[] = "@(#)vacation.c 8.2 (Berkeley) 1/26/94";
#endif
__RCSID("$NetBSD: vacation.c,v 1.21 2003/04/20 01:58:00 christos Exp $");
__RCSID("$NetBSD: vacation.c,v 1.22 2003/04/20 03:32:50 christos Exp $");
#endif /* not lint */
/*
@ -58,6 +58,7 @@ __RCSID("$NetBSD: vacation.c,v 1.21 2003/04/20 01:58:00 christos Exp $");
#include <ctype.h>
#include <db.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <paths.h>
@ -91,6 +92,9 @@ alias_t *names;
DB *db;
char from[MAXLINE];
static int tflag = 0;
#define APPARENTLY_TO 1
#define DELIVERED_TO 2
int main(int, char **);
int junkmail(void);
@ -109,11 +113,12 @@ main(int argc, char **argv)
alias_t *cur;
time_t interval;
int ch, iflag;
char *p;
opterr = iflag = 0;
interval = -1;
openlog("vacation", 0, LOG_USER);
while ((ch = getopt(argc, argv, "a:Iir:")) != -1)
while ((ch = getopt(argc, argv, "a:Iir:t:")) != -1)
switch((char)ch) {
case 'a': /* alias */
if (!(cur = (alias_t *)malloc((size_t)sizeof(alias_t))))
@ -135,6 +140,19 @@ main(int argc, char **argv)
else
interval = (time_t)LONG_MAX; /* XXX */
break;
case 't':
for (p = optarg; *p; p++)
switch (*p) {
case 'A':
tflag |= APPARENTLY_TO;
break;
case 'D':
tflag |= DELIVERED_TO;
break;
default:
errx(1, "Unknown -t option `%c'", *p);
}
break;
case '?':
default:
usage();
@ -249,12 +267,14 @@ readheaders(void)
cont = 1;
goto findme;
case 'A':
if (strncmp(buf, "Apparently-To:", 3))
if ((tflag & APPARENTLY_TO) == 0 ||
strncmp(buf, "Apparently-To:", 3))
break;
cont = 1;
goto findme;
case 'D':
if (strncmp(buf, "Delivered-To:", 3))
if ((tflag & DELIVERED_TO) == 0 ||
strncmp(buf, "Delivered-To:", 3))
break;
cont = 1;
goto findme;
@ -452,7 +472,7 @@ void
usage(void)
{
syslog(LOG_ERR, "uid %u: usage: vacation [-i] [-a alias] login",
getuid());
syslog(LOG_ERR, "uid %u: usage: %s [-i] [-a alias] [-t A|D] login",
getuid(), getprogname());
exit(1);
}