|
|
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.