|
|
1.1 root 1: static char ID[] = "@(#) audit.c: 1.1 3/16/82";
2: #include <stdio.h>
3: #include "sdp.h"
4: #include "define3.h"
5:
6: #ifdef SHORT
7: #define AU01 "AU01 "
8: #define AU02 "AU02 "
9: #define AU03 "AU03 "
10: #define AU04 "AU04 "
11: #define AUAU "AUAU "
12: #else
13: #define AU01 "%s","AU01 -- audit failure in global hash\n"
14: #define AU02 "%s","AU02 -- audit failure in space hash\n"
15: #define AU03 "%s","AU03 -- audit failure in environment hash\n"
16: #define AU04 "%s","AU04 -- audit failure in manager hash\n"
17: #define AUAU "%s","AUAU -- audit failed in sdp_audit\n"
18: #endif
19:
20: #define PROLOG if( (aud_flag == AUDITON) && (aud_check() == ERROR) )\
21: ERR_RET(AUAU,ERROR)
22: #define EPILOG if(aud_flag == AUDITON)\
23: aud_set() ;\
24: if(hist_fp != NULL)\
25: fprintf(hist_fp,"AU\t%d\n",mode) ;
26: #define RADIX 109
27:
28: extern int aud_flag ;
29: extern long compatible ;
30: extern long gl1_hash ;
31: extern long gl2_hash ;
32: extern struct ENVIRON *first_environ ;
33: extern struct SPACE *first_space ;
34: extern int Gnumbfile ;
35: extern int Gln_file[] ;
36: extern int Gnumbstax ;
37: extern int Gsz_stax[] ;
38: extern FILE *hist_fp ;
39: extern ITEMID *known_idptr ;
40: extern struct LIBFILE lib_file ;
41: extern struct LIBMEM lib_mem ;
42:
43: int /* SUCCESS or ERROR */
44: sdp_audit(mode)
45: int mode ;
46: {
47: #ifndef SWEET
48:
49: PROLOG
50: switch(mode)
51: {
52: case AUDITNOW:
53: break ;
54:
55: case AUDITOFF:
56: aud_flag = AUDITOFF ;
57: aud_reset() ;
58: break ;
59:
60: case AUDITON:
61: aud_flag = AUDITON ;
62: break ;
63: }
64: EPILOG
65: return(SUCCESS) ;
66: #endif
67: }
68: aud_set()
69: {
70: #ifndef SWEET
71: struct SPACE *i ;
72: struct ENVIRON *j ;
73: int k ;
74: long hash1_gl(), hash2_gl(), hash1_sp(), hash2_sp(), hash_en(), hash_mn() ;
75:
76: gl1_hash = hash1_gl() ;
77: gl2_hash = hash2_gl() ;
78:
79: for(i=first_space; i!=NULL; i=i->next_space)
80: {
81: i->sp1_hash = hash1_sp(i) ;
82: i->sp2_hash = hash2_sp(i) ;
83: }
84:
85: for(j=first_environ; j!=NULL; j=j->next_environ)
86: {
87: j->en_hash = hash_en(j) ;
88: for(k=0; k<=j->num_frames; k++)
89: (j->manp[k]).mn_hash = hash_mn(&(j->manp[k])) ;
90: }
91: #endif
92: }
93: int /* SUCCESS or ERROR */
94: aud_check()
95: {
96: #ifndef SWEET
97: struct SPACE *i ;
98: struct ENVIRON *j ;
99: int k ;
100: long hash1_gl(), hash2_gl(), hash1_sp(), hash2_sp(), hash_en(), hash_mn() ;
101:
102: if( gl1_hash != hash1_gl()
103: || gl2_hash != hash2_gl() )
104: ERR_RET(AU01,ERROR)
105:
106: for(i=first_space; i!=NULL; i=i->next_space)
107: if( i->sp1_hash != hash1_sp(i)
108: || i->sp2_hash != hash2_sp(i) )
109: ERR_RET(AU02,ERROR)
110:
111: for(j=first_environ; j!=NULL; j=j->next_environ)
112: {
113: if( j->en_hash != hash_en(j) )
114: ERR_RET(AU03,ERROR)
115: for(k=0; k<=j->num_frames; k++)
116: if( (j->manp[k]).mn_hash != hash_mn(&(j->manp[k])) )
117: ERR_RET(AU04,ERROR)
118: }
119: return(SUCCESS) ;
120: #endif
121: }
122:
123: #ifndef SWEET
124: aud_reset()
125: {
126:
127: struct SPACE *i ;
128: struct ENVIRON *j ;
129: int k ;
130:
131: gl1_hash = HASHNULL ;
132: gl2_hash = HASHNULL ;
133:
134: for(i=first_space; i!=NULL; i=i->next_space)
135: {
136: i->sp1_hash = HASHNULL ;
137: i->sp2_hash = HASHNULL ;
138: }
139:
140: for(j=first_environ; j!=NULL; j=j->next_environ)
141: {
142: j->en_hash = HASHNULL ;
143: for(k=0; k<j->num_frames; k++)
144: (j->manp)[k].mn_hash = HASHNULL ;
145: }
146: }
147: long /* hash value */
148: hash1_gl()
149: {
150: register long value ;
151:
152: value = (long)first_environ ;
153: value *= RADIX ;
154: value += (long)first_space ;
155: value *= RADIX ;
156: value += compatible ;
157: value *= RADIX ;
158: value += (long)Gnumbfile ;
159: value *= RADIX ;
160: value += (long)Gnumbstax ;
161: value *= RADIX ;
162: value += (long)hist_fp ;
163: value *= RADIX ;
164: value += (long)aud_flag ;
165: value *= RADIX ;
166: value += (long)known_idptr ;
167: value *= RADIX ;
168: value += (long)lib_file.libbuildname ;
169: value *= RADIX ;
170: value += (long)lib_file.libclose ;
171: value *= RADIX ;
172: value += (long)lib_file.libcreate ;
173: value *= RADIX ;
174: value += (long)lib_file.libopen ;
175: value *= RADIX ;
176: value += (long)lib_file.libread ;
177: value *= RADIX ;
178: value += (long)lib_file.libseek ;
179: value *= RADIX ;
180: value += (long)lib_file.libunlink ;
181: value *= RADIX ;
182: value += (long)lib_file.libwrite ;
183: value *= RADIX ;
184: value += (long)lib_mem.liballoc ;
185: value *= RADIX ;
186: value += (long)lib_mem.libfree ;
187: return(value) ;
188: }
189:
190: long /* hash value */
191: hash2_gl()
192: {
193: register long value ;
194: register int i ;
195:
196: value = 0 ;
197: for(i=0; i<Gnumbfile; i++)
198: {
199: value *= RADIX ;
200: value += Gln_file[i] ;
201: }
202: for(i=0; i<Gnumbstax; i++)
203: {
204: value *= RADIX ;
205: value += Gsz_stax[i] ;
206: }
207: return(value) ;
208: }
209: long /* hash value */
210: hash_en(env)
211: struct ENVIRON *env ;
212: {
213: register long value ;
214:
215: value = (long)env->num_frames ;
216: value *= RADIX ;
217: value += (long)env->frame_size ;
218: value *= RADIX ;
219: value += (long)env->cnct_count ;
220: value *= RADIX ;
221: value += (long)env->manp ;
222: value *= RADIX ;
223: value += (long)env->empties ;
224: value *= RADIX ;
225: value += (long)env->next_environ ;
226: value *= RADIX ;
227: value += env->stats.uses ;
228: value *= RADIX ;
229: value += env->stats.faults ;
230: value *= RADIX ;
231: value += env->stats.writes ;
232: value *= RADIX ;
233: value += (long)env->stats.maxuse ;
234: value *= RADIX ;
235: value += (long)env->stats.curuse ;
236: return(value) ;
237: }
238: long /* hash value */
239: hash1_sp(sp)
240: struct SPACE *sp ;
241: {
242: register long value ;
243:
244: value = sp->version ;
245: value *= RADIX ;
246: value += (long)sp->page_size ;
247: value *= RADIX ;
248: value += sp->maxpage ;
249: value *= RADIX ;
250: value += sp->curpage ;
251: value *= RADIX ;
252: value += (long)sp->curleft ;
253: value *= RADIX ;
254: value += (long)sp->numbfile ;
255: value *= RADIX ;
256: value += (long)sp->fileinfo ;
257: value *= RADIX ;
258: value += (long)sp->numbstax ;
259: value *= RADIX ;
260: value += (long)sp->staxinfo ;
261: value *= RADIX ;
262: value += (long)sp->head_name ;
263: value *= RADIX ;
264: value += (long)sp->environ ;
265: value *= RADIX ;
266: value += (long)sp->next_space ;
267: return(value) ;
268: }
269: long /* hash value */
270: hash2_sp(sp)
271: struct SPACE *sp ;
272: {
273: register long value ;
274: register int i ;
275:
276: value = 0 ;
277: for(i=0; i<sp->numbfile; i++)
278: {
279: value *= RADIX ;
280: value += sp->fileinfo[i].leng ;
281: value *= RADIX ;
282: value += (long)sp->fileinfo[i].desc ;
283: }
284: for(i=0; i<sp->numbstax; i++)
285: {
286: value *= RADIX ;
287: value += sp->staxinfo[i].top ;
288: value *= RADIX ;
289: value += (long)sp->staxinfo[i].size ;
290: value *= RADIX ;
291: value += sp->staxinfo[i].depth ;
292: }
293: return(value) ;
294: }
295: long /* hash value */
296: hash_mn(man)
297: struct MANAGER *man ;
298: {
299: register long value ;
300:
301: value = (long)man->space ;
302: value *= RADIX ;
303: value += man->page_id ;
304: value *= RADIX ;
305: value += man->usecount ;
306: value *= RADIX ;
307: value += (long)man->ref_chng ;
308: value *= RADIX ;
309: value += (long)man->forward ;
310: value *= RADIX ;
311: value += (long)man->backward ;
312: value *= RADIX ;
313: value += (long)man->frame_pntr ;
314: return(value) ;
315: }
316: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.