* Copyright (c) 1983, 1986 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
"@(#) Copyright (c) 1983, 1986 Regents of the University of California.\n\
static char sccsid
[] = "@(#)bugfiler.c 5.10 (Berkeley) 87/07/20";
* Bug report processing program, designed to be invoked
char bfr
[MAXBSIZE
], /* general I/O buffer */
tmpname
[sizeof(TMP_BUG
) + 5]; /* temp bug file */
extern char *optarg
; /* getopt arguments */
register struct passwd
*pwd
; /* bugs password entry */
register int ch
; /* getopts char */
int do_ack
, /* acknowledge bug report */
do_redist
; /* redistribut BR */
char *argversion
, /* folder name provided */
struct passwd
*getpwnam();
do_ack
= do_redist
= YES
;
while ((ch
= getopt(argc
, argv
, "av:r")) != EOF
)
error("usage: bugfiler [-ar] [-v version]", CHN
);
if (!(pwd
= getpwnam(BUGS_ID
)))
error("can't find bugs login.", BUGS_ID
);
if (chdir(pwd
->pw_dir
)) /* change to bugs home directory */
error("can't chdir to %s.", pwd
->pw_dir
);
if (setreuid(0, pwd
->pw_uid
))
error("can't set id to %s.", BUGS_ID
);
(void)umask(02); /* everything is 664 */
seterr(); /* redirect to log file */
logit(); /* log report arrival */
make_copy(); /* save copy in case */
if (argversion
) /* specific folder requested */
(void)strcpy(dir
, argversion
);
error("can't set id to root.", CHN
);
* make a copy of bug report in error folder
register int cnt
, /* read return value */
tfd
; /* temp file descriptor */
if (access(TMP_DIR
, F_OK
)) {
(void)chmod(TMP_DIR
, 0775);
(void)strcpy(tmpname
, TMP_BUG
);
if (tfd
= mkstemp(tmpname
)) {
while ((cnt
= read(fileno(stdin
), bfr
, sizeof(bfr
))) != ERR
&& cnt
)
error("can't make copy using %s.\n", tmpname
);
* log this run of the bugfiler
if (gettimeofday(&tp
, (struct timezone
*)NULL
))
error("can't get time of day.", CHN
);
fprintf(stderr
, "\n>>> BUGFILER <<<\n\t%s", ctime(&tp
.tv_sec
));