added Precedence header for vacation program
[unix-history] / usr / src / libexec / bugfiler / bugfiler.c
CommitLineData
7172eb74 1/*
771d5f21 2 * Copyright (c) 1983, 1986 Regents of the University of California.
7172eb74
DF
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 */
6
7#ifndef lint
8char copyright[] =
771d5f21 9"@(#) Copyright (c) 1983, 1986 Regents of the University of California.\n\
7172eb74
DF
10 All rights reserved.\n";
11#endif not lint
12
524aa063 13#ifndef lint
4882baf0 14static char sccsid[] = "@(#)bugfiler.c 5.9 (Berkeley) 87/04/23";
7172eb74 15#endif not lint
524aa063 16
b7520dd0 17/*
771d5f21
KB
18 * Bug report processing program, designed to be invoked
19 * through aliases(5).
b7520dd0 20 */
771d5f21
KB
21#include <bug.h>
22#include <sys/time.h>
d8336336 23#include <sys/file.h>
ae422d11 24#include <pwd.h>
d8336336 25#include <stdio.h>
ae422d11 26
771d5f21
KB
27char bfr[MAXBSIZE], /* general I/O buffer */
28 tmpname[sizeof(TMP_BUG) + 5]; /* temp bug file */
b7520dd0 29
d8336336
KB
30main(argc, argv)
31 int argc;
32 char **argv;
b7520dd0 33{
d8336336 34 extern char *optarg; /* getopt arguments */
771d5f21
KB
35 register struct passwd *pwd; /* bugs password entry */
36 register int ch; /* getopts char */
d8336336
KB
37 int do_ack, /* acknowledge bug report */
38 do_redist; /* redistribut BR */
a5217cb0 39 char *argversion, /* folder name provided */
d8336336 40 *strcpy();
771d5f21
KB
41 struct passwd *getpwnam();
42
d8336336 43 do_ack = do_redist = YES;
a5217cb0
KB
44 argversion = NULL;
45 while ((ch = getopt(argc, argv, "av:r")) != EOF)
771d5f21 46 switch((char)ch) {
d8336336
KB
47 case 'a':
48 do_ack = NO;
49 break;
a5217cb0
KB
50 case 'v':
51 argversion = optarg;
d8336336
KB
52 break;
53 case 'r':
54 do_redist = NO;
55 break;
56 case '?':
57 default:
a5217cb0 58 error("usage: bugfiler [-ar] [-v version]", CHN);
b7520dd0 59 }
80765673 60
771d5f21 61 if (!(pwd = getpwnam(BUGS_ID)))
d8336336 62 error("can't find bugs login.", BUGS_ID);
80765673 63
d8336336
KB
64 if (chdir(pwd->pw_dir)) /* change to bugs home directory */
65 error("can't chdir to %s.", pwd->pw_dir);
80765673 66
d8336336
KB
67 if (setreuid(0, pwd->pw_uid))
68 error("can't set id to %s.", BUGS_ID);
80765673 69
4882baf0 70 (void)umask(02); /* everything is 664 */
d8336336
KB
71 seterr(); /* redirect to log file */
72 logit(); /* log report arrival */
73 make_copy(); /* save copy in case */
74 gethead(do_redist);
80765673 75
a5217cb0
KB
76 if (argversion) /* specific folder requested */
77 (void)strcpy(dir, argversion);
80765673 78
771d5f21 79 process();
80765673 80
d8336336
KB
81 if (setuid(0, 0))
82 error("can't set id to root.", CHN);
771d5f21
KB
83 if (do_ack)
84 reply();
85 if (do_redist)
86 redist();
d8336336 87 (void)unlink(tmpname);
771d5f21 88 exit(OK);
b7520dd0
RC
89}
90
d93ebe7f 91/*
771d5f21 92 * make_copy --
d8336336 93 * make a copy of bug report in error folder
d93ebe7f 94 */
771d5f21
KB
95static
96make_copy()
d93ebe7f 97{
771d5f21
KB
98 register int cnt, /* read return value */
99 tfd; /* temp file descriptor */
d8336336
KB
100 char *strcpy();
101
102 (void)strcpy(tmpname, TMP_BUG);
103 if (tfd = mkstemp(tmpname)) {
104 while ((cnt = read(fileno(stdin), bfr, sizeof(bfr))) != ERR && cnt)
105 write(tfd, bfr, cnt);
106 (void)close(tfd);
107 return;
108 }
109 error("can't make copy using %s.\n", tmpname);
b7520dd0
RC
110}
111
112/*
771d5f21
KB
113 * logit --
114 * log this run of the bugfiler
b7520dd0 115 */
771d5f21
KB
116static
117logit()
80765673 118{
771d5f21 119 struct timeval tp;
771d5f21 120 char *ctime();
80765673 121
d8336336
KB
122 if (gettimeofday(&tp, (struct timezone *)NULL))
123 error("can't get time of day.", CHN);
124 fprintf(stderr, "\n>>> BUGFILER <<<\n\t%s", ctime(&tp.tv_sec));
b7520dd0 125}