Annotation of 42BSD/usr.bin/uucp/uuclean.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)uuclean.c  5.2 (Berkeley) 7/2/83";
        !             3: #endif
        !             4: 
        !             5: #include "uucp.h"
        !             6: #include <signal.h>
        !             7: #include <pwd.h>
        !             8: #include <sys/types.h>
        !             9: #include <sys/stat.h>
        !            10: #ifdef NDIR
        !            11: #include "ndir.h"
        !            12: #else
        !            13: #include <sys/dir.h>
        !            14: #endif
        !            15: 
        !            16: extern time_t time();
        !            17: 
        !            18: 
        !            19: /*******
        !            20:  *
        !            21:  *     uuclean  -  this program will search through the spool
        !            22:  *     directory (Spool) and delete all files with a requested
        !            23:  *     prefix which are older than (nomtime) seconds.
        !            24:  *     If the -m option is set, the program will try to
        !            25:  *     send mail to the usid of the file.
        !            26:  *
        !            27:  *     options:
        !            28:  *             -m  -  send mail for deleted file
        !            29:  *             -d  -  directory to clean
        !            30:  *             -n  -  time to age files before delete (in hours)
        !            31:  *             -p  -  prefix for search
        !            32:  *             -x  -  turn on debug outputs
        !            33:  *     exit status:
        !            34:  *             0  -  normal return
        !            35:  *             1  -  can not read directory
        !            36:  */
        !            37: 
        !            38: #define DPREFIX "U"
        !            39: #define NOMTIME 72     /* hours to age files before deletion */
        !            40: 
        !            41: main(argc, argv)
        !            42: char *argv[];
        !            43: {
        !            44:        DIR *dirp;
        !            45:        char file[NAMESIZE];
        !            46:        time_t nomtime, ptime;
        !            47:        struct stat stbuf;
        !            48:        int mflg=0;
        !            49:        int orig_uid = getuid();
        !            50: 
        !            51:        strcpy(Progname, "uuclean");
        !            52:        uucpname(Myname);
        !            53:        nomtime = NOMTIME * (time_t)3600;
        !            54: 
        !            55:        while (argc>1 && argv[1][0] == '-') {
        !            56:                switch (argv[1][1]) {
        !            57:                case 'd':
        !            58:                        Spool = &argv[1][2];
        !            59:                        break;
        !            60:                case 'm':
        !            61:                        mflg = 1;
        !            62:                        break;
        !            63:                case 'n':
        !            64:                        nomtime = atoi(&argv[1][2]) * (time_t)3600;
        !            65:                        break;
        !            66:                case 'p':
        !            67:                        if (&argv[1][2] != '\0')
        !            68:                                stpre(&argv[1][2]);
        !            69:                        break;
        !            70:                case 'x':
        !            71:                        chkdebug(orig_uid);
        !            72:                        Debug = atoi(&argv[1][2]);
        !            73:                        if (Debug <= 0)
        !            74:                                Debug = 1;
        !            75:                        break;
        !            76:                default:
        !            77:                        printf("unknown flag %s\n", argv[1]); break;
        !            78:                }
        !            79:                --argc;  argv++;
        !            80:        }
        !            81: 
        !            82:        DEBUG(4, "DEBUG# %s\n", "START");
        !            83:        chdir(Spool);   /* NO subdirs in uuclean!  rti!trt */
        !            84: 
        !            85:        if ((dirp = opendir(Spool)) == NULL) {
        !            86:                printf("%s directory unreadable\n", Spool);
        !            87:                exit(1);
        !            88:        }
        !            89: 
        !            90:        time(&ptime);
        !            91:        while (gnamef(dirp, file)) {
        !            92:                if (!chkpre(file))
        !            93:                        continue;
        !            94: 
        !            95:                if (stat(file, &stbuf) == -1) { /* NO subdirs in uuclean! */
        !            96:                DEBUG(4, "stat on %s failed\n", file);
        !            97:                        continue;
        !            98:                }
        !            99: 
        !           100: 
        !           101:                if ((stbuf.st_mode & S_IFMT) == S_IFDIR)
        !           102:                        continue;
        !           103: /*
        !           104:  * teklabs.1518, Terry Laskodi, +2s/ctime/mtime/
        !           105:  * so mv-ing files about does not defeat uuclean
        !           106:  */
        !           107:                if ((ptime - stbuf.st_mtime) < nomtime)
        !           108:                        continue;
        !           109:                if (file[0] == CMDPRE)
        !           110:                        notfyuser(file);
        !           111:                DEBUG(4, "unlink file %s\n", file);
        !           112:                unlink(file);
        !           113:                if (mflg) sdmail(file, stbuf.st_uid);
        !           114:        }
        !           115: 
        !           116:        closedir(dirp);
        !           117:        exit(0);
        !           118: }
        !           119: 
        !           120: 
        !           121: #define MAXPRE 10
        !           122: char Pre[MAXPRE][NAMESIZE];
        !           123: int Npre = 0;
        !           124: /***
        !           125:  *     chkpre(file)    check for prefix
        !           126:  *     char *file;
        !           127:  *
        !           128:  *     return codes:
        !           129:  *             0  -  not prefix
        !           130:  *             1  -  is prefix
        !           131:  */
        !           132: 
        !           133: chkpre(file)
        !           134: char *file;
        !           135: {
        !           136:        int i;
        !           137: 
        !           138:        for (i = 0; i < Npre; i++) {
        !           139:                if (prefix(Pre[i], file))
        !           140:                        return(1);
        !           141:                }
        !           142:        return(0);
        !           143: }
        !           144: 
        !           145: /***
        !           146:  *     stpre(p)        store prefix
        !           147:  *     char *p;
        !           148:  *
        !           149:  *     return codes:  none
        !           150:  */
        !           151: 
        !           152: stpre(p)
        !           153: char *p;
        !           154: {
        !           155:        if (Npre < MAXPRE - 2)
        !           156:                strcpy(Pre[Npre++], p);
        !           157:        return;
        !           158: }
        !           159: 
        !           160: /***
        !           161:  *     notfyuser(file) - notfiy requestor of deleted requres
        !           162:  *
        !           163:  *     return code - none
        !           164:  */
        !           165: 
        !           166: notfyuser(file)
        !           167: char *file;
        !           168: {
        !           169:        FILE *fp;
        !           170:        int numrq;
        !           171:        char frqst[100], lrqst[100];
        !           172:        char msg[BUFSIZ];
        !           173:        char *args[10];
        !           174: 
        !           175:        if ((fp = fopen(file, "r")) == NULL)
        !           176:                return;
        !           177:        if (fgets(frqst, 100, fp) == NULL) {
        !           178:                fclose(fp);
        !           179:                return;
        !           180:        }
        !           181:        numrq = 1;
        !           182:        while (fgets(lrqst, 100, fp))
        !           183:                numrq++;
        !           184:        fclose(fp);
        !           185:        sprintf(msg,
        !           186:          "File %s delete. \nCould not contact remote. \n%d requests deleted.\n", file, numrq);
        !           187:        if (numrq == 1) {
        !           188:                strcat(msg, "REQUEST: ");
        !           189:                strcat(msg, frqst);
        !           190:        }
        !           191:        else {
        !           192:                strcat(msg, "FIRST REQUEST: ");
        !           193:                strcat(msg, frqst);
        !           194:                strcat(msg, "\nLAST REQUEST: ");
        !           195:                strcat(msg, lrqst);
        !           196:        }
        !           197:        getargs(frqst, args);
        !           198:        mailst(args[3], msg, "");
        !           199:        return;
        !           200: }
        !           201: 
        !           202: 
        !           203: /***
        !           204:  *     sdmail(file, uid)
        !           205:  *
        !           206:  *     sdmail  -  this routine will determine the owner
        !           207:  *     of the file (file), create a message string and
        !           208:  *     call "mailst" to send the cleanup message.
        !           209:  *     This is only implemented for local system
        !           210:  *     mail at this time.
        !           211:  */
        !           212: 
        !           213: sdmail(file, uid)
        !           214: char *file;
        !           215: {
        !           216:        static struct passwd *pwd;
        !           217:        struct passwd *getpwuid();
        !           218:        char mstr[40];
        !           219: 
        !           220:        sprintf(mstr, "uuclean deleted file %s\n", file);
        !           221:        if (pwd->pw_uid == uid) {
        !           222:                mailst(pwd->pw_name, mstr, "");
        !           223:        return(0);
        !           224:        }
        !           225: 
        !           226:        setpwent();
        !           227:        if ((pwd = getpwuid(uid)) != NULL) {
        !           228:                mailst(pwd->pw_name, mstr, "");
        !           229:        }
        !           230:        return(0);
        !           231: }
        !           232: 
        !           233: cleanup(code)
        !           234: int code;
        !           235: {
        !           236:        exit(code);
        !           237: }

unix.superglobalmegacorp.com

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