COMPILATION LISTING OF SEGMENT access_audit_ Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 1014.5 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 6* * * 7* *********************************************************** */ 8 9 10 11 /****^ HISTORY COMMENTS: 12* 1) change(86-05-13,GJohnson), approve(86-05-13,MCR7387), 13* audit(86-05-13,Martinson), install(86-05-14,MR12.0-1056): 14* Correct error message documentation. 15* 2) change(88-01-13,Fawcett), approve(88-05-02,MCR7881), 16* audit(88-06-21,Farley), install(88-08-02,MR12.2-1074): 17* Changed to support always auditing of an fs_object whose entry.audit_flag 18* has been set. This DOES NOT INHIBIT any other auditing cases if the flag 19* is turned off. 20* 3) change(88-08-08,Farley), approve(88-08-08,PBF7881), 21* audit(88-08-09,Martinson), install(88-08-09,MR12.2-1084): 22* Changed always audit to only look at branches (no links) and to only 23* audit ring-1 objects for segment level accesses.. 24* END HISTORY COMMENTS */ 25 26 27 /* format: style1,insnl,linecom,indcomtxt,^inddcls,^indnoniterdo */ 28 29 access_audit_: 30 procedure; 31 32 /* format: off */ 33 /****** 34* Revisions: 35* 1985-04-08 EJ Sharpe - fix message text a bit, fix some comments 36* 1985-04-01 KP Loepere - removed check_entry_ptr in favor of new alm version. 37* 1985-03-04 EJ Sharpe - remove national chars, select proper sorting class for messages 38* 1985-01-22 EJ Sharpe - changes per code audit, reformat 39* 1985-01-13 EJ Sharpe - added message documenation and fixed some msgs 40* 1985-01-11 EJ Sharpe - optimization to unlock directory a bit earlier 41* 1985-01-07 EJ Sharpe - stack frame optimizations, fix audit check computation 42* some routines removed to form access_audit_log_fault_ and access_audit_util_ 43* cleaned up syserr messages, etc. 44* 1984-12-06 EJ Sharpe - fix bug in log_fault text message, output full 45* error table text for normal audit. 46* 1984-11-29 EJ Sharpe - fix threshold comparison, fix suppression of 47* caller supplied msg when obj_name is null 48* 1984-11-26 EJ Sharpe - added caller_level argument for logging entries 49* also added the four "obj path" entries 50* 1984-11-15 EJ Sharpe - fixed some alignment problems, optional message 51* string is now included in our generated message 52* instead of being the complete message itself 53* 1984-11-11 EJ Sharpe - removed a_msg_str parameters, misc fixes 54* 1984-11-08 EJ Sharpe - misc fixes, and respect "null entry ptr means root" convention 55* 1984-11-02 EJ Sharpe - added capability to deal with link entries 56* 1984-10-30 EJ Sharpe - a number of minor changes 57* 1984-10-18 EJ Sharpe - added check_* entries 58* 1984-10-17 EJ Sharpe - major changes for revised audit flag strategy 59* 1984-10-09 EJ Sharpe - created 60*******/ 61 62 63 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 64 /* */ 65 /* ACCESS_AUDIT_ */ 66 /* */ 67 /* This module performs most security auditing. Trusted Computer Base (TCB) subsystems */ 68 /* call upon this module to format system audit messages or simply determine whether */ 69 /* auditing of a given event is necessary. */ 70 /* */ 71 /* See also: */ 72 /* access_audit_log_fault_ - performs auditing for fim */ 73 /* access_audit_util_ - contains utility functions */ 74 /* access_audit_check_ep_ - inspects audit flags for file system */ 75 /* fim - performs its own inspection of the process audit flags */ 76 /* page_fault - performs its own auditing of a particular covert channel while masked */ 77 /* */ 78 /* The following entries format security audit messages for insertion in the syserr log. */ 79 /* */ 80 /* access_audit_$log_general */ 81 /* access_audit_$log_general_user */ 82 /* These entries log an event with no associated object. */ 83 /* */ 84 /* access_audit_$log_obj_class_range */ 85 /* access_audit_$log_obj_class_range_user */ 86 /* These entries log an event where the involved object is not a storage */ 87 /* system entity and whose access class is specified as a */ 88 /* range (e.g. tape_drives). */ 89 /* */ 90 /* access_audit_$log_obj_class */ 91 /* access_audit_$log_obj_class_user */ 92 /* These entries log an event where there is some arbitrary object */ 93 /* involved. */ 94 /* */ 95 /* access_audit_$log_obj_path */ 96 /* access_audit_$log_obj_path_user */ 97 /* access_audit_$log_obj_ptr */ 98 /* access_audit_$log_obj_ptr_user */ 99 /* access_audit_$log_entry_ptr */ 100 /* access_audit_$log_entry_ptr_user */ 101 /* These entries log an event where the involved object is a storage */ 102 /* system entity. */ 103 /* */ 104 /* access_audit_$log_no_process */ 105 /* This is a special entry to log an event where there is no process */ 106 /* associated with that event (e.g. preaccess). */ 107 /* */ 108 /* */ 109 /* The following entries do not produce a log entry. Instead they simply check the */ 110 /* process audit flags and system audit thresholds against the given event. A bit "1" */ 111 /* or "0" is returned indicating that auditing is required or not, respectively. */ 112 /* */ 113 /* access_audit_$check_general */ 114 /* access_audit_$check_general_user */ 115 /* These entries are called when there is no object associated with the */ 116 /* event (e.g. privilege setting, sending a wakeup, etc.). The "user" entry */ 117 /* is called for proxy users. */ 118 /* */ 119 /* access_audit_$check_obj_class_range */ 120 /* access_audit_$check_obj_class_range_user */ 121 /* These entries are called when the object associated with the event is not */ 122 /* a storage system object and that object has an access class range (e.g. */ 123 /* tape drives). The "user" entry is called for proxy users. */ 124 /* */ 125 /* access_audit_$check_obj_class */ 126 /* access_audit_$check_obj_class_user */ 127 /* These entries are called when an arbitrary object is associated with the */ 128 /* event which has a single access class. This may be a storage system */ 129 /* object. The "user" entry is called for proxy users. (Note: The user of */ 130 /* this is preferred over the "obj_ptr" and "entry_ptr" entries for reasons */ 131 /* of efficiency (when the caller "knows" the access class)). */ 132 /* */ 133 /* access_audit_$check_obj_path */ 134 /* access_audit_$check_obj_path_user */ 135 /* access_audit_$check_obj_ptr */ 136 /* access_audit_$check_obj_ptr_user */ 137 /* These entries are called when the object associated with the event is a */ 138 /* storage system entity. The caller supplies either a pointer to the */ 139 /* object itself. The "user" entries */ 140 /* are called for proxy users. (Note: When the caller already "knows" the */ 141 /* access class of the object, the "obj_class" access_audit_$check_ entries */ 142 /* should be used for efficiency purposes.) */ 143 /* */ 144 /* */ 145 /* The functions of each of these entries is explained in greater detail in the comment */ 146 /* preceeding each entry respectively. */ 147 /* */ 148 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 149 /* format: on */ 150 151 152 /* PARAMETERS */ 153 154 dcl a_caller parameter char (*); /* name of calling routine */ 155 dcl a_caller_level parameter fixed bin; /* level to be reflected in audit message */ 156 dcl a_entry_ptr parameter pointer; /* ptr to storage sys obj's dir entry */ 157 dcl a_err_code parameter fixed bin (35); /* sys error code to put in audit message */ 158 dcl a_event_flags parameter bit (36) aligned; /* actually is the audit flag index */ 159 dcl a_group_id parameter char (*); /* for no_process entry only */ 160 dcl a_info_ptr parameter pointer; /* caller's binary info fo the audit message */ 161 dcl a_info_size parameter fixed bin (21); /* size of caller's binary info */ 162 dcl a_obj_class parameter bit (72) aligned; /* access class of arbitrary object */ 163 dcl a_obj_class_range (2) parameter bit (72) aligned; 164 /* access class range of non-stoarge-sys obj */ 165 dcl a_obj_name parameter char (*); /* name of object (usually non-storage-system) */ 166 dcl a_obj_path parameter char (*); /* pathname of storage system object */ 167 dcl a_obj_ptr parameter pointer; /* ptr to storage system object */ 168 dcl a_oper_code parameter bit (36) aligned; /* unique operation code for the TCB event */ 169 dcl a_user_audit_flags parameter bit (36) aligned; /* audit flag array for proxy user */ 170 dcl a_user_auth parameter bit (72) aligned; /* authorization of proxy user */ 171 dcl a_user_info_ptr parameter pointer; /* structure of proxy user process info */ 172 173 174 /* CONSTANTS */ 175 176 dcl True bit (1) aligned int static options (constant) init ("1"b); 177 dcl False bit (1) aligned int static options (constant) init ("0"b); 178 179 /* Unique identifier for each logging entrypoint */ 180 dcl ( 181 /* Check_* init (00), - default value - see dcl for "entrypoint" */ 182 Log_General init (01), 183 Log_General_User init (02), 184 Log_Obj_Class_Range init (03), 185 Log_Obj_Class_Range_User 186 init (04), 187 Log_Obj_Class init (05), 188 Log_Obj_Class_User init (06), 189 Log_Obj_Path init (07), 190 Log_Obj_Path_User init (08), 191 Log_Obj_Ptr init (09), 192 Log_Obj_Ptr_User init (10), 193 Log_Entry_Ptr init (11), 194 Log_Entry_Ptr_User init (12), 195 Log_No_Process init (13) 196 ) fixed bin static internal options (constant); 197 198 /* use unique entry identifier as index to get textual name */ 199 dcl EntryNames (0:13) char (24) int static options (constant) init ( 200 "check_*", 201 "log_general", 202 "log_general_user", 203 "log_obj_class_range", 204 "log_obj_class_range_user", 205 "log_obj_class", 206 "log_obj_class_user", 207 "log_obj_path", 208 "log_obj_path_user", 209 "log_obj_ptr", 210 "log_obj_ptr_user", 211 "log_entry_ptr", 212 "log_entry_ptr_user", 213 "log_no_process"); 214 215 216 217 /* AUTOMATIC */ 218 219 dcl arg_list_ptr pointer; /* pointer to our args */ 220 dcl called_dc_find bit (1) aligned; /* specifies whether we should call dc_find$finished */ 221 dcl caller char (64); /* arg copy */ 222 dcl caller_level fixed bin; /* arg copy */ 223 dcl caller_supplied_text_sw 224 bit (1) aligned; /* indicates caller supplied optional msg str arg */ 225 dcl caller_text_buff char (256); /* we'll format caller's ctl str and opt args here */ 226 dcl caller_text_len fixed bin (21); /* length of the text after formline_ */ 227 dcl caller_text_ptr pointer; /* ptr to caller_text_buff */ 228 dcl char528v char (528) var; /* temp var */ 229 dcl check_result bit (1) aligned; /* result of flag/threshold evaluation */ 230 dcl check_sw bit (1) aligned; /* flag indicating we're just checking, no logging */ 231 dcl code fixed bin (35); /* err code returned from entries we call */ 232 dcl control_str_arg_index fixed bin; /* tells formline_ where control str is */ 233 dcl entry_ptr pointer; /* arg copy */ 234 dcl entrypoint fixed bin init (0); /* entry point index */ 235 dcl entry_type_str char (10); /* "segment", "directory", or "link" */ 236 dcl err_code fixed bin (35); /* arg copy */ 237 dcl 1 event_flags aligned like audit_event_flags; 238 /* arg copy */ 239 dcl group_id char (32) aligned; /* arg copy */ 240 dcl have_entry_sw bit (1) aligned; /* indicates we have a ptr to a dir entry */ 241 dcl have_obj_path_sw bit (1) aligned; /* indicates we have a path argument */ 242 dcl i fixed bin; /* utility index */ 243 dcl info_ptr pointer; /* arg copy */ 244 dcl info_size fixed bin (21); /* arg copy */ 245 dcl initial_cpu fixed bin (71); /* for metering */ 246 dcl initial_pagefaults fixed bin; /* for metering */ 247 dcl link_info_valid_sw bit (1) aligned; /* indicates that link info may be put into log */ 248 dcl local_bin_data_area (26) bit (36) aligned; 249 /* small area to build extended binary data */ 250 dcl 1 local_audit_header aligned like audit_record_header_proxy; 251 /* binary data header */ 252 dcl locked_dir bit (1) aligned; /* flag indicating that we've locked the directory */ 253 dcl meter_index fixed bin; /* indicates metering bucket to use */ 254 dcl n_args fixed bin; /* number of arguments passed to us */ 255 dcl obj_class bit (72) aligned; /* arg copy */ 256 dcl obj_class_range (2) bit (72) aligned; /* arg copy */ 257 dcl object_info_valid_sw bit (1) aligned; /* indicates that ssobj can be put in log */ 258 dcl obj_path char (168); /* arg copy */ 259 dcl obj_name char (168) defined (obj_path); 260 /* arg copy, path and name are mutually exclusive */ 261 dcl obj_ptr pointer; /* arg copy */ 262 dcl 1 oper_code aligned like encoded_access_op; 263 /* arg copy */ 264 dcl 1 process_audit_flags aligned like audit_flags; /* audit flags of process being audited */ 265 dcl process_auth bit (72) aligned; /* auth of process being audited */ 266 dcl msg_text_buff char (512) aligned; /* ioa_$rsnpnnl assembles the text message here */ 267 /* 512 chars is all syserr will use... */ 268 dcl msg_text_len fixed bin (21); /* length of text */ 269 dcl msg_text_ptr pointer; /* ptr to msg_text_buff */ 270 dcl user_entry_sw bit (1) aligned; /* flag indicating proxy user info available */ 271 dcl 1 user_info aligned like audit_user_info;/* arg copy */ 272 273 274 /* BASED */ 275 276 dcl caller_text char (caller_text_len) based (caller_text_ptr); 277 /* caller's text arg or caller_text_buff */ 278 dcl msg_text char (msg_text_len) based (msg_text_ptr); 279 /* the part of msg_text_buff that ioa_$rsnpnnl set up */ 280 281 282 /* MISCELLANEOUS */ 283 284 dcl addr builtin; 285 dcl hbound builtin; 286 dcl index builtin; 287 dcl lbound builtin; 288 dcl length builtin; 289 dcl max builtin; 290 dcl null builtin; 291 dcl pointer builtin; 292 dcl rel builtin; 293 dcl rtrim builtin; 294 dcl segno builtin; 295 dcl size builtin; 296 dcl string builtin; 297 dcl substr builtin; 298 dcl unspec builtin; 299 300 301 /* EXTERNAL */ 302 303 dcl ( 304 access_operations_$mseg_delete, 305 access_operations_$mseg_open, 306 access_operations_$mseg_close, 307 access_operations_$mseg_attr_read, 308 access_operations_$mseg_attr_mod, 309 access_operations_$mseg_access_read, 310 access_operations_$mseg_access_mod, 311 access_operations_$mseg_accept_wakeups 312 ) bit (36) aligned ext static; 313 314 dcl active_all_rings_data$hcscnt 315 fixed bin external; 316 317 /* Note - The next four externals hold the access audit metering data. */ 318 /* active_hardcore_data$access_audit_num_meters" is set to the dimension. */ 319 /* This value is (n_audit_objects*6) + n_audit_events + 1. */ 320 /* This dimension should be increased as audit objects/events are added. */ 321 dcl active_hardcore_data$access_audit_num_meters 322 fixed bin external; 323 dcl active_hardcore_data$access_audit_count 324 (1) fixed bin (35) external; 325 dcl active_hardcore_data$access_audit_check_count 326 (1) fixed bin (35) external; 327 dcl active_hardcore_data$access_audit_cpu_time 328 (1) fixed bin (71) external; 329 dcl active_hardcore_data$access_audit_pagefaults 330 (1) fixed bin (35) external; 331 332 dcl error_table_$invalidsegno 333 fixed bin (35) external; 334 dcl error_table_$mylock fixed bin (35) external; 335 dcl error_table_$no_dir fixed bin (35) external; 336 dcl error_table_$noentry fixed bin (35) external; 337 dcl error_table_$root fixed bin (35) external; 338 dcl pds$access_authorization 339 bit (72) aligned external; 340 dcl pds$audit_flags bit (36) aligned external; 341 dcl pds$max_access_authorization 342 bit (72) aligned external; 343 dcl pds$process_group_id char (32) aligned external; 344 dcl pds$process_id bit (36) aligned external; 345 dcl sys_info$access_class_ceiling 346 bit (72) aligned external; 347 dcl sys_info$access_class_floor 348 bit (72) aligned external; 349 dcl sys_info$audit_covert_channel 350 bit (1) aligned external; 351 dcl sys_info$covert_channel_threshold 352 bit (72) aligned external; 353 dcl sys_info$audit_successful_access 354 bit (1) aligned external; 355 dcl sys_info$successful_access_threshold 356 bit (72) aligned external; 357 dcl sys_info$audit_unsuccessful_access 358 bit (1) aligned external; 359 dcl sys_info$unsuccessful_access_threshold 360 bit (72) aligned external; 361 362 363 /* ENTRIES */ 364 365 dcl access_mode$raw entry (pointer, bit (36) aligned, bit (36) aligned, fixed bin (35)); 366 dcl arg_count_ entry (fixed bin); 367 dcl arg_list_ptr_ entry (pointer); 368 dcl dc_find$finished entry (pointer, bit (1) aligned); 369 dcl dc_find$obj_for_audit entry (char (168), char (32), pointer, fixed bin (35)); 370 dcl display_access_class_ entry (bit (72) aligned) returns (char (32) aligned); 371 dcl display_access_class_$range 372 entry ((2) bit (72) aligned) returns (char (32) aligned); 373 dcl convert_access_operation_ 374 entry (bit (36) aligned) returns (char (50)); 375 dcl convert_status_code_ entry (fixed bin (35), char (8) aligned, char (100) aligned); 376 dcl cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin (21), fixed bin (35), ptr); 377 dcl get_pathname_ entry (fixed bin (17), char (*) varying, fixed bin (35)); 378 dcl formline_ entry (fixed bin, fixed bin, pointer, fixed bin (21), fixed bin, pointer); 379 dcl ioa_$rsnpnnl entry options (variable); 380 dcl level$get entry () returns (fixed bin); 381 dcl lock$dir_unlock entry (pointer); 382 dcl sum$getbranch_root_my entry (pointer, bit (36) aligned, pointer, fixed bin (35)); 383 dcl syserr entry options (variable); 384 dcl syserr$multiple_binary entry options (variable); 385 dcl uid_path_util$get entry (ptr, dim (0:15) bit (36) aligned, fixed bin (35)); 386 dcl usage_values entry (fixed bin, fixed bin (71)); 387 388 /* format: off */ 389 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 390 /* */ 391 /* LOG_GENERAL, LOG_GENERAL_USER - Entries. */ 392 /* */ 393 /* These entries set up an audit message for an event associated with no object in */ 394 /* particular (e.g. privilege setting, wakeup sending, etc). The "user" entry is used */ 395 /* for proxy users. */ 396 /* */ 397 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 398 /* format: on */ 399 400 log_general: 401 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_obj_name, a_err_code, a_info_ptr, a_info_size 402 ) options (variable); 403 404 call meter_start; 405 call arg_list_ptr_ (arg_list_ptr); 406 call arg_count_ (n_args); 407 call setup_log_entry (Log_General, 8); /* copy args, etc */ 408 409 obj_name = a_obj_name; 410 obj_class = sys_info$access_class_ceiling; /* fake out check_flags... */ 411 412 if check_flags_and_thresholds () 413 then call log_audit_message; 414 415 call meter_stop; 416 return; 417 418 419 420 log_general_user: 421 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_obj_name, a_err_code, a_info_ptr, a_info_size, 422 a_user_info_ptr) options (variable); 423 424 call meter_start; 425 call arg_list_ptr_ (arg_list_ptr); 426 call arg_count_ (n_args); 427 call setup_log_entry (Log_General_User, 9); /* copy args, etc */ 428 429 obj_name = a_obj_name; 430 obj_class = sys_info$access_class_ceiling; /* fake out check_flags... */ 431 432 if check_flags_and_thresholds () 433 then call log_audit_message; 434 435 call meter_stop; 436 return; 437 438 /* format: off */ 439 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 440 /* */ 441 /* LOG_OBJ_CLASS, LOG_OBJ_CLASS_USER - Entries. */ 442 /* */ 443 /* These entries set up the audit log message for an event associated with an arbitrary */ 444 /* object. The "user" entry is called for proxy users. */ 445 /* */ 446 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 447 /* format: on */ 448 449 log_obj_class: 450 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_obj_class, a_obj_name, a_err_code, a_info_ptr, 451 a_info_size) options (variable); 452 453 call meter_start; 454 call arg_list_ptr_ (arg_list_ptr); 455 call arg_count_ (n_args); 456 call setup_log_entry (Log_Obj_Class, 9); /* copy args, etc */ 457 458 obj_name = a_obj_name; 459 obj_class = a_obj_class; 460 461 if check_flags_and_thresholds () 462 then call log_audit_message; 463 464 call meter_stop; 465 return; 466 467 468 469 log_obj_class_user: 470 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_obj_class, a_obj_name, a_err_code, a_info_ptr, 471 a_info_size, a_user_info_ptr) options (variable); 472 473 call meter_start; 474 call arg_list_ptr_ (arg_list_ptr); 475 call arg_count_ (n_args); 476 call setup_log_entry (Log_Obj_Class_User, 10); /* copy args, etc */ 477 478 obj_name = a_obj_name; 479 obj_class = a_obj_class; 480 481 if check_flags_and_thresholds () 482 then call log_audit_message; 483 484 call meter_stop; 485 return; 486 487 /* format: off */ 488 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 489 /* */ 490 /* LOG_OBJ_CLASS_RANGE, LOG_OBJ_CLASS_RANGE_USER - Entries. */ 491 /* */ 492 /* This entry sets up the audit log message for an event associated with an arbitrary */ 493 /* object. The object's access class is a range. The "user" entry is called for proxy */ 494 /* users. */ 495 /* */ 496 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 497 /* format: on */ 498 499 log_obj_class_range: 500 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_obj_class_range, a_obj_name, a_err_code, 501 a_info_ptr, a_info_size) options (variable); 502 503 call meter_start; 504 call arg_list_ptr_ (arg_list_ptr); 505 call arg_count_ (n_args); 506 call setup_log_entry (Log_Obj_Class_Range, 9); /* copy args, etc */ 507 508 obj_name = a_obj_name; 509 obj_class_range = a_obj_class_range; 510 obj_class = obj_class_range (2); 511 512 if check_flags_and_thresholds () 513 then call log_audit_message; 514 515 call meter_stop; 516 return; 517 518 519 520 log_obj_class_range_user: 521 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_obj_class_range, a_obj_name, a_err_code, 522 a_info_ptr, a_info_size, a_user_info_ptr) options (variable); 523 524 call meter_start; 525 call arg_list_ptr_ (arg_list_ptr); 526 call arg_count_ (n_args); 527 call setup_log_entry (Log_Obj_Class_Range_User, 10); 528 /* copy args, etc */ 529 530 obj_name = a_obj_name; 531 obj_class_range = a_obj_class_range; 532 obj_class = obj_class_range (2); 533 534 if check_flags_and_thresholds () 535 then call log_audit_message; 536 537 call meter_stop; 538 return; 539 540 /* format: off */ 541 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 542 /* */ 543 /* LOG_OBJ_PATH, LOG_OBJ_PATH_USER - Entries. */ 544 /* */ 545 /* These entries log an event involving a storage system object. The caller supplies a */ 546 /* pathname to that object. This routine extracts the necessary information from the */ 547 /* directory entry of that object. The "user" entry is called for proxy users. */ 548 /* */ 549 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 550 /* format: on */ 551 552 log_obj_path: 553 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_obj_path, a_err_code, a_info_ptr, a_info_size 554 ) options (variable); 555 556 call meter_start; 557 call arg_list_ptr_ (arg_list_ptr); 558 call arg_count_ (n_args); 559 call setup_log_entry (Log_Obj_Path, 8); /* copy args, etc */ 560 561 obj_path = a_obj_path; 562 have_obj_path_sw = True; 563 564 call get_entry_ptr_and_class; 565 566 if check_flags_and_thresholds () 567 then call log_audit_message; 568 else call unlock_dir; 569 570 call meter_stop; 571 return; 572 573 574 575 log_obj_path_user: 576 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_obj_path, a_err_code, a_info_ptr, a_info_size, 577 a_user_info_ptr) options (variable); 578 579 call meter_start; 580 call arg_list_ptr_ (arg_list_ptr); 581 call arg_count_ (n_args); 582 call setup_log_entry (Log_Obj_Path_User, 9); /* copy args, etc */ 583 584 obj_path = a_obj_path; 585 have_obj_path_sw = True; 586 587 call get_entry_ptr_and_class; 588 589 if check_flags_and_thresholds () 590 then call log_audit_message; 591 else call unlock_dir; 592 593 call meter_stop; 594 return; 595 596 /* format: off */ 597 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 598 /* */ 599 /* LOG_OBJ_PTR, LOG_OBJ_PTR_USER - Entries. */ 600 /* */ 601 /* These entries log an event involving a storage system object. The caller supplies a */ 602 /* pointer to that object. This routine extracts the necessary information from the */ 603 /* directory entry of that object. The "user" entry is called for proxy users. */ 604 /* */ 605 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 606 /* format: on */ 607 608 log_obj_ptr: 609 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_obj_ptr, a_err_code, a_info_ptr, a_info_size 610 ) options (variable); 611 612 call meter_start; 613 call arg_list_ptr_ (arg_list_ptr); 614 call arg_count_ (n_args); 615 call setup_log_entry (Log_Obj_Ptr, 8); /* copy args, etc */ 616 617 obj_ptr = a_obj_ptr; 618 619 call get_entry_ptr_and_class; 620 621 if check_flags_and_thresholds () 622 then call log_audit_message; 623 else call unlock_dir; 624 625 call meter_stop; 626 return; 627 628 629 630 log_obj_ptr_user: 631 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_obj_ptr, a_err_code, a_info_ptr, a_info_size, 632 a_user_info_ptr) options (variable); 633 634 call meter_start; 635 call arg_list_ptr_ (arg_list_ptr); 636 call arg_count_ (n_args); 637 call setup_log_entry (Log_Obj_Ptr_User, 9); /* copy args, etc */ 638 639 obj_ptr = a_obj_ptr; 640 641 call get_entry_ptr_and_class; 642 643 if check_flags_and_thresholds () 644 then call log_audit_message; 645 else call unlock_dir; 646 647 call meter_stop; 648 return; 649 650 /* format: off */ 651 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 652 /* */ 653 /* LOG_ENTRY_PTR, LOG_ENTRY_PTR_USER - Entries. */ 654 /* */ 655 /* This entry logs an event involving a storage system object. The caller supplies a */ 656 /* pointer to the directory entry of that object. This routine extracts the necessary */ 657 /* information from the directory entry of that object. The "user" entry is called for */ 658 /* proxy users. */ 659 /* */ 660 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 661 /* format: on */ 662 663 log_entry_ptr: 664 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_entry_ptr, a_err_code, a_info_ptr, a_info_size 665 ) options (variable); 666 667 call meter_start; 668 call arg_list_ptr_ (arg_list_ptr); 669 call arg_count_ (n_args); 670 call setup_log_entry (Log_Entry_Ptr, 8); /* copy args, etc */ 671 672 entry_ptr = a_entry_ptr; 673 have_entry_sw = True; 674 675 call get_entry_ptr_and_class; 676 677 call log_audit_message; /* the caller must run check itself */ 678 679 call meter_stop; 680 return; 681 682 683 684 log_entry_ptr_user: 685 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_entry_ptr, a_err_code, a_info_ptr, a_info_size, 686 a_user_info_ptr) options (variable); 687 688 call meter_start; 689 call arg_list_ptr_ (arg_list_ptr); 690 call arg_count_ (n_args); 691 call setup_log_entry (Log_Entry_Ptr_User, 9); /* copy args, etc */ 692 693 entry_ptr = a_entry_ptr; 694 have_entry_sw = True; 695 696 call get_entry_ptr_and_class; 697 698 call log_audit_message; /* the caller must call check itself */ 699 700 call meter_stop; 701 return; 702 703 /* format: off */ 704 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 705 /* */ 706 /* LOG_NO_PROCESS - Entrypoint. */ 707 /* */ 708 /* This entry is used for logging events where there is no process involved (e.g. */ 709 /* preaccess). Since there is no process, there can be no check on the audit flags. */ 710 /* Thus, it is assumed the event must be audited. */ 711 /* */ 712 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 713 /* format: on */ 714 715 log_no_process: 716 entry (a_caller, a_caller_level, a_event_flags, a_oper_code, a_obj_name, a_err_code, a_info_ptr, a_info_size, 717 a_group_id) options (variable); 718 719 call meter_start; 720 call arg_list_ptr_ (arg_list_ptr); 721 call arg_count_ (n_args); 722 call setup_log_entry (Log_No_Process, 9); /* copy args, etc */ 723 724 obj_name = a_obj_name; 725 group_id = a_group_id; 726 727 call log_audit_message; 728 729 call meter_stop; 730 return; 731 732 /* format: off */ 733 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 734 /* */ 735 /* CHECK_GENERAL, CHECK_GENERAL_USER - Entries. */ 736 /* */ 737 /* These entries perform just the audit flag/threshold check for general auditing cases */ 738 /* where there is no associated object. The "user" entry is called for proxy users. */ 739 /* */ 740 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 741 /* format: on */ 742 743 check_general: 744 entry (a_event_flags, a_oper_code) 745 returns (bit (1) aligned); 746 747 call meter_start; 748 check_sw = True; 749 user_entry_sw = False; 750 have_entry_sw = False; 751 752 unspec (event_flags) = a_event_flags; 753 unspec (oper_code) = a_oper_code; 754 obj_class = sys_info$access_class_ceiling; /* make sure thresholds don't bother us */ 755 process_auth = pds$access_authorization; 756 unspec (process_audit_flags) = pds$audit_flags; 757 758 check_result = check_flags_and_thresholds (); 759 760 call set_meter_index; 761 call meter_stop; 762 763 return (check_result); 764 765 766 767 check_general_user: 768 entry (a_event_flags, a_oper_code, a_user_auth, a_user_audit_flags) 769 returns (bit (1) aligned); 770 771 call meter_start; 772 check_sw = True; 773 user_entry_sw = True; 774 have_entry_sw = False; 775 776 unspec (event_flags) = a_event_flags; 777 unspec (oper_code) = a_oper_code; 778 obj_class = sys_info$access_class_ceiling; 779 process_auth = a_user_auth; 780 unspec (process_audit_flags) = a_user_audit_flags; 781 782 check_result = check_flags_and_thresholds (); 783 784 call set_meter_index; 785 call meter_stop; 786 787 return (check_result); 788 789 /* format: off */ 790 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 791 /* */ 792 /* CHECK_OBJ_CLASS_RANGE, CHECK_OBJ_CLASS_RANGE_USER - Entries. */ 793 /* */ 794 /* These entries just check the audit flags/thresholds in respect to the specified */ 795 /* event in cases where the associated object class is expressed as a range (not a */ 796 /* storage system entity). The "user" entry is called for proxy users. */ 797 /* */ 798 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 799 /* format: on */ 800 801 check_obj_class_range: 802 entry (a_event_flags, a_oper_code, a_obj_class_range) 803 returns (bit (1) aligned); 804 805 call meter_start; 806 check_sw = True; 807 user_entry_sw = False; 808 have_entry_sw = False; 809 810 unspec (event_flags) = a_event_flags; 811 unspec (oper_code) = a_oper_code; 812 obj_class = a_obj_class_range (2); /* assume higher end for auditing purposes */ 813 process_auth = pds$access_authorization; 814 unspec (process_audit_flags) = pds$audit_flags; 815 816 check_result = check_flags_and_thresholds (); 817 818 call set_meter_index; 819 call meter_stop; 820 821 return (check_result); 822 823 824 check_obj_class_range_user: 825 entry (a_event_flags, a_oper_code, a_obj_class_range, a_user_auth, a_user_audit_flags) 826 returns (bit (1) aligned); 827 828 call meter_start; 829 check_sw = True; 830 user_entry_sw = True; 831 have_entry_sw = False; 832 833 unspec (event_flags) = a_event_flags; 834 unspec (oper_code) = a_oper_code; 835 obj_class = a_obj_class_range (2); /* assume higher end for auditing purposes */ 836 process_auth = a_user_auth; 837 unspec (process_audit_flags) = a_user_audit_flags; 838 839 check_result = check_flags_and_thresholds (); 840 841 call set_meter_index; 842 call meter_stop; 843 844 return (check_result); 845 846 /* format: off */ 847 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 848 /* */ 849 /* CHECK_OBJ_CLASS, CHECK_OBJ_CLASS_USER - Entries. */ 850 /* */ 851 /* These entries just check the audit flags/thresholds in respect to an event where */ 852 /* there is an arbitrary object involved. The object may be a storage system object. */ 853 /* The "user" entry is called for proxy users. */ 854 /* */ 855 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 856 /* format: on */ 857 858 check_obj_class: 859 entry (a_event_flags, a_oper_code, a_obj_class) 860 returns (bit (1) aligned); 861 862 call meter_start; 863 check_sw = True; 864 user_entry_sw = False; 865 have_entry_sw = False; 866 867 unspec (event_flags) = a_event_flags; 868 unspec (oper_code) = a_oper_code; 869 obj_class = a_obj_class; 870 process_auth = pds$access_authorization; 871 unspec (process_audit_flags) = pds$audit_flags; 872 873 check_result = check_flags_and_thresholds (); 874 875 call set_meter_index; 876 call meter_stop; 877 878 return (check_result); 879 880 881 882 check_obj_class_user: 883 entry (a_event_flags, a_oper_code, a_obj_class, a_user_auth, a_user_audit_flags) 884 returns (bit (1) aligned); 885 886 call meter_start; 887 check_sw = True; 888 user_entry_sw = True; 889 have_entry_sw = False; 890 891 unspec (event_flags) = a_event_flags; 892 unspec (oper_code) = a_oper_code; 893 obj_class = a_obj_class; 894 process_auth = a_user_auth; 895 unspec (process_audit_flags) = a_user_audit_flags; 896 897 check_result = check_flags_and_thresholds (); 898 899 call set_meter_index; 900 call meter_stop; 901 902 return (check_result); 903 904 /* format: off */ 905 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 906 /* */ 907 /* CHECK_OBJ_PATH, CHECK_OBJ_PATH_USER - Entries. */ 908 /* */ 909 /* These entries just check the audit flags/thresholds in respect to an event associated */ 910 /* with a storage system object. The "user" entry is called for proxy users. */ 911 /* */ 912 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 913 /* format: on */ 914 915 check_obj_path: 916 entry (a_event_flags, a_oper_code, a_obj_path) 917 returns (bit (1) aligned); 918 919 call meter_start; 920 check_sw = True; 921 user_entry_sw = False; 922 923 unspec (event_flags) = a_event_flags; 924 unspec (oper_code) = a_oper_code; 925 obj_path = a_obj_path; 926 have_obj_path_sw = True; 927 obj_ptr = null; 928 entry_ptr = null; 929 have_entry_sw = False; 930 call get_entry_ptr_and_class; 931 call unlock_dir; 932 process_auth = pds$access_authorization; 933 unspec (process_audit_flags) = pds$audit_flags; 934 935 check_result = check_flags_and_thresholds (); 936 937 call set_meter_index; 938 call meter_stop; 939 940 return (check_result); 941 942 check_obj_path_user: 943 entry (a_event_flags, a_oper_code, a_obj_path, a_user_auth, a_user_audit_flags) 944 returns (bit (1) aligned); 945 946 call meter_start; 947 check_sw = True; 948 user_entry_sw = True; 949 950 unspec (event_flags) = a_event_flags; 951 unspec (oper_code) = a_oper_code; 952 obj_path = a_obj_path; 953 have_obj_path_sw = True; 954 obj_ptr = null; 955 entry_ptr = null; 956 have_entry_sw = False; 957 call get_entry_ptr_and_class; 958 call unlock_dir; 959 process_auth = a_user_auth; 960 unspec (process_audit_flags) = a_user_audit_flags; 961 962 check_result = check_flags_and_thresholds (); 963 964 call set_meter_index; 965 call meter_stop; 966 967 return (check_result); 968 969 /* format: off */ 970 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 971 /* */ 972 /* CHECK_OBJ_PTR, CHECK_OBJ_PTR_USER - Entries. */ 973 /* */ 974 /* These entries just check the audit flags/thresholds in respect to an event associated */ 975 /* with a storage system object. The "user" entry is called for proxy users. */ 976 /* */ 977 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 978 /* format: on */ 979 980 check_obj_ptr: 981 entry (a_event_flags, a_oper_code, a_obj_ptr) 982 returns (bit (1) aligned); 983 984 call meter_start; 985 check_sw = True; 986 user_entry_sw = False; 987 988 unspec (event_flags) = a_event_flags; 989 unspec (oper_code) = a_oper_code; 990 have_obj_path_sw = False; 991 obj_ptr = a_obj_ptr; 992 entry_ptr = null; 993 have_entry_sw = False; 994 call get_entry_ptr_and_class; 995 call unlock_dir; 996 process_auth = pds$access_authorization; 997 unspec (process_audit_flags) = pds$audit_flags; 998 999 check_result = check_flags_and_thresholds (); 1000 1001 call set_meter_index; 1002 call meter_stop; 1003 1004 return (check_result); 1005 1006 check_obj_ptr_user: 1007 entry (a_event_flags, a_oper_code, a_obj_ptr, a_user_auth, a_user_audit_flags) 1008 returns (bit (1) aligned); 1009 1010 call meter_start; 1011 check_sw = True; 1012 user_entry_sw = True; 1013 1014 unspec (event_flags) = a_event_flags; 1015 unspec (oper_code) = a_oper_code; 1016 have_obj_path_sw = False; 1017 obj_ptr = a_obj_ptr; 1018 entry_ptr = null; 1019 have_entry_sw = False; 1020 call get_entry_ptr_and_class; 1021 call unlock_dir; 1022 process_auth = a_user_auth; 1023 unspec (process_audit_flags) = a_user_audit_flags; 1024 1025 check_result = check_flags_and_thresholds (); 1026 1027 call set_meter_index; 1028 call meter_stop; 1029 1030 return (check_result); 1031 1032 /* format: off */ 1033 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1034 /* */ 1035 /* LOG_AUDIT_MESSAGE - Internal Procedure. */ 1036 /* */ 1037 /* This routine performs the sequence of calls required to format data for the audit log */ 1038 /* entry and actually write the entry. It is called by all access_audit_$log_* */ 1039 /* entrypoints. */ 1040 /* */ 1041 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1042 /* format: on */ 1043 1044 log_audit_message: 1045 procedure (); 1046 1047 call build_object_info; 1048 1049 call unlock_dir; /* finished with looking at entry itself */ 1050 1051 if caller_supplied_text_sw 1052 then do; 1053 call cu_$arg_ptr_rel (control_str_arg_index, caller_text_ptr, caller_text_len, code, arg_list_ptr); 1054 if code ^= 0 1055 then do; 1056 call syserr (SYSERR_PRINT_ON_CONSOLE, MSG_Text_Ptr, EntryNames (entrypoint), 1057 pds$process_group_id, caller); 1058 dcl MSG_Text_Ptr char (86) int static options (constant) 1059 init ( 1060 "access_audit_$^a: (^a) Unexpected error obtaining caller text pointer. Caller=""^a""."); 1061 goto no_caller_text; 1062 end; 1063 else if caller_text_len = 0 /* null string? */ 1064 then goto no_caller_text; 1065 else if caller_text = "" /* fixed string of blanks? */ 1066 then goto no_caller_text; 1067 else if n_args > control_str_arg_index /* caller have optional args? */ 1068 then do; 1069 caller_text_ptr = addr (caller_text_buff); 1070 caller_text_len = length (caller_text_buff); 1071 call formline_ (control_str_arg_index, control_str_arg_index + 1, 1072 caller_text_ptr, caller_text_len, 0, arg_list_ptr); 1073 end; 1074 else /* leave ptr and length to caller's argument */ 1075 ; 1076 end; 1077 else do; /* caller supplied no text */ 1078 no_caller_text: 1079 caller_text_ptr = addr (caller_text_buff); /* just so it's a valid pointer */ 1080 caller_text_len = 0; 1081 caller_supplied_text_sw = False; 1082 end; 1083 1084 call form_audit_message_text; 1085 1086 call form_audit_record_header; 1087 1088 call write_log_message; 1089 1090 return; 1091 1092 end log_audit_message; 1093 1094 /* format: off */ 1095 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1096 /* */ 1097 /* BUILD_OBJECT_INFO - Internal Procedure. */ 1098 /* */ 1099 /* This routine is used by the access_audit_$log_* entries which deal with storage system */ 1100 /* object exclusively. Its function is to set up the binary info structure with */ 1101 /* pertinent information about the segment/directory. */ 1102 /* */ 1103 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1104 /* format: on */ 1105 1106 build_object_info: 1107 procedure; 1108 1109 entry_type_str = ""; 1110 1111 if have_entry_sw 1112 then if entry_ptr ^= null () 1113 then if entry_ptr -> entry.bs 1114 then do; 1115 if entry_ptr -> entry.dirsw 1116 then entry_type_str = "directory"; 1117 else entry_type_str = "segment"; 1118 1119 audit_ssobj_info_ptr = addr (local_bin_data_area); 1120 if size (local_bin_data_area) < size (audit_ssobj_info) 1121 then do; 1122 call syserr (SYSERR_PRINT_ON_CONSOLE, MSG_Alloc_SSObj); 1123 dcl MSG_Alloc_SSObj char (56) int static options (constant) 1124 init ("access_audit_: Insufficient room to allocate ssobj data."); 1125 goto setup_path; 1126 end; 1127 1128 /* build ssobj info structure for a seg or dir */ 1129 unspec (audit_ssobj_info) = ""b; 1130 audit_ssobj_info.info_type = AAB_ss_object; 1131 call uid_path_util$get (pointer (entry_ptr, 0), audit_ssobj_info.parent_uid_path, code); 1132 if code ^= 0 1133 then do; 1134 call syserr (SYSERR_LOG_OR_PRINT, MSG_Dir_UID, EntryNames (entrypoint), 1135 pds$process_group_id, segno (entry_ptr), error_text (code), caller); 1136 dcl MSG_Dir_UID char (93) int static options (constant) 1137 init ( 1138 "access_audit_$^a: (^a) Unable to get UID path for directory ^o due to ""^a"". Caller=""^a""." 1139 ); 1140 audit_ssobj_info.parent_uid_path = "0"b; 1141 /* all invalid */ 1142 end; 1143 audit_ssobj_info.entry_uid = entry_ptr -> entry.uid; 1144 audit_ssobj_info.dtem = entry_ptr -> entry.dtem; 1145 audit_ssobj_info.access_class = entry_ptr -> entry.access_class; 1146 call access_mode$raw (entry_ptr, audit_ssobj_info.raw_mode, audit_ssobj_info.ex_mode, code); 1147 if code ^= 0 1148 then do; 1149 call syserr (SYSERR_LOG_OR_PRINT, MSG_Raw_Access, EntryNames (entrypoint), 1150 pds$process_group_id, entry_ptr, error_text (code), caller); 1151 dcl MSG_Raw_Access char (97) int static options (constant) 1152 init ( 1153 "access_audit_$^a: (^a) Unable to get raw access modes for entry ^p due to ""^a"". Caller=""^a""." 1154 ); 1155 audit_ssobj_info.raw_mode = "0"b; 1156 audit_ssobj_info.ex_mode = "0"b; 1157 end; 1158 audit_ssobj_info.ring_brackets = entry_ptr -> entry.ring_brackets; 1159 audit_ssobj_info.ex_ring_brackets = entry_ptr -> entry.ex_ring_brackets; 1160 audit_ssobj_info.dirsw = entry_ptr -> entry.dirsw; 1161 audit_ssobj_info.per_process_sw = entry_ptr -> entry.per_process_sw; 1162 audit_ssobj_info.safety_sw = entry_ptr -> entry.safety_sw; 1163 audit_ssobj_info.multiple_class = entry_ptr -> entry.multiple_class; 1164 audit_ssobj_info.audit_flag = entry_ptr -> entry.audit_flag; 1165 audit_ssobj_info.security_oosw = entry_ptr -> entry.security_oosw; 1166 audit_ssobj_info.entrypt_sw = entry_ptr -> entry.entrypt_sw; 1167 audit_ssobj_info.master_dir = entry_ptr -> entry.master_dir; 1168 audit_ssobj_info.access_class = entry_ptr -> entry.access_class; 1169 1170 object_info_valid_sw = True; 1171 end; 1172 else do; 1173 entry_type_str = "link"; 1174 1175 audit_link_info_ptr = addr (local_bin_data_area); 1176 if size (local_bin_data_area) < size (audit_link_info) 1177 then do; 1178 call syserr (SYSERR_PRINT_ON_CONSOLE, MSG_Alloc_Link); 1179 dcl MSG_Alloc_Link char (55) int static options (constant) 1180 init ("access_audit_: Insufficient room to allocate link data."); 1181 goto setup_path; 1182 end; 1183 1184 /* build link info structure */ 1185 unspec (audit_link_info) = ""b; 1186 audit_link_info.info_type = AAB_ss_link; 1187 call uid_path_util$get (pointer (entry_ptr, 0), audit_link_info.parent_uid_path, code); 1188 if code ^= 0 1189 then do; 1190 call syserr (SYSERR_LOG_OR_PRINT, MSG_Dir_UID, EntryNames (entrypoint), 1191 pds$process_group_id, segno (entry_ptr), error_text (code), caller); 1192 audit_link_info.parent_uid_path = "0"b; 1193 /* all invalid */ 1194 end; 1195 audit_link_info.entry_uid = entry_ptr -> link.uid; 1196 audit_link_info.dtem = entry_ptr -> link.dtem; 1197 1198 link_info_valid_sw = True; 1199 end; 1200 else entry_type_str = "directory"; /* root */ 1201 else entry_type_str = ""; /* don't know what it is */ 1202 1203 /* set up the textual pathname in char528v (used by form_audit_message_text) */ 1204 setup_path: 1205 if ^have_entry_sw 1206 then char528v = ">NOENTRY"; /* no entry */ 1207 else if entry_ptr = null 1208 then char528v = ">"; /* root */ 1209 else do; 1210 /* first get path of directory */ 1211 call get_pathname_ (segno (entry_ptr), char528v, code); 1212 if code ^= 0 1213 then do; 1214 call syserr (SYSERR_LOG_OR_PRINT, MSG_Gen_Path, EntryNames (entrypoint), 1215 pds$process_group_id, entry_ptr, error_text (code), caller); 1216 dcl MSG_Gen_Path char (93) int static options (constant) 1217 init ( 1218 "access_audit_$^a: (^a) Unable to generate path for entry at ^p due to ""^a"". Caller=""^a""." 1219 ); 1220 char528v = ">???"; 1221 end; 1222 else do; 1223 /* append entry name to path */ 1224 if char528v = ">" /* avoid ">>foo" */ 1225 then char528v = char528v || rtrim (pointer (entry_ptr, entry_ptr -> entry.name_frp) -> names.name); 1226 else do; 1227 char528v = char528v || ">"; 1228 char528v = char528v || rtrim (pointer (entry_ptr, entry_ptr -> entry.name_frp) -> names.name); 1229 end; 1230 end; 1231 end; 1232 1233 return; 1234 1235 end build_object_info; 1236 1237 /* format: off */ 1238 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1239 /* */ 1240 /* FORM_AUDIT_MESSAGE_TEXT - Internal Procedure. */ 1241 /* */ 1242 /* This procedure formats a text message for the audit log. This message */ 1243 /* depends upon which access_audit_$log_* entry was called. */ 1244 /* */ 1245 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1246 /* format: on */ 1247 1248 form_audit_message_text: 1249 procedure (); 1250 1251 dcl Default_Ctl_Str char (168) static options (constant) init ( 1252 "Audit (^a): ^[GRANTED^;DENIED^] ^a^[ (^a)^;^s^] for ^a (^a) Level=^d^[ (on behalf of ^a (^a))^;^s^s^]^[ to^[ ^a^;^s^] ^a (^a)^;^s^s^s^s^]^[ <^a>^;^s^].^[ Code=^a^]" 1253 ); 1254 1255 dcl class_str char (32); 1256 dcl event_flags_str char (100) varying; 1257 dcl type_str char (10); 1258 dcl user_group_id char (32); 1259 dcl user_auth_str char (32) aligned; 1260 1261 type_str = ""; 1262 1263 if entrypoint = Log_Obj_Path 1264 | entrypoint = Log_Obj_Path_User 1265 | entrypoint = Log_Entry_Ptr 1266 | entrypoint = Log_Obj_Ptr 1267 | entrypoint = Log_Entry_Ptr_User 1268 | entrypoint = Log_Obj_Ptr_User 1269 then do; 1270 /* in this case char528v has already been set by build_object_info */ 1271 type_str = entry_type_str; 1272 if char528v = ">NOENTRY" 1273 then class_str = "cannot get entry"; 1274 else if char528v = ">???" 1275 then class_str = "cannot get pathname"; 1276 else if char528v = ">" 1277 then class_str = "root"; 1278 else class_str = display_access_class_ (obj_class); 1279 if entrypoint = Log_Obj_Path 1280 | entrypoint = Log_Obj_Path_User 1281 then char528v = obj_path; /* use textual path caller supplied */ 1282 end; 1283 else 1284 if entrypoint = Log_Obj_Class 1285 | entrypoint = Log_Obj_Class_User 1286 then do; 1287 char528v = obj_name; 1288 class_str = display_access_class_ (obj_class); 1289 end; 1290 else 1291 if entrypoint = Log_Obj_Class_Range 1292 | entrypoint = Log_Obj_Class_Range_User 1293 then do; 1294 char528v = obj_name; 1295 class_str = display_access_class_$range (obj_class_range); 1296 end; 1297 else 1298 if entrypoint = Log_General 1299 | entrypoint = Log_General_User 1300 then do; 1301 char528v = obj_name; 1302 class_str = "no access class"; 1303 end; 1304 else 1305 if entrypoint = Log_No_Process 1306 then do; 1307 char528v = obj_name; 1308 class_str = "no access class"; 1309 end; 1310 /* if entrypoint invalid */ 1311 else do; 1312 call syserr (SYSERR_PRINT_ON_CONSOLE, MSG_Illegal_Entry, pds$process_group_id, entrypoint, caller); 1313 dcl MSG_Illegal_Entry char (112) int static options (constant) 1314 init ( 1315 "access_audit_$UNKNOWN: (^a) Illegal entrypoint index ""^d"" detected in form_audit_message_text. Caller=""^a""." 1316 ); 1317 char528v = "UNKNOWN"; 1318 class_str = "error in access_audit_"; 1319 end; 1320 1321 if user_entry_sw 1322 then do; 1323 user_group_id = audit_user_info.user_id; 1324 user_auth_str = display_access_class_ (audit_user_info.authorization); 1325 end; 1326 else do; 1327 user_group_id = ""; 1328 user_auth_str = ""; 1329 end; 1330 1331 event_flags_str = ""; /* construct string of event flags */ 1332 do i = 1, 3 to hbound (Short_Event_Names, 1); /* all flags except "granted" */ 1333 if substr (string (event_flags), i, 1) = "1"b 1334 then do; 1335 if event_flags_str ^= "" 1336 then event_flags_str = event_flags_str || ", "; 1337 event_flags_str = event_flags_str || rtrim (Short_Event_Names (i)); 1338 end; 1339 end; 1340 1341 msg_text_ptr = addr (msg_text_buff); /* set up based msg_text */ 1342 msg_text_len = length (msg_text_buff); /* ioa_ will change the length */ 1343 1344 call ioa_$rsnpnnl (Default_Ctl_Str, msg_text_buff, msg_text_len, 1345 caller, event_flags.grant, convert_access_operation_ (unspec (oper_code)), 1346 (event_flags_str ^= ""), event_flags_str, 1347 pds$process_group_id, display_access_class_ (pds$access_authorization), caller_level, 1348 user_entry_sw, user_group_id, user_auth_str, 1349 (char528v ^= ""), (type_str ^= ""), type_str, char528v, class_str, caller_supplied_text_sw, caller_text, 1350 (err_code ^= 0), error_text (err_code)); 1351 1352 return; 1353 1354 end form_audit_message_text; 1355 1356 /* format: off */ 1357 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1358 /* */ 1359 /* FORM_AUDIT_RECORD_HEADER - Internal Procedure. */ 1360 /* */ 1361 /* This routine assembles the standard record header for the audit message. */ 1362 /* */ 1363 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1364 /* format: on */ 1365 1366 form_audit_record_header: 1367 procedure; 1368 1369 /* local_audit_header is the size of audit_record_header_proxy 1370* which will be sufficient to use as audit_record_header as well */ 1371 1372 unspec (local_audit_header) = ""b; 1373 audit_record_ptr = addr (local_audit_header); 1374 1375 if user_entry_sw 1376 then audit_record_header_proxy.type = ARH_TYPE_PROXY; 1377 else audit_record_header_proxy.type = ARH_TYPE_NO_PROXY; 1378 1379 audit_record_header_proxy.version = ACCESS_AUDIT_HEADER_VERSION_3; 1380 1381 if user_entry_sw 1382 then do; 1383 /* copy the proxy user's info */ 1384 call parse_group_id (audit_user_info.user_id, 1385 audit_record_header_proxy.person (2), audit_record_header_proxy.project (2), 1386 audit_record_header_proxy.tag (2)); 1387 audit_record_header_proxy.ring (2) = audit_user_info.ring; 1388 audit_record_header_proxy.anonymous (2) = (substr (audit_user_info.user_id, 1, 9) = "anonymous"); 1389 audit_record_header_proxy.process_id (2) = audit_user_info.process_id; 1390 audit_record_header_proxy.authorization (2) = audit_user_info.authorization; 1391 audit_record_header_proxy.subjects (2).authorization_range (*) = audit_user_info.authorization_range (*); 1392 end; 1393 1394 if entrypoint = Log_No_Process 1395 then do; 1396 audit_record_header_proxy.subject_is_process = False; 1397 call parse_group_id (group_id, 1398 audit_record_header_proxy.person (1), audit_record_header_proxy.project (1), 1399 audit_record_header_proxy.tag (1)); 1400 end; 1401 else do; 1402 audit_record_header_proxy.subject_is_process = True; 1403 call parse_group_id (pds$process_group_id, 1404 audit_record_header_proxy.person (1), audit_record_header_proxy.project (1), 1405 audit_record_header_proxy.tag (1)); 1406 audit_record_header_proxy.ring (1) = caller_level; 1407 audit_record_header_proxy.anonymous (1) = (substr (pds$process_group_id, 1, 9) = "anonymous"); 1408 audit_record_header_proxy.process_id (1) = pds$process_id; 1409 audit_record_header_proxy.authorization (1) = pds$access_authorization; 1410 audit_record_header_proxy.subjects (1).authorization_range (1) = sys_info$access_class_floor; 1411 /* don't know this in hardcore */ 1412 audit_record_header_proxy.subjects (1).authorization_range (2) = pds$max_access_authorization; 1413 end; 1414 1415 audit_record_header_proxy.operation_code = unspec (oper_code); 1416 audit_record_header_proxy.event_flags = unspec (event_flags); 1417 1418 return; 1419 1420 parse_group_id: /* procedure internal to form_audit_record_header */ 1421 procedure (group_id, person, project, tag); 1422 1423 dcl group_id parameter char (32) aligned; 1424 dcl person parameter char (22); 1425 dcl project parameter char (9); 1426 dcl tag parameter char (1); 1427 dcl l_group_id char (32); 1428 1429 l_group_id = group_id; 1430 person, project, tag = ""; 1431 1432 i = index (l_group_id, "."); 1433 if i = 0 1434 then do; 1435 person = substr (l_group_id, 1, length (person)); 1436 return; 1437 end; 1438 else if i > 1 1439 then person = substr (l_group_id, 1, i - 1); 1440 1441 l_group_id = substr (l_group_id, i + 1); 1442 1443 i = index (l_group_id, "."); 1444 if i = 0 1445 then do; 1446 project = substr (l_group_id, 1, length (project)); 1447 return; 1448 end; 1449 else if i > 1 1450 then project = substr (l_group_id, 1, i - 1); 1451 1452 tag = substr (l_group_id, i + 1); 1453 1454 return; 1455 1456 end parse_group_id; 1457 1458 end form_audit_record_header; 1459 1460 /* format: off */ 1461 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1462 /* */ 1463 /* WRITE_LOG_MESSAGE - Internal Procedure. */ 1464 /* */ 1465 /* This procedure interfaces with the logging software to add an audit message to the */ 1466 /* logs. */ 1467 /* */ 1468 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1469 /* format: on */ 1470 1471 write_log_message: 1472 procedure; 1473 1474 dcl 1 bin_info_array (3 /* max */) aligned, /* argument for syserr$multiple_binary */ 1475 2 p pointer, 1476 2 len fixed bin; 1477 dcl n_pieces fixed bin; 1478 dcl syserr_code fixed bin; 1479 1480 /* first piece is the header */ 1481 n_pieces = 1; 1482 p (n_pieces) = addr (audit_record_header); 1483 if user_entry_sw 1484 then len (n_pieces) = size (audit_record_header_proxy); 1485 else len (n_pieces) = size (audit_record_header); 1486 1487 /* next piece is the ssobj or link info, if available */ 1488 if object_info_valid_sw 1489 then do; 1490 n_pieces = n_pieces + 1; 1491 p (n_pieces) = addr (audit_ssobj_info); 1492 len (n_pieces) = size (audit_ssobj_info); 1493 end; 1494 else if link_info_valid_sw 1495 then do; 1496 n_pieces = n_pieces + 1; 1497 p (n_pieces) = addr (audit_link_info); 1498 len (n_pieces) = size (audit_link_info); 1499 end; 1500 1501 /* last piece is what the caller supplied, if available */ 1502 if info_ptr ^= null () 1503 then do; 1504 n_pieces = n_pieces + 1; 1505 p (n_pieces) = info_ptr; 1506 len (n_pieces) = info_size; 1507 end; 1508 1509 syserr_code = SYSERR_LOG_OR_PRINT; 1510 if event_flags.cc_1_10 | event_flags.cc_10_100 1511 then syserr_code = syserr_code + SYSERR_COVERT_CHANNEL; 1512 else if event_flags.grant 1513 then syserr_code = syserr_code + SYSERR_SUCCESSFUL_ACCESS; 1514 else syserr_code = syserr_code + SYSERR_UNSUCCESSFUL_ACCESS; 1515 1516 call syserr$multiple_binary (syserr_code, addr (bin_info_array), n_pieces, SB_access_audit, msg_text); 1517 1518 return; 1519 1520 end write_log_message; 1521 1522 /* format: off */ 1523 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1524 /* */ 1525 /* CHECK_FLAGS_AND_THRESHOLDS - Internal Procedure. */ 1526 /* */ 1527 /* This routine does the actual checking to determine if auditing is necessary. */ 1528 /* */ 1529 /* The following variables must be set before invocation of this routine: */ 1530 /* */ 1531 /* obj_class */ 1532 /* process_auth */ 1533 /* process_audit_flags */ 1534 /* event_flags */ 1535 /* oper_code */ 1536 /* have_entry_sw */ 1537 /* user_entry_sw */ 1538 /* */ 1539 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1540 /* format: on */ 1541 1542 check_flags_and_thresholds: 1543 procedure () returns (bit (1) aligned); 1544 1545 dcl object_index fixed bin; 1546 dcl oper_level fixed bin; 1547 1548 /* check to see if object's audit flag is on */ 1549 1550 if have_entry_sw 1551 then if entry_ptr ^= null () 1552 then if entry_ptr -> entry.bs & 1553 entry_ptr -> entry.audit_flag 1554 then do; 1555 if (^entry_ptr -> entry.dirsw & /* ring-1 object ? */ 1556 unspec (entry_ptr -> entry.ring_brackets (*)) = "111"b3) 1557 then do; 1558 if unspec (oper_code) = access_operations_$mseg_delete | 1559 unspec (oper_code) = access_operations_$mseg_open | 1560 unspec (oper_code) = access_operations_$mseg_close | 1561 unspec (oper_code) = access_operations_$mseg_attr_read | 1562 unspec (oper_code) = access_operations_$mseg_attr_mod | 1563 unspec (oper_code) = access_operations_$mseg_access_read | 1564 unspec (oper_code) = access_operations_$mseg_access_mod | 1565 unspec (oper_code) = access_operations_$mseg_accept_wakeups 1566 then return (True); 1567 else ; 1568 end; 1569 else return (True); 1570 end; 1571 1572 if event_flags.special_op /* presently we always log special events */ 1573 then return (True); 1574 else do; 1575 /* first check if a covert channel event */ 1576 1577 if event_flags.cc_1_10 | event_flags.cc_10_100 1578 then if sys_info$audit_covert_channel 1579 then if within_threshold (process_auth, (sys_info$covert_channel_threshold)) | event_flags.receiver 1580 then if (event_flags.cc_1_10 & process_audit_flags.cc_1_10) 1581 | (event_flags.cc_10_100 & process_audit_flags.cc_10_100) 1582 then return (True); 1583 1584 /* next, check for admin or privileged operation */ 1585 1586 if event_flags.admin_op & process_audit_flags.admin_ops 1587 then return (True); 1588 else ; 1589 1590 if event_flags.priv_op & process_audit_flags.priv_ops 1591 then return (True); 1592 else ; 1593 1594 1595 /* now for the real successful/unsuccessful access type checks */ 1596 1597 /* check system wide audit flags */ 1598 1599 if event_flags.grant 1600 then if ^sys_info$audit_successful_access 1601 then return (False); 1602 else ; 1603 else if ^sys_info$audit_unsuccessful_access 1604 then return (False); 1605 else ; 1606 1607 /* check thresholds */ 1608 1609 if event_flags.grant 1610 then if ^within_threshold (obj_class, (sys_info$successful_access_threshold)) 1611 then return (False); /* below threshold */ 1612 else ; 1613 else if ^within_threshold (obj_class, (sys_info$unsuccessful_access_threshold)) 1614 then return (False); 1615 else ; 1616 1617 /* finally check the user's audit flags */ 1618 1619 object_index = oper_code.audit_type.object_type; 1620 if object_index < lbound (process_audit_flags.objects, 1) 1621 | object_index > hbound (process_audit_flags.objects, 1) 1622 then do; 1623 /* some events may legally be associated with no type of object */ 1624 if (event_flags.cc_1_10 | event_flags.cc_10_100 | event_flags.priv_op | event_flags.admin_op) 1625 then return (False); 1626 else do; 1627 call syserr (SYSERR_PRINT_ON_CONSOLE, MSG_Parm_Combo, EntryNames (entrypoint), 1628 pds$process_group_id, unspec (oper_code), string (event_flags), ^check_sw, caller); 1629 dcl MSG_Parm_Combo char (118) int static options (constant) 1630 init ( 1631 "access_audit_$^a: (^a) Encountered illegal parameter combination. OperCode=^w EventFlags=^w.^[ Caller=""^a"".^;^s^]" 1632 ); 1633 return (True); /* audit for usefulness in debugging */ 1634 end; 1635 end; 1636 1637 oper_level = oper_code.audit_type.access_type; 1638 /* all 2-bit combos OK */ 1639 1640 if event_flags.grant 1641 then if process_audit_flags.objects (object_index).grant_level >= oper_level 1642 then return (True); 1643 else return (False); 1644 else if process_audit_flags.objects (object_index).deny_level >= oper_level 1645 then return (True); 1646 else return (False); 1647 1648 end; 1649 1650 1651 within_threshold: 1652 proc (test, thresh) returns (bit (1) aligned); 1653 /* procedure internal to check_flags and thresholds 1654* used to compare a test class/auth against a given threshold */ 1655 dcl test bit (72) aligned parameter; 1656 dcl thresh bit (72) aligned parameter; 1657 1658 if addr (test) -> aim_template.level >= addr (thresh) -> aim_template.level 1659 then return (True); 1660 else if (addr (test) -> aim_template.categories & addr (thresh) -> aim_template.categories) 1661 then return (True); 1662 else return (False); 1663 1664 end within_threshold; 1665 1666 end check_flags_and_thresholds; 1667 1668 /* format: off */ 1669 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1670 /* */ 1671 /* GET_ENTRY_PTR_AND_CLASS - Internal Procedure. */ 1672 /* */ 1673 /* Routine to obtain a pointer to the directory entry of a storage system object given a */ 1674 /* pointer to that object and the access class of that object. This routine will set the */ 1675 /* global switch "locked_dir" if it was necessary to lock the directory. The caller will */ 1676 /* call "unlock_dir" if the switch is set and all operations are complete. (Most callers */ 1677 /* of the log_obj_ptr and log_entry_ptr entrypoints already have the directory locked). */ 1678 /* */ 1679 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1680 /* format: on */ 1681 1682 get_entry_ptr_and_class: 1683 procedure (); 1684 1685 called_dc_find = False; 1686 locked_dir = False; 1687 1688 obj_class = sys_info$access_class_ceiling; /* assume worst case */ 1689 1690 if rel (entry_ptr) = "0"b 1691 then do; 1692 /* assume entry_ptr arg was actually the obj_ptr */ 1693 obj_ptr = entry_ptr; 1694 have_entry_sw = False; 1695 end; 1696 1697 if have_entry_sw /* caller supplied entry ptr? */ 1698 then ; /* we have nothing to do... */ 1699 else if obj_ptr ^= null /* caller supplied object ptr? */ 1700 then do; 1701 if segno (obj_ptr) <= active_all_rings_data$hcscnt 1702 then obj_class = sys_info$access_class_floor;/* no entry */ 1703 else do; 1704 /* we'll make an entry pointer ourselves and maybe lock the dir */ 1705 call sum$getbranch_root_my (pointer (obj_ptr, 0), "0"b, entry_ptr, code); 1706 if code = error_table_$mylock 1707 then code = 0; 1708 else if code = error_table_$root 1709 then code = 0; 1710 else if code = error_table_$noentry | code = error_table_$invalidsegno 1711 then ; /* let these by... */ 1712 else if code ^= 0 1713 then do; 1714 call syserr (SYSERR_LOG_OR_PRINT, MSG_Entry_Ptr, EntryNames (entrypoint), 1715 pds$process_group_id, segno (obj_ptr), error_text (code)); 1716 dcl MSG_Entry_Ptr char (76) int static options (constant) 1717 init ("access_audit_$^a: (^a) Unable to get entry pointer for seg ^o due to ""^a""."); 1718 return; 1719 end; 1720 else locked_dir = True; /* we locked it, remember to unlock it later */ 1721 1722 have_entry_sw = (code = 0); 1723 end; 1724 end; 1725 else if have_obj_path_sw /* caller supplied object path? */ 1726 then do; /* get entry pointer from pathname */ 1727 call dc_find$obj_for_audit (obj_path, "", entry_ptr, code); 1728 if code = error_table_$root /* shouldn't get mylock */ 1729 then code = 0; 1730 else if code = error_table_$noentry | code = error_table_$no_dir 1731 then ; /* let these by... */ 1732 else if code ^= 0 1733 then do; 1734 call syserr (SYSERR_LOG_OR_PRINT, MSG_Entry_Ptr_Path, EntryNames (entrypoint), 1735 pds$process_group_id, obj_path, error_text (code)); 1736 dcl MSG_Entry_Ptr_Path char (80) int static options (constant) 1737 init ("access_audit_$^a: (^a) Unable to get entry pointer for seg ""^a"" due to ""^a""."); 1738 return; 1739 end; 1740 else do; 1741 called_dc_find = True; 1742 locked_dir = True; 1743 end; 1744 1745 have_entry_sw = (code = 0); 1746 end; 1747 else do; /* caller supplied nothing? */ 1748 call syserr (SYSERR_PRINT_ON_CONSOLE, MSG_Improper_Call, EntryNames (entrypoint), pds$process_group_id, 1749 ^check_sw, caller) 1750 ; 1751 dcl MSG_Improper_Call char (108) int static options (constant) 1752 init ( 1753 "access_audit_$^a: (^a) Improper calling sequence (from ""get_entry_ptr_and_class"").^[ Caller=""^a"".^;^s^]" 1754 ); 1755 end; 1756 1757 if have_entry_sw 1758 then if entry_ptr ^= null () 1759 then if entry_ptr -> entry.bs 1760 then obj_class = entry_ptr -> entry.access_class; 1761 else obj_class = pointer (entry_ptr, "0"b) -> dir.access_class; 1762 /* it's a link */ 1763 else obj_class = sys_info$access_class_floor;/* it's the root directory */ 1764 1765 return; 1766 1767 end get_entry_ptr_and_class; 1768 1769 /* format: off */ 1770 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1771 /* */ 1772 /* UNLOCK_DIR - Internal Procedure. */ 1773 /* */ 1774 /* This routine unlocks the directory if access_audit_ locked it. */ 1775 /* */ 1776 /* The switches "called_dc_find" and "locked_dir" are set by get_entry_ptr_and_class. */ 1777 /* However, the $log_* entries may end up calling here before get_entry_ptr_and_class */ 1778 /* has been executed. Therefore, setup_log_entry sets these both to False. */ 1779 /* */ 1780 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1781 /* format: on */ 1782 1783 unlock_dir: 1784 procedure (); 1785 1786 if called_dc_find 1787 then call dc_find$finished (pointer (entry_ptr, 0), locked_dir); 1788 else if locked_dir 1789 then call lock$dir_unlock (pointer (entry_ptr, 0)); 1790 1791 locked_dir = False; /* so we don't try it again */ 1792 called_dc_find = False; 1793 1794 return; 1795 1796 end unlock_dir; 1797 1798 /* format: off */ 1799 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1800 /* */ 1801 /* ERROR_TEXT - Internal Procedure. */ 1802 /* */ 1803 /* Procedure to return the short error message mnemonic associated with an error_table_ */ 1804 /* entry. */ 1805 /* */ 1806 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1807 /* format: on */ 1808 1809 error_text: 1810 procedure (ec) returns (char (100) aligned); 1811 1812 dcl ec parameter fixed bin (35); 1813 1814 dcl char8 char (8) aligned; 1815 dcl char100 char (100) aligned; 1816 1817 call convert_status_code_ (ec, char8, char100); 1818 1819 return (char100); 1820 1821 end error_text; 1822 1823 /* format: off */ 1824 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1825 /* */ 1826 /* METER_START - Internal Procedure. */ 1827 /* */ 1828 /* Initializes the meter variables. */ 1829 /* */ 1830 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1831 /* format: on */ 1832 1833 meter_start: 1834 procedure; 1835 1836 call usage_values (initial_pagefaults, initial_cpu); 1837 1838 return; 1839 1840 end meter_start; 1841 1842 /* format: off */ 1843 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1844 /* */ 1845 /* METER_STOP - Internal Procedure. */ 1846 /* */ 1847 /* Compute resource usage since "meter_start" was invoked. Add into appropriate meter */ 1848 /* bucket. */ 1849 /* */ 1850 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1851 /* format: on */ 1852 1853 meter_stop: 1854 procedure; 1855 1856 dcl final_cpu fixed bin (71); 1857 dcl final_pagefaults fixed bin; 1858 1859 active_hardcore_data$access_audit_count (meter_index) = 1860 active_hardcore_data$access_audit_count (meter_index) + 1; 1861 1862 if check_sw 1863 then active_hardcore_data$access_audit_check_count (meter_index) = 1864 active_hardcore_data$access_audit_check_count (meter_index) + 1; 1865 1866 call usage_values (final_pagefaults, final_cpu); 1867 1868 active_hardcore_data$access_audit_cpu_time (meter_index) = 1869 active_hardcore_data$access_audit_cpu_time (meter_index) + (final_cpu - initial_cpu); 1870 active_hardcore_data$access_audit_pagefaults (meter_index) = 1871 active_hardcore_data$access_audit_pagefaults (meter_index) + (final_pagefaults - initial_pagefaults); 1872 1873 return; 1874 1875 end meter_stop; 1876 1877 /* format: off */ 1878 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1879 /* */ 1880 /* SETUP_LOG_ENTRY - Internal Procedure. (Used by logging entries only) */ 1881 /* SET_METER_INDEX - Internal Entry. (Used check_* entries) */ 1882 /* */ 1883 /* 1. Set up global variables. */ 1884 /* 2. Check that proper number of arguments have been supplied. */ 1885 /* 3. Copy args. */ 1886 /* 4. Set up metering bucket index. */ 1887 /* */ 1888 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 1889 /* format: on */ 1890 1891 setup_log_entry: 1892 proc (a_entrypoint, a_args_needed); 1893 1894 dcl a_entrypoint fixed bin parameter; 1895 dcl a_args_needed fixed bin parameter; 1896 1897 /* Set up global variables */ 1898 1899 entrypoint = a_entrypoint; /* set global variable */ 1900 control_str_arg_index = a_args_needed + 1; /* tells formline_ where the control string is */ 1901 caller_supplied_text_sw = (control_str_arg_index <= n_args); 1902 1903 check_sw = False; 1904 object_info_valid_sw = False; 1905 link_info_valid_sw = False; 1906 have_entry_sw = False; /* assume no ptr to object's dir entry */ 1907 have_obj_path_sw = False; 1908 1909 locked_dir = False; 1910 called_dc_find = False; 1911 obj_ptr = null (); 1912 entry_ptr = null (); 1913 obj_class = sys_info$access_class_ceiling; 1914 1915 /* Check number of arguments */ 1916 1917 if n_args < a_args_needed 1918 then do; 1919 if n_args > 0 /* have "caller" ? */ 1920 then caller = a_caller; 1921 else caller = ""; 1922 call syserr (SYSERR_PRINT_ON_CONSOLE, MSG_Insuff_Args, EntryNames (entrypoint), 1923 pds$process_group_id, n_args, (n_args > 0), caller); 1924 dcl MSG_Insuff_Args char (94) int static options (constant) 1925 init ( 1926 "access_audit_$^a: (^a) Called with insufficient arguments (#args= ^d).^[ Caller=""^a"".^;^s^]" 1927 ); 1928 goto ERROR_EXIT; 1929 end; 1930 1931 /* Copy args */ 1932 1933 caller = a_caller; 1934 caller_level = max (a_caller_level, level$get ()); 1935 unspec (event_flags) = a_event_flags; 1936 unspec (oper_code) = a_oper_code; 1937 err_code = a_err_code; 1938 info_ptr = a_info_ptr; 1939 info_size = a_info_size; 1940 /* binary info structure is copied by write_log_message */ 1941 1942 if entrypoint = Log_General_User 1943 | entrypoint = Log_Obj_Class_Range_User 1944 | entrypoint = Log_Obj_Class_User 1945 | entrypoint = Log_Obj_Path_User 1946 | entrypoint = Log_Obj_Ptr_User 1947 | entrypoint = Log_Entry_Ptr_User 1948 then do; 1949 user_entry_sw = True; 1950 audit_user_info_ptr = a_user_info_ptr; 1951 user_info = audit_user_info; /* copy the structure */ 1952 audit_user_info_ptr = addr (user_info); /* now we'll ref local copy */ 1953 end; 1954 else user_entry_sw = False; 1955 1956 /* message text string and other optional args are copied by formline_ */ 1957 1958 /* individual entry is responsible for copying a_group_id, a_obj_name, a_obj_class, 1959* a_obj_class_range, a_obj_path, a_obj_ptr, or a_entry_ptr as appropriate */ 1960 1961 1962 /* set up input to audit flag/threshold check, "obj_class" must 1963* be set up by the individual entry */ 1964 if user_entry_sw 1965 then do; 1966 process_auth = audit_user_info.authorization; 1967 unspec (process_audit_flags) = audit_user_info.audit_flags; 1968 end; 1969 else do; 1970 process_auth = pds$access_authorization; 1971 unspec (process_audit_flags) = pds$audit_flags; 1972 end; 1973 1974 1975 /* Set up meter bucket index */ 1976 1977 set_meter_index: 1978 entry (); 1979 1980 /* first check to see if we're auditing on a specific event */ 1981 i = n_audit_objects * 2 * n_audit_access_types; 1982 /* if entrypoint = Log_Fault then meter_index = i + FAULTS_AUDIT_FLAG_INDEX; (see access_audit_log_fault_) */ 1983 if event_flags.admin_op 1984 then meter_index = i + ADMIN_OP_AUDIT_FLAG_INDEX; 1985 else if event_flags.priv_op 1986 then meter_index = i + PRIV_OP_AUDIT_FLAG_INDEX; 1987 else if event_flags.cc_1_10 1988 then meter_index = i + CC_1_10_AUDIT_FLAG_INDEX; 1989 else if event_flags.cc_10_100 1990 then meter_index = i + CC_10_100_AUDIT_FLAG_INDEX; 1991 1992 else /* we're auditing on object type */ 1993 if oper_code.audit_type.object_type < lbound (process_audit_flags.objects, 1) 1994 | oper_code.audit_type.object_type > hbound (process_audit_flags.objects, 1) 1995 | oper_code.audit_type.access_type < 1 /* 0 allowed only for admin, priv, and covert channel events */ 1996 /* | oper_code.audit_type.access_type > n_audit_access_types (can't happen) */ 1997 then goto ILLEGAL_INDEX; 1998 else do; 1999 meter_index = (oper_code.audit_type.object_type - 1) * 2 * n_audit_access_types 2000 + oper_code.audit_type.access_type; 2001 if ^event_flags.grant 2002 then meter_index = meter_index + n_audit_access_types; 2003 end; 2004 2005 if meter_index >= active_hardcore_data$access_audit_num_meters 2006 then do; 2007 ILLEGAL_INDEX: 2008 call syserr (SYSERR_LOG_OR_PRINT, MSG_Meter_Index, EntryNames (entrypoint), 2009 pds$process_group_id, unspec (oper_code), string (event_flags), ^check_sw, caller); 2010 dcl MSG_Meter_Index char (108) int static options (constant) 2011 init ( 2012 "access_audit_$^a: (^a) Encountered illegal meter index. OperCode=^w EventFlags=^w.^[ Caller=""^a"".^;^s^]" 2013 ); 2014 meter_index = active_hardcore_data$access_audit_num_meters; 2015 end; 2016 2017 end setup_log_entry; 2018 2019 ERROR_EXIT: 2020 return; 2021 2022 /* format: off */ 2023 /* begin include file - access_audit_flags.incl.pl1 */ 1 2 1 3 /* NOTE: All changes must be done also to access_audit_flags.incl.alm !!!!!! */ 1 4 1 5 /* Modified 85-01-14 by EJ Sharpe for n_audit_access_types, constants for 1 6* indexing into flags array */ 1 7 /* Modified 85-01-07 by EJ Sharpe for cleanup */ 1 8 /* Modified 84-11-16 by EJ Sharpe to add alternate dcl */ 1 9 1 10 /* The following structure describes the per-process audit 1 11*data which determines which events must be audited. */ 1 12 1 13 dcl 1 audit_flags based aligned, 1 14 2 objects (6) unal, /* n_audit_objects */ 1 15 3 grant_level fixed bin (2) uns unal, 1 16 3 deny_level fixed bin (2) uns unal, 1 17 2 pad bit (7) unal, 1 18 2 admin_ops bit (1) unal, 1 19 2 priv_ops bit (1) unal, 1 20 2 faults bit (1) unal, 1 21 2 cc_1_10 bit (1) unal, /* small channel */ 1 22 2 cc_10_100 bit (1) unal; /* moderate channel */ 1 23 1 24 dcl 1 audit_flags_alt based aligned, 1 25 2 objects (6) unal, /* n_audit_objects */ 1 26 3 grant_level fixed bin (2) uns unal, 1 27 3 deny_level fixed bin (2) uns unal, 1 28 2 pad bit (7) unal, 1 29 2 flags (5) bit (1) unal /* n_audit_flags */; 1 30 1 31 dcl n_audit_objects init (6) 1 32 fixed bin int static options (constant); 1 33 dcl n_audit_flags init (5) 1 34 fixed bin int static options (constant); 1 35 dcl n_audit_access_types init (3) 1 36 fixed bin int static options (constant); 1 37 1 38 /* constants for indexing into the "objects" array */ 1 39 dcl ( 1 40 FSOBJ_AUDIT_OBJECT_INDEX init (1), 1 41 FSATTR_AUDIT_OBJECT_INDEX init (2), 1 42 RCP_AUDIT_OBJECT_INDEX init (3), 1 43 ADMIN_AUDIT_OBJECT_INDEX init (4), 1 44 SPECIAL_AUDIT_OBJECT_INDEX init (5), 1 45 OTHER_AUDIT_OBJECT_INDEX init (6) 1 46 ) fixed bin int static options (constant); 1 47 1 48 /* constants for indexing into the flags array (in the alternate dcl) */ 1 49 dcl ( 1 50 ADMIN_OP_AUDIT_FLAG_INDEX init (1), 1 51 PRIV_OP_AUDIT_FLAG_INDEX init (2), 1 52 FAULTS_AUDIT_FLAG_INDEX init (3), 1 53 CC_1_10_AUDIT_FLAG_INDEX init (4), 1 54 CC_10_100_AUDIT_FLAG_INDEX init (5) 1 55 ) fixed bin int static options (constant); 1 56 1 57 /* constants which define the meaning of the level values / access types */ 1 58 dcl ( 1 59 NONE init (0), 1 60 MODIFY_ACCESS init (1), 1 61 MODIFY init (2), 1 62 READ init (3) 1 63 ) fixed bin (2) uns int static options (constant); 1 64 1 65 /* Note: "MODIFY" implies "MODIFY_ACCESS" as well; 1 66* "READ" implies "MODIFY" and "MODIFY_ACCESS" as well */ 1 67 1 68 /* Note: The size of the metering data in active_hardcore_data is 1 69* dependant upon the number of audit flags and objects. 1 70* Specifically, the number of metering buckets is: 1 71* n_audit_objects*2*n_audit_access_types+n_audit_flags+1 1 72* (the extra "1" is for debugging purposes) */ 1 73 1 74 /* end include file - access_audit_flags.incl.pl1 */ 2023 2024 /* begin include file - access_audit_eventflags.incl.pl1 */ 2 2 /* NOTE: This include file has an ALM counterpart made with cif. 2 3*Keep it up to date. */ 2 4 2 5 dcl 1 audit_event_flags based aligned, 2 6 2 special_op bit (1) unal, /* special sys operation */ 2 7 2 grant bit (1) unal, /* operation was successful */ 2 8 2 admin_op bit (1) unal, /* administrative operation */ 2 9 2 priv_op bit (1) unal, /* privileged operation */ 2 10 2 cc_1_10 bit (1) unal, /* small covert channel */ 2 11 2 cc_10_100 bit (1) unal, /* moderate covert channel */ 2 12 2 receiver bit (1) unal, /* on receiving end of channel */ 2 13 2 pad bit (29) unal; 2 14 2 15 /* end include file - access_audit_eventflags.incl.pl1 */ 2024 2025 /* begin include file - access_audit_encoded_op.incl.pl1 */ 3 2 3 3 dcl 1 encoded_access_op aligned based, 3 4 2 audit_type unal, 3 5 3 object_type fixed bin (4) uns unal, 3 6 3 access_type fixed bin (2) uns unal, 3 7 2 operation_index fixed bin (12) uns unal, 3 8 2 detailed_operation fixed bin (18) uns unal; 3 9 3 10 /* object_type = Seg, Dir, Rcp, Admin, Special, Other 3 11* access_type = None, Modify_Acl, Modify, Read 3 12* operation_index is the index of this code in 3 13* access_operations_$oper_codes and the index of 3 14* the text descriptor in access_operations_$text_offest_table 3 15* (see access_operations_.incl.pl1) 3 16* detailed_operation is additional info inserted by the 3 17* caller of the subsystem performing the operation 3 18**/ 3 19 3 20 /* end include file - access_audit_encoded_op.incl.pl1 */ 2025 2026 /* BEGIN include file access_audit_bin_header.incl.pl1 */ 4 2 4 3 /* format: style4 */ 4 4 4 5 /* NOTE: All changes must also be done to access_audit_bin_header.incl.alm */ 4 6 4 7 /* 85-01-18 E. Swenson - renamed to access_audit_bin_header.incl.pl1 */ 4 8 /* 85-01-17 E. Swenson - restructured, added session_uid, changed 4 9* min and max authorization to authorization range. */ 4 10 /* 85-01-07 EJ Sharpe - added min_authorization, cleanup */ 4 11 /* 84-11-15 EJ Sharpe - added event_flags word */ 4 12 /* 84-11-06 EJ Sharpe - added unaligned attr to version and proxy_flag */ 4 13 /* 84-10-24 EJ Sharpe - added the constants */ 4 14 /* 84-09-04 BIM - created */ 4 15 4 16 declare audit_record_ptr pointer; 4 17 4 18 dcl 1 audit_record_header aligned based (audit_record_ptr), 4 19 2 header aligned like arh_header_, 4 20 2 subject aligned like arh_user_info_; 4 21 4 22 dcl 1 audit_record_header_proxy aligned based (audit_record_ptr), 4 23 2 header aligned like arh_header_, 4 24 2 subjects (2) aligned like arh_user_info_; 4 25 4 26 dcl 1 arh_header_ aligned based, 4 27 2 type fixed bin (9) unsigned unaligned, 4 28 2 version fixed bin (9) unsigned unaligned, 4 29 2 flags unaligned, 4 30 3 ( 4 31 subject_is_process, /* binary data in subject is valid */ 4 32 object_is_valid /* There is an object */ 4 33 ) bit (1) unaligned, 4 34 3 pad bit (16) unaligned, 4 35 2 operation_code bit (36) aligned, /* like access_audit_encoded_op */ 4 36 2 event_flags bit (36) aligned, /* like access_audit_eventflags */ 4 37 2 session_uid fixed bin (35); /* uid for the login session */ 4 38 4 39 dcl 1 arh_user_info_ aligned based, 4 40 2 person char (22) unaligned, /* see anonymous bit */ 4 41 2 project char (9) unaligned, /* blank for nologin w/out proj */ 4 42 2 tag char (1) unaligned, 4 43 2 ring fixed bin (3) uns unaligned, 4 44 2 anonymous bit (1) unaligned, 4 45 2 pad3 bit (32) unaligned, 4 46 2 process_id bit (36) aligned, 4 47 2 authorization bit (72) aligned, 4 48 2 authorization_range (2) bit (72) aligned; 4 49 4 50 dcl ARH_TYPE_PROXY fixed bin init (2) 4 51 static options (constant); 4 52 dcl ARH_TYPE_NO_PROXY fixed bin init (1) 4 53 static options (constant); 4 54 dcl ACCESS_AUDIT_HEADER_VERSION_3 fixed bin (9) unsigned 4 55 init (3) static options (constant); 4 56 4 57 /* End include file access_audit_bin_header.incl.pl1 */ 2026 2027 /* begin include file - access_audit_binary_def */ 5 2 5 3 /* 1985-02-26 EJ Sharpe: added rcp object definition */ 5 4 /* 1985-01-25 E. Swenson: added pnt definition */ 5 5 /* 1985-01-22 EJ Sharpe: created */ 5 6 5 7 /**** 5 8* Each access audit log message has binary data including 5 9* the audit record header and optionally some extended 5 10* binary information. The first 9 bits (fixed bin (9) uns unal) 5 11* if the extended binary defines the type of the data 5 12* and, thus, what structure may be used to interpret it. 5 13* 5 14* This include file is a registry of the extended binary 5 15* type values. 5 16*****/ 5 17 5 18 dcl ( 5 19 /*type identifier*/ /*type*/ /*include where defined*/ 5 20 5 21 AAB_ss_object init (1), /* access_audit_ssobj_info.incl.pl1 */ 5 22 AAB_ss_link init (2), /* access_audit_ssobj_info.incl.pl1 */ 5 23 AAB_ia_int_dmn init (3), /* as_audit_structures.incl.pl1 */ 5 24 AAB_ia_abs init (4), /* as_audit_structures.incl.pl1 */ 5 25 AAB_ia_abs_proxy init (5), /* as_audit_structures.incl.pl1 */ 5 26 AAB_channel init (6), /* as_audit_structures.incl.pl1 */ 5 27 AAB_dial_service init (7), /* as_audit_structures.incl.pl1 */ 5 28 AAB_pnt_entry init (8), /* access_audit_pnt_info.incl.pl1 */ 5 29 AAB_rcp_object init (9), /* access_audit_rcp_info.incl.pl1 */ 5 30 AAB_mseg_msg init (10) /* access_audit_mseg_info.incl.pl1 */ 5 31 ) fixed bin (9) uns unal static options (constant); 5 32 5 33 /**** 5 34* The following array contains entry name fragments for the 5 35* expander procedure associated with the respective binary 5 36* data type. The actual entry name is generated like: 5 37* 5 38* entryname = "expand_"||audit_binary_expanders(TYPE)||"_audit_info_" 5 39* 5 40* Note that expand_access_audit_msg_.pl1 keeps a cache of 5 41* extended binary expander procedure entries. The cache 5 42* should be enlarged when the following array grows to more 5 43* than 36 entries. 5 44*****/ 5 45 5 46 dcl audit_binary_expanders (10) char (13) varying internal static options (constant) 5 47 init ( "ssobj", /* 1 (first two are internal */ 5 48 "sslnk", /* 2 procedures in expand_access_audit_msg_) */ 5 49 "as_ia", /* 3 (ia_int_dmn) */ 5 50 "as_ia", /* 4 (ia_abs) */ 5 51 "as_ia", /* 5 (ia_abs_proxy) */ 5 52 "channel", /* 6 */ 5 53 "dial_serv", /* 7 */ 5 54 "pnt", /* 8 */ 5 55 "rcp_obj", /* 9 */ 5 56 "mseg_msg" /* 10 */ 5 57 ); 5 58 5 59 /* end include file - access_audit_binary_def.incl.pl1 */ 2027 2028 /* begin include file - access_audit_user_info.incl.pl1 */ 6 2 6 3 /* 85-01-21 EJ Sharpe - changed (min max)_auth to auth range */ 6 4 /* 85-01-07 EJ Sharpe - added min_authorization */ 6 5 /* 84-10-09 EJ Sharpe - created */ 6 6 6 7 /* The structure defined here is passed to the access_audit_ 6 8*entrypoints which deal with proxy users: 6 9**/ 6 10 6 11 dcl audit_user_info_ptr pointer; 6 12 6 13 dcl 1 audit_user_info based (audit_user_info_ptr) aligned, 6 14 2 version char (8), 6 15 2 user_id char (32), 6 16 2 ring fixed bin (3) uns unal, 6 17 2 pad bit (33) unal, 6 18 2 process_id bit (36) aligned, 6 19 2 authorization bit (72) aligned, 6 20 2 authorization_range (2) bit (72) aligned, 6 21 2 audit_flags bit (36) aligned; 6 22 6 23 dcl audit_user_info_version_1 char (8) init ("adtusrv1") 6 24 internal static options (constant); 6 25 6 26 /* end include file - access_audit_user_info.incl.pl1 */ 2028 2029 /* begin include file - access_audit_ssobj_info.incl.pl1 */ 7 2 7 3 /* Modified 85-01-22 by EJ Sharpe - changed char(8) version */ 7 4 7 5 /* This structure describes the default binary information 7 6* for storage system objects in an audit log message. 7 7* Values for the "type" field are defined in 7 8* access_audit_binary_def.incl.pl1 7 9**/ 7 10 7 11 dcl audit_ssobj_info_ptr pointer; 7 12 7 13 dcl 1 audit_ssobj_info based (audit_ssobj_info_ptr) aligned, 7 14 2 info_type fixed bin (9) uns unal, /* AAB_ss_object */ 7 15 2 version fixed bin (9) uns unal, 7 16 2 pad bit (18) unal, 7 17 2 parent_uid_path (0:15) bit (36) aligned, 7 18 2 entry_uid bit (36), 7 19 2 dtem bit (36), 7 20 2 raw_mode bit (36), 7 21 2 ex_mode bit (36), 7 22 2 ring_brackets (3) bit (3) unal, 7 23 2 ex_ring_brackets (3) bit (3) unal, 7 24 2 flags unal, 7 25 3 ( 7 26 dirsw, 7 27 per_process_sw, 7 28 safety_sw, 7 29 multiple_class, 7 30 audit_flag, 7 31 security_oosw, 7 32 entrypt_sw, 7 33 master_dir 7 34 ) bit (1) unal, 7 35 3 pad bit (10) unal, 7 36 2 access_class bit (72); /* double word aligned */ 7 37 7 38 7 39 dcl audit_ssobj_info_version fixed bin (9) uns unal init (1) 7 40 static options (constant); 7 41 7 42 /* slightly shorter info for links, first six components are same */ 7 43 7 44 dcl audit_link_info_ptr pointer; 7 45 7 46 dcl 1 audit_link_info based (audit_link_info_ptr) aligned, 7 47 2 info_type fixed bin (9) uns unal, /* AAB_ss_link */ 7 48 2 version fixed bin (9) uns unal, 7 49 2 pad bit (18) unal, 7 50 2 parent_uid_path (0:15) bit (36) aligned, 7 51 2 entry_uid bit (36), 7 52 2 dtem bit (36); 7 53 7 54 dcl audit_link_info_version fixed bin (9) uns unal init (1) 7 55 static options (constant); 7 56 7 57 /* end include file - access_audit_ssobj_info.incl.pl1 */ 2029 2030 /* begin include file - access_audit_names.incl.pl1 */ 8 2 8 3 /* Modified 84-11-19 by EJ Sharpe to add "None" as a level name */ 8 4 /* Modified 84-11-30 by EJ Sharpe to split into Long and Short format arrays */ 8 5 8 6 /* The order of the names in these arrays must be the same as the 8 7*ordering of the respective items in the audit_flags structure in 8 8*access_audit_flags.incl.pl1 */ 8 9 8 10 dcl Long_Object_Names (6) char (32) int static options (constant) 8 11 init ( 8 12 "File_System_Object", 8 13 "File_System_Attribute", 8 14 "RCP_Object", 8 15 "Administrative_Object", 8 16 "Special_Object", 8 17 "Other_Object"); 8 18 8 19 dcl Short_Object_Names (6) char (8) int static options (constant) 8 20 init ( 8 21 "fsobj", 8 22 "fsattr", 8 23 "rcp", 8 24 "admin", 8 25 "special", 8 26 "other"); 8 27 8 28 dcl Long_Level_Names (0:3) char (16) int static options (constant) 8 29 init ( 8 30 "No_Audit", 8 31 "Modify_Access", 8 32 "Modify", 8 33 "Read"); 8 34 8 35 dcl Short_Level_Names (0:3) char (2) int static options (constant) 8 36 init ( 8 37 "N", 8 38 "MA", 8 39 "M", 8 40 "R"); 8 41 8 42 dcl Long_Flag_Names (5) char (32) int static options (constant) 8 43 init ( 8 44 "Administrative_Operation", 8 45 "Privileged_Operation", 8 46 "ACV/IPR_Fault", 8 47 "Small_Covert_Channel", /* 1-10 bps */ 8 48 "Moderate_Covert_Channel"); /* 10-100 bps */ 8 49 8 50 dcl Short_Flag_Names (5) char (12) int static options (constant) 8 51 init ( 8 52 "admin_op", 8 53 "priv_op", 8 54 "fault", 8 55 "small_cc", 8 56 "moderate_cc"); 8 57 8 58 /* The order of the names in the following arrays must be the same 8 59*as the ordering of the respective itmes in the event_flags structure 8 60*in access_audit_eventflags.incl.pl1 */ 8 61 8 62 dcl Long_Event_Names (7) char (32) int static options (constant) 8 63 init ( 8 64 "Special_Operation", 8 65 "Operation_Granted", 8 66 "Administrative_Operation", 8 67 "Privileged_Operation", 8 68 "Small_Covert_Channel", 8 69 "Moderate_Covert_Channel", 8 70 "Receiver_On_Covert_Channel"); 8 71 8 72 dcl Short_Event_Names (7) char (12) int static options (constant) 8 73 init ( 8 74 "special_op", 8 75 "granted", 8 76 "admin_op", 8 77 "priv_op", 8 78 "small_cc", 8 79 "moderate_cc", 8 80 "receiver"); 8 81 8 82 /* end include files - access_audit_names.incl.pl1 */ 2030 2031 /* BEGIN INCLUDE FILE aim_template.incl.pl1 */ 9 2 9 3 /* Created 740723 by PG */ 9 4 /* Modified 06/28/78 by C. D. Tavares to add rcp privilege */ 9 5 /* Modified 83-05-10 by E. N. Kitltitz to add communications privilege */ 9 6 9 7 /* This structure defines the components of both an access 9 8* class and an access authorization as interpreted by the 9 9* Access Isolation Mechanism. */ 9 10 9 11 9 12 dcl 1 aim_template aligned based, /* authorization/access class template */ 9 13 2 categories bit (36), /* access categories */ 9 14 2 level fixed bin (17) unaligned, /* sensitivity level */ 9 15 2 privileges unaligned, /* special access privileges (in authorization only) */ 9 16 (3 ipc, /* interprocess communication privilege */ 9 17 3 dir, /* directory privilege */ 9 18 3 seg, /* segment privilege */ 9 19 3 soos, /* security out-of-service privilege */ 9 20 3 ring1, /* ring 1 access privilege */ 9 21 3 rcp, /* RCP resource access privilege */ 9 22 3 comm) bit (1), /* communications cross-AIM privilege */ 9 23 3 pad bit (11); 9 24 9 25 9 26 /* END INCLUDE FILE aim_template.incl.pl1 */ 2031 2032 /* BEGIN INCLUDE FILE ... dir_header.incl.pl1 */ 10 2 /* Modified 8/74 for NSS */ 10 3 /* Modified 8/76 to add version number and hash table rel pointer for variable hash table sizes */ 10 4 /* Modified 3/82 BIM for change pclock */ 10 5 /* format: style3 */ 10 6 10 7 /* Template for the directory header. Length = 64 words. */ 10 8 10 9 dcl dp ptr; 10 10 10 11 dcl 1 dir based (dp) aligned, 10 12 10 13 2 modify bit (36), /* Process ID of last modifier */ 10 14 2 type bit (18) unaligned, /* type of object = dir header */ 10 15 2 size fixed bin (17) unaligned, /* size of header in words */ 10 16 2 dtc (3), /* date-time checked by salvager array */ 10 17 3 date bit (36), /* the date */ 10 18 3 error bit (36), /* what errors were discovered */ 10 19 10 20 2 uid bit (36), /* uid of the directory - copied from branch */ 10 21 10 22 2 pvid bit (36), /* phys vol id of the dir - copied from branch */ 10 23 10 24 2 sons_lvid bit (36), /* log vol id for inf non dir seg - copied from branch */ 10 25 10 26 2 access_class bit (72), /* security attributes of dir - copied from branch */ 10 27 10 28 (2 vtocx fixed bin (17), /* vtoc entry index of the dir - copied from branch */ 10 29 2 version_number fixed bin (17), /* version number of header */ 10 30 10 31 2 entryfrp bit (18), /* rel ptr to beginning of entry list */ 10 32 2 pad2 bit (18), 10 33 10 34 2 entrybrp bit (18), /* rel ptr to end of entry list */ 10 35 2 pad3 bit (18), 10 36 10 37 2 pers_frp bit (18), /* rel ptr to start of person name list */ 10 38 2 proj_frp bit (18), /* rel ptr to start of project name list */ 10 39 10 40 2 pers_brp bit (18), /* rel ptr to end of person name list */ 10 41 2 proj_brp bit (18), /* rel ptr to end of project name list */ 10 42 10 43 2 seg_count fixed bin (17), /* number of non-directory branches */ 10 44 2 dir_count fixed bin (17), /* number of directory branches */ 10 45 10 46 2 lcount fixed bin (17), /* number of links */ 10 47 2 acle_total fixed bin (17), /* total number of ACL entries in directory */ 10 48 10 49 2 arearp bit (18), /* relative pointer to beginning of allocation area */ 10 50 2 per_process_sw bit (1), /* indicates dir contains per process segments */ 10 51 2 master_dir bit (1), /* TRUE if this is a master dir */ 10 52 2 force_rpv bit (1), /* TRUE if segs must be on RPV */ 10 53 2 rehashing bit (1), /* TRUE if hash table is being constructed */ 10 54 2 pad4 bit (14), 10 55 10 56 2 iacl_count (0:7), 10 57 3 seg fixed bin (17), /* number of initial acl entries for segs */ 10 58 3 dir fixed bin (17), /* number of initial acl entries for dir */ 10 59 10 60 2 iacl (0:7), /* pointer to initial ACLs for each ring */ 10 61 3 seg_frp bit (18), /* rel ptr to start of initial ACL for segs */ 10 62 3 seg_brp bit (18), /* rel ptr to end of initial ACL for segs */ 10 63 10 64 3 dir_frp bit (18), /* rel ptr to start of initial for dirs */ 10 65 3 dir_brp bit (18), /* rel ptr to end of initial ACL for dirs */ 10 66 10 67 2 htsize fixed bin (17), /* size of hash table */ 10 68 2 hash_table_rp bit (18), /* rel ptr to start of hash table */ 10 69 10 70 2 htused fixed bin (17), /* no. of used places in hash table */ 10 71 2 pad6 fixed bin (17), 10 72 10 73 2 tree_depth fixed bin (17), /* number of levels from root of this dir */ 10 74 2 pad7 bit (18)) unaligned, 10 75 10 76 2 dts bit (36), /* date-time directory last salvaged */ 10 77 10 78 2 master_dir_uid bit (36), /* uid of superior master dir */ 10 79 2 change_pclock fixed bin (35), /* up one each call to sum$dirmod */ 10 80 2 pad8 (11) bit (36), /* pad to make it a 64 word header */ 10 81 2 checksum bit (36), /* checksummed from uid on */ 10 82 2 owner bit (36); /* uid of parent dir */ 10 83 10 84 dcl version_number_2 fixed bin int static options (constant) init (2); 10 85 10 86 /* END INCLUDE FILE ... dir_header.incl.pl1 */ 2032 2033 /* BEGIN INCLUDE FILE ... dir_entry.incl.pl1 ...last modified August 1974 for nss */ 11 2 11 3 11 4 /* Template for an entry. Length = 38 words */ 11 5 11 6 dcl ep ptr; 11 7 11 8 dcl 1 entry based (ep) aligned, 11 9 11 10 (2 efrp bit (18), /* forward rel ptr to next entry */ 11 11 2 ebrp bit (18)) unaligned, /* backward rel ptr to previous entry */ 11 12 11 13 2 type bit (18) unaligned, /* type of object = dir entry */ 11 14 2 size fixed bin (17) unaligned, /* size of dir entry */ 11 15 11 16 2 uid bit (36), /* unique id of entry */ 11 17 11 18 2 dtem bit (36), /* date-time entry modified */ 11 19 11 20 (2 bs bit (1), /* branch switch = 1 if branch */ 11 21 2 pad0 bit (17), 11 22 2 nnames fixed bin (17), /* number of names for this entry */ 11 23 11 24 2 name_frp bit (18), /* rel pointer to start of name list */ 11 25 2 name_brp bit (18), /* rel pointer to end of name list */ 11 26 11 27 2 author, /* user who created branch */ 11 28 3 pers_rp bit (18), /* name of user who created branch */ 11 29 3 proj_rp bit (18), /* project of user who created branch */ 11 30 11 31 3 tag char (1), /* tag of user who created branch */ 11 32 3 pad1 char (3), 11 33 11 34 2 primary_name bit (504), /* first name on name list */ 11 35 11 36 2 dtd bit (36), /* date time dumped */ 11 37 11 38 2 pad2 bit (36), 11 39 11 40 11 41 /* the declarations below are for branch only */ 11 42 11 43 11 44 2 pvid bit (36), /* physical volume id */ 11 45 11 46 2 vtocx fixed bin (17), /* vtoc entry index */ 11 47 2 pad3 bit (18), 11 48 11 49 2 dirsw bit (1), /* = 1 if this is a directory branch */ 11 50 2 oosw bit (1), /* out of service switch on = 1 */ 11 51 2 per_process_sw bit (1), /* indicates segment is per process */ 11 52 2 copysw bit (1), /* = 1 make copy of segment whenever initiated */ 11 53 2 safety_sw bit (1), /* if 1 then entry cannot be deleted */ 11 54 2 multiple_class bit (1), /* segment has multiple security classes */ 11 55 2 audit_flag bit (1), /* segment must be audited for security */ 11 56 2 security_oosw bit (1), /* security out of service switch */ 11 57 2 entrypt_sw bit (1), /* 1 if call limiter is to be enabled */ 11 58 2 master_dir bit (1), /* TRUE for master directory */ 11 59 2 tpd bit (1), /* TRUE if this segment is never to go on the PD */ 11 60 2 pad4 bit (11), 11 61 2 entrypt_bound bit (14)) unaligned, /* call limiter */ 11 62 11 63 2 access_class bit (72) aligned, /* security attributes : level and category */ 11 64 11 65 (2 ring_brackets (3) bit (3), /* ring brackets on segment */ 11 66 2 ex_ring_brackets (3) bit (3), /* extended ring brackets */ 11 67 2 acle_count fixed bin (17), /* number of entries on ACL */ 11 68 11 69 2 acl_frp bit (18), /* rel ptr to start of ACL */ 11 70 2 acl_brp bit (18), /* rel ptr to end of ACL */ 11 71 11 72 2 bc_author, /* user who last set the bit count */ 11 73 3 pers_rp bit (18), /* name of user who set the bit count */ 11 74 3 proj_rp bit (18), /* project of user who set the bit count */ 11 75 11 76 3 tag char (1), /* tag of user who set the bit count */ 11 77 3 pad5 bit (2), 11 78 2 bc fixed bin (24)) unaligned, /* bit count for segs, msf indicator for dirs */ 11 79 11 80 2 sons_lvid bit (36), /* logical volume id for immediat inf non dir seg */ 11 81 11 82 2 pad6 bit (36), 11 83 11 84 2 checksum bit (36), /* checksum from dtd */ 11 85 11 86 2 owner bit (36); /* uid of containing directory */ 11 87 11 88 /* END INCLUDE FILE ... dir_entry.incl.pl1 ... */ 2033 2034 /* BEGIN INCLUDE FILE ... dir_link.incl.pl1 ... last modified August 1974 for nss */ 12 2 12 3 /* Template for link. Note that it is identical to entry for first 24 words. */ 12 4 12 5 12 6 dcl 1 link based (ep) aligned, 12 7 12 8 (2 efrp bit (18), /* forward rel ptr to next entry */ 12 9 2 ebrp bit (18), /* backward rel ptr to previous entry */ 12 10 12 11 2 type bit (18), /* type = dir link */ 12 12 2 size fixed bin (17), /* size of link in words */ 12 13 12 14 2 uid bit (36), /* unique id of entry */ 12 15 12 16 2 dtem bit (36), /* date-time entry modified */ 12 17 12 18 2 bs bit (1), /* entry switch = 1 if entry */ 12 19 2 pad0 bit (17), 12 20 2 nnames fixed bin (17), /* number of names for this entry */ 12 21 12 22 2 name_frp bit (18), /* rel pointer to start of name list */ 12 23 2 name_brp bit (18), /* rel pointer to end of name list */ 12 24 12 25 2 author, /* user who created entry */ 12 26 3 pers_rp bit (18), /* name of user who created entry */ 12 27 3 proj_rp bit (18), /* project of user who created entry */ 12 28 12 29 3 tag char (1), /* tag of user who created entry */ 12 30 3 pad1 char (3), 12 31 12 32 2 primary_name bit (504), /* first name on name list */ 12 33 12 34 2 dtd bit (36), /* date time dumped */ 12 35 12 36 2 pad2 bit (36), 12 37 12 38 12 39 /* the declarations below are only applicable to links */ 12 40 12 41 2 pad3 bit (18), 12 42 2 pathname_size fixed bin (17), /* number of characters in pathname */ 12 43 12 44 2 pathname char (168 refer (pathname_size))) unaligned, /* pathname of link */ 12 45 12 46 2 checksum bit (36), /* checksum from uid */ 12 47 12 48 2 owner bit (36); /* uid of containing directory */ 12 49 12 50 /* END INCLUDE FILE ... dir_link.incl.pl1 */ 2034 2035 /* BEGIN INCLUDE FILE ... dir_name.incl.pl1 ... last modified Nov 1975 for nss */ 13 2 13 3 /* Template for names of branches or links. Length = 14 words. */ 13 4 13 5 dcl np ptr; 13 6 13 7 dcl 1 names based aligned, /* based on ptr(dp,ep->entry.name_frp) */ 13 8 2 fp bit(18) unaligned, /* rel ptr to next name */ 13 9 2 bp bit(18) unaligned, /* rel ptr to prev name */ 13 10 13 11 2 type bit (18) unaligned, /* type = dir name */ 13 12 2 size fixed bin (17) unaligned, /* size of dir name */ 13 13 13 14 2 entry_rp bit(18) unaligned, /* rel ptr to entry */ 13 15 2 ht_index fixed bin(17) unaligned, /* index of hash table entry */ 13 16 13 17 2 hash_thread bit (18) unal, /* relative ptr to next hash entry */ 13 18 2 pad3 bit (18) unal, 13 19 13 20 2 name char(32) aligned, 13 21 13 22 2 checksum bit (36), /* checksum from entry_rp */ 13 23 13 24 2 owner bit (36); /* uid of entry */ 13 25 13 26 13 27 /* END INCLUDE FILE ... dir_name.incl.pl1 */ 2035 2036 /* BEGIN INCLUDE FILE syserr_constants.incl.pl1 ... 11/11/80 W. Olin Sibert */ 14 2 /* 85-02-12, EJ Sharpe - Added sorting class constants, removed AIM_MESSAGE, added new action code names. */ 14 3 /* 85-04-24, G. Palter - Renamed SYSERR_UNUSED_10 to SYSERR_RING1_ERROR to reflect its actual use. */ 14 4 14 5 /* This include file has an ALM version. Keep 'em in sync! */ 14 6 14 7 dcl ( 14 8 14 9 /* The following constants define the message action codes. This indicates 14 10*how a message is to be handled. */ 14 11 14 12 SYSERR_CRASH_SYSTEM init (1), 14 13 CRASH init (1), /* Crash the system, and bleat plaintively. */ 14 14 14 15 SYSERR_TERMINATE_PROCESS init (2), 14 16 TERMINATE_PROCESS init (2), /* Terminate the process, print the message, and beep. */ 14 17 14 18 SYSERR_PRINT_WITH_ALARM init (3), 14 19 BEEP init (3), /* Beep and print the message on the console. */ 14 20 14 21 SYSERR_PRINT_ON_CONSOLE init (0), 14 22 ANNOUNCE init (0), /* Just print the message on the console. */ 14 23 14 24 SYSERR_LOG_OR_PRINT init (4), 14 25 LOG init (4), /* Log the message, or print it if it can't be logged */ 14 26 14 27 SYSERR_LOG_OR_DISCARD init (5), 14 28 JUST_LOG init (5), /* Just try to log the message, and discard it if it can't be */ 14 29 14 30 14 31 /* The following constants are added to the normal severities to indicate 14 32*different sorting classes of messages. */ 14 33 14 34 SYSERR_SYSTEM_ERROR init (00), /* indicates a standard level system error */ 14 35 SYSERR_RING1_ERROR init (10), /* indicates an error detected in ring 1 (mseg_, RCP) */ 14 36 SYSERR_COVERT_CHANNEL init (20), /* indicates covert channel audit trail message */ 14 37 SYSERR_UNSUCCESSFUL_ACCESS init (30), /* indicates access denial audit trail message */ 14 38 SYSERR_SUCCESSFUL_ACCESS init (40) /* indicates access grant audit trail message */ 14 39 ) fixed bin internal static options (constant); 14 40 14 41 /* END INCLUDE FILE syserr_constants.incl.pl1 */ 2036 2037 /* BEGIN INCLUDE FILE .. syserr_binary_def.incl.pl1 */ 15 2 15 3 /* This include file has an ALM version, keep 'em in sync. */ 15 4 15 5 /* format: off */ 15 6 15 7 /* Modified January 1984 by Paul Farley to add an array of entry values 15 8* to be examined by display_cpu_error. */ 15 9 /* Modified October 1984 by EJ Sharpe to include SB_audit_message */ 15 10 /* Modified January 1985 by EJ Sharpe for SB_char_data_classes */ 15 11 /* Modified 1985-01-25, BIM: added ring alarm audit support. */ 15 12 /* Modified 1985-02-20, EJ Sharpe: added SB_ibm3270_mde, syserr_binary_(seg vol)damage_class, 15 13* also changed some codes to "SB_unused_NN" - see line comments */ 15 14 15 15 /* In the future, these will be the only constants needed in this include 15 16*file. They are the binary data class strings for messages in the new format 15 17*syserr logs. The names are all of the form SB_ZZZZZZZ_data_class where 15 18*ZZZZZZZ is the value of the data class string. Message expanders are named 15 19*expand_ZZZZZZZ_msg_ and are referenced by the log perusal tools. */ 15 20 15 21 dcl ( /* include file name */ 15 22 SB_io_status_data_class init ("io_status"), /* io_syserr_msg */ 15 23 SB_hwfault_data_class init ("hwfault"), /* syserr_fault_msg */ 15 24 SB_mos_data_class init ("mos"), /* scr */ 15 25 SB_segdamage_data_class init ("segdamage"), /* segdamage_msg */ 15 26 SB_voldamage_data_class init ("voldamage"), /* segdamage_msg (first two words) */ 15 27 SB_mdc_del_uidpath_data_class init ("mdc_del_uidpath"), /* none - 16 word UID path */ 15 28 SB_mmdam_data_class init ("mmdam"), /* syserr_mmdam_msg */ 15 29 SB_mpc_poll_data_class init ("mpc_poll"), /* poll_mpc_data */ 15 30 SB_fnp_poll_data_class init ("fnp_poll"), /* poll_fnp_data */ 15 31 SB_config_deck_data_class init ("config_deck"), /* config_deck */ 15 32 SB_vtoce_data_class init ("vtoce"), /* vtoce */ 15 33 SB_access_audit_data_class init ("access_audit"), /* access_audit_bin_header */ 15 34 SB_ibm3270_mde_data_class init ("ibm3270_mde") /* ibm3270_mpx_data */ 15 35 ) static internal char (16) varying options (constant); 15 36 15 37 15 38 /************************ 15 39*Once the syserr$binary is replaced with something that takes real data classes 15 40*and all system modules and tools are upgraded to use the new interface, the 15 41*rest of this include file may be discarded. 15 42*************************/ 15 43 15 44 /* The limit of 36 is arbitrary- there is no reason that it can not be 15 45* extended at any time. */ 15 46 15 47 dcl ( 15 48 SB_disk_err init (1), SBL_disk_err init (5), 15 49 SB_hw_fault init (2), SBL_hw_fault init (176), 15 50 SB_io_err init (3), SBL_io_err init (5), 15 51 SB_unused_4 init (4), SBL_unused_4 init (1), /* was "mos_poll" (mos poll time) */ 15 52 SB_mos_err init (5), SBL_mos_err init (2), /* mos memory error data */ 15 53 SB_unused_6 init (6), SBL_unused_6 init (1), /* was "bulk_status" (bulk dcb status) */ 15 54 SB_unused_7 init (7), SBL_unused_7 init (1), /* was "bulk_csb" (bulk csb status) */ 15 55 SB_unused_8 init (8), SBL_unused_8 init (3), /* was "free_st_1" */ 15 56 SB_unused_9 init (9), SBL_unused_9 init (2), /* was "free_st_2" */ 15 57 SB_unused_10 init (10), SBL_unused_10 init (21), /* was "unpr_add" */ 15 58 SB_zerpag init (11), SBL_zerpag init (20), 15 59 SB_unused_12 init (12), SBL_unused_12 init (20), /* was "unpr_add" */ 15 60 SB_vtoc_salv_dam init (13), SBL_vtoc_salv_dam init (20), 15 61 SB_unused_14 init (14), SBL_unused_14 init (20), /* was "page_rw_err" */ 15 62 SB_unused_15 init (15), SBL_unused_15 init (3), /* was "ruad" */ 15 63 SB_random_segdamage init (16), SBL_random_segdamage init (20), 15 64 SB_read_nc init (17), SBL_read_nc init (2), 15 65 SB_unused_18 init (18), SBL_unused_18 init (2), /* was "vtoc_err" */ 15 66 SB_mdc_del_uidpath init (19), SBL_mdc_del_uidpath init (16), 15 67 SB_ocdcm_err init (20), SBL_ocdcm_err init (5), 15 68 SB_mmdam init (21), SBL_mmdam init (2), 15 69 SB_verify_lock init (22), SBL_verify_lock init (176), 15 70 SB_io_err_detail init (23), SBL_io_err_detail init (11), 15 71 SB_mpc_poll init (24), SBL_mpc_poll init (256) /* max */, 15 72 SB_fnp_poll init (25), SBL_fnp_poll init (256) /* max */, 15 73 SB_config_deck init (26), SBL_config_deck init (256) /* 16 cards at 16 words */, 15 74 SB_vtoce init (27), SBL_vtoce init (192), /* 1 VTOCE */ 15 75 SB_access_audit init (28), SBL_access_audit init (256), /* max */ 15 76 SB_ibm3270_mde init (35), SBL_ibm3270_mde init (256), /* max */ 15 77 SB_end_of_table init (36), SBL_end_of_table init (1) 15 78 ) internal static options (constant) fixed bin; 15 79 15 80 15 81 /* The following array is a mapping of the old syserr$binary codes into the 15 82*new data classes for MR11. It is primarily used by syserr_copy to translate 15 83*the binary data codes stored in the wired syserr log (see above) into the data 15 84*classes needed by the ring-0 paged syserr log which is a new format log. It 15 85*is also used by syserr_log_util_ to translate the data classes back into the 15 86*corresponding binary code (for tools not yet upgraded to deal with the new 15 87*format log messages). */ 15 88 15 89 dcl SB_char_data_classes (36) char (16) varying internal static options (constant) 15 90 init ( "io_status", /* 1 */ 15 91 "hwfault", /* 2 */ 15 92 "io_status", /* 3 */ 15 93 "unused_4", /* 4 */ 15 94 "mos", /* 5 */ 15 95 15 96 "unused_6", /* 6 */ 15 97 "unused_7", /* 7 */ 15 98 "unused_8", /* 8 */ 15 99 "unused_9", /* 9 */ 15 100 "unused_10", /* 10 */ 15 101 15 102 "segdamage", /* 11 */ 15 103 "unused_12", /* 12 */ 15 104 "segdamage", /* 13 */ 15 105 "unused_14", /* 14 */ 15 106 "unused_15", /* 15 */ 15 107 15 108 "segdamage", /* 16 */ 15 109 "voldamage", /* 17 */ 15 110 "unused_18", /* 18 */ 15 111 "mdc_del_uidpath", /* 19 */ 15 112 "io_status", /* 20 */ 15 113 15 114 "mmdam", /* 21 */ 15 115 "hwfault", /* 22 */ 15 116 "io_status", /* 23 */ 15 117 "mpc_poll", /* 24 */ 15 118 "fnp_poll", /* 25 */ 15 119 15 120 "config_deck", /* 26 */ 15 121 "vtoce", /* 27 */ 15 122 "access_audit", /* 28 */ 15 123 "unused_29", /* 29 */ 15 124 "unused_30", /* 30 */ 15 125 "unused_31", /* 31 */ 15 126 "unused_32", /* 32 */ 15 127 "unused_33", /* 33 */ 15 128 "unused_34", /* 34 */ 15 129 "ibm3270_mde", /* 35 */ 15 130 "unused_36" /* 36 */ 15 131 ); 15 132 15 133 15 134 /* format: on */ 15 135 15 136 /* These constants are used by various tools which analyze syserr messages and 15 137*still call the old interface "syserr_log_util_". */ 15 138 15 139 dcl syserr_binary_mos_mask init ("060000000000"b3) bit (36) static options (constant); 15 140 dcl syserr_binary_seg_damage_mask init ("000374000000"b3) bit (36) static options (constant); 15 141 dcl syserr_binary_vol_damage_mask init ("003413000000"b3) bit (36) static options (constant); 15 142 dcl syserr_binary_address_damage_mask init ("002010000000"b3) bit (36) static options (constant); 15 143 15 144 dcl display_cpu_error_binary_defs (2) init ( 15 145 2, /** SB_hw_fault */ 15 146 22 /** SB_verify_lock */ 15 147 ) internal static options (constant) fixed bin; 15 148 15 149 /* END INCLUDE FILE syserr_binary_def.incl.pl1 */ 2037 2038 2039 /* BEGIN MESSAGE DOCUMENTATION 2040* 2041* Message: 2042* access_audit_$ENTRY: (USER_ID) Unexpected error obtaining caller text pointer. Caller="CALLING_PROC". 2043* 2044* S: $info 2045* 2046* T: $run 2047* 2048* M: $err 2049* An error exists in the calling sequence to access_audit_. 2050* 2051* A: $notify 2052* 2053* 2054* Message: 2055* access_audit_$ENTRY: (USER_ID) Encountered illegal meter index. OperCode=XXXXXXXXXXXX EventFlags=YYYYYYYYYYYY.( Caller="CALLING_PROC".) 2056* 2057* S: $log 2058* 2059* T: $run 2060* 2061* M: $err 2062* The access audit meters in active_hardcore_data are inconsistant 2063* with the format of the process access flags or the supplied 2064* operation code and/or event flags. 2065* 2066* A: $notify 2067* 2068* 2069* Message: 2070* access_audit_$ENTRY: (USER_ID) Unable to get entry pointer for seg [#N | PATH] due to "MESSAGE". 2071* 2072* S: $log 2073* 2074* T: $run 2075* 2076* M: $err 2077* A call to sum$getbranch_root_my or dc_find$obj_for_audit returned 2078* an unexpected error code. 2079* 2080* A: $notify 2081* 2082* 2083* Message: 2084* access_audit_$ENTRY: (USER_ID) Unable to generate path for entry at PTR due to "MESSAGE". Caller="CALLING_PROC". 2085* 2086* S: $log 2087* 2088* T: $run 2089* 2090* M: $err 2091* A call to get_pathname_ returned an unexpected error code. 2092* 2093* A: $notify 2094* 2095* 2096* Message: 2097* access_audit_: Insufficient room to allocate [ssobj|link] data. 2098* 2099* S: $info 2100* 2101* T: $run 2102* 2103* M: $err 2104* An automatic data area is too small to accomodate the storage 2105* system object or link binary info. 2106* 2107* A: $notify 2108* 2109* 2110* Message: 2111* access_audit_$ENTRY: (USER_ID) Unable to get UID path for directory seg #N due to "MESSAGE". Caller="CALLER_PROC". 2112* 2113* S: $log 2114* 2115* T: $run 2116* 2117* M: $err 2118* Although the directory is locked, a failure occurred in 2119* uid_path_util$get. 2120* 2121* A: $notify 2122* 2123* 2124* Message: 2125* access_audit_$ENTRY: (USER_ID) Unable to get raw access modes for entry PTR due to "MESSAGE". Caller="CALLER_PROC". 2126* 2127* S: $log 2128* 2129* T: $run 2130* 2131* M: $err 2132* Although the directory is locked a failure occurred in 2133* access_mode$raw. 2134* 2135* A: $notify 2136* 2137* 2138* Message: 2139* access_audit_$UNKNOWN: (USER_ID) Illegal entrypoint index "N" detected in form_audit_message_text. Caller="CALLING_PROC". 2140* 2141* S: $info 2142* 2143* T: $run 2144* 2145* M: $err 2146* There is a coding error in access_audit_ where the entrypoint index 2147* is uninitialized or set to an incorrect value. 2148* 2149* A: $notify 2150* 2151* 2152* Message: 2153* access_audit_$ENTRY: (USER_ID) Encountered illegal parameter combination. OperCode=XXXXXXXXXXXX EventFlags=YYYYYYYYYYYY.( Caller="CALLING_PROC".) 2154* 2155* S: $info 2156* 2157* T: $run 2158* 2159* M: $err 2160* There is an error in the access_operations_ entry or the eventflags 2161* passed to access audit. The error was detected in the code which 2162* decides whether the caller needs to audit its event. Because of 2163* the error, the event will be audited regardless of the process 2164* audit flags. 2165* 2166* A: $notify 2167* 2168* 2169* Message: 2170* access_audit_$ENTRY: (USER_ID) Improper calling sequence (from "get_entry_pointer_and_class"). Caller="CALLING_PROC". 2171* 2172* S: $info 2173* 2174* T: $run 2175* 2176* M: $err 2177* The entry was called with an improper argument combination. 2178* Most likely the entry will be (log check)_obj_ptr_(user) and 2179* the obj_ptr supplied will be null. 2180* 2181* A: $notify 2182* 2183* 2184* Message: 2185* access_audit_$ENTRY: (USER_ID) Called with insufficient arguments (#args= ^d).( Caller=""CALLING_PROC".) 2186* 2187* S: $info 2188* 2189* T: $run 2190* 2191* M: $err 2192* access_audit_ was invoked with an improper calling sequence. There 2193* may have been enough arguments to display the offending caller name. 2194* 2195* A: $notify 2196* 2197* 2198* END MESSAGE DOCUMENTATION */ 2199 2200 end access_audit_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0806.0 access_audit_.pl1 >spec>install>1112>access_audit_.pl1 2023 1 01/30/85 1523.9 access_audit_flags.incl.pl1 >ldd>include>access_audit_flags.incl.pl1 2024 2 01/30/85 1523.9 access_audit_eventflags.incl.pl1 >ldd>include>access_audit_eventflags.incl.pl1 2025 3 01/30/85 1523.9 access_audit_encoded_op.incl.pl1 >ldd>include>access_audit_encoded_op.incl.pl1 2026 4 02/12/85 1429.5 access_audit_bin_header.incl.pl1 >ldd>include>access_audit_bin_header.incl.pl1 2027 5 05/17/85 0615.5 access_audit_binary_def.incl.pl1 >ldd>include>access_audit_binary_def.incl.pl1 2028 6 02/12/85 1429.5 access_audit_user_info.incl.pl1 >ldd>include>access_audit_user_info.incl.pl1 2029 7 02/12/85 1429.5 access_audit_ssobj_info.incl.pl1 >ldd>include>access_audit_ssobj_info.incl.pl1 2030 8 01/30/85 1523.9 access_audit_names.incl.pl1 >ldd>include>access_audit_names.incl.pl1 2031 9 09/07/83 1610.6 aim_template.incl.pl1 >ldd>include>aim_template.incl.pl1 2032 10 05/24/82 1005.0 dir_header.incl.pl1 >ldd>include>dir_header.incl.pl1 2033 11 04/29/76 1100.6 dir_entry.incl.pl1 >ldd>include>dir_entry.incl.pl1 2034 12 04/29/76 1049.2 dir_link.incl.pl1 >ldd>include>dir_link.incl.pl1 2035 13 11/02/76 1414.7 dir_name.incl.pl1 >ldd>include>dir_name.incl.pl1 2036 14 05/17/85 0615.7 syserr_constants.incl.pl1 >ldd>include>syserr_constants.incl.pl1 2037 15 03/15/85 0953.1 syserr_binary_def.incl.pl1 >ldd>include>syserr_binary_def.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. AAB_ss_link constant fixed bin(9,0) initial packed unsigned unaligned dcl 5-18 ref 1186 AAB_ss_object constant fixed bin(9,0) initial packed unsigned unaligned dcl 5-18 ref 1130 ACCESS_AUDIT_HEADER_VERSION_3 constant fixed bin(9,0) initial unsigned dcl 4-54 ref 1379 ADMIN_OP_AUDIT_FLAG_INDEX constant fixed bin(17,0) initial dcl 1-49 ref 1983 ARH_TYPE_NO_PROXY constant fixed bin(17,0) initial dcl 4-52 ref 1377 ARH_TYPE_PROXY constant fixed bin(17,0) initial dcl 4-50 ref 1375 CC_10_100_AUDIT_FLAG_INDEX constant fixed bin(17,0) initial dcl 1-49 ref 1989 CC_1_10_AUDIT_FLAG_INDEX constant fixed bin(17,0) initial dcl 1-49 ref 1987 Default_Ctl_Str 000257 constant char(168) initial packed unaligned dcl 1251 set ref 1344* EntryNames 000552 constant char(24) initial array packed unaligned dcl 199 set ref 1056* 1134* 1149* 1190* 1214* 1627* 1714* 1734* 1748* 1922* 2007* False constant bit(1) initial dcl 177 ref 749 750 774 807 808 831 864 865 889 921 929 956 986 990 993 1016 1019 1081 1396 1599 1603 1609 1613 1624 1643 1646 1662 1685 1686 1694 1791 1792 1903 1904 1905 1906 1907 1909 1910 1954 Log_Entry_Ptr 000677 constant fixed bin(17,0) initial dcl 180 set ref 670* 1263 Log_Entry_Ptr_User constant fixed bin(17,0) initial dcl 180 set ref 691* 1263 1942 Log_General constant fixed bin(17,0) initial dcl 180 set ref 407* 1297 Log_General_User constant fixed bin(17,0) initial dcl 180 set ref 427* 1297 1942 Log_No_Process 000676 constant fixed bin(17,0) initial dcl 180 set ref 722* 1304 1394 Log_Obj_Class constant fixed bin(17,0) initial dcl 180 set ref 456* 1283 Log_Obj_Class_Range constant fixed bin(17,0) initial dcl 180 set ref 506* 1290 Log_Obj_Class_Range_User constant fixed bin(17,0) initial dcl 180 set ref 527* 1290 1942 Log_Obj_Class_User constant fixed bin(17,0) initial dcl 180 set ref 476* 1283 1942 Log_Obj_Path constant fixed bin(17,0) initial dcl 180 set ref 559* 1263 1279 Log_Obj_Path_User constant fixed bin(17,0) initial dcl 180 set ref 582* 1263 1279 1942 Log_Obj_Ptr constant fixed bin(17,0) initial dcl 180 set ref 615* 1263 Log_Obj_Ptr_User constant fixed bin(17,0) initial dcl 180 set ref 637* 1263 1942 MSG_Alloc_Link 000361 constant char(55) initial packed unaligned dcl 1179 set ref 1178* MSG_Alloc_SSObj 000460 constant char(56) initial packed unaligned dcl 1123 set ref 1122* MSG_Dir_UID 000430 constant char(93) initial packed unaligned dcl 1136 set ref 1134* 1190* MSG_Entry_Ptr 000142 constant char(76) initial packed unaligned dcl 1716 set ref 1714* MSG_Entry_Ptr_Path 000116 constant char(80) initial packed unaligned dcl 1736 set ref 1734* MSG_Gen_Path 000331 constant char(93) initial packed unaligned dcl 1216 set ref 1214* MSG_Illegal_Entry 000223 constant char(112) initial packed unaligned dcl 1313 set ref 1312* MSG_Improper_Call 000063 constant char(108) initial packed unaligned dcl 1751 set ref 1748* MSG_Insuff_Args 000033 constant char(94) initial packed unaligned dcl 1924 set ref 1922* MSG_Meter_Index 000000 constant char(108) initial packed unaligned dcl 2010 set ref 2007* MSG_Parm_Combo 000165 constant char(118) initial packed unaligned dcl 1629 set ref 1627* MSG_Raw_Access 000377 constant char(97) initial packed unaligned dcl 1151 set ref 1149* MSG_Text_Ptr 000476 constant char(86) initial packed unaligned dcl 1058 set ref 1056* PRIV_OP_AUDIT_FLAG_INDEX constant fixed bin(17,0) initial dcl 1-49 ref 1985 SB_access_audit 000524 constant fixed bin(17,0) initial dcl 15-47 set ref 1516* SYSERR_COVERT_CHANNEL constant fixed bin(17,0) initial dcl 14-7 ref 1510 SYSERR_LOG_OR_PRINT 000746 constant fixed bin(17,0) initial dcl 14-7 set ref 1134* 1149* 1190* 1214* 1509 1714* 1734* 2007* SYSERR_PRINT_ON_CONSOLE 000743 constant fixed bin(17,0) initial dcl 14-7 set ref 1056* 1122* 1178* 1312* 1627* 1748* 1922* SYSERR_SUCCESSFUL_ACCESS constant fixed bin(17,0) initial dcl 14-7 ref 1512 SYSERR_UNSUCCESSFUL_ACCESS constant fixed bin(17,0) initial dcl 14-7 ref 1514 Short_Event_Names 000525 constant char(12) initial array packed unaligned dcl 8-72 ref 1332 1337 True constant bit(1) initial dcl 176 ref 562 585 673 694 748 772 773 806 829 830 863 887 888 920 926 947 948 953 985 1011 1012 1170 1198 1402 1558 1569 1572 1577 1586 1590 1633 1640 1644 1658 1660 1720 1741 1742 1949 a_args_needed parameter fixed bin(17,0) dcl 1895 ref 1891 1900 1917 a_caller parameter char packed unaligned dcl 154 ref 400 420 449 469 499 520 552 575 608 630 663 684 715 1919 1933 a_caller_level parameter fixed bin(17,0) dcl 155 ref 400 420 449 469 499 520 552 575 608 630 663 684 715 1934 a_entry_ptr parameter pointer dcl 156 ref 663 672 684 693 a_entrypoint parameter fixed bin(17,0) dcl 1894 ref 1891 1899 a_err_code parameter fixed bin(35,0) dcl 157 ref 400 420 449 469 499 520 552 575 608 630 663 684 715 1937 a_event_flags parameter bit(36) dcl 158 ref 400 420 449 469 499 520 552 575 608 630 663 684 715 743 752 767 776 801 810 824 833 858 867 882 891 915 923 942 950 980 988 1006 1014 1935 a_group_id parameter char packed unaligned dcl 159 ref 715 725 a_info_ptr parameter pointer dcl 160 ref 400 420 449 469 499 520 552 575 608 630 663 684 715 1938 a_info_size parameter fixed bin(21,0) dcl 161 ref 400 420 449 469 499 520 552 575 608 630 663 684 715 1939 a_obj_class parameter bit(72) dcl 162 ref 449 459 469 479 858 869 882 893 a_obj_class_range parameter bit(72) array dcl 163 ref 499 509 520 531 801 812 824 835 a_obj_name parameter char packed unaligned dcl 165 ref 400 409 420 429 449 458 469 478 499 508 520 530 715 724 a_obj_path parameter char packed unaligned dcl 166 ref 552 561 575 584 915 925 942 952 a_obj_ptr parameter pointer dcl 167 ref 608 617 630 639 980 991 1006 1017 a_oper_code parameter bit(36) dcl 168 ref 400 420 449 469 499 520 552 575 608 630 663 684 715 743 753 767 777 801 811 824 834 858 868 882 892 915 924 942 951 980 989 1006 1015 1936 a_user_audit_flags parameter bit(36) dcl 169 ref 767 780 824 837 882 895 942 960 1006 1023 a_user_auth parameter bit(72) dcl 170 ref 767 779 824 836 882 894 942 959 1006 1022 a_user_info_ptr parameter pointer dcl 171 ref 420 469 520 575 630 684 1950 access_class 26 based bit(72) level 2 in structure "audit_ssobj_info" dcl 7-13 in procedure "access_audit_" set ref 1145* 1168* access_class 33 based bit(72) level 2 in structure "entry" dcl 11-8 in procedure "access_audit_" ref 1145 1168 1757 access_class 13 based bit(72) level 2 in structure "dir" dcl 10-11 in procedure "access_audit_" ref 1761 access_mode$raw 000110 constant entry external dcl 365 ref 1146 access_operations_$mseg_accept_wakeups 000026 external static bit(36) dcl 303 ref 1558 access_operations_$mseg_access_mod 000024 external static bit(36) dcl 303 ref 1558 access_operations_$mseg_access_read 000022 external static bit(36) dcl 303 ref 1558 access_operations_$mseg_attr_mod 000020 external static bit(36) dcl 303 ref 1558 access_operations_$mseg_attr_read 000016 external static bit(36) dcl 303 ref 1558 access_operations_$mseg_close 000014 external static bit(36) dcl 303 ref 1558 access_operations_$mseg_delete 000010 external static bit(36) dcl 303 ref 1558 access_operations_$mseg_open 000012 external static bit(36) dcl 303 ref 1558 access_type 0(04) 000664 automatic fixed bin(2,0) level 3 packed packed unsigned unaligned dcl 262 set ref 1637 1992 1999 active_all_rings_data$hcscnt 000030 external static fixed bin(17,0) dcl 314 ref 1701 active_hardcore_data$access_audit_check_count 000036 external static fixed bin(35,0) array dcl 325 set ref 1862* 1862 active_hardcore_data$access_audit_count 000034 external static fixed bin(35,0) array dcl 323 set ref 1859* 1859 active_hardcore_data$access_audit_cpu_time 000040 external static fixed bin(71,0) array dcl 327 set ref 1868* 1868 active_hardcore_data$access_audit_num_meters 000032 external static fixed bin(17,0) dcl 321 ref 2005 2014 active_hardcore_data$access_audit_pagefaults 000042 external static fixed bin(35,0) array dcl 329 set ref 1870* 1870 addr builtin function dcl 284 ref 1069 1078 1119 1175 1341 1373 1482 1491 1497 1516 1516 1658 1658 1660 1660 1952 admin_op 0(02) 000451 automatic bit(1) level 2 packed packed unaligned dcl 237 set ref 1586 1624 1983 admin_ops 0(31) 000665 automatic bit(1) level 2 packed packed unaligned dcl 264 set ref 1586 aim_template based structure level 1 dcl 9-12 anonymous 14(03) based bit(1) array level 3 packed packed unaligned dcl 4-22 set ref 1388* 1407* arg_count_ 000112 constant entry external dcl 366 ref 406 426 455 475 505 526 558 581 614 636 669 690 721 arg_list_ptr 000100 automatic pointer dcl 219 set ref 405* 425* 454* 474* 504* 525* 557* 580* 613* 635* 668* 689* 720* 1053* 1071* arg_list_ptr_ 000114 constant entry external dcl 367 ref 405 425 454 474 504 525 557 580 613 635 668 689 720 arh_header_ based structure level 1 dcl 4-26 arh_user_info_ based structure level 1 dcl 4-39 audit_event_flags based structure level 1 dcl 2-5 audit_flag 25(22) based bit(1) level 3 in structure "audit_ssobj_info" packed packed unaligned dcl 7-13 in procedure "access_audit_" set ref 1164* audit_flag 32(06) based bit(1) level 2 in structure "entry" packed packed unaligned dcl 11-8 in procedure "access_audit_" ref 1164 1550 audit_flags 22 based bit(36) level 2 in structure "audit_user_info" dcl 6-13 in procedure "access_audit_" ref 1967 audit_flags based structure level 1 dcl 1-13 in procedure "access_audit_" audit_link_info based structure level 1 dcl 7-46 set ref 1176 1185* 1497 1498 audit_link_info_ptr 001126 automatic pointer dcl 7-44 set ref 1175* 1176 1185 1186 1187 1192 1195 1196 1497 1498 audit_record_header based structure level 1 dcl 4-18 set ref 1482 1485 audit_record_header_proxy based structure level 1 dcl 4-22 set ref 1483 audit_record_ptr 001120 automatic pointer dcl 4-16 set ref 1373* 1375 1377 1379 1384 1384 1384 1387 1388 1389 1390 1391 1396 1397 1397 1397 1402 1403 1403 1403 1406 1407 1408 1409 1410 1412 1415 1416 1482 1483 1485 audit_ssobj_info based structure level 1 dcl 7-13 set ref 1120 1129* 1491 1492 audit_ssobj_info_ptr 001124 automatic pointer dcl 7-11 set ref 1119* 1120 1129 1130 1131 1140 1143 1144 1145 1146 1146 1155 1156 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1491 1492 audit_type 000664 automatic structure level 2 packed packed unaligned dcl 262 audit_user_info based structure level 1 dcl 6-13 set ref 1951 audit_user_info_ptr 001122 automatic pointer dcl 6-11 set ref 1323 1324 1384 1387 1388 1389 1390 1391 1950* 1951 1952* 1966 1967 authorization 16 based bit(72) array level 3 in structure "audit_record_header_proxy" dcl 4-22 in procedure "access_audit_" set ref 1390* 1409* authorization 14 based bit(72) level 2 in structure "audit_user_info" dcl 6-13 in procedure "access_audit_" set ref 1324* 1390 1966 authorization_range 16 based bit(72) array level 2 in structure "audit_user_info" dcl 6-13 in procedure "access_audit_" ref 1391 authorization_range 20 based bit(72) array level 3 in structure "audit_record_header_proxy" dcl 4-22 in procedure "access_audit_" set ref 1391* 1410* 1412* bin_info_array 001342 automatic structure array level 1 dcl 1474 set ref 1516 1516 bs 4 based bit(1) level 2 packed packed unaligned dcl 11-8 ref 1111 1550 1757 called_dc_find 000102 automatic bit(1) dcl 220 set ref 1685* 1741* 1786 1792* 1910* caller 000103 automatic char(64) packed unaligned dcl 221 set ref 1056* 1134* 1149* 1190* 1214* 1312* 1344* 1627* 1748* 1919* 1921* 1922* 1933* 2007* caller_level 000123 automatic fixed bin(17,0) dcl 222 set ref 1344* 1406 1934* caller_supplied_text_sw 000124 automatic bit(1) dcl 223 set ref 1051 1081* 1344* 1901* caller_text based char packed unaligned dcl 276 set ref 1065 1344* caller_text_buff 000125 automatic char(256) packed unaligned dcl 225 set ref 1069 1070 1078 caller_text_len 000225 automatic fixed bin(21,0) dcl 226 set ref 1053* 1063 1065 1070* 1071* 1080* 1344 1344 caller_text_ptr 000226 automatic pointer dcl 227 set ref 1053* 1065 1069* 1071* 1078* 1344 categories based bit(36) level 2 dcl 9-12 ref 1660 1660 cc_10_100 0(35) 000665 automatic bit(1) level 2 in structure "process_audit_flags" packed packed unaligned dcl 264 in procedure "access_audit_" set ref 1577 cc_10_100 0(05) 000451 automatic bit(1) level 2 in structure "event_flags" packed packed unaligned dcl 237 in procedure "access_audit_" set ref 1510 1577 1577 1624 1989 cc_1_10 0(34) 000665 automatic bit(1) level 2 in structure "process_audit_flags" packed packed unaligned dcl 264 in procedure "access_audit_" set ref 1577 cc_1_10 0(04) 000451 automatic bit(1) level 2 in structure "event_flags" packed packed unaligned dcl 237 in procedure "access_audit_" set ref 1510 1577 1577 1624 1987 char100 001422 automatic char(100) dcl 1815 set ref 1817* 1819 char528v 000230 automatic varying char(528) dcl 228 set ref 1204* 1207* 1211* 1220* 1224 1224* 1224 1227* 1227 1228* 1228 1272 1274 1276 1279* 1287* 1294* 1301* 1307* 1317* 1344 1344* char8 001420 automatic char(8) dcl 1814 set ref 1817* check_result 000435 automatic bit(1) dcl 229 set ref 758* 763 782* 787 816* 821 839* 844 873* 878 897* 902 935* 940 962* 967 999* 1004 1025* 1030 check_sw 000436 automatic bit(1) dcl 230 set ref 748* 772* 806* 829* 863* 887* 920* 947* 985* 1011* 1627 1748 1862 1903* 2007 class_str 001216 automatic char(32) packed unaligned dcl 1255 set ref 1272* 1274* 1276* 1278* 1288* 1295* 1302* 1308* 1318* 1344* code 000437 automatic fixed bin(35,0) dcl 231 set ref 1053* 1054 1131* 1132 1134* 1134* 1146* 1147 1149* 1149* 1187* 1188 1190* 1190* 1211* 1212 1214* 1214* 1705* 1706 1706* 1708 1708* 1710 1710 1712 1714* 1714* 1722 1727* 1728 1728* 1730 1730 1732 1734* 1734* 1745 control_str_arg_index 000440 automatic fixed bin(17,0) dcl 232 set ref 1053* 1067 1071* 1071 1900* 1901 convert_access_operation_ 000126 constant entry external dcl 373 ref 1344 1344 convert_status_code_ 000130 constant entry external dcl 375 ref 1817 cu_$arg_ptr_rel 000132 constant entry external dcl 376 ref 1053 dc_find$finished 000116 constant entry external dcl 368 ref 1786 dc_find$obj_for_audit 000120 constant entry external dcl 369 ref 1727 deny_level 0(02) 000665 automatic fixed bin(2,0) array level 3 packed packed unsigned unaligned dcl 264 set ref 1644 dir based structure level 1 dcl 10-11 dirsw 25(18) based bit(1) level 3 in structure "audit_ssobj_info" packed packed unaligned dcl 7-13 in procedure "access_audit_" set ref 1160* dirsw 32 based bit(1) level 2 in structure "entry" packed packed unaligned dcl 11-8 in procedure "access_audit_" ref 1115 1160 1555 display_access_class_ 000122 constant entry external dcl 370 ref 1278 1288 1324 1344 1344 display_access_class_$range 000124 constant entry external dcl 371 ref 1295 dtem 22 based bit(36) level 2 in structure "audit_ssobj_info" dcl 7-13 in procedure "access_audit_" set ref 1144* dtem 3 based bit(36) level 2 in structure "link" packed packed unaligned dcl 12-6 in procedure "access_audit_" ref 1196 dtem 22 based bit(36) level 2 in structure "audit_link_info" dcl 7-46 in procedure "access_audit_" set ref 1196* dtem 3 based bit(36) level 2 in structure "entry" dcl 11-8 in procedure "access_audit_" ref 1144 ec parameter fixed bin(35,0) dcl 1812 set ref 1809 1817* encoded_access_op based structure level 1 dcl 3-3 entry based structure level 1 dcl 11-8 entry_ptr 000442 automatic pointer dcl 233 set ref 672* 693* 928* 955* 992* 1018* 1111 1111 1115 1131 1131 1134 1134 1143 1144 1145 1146* 1149* 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1187 1187 1190 1190 1195 1196 1207 1211 1211 1214* 1224 1224 1228 1228 1550 1550 1550 1555 1555 1690 1693 1705* 1727* 1757 1757 1757 1761 1786 1786 1788 1788 1912* entry_type_str 000445 automatic char(10) packed unaligned dcl 235 set ref 1109* 1115* 1117* 1173* 1200* 1201* 1271 entry_uid 21 based bit(36) level 2 in structure "audit_ssobj_info" dcl 7-13 in procedure "access_audit_" set ref 1143* entry_uid 21 based bit(36) level 2 in structure "audit_link_info" dcl 7-46 in procedure "access_audit_" set ref 1195* entrypoint 000444 automatic fixed bin(17,0) initial dcl 234 set ref 234* 1056 1134 1149 1190 1214 1263 1263 1263 1263 1263 1263 1279 1279 1283 1283 1290 1290 1297 1297 1304 1312* 1394 1627 1714 1734 1748 1899* 1922 1942 1942 1942 1942 1942 1942 2007 entrypt_sw 32(08) based bit(1) level 2 in structure "entry" packed packed unaligned dcl 11-8 in procedure "access_audit_" ref 1166 entrypt_sw 25(24) based bit(1) level 3 in structure "audit_ssobj_info" packed packed unaligned dcl 7-13 in procedure "access_audit_" set ref 1166* err_code 000450 automatic fixed bin(35,0) dcl 236 set ref 1344 1344* 1344* 1937* error_table_$invalidsegno 000044 external static fixed bin(35,0) dcl 332 ref 1710 error_table_$mylock 000046 external static fixed bin(35,0) dcl 334 ref 1706 error_table_$no_dir 000050 external static fixed bin(35,0) dcl 335 ref 1730 error_table_$noentry 000052 external static fixed bin(35,0) dcl 336 ref 1710 1730 error_table_$root 000054 external static fixed bin(35,0) dcl 337 ref 1708 1728 event_flags 2 based bit(36) level 3 in structure "audit_record_header_proxy" dcl 4-22 in procedure "access_audit_" set ref 1416* event_flags 000451 automatic structure level 1 dcl 237 in procedure "access_audit_" set ref 752* 776* 810* 833* 867* 891* 923* 950* 988* 1014* 1333 1416 1627 1627 1935* 2007 2007 event_flags_str 001226 automatic varying char(100) dcl 1256 set ref 1331* 1335 1335* 1335 1337* 1337 1344 1344* ex_mode 24 based bit(36) level 2 dcl 7-13 set ref 1146* 1156* ex_ring_brackets 25(09) based bit(3) array level 2 in structure "audit_ssobj_info" packed packed unaligned dcl 7-13 in procedure "access_audit_" set ref 1159* ex_ring_brackets 35(09) based bit(3) array level 2 in structure "entry" packed packed unaligned dcl 11-8 in procedure "access_audit_" ref 1159 final_cpu 001470 automatic fixed bin(71,0) dcl 1856 set ref 1866* 1868 final_pagefaults 001472 automatic fixed bin(17,0) dcl 1857 set ref 1866* 1870 flags 0(18) based structure level 3 in structure "audit_record_header_proxy" packed packed unaligned dcl 4-22 in procedure "access_audit_" flags 25(18) based structure level 2 in structure "audit_ssobj_info" packed packed unaligned dcl 7-13 in procedure "access_audit_" formline_ 000136 constant entry external dcl 378 ref 1071 get_pathname_ 000134 constant entry external dcl 377 ref 1211 grant 0(01) 000451 automatic bit(1) level 2 packed packed unaligned dcl 237 set ref 1344* 1512 1599 1609 1640 2001 grant_level 000665 automatic fixed bin(2,0) array level 3 packed packed unsigned unaligned dcl 264 set ref 1640 group_id parameter char(32) dcl 1423 in procedure "parse_group_id" ref 1420 1429 group_id 000452 automatic char(32) dcl 239 in procedure "access_audit_" set ref 725* 1397* have_entry_sw 000462 automatic bit(1) dcl 240 set ref 673* 694* 750* 774* 808* 831* 865* 889* 929* 956* 993* 1019* 1111 1204 1550 1694* 1697 1722* 1745* 1757 1906* have_obj_path_sw 000463 automatic bit(1) dcl 241 set ref 562* 585* 926* 953* 990* 1016* 1725 1907* hbound builtin function dcl 285 ref 1332 1620 1992 header based structure level 2 dcl 4-22 i 000464 automatic fixed bin(17,0) dcl 242 set ref 1332* 1333 1337* 1432* 1433 1438 1438 1441 1443* 1444 1449 1449 1452 1981* 1983 1985 1987 1989 index builtin function dcl 286 ref 1432 1443 info_ptr 000466 automatic pointer dcl 243 set ref 1502 1505 1938* info_size 000470 automatic fixed bin(21,0) dcl 244 set ref 1506 1939* info_type based fixed bin(9,0) level 2 in structure "audit_link_info" packed packed unsigned unaligned dcl 7-46 in procedure "access_audit_" set ref 1186* info_type based fixed bin(9,0) level 2 in structure "audit_ssobj_info" packed packed unsigned unaligned dcl 7-13 in procedure "access_audit_" set ref 1130* initial_cpu 000472 automatic fixed bin(71,0) dcl 245 set ref 1836* 1868 initial_pagefaults 000474 automatic fixed bin(17,0) dcl 246 set ref 1836* 1870 ioa_$rsnpnnl 000140 constant entry external dcl 379 ref 1344 l_group_id 001324 automatic char(32) packed unaligned dcl 1427 set ref 1429* 1432 1435 1438 1441* 1441 1443 1446 1449 1452 lbound builtin function dcl 287 ref 1620 1992 len 2 001342 automatic fixed bin(17,0) array level 2 dcl 1474 set ref 1483* 1485* 1492* 1498* 1506* length builtin function dcl 288 ref 1070 1342 1435 1446 level 1 based fixed bin(17,0) level 2 packed packed unaligned dcl 9-12 ref 1658 1658 level$get 000142 constant entry external dcl 380 ref 1934 link based structure level 1 dcl 12-6 link_info_valid_sw 000475 automatic bit(1) dcl 247 set ref 1198* 1494 1905* local_audit_header 000530 automatic structure level 1 dcl 250 set ref 1372* 1373 local_bin_data_area 000476 automatic bit(36) array dcl 248 set ref 1119 1120 1175 1176 lock$dir_unlock 000144 constant entry external dcl 381 ref 1788 locked_dir 000574 automatic bit(1) dcl 252 set ref 1686* 1720* 1742* 1786* 1788 1791* 1909* master_dir 25(25) based bit(1) level 3 in structure "audit_ssobj_info" packed packed unaligned dcl 7-13 in procedure "access_audit_" set ref 1167* master_dir 32(09) based bit(1) level 2 in structure "entry" packed packed unaligned dcl 11-8 in procedure "access_audit_" ref 1167 max builtin function dcl 289 ref 1934 meter_index 000575 automatic fixed bin(17,0) dcl 253 set ref 1859 1859 1862 1862 1868 1868 1870 1870 1983* 1985* 1987* 1989* 1999* 2001* 2001 2005 2014* msg_text based char packed unaligned dcl 278 set ref 1516* msg_text_buff 000670 automatic char(512) dcl 266 set ref 1341 1342 1344* msg_text_len 001070 automatic fixed bin(21,0) dcl 268 set ref 1342* 1344* 1516 1516 msg_text_ptr 001072 automatic pointer dcl 269 set ref 1341* 1516 multiple_class 32(05) based bit(1) level 2 in structure "entry" packed packed unaligned dcl 11-8 in procedure "access_audit_" ref 1163 multiple_class 25(21) based bit(1) level 3 in structure "audit_ssobj_info" packed packed unaligned dcl 7-13 in procedure "access_audit_" set ref 1163* n_args 000576 automatic fixed bin(17,0) dcl 254 set ref 406* 426* 455* 475* 505* 526* 558* 581* 614* 636* 669* 690* 721* 1067 1901 1917 1919 1922* 1922 n_audit_access_types constant fixed bin(17,0) initial dcl 1-35 ref 1981 1999 2001 n_audit_objects constant fixed bin(17,0) initial dcl 1-31 ref 1981 n_pieces 001356 automatic fixed bin(17,0) dcl 1477 set ref 1481* 1482 1483 1485 1490* 1490 1491 1492 1496* 1496 1497 1498 1504* 1504 1505 1506 1516* name 4 based char(32) level 2 dcl 13-7 ref 1224 1228 name_frp 5 based bit(18) level 2 packed packed unaligned dcl 11-8 ref 1224 1228 names based structure level 1 dcl 13-7 null builtin function dcl 290 ref 927 928 954 955 992 1018 1111 1207 1502 1550 1699 1757 1911 1912 obj_class 000600 automatic bit(72) dcl 255 set ref 410* 430* 459* 479* 510* 532* 754* 778* 812* 835* 869* 893* 1278* 1288* 1609* 1613* 1688* 1701* 1757* 1761* 1763* 1913* obj_class_range 000602 automatic bit(72) array dcl 256 set ref 509* 510 531* 532 1295* obj_name defined char(168) packed unaligned dcl 259 set ref 409* 429* 458* 478* 508* 530* 724* 1287 1294 1301 1307 obj_path 000607 automatic char(168) packed unaligned dcl 258 set ref 409* 409 429* 429 458* 458 478* 478 508* 508 530* 530 561* 584* 724* 724 925* 952* 1279 1287 1287 1294 1294 1301 1301 1307 1307 1727* 1734* obj_ptr 000662 automatic pointer dcl 261 set ref 617* 639* 927* 954* 991* 1017* 1693* 1699 1701 1705 1705 1714 1714 1911* object_index 001366 automatic fixed bin(17,0) dcl 1545 set ref 1619* 1620 1620 1640 1644 object_info_valid_sw 000606 automatic bit(1) dcl 257 set ref 1170* 1488 1904* object_type 000664 automatic fixed bin(4,0) level 3 packed packed unsigned unaligned dcl 262 set ref 1619 1992 1992 1999 objects 000665 automatic structure array level 2 packed packed unaligned dcl 264 set ref 1620 1620 1992 1992 oper_code 000664 automatic structure level 1 dcl 262 set ref 753* 777* 811* 834* 868* 892* 924* 951* 989* 1015* 1344 1344 1344 1344 1415 1558 1558 1558 1558 1558 1558 1558 1558 1627 1627 1936* 2007 2007 oper_level 001367 automatic fixed bin(17,0) dcl 1546 set ref 1637* 1640 1644 operation_code 1 based bit(36) level 3 dcl 4-22 set ref 1415* p 001342 automatic pointer array level 2 dcl 1474 set ref 1482* 1491* 1497* 1505* parent_uid_path 1 based bit(36) array level 2 in structure "audit_ssobj_info" dcl 7-13 in procedure "access_audit_" set ref 1131* 1140* parent_uid_path 1 based bit(36) array level 2 in structure "audit_link_info" dcl 7-46 in procedure "access_audit_" set ref 1187* 1192* pds$access_authorization 000056 external static bit(72) dcl 338 set ref 755 813 870 932 996 1344* 1344* 1409 1970 pds$audit_flags 000060 external static bit(36) dcl 340 ref 756 814 871 933 997 1971 pds$max_access_authorization 000062 external static bit(72) dcl 341 ref 1412 pds$process_group_id 000064 external static char(32) dcl 343 set ref 1056* 1134* 1149* 1190* 1214* 1312* 1344* 1403* 1407 1627* 1714* 1734* 1748* 1922* 2007* pds$process_id 000066 external static bit(36) dcl 344 ref 1408 per_process_sw 32(02) based bit(1) level 2 in structure "entry" packed packed unaligned dcl 11-8 in procedure "access_audit_" ref 1161 per_process_sw 25(19) based bit(1) level 3 in structure "audit_ssobj_info" packed packed unaligned dcl 7-13 in procedure "access_audit_" set ref 1161* person parameter char(22) packed unaligned dcl 1424 in procedure "parse_group_id" set ref 1420 1430* 1435* 1435 1438* person 4 based char(22) array level 3 in structure "audit_record_header_proxy" packed packed unaligned dcl 4-22 in procedure "access_audit_" set ref 1384* 1397* 1403* pointer builtin function dcl 291 ref 1131 1131 1187 1187 1224 1228 1705 1705 1761 1786 1786 1788 1788 priv_op 0(03) 000451 automatic bit(1) level 2 packed packed unaligned dcl 237 set ref 1590 1624 1985 priv_ops 0(32) 000665 automatic bit(1) level 2 packed packed unaligned dcl 264 set ref 1590 process_audit_flags 000665 automatic structure level 1 dcl 264 set ref 756* 780* 814* 837* 871* 895* 933* 960* 997* 1023* 1967* 1971* process_auth 000666 automatic bit(72) dcl 265 set ref 755* 779* 813* 836* 870* 894* 932* 959* 996* 1022* 1577* 1966* 1970* process_id 13 based bit(36) level 2 in structure "audit_user_info" dcl 6-13 in procedure "access_audit_" ref 1389 process_id 15 based bit(36) array level 3 in structure "audit_record_header_proxy" dcl 4-22 in procedure "access_audit_" set ref 1389* 1408* project parameter char(9) packed unaligned dcl 1425 in procedure "parse_group_id" set ref 1420 1430* 1446* 1446 1449* project 11(18) based char(9) array level 3 in structure "audit_record_header_proxy" packed packed unaligned dcl 4-22 in procedure "access_audit_" set ref 1384* 1397* 1403* raw_mode 23 based bit(36) level 2 dcl 7-13 set ref 1146* 1155* receiver 0(06) 000451 automatic bit(1) level 2 packed packed unaligned dcl 237 set ref 1577 rel builtin function dcl 292 ref 1690 ring 12 based fixed bin(3,0) level 2 in structure "audit_user_info" packed packed unsigned unaligned dcl 6-13 in procedure "access_audit_" ref 1387 ring 14 based fixed bin(3,0) array level 3 in structure "audit_record_header_proxy" packed packed unsigned unaligned dcl 4-22 in procedure "access_audit_" set ref 1387* 1406* ring_brackets 25 based bit(3) array level 2 in structure "audit_ssobj_info" packed packed unaligned dcl 7-13 in procedure "access_audit_" set ref 1158* ring_brackets 35 based bit(3) array level 2 in structure "entry" packed packed unaligned dcl 11-8 in procedure "access_audit_" ref 1158 1555 rtrim builtin function dcl 293 ref 1224 1228 1337 safety_sw 32(04) based bit(1) level 2 in structure "entry" packed packed unaligned dcl 11-8 in procedure "access_audit_" ref 1162 safety_sw 25(20) based bit(1) level 3 in structure "audit_ssobj_info" packed packed unaligned dcl 7-13 in procedure "access_audit_" set ref 1162* security_oosw 25(23) based bit(1) level 3 in structure "audit_ssobj_info" packed packed unaligned dcl 7-13 in procedure "access_audit_" set ref 1165* security_oosw 32(07) based bit(1) level 2 in structure "entry" packed packed unaligned dcl 11-8 in procedure "access_audit_" ref 1165 segno builtin function dcl 294 ref 1134 1134 1190 1190 1211 1211 1701 1714 1714 size builtin function dcl 295 ref 1120 1120 1176 1176 1483 1485 1492 1498 special_op 000451 automatic bit(1) level 2 packed packed unaligned dcl 237 set ref 1572 string builtin function dcl 296 ref 1333 1627 1627 2007 2007 subject_is_process 0(18) based bit(1) level 4 packed packed unaligned dcl 4-22 set ref 1396* 1402* subjects 4 based structure array level 2 dcl 4-22 substr builtin function dcl 297 ref 1333 1388 1407 1435 1438 1441 1446 1449 1452 sum$getbranch_root_my 000146 constant entry external dcl 382 ref 1705 sys_info$access_class_ceiling 000070 external static bit(72) dcl 345 ref 410 430 754 778 1688 1913 sys_info$access_class_floor 000072 external static bit(72) dcl 347 ref 1410 1701 1763 sys_info$audit_covert_channel 000074 external static bit(1) dcl 349 ref 1577 sys_info$audit_successful_access 000100 external static bit(1) dcl 353 ref 1599 sys_info$audit_unsuccessful_access 000104 external static bit(1) dcl 357 ref 1603 sys_info$covert_channel_threshold 000076 external static bit(72) dcl 351 ref 1577 sys_info$successful_access_threshold 000102 external static bit(72) dcl 355 ref 1609 sys_info$unsuccessful_access_threshold 000106 external static bit(72) dcl 359 ref 1613 syserr 000150 constant entry external dcl 383 ref 1056 1122 1134 1149 1178 1190 1214 1312 1627 1714 1734 1748 1922 2007 syserr$multiple_binary 000152 constant entry external dcl 384 ref 1516 syserr_code 001357 automatic fixed bin(17,0) dcl 1478 set ref 1509* 1510* 1510 1512* 1512 1514* 1514 1516* tag parameter char(1) packed unaligned dcl 1426 in procedure "parse_group_id" set ref 1420 1430* 1452* tag 13(27) based char(1) array level 3 in structure "audit_record_header_proxy" packed packed unaligned dcl 4-22 in procedure "access_audit_" set ref 1384* 1397* 1403* test parameter bit(72) dcl 1655 set ref 1651 1658 1660 thresh parameter bit(72) dcl 1656 set ref 1651 1658 1660 type based fixed bin(9,0) level 3 packed packed unsigned unaligned dcl 4-22 set ref 1375* 1377* type_str 001260 automatic char(10) packed unaligned dcl 1257 set ref 1261* 1271* 1344 1344* uid 2 based bit(36) level 2 in structure "entry" dcl 11-8 in procedure "access_audit_" ref 1143 uid 2 based bit(36) level 2 in structure "link" packed packed unaligned dcl 12-6 in procedure "access_audit_" ref 1195 uid_path_util$get 000154 constant entry external dcl 385 ref 1131 1187 unspec builtin function dcl 298 set ref 752* 753* 756* 776* 777* 780* 810* 811* 814* 833* 834* 837* 867* 868* 871* 891* 892* 895* 923* 924* 933* 950* 951* 960* 988* 989* 997* 1014* 1015* 1023* 1129* 1185* 1344 1344 1344 1344 1372* 1415 1416 1555 1558 1558 1558 1558 1558 1558 1558 1558 1627 1627 1935* 1936* 1967* 1971* 2007 2007 usage_values 000156 constant entry external dcl 386 ref 1836 1866 user_auth_str 001273 automatic char(32) dcl 1259 set ref 1324* 1328* 1344* user_entry_sw 001074 automatic bit(1) dcl 270 set ref 749* 773* 807* 830* 864* 888* 921* 948* 986* 1012* 1321 1344* 1375 1381 1483 1949* 1954* 1964 user_group_id 001263 automatic char(32) packed unaligned dcl 1258 set ref 1323* 1327* 1344* user_id 2 based char(32) level 2 dcl 6-13 set ref 1323 1384* 1388 user_info 001075 automatic structure level 1 dcl 271 set ref 1951* 1952 version 0(09) based fixed bin(9,0) level 3 packed packed unsigned unaligned dcl 4-22 set ref 1379* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. AAB_channel internal static fixed bin(9,0) initial packed unsigned unaligned dcl 5-18 AAB_dial_service internal static fixed bin(9,0) initial packed unsigned unaligned dcl 5-18 AAB_ia_abs internal static fixed bin(9,0) initial packed unsigned unaligned dcl 5-18 AAB_ia_abs_proxy internal static fixed bin(9,0) initial packed unsigned unaligned dcl 5-18 AAB_ia_int_dmn internal static fixed bin(9,0) initial packed unsigned unaligned dcl 5-18 AAB_mseg_msg internal static fixed bin(9,0) initial packed unsigned unaligned dcl 5-18 AAB_pnt_entry internal static fixed bin(9,0) initial packed unsigned unaligned dcl 5-18 AAB_rcp_object internal static fixed bin(9,0) initial packed unsigned unaligned dcl 5-18 ADMIN_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 ANNOUNCE internal static fixed bin(17,0) initial dcl 14-7 BEEP internal static fixed bin(17,0) initial dcl 14-7 CRASH internal static fixed bin(17,0) initial dcl 14-7 FAULTS_AUDIT_FLAG_INDEX internal static fixed bin(17,0) initial dcl 1-49 FSATTR_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 FSOBJ_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 JUST_LOG internal static fixed bin(17,0) initial dcl 14-7 LOG internal static fixed bin(17,0) initial dcl 14-7 Long_Event_Names internal static char(32) initial array packed unaligned dcl 8-62 Long_Flag_Names internal static char(32) initial array packed unaligned dcl 8-42 Long_Level_Names internal static char(16) initial array packed unaligned dcl 8-28 Long_Object_Names internal static char(32) initial array packed unaligned dcl 8-10 MODIFY internal static fixed bin(2,0) initial unsigned dcl 1-58 MODIFY_ACCESS internal static fixed bin(2,0) initial unsigned dcl 1-58 NONE internal static fixed bin(2,0) initial unsigned dcl 1-58 OTHER_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 RCP_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 READ internal static fixed bin(2,0) initial unsigned dcl 1-58 SBL_access_audit internal static fixed bin(17,0) initial dcl 15-47 SBL_config_deck internal static fixed bin(17,0) initial dcl 15-47 SBL_disk_err internal static fixed bin(17,0) initial dcl 15-47 SBL_end_of_table internal static fixed bin(17,0) initial dcl 15-47 SBL_fnp_poll internal static fixed bin(17,0) initial dcl 15-47 SBL_hw_fault internal static fixed bin(17,0) initial dcl 15-47 SBL_ibm3270_mde internal static fixed bin(17,0) initial dcl 15-47 SBL_io_err internal static fixed bin(17,0) initial dcl 15-47 SBL_io_err_detail internal static fixed bin(17,0) initial dcl 15-47 SBL_mdc_del_uidpath internal static fixed bin(17,0) initial dcl 15-47 SBL_mmdam internal static fixed bin(17,0) initial dcl 15-47 SBL_mos_err internal static fixed bin(17,0) initial dcl 15-47 SBL_mpc_poll internal static fixed bin(17,0) initial dcl 15-47 SBL_ocdcm_err internal static fixed bin(17,0) initial dcl 15-47 SBL_random_segdamage internal static fixed bin(17,0) initial dcl 15-47 SBL_read_nc internal static fixed bin(17,0) initial dcl 15-47 SBL_unused_10 internal static fixed bin(17,0) initial dcl 15-47 SBL_unused_12 internal static fixed bin(17,0) initial dcl 15-47 SBL_unused_14 internal static fixed bin(17,0) initial dcl 15-47 SBL_unused_15 internal static fixed bin(17,0) initial dcl 15-47 SBL_unused_18 internal static fixed bin(17,0) initial dcl 15-47 SBL_unused_4 internal static fixed bin(17,0) initial dcl 15-47 SBL_unused_6 internal static fixed bin(17,0) initial dcl 15-47 SBL_unused_7 internal static fixed bin(17,0) initial dcl 15-47 SBL_unused_8 internal static fixed bin(17,0) initial dcl 15-47 SBL_unused_9 internal static fixed bin(17,0) initial dcl 15-47 SBL_verify_lock internal static fixed bin(17,0) initial dcl 15-47 SBL_vtoc_salv_dam internal static fixed bin(17,0) initial dcl 15-47 SBL_vtoce internal static fixed bin(17,0) initial dcl 15-47 SBL_zerpag internal static fixed bin(17,0) initial dcl 15-47 SB_access_audit_data_class internal static varying char(16) initial dcl 15-21 SB_char_data_classes internal static varying char(16) initial array dcl 15-89 SB_config_deck internal static fixed bin(17,0) initial dcl 15-47 SB_config_deck_data_class internal static varying char(16) initial dcl 15-21 SB_disk_err internal static fixed bin(17,0) initial dcl 15-47 SB_end_of_table internal static fixed bin(17,0) initial dcl 15-47 SB_fnp_poll internal static fixed bin(17,0) initial dcl 15-47 SB_fnp_poll_data_class internal static varying char(16) initial dcl 15-21 SB_hw_fault internal static fixed bin(17,0) initial dcl 15-47 SB_hwfault_data_class internal static varying char(16) initial dcl 15-21 SB_ibm3270_mde internal static fixed bin(17,0) initial dcl 15-47 SB_ibm3270_mde_data_class internal static varying char(16) initial dcl 15-21 SB_io_err internal static fixed bin(17,0) initial dcl 15-47 SB_io_err_detail internal static fixed bin(17,0) initial dcl 15-47 SB_io_status_data_class internal static varying char(16) initial dcl 15-21 SB_mdc_del_uidpath internal static fixed bin(17,0) initial dcl 15-47 SB_mdc_del_uidpath_data_class internal static varying char(16) initial dcl 15-21 SB_mmdam internal static fixed bin(17,0) initial dcl 15-47 SB_mmdam_data_class internal static varying char(16) initial dcl 15-21 SB_mos_data_class internal static varying char(16) initial dcl 15-21 SB_mos_err internal static fixed bin(17,0) initial dcl 15-47 SB_mpc_poll internal static fixed bin(17,0) initial dcl 15-47 SB_mpc_poll_data_class internal static varying char(16) initial dcl 15-21 SB_ocdcm_err internal static fixed bin(17,0) initial dcl 15-47 SB_random_segdamage internal static fixed bin(17,0) initial dcl 15-47 SB_read_nc internal static fixed bin(17,0) initial dcl 15-47 SB_segdamage_data_class internal static varying char(16) initial dcl 15-21 SB_unused_10 internal static fixed bin(17,0) initial dcl 15-47 SB_unused_12 internal static fixed bin(17,0) initial dcl 15-47 SB_unused_14 internal static fixed bin(17,0) initial dcl 15-47 SB_unused_15 internal static fixed bin(17,0) initial dcl 15-47 SB_unused_18 internal static fixed bin(17,0) initial dcl 15-47 SB_unused_4 internal static fixed bin(17,0) initial dcl 15-47 SB_unused_6 internal static fixed bin(17,0) initial dcl 15-47 SB_unused_7 internal static fixed bin(17,0) initial dcl 15-47 SB_unused_8 internal static fixed bin(17,0) initial dcl 15-47 SB_unused_9 internal static fixed bin(17,0) initial dcl 15-47 SB_verify_lock internal static fixed bin(17,0) initial dcl 15-47 SB_voldamage_data_class internal static varying char(16) initial dcl 15-21 SB_vtoc_salv_dam internal static fixed bin(17,0) initial dcl 15-47 SB_vtoce internal static fixed bin(17,0) initial dcl 15-47 SB_vtoce_data_class internal static varying char(16) initial dcl 15-21 SB_zerpag internal static fixed bin(17,0) initial dcl 15-47 SPECIAL_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 SYSERR_CRASH_SYSTEM internal static fixed bin(17,0) initial dcl 14-7 SYSERR_LOG_OR_DISCARD internal static fixed bin(17,0) initial dcl 14-7 SYSERR_PRINT_WITH_ALARM internal static fixed bin(17,0) initial dcl 14-7 SYSERR_RING1_ERROR internal static fixed bin(17,0) initial dcl 14-7 SYSERR_SYSTEM_ERROR internal static fixed bin(17,0) initial dcl 14-7 SYSERR_TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 14-7 Short_Flag_Names internal static char(12) initial array packed unaligned dcl 8-50 Short_Level_Names internal static char(2) initial array packed unaligned dcl 8-35 Short_Object_Names internal static char(8) initial array packed unaligned dcl 8-19 TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 14-7 audit_binary_expanders internal static varying char(13) initial array dcl 5-46 audit_flags_alt based structure level 1 dcl 1-24 audit_link_info_version internal static fixed bin(9,0) initial packed unsigned unaligned dcl 7-54 audit_ssobj_info_version internal static fixed bin(9,0) initial packed unsigned unaligned dcl 7-39 audit_user_info_version_1 internal static char(8) initial packed unaligned dcl 6-23 display_cpu_error_binary_defs internal static fixed bin(17,0) initial array dcl 15-144 dp automatic pointer dcl 10-9 ep automatic pointer dcl 11-6 n_audit_flags internal static fixed bin(17,0) initial dcl 1-33 np automatic pointer dcl 13-5 syserr_binary_address_damage_mask internal static bit(36) initial packed unaligned dcl 15-142 syserr_binary_mos_mask internal static bit(36) initial packed unaligned dcl 15-139 syserr_binary_seg_damage_mask internal static bit(36) initial packed unaligned dcl 15-140 syserr_binary_vol_damage_mask internal static bit(36) initial packed unaligned dcl 15-141 version_number_2 internal static fixed bin(17,0) initial dcl 10-84 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR_EXIT 004222 constant label dcl 2019 ref 1928 ILLEGAL_INDEX 010373 constant label dcl 2007 set ref 1992 access_audit_ 001044 constant entry external dcl 29 build_object_info 004370 constant entry internal dcl 1106 ref 1047 check_flags_and_thresholds 006667 constant entry internal dcl 1542 ref 412 432 461 481 512 534 566 589 621 643 758 782 816 839 873 897 935 962 999 1025 check_general 003075 constant entry external dcl 743 check_general_user 003162 constant entry external dcl 767 check_obj_class 003435 constant entry external dcl 858 check_obj_class_range 003253 constant entry external dcl 801 check_obj_class_range_user 003343 constant entry external dcl 824 check_obj_class_user 003525 constant entry external dcl 882 check_obj_path 003617 constant entry external dcl 915 check_obj_path_user 003725 constant entry external dcl 942 check_obj_ptr 004035 constant entry external dcl 980 check_obj_ptr_user 004131 constant entry external dcl 1006 error_text 007741 constant entry internal dcl 1809 ref 1134 1134 1149 1149 1190 1190 1214 1214 1344 1344 1714 1714 1734 1734 form_audit_message_text 005351 constant entry internal dcl 1248 ref 1084 form_audit_record_header 006167 constant entry internal dcl 1366 ref 1086 get_entry_ptr_and_class 007323 constant entry internal dcl 1682 ref 564 587 619 641 675 696 930 957 994 1020 log_audit_message 004231 constant entry internal dcl 1044 ref 412 432 461 481 512 534 566 589 621 643 677 698 727 log_entry_ptr 002551 constant entry external dcl 663 log_entry_ptr_user 002647 constant entry external dcl 684 log_general 001064 constant entry external dcl 400 log_general_user 001207 constant entry external dcl 420 log_no_process 002754 constant entry external dcl 715 log_obj_class 001334 constant entry external dcl 449 log_obj_class_range 001607 constant entry external dcl 499 log_obj_class_range_user 001741 constant entry external dcl 520 log_obj_class_user 001461 constant entry external dcl 469 log_obj_path 002067 constant entry external dcl 552 log_obj_path_user 002205 constant entry external dcl 575 log_obj_ptr 002332 constant entry external dcl 608 log_obj_ptr_user 002443 constant entry external dcl 630 meter_start 007764 constant entry internal dcl 1833 ref 404 424 453 473 503 524 556 579 612 634 667 688 719 747 771 805 828 862 886 919 946 984 1010 meter_stop 007777 constant entry internal dcl 1853 ref 415 435 464 484 515 537 570 593 625 647 679 700 729 761 785 819 842 876 900 938 965 1002 1028 no_caller_text 004360 constant label dcl 1078 ref 1061 1063 1065 parse_group_id 006421 constant entry internal dcl 1420 ref 1384 1397 1403 set_meter_index 010276 constant entry internal dcl 1977 ref 760 784 818 841 875 899 937 964 1001 1027 setup_log_entry 010050 constant entry internal dcl 1891 ref 407 427 456 476 506 527 559 582 615 637 670 691 722 setup_path 005125 constant label dcl 1204 ref 1125 1181 unlock_dir 007703 constant entry internal dcl 1783 ref 568 591 623 645 931 958 995 1021 1049 within_threshold 007273 constant entry internal dcl 1651 ref 1577 1609 1613 write_log_message 006530 constant entry internal dcl 1471 ref 1088 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 12020 12200 10651 12030 Length 13160 10651 160 744 1147 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME access_audit_ 1356 external procedure is an external procedure. log_audit_message internal procedure shares stack frame of external procedure access_audit_. build_object_info internal procedure shares stack frame of external procedure access_audit_. form_audit_message_text internal procedure shares stack frame of external procedure access_audit_. form_audit_record_header internal procedure shares stack frame of external procedure access_audit_. parse_group_id internal procedure shares stack frame of external procedure access_audit_. write_log_message internal procedure shares stack frame of external procedure access_audit_. check_flags_and_thresholds internal procedure shares stack frame of external procedure access_audit_. within_threshold internal procedure shares stack frame of external procedure access_audit_. get_entry_ptr_and_class internal procedure shares stack frame of external procedure access_audit_. unlock_dir internal procedure shares stack frame of external procedure access_audit_. error_text internal procedure shares stack frame of external procedure access_audit_. meter_start internal procedure shares stack frame of external procedure access_audit_. meter_stop internal procedure shares stack frame of external procedure access_audit_. setup_log_entry internal procedure shares stack frame of external procedure access_audit_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME access_audit_ 000100 arg_list_ptr access_audit_ 000102 called_dc_find access_audit_ 000103 caller access_audit_ 000123 caller_level access_audit_ 000124 caller_supplied_text_sw access_audit_ 000125 caller_text_buff access_audit_ 000225 caller_text_len access_audit_ 000226 caller_text_ptr access_audit_ 000230 char528v access_audit_ 000435 check_result access_audit_ 000436 check_sw access_audit_ 000437 code access_audit_ 000440 control_str_arg_index access_audit_ 000442 entry_ptr access_audit_ 000444 entrypoint access_audit_ 000445 entry_type_str access_audit_ 000450 err_code access_audit_ 000451 event_flags access_audit_ 000452 group_id access_audit_ 000462 have_entry_sw access_audit_ 000463 have_obj_path_sw access_audit_ 000464 i access_audit_ 000466 info_ptr access_audit_ 000470 info_size access_audit_ 000472 initial_cpu access_audit_ 000474 initial_pagefaults access_audit_ 000475 link_info_valid_sw access_audit_ 000476 local_bin_data_area access_audit_ 000530 local_audit_header access_audit_ 000574 locked_dir access_audit_ 000575 meter_index access_audit_ 000576 n_args access_audit_ 000600 obj_class access_audit_ 000602 obj_class_range access_audit_ 000606 object_info_valid_sw access_audit_ 000607 obj_path access_audit_ 000662 obj_ptr access_audit_ 000664 oper_code access_audit_ 000665 process_audit_flags access_audit_ 000666 process_auth access_audit_ 000670 msg_text_buff access_audit_ 001070 msg_text_len access_audit_ 001072 msg_text_ptr access_audit_ 001074 user_entry_sw access_audit_ 001075 user_info access_audit_ 001120 audit_record_ptr access_audit_ 001122 audit_user_info_ptr access_audit_ 001124 audit_ssobj_info_ptr access_audit_ 001126 audit_link_info_ptr access_audit_ 001216 class_str form_audit_message_text 001226 event_flags_str form_audit_message_text 001260 type_str form_audit_message_text 001263 user_group_id form_audit_message_text 001273 user_auth_str form_audit_message_text 001324 l_group_id parse_group_id 001342 bin_info_array write_log_message 001356 n_pieces write_log_message 001357 syserr_code write_log_message 001366 object_index check_flags_and_thresholds 001367 oper_level check_flags_and_thresholds 001420 char8 error_text 001422 char100 error_text 001470 final_cpu meter_stop 001472 final_pagefaults meter_stop THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a r_e_as r_ne_as r_le_a call_ext_out_desc call_ext_out return_mac signal_op ext_entry ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. access_mode$raw arg_count_ arg_list_ptr_ convert_access_operation_ convert_status_code_ cu_$arg_ptr_rel dc_find$finished dc_find$obj_for_audit display_access_class_ display_access_class_$range formline_ get_pathname_ ioa_$rsnpnnl level$get lock$dir_unlock sum$getbranch_root_my syserr syserr$multiple_binary uid_path_util$get usage_values THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. access_operations_$mseg_accept_wakeups access_operations_$mseg_access_mod access_operations_$mseg_access_read access_operations_$mseg_attr_mod access_operations_$mseg_attr_read access_operations_$mseg_close access_operations_$mseg_delete access_operations_$mseg_open active_all_rings_data$hcscnt active_hardcore_data$access_audit_check_count active_hardcore_data$access_audit_count active_hardcore_data$access_audit_cpu_time active_hardcore_data$access_audit_num_meters active_hardcore_data$access_audit_pagefaults error_table_$invalidsegno error_table_$mylock error_table_$no_dir error_table_$noentry error_table_$root pds$access_authorization pds$audit_flags pds$max_access_authorization pds$process_group_id pds$process_id sys_info$access_class_ceiling sys_info$access_class_floor sys_info$audit_covert_channel sys_info$audit_successful_access sys_info$audit_unsuccessful_access sys_info$covert_channel_threshold sys_info$successful_access_threshold sys_info$unsuccessful_access_threshold LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 234 001040 29 001043 400 001054 404 001122 405 001123 406 001132 407 001141 409 001145 410 001155 412 001162 415 001170 416 001171 420 001200 424 001247 425 001250 426 001257 427 001266 429 001272 430 001302 432 001307 435 001315 436 001316 449 001325 453 001374 454 001375 455 001404 456 001413 458 001417 459 001427 461 001433 464 001441 465 001442 469 001451 473 001523 474 001524 475 001533 476 001542 478 001546 479 001556 481 001562 484 001570 485 001571 499 001600 503 001647 504 001650 505 001657 506 001666 508 001672 509 001702 510 001711 512 001713 515 001721 516 001722 520 001731 524 002003 525 002004 526 002013 527 002022 530 002026 531 002036 532 002045 534 002047 537 002055 538 002056 552 002065 556 002125 557 002126 558 002135 559 002144 561 002150 562 002160 564 002162 566 002163 568 002172 570 002173 571 002174 575 002203 579 002245 580 002246 581 002255 582 002264 584 002270 585 002300 587 002302 589 002303 591 002312 593 002313 594 002314 608 002323 612 002365 613 002366 614 002375 615 002404 617 002410 619 002413 621 002414 623 002423 625 002424 626 002425 630 002434 634 002500 635 002501 636 002510 637 002517 639 002523 641 002526 643 002527 645 002536 647 002537 648 002540 663 002547 667 002602 668 002603 669 002612 670 002621 672 002625 673 002631 675 002633 677 002634 679 002635 680 002636 684 002645 688 002702 689 002703 690 002712 691 002721 693 002725 694 002731 696 002733 698 002734 700 002735 701 002736 715 002745 719 003017 720 003020 721 003027 722 003036 724 003042 725 003052 727 003060 729 003061 730 003062 743 003071 747 003113 748 003114 749 003116 750 003117 752 003120 753 003122 754 003124 755 003131 756 003135 758 003137 760 003141 761 003142 763 003143 767 003155 771 003204 772 003205 773 003207 774 003210 776 003211 777 003213 778 003215 779 003222 780 003226 782 003230 784 003232 785 003233 787 003234 801 003246 805 003273 806 003274 807 003276 808 003277 810 003300 811 003302 812 003304 813 003310 814 003315 816 003317 818 003321 819 003322 821 003323 824 003335 828 003367 829 003370 830 003372 831 003373 833 003374 834 003376 835 003400 836 003404 837 003410 839 003412 841 003414 842 003415 844 003416 858 003430 862 003455 863 003456 864 003460 865 003461 867 003462 868 003464 869 003466 870 003472 871 003477 873 003501 875 003503 876 003504 878 003505 882 003517 886 003551 887 003552 888 003554 889 003555 891 003556 892 003560 893 003562 894 003566 895 003572 897 003574 899 003576 900 003577 902 003600 915 003612 919 003642 920 003643 921 003645 923 003646 924 003650 925 003652 926 003662 927 003664 928 003666 929 003667 930 003670 931 003671 932 003672 933 003677 935 003701 937 003703 938 003704 940 003705 942 003717 946 003754 947 003755 948 003757 950 003760 951 003762 952 003764 953 003774 954 003776 955 004000 956 004001 957 004002 958 004003 959 004004 960 004010 962 004012 964 004014 965 004015 967 004016 980 004030 984 004055 985 004056 986 004060 988 004061 989 004063 990 004065 991 004066 992 004071 993 004073 994 004074 995 004075 996 004076 997 004103 999 004105 1001 004107 1002 004110 1004 004111 1006 004123 1010 004155 1011 004156 1012 004160 1014 004161 1015 004163 1016 004165 1017 004166 1018 004171 1019 004173 1020 004174 1021 004175 1022 004176 1023 004202 1025 004204 1027 004206 1028 004207 1030 004210 2019 004222 1044 004231 1047 004232 1049 004233 1051 004234 1053 004237 1054 004256 1056 004260 1061 004313 1063 004314 1065 004316 1067 004323 1069 004326 1070 004330 1071 004332 1076 004357 1078 004360 1080 004362 1081 004363 1084 004364 1086 004365 1088 004366 1090 004367 1106 004370 1109 004371 1111 004374 1115 004406 1117 004415 1119 004420 1120 004422 1122 004425 1125 004442 1129 004443 1130 004446 1131 004450 1132 004465 1134 004467 1140 004542 1143 004552 1144 004556 1145 004560 1146 004564 1147 004601 1149 004603 1155 004652 1156 004654 1158 004655 1159 004666 1160 004674 1161 004701 1162 004706 1163 004713 1164 004720 1165 004725 1166 004732 1167 004737 1168 004744 1170 004750 1171 004752 1173 004753 1175 004756 1176 004760 1178 004763 1181 005000 1185 005001 1186 005004 1187 005006 1188 005023 1190 005025 1192 005100 1195 005110 1196 005114 1198 005116 1199 005120 1200 005121 1204 005125 1207 005135 1211 005146 1212 005173 1214 005175 1220 005244 1221 005250 1224 005251 1227 005310 1228 005317 1233 005350 1248 005351 1261 005352 1263 005355 1271 005372 1272 005375 1274 005406 1276 005417 1278 005430 1279 005444 1282 005456 1283 005457 1287 005463 1288 005470 1289 005504 1290 005505 1294 005511 1295 005516 1296 005532 1297 005533 1301 005537 1302 005544 1303 005547 1304 005550 1307 005552 1308 005557 1309 005562 1312 005563 1317 005613 1318 005620 1321 005623 1323 005626 1324 005632 1325 005643 1327 005644 1328 005647 1331 005652 1332 005653 1333 005657 1335 005664 1337 005703 1339 005736 1341 005752 1342 005754 1344 005756 1352 006166 1366 006167 1372 006170 1373 006173 1375 006175 1377 006203 1379 006205 1381 006207 1384 006212 1387 006233 1388 006241 1389 006251 1390 006253 1391 006257 1394 006277 1396 006302 1397 006304 1400 006325 1402 006326 1403 006330 1406 006352 1407 006360 1408 006372 1409 006374 1410 006401 1412 006406 1415 006413 1416 006416 1418 006420 1420 006421 1429 006423 1430 006427 1432 006443 1433 006454 1435 006455 1436 006460 1438 006461 1441 006467 1443 006475 1444 006506 1446 006507 1447 006512 1449 006513 1452 006521 1454 006527 1471 006530 1481 006531 1482 006533 1483 006536 1485 006546 1488 006551 1490 006553 1491 006554 1492 006560 1493 006563 1494 006564 1496 006566 1497 006567 1498 006573 1502 006576 1504 006602 1505 006603 1506 006607 1509 006612 1510 006614 1512 006622 1514 006630 1516 006632 1518 006666 1542 006667 1550 006671 1555 006706 1558 006715 1568 006742 1569 006743 1572 006746 1577 006755 1586 007021 1590 007033 1599 007045 1602 007060 1603 007061 1609 007067 1612 007106 1613 007107 1619 007124 1620 007127 1624 007133 1627 007141 1633 007216 1637 007222 1640 007226 1643 007247 1644 007252 1646 007270 1651 007273 1658 007275 1660 007313 1662 007321 1682 007323 1685 007324 1686 007325 1688 007326 1690 007333 1693 007335 1694 007337 1697 007340 1699 007343 1701 007347 1705 007361 1706 007401 1708 007407 1710 007413 1712 007420 1714 007422 1718 007471 1720 007472 1722 007474 1724 007477 1725 007500 1727 007502 1728 007521 1730 007527 1732 007534 1734 007536 1738 007601 1741 007602 1742 007604 1745 007605 1746 007610 1748 007611 1757 007652 1761 007670 1763 007675 1765 007702 1783 007703 1786 007704 1788 007722 1791 007736 1792 007737 1794 007740 1809 007741 1817 007743 1819 007756 1833 007764 1836 007765 1838 007776 1853 007777 1859 010000 1862 010007 1866 010016 1868 010026 1870 010037 1873 010047 1891 010050 1899 010052 1900 010054 1901 010057 1903 010062 1904 010063 1905 010064 1906 010065 1907 010066 1909 010067 1910 010070 1911 010071 1912 010073 1913 010074 1917 010101 1919 010104 1921 010115 1922 010120 1928 010165 1933 010166 1934 010174 1935 010210 1936 010212 1937 010214 1938 010216 1939 010221 1942 010223 1949 010240 1950 010242 1951 010245 1952 010250 1953 010252 1954 010253 1964 010254 1966 010257 1967 010263 1968 010265 1970 010266 1971 010273 1977 010275 1981 010277 1983 010302 1985 010311 1987 010320 1989 010327 1992 010336 1999 010354 2001 010362 2005 010367 2007 010373 2014 010450 2017 010453 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved