|
|
1.1 root 1: #include <sys/types.h>
2: #include <sys/dir.h>
3: #include <sys/stat.h>
4: #include <stdio.h>
5:
6: char sccsid[] = "@(#)bsclean.c 1.3 REL";
7: char pathname[50] = "/usr/spool/bscbatch/";
8:
9: /* D.L.Buck and Associates, Inc. - October, 1982.
10: *
11: * COPYRIGHT NOTICE:
12: * Copyright c 1982 - An unpublished work by
13: * D.L.Buck and Associates, Inc.
14: *
15: * PROPRIETARY RIGHTS NOTICE:
16: * All rights reserved. This document and program contains
17: * proprietary information of D.L.Buck and Associates,Inc.
18: * of San Jose, California, U.S.A., embodying confidential
19: * information, ideas, and expressions, no part of which
20: * may be reproduced, or transmitted in any form or by any
21: * means, electronic, mechanical, or otherwise, without
22: * the written permission of D.L.Buck and Associates, Inc.
23: *
24: * NAME
25: * bsclean -- bsc spool directory cleaner
26: *
27: * SYNOPSIS
28: * bsclean [-t=hh] [hostname]
29: *
30: * DESCRIPTION
31: * bsclean removes all user files older than hh hours from the
32: * spool directory of hostname. hh default is 72. hostname
33: * default is defined by the system administrator.
34: *
35: * ALGORITHM
36: * 1. get host and unlink age (from default,or command line if specified)
37: * 2. construct directory pathname
38: * 3. change directory using pathname
39: * 4. open directory
40: * 5. while there's another directory entry to read, read it
41: * 6. if it's not special:
42: * get its statistics
43: * if it's younger than unlink age, continue
44: * otherwise, unlink it
45: * 7. close directory when all done
46: */
47: main(argc,argv)
48: int argc;
49: char *argv[];
50: {
51: int fd; /* file descriptor used by open */
52: int i; /* friendly, neighborhood index */
53: struct direct d; /* directory entry structure; contains file
54: name and inode number (index to where all the
55: data about a file is kept, except its name) */
56:
57: struct stat t; /* function returns a structure which contains
58: the inode data for the specified file */
59:
60: char *ctime(); /* function returns a string like:
61: Sat Aug 21 14:30:41 1982\n\0 */
62: char host[20]; /* contains the host name */
63: char filename[15]; /* filename holding area */
64: long age; /* age at which to unlink user spool files */
65: long time(); /* function returns current time */
66: long atol(); /* function converts ascii to long */
67:
68: age = time((long *)0)-259200L; /* default age is 72 hours */
69: strcpy(host,"default"); /* default host name */
70:
71: if (argc > 3) /* can have only 2 arguments besides progname */
72: {
73: fprintf(stderr,"usage: bsclean [-t=hh] [hostname]\n");
74: exit(1);
75: }
76: /* get options from command line */
77: for (i=1;i<argc;++i)
78: {
79: /* get age at which to unlink user spool files (if specified) */
80: if (strncmp(argv[i],"-t=",3) == 0)
81: {
82: if (argv[i][3] < '0' || argv[i][3] > '9') {
83: fprintf(stderr,
84: "bsclean: not a numeric value <%s>\n",
85: argv[i]);
86: exit(1);
87: }
88: age = (time((long *)0) - (3600L * atol(&argv[i][3])));
89: continue;
90: }
91:
92: /* hostname, if specified */
93: strcpy(host,argv[i]);
94: }
95:
96: strcat(pathname,host);
97: if (chdir(pathname) == -1)
98: {
99: fprintf(stderr,"bsclean: host <%s> has no spool directory\n",host);
100: exit(1);
101: }
102:
103: fd = open(".",0); /* open current directory (".") */
104:
105: /* the following reads through the directory,checks that the file is
106: active (d.d_inode != 0) and that it isn't a directory or a special file
107: (first char of file name != '.'). It gets the file's vital statistics using the
108: stat function, checks the file's age (t.st_ctime), and unlinks it if it's
109: older than either the default age (72 hours) or the user-specified age. */
110:
111: while (read(fd,&d,sizeof d) == sizeof d)
112: {
113: if (d.d_ino > 0 && d.d_name[0] != '.' && d.d_name[0] == 'P')
114: {
115: stat(d.d_name,&t);
116: if (t.st_ctime > age)
117: continue;
118: if (unlink (d.d_name) == -1)
119: {
120: strncpy(filename,d.d_name,14);
121: filename[14] = '\0';
122:
123: fprintf(stderr,
124: "bsclean: can't remove <%s> from <%s> spool directory\n",
125: filename,host);
126: exit(1);
127: }
128: }
129: }
130: close(fd);
131: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.