|
|
1.1 root 1: /*
2: *
3: *$Header: audit.c,v 1.1 85/07/08 10:24:31 root Exp $
4: *
5: *$Log: audit.c,v $
6: * Revision 1.1 85/07/08 10:24:31 root
7: * Initial revision
8: *
9: * Revision 1.2 84/03/28 10:01:09 brian
10: * Added more detailed error messages dealing with auditing of directories
11: *
12: *
13: * Revision 1.1 84/01/26 09:48:52 brian
14: * Initial revision
15: *
16: */
17:
18: static char rcsid[] = "$Header: audit.c,v 1.1 85/07/08 10:24:31 root Exp $";
19:
20: #include <sys/param.h>
21: #include <sys/dir.h>
22: #include <sys/stat.h>
23: #include <stdio.h>
24: #include <sys/audit.h>
25: #include <errno.h>
26:
27: main(argc,argv)
28: register int argc;
29: register char **argv;
30: {
31: register int i,n;
32: register char c,*cp;
33: int aflg = QUERY;
34: int status = 0;
35: struct stat sbuf;
36: extern int optind,errno; /* globals returned from sys routines */
37:
38: if(argc < 2)
39: {
40:
41: printf("usage: audit [-u] [-s] [-m] file...\n");
42: exit(8);
43: }
44: while((c = getopt(argc,argv,"mus")) != EOF)
45: {
46: switch (c)
47: {
48: case 'u': /* set file(s) to UNSECURE */
49: if(aflg != QUERY)
50: {
51: printf("usage: audit [-u] [-s] [-m] file...\n");
52: exit(8);
53: }
54: aflg = UNSECURE;
55: break;
56:
57: case 's': /* set file(s) to SECURE */
58: if(aflg != QUERY)
59: {
60: printf("usage: audit [-u] [-s] [-m] file...\n");
61: exit(8);
62: }
63: aflg = SECURE;
64: break;
65:
66: case 'm': /* set file(s) with umask */
67: if(aflg != QUERY)
68: {
69: printf("usage: audit [-u] [-s] [-m] file...\n");
70: exit(8);
71: }
72: aflg = MASK;
73: break;
74:
75: default:
76: printf("usage: audit [-u] [-s] [-m] file...\n");
77: exit(8);
78: }
79: }
80:
81: if(optind == argc) /* assure a file name is specified */
82: {
83: printf("usage: audit [-u] [-s] [-m] file...\n");
84: exit(8);
85: }
86:
87: for (i=optind; i<argc; i++) /* process all specified files */
88: {
89: cp = argv[i];
90: if(stat(cp,&sbuf) == -1)
91: {
92: fprintf(stderr,"%s: cannot stat %s\n",argv[0],cp);
93: continue;
94: }
95: else
96: {
97: if((sbuf.st_mode & S_IFMT) == S_IFDIR)
98: {
99: fprintf(stderr,"%s: Audit trail security can not be applied to directories (%s)\n",argv[0],cp);
100: continue;
101: }
102: }
103: if ((n = audit(cp,aflg)) < 0)
104: {
105: if(errno == EACCES)
106: fprintf(stderr,"audit: permission denied - %s\n",cp);
107: else
108: perror("audit");
109: status++;
110: continue;
111: }
112: else
113: {
114: if(aflg == QUERY) /* display current status */
115: {
116: switch (n)
117: {
118: case SECURE:
119: printf("%s has logging enabled\n",cp);
120: break;
121:
122: case UNSECURE:
123: printf("%s has logging disabled\n",cp);
124: break;
125: }
126: }
127: }
128: }
129: exit(status);
130: }
131: /* @(#)getopt.c 1.5 */
132: /* 3.0 SID # 1.2 */
133: /*LINTLIBRARY*/
134: #define NULL 0
135: #define EOF (-1)
136: #define ERR(s, c) if(opterr){\
137: extern int strlen(), write();\
138: char errbuf[2];\
139: errbuf[0] = c; errbuf[1] = '\n';\
140: (void) write(2, argv[0], (unsigned)strlen(argv[0]));\
141: (void) write(2, s, (unsigned)strlen(s));\
142: (void) write(2, errbuf, 2);}
143:
144: extern int strcmp();
145: extern char *strchr();
146:
147: int opterr = 1;
148: int optind = 1;
149: int optopt;
150: char *optarg;
151:
152: int
153: getopt(argc, argv, opts)
154: int argc;
155: char **argv, *opts;
156: {
157: static int sp = 1;
158: register int c;
159: register char *cp;
160:
161: if(sp == 1)
162: if(optind >= argc ||
163: argv[optind][0] != '-' || argv[optind][1] == '\0')
164: return(EOF);
165: else if(strcmp(argv[optind], "--") == NULL) {
166: printf("NULL \n");
167: optind++;
168: return(EOF);
169: }
170: optopt = c = argv[optind][sp];
171: if(c == ':' || (cp=strchr(opts, c)) == NULL) {
172: ERR(": illegal option -- ", c);
173: if(argv[optind][++sp] == '\0') {
174: optind++;
175: sp = 1;
176: }
177: return('?');
178: }
179: if(*++cp == ':') {
180: if(argv[optind][sp+1] != '\0')
181: optarg = &argv[optind++][sp+1];
182: else if(++optind >= argc) {
183: ERR(": option requires an argument -- ", c);
184: sp = 1;
185: return('?');
186: } else
187: optarg = argv[optind++];
188: sp = 1;
189: } else {
190: if(argv[optind][++sp] == '\0') {
191: sp = 1;
192: optind++;
193: }
194: optarg = NULL;
195: }
196: return(c);
197: }
198: /* @(#)strchr.c 1.2 */
199: /* 3.0 SID # 1.2 */
200: /*LINTLIBRARY*/
201: /*
202: * Return the ptr in sp at which the character c appears;
203: * NULL if not found
204: */
205:
206: #define NULL 0
207:
208: char *
209: strchr(sp, c)
210: register char *sp, c;
211: {
212: do {
213: if(*sp == c)
214: return(sp);
215: } while(*sp++);
216: return(NULL);
217: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.