summaryrefslogtreecommitdiffstats
path: root/contrib/sendmail/vacation/vacation.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sendmail/vacation/vacation.c')
-rw-r--r--contrib/sendmail/vacation/vacation.c461
1 files changed, 203 insertions, 258 deletions
diff --git a/contrib/sendmail/vacation/vacation.c b/contrib/sendmail/vacation/vacation.c
index 42ae04f..ec69541 100644
--- a/contrib/sendmail/vacation/vacation.c
+++ b/contrib/sendmail/vacation/vacation.c
@@ -11,18 +11,16 @@
*
*/
-#ifndef lint
-static char copyright[] =
+#include <sm/gen.h>
+
+SM_IDSTR(copyright,
"@(#) Copyright (c) 1999-2001 Sendmail, Inc. and its suppliers.\n\
All rights reserved.\n\
Copyright (c) 1983, 1987, 1993\n\
The Regents of the University of California. All rights reserved.\n\
- Copyright (c) 1983 Eric P. Allman. All rights reserved.\n";
-#endif /* ! lint */
+ Copyright (c) 1983 Eric P. Allman. All rights reserved.\n")
-#ifndef lint
-static char id[] = "@(#)$Id: vacation.c,v 8.68.4.21 2001/05/07 22:06:41 gshapiro Exp $";
-#endif /* ! lint */
+SM_IDSTR(id, "@(#)$Id: vacation.c,v 8.131 2001/12/12 00:02:42 gshapiro Exp $")
#include <ctype.h>
@@ -33,27 +31,17 @@ static char id[] = "@(#)$Id: vacation.c,v 8.68.4.21 2001/05/07 22:06:41 gshapiro
#ifdef EX_OK
# undef EX_OK /* unistd.h may have another use for this */
#endif /* EX_OK */
-#include <sysexits.h>
+#include <sm/sysexits.h>
+#include <sm/cf.h>
+#include <sm/mbdb.h>
#include "sendmail/sendmail.h"
+#include <sendmail/pathnames.h>
#include "libsmdb/smdb.h"
-#if defined(__hpux) && !defined(HPUX11)
-# undef syslog /* Undo hard_syslog conf.h change */
-#endif /* defined(__hpux) && !defined(HPUX11) */
-
-#ifndef _PATH_SENDMAIL
-# define _PATH_SENDMAIL "/usr/lib/sendmail"
-#endif /* ! _PATH_SENDMAIL */
-
#define ONLY_ONCE ((time_t) 0) /* send at most one reply */
#define INTERVAL_UNDEF ((time_t) (-1)) /* no value given */
-#ifndef TRUE
-# define TRUE 1
-# define FALSE 0
-#endif /* ! TRUE */
-
uid_t RealUid;
gid_t RealGid;
char *RealUserName;
@@ -61,7 +49,7 @@ uid_t RunAsUid;
uid_t RunAsGid;
char *RunAsUserName;
int Verbose = 2;
-bool DontInitGroups = FALSE;
+bool DontInitGroups = false;
uid_t TrustedUid = 0;
BITMAP256 DontBlameSendmail;
@@ -79,15 +67,6 @@ BITMAP256 DontBlameSendmail;
#define SECSPERDAY (60 * 60 * 24)
#define DAYSPERWEEK 7
-#ifndef __P
-# ifdef __STDC__
-# define __P(protos) protos
-# else /* __STDC__ */
-# define __P(protos) ()
-# define const
-# endif /* __STDC__ */
-#endif /* ! __P */
-
typedef struct alias
{
char *name;
@@ -100,33 +79,48 @@ SMDB_DATABASE *Db;
char From[MAXLINE];
-#if _FFR_DEBUG
-void (*msglog)(int, const char *, ...) = &syslog;
-static void debuglog __P((int, const char *, ...));
-#else /* _FFR_DEBUG */
-# define msglog syslog
-#endif /* _FFR_DEBUG */
-
+#if defined(__hpux) || defined(__osf__)
+# ifndef SM_CONF_SYSLOG_INT
+# define SM_CONF_SYSLOG_INT 1
+# endif /* SM_CONF_SYSLOG_INT */
+#endif /* defined(__hpux) || defined(__osf__) */
+
+#if SM_CONF_SYSLOG_INT
+# define SYSLOG_RET_T int
+# define SYSLOG_RET return 0
+#else /* SM_CONF_SYSLOG_INT */
+# define SYSLOG_RET_T void
+# define SYSLOG_RET
+#endif /* SM_CONF_SYSLOG_INT */
+
+typedef SYSLOG_RET_T SYSLOG_T __P((int, const char *, ...));
+SYSLOG_T *msglog = syslog;
+static SYSLOG_RET_T debuglog __P((int, const char *, ...));
static void eatmsg __P((void));
+static void listdb __P((void));
/* exit after reading input */
-#define EXITIT(excode) { \
- eatmsg(); \
- return excode; \
- }
+#define EXITIT(excode) \
+{ \
+ eatmsg(); \
+ return excode; \
+}
+
+#define EXITM(excode) \
+{ \
+ if (!iflag && !lflag) \
+ eatmsg(); \
+ exit(excode); \
+}
int
main(argc, argv)
int argc;
char **argv;
{
- bool iflag, emptysender, exclude;
-#if _FFR_BLACKBOX
- bool runasuser = FALSE;
-#endif /* _FFR_BLACKBOX */
-#if _FFR_LISTDB
- bool lflag = FALSE;
-#endif /* _FFR_LISTDB */
+ bool iflag, exclude;
+ bool runasuser = false;
+ bool lflag = false;
int mfail = 0, ufail = 0;
int ch;
int result;
@@ -136,7 +130,9 @@ main(argc, argv)
ALIAS *cur;
char *dbfilename = NULL;
char *msgfilename = NULL;
+ char *cfpath = NULL;
char *name;
+ char *returnaddr = NULL;
SMDB_USER_INFO user_info;
static char rnamebuf[MAXNAME];
extern int optind, opterr;
@@ -146,21 +142,8 @@ main(argc, argv)
extern int readheaders __P((void));
extern bool recent __P((void));
extern void setreply __P((char *, time_t));
- extern void sendmessage __P((char *, char *, bool));
- extern void xclude __P((FILE *));
-#if _FFR_LISTDB
-#define EXITM(excode) { \
- if (!iflag && !lflag) \
- eatmsg(); \
- exit(excode); \
- }
-#else /* _FFR_LISTDB */
-#define EXITM(excode) { \
- if (!iflag) \
- eatmsg(); \
- exit(excode); \
- }
-#endif /* _FFR_LISTDB */
+ extern void sendmessage __P((char *, char *, char *));
+ extern void xclude __P((SM_FILE_T *));
/* Vars needed to link with smutil */
clrbitmap(DontBlameSendmail);
@@ -171,11 +154,11 @@ main(argc, argv)
{
if (strlen(pw->pw_name) > MAXNAME - 1)
pw->pw_name[MAXNAME] = '\0';
- snprintf(rnamebuf, sizeof rnamebuf, "%s", pw->pw_name);
+ sm_snprintf(rnamebuf, sizeof rnamebuf, "%s", pw->pw_name);
}
else
- snprintf(rnamebuf, sizeof rnamebuf,
- "Unknown UID %d", (int) RealUid);
+ sm_snprintf(rnamebuf, sizeof rnamebuf,
+ "Unknown UID %d", (int) RealUid);
RunAsUserName = RealUserName = rnamebuf;
# ifdef LOG_MAIL
@@ -185,13 +168,17 @@ main(argc, argv)
# endif /* LOG_MAIL */
opterr = 0;
- iflag = FALSE;
- emptysender = FALSE;
- exclude = FALSE;
+ iflag = false;
+ exclude = false;
interval = INTERVAL_UNDEF;
*From = '\0';
-#define OPTIONS "a:df:Iilm:r:s:t:Uxz"
+
+#if _FFR_RETURN_ADDR
+# define OPTIONS "a:C:df:Iilm:R:r:s:t:Uxz"
+#else /* _FFR_RETURN_ADDR */
+# define OPTIONS "a:C:df:Iilm:r:s:t:Uxz"
+#endif /* _FFR_RETURN_ADDR */
while (mfail == 0 && ufail == 0 &&
(ch = getopt(argc, argv, OPTIONS)) != -1)
@@ -199,7 +186,7 @@ main(argc, argv)
switch((char)ch)
{
case 'a': /* alias */
- cur = (ALIAS *)malloc((u_int)sizeof(ALIAS));
+ cur = (ALIAS *) malloc((unsigned int) sizeof(ALIAS));
if (cur == NULL)
{
mfail++;
@@ -210,11 +197,13 @@ main(argc, argv)
Names = cur;
break;
-#if _FFR_DEBUG
+ case 'C':
+ cfpath = optarg;
+ break;
+
case 'd': /* debug mode */
- msglog = &debuglog;
+ msglog = debuglog;
break;
-#endif /* _FFR_DEBUG */
case 'f': /* alternate database */
dbfilename = optarg;
@@ -222,19 +211,23 @@ main(argc, argv)
case 'I': /* backward compatible */
case 'i': /* init the database */
- iflag = TRUE;
+ iflag = true;
break;
-#if _FFR_LISTDB
case 'l':
- lflag = TRUE; /* list the database */
+ lflag = true; /* list the database */
break;
-#endif /* _FFR_LISTDB */
case 'm': /* alternate message file */
msgfilename = optarg;
break;
+#if _FFR_RETURN_ADDR
+ case 'R':
+ returnaddr = optarg;
+ break;
+#endif /* _FFR_RETURN_ADDR */
+
case 'r':
if (isascii(*optarg) && isdigit(*optarg))
{
@@ -247,24 +240,22 @@ main(argc, argv)
break;
case 's': /* alternate sender name */
- (void) strlcpy(From, optarg, sizeof From);
+ (void) sm_strlcpy(From, optarg, sizeof From);
break;
case 't': /* SunOS: -t1d (default expire) */
break;
-#if _FFR_BLACKBOX
case 'U': /* run as single user mode */
- runasuser = TRUE;
+ runasuser = true;
break;
-#endif /* _FFR_BLACKBOX */
case 'x':
- exclude = TRUE;
+ exclude = true;
break;
case 'z':
- emptysender = TRUE;
+ returnaddr = "<>";
break;
case '?':
@@ -287,11 +278,7 @@ main(argc, argv)
if (argc != 1)
{
- if (!iflag &&
-#if _FFR_LISTDB
- !lflag &&
-#endif /* _FFR_LISTDB */
- !exclude)
+ if (!iflag && !lflag && !exclude)
usage();
if ((pw = getpwuid(getuid())) == NULL)
{
@@ -302,16 +289,16 @@ main(argc, argv)
name = pw->pw_name;
user_info.smdbu_id = pw->pw_uid;
user_info.smdbu_group_id = pw->pw_gid;
- (void) strlcpy(user_info.smdbu_name, pw->pw_name,
- SMDB_MAX_USER_NAME_LEN);
+ (void) sm_strlcpy(user_info.smdbu_name, pw->pw_name,
+ SMDB_MAX_USER_NAME_LEN);
if (chdir(pw->pw_dir) != 0)
{
- msglog(LOG_NOTICE, "vacation: no such directory %s.\n",
+ msglog(LOG_NOTICE,
+ "vacation: no such directory %s.\n",
pw->pw_dir);
EXITM(EX_NOINPUT);
}
}
-#if _FFR_BLACKBOX
else if (runasuser)
{
name = *argv;
@@ -323,27 +310,51 @@ main(argc, argv)
}
user_info.smdbu_id = pw->pw_uid;
user_info.smdbu_group_id = pw->pw_gid;
- (void) strlcpy(user_info.smdbu_name, pw->pw_name,
+ (void) sm_strlcpy(user_info.smdbu_name, pw->pw_name,
SMDB_MAX_USER_NAME_LEN);
}
-#endif /* _FFR_BLACKBOX */
- else if ((pw = getpwnam(*argv)) == NULL)
- {
- msglog(LOG_ERR, "vacation: no such user %s.\n", *argv);
- EXITM(EX_NOUSER);
- }
else
{
- name = pw->pw_name;
- if (chdir(pw->pw_dir) != 0)
+ int err;
+ SM_CF_OPT_T mbdbname;
+ SM_MBDB_T user;
+
+ cfpath = getcfname(0, 0, SM_GET_SENDMAIL_CF, NULL);
+ mbdbname.opt_name = "MailboxDatabase";
+ mbdbname.opt_val = "pw";
+ (void) sm_cf_getopt(cfpath, 1, &mbdbname);
+ err = sm_mbdb_initialize(mbdbname.opt_val);
+ if (err != EX_OK)
{
- msglog(LOG_NOTICE, "vacation: no such directory %s.\n",
- pw->pw_dir);
+ msglog(LOG_ERR,
+ "vacation: can't open mailbox database: %s.\n",
+ sm_strexit(err));
+ EXITM(err);
+ }
+ err = sm_mbdb_lookup(*argv, &user);
+ if (err == EX_NOUSER)
+ {
+ msglog(LOG_ERR, "vacation: no such user %s.\n", *argv);
+ EXITM(EX_NOUSER);
+ }
+ if (err != EX_OK)
+ {
+ msglog(LOG_ERR,
+ "vacation: can't read mailbox database: %s.\n",
+ sm_strexit(err));
+ EXITM(err);
+ }
+ name = user.mbdb_name;
+ if (chdir(user.mbdb_homedir) != 0)
+ {
+ msglog(LOG_NOTICE,
+ "vacation: no such directory %s.\n",
+ user.mbdb_homedir);
EXITM(EX_NOINPUT);
}
- user_info.smdbu_id = pw->pw_uid;
- user_info.smdbu_group_id = pw->pw_gid;
- (void) strlcpy(user_info.smdbu_name, pw->pw_name,
+ user_info.smdbu_id = user.mbdb_uid;
+ user_info.smdbu_group_id = user.mbdb_gid;
+ (void) sm_strlcpy(user_info.smdbu_name, user.mbdb_name,
SMDB_MAX_USER_NAME_LEN);
}
@@ -353,14 +364,12 @@ main(argc, argv)
msgfilename = VMSG;
sff = SFF_CREAT;
-#if _FFR_BLACKBOX
if (getegid() != getgid())
{
- /* Allow a set-group-id vacation binary */
+ /* Allow a set-group-ID vacation binary */
RunAsGid = user_info.smdbu_group_id = getegid();
- sff |= SFF_NOPATHCHECK|SFF_OPENASROOT;
+ sff |= SFF_OPENASROOT;
}
-#endif /* _FFR_BLACKBOX */
result = smdb_open_database(&Db, dbfilename,
O_CREAT|O_RDWR | (iflag ? O_TRUNC : 0),
@@ -369,20 +378,16 @@ main(argc, argv)
if (result != SMDBE_OK)
{
msglog(LOG_NOTICE, "vacation: %s: %s\n", dbfilename,
- errstring(result));
+ sm_errstring(result));
EXITM(EX_DATAERR);
}
-#if _FFR_LISTDB
if (lflag)
{
- static void listdb __P((void));
-
listdb();
(void) Db->smdb_close(Db);
exit(EX_OK);
}
-#endif /* _FFR_LISTDB */
if (interval != INTERVAL_UNDEF)
setinterval(interval);
@@ -395,12 +400,12 @@ main(argc, argv)
if (exclude)
{
- xclude(stdin);
+ xclude(smioin);
(void) Db->smdb_close(Db);
EXITM(EX_OK);
}
- if ((cur = (ALIAS *)malloc((u_int)sizeof(ALIAS))) == NULL)
+ if ((cur = (ALIAS *) malloc((unsigned int) sizeof(ALIAS))) == NULL)
{
msglog(LOG_NOTICE,
"vacation: can't allocate memory for username.\n");
@@ -419,7 +424,7 @@ main(argc, argv)
(void) time(&now);
setreply(From, now);
(void) Db->smdb_close(Db);
- sendmessage(name, msgfilename, emptysender);
+ sendmessage(name, msgfilename, returnaddr);
}
else
(void) Db->smdb_close(Db);
@@ -474,16 +479,17 @@ readheaders()
extern bool junkmail __P((char *));
extern bool nsearch __P((char *, char *));
- cont = tome = FALSE;
- while (fgets(buf, sizeof(buf), stdin) && *buf != '\n')
+ cont = tome = false;
+ while (sm_io_fgets(smioin, SM_TIME_DEFAULT, buf, sizeof(buf)) &&
+ *buf != '\n')
{
switch(*buf)
{
case 'F': /* "From " */
- cont = FALSE;
+ cont = false;
if (strncmp(buf, "From ", 5) == 0)
{
- bool quoted = FALSE;
+ bool quoted = false;
p = buf + 5;
while (*p != '\0')
@@ -517,8 +523,8 @@ readheaders()
/* ok since both strings have MAXLINE length */
if (*From == '\0')
- (void) strlcpy(From, buf + 5,
- sizeof From);
+ (void) sm_strlcpy(From, buf + 5,
+ sizeof From);
if ((p = strchr(buf + 5, '\n')) != NULL)
*p = '\0';
if (junkmail(buf + 5))
@@ -528,7 +534,7 @@ readheaders()
case 'P': /* "Precedence:" */
case 'p':
- cont = FALSE;
+ cont = false;
if (strlen(buf) <= 10 ||
strncasecmp(buf, "Precedence", 10) != 0 ||
(buf[10] != ':' && buf[10] != ' ' &&
@@ -549,20 +555,20 @@ readheaders()
case 'c':
if (strncasecmp(buf, "Cc:", 3) != 0)
break;
- cont = TRUE;
+ cont = true;
goto findme;
case 'T': /* "To:" */
case 't':
if (strncasecmp(buf, "To:", 3) != 0)
break;
- cont = TRUE;
+ cont = true;
goto findme;
default:
if (!isascii(*buf) || !isspace(*buf) || !cont || tome)
{
- cont = FALSE;
+ cont = false;
break;
}
findme:
@@ -619,9 +625,9 @@ nsearch(name, str)
strncasecmp(name, s, len) == 0 &&
(s == str || !isascii(*(s - 1)) || !isalnum(*(s - 1))) &&
(!isascii(*(s + len)) || !isalnum(*(s + len))))
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
/*
@@ -689,7 +695,7 @@ junkmail(from)
** From site!site!SENDER%site.domain%site.domain@site.domain
*/
- quot = FALSE;
+ quot = false;
e = from;
len = 0;
while (*e != '\0' && (quot || !isdelim(*e)))
@@ -728,10 +734,10 @@ junkmail(from)
sender[MAX_USER_LEN - 1] = '\0';
if (len <= 0)
- return FALSE;
+ return false;
#if 0
if (quot)
- return FALSE; /* syntax error... */
+ return false; /* syntax error... */
#endif /* 0 */
/* test prefixes */
@@ -739,7 +745,7 @@ junkmail(from)
{
if (len >= cur->len &&
strncasecmp(cur->name, sender, cur->len) == 0)
- return TRUE;
+ return true;
}
/*
@@ -752,14 +758,14 @@ junkmail(from)
*/
if (len > MAX_USER_LEN)
- return FALSE;
+ return false;
/* test full local parts */
for (cur = ignore; cur->name != NULL; ++cur)
{
if (len == cur->len &&
strncasecmp(cur->name, sender, cur->len) == 0)
- return TRUE;
+ return true;
}
/* test postfixes */
@@ -768,9 +774,9 @@ junkmail(from)
if (len >= cur->len &&
strncasecmp(cur->name, e - cur->len - 1,
cur->len) == 0)
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
#define VIT "__VACATION__INTERVAL__TIMER__"
@@ -783,7 +789,7 @@ junkmail(from)
** none.
**
** Returns:
-** TRUE iff user has gotten a vacation message recently.
+** true iff user has gotten a vacation message recently.
**
*/
@@ -792,7 +798,7 @@ recent()
{
SMDB_DBENT key, data;
time_t then, next;
- bool trydomain = FALSE;
+ bool trydomain = false;
int st;
char *domain;
@@ -823,7 +829,7 @@ recent()
memmove(&then, data.data, sizeof(then));
if (next == ONLY_ONCE || then == ONLY_ONCE ||
then + next > time(NULL))
- return TRUE;
+ return true;
}
if ((trydomain = !trydomain) &&
(domain = strchr(From, '@')) != NULL)
@@ -832,7 +838,7 @@ recent()
key.size = strlen(domain);
}
} while (trydomain);
- return FALSE;
+ return false;
}
/*
@@ -913,13 +919,13 @@ setreply(from, when)
void
xclude(f)
- FILE *f;
+ SM_FILE_T *f;
{
char buf[MAXLINE], *p;
if (f == NULL)
return;
- while (fgets(buf, sizeof buf, f))
+ while (sm_io_fgets(f, SM_TIME_DEFAULT, buf, sizeof buf))
{
if ((p = strchr(buf, '\n')) != NULL)
*p = '\0';
@@ -934,7 +940,7 @@ xclude(f)
** Parameters:
** myname -- user name.
** msgfn -- name of file with vacation message.
-** emptysender -- use <> as sender address?
+** sender -- use as sender address
**
** Returns:
** nothing.
@@ -944,18 +950,18 @@ xclude(f)
*/
void
-sendmessage(myname, msgfn, emptysender)
+sendmessage(myname, msgfn, sender)
char *myname;
char *msgfn;
- bool emptysender;
+ char *sender;
{
- FILE *mfp, *sfp;
+ SM_FILE_T *mfp, *sfp;
int i;
int pvect[2];
char *pv[8];
char buf[MAXLINE];
- mfp = fopen(msgfn, "r");
+ mfp = sm_io_open(SmFtStdio, SM_TIME_DEFAULT, msgfn, SM_IO_RDONLY, NULL);
if (mfp == NULL)
{
if (msgfn[0] == '/')
@@ -967,14 +973,14 @@ sendmessage(myname, msgfn, emptysender)
}
if (pipe(pvect) < 0)
{
- msglog(LOG_ERR, "vacation: pipe: %s", errstring(errno));
+ msglog(LOG_ERR, "vacation: pipe: %s", sm_errstring(errno));
exit(EX_OSERR);
}
pv[0] = "sendmail";
pv[1] = "-oi";
pv[2] = "-f";
- if (emptysender)
- pv[3] = "<>";
+ if (sender != NULL)
+ pv[3] = sender;
else
pv[3] = myname;
pv[4] = "--";
@@ -983,7 +989,7 @@ sendmessage(myname, msgfn, emptysender)
i = fork();
if (i < 0)
{
- msglog(LOG_ERR, "vacation: fork: %s", errstring(errno));
+ msglog(LOG_ERR, "vacation: fork: %s", sm_errstring(errno));
exit(EX_OSERR);
}
if (i == 0)
@@ -991,26 +997,29 @@ sendmessage(myname, msgfn, emptysender)
(void) dup2(pvect[0], 0);
(void) close(pvect[0]);
(void) close(pvect[1]);
- (void) fclose(mfp);
+ (void) sm_io_close(mfp, SM_TIME_DEFAULT);
(void) execv(_PATH_SENDMAIL, pv);
msglog(LOG_ERR, "vacation: can't exec %s: %s",
- _PATH_SENDMAIL, errstring(errno));
+ _PATH_SENDMAIL, sm_errstring(errno));
exit(EX_UNAVAILABLE);
}
/* check return status of the following calls? XXX */
(void) close(pvect[0]);
- if ((sfp = fdopen(pvect[1], "w")) != NULL)
+ if ((sfp = sm_io_open(SmFtStdiofd, SM_TIME_DEFAULT,
+ (void *) &(pvect[1]),
+ SM_IO_WRONLY, NULL)) != NULL)
{
- (void) fprintf(sfp, "To: %s\n", From);
- (void) fprintf(sfp, "Auto-Submitted: auto-generated\n");
- while (fgets(buf, sizeof buf, mfp))
- (void) fputs(buf, sfp);
- (void) fclose(mfp);
- (void) fclose(sfp);
+ (void) sm_io_fprintf(sfp, SM_TIME_DEFAULT, "To: %s\n", From);
+ (void) sm_io_fprintf(sfp, SM_TIME_DEFAULT,
+ "Auto-Submitted: auto-replied\n");
+ while (sm_io_fgets(mfp, SM_TIME_DEFAULT, buf, sizeof buf))
+ (void) sm_io_fputs(sfp, SM_TIME_DEFAULT, buf);
+ (void) sm_io_close(mfp, SM_TIME_DEFAULT);
+ (void) sm_io_close(sfp, SM_TIME_DEFAULT);
}
else
{
- (void) fclose(mfp);
+ (void) sm_io_close(mfp, SM_TIME_DEFAULT);
msglog(LOG_ERR, "vacation: can't open pipe to sendmail");
exit(EX_UNAVAILABLE);
}
@@ -1019,29 +1028,20 @@ sendmessage(myname, msgfn, emptysender)
void
usage()
{
+ char *retusage;
+
+#if _FFR_RETURN_ADDR
+ retusage = "[-R returnaddr] ";
+#else /* _FFR_RETURN_ADDR */
+ retusage = "";
+#endif /* _FFR_RETURN_ADDR */
+
msglog(LOG_NOTICE,
- "uid %u: usage: vacation [-a alias]%s [-f db] [-i]%s [-m msg] [-r interval] [-s sender] [-t time]%s [-x] [-z] login\n",
- getuid(),
-#if _FFR_DEBUG
- " [-d]",
-#else /* _FFR_DEBUG */
- "",
-#endif /* _FFR_DEBUG */
-#if _FFR_LISTDB
- " [-l]",
-#else /* _FFR_LISTDB */
- "",
-#endif /* _FFR_LISTDB */
-#if _FFR_BLACKBOX
- " [-U]"
-#else /* _FFR_BLACKBOX */
- ""
-#endif /* _FFR_BLACKBOX */
- );
+ "uid %u: usage: vacation [-a alias] [-C cfpath] [-d] [-f db] [-i] [-l] [-m msg] %s[-r interval] [-s sender] [-t time] [-U] [-x] [-z] login\n",
+ getuid(), retusage);
exit(EX_USAGE);
}
-#if _FFR_LISTDB
/*
** LISTDB -- list the contents of the vacation database
**
@@ -1066,8 +1066,9 @@ listdb()
result = Db->smdb_cursor(Db, &cursor, 0);
if (result != SMDBE_OK)
{
- fprintf(stderr, "vacation: set cursor: %s\n",
- errstring(result));
+ sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "vacation: set cursor: %s\n",
+ sm_errstring(result));
return;
}
@@ -1075,7 +1076,7 @@ listdb()
SMDB_CURSOR_GET_NEXT)) == SMDBE_OK)
{
/* skip magic VIT entry */
- if ((int)db_key.size -1 == strlen(VIT) &&
+ if ((int)db_key.size - 1 == strlen(VIT) &&
strncmp((char *)db_key.data, VIT,
(int)db_key.size - 1) == 0)
continue;
@@ -1083,8 +1084,9 @@ listdb()
/* skip bogus values */
if (db_value.size != sizeof t)
{
- fprintf(stderr, "vacation: %.*s invalid time stamp\n",
- (int) db_key.size, (char *) db_key.data);
+ sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "vacation: %.*s invalid time stamp\n",
+ (int) db_key.size, (char *) db_key.data);
continue;
}
@@ -1093,8 +1095,9 @@ listdb()
if (db_key.size > 40)
db_key.size = 40;
- printf("%-40.*s %-10s",
- (int) db_key.size, (char *) db_key.data, ctime(&t));
+ sm_io_fprintf(smioout, SM_TIME_DEFAULT, "%-40.*s %-10s",
+ (int) db_key.size, (char *) db_key.data,
+ ctime(&t));
memset(&db_key, '\0', sizeof db_key);
memset(&db_value, '\0', sizeof db_value);
@@ -1102,8 +1105,9 @@ listdb()
if (result != SMDBE_OK && result != SMDBE_LAST_ENTRY)
{
- fprintf(stderr, "vacation: get value at cursor: %s\n",
- errstring(result));
+ sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "vacation: get value at cursor: %s\n",
+ sm_errstring(result));
if (cursor != NULL)
{
(void) cursor->smdbc_close(cursor);
@@ -1114,9 +1118,7 @@ listdb()
(void) cursor->smdbc_close(cursor);
cursor = NULL;
}
-#endif /* _FFR_LISTDB */
-#if _FFR_DEBUG
/*
** DEBUGLOG -- write message to standard error
**
@@ -1132,7 +1134,7 @@ listdb()
*/
/*VARARGS2*/
-static void
+static SYSLOG_RET_T
#ifdef __STDC__
debuglog(int i, const char *fmt, ...)
#else /* __STDC__ */
@@ -1143,67 +1145,10 @@ debuglog(i, fmt, va_alist)
#endif /* __STDC__ */
{
- VA_LOCAL_DECL
-
- VA_START(fmt);
- vfprintf(stderr, fmt, ap);
- VA_END;
-}
-#endif /* _FFR_DEBUG */
-
-/*VARARGS1*/
-void
-#ifdef __STDC__
-message(const char *msg, ...)
-#else /* __STDC__ */
-message(msg, va_alist)
- const char *msg;
- va_dcl
-#endif /* __STDC__ */
-{
- const char *m;
- VA_LOCAL_DECL
-
- m = msg;
- if (isascii(m[0]) && isdigit(m[0]) &&
- isascii(m[1]) && isdigit(m[1]) &&
- isascii(m[2]) && isdigit(m[2]) && m[3] == ' ')
- m += 4;
- VA_START(msg);
- (void) vfprintf(stderr, m, ap);
- VA_END;
- (void) fprintf(stderr, "\n");
-}
-
-/*VARARGS1*/
-void
-#ifdef __STDC__
-syserr(const char *msg, ...)
-#else /* __STDC__ */
-syserr(msg, va_alist)
- const char *msg;
- va_dcl
-#endif /* __STDC__ */
-{
- const char *m;
- VA_LOCAL_DECL
-
- m = msg;
- if (isascii(m[0]) && isdigit(m[0]) &&
- isascii(m[1]) && isdigit(m[1]) &&
- isascii(m[2]) && isdigit(m[2]) && m[3] == ' ')
- m += 4;
- VA_START(msg);
- (void) vfprintf(stderr, m, ap);
- VA_END;
- (void) fprintf(stderr, "\n");
-}
+ SM_VA_LOCAL_DECL
-void
-dumpfd(fd, printclosed, logit)
- int fd;
- bool printclosed;
- bool logit;
-{
- return;
+ SM_VA_START(ap, fmt);
+ sm_io_vfprintf(smioerr, SM_TIME_DEFAULT, fmt, ap);
+ SM_VA_END(ap);
+ SYSLOG_RET;
}
OpenPOWER on IntegriCloud