Annotation of 43BSDTahoe/ucb/sendbug/bugfiler.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1983, 1986, 1987 Regents of the University of California.
        !             3:  * All rights reserved.
        !             4:  *
        !             5:  * Redistribution and use in source and binary forms are permitted
        !             6:  * provided that the above copyright notice and this paragraph are
        !             7:  * duplicated in all such forms and that any documentation,
        !             8:  * advertising materials, and other materials related to such
        !             9:  * distribution and use acknowledge that the software was developed
        !            10:  * by the University of California, Berkeley.  The name of the
        !            11:  * University may not be used to endorse or promote products derived
        !            12:  * from this software without specific prior written permission.
        !            13:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
        !            14:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
        !            15:  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        !            16:  */
        !            17: 
        !            18: #ifndef lint
        !            19: char copyright[] =
        !            20: "@(#) Copyright (c) 1983, 1986, 1987 Regents of the University of California.\n\
        !            21:  All rights reserved.\n";
        !            22: #endif /* not lint */
        !            23: 
        !            24: #ifndef lint
        !            25: static char sccsid[] = "@(#)bugfiler.c 5.14 (Berkeley) 6/29/88";
        !            26: #endif /* not lint */
        !            27: 
        !            28: /*
        !            29:  * Bug report processing program, designed to be invoked
        !            30:  * through aliases(5).
        !            31:  */
        !            32: #include <bug.h>
        !            33: #include <sys/time.h>
        !            34: #include <sys/file.h>
        !            35: #include <pwd.h>
        !            36: #include <stdio.h>
        !            37: 
        !            38: char   bfr[MAXBSIZE],                  /* general I/O buffer */
        !            39:        tmpname[sizeof(TMP_BUG) + 5];   /* temp bug file */
        !            40: 
        !            41: main(argc, argv)
        !            42:        int     argc;
        !            43:        char    **argv;
        !            44: {
        !            45:        extern char     *optarg;        /* getopt arguments */
        !            46:        register struct passwd  *pwd;   /* bugs password entry */
        !            47:        register int    ch;             /* getopts char */
        !            48:        int     do_ack,                 /* acknowledge bug report */
        !            49:                do_redist;              /* redistribut BR */
        !            50:        char    *argversion,            /* folder name provided */
        !            51:                *strcpy();
        !            52:        struct passwd   *getpwnam();
        !            53: 
        !            54:        do_ack = do_redist = YES;
        !            55:        argversion = NULL;
        !            56:        while ((ch = getopt(argc, argv, "av:r")) != EOF)
        !            57:                switch((char)ch) {
        !            58:                case 'a':
        !            59:                        do_ack = NO;
        !            60:                        break;
        !            61:                case 'v':
        !            62:                        argversion = optarg;
        !            63:                        break;
        !            64:                case 'r':
        !            65:                        do_redist = NO;
        !            66:                        break;
        !            67:                case '?':
        !            68:                default:
        !            69:                        fputs("usage: bugfiler [-ar] [-v version]\n", stderr);
        !            70:                        error("usage: bugfiler [-ar] [-v version]", CHN);
        !            71:                }
        !            72: 
        !            73:        if (!(pwd = getpwnam(BUGS_ID)))
        !            74:                error("can't find bugs login.", BUGS_ID);
        !            75: 
        !            76:        if (chdir(pwd->pw_dir))         /* change to bugs home directory */
        !            77:                error("can't chdir to %s.", pwd->pw_dir);
        !            78: 
        !            79:        if (setreuid(0, pwd->pw_uid))
        !            80:                error("can't set id to %s.", BUGS_ID);
        !            81: 
        !            82:        (void)umask(02);                /* everything is 664 */
        !            83:        seterr();                       /* redirect to log file */
        !            84:        logit();                        /* log report arrival */
        !            85:        make_copy();                    /* save copy in case */
        !            86:        gethead(do_redist);
        !            87: 
        !            88:        if (argversion)                 /* specific folder requested */
        !            89:                (void)strcpy(dir, argversion);
        !            90: 
        !            91:        process();
        !            92: 
        !            93:        if (setuid(0, 0))
        !            94:                error("can't set id to root.", CHN);
        !            95:        if (do_ack)
        !            96:                reply();
        !            97:        if (do_redist)
        !            98:                redist();
        !            99:        (void)unlink(tmpname);
        !           100:        exit(OK);
        !           101: }
        !           102: 
        !           103: /*
        !           104:  * make_copy --
        !           105:  *     make a copy of bug report in error folder
        !           106:  */
        !           107: static
        !           108: make_copy()
        !           109: {
        !           110:        register int    cnt,                    /* read return value */
        !           111:                        tfd;                    /* temp file descriptor */
        !           112:        char    *strcpy();
        !           113: 
        !           114:        if (access(TMP_DIR, F_OK)) {
        !           115:                (void)mkdir(TMP_DIR);
        !           116:                (void)chmod(TMP_DIR, 0775);
        !           117:        }
        !           118:        (void)strcpy(tmpname, TMP_BUG);
        !           119:        if (tfd = mkstemp(tmpname)) {
        !           120:                while ((cnt = read(fileno(stdin), bfr, sizeof(bfr))) != ERR && cnt)
        !           121:                        write(tfd, bfr, cnt);
        !           122:                (void)close(tfd);
        !           123:                return;
        !           124:        }
        !           125:        error("can't make copy using %s.", tmpname);
        !           126: }
        !           127: 
        !           128: /*
        !           129:  * logit --
        !           130:  *     log this run of the bugfiler
        !           131:  */
        !           132: static
        !           133: logit()
        !           134: {
        !           135:        struct timeval  tp;
        !           136:        char    *C1, *C2,
        !           137:                *ctime();
        !           138: 
        !           139:        if (gettimeofday(&tp, (struct timezone *)NULL))
        !           140:                error("can't get time of day.", CHN);
        !           141:        for (C1 = C2 = ctime(&tp.tv_sec); *C1 && *C1 != '\n'; ++C1);
        !           142:        *C1 = EOS;
        !           143:        fputs(C2, stderr);
        !           144: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.