COMPILATION LISTING OF SEGMENT pnt_db_util_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 05/09/85 1148.8 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 4* * * 5* *********************************************************** */ 6 /* format: style2 */ 7 8 /* PNT_DB_UTIL_: This program supports the database interfaces to PNTs. 9* It assumes its caller is in the inner ring and trusts the PNT ptr 10* (not really a pointer to the PNT, but to the descriptor for the PNT). 11* It does no parameter copying or validation level manipulations (this 12* is the responsibility of pnt_db_interface_. It makes no assumptions 13* about THE PNT (>sc1>PNT.pnt) and accepts pathnames to open and close 14* the PNT and PNT ptrs to perform other manipulations on PNTs. */ 15 16 pnt_db_util_: 17 procedure (); 18 19 return; 20 21 /* Written 1984-08-09 by E. Swenson 22* Modification history: 23* 1985-01-25 by E. Swenson to add auditing of PNT changes. 24**/ 25 26 /* Parameters */ 27 28 dcl P_audit_flag bit (1) aligned parameter; 29 /* whether to audit or not */ 30 dcl P_code fixed bin (35) parameter; 31 dcl P_pnt_info_ptr ptr parameter; 32 dcl P_dirname char (*) parameter; 33 dcl P_entryname char (*) parameter; 34 dcl P_num_entries fixed bin (35) parameter; 35 dcl P_password char (*) parameter; 36 dcl P_person_id char (*) parameter; 37 dcl P_pnt_entry_ptr ptr parameter; 38 dcl P_pnt_ptr ptr parameter; 39 dcl P_record_no fixed bin (35) parameter; 40 dcl P_set_password bit (1) aligned parameter; 41 dcl P_set_network_password bit (1) aligned parameter; 42 dcl P_short_password bit (1) aligned parameter; 43 44 /* Automatic */ 45 46 dcl audit_flag bit (1) aligned; /* whether to audit or not */ 47 dcl brief_description char (256) varying;/* brief description of modifications */ 48 dcl code fixed bin (35); 49 dcl 1 event_flags aligned like audit_event_flags automatic; 50 dcl key char (32); /* Key used by ms_table_mgr_ for hashing */ 51 dcl notify_as bit (1) aligned; /* whether to notify A.S. of PNT change */ 52 dcl operation_code bit (36) aligned; /* access_operations_ code */ 53 dcl 1 PAR aligned like pnt_audit_record automatic; 54 dcl pnt_entry_ptr ptr; /* Copy of caller-supplied pnt entry ptr */ 55 dcl pnt_ptr ptr; /* Copy of caller supplied pnt tag. */ 56 dcl tcode fixed bin (35); /* Temporary status code for alias processing */ 57 58 dcl 1 local_pnt_entry aligned like pnt_entry automatic; 59 60 /* Based */ 61 62 dcl 1 new_pnt_entry aligned like pnt_entry based (pnt_entry_ptr); 63 64 /* External Entries */ 65 66 dcl access_audit_r1_$check_general 67 entry (bit (36) aligned, bit (36) aligned) returns (bit (1) aligned); 68 dcl access_audit_r1_$log_general 69 entry options (variable); 70 dcl hcs_$level_get entry (fixed bin (3)); 71 dcl ms_table_mgr_$abs_entry 72 entry (ptr, fixed bin (35), char (*), bit (1) aligned, ptr, fixed bin (35), 73 fixed bin (35)); 74 dcl ms_table_mgr_$close entry (ptr, fixed bin (35)); 75 dcl ms_table_mgr_$delete_entry 76 entry (ptr, char (*), fixed bin (35)); 77 dcl ms_table_mgr_$delete_entry_ignore_mylock 78 entry (ptr, char (*), fixed bin (35)); 79 dcl ms_table_mgr_$find_entry 80 entry (ptr, char (*), ptr, bit (1) aligned, fixed bin (35), fixed bin (35)); 81 dcl ms_table_mgr_$get_change_clock 82 entry (ptr, fixed bin (35), fixed bin (35)); 83 dcl ms_table_mgr_$new_entry 84 entry (ptr, char (*), ptr, fixed bin (35)); 85 dcl ms_table_mgr_$new_entry_ignore_mylock 86 entry (ptr, char (*), ptr, fixed bin (35)); 87 dcl ms_table_mgr_$open entry (char (*), char (*), char (*) aligned, ptr, ptr, fixed bin (35)); 88 dcl ms_table_mgr_$table_data 89 entry (ptr, ptr, ptr, fixed bin (35), fixed bin (35)); 90 dcl ms_table_mgr_$unlock entry (ptr, fixed bin (35)); 91 dcl ms_table_mgr_$update_entry 92 entry (ptr, ptr, fixed bin (35)); 93 dcl ms_table_mgr_$update_entry_dont_unlock 94 entry (ptr, ptr, fixed bin (35)); 95 dcl pnt_notify_as_ entry (char (*), fixed bin (35)); 96 97 /* External Static */ 98 99 dcl access_operations_$pnt_entry_add 100 bit (36) aligned external; 101 dcl access_operations_$pnt_entry_admin_read 102 bit (36) aligned external; 103 dcl access_operations_$pnt_entry_delete 104 bit (36) aligned external; 105 dcl access_operations_$pnt_entry_login_read 106 bit (36) aligned external; 107 dcl access_operations_$pnt_entry_modify 108 bit (36) aligned external; 109 dcl access_operations_$pnt_entry_network_read 110 bit (36) aligned external; 111 dcl access_operations_$pnt_entry_priv_read 112 bit (36) aligned external; 113 dcl error_table_$bad_arg fixed bin (35) external static; 114 dcl error_table_$bad_password 115 fixed bin (35) external static; 116 dcl error_table_$checksum_failure 117 fixed bin (35) external static; 118 dcl error_table_$no_record fixed bin (35) external static; 119 dcl error_table_$unimplemented_version 120 fixed bin (35) external static; 121 122 /* Constant */ 123 124 dcl ME char (32) initial ("pnt_db_util_") internal static options (constant); 125 126 dcl RING_1 fixed bin (3) initial (1) internal static options (constant); 127 128 dcl ( 129 ADD initial (1), 130 DELETE initial (2), 131 MODIFY initial (3), 132 ADMIN_READ initial (4), 133 PRIV_READ initial (5), 134 NETWORK_READ initial (6), 135 LOGIN_READ initial (7) 136 ) fixed bin (17) internal static options (constant); 137 138 /* Builtin */ 139 140 dcl addr builtin; 141 dcl null builtin; 142 dcl size builtin; 143 dcl string builtin; 144 dcl substr builtin; 145 dcl unspec builtin; 146 147 /* Program */ 148 /* * * * * * * * * * OPEN * * * * * * * * * * * * * */ 149 open: 150 entry (P_dirname, P_entryname, P_audit_flag, P_pnt_ptr, P_code); 151 152 /**** This entry opens the specified PNT. At present, we do no 153* auditing for PNT opens and closes and rely on the actual 154* retrieve/updtate entries for auditing. The audit flag for this 155* entry is ignored, but available for future use. 156*****/ 157 158 audit_flag = P_audit_flag; 159 P_code = 0; 160 call ms_table_mgr_$open (P_dirname, P_entryname, "PNT", P_pnt_ptr, (null ()), code); 161 goto RETURN_TO_CALLER; 162 163 /* * * * * * * * * * CLOSE * * * * * * * * * */ 164 close: 165 entry (P_pnt_ptr, P_audit_flag, P_code); 166 167 /**** This entry closes the specified PNT. At present we do no auditing 168* of PNT opens and closes, but rely on the retrieve/update entries to 169* perform auditing. The ignored audit_flag is for possible future use 170* if required. */ 171 172 audit_flag = P_audit_flag; 173 P_code = 0; 174 call ms_table_mgr_$close (P_pnt_ptr, code); 175 goto RETURN_TO_CALLER; 176 177 /* * * * * * * * * * GET_ABS_ENTRY * * * * * * * * * */ 178 179 /**** This entrypoint returns an arbitrary entry in the PNT, 180* identified by record number. It does not return passwords. 181* On a checksum failure, it returns the error code, since 182* none of the data is very trustworthy. 183* */ 184 185 get_abs_entry: 186 entry (P_pnt_ptr, P_audit_flag, P_record_no, P_pnt_entry_ptr, P_code); 187 188 pnt_ptr = P_pnt_ptr; 189 audit_flag = P_audit_flag; 190 P_code = 0; 191 call get_local_entry (P_record_no, key, code); 192 if code ^= 0 193 then goto RETURN_TO_CALLER; 194 195 /**** Don't return alias entries */ 196 197 if local_pnt_entry.user_id ^= key 198 then do; /* alias */ 199 code = error_table_$no_record; 200 goto RETURN_TO_CALLER; 201 end; 202 203 local_pnt_entry.password, local_pnt_entry.network_password = ""; 204 local_pnt_entry.short_pw, local_pnt_entry.short_network_pw = "0"b; 205 P_pnt_entry_ptr -> pnt_entry = local_pnt_entry; 206 call AUDIT_READ (ADMIN_READ); 207 go to RETURN_TO_CALLER; 208 209 /* * * * * * * * * * PRIV_GET_ABS_ENTRY * * * * * * * * */ 210 211 /**** This entrypoint returns an arbitrary entry, including passwords. 212* It treats checksum failures like get_abs_entry. */ 213 214 priv_get_abs_entry: 215 entry (P_pnt_ptr, P_audit_flag, P_record_no, P_pnt_entry_ptr, P_code); 216 217 pnt_ptr = P_pnt_ptr; 218 audit_flag = P_audit_flag; 219 P_code = 0; 220 call get_local_entry (P_record_no, key, code); 221 if code ^= 0 222 then goto RETURN_TO_CALLER; 223 224 /**** Don't return alias entries */ 225 226 if local_pnt_entry.user_id ^= key 227 then do; /* alias */ 228 code = error_table_$no_record; 229 goto RETURN_TO_CALLER; 230 end; 231 232 P_pnt_entry_ptr -> pnt_entry = local_pnt_entry; 233 call AUDIT_READ (PRIV_READ); 234 go to RETURN_TO_CALLER; 235 236 /* * * * * * * * * * ADMIN_GET_ENTRY * * * * * * * * * */ 237 238 /**** This entrypoint takes a user name and returns the entry. 239* It will return data in spite of a checksum failure, 240* but it returns the error code as well. It returns 241* no passwords. If the checksum is on the alias, though, 242* we have to give up (and return no-entry). */ 243 244 admin_get_entry: 245 entry (P_pnt_ptr, P_audit_flag, P_person_id, P_pnt_entry_ptr, P_code); 246 247 pnt_ptr = P_pnt_ptr; 248 audit_flag = P_audit_flag; 249 P_code = 0; 250 call find_local_entry (P_person_id, code); 251 if code ^= 0 & code ^= error_table_$checksum_failure 252 then go to RETURN_TO_CALLER; 253 254 local_pnt_entry.password, local_pnt_entry.network_password = ""; 255 local_pnt_entry.short_pw, local_pnt_entry.short_network_pw = "0"b; 256 257 P_pnt_entry_ptr -> pnt_entry = local_pnt_entry; 258 call AUDIT_READ (ADMIN_READ); 259 go to RETURN_TO_CALLER; 260 261 /* * * * * * * * * * LOGIN_GET_ENTRY * * * * * * * * * */ 262 263 /**** This entrypoint takes a user name and a password, 264*and returns the entry (with passwords blanked). 265*The incoming password must be scrambled, to encourage early scrambling. 266*This entrypoint will return entry checksum errors 267*to the user, and NOT return the entry. 268* 269*Note that we have to return the entry even on bad password, 270*so that the answering service can continue to maintain all 271*the last bad password garbage. This should be changed. */ 272 273 login_get_entry: 274 entry (P_pnt_ptr, P_audit_flag, P_person_id, P_password, P_pnt_entry_ptr, P_code); 275 276 pnt_ptr = P_pnt_ptr; 277 audit_flag = P_audit_flag; 278 P_code = 0; 279 call find_local_entry (P_person_id, code); 280 if code ^= 0 281 then go to RETURN_TO_CALLER; /* checksum errors and all */ 282 283 /**** Note that we return the error code error_table_$bad_password if 284* either there is no password for this entry, or if the password 285* was incorrectly specified. We return the entry anyway since the 286* answering service must be able to update the bad password info. */ 287 288 if ^pnt_entry.flags.has_password 289 then code = error_table_$bad_password; 290 else if (local_pnt_entry.short_pw & (substr (P_password, 1, 8) ^= substr (local_pnt_entry.password, 1, 8))) 291 | (^local_pnt_entry.short_pw & (P_password ^= pnt_entry.password)) 292 then code = error_table_$bad_password; 293 294 local_pnt_entry.password, local_pnt_entry.network_password = ""; 295 local_pnt_entry.short_pw, local_pnt_entry.short_network_pw = "0"b; 296 P_pnt_entry_ptr -> pnt_entry = local_pnt_entry; 297 call AUDIT_READ (LOGIN_READ); 298 go to RETURN_TO_CALLER; 299 300 /* * * * * * * * * * NETWORK_GET_ENTRY * * * * * * * * * */ 301 302 /**** This entry is just like the one above, save that it 303* works with the network password. */ 304 305 network_get_entry: 306 entry (P_pnt_ptr, P_audit_flag, P_person_id, P_password, P_pnt_entry_ptr, P_code); 307 308 pnt_ptr = P_pnt_ptr; 309 audit_flag = P_audit_flag; 310 P_code = 0; 311 call find_local_entry (P_person_id, code); /* does alias processing */ 312 if code ^= 0 313 then go to RETURN_TO_CALLER; /* checksum errors and all */ 314 315 if ^local_pnt_entry.flags.has_network_password 316 then do; 317 code = error_table_$bad_password; /* no_password? */ 318 go to RETURN_TO_CALLER; 319 end; 320 321 if (local_pnt_entry.short_network_pw 322 & (substr (P_password, 1, 8) ^= substr (local_pnt_entry.network_password, 1, 8))) 323 | (^local_pnt_entry.short_network_pw & (P_password ^= local_pnt_entry.network_password)) 324 then do; 325 code = error_table_$bad_password; 326 go to RETURN_TO_CALLER; 327 end; 328 329 local_pnt_entry.password, local_pnt_entry.network_password = ""; 330 local_pnt_entry.short_pw, local_pnt_entry.short_network_pw = "0"b; 331 P_pnt_entry_ptr -> pnt_entry = local_pnt_entry; 332 call AUDIT_READ (NETWORK_READ); 333 go to RETURN_TO_CALLER; 334 335 /* * * * * * * * * * PRIV_GET_ENTRY * * * * * * * * * */ 336 337 /**** This entrypoint returns the entire text of the entry, including 338* the passwords! */ 339 340 priv_get_entry: 341 entry (P_pnt_ptr, P_audit_flag, P_person_id, P_pnt_entry_ptr, P_code); 342 343 pnt_ptr = P_pnt_ptr; 344 audit_flag = P_audit_flag; 345 P_code = 0; 346 call find_local_entry (P_person_id, code); 347 if code ^= 0 & code ^= error_table_$checksum_failure 348 then go to RETURN_TO_CALLER; 349 350 P_pnt_entry_ptr -> pnt_entry = local_pnt_entry; 351 call AUDIT_READ (PRIV_READ); 352 go to RETURN_TO_CALLER; 353 354 /* * * * * * * * * * GET_NETWORK_PASSWORD * * * * * * * * * */ 355 356 /**** This entrypoint returns the network password (encrypted) 357* for a specified user. Why do we have this? Because there 358* are applications that have to transmit the network password 359* out over networks. Obviously, access to this entrypoint must 360* be handed out very sparingly (though not as sparingly as 361* priv_get_entry). This entry returns error_table_$bad_password 362* if there is no network password associated with the supplied 363* person_id. */ 364 365 get_network_password: 366 entry (P_pnt_ptr, P_audit_flag, P_person_id, P_password, P_short_password, P_code); 367 368 pnt_ptr = P_pnt_ptr; 369 audit_flag = P_audit_flag; 370 P_code = 0; 371 call find_local_entry (P_person_id, code); 372 if code ^= 0 373 then go to RETURN_TO_CALLER; 374 375 if local_pnt_entry.public.flags.has_network_password 376 then do; 377 P_password = local_pnt_entry.network_password; 378 P_short_password = local_pnt_entry.short_network_pw; 379 end; 380 else do; 381 P_password = ""; 382 P_short_password = "0"b; 383 code = error_table_$bad_password; 384 end; 385 call AUDIT_READ (NETWORK_READ); 386 go to RETURN_TO_CALLER; 387 388 /* * * * * * * * * * UPDATE_ENTRY * * * * * * * * * */ 389 390 /**** This entry replaces an entry with a new copy. All 391* data is copied, but passwords are handled specially as per 392* parameters. However, the has_X_password flags overrule 393* the P_set_password parameters. */ 394 395 update_entry: 396 entry (P_pnt_ptr, P_audit_flag, P_pnt_entry_ptr, P_set_password, P_set_network_password, P_code); 397 398 pnt_ptr = P_pnt_ptr; 399 audit_flag = P_audit_flag; 400 pnt_entry_ptr = P_pnt_entry_ptr; 401 P_code = 0; 402 if new_pnt_entry.version ^= PNT_ENTRY_VERSION_2 403 then do; 404 code = error_table_$unimplemented_version; 405 go to RETURN_TO_CALLER; 406 end; 407 408 if new_pnt_entry.alias ^= "" & new_pnt_entry.alias = new_pnt_entry.user_id 409 then do; 410 code = error_table_$bad_arg; 411 goto RETURN_TO_CALLER; 412 end; 413 414 call find_update_entry ((new_pnt_entry.user_id), code); 415 if code = error_table_$checksum_failure 416 then code = 0; 417 418 if code ^= 0 419 then go to RETURN_TO_CALLER; 420 421 if audit_flag 422 then do; 423 call AUDIT_CHECK (MODIFY, audit_flag); 424 if audit_flag 425 then call AUDIT_SETUP (MODIFY); 426 else ; 427 end; 428 else ; 429 430 notify_as = CHECK_FOR_AS_NOTIFICATION (); 431 432 if pnt_entry.alias ^= new_pnt_entry.alias 433 then do; 434 if new_pnt_entry.alias ^= "" 435 then do; 436 call add_alias (addr (new_pnt_entry), tcode); 437 if tcode ^= 0 438 then do; /* put it back */ 439 call replace_entry (code); 440 if code = 0 441 then code = tcode; 442 goto RETURN_TO_CALLER; 443 end; 444 end; 445 if pnt_entry.alias ^= "" 446 then call delete_alias (pnt_entry.alias, (0)); 447 end; 448 449 pnt_entry.public = new_pnt_entry.public; 450 if P_set_password & new_pnt_entry.has_password 451 then do; 452 pnt_entry.password = new_pnt_entry.password; 453 pnt_entry.short_pw = new_pnt_entry.short_pw; 454 end; 455 if P_set_network_password & new_pnt_entry.has_network_password 456 then do; 457 pnt_entry.network_password = new_pnt_entry.network_password; 458 pnt_entry.short_network_pw = new_pnt_entry.short_network_pw; 459 end; 460 if P_set_password & ^new_pnt_entry.has_password 461 then pnt_entry.password = ""; 462 if P_set_network_password & ^new_pnt_entry.has_network_password 463 then pnt_entry.network_password = ""; 464 465 call replace_entry (code); 466 if code = 0 467 then do; 468 if audit_flag 469 then call AUDIT (MODIFY); 470 if notify_as 471 then call pnt_notify_as_ ((new_pnt_entry.user_id), (0)); 472 end; 473 474 goto RETURN_TO_CALLER; 475 476 /* * * * * * * * * * ADD_ENTRY * * * * * * * * * */ 477 478 /**** Adds a brand-new entry to our table. */ 479 480 add_entry: 481 entry (P_pnt_ptr, P_audit_flag, P_person_id, P_pnt_entry_ptr, P_code); 482 483 pnt_ptr = P_pnt_ptr; 484 audit_flag = P_audit_flag; 485 P_code = 0; 486 local_pnt_entry = P_pnt_entry_ptr -> pnt_entry; 487 488 if local_pnt_entry.version ^= PNT_ENTRY_VERSION_2 489 then do; 490 code = error_table_$unimplemented_version; 491 go to RETURN_TO_CALLER; 492 end; 493 494 call ms_table_mgr_$new_entry (P_pnt_ptr, P_person_id, pntep, code); 495 if code ^= 0 496 then goto RETURN_TO_CALLER; 497 498 if audit_flag 499 then do; 500 call AUDIT_CHECK (ADD, audit_flag); 501 if audit_flag 502 then call AUDIT_SETUP (ADD); 503 else ; 504 end; 505 else ; 506 507 pnt_entry = local_pnt_entry; /* the whole wazzo */ 508 call ms_table_mgr_$update_entry_dont_unlock (pnt_ptr, pntep, P_code); 509 if P_code ^= 0 510 then do; 511 call ms_table_mgr_$unlock (pnt_ptr, (0)); 512 go to RETURN_TO_CALLER; 513 end; 514 515 if local_pnt_entry.alias ^= "" 516 then do; 517 call add_alias (addr (local_pnt_entry), code); 518 if code ^= 0 519 then do; 520 call ms_table_mgr_$delete_entry (P_pnt_ptr, (local_pnt_entry.user_id), (0)); 521 /* make it go away */ 522 goto RETURN_TO_CALLER; 523 end; 524 end; 525 else call ms_table_mgr_$unlock (pnt_ptr, (0)); 526 527 if audit_flag 528 then call AUDIT (ADD); 529 530 goto RETURN_TO_CALLER; 531 532 /* * * * * * * * * * REMOVE_ENTRY * * * * * * * * * */ 533 534 /**** Remove a user from the PNT */ 535 536 remove_entry: 537 entry (P_pnt_ptr, P_audit_flag, P_person_id, P_code); 538 539 pnt_ptr = P_pnt_ptr; 540 audit_flag = P_audit_flag; 541 P_code = 0; 542 call find_local_entry (P_person_id, code); /* no need to write-lock yet */ 543 if code = error_table_$checksum_failure 544 then code = 0; 545 546 if code ^= 0 547 then go to RETURN_TO_CALLER; 548 549 if audit_flag 550 then do; 551 call AUDIT_CHECK (DELETE, audit_flag); 552 if audit_flag 553 then call AUDIT_SETUP (DELETE); 554 else ; 555 end; 556 else ; 557 558 if pnt_entry.alias ^= "" 559 then call delete_alias (pnt_entry.alias, (0)); /* failure will log */ 560 call ms_table_mgr_$delete_entry (P_pnt_ptr, P_person_id, code); 561 562 if code = 0 563 then do; 564 if audit_flag 565 then call AUDIT (DELETE); 566 call pnt_notify_as_ (P_person_id, (0)); 567 end; 568 569 goto RETURN_TO_CALLER; 570 571 table_data: 572 entry (P_pnt_ptr, P_audit_flag, P_pnt_info_ptr, P_num_entries, P_code); 573 574 audit_flag = P_audit_flag; 575 call ms_table_mgr_$table_data (P_pnt_ptr, P_pnt_info_ptr, (null ()), P_num_entries, P_code); 576 return; 577 578 /* * * * * * * * * * VALIDATE_ENTRY * * * * * * * * * */ 579 580 /**** This entrypoint, given a user_id validates that the entry exists. 581* No password checking is done. This entrypoint is used by IMFT 582* to validate the a user is registered on the system. */ 583 584 validate_entry: 585 entry (P_pnt_ptr, P_audit_flag, P_person_id, P_code); 586 587 pnt_ptr = P_pnt_ptr; 588 audit_flag = P_audit_flag; 589 P_code = 0; 590 591 call find_local_entry (P_person_id, code); 592 if code = error_table_$checksum_failure 593 then code = 0; 594 go to RETURN_TO_CALLER; 595 596 /* Global return point */ 597 598 RETURN_TO_CALLER: 599 P_code = code; 600 return; 601 602 /* Internal Procedures */ 603 604 find_local_entry: 605 procedure (P_name, P_code); 606 607 declare P_name char (*) parameter; 608 declare P_code fixed bin (35) parameter; 609 declare name char (32); 610 declare change_clock fixed bin (35); 611 declare new_change_clock fixed bin (35); 612 613 P_code = 0; 614 name = P_name; 615 616 find_again: 617 call ms_table_mgr_$find_entry (pnt_ptr, name, pntep, "0"b, change_clock, P_code); 618 if pntep = null () 619 then return; 620 621 local_pnt_entry = pnt_entry; 622 call ms_table_mgr_$get_change_clock (pnt_ptr, new_change_clock, P_code); 623 if P_code ^= 0 624 then return; 625 626 if change_clock ^= new_change_clock 627 then go to find_again; 628 629 if name ^= pnt_entry.user_id 630 then do; /* aliasing */ 631 name = pnt_entry.user_id; 632 goto find_again; 633 end; 634 635 end find_local_entry; 636 637 find_update_entry: 638 procedure (P_name, P_code); 639 640 dcl P_name char (*) parameter; 641 declare name char (32); 642 declare P_code fixed bin (35) parameter; 643 declare change_clock fixed bin (35); 644 declare new_change_clock fixed bin (35); 645 646 P_code = 0; 647 name = P_name; 648 649 find_again: 650 call ms_table_mgr_$find_entry (pnt_ptr, name, pntep, "0"b, change_clock, P_code); 651 if pntep = null () 652 then return; 653 654 local_pnt_entry = pnt_entry; 655 656 call ms_table_mgr_$get_change_clock (pnt_ptr, new_change_clock, P_code); 657 if P_code ^= 0 658 then return; 659 660 if change_clock ^= new_change_clock 661 then go to find_again; 662 663 if name ^= pnt_entry.user_id 664 then do; /* aliasing */ 665 name = pnt_entry.user_id; 666 goto find_again; 667 end; 668 669 /*** now we have the right name */ 670 call ms_table_mgr_$find_entry (pnt_ptr, name, pntep, "1"b, (0), P_code); 671 /* so get it under the lock */ 672 return; 673 end find_update_entry; 674 675 add_alias: 676 procedure (P_entry_ptr, P_code); 677 678 dcl P_entry_ptr ptr parameter; 679 dcl P_code fixed bin (35) parameter; 680 681 dcl pep pointer; 682 683 call ms_table_mgr_$new_entry_ignore_mylock (pnt_ptr, (P_entry_ptr -> pnt_entry.alias), pep, P_code); 684 if P_code ^= 0 685 then return; 686 687 pep -> pnt_entry = P_entry_ptr -> pnt_entry; 688 call ms_table_mgr_$update_entry (pnt_ptr, pep, P_code); 689 return; 690 end add_alias; 691 692 delete_alias: 693 procedure (P_alias, P_code); 694 695 dcl P_alias char (8) aligned parameter; 696 dcl P_code fixed bin (35) parameter; 697 698 call ms_table_mgr_$delete_entry_ignore_mylock (pnt_ptr, (P_alias), P_code); 699 end delete_alias; 700 701 replace_entry: 702 procedure (P_code); 703 704 declare P_code fixed bin (35); 705 706 call ms_table_mgr_$update_entry (pnt_ptr, pntep, P_code); 707 if P_code ^= 0 708 then call ms_table_mgr_$unlock (pnt_ptr, (0)); 709 return; 710 end replace_entry; 711 712 get_local_entry: 713 procedure (P_record, P_name, P_code); 714 715 dcl P_record fixed bin (35) parameter; 716 dcl P_name char (*) parameter; 717 dcl P_code fixed bin (35) parameter; 718 719 dcl (change_clock, new_change_clock) 720 fixed bin (35); 721 722 get_again: 723 call ms_table_mgr_$abs_entry (pnt_ptr, P_record, P_name, "0"b, pntep, change_clock, P_code); 724 if P_code ^= 0 & P_code ^= error_table_$checksum_failure 725 then return; 726 727 local_pnt_entry = pnt_entry; 728 call ms_table_mgr_$get_change_clock (pnt_ptr, new_change_clock, P_code); 729 if P_code ^= 0 730 then return; 731 732 if change_clock ^= new_change_clock 733 then go to get_again; 734 735 return; 736 end get_local_entry; 737 738 AUDIT_CHECK: 739 procedure (P_operation, P_audit_flag); 740 741 /**** This entry decides whether we are to audit at all. It calls 742* access_audit_r1_ to make this decision, based on the operation */ 743 744 dcl P_operation fixed bin (17) parameter; 745 /* kind of operation */ 746 dcl P_audit_flag bit (1) aligned parameter; 747 /* whether to audit */ 748 dcl validation_level fixed bin (3) automatic; 749 /* user's level */ 750 751 call hcs_$level_get (validation_level); 752 if validation_level ^= RING_1 753 then do; 754 P_audit_flag = "0"b; /* turn auditing off */ 755 return; /* can't call access_audit_r1_ except in ring 1 */ 756 end; 757 758 operation_code = ""b; /* initialize, so we can check later */ 759 760 if P_operation = ADD 761 then operation_code = access_operations_$pnt_entry_add; 762 else if P_operation = DELETE 763 then operation_code = access_operations_$pnt_entry_delete; 764 else if P_operation = MODIFY 765 then operation_code = access_operations_$pnt_entry_modify; 766 else if P_operation = ADMIN_READ 767 then operation_code = access_operations_$pnt_entry_admin_read; 768 else if P_operation = PRIV_READ 769 then operation_code = access_operations_$pnt_entry_priv_read; 770 else if P_operation = NETWORK_READ 771 then operation_code = access_operations_$pnt_entry_network_read; 772 else if P_operation = LOGIN_READ 773 then operation_code = access_operations_$pnt_entry_login_read; 774 775 if operation_code ^= ""b /* have we set it? */ 776 then do; 777 778 unspec (event_flags) = ""b; 779 event_flags.grant = "1"b; 780 event_flags.admin_op = "1"b; 781 782 P_audit_flag = access_audit_r1_$check_general (unspec (event_flags), operation_code); 783 end; 784 else P_audit_flag = "0"b; /* no auditing */ 785 return; 786 end AUDIT_CHECK; 787 788 AUDIT_SETUP: 789 procedure (P_operation); 790 791 dcl P_operation fixed bin (17) parameter; 792 /* what kind of operation */ 793 794 PAR.type = AAB_pnt_entry; 795 PAR.version = PNT_AUDIT_RECORD_VERSION_1; 796 PAR.pad1 = ""b; 797 string (PAR.flags) = ""b; 798 799 if P_operation = ADD 800 then do; 801 PAR.flags.add = "1"b; 802 PAR.user_id = P_person_id; 803 call FILL_PNT_AUDIT_ENTRY (addr (PAR.pnt_entry_1), addr (local_pnt_entry)); 804 end; 805 else if P_operation = DELETE 806 then do; 807 PAR.flags.delete = "1"b; 808 PAR.user_id = pnt_entry.user_id; 809 call FILL_PNT_AUDIT_ENTRY (addr (PAR.pnt_entry_1), addr (local_pnt_entry)); 810 end; 811 else if P_operation = MODIFY 812 then do; 813 PAR.flags.modify = "1"b; 814 PAR.user_id = new_pnt_entry.user_id; 815 call FILL_PNT_AUDIT_ENTRY (addr (PAR.pnt_entry_1), addr (local_pnt_entry)); 816 call FILL_PNT_AUDIT_ENTRY (addr (PAR.pnt_entry_2), addr (new_pnt_entry)); 817 if (pnt_entry.password ^= new_pnt_entry.password) & P_set_password 818 then PAR.flags.password_changed = "1"b; 819 if (pnt_entry.network_password ^= new_pnt_entry.network_password) & P_set_network_password 820 then PAR.flags.network_password_changed = "1"b; 821 call SETUP_BRIEF_DESCRIPTION (); 822 823 end; 824 else audit_flag = "0"b; /* can't audit if we don't know op */ 825 826 return; 827 end AUDIT_SETUP; 828 829 FILL_PNT_AUDIT_ENTRY: 830 procedure (P_paep, P_pntep); 831 832 /**** This procedure fills in the security-relevant information into the 833* audit record from the specified pnt entry. */ 834 835 dcl P_paep ptr parameter; /* pointer to audit record pnt info */ 836 dcl P_pntep ptr parameter; /* pointer to PNT entry */ 837 838 P_paep -> pnt_audit_entry.flags = P_pntep -> pnt_entry.public.flags; 839 P_paep -> pnt_audit_entry.alias = P_pntep -> pnt_entry.alias; 840 P_paep -> pnt_audit_entry.authorization_range = P_pntep -> pnt_entry.person_authorization; 841 P_paep -> pnt_audit_entry.password_timelock = P_pntep -> pnt_entry.password_timelock; 842 P_paep -> pnt_audit_entry.audit_flags = P_pntep -> pnt_entry.audit; 843 return; 844 end FILL_PNT_AUDIT_ENTRY; 845 846 AUDIT: 847 procedure (P_operation); 848 849 dcl P_operation fixed bin (17) parameter; 850 /* type of operation */ 851 dcl object_name char (50) automatic; 852 /* name of object for access_audit_ */ 853 dcl binary_info_size fixed bin (21) automatic; 854 /* size of binary info */ 855 856 object_name = "PNT entry " || PAR.user_id; 857 if P_operation = ADD | P_operation = DELETE 858 then binary_info_size = size (PAR) - size (pnt_audit_entry) - 1; 859 else binary_info_size = size (PAR); 860 861 call access_audit_r1_$log_general (ME, RING_1, unspec (event_flags), operation_code, object_name, 0, addr (PAR), 862 binary_info_size, "^[Changed:^a^]", (P_operation = MODIFY), brief_description); 863 864 return; 865 end AUDIT; 866 867 CHECK_FOR_AS_NOTIFICATION: 868 procedure () returns (bit (1) aligned); 869 870 /**** This internal procedure is used to check to see if the A.S. needs 871* to be nofified of this PNT change. For modifications of PNT entries, 872* we notify the A.S. if the authorization range is made more restrictive 873* of if the "lock" flags is set in a PNT entry. For deletes of PNT 874* entries, we always notify the answering service. */ 875 876 if ^local_pnt_entry.flags.lock & new_pnt_entry.flags.lock 877 then return ("1"b); 878 else if new_pnt_entry.person_authorization (2) < local_pnt_entry.person_authorization (2) 879 then return ("1"b); 880 else if new_pnt_entry.person_authorization (1) > local_pnt_entry.person_authorization (1) 881 then return ("1"b); 882 else ; 883 return ("0"b); /* no need to notify the answering service */ 884 885 end CHECK_FOR_AS_NOTIFICATION; 886 887 SETUP_BRIEF_DESCRIPTION: 888 procedure (); 889 890 /**** This procedure is used to set up the additional information in the text 891* portion of a PNT audit record for PNT entry modifications. This is 892* a human readable summary of the changes to the PNT entry. */ 893 894 brief_description = ""; 895 if PAR.flags.password_changed 896 then call ADD_STRING ("password"); 897 if PAR.flags.network_password_changed 898 then call ADD_STRING ("network password"); 899 if unspec (PAR.pnt_entry_1.flags) ^= unspec (PAR.pnt_entry_2.flags) 900 then call ADD_STRING ("flags"); 901 if PAR.pnt_entry_1.alias ^= PAR.pnt_entry_2.alias 902 then call ADD_STRING ("alias"); 903 if PAR.pnt_entry_1.authorization_range (1) ^= PAR.pnt_entry_2.authorization_range (1) 904 then call ADD_STRING ("min auth"); 905 if PAR.pnt_entry_1.authorization_range (2) ^= PAR.pnt_entry_2.authorization_range (2) 906 then call ADD_STRING ("max auth"); 907 if PAR.pnt_entry_1.audit_flags ^= PAR.pnt_entry_2.audit_flags 908 then call ADD_STRING ("audit flags"); 909 if PAR.pnt_entry_1.password_timelock ^= PAR.pnt_entry_2.password_timelock 910 then call ADD_STRING ("password timelock"); 911 if brief_description = "" 912 then brief_description = "nothing"; 913 return; 914 915 916 ADD_STRING: 917 procedure (P_str_to_add); 918 919 dcl P_str_to_add char (*) parameter;/* an item that changed */ 920 921 if brief_description = "" 922 then brief_description = P_str_to_add; 923 else brief_description = brief_description || "," || P_str_to_add; 924 925 return; 926 end ADD_STRING; 927 end SETUP_BRIEF_DESCRIPTION; /* format: off */ 928 929 AUDIT_READ: 930 procedure (P_operation); 931 932 /**** This procedure is responsible for auditing PNT reads. */ 933 934 dcl P_operation fixed bin (17) parameter; /* what kind of operation */ 935 dcl object_name char (50) automatic; 936 937 call AUDIT_CHECK (P_operation, audit_flag); 938 if audit_flag then do; 939 object_name = "PNT entry " || local_pnt_entry.user_id; 940 call access_audit_r1_$log_general (ME, RING_1, unspec (event_flags), operation_code, object_name, 0, null (), 0); 941 end; 942 return; 943 944 end AUDIT_READ; 945 /* begin include file - access_audit_binary_def */ 1 2 1 3 /* 1985-02-26 EJ Sharpe: added rcp object definition */ 1 4 /* 1985-01-25 E. Swenson: added pnt definition */ 1 5 /* 1985-01-22 EJ Sharpe: created */ 1 6 1 7 /**** 1 8* Each access audit log message has binary data including 1 9* the audit record header and optionally some extended 1 10* binary information. The first 9 bits (fixed bin (9) uns unal) 1 11* if the extended binary defines the type of the data 1 12* and, thus, what structure may be used to interpret it. 1 13* 1 14* This include file is a registry of the extended binary 1 15* type values. 1 16*****/ 1 17 1 18 dcl ( 1 19 /*type identifier*/ /*type*/ /*include where defined*/ 1 20 1 21 AAB_ss_object init (1), /* access_audit_ssobj_info.incl.pl1 */ 1 22 AAB_ss_link init (2), /* access_audit_ssobj_info.incl.pl1 */ 1 23 AAB_ia_int_dmn init (3), /* as_audit_structures.incl.pl1 */ 1 24 AAB_ia_abs init (4), /* as_audit_structures.incl.pl1 */ 1 25 AAB_ia_abs_proxy init (5), /* as_audit_structures.incl.pl1 */ 1 26 AAB_channel init (6), /* as_audit_structures.incl.pl1 */ 1 27 AAB_dial_service init (7), /* as_audit_structures.incl.pl1 */ 1 28 AAB_pnt_entry init (8), /* access_audit_pnt_info.incl.pl1 */ 1 29 AAB_rcp_object init (9), /* access_audit_rcp_info.incl.pl1 */ 1 30 AAB_mseg_msg init (10) /* access_audit_mseg_info.incl.pl1 */ 1 31 ) fixed bin (9) uns unal static options (constant); 1 32 1 33 /**** 1 34* The following array contains entry name fragments for the 1 35* expander procedure associated with the respective binary 1 36* data type. The actual entry name is generated like: 1 37* 1 38* entryname = "expand_"||audit_binary_expanders(TYPE)||"_audit_info_" 1 39* 1 40* Note that expand_access_audit_msg_.pl1 keeps a cache of 1 41* extended binary expander procedure entries. The cache 1 42* should be enlarged when the following array grows to more 1 43* than 36 entries. 1 44*****/ 1 45 1 46 dcl audit_binary_expanders (10) char (13) varying internal static options (constant) 1 47 init ( "ssobj", /* 1 (first two are internal */ 1 48 "sslnk", /* 2 procedures in expand_access_audit_msg_) */ 1 49 "as_ia", /* 3 (ia_int_dmn) */ 1 50 "as_ia", /* 4 (ia_abs) */ 1 51 "as_ia", /* 5 (ia_abs_proxy) */ 1 52 "channel", /* 6 */ 1 53 "dial_serv", /* 7 */ 1 54 "pnt", /* 8 */ 1 55 "rcp_obj", /* 9 */ 1 56 "mseg_msg" /* 10 */ 1 57 ); 1 58 1 59 /* end include file - access_audit_binary_def.incl.pl1 */ 945 946 /* 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 */ 946 947 /* format: style2 */ 3 2 3 3 /* BEGIN include file pnt_audit_record.incl.pl1 */ 3 4 3 5 /* Written: 1985-01-25 by E. Swenson 3 6* Modification History: 3 7**/ 3 8 3 9 dcl 1 pnt_audit_record structure aligned based, 3 10 2 type fixed bin (9) unsigned unaligned, 3 11 2 version fixed bin (9) unsigned unaligned, 3 12 2 pad1 bit (18) unaligned, 3 13 2 flags unaligned, 3 14 3 add bit (1) unaligned, 3 15 3 delete bit (1) unaligned, 3 16 3 modify bit (1) unaligned, 3 17 3 password_changed bit (1) unaligned, 3 18 3 network_password_changed bit (1) unaligned, 3 19 3 pad2 bit (31) unaligned, 3 20 2 user_id char (32), 3 21 2 pnt_entry_1 aligned like pnt_audit_entry, 3 22 2 pnt_entry_2 aligned like pnt_audit_entry; 3 23 3 24 dcl 1 pnt_audit_entry aligned based, 3 25 2 flags like pnt_entry.public.flags, 3 26 2 alias char (8), 3 27 2 authorization_range (2) bit (72) aligned, 3 28 2 password_timelock fixed bin (71), 3 29 2 audit_flags bit (36); 3 30 3 31 dcl PNT_AUDIT_RECORD_VERSION_1 fixed bin (9) initial (1) internal static options (constant); 3 32 3 33 /* END include file pnt_audit_record.incl.pl1 */ 947 948 /* BEGIN INCLUDE FILE ... pnt_entry.incl.pl1 */ 4 2 4 3 /* Modified 790702 by C. Hornig for MSF PNT */ 4 4 /* Modified 84-07-18 BIM for V2, aim ranges, long passwords. */ 4 5 /* Modified 84-09-25 for operator attribute... -E. A. Ranzenbach */ 4 6 /* Modified 85-03-05 E. Swenson for user_validated_time */ 4 7 4 8 /**** The ms_table_mgr_ has fixed sized entries, for now. 4 9* The presence of a version field and some pad allow 4 10* us to have incrementally-upgraded PNTE's in a future change. 4 11**/ 4 12 4 13 /**** The conversion to V2 copies the existing encrypted passwords. 4 14* Since the 32 character scrambling algorithm will not give the 4 15* same results, the short_XX flags indicate that the old scrambler 4 16* should be used. The short flags are automatically turned off 4 17* by calls to update the password with the long-scrambled form. */ 4 18 4 19 /* format: style4,insnl,delnl */ 4 20 4 21 declare pntep pointer automatic; 4 22 declare 1 pnt_entry based (pntep) aligned, /* declaration of a single PNT entry */ 4 23 2 version fixed bin, 4 24 2 private aligned, 4 25 3 pw_flags aligned, 4 26 4 short_pw bit (1) unal, /* ON password is eight-character form */ 4 27 4 short_network_pw bit (1) unal, /* ON card password is eight character form. */ 4 28 3 password character (32), /* person's password */ 4 29 3 network_password character (32), 4 30 2 public, 4 31 3 user_id character (32), /* user ID (for alias entries */ 4 32 3 alias character (8), 4 33 3 default_project character (16), /* user's default project */ 4 34 3 flags, /* one-bit flags */ 4 35 4 has_password bit (1) unaligned, 4 36 4 has_network_password bit (1) unaligned, 4 37 4 trap bit (1) unal, /* If this password is used, holler */ 4 38 4 lock bit (1) unal, /* prevent login if on. */ 4 39 4 nochange bit (1) unal, /* user cannot change password */ 4 40 4 must_change bit unal, /* user must change password at next login */ 4 41 4 pw_time_lock bit (1) unal, /* if password has a time lock */ 4 42 4 generate_pw bit (1) unal, /* ON if we give new pw, OFF lets user select new pw */ 4 43 4 last_bad_pw_reported bit (1) unal, /* ON if user has NOT been told about last bad password */ 4 44 4 operator bit (1) unal, /* ON if user can login as an operator... */ 4 45 4 pads bit (26) unal, 4 46 3 n_good_pw fixed bin, /* Number of good passwords */ 4 47 3 n_bad_pw fixed bin, /* Number of wrong passwords */ 4 48 3 n_bad_pw_since_good fixed bin, /* Number of wrong passwords since good */ 4 49 3 time_pw_changed fixed bin (71), /* When password was modified by user */ 4 50 4 51 3 time_last_good_pw fixed bin (71), 4 52 3 time_last_bad_pw fixed bin (71), /* When pw was last given wrong */ 4 53 3 bad_pw_term_id character (4), /* where bad password from */ 4 54 3 bad_pw_line_type fixed bin (17), /* ... */ 4 55 3 bad_pw_term_type character (32), 4 56 3 password_timelock fixed bin (71), /* Password is locked up until here */ 4 57 3 person_authorization (2) bit (72), /* authorization of this person */ 4 58 3 default_person_authorization bit (72), /* default authorization of this person */ 4 59 3 audit bit (36), /* audit flags for person */ 4 60 3 pad1 bit (36), /* pad to even word boundary */ 4 61 3 user_validated_time fixed bin (71), /* time this PNT entry was last validated by an administrator */ 4 62 2 pad (80 - 64) bit (36) aligned; 4 63 4 64 declare PNT_ENTRY_VERSION_2 fixed bin init (2) int static options (constant); 4 65 4 66 /* END INCLUDE FILE ... pnte.incl.pl1 */ 948 949 /* Begin include file pnt_header.incl.pl1 BIM 1984-07-24 */ 5 2 /* format: style3 */ 5 3 5 4 declare pnt_header_ptr pointer; 5 5 declare 1 pnt_header aligned based (pnt_header_ptr), 5 6 2 version fixed bin, 5 7 2 author char (32) unaligned, 5 8 2 n_checksum_failures 5 9 fixed bin (35), /* ever in this PNT */ 5 10 2 n_registered fixed bin (35), /* not counting aliases */ 5 11 2 n_deletions fixed bin (35), 5 12 2 pad (4) bit (36) aligned; /* to 16 words */ 5 13 5 14 declare PNT_VERSION_3 fixed bin int static init (3) options (constant); 5 15 5 16 /* End include file pnt_header.incl.pl1 */ 949 950 951 /* BEGIN MESSAGE DOCUMENTATION 952* 953* Message: 954* AUDIT (pnt_db_util_): GRANTED addition of pnt entry (Admin_op) for PERSON.PROJECT.TAG (AUTH) Level=1 to PNT entry USERID (no access class). 955* 956* S: $access_audit 957* 958* T: $run 959* 960* M: The user, PERSON.PROJECT.TAG, added a new PNT entry for USERID 961* 962* A: $ignore 963* 964* 965* Message: 966* AUDIT (pnt_db_util_): GRANTED modification of pnt entry (Admin_op) for PERSON.PROJECT.TAG (AUTH) Level=1 to PNT entry USERID: CHANGES (no access class). 967* 968* S: $access_audit 969* 970* T: $run 971* 972* M: The user PERSON.PROJECT.TAG modified the PNT entry for USERID. 973* CHANGES describes in brief format what security relevant changes were 974* made. See the binary information in the audit message for further 975* details. 976* 977* A: $ignore 978* 979* Message: 980* AUDIT (pnt_db_util_): GRANTED deletion of pnt entry (Admin_op) for PERSON.PROJECT.TAG (AUTH) Level=1 to PNT entry USERID (no access class). 981* 982* S: $access_audit 983* 984* T: $run 985* 986* M: The user PERSON.PROJECT.TAG deleted the PNT entry for USERID. 987* 988* A: $ignore 989* 990* END MESSAGE DOCUMENTATION */ 991 992 end pnt_db_util_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/07/85 1549.7 pnt_db_util_.pl1 >spec>on>mseg>pnt_db_util_.pl1 945 1 05/06/85 1121.6 access_audit_binary_def.incl.pl1 >spec>on>mseg>access_audit_binary_def.incl.pl1 946 2 01/30/85 1523.9 access_audit_eventflags.incl.pl1 >ldd>include>access_audit_eventflags.incl.pl1 947 3 02/12/85 1429.5 pnt_audit_record.incl.pl1 >ldd>include>pnt_audit_record.incl.pl1 948 4 03/15/85 0953.1 pnt_entry.incl.pl1 >ldd>include>pnt_entry.incl.pl1 949 5 12/07/84 1102.0 pnt_header.incl.pl1 >ldd>include>pnt_header.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_pnt_entry constant fixed bin(9,0) initial unsigned unaligned dcl 1-18 ref 794 ADD constant fixed bin(17,0) initial dcl 128 set ref 500* 501* 527* 760 799 857 ADMIN_READ constant fixed bin(17,0) initial dcl 128 set ref 206* 258* 766 DELETE constant fixed bin(17,0) initial dcl 128 set ref 551* 552* 564* 762 805 857 LOGIN_READ 000000 constant fixed bin(17,0) initial dcl 128 set ref 297* 772 ME 000001 constant char(32) initial unaligned dcl 124 set ref 861* 940* MODIFY constant fixed bin(17,0) initial dcl 128 set ref 423* 424* 468* 764 811 861 NETWORK_READ constant fixed bin(17,0) initial dcl 128 set ref 332* 385* 770 PAR 000216 automatic structure level 1 dcl 53 set ref 857 859 861 861 PNT_AUDIT_RECORD_VERSION_1 constant fixed bin(9,0) initial dcl 3-31 ref 795 PNT_ENTRY_VERSION_2 constant fixed bin(17,0) initial dcl 4-64 ref 402 488 PRIV_READ constant fixed bin(17,0) initial dcl 128 set ref 233* 351* 768 P_alias parameter char(8) dcl 695 ref 692 698 P_audit_flag parameter bit(1) dcl 746 in procedure "AUDIT_CHECK" set ref 738 754* 782* 784* P_audit_flag parameter bit(1) dcl 28 in procedure "pnt_db_util_" ref 149 158 164 172 185 189 214 218 244 248 273 277 305 309 340 344 365 369 395 399 480 484 536 540 571 574 584 588 P_code parameter fixed bin(35,0) dcl 608 in procedure "find_local_entry" set ref 604 613* 616* 622* 623 P_code parameter fixed bin(35,0) dcl 717 in procedure "get_local_entry" set ref 712 722* 724 724 728* 729 P_code parameter fixed bin(35,0) dcl 704 in procedure "replace_entry" set ref 701 706* 707 P_code parameter fixed bin(35,0) dcl 696 in procedure "delete_alias" set ref 692 698* P_code parameter fixed bin(35,0) dcl 30 in procedure "pnt_db_util_" set ref 149 159* 164 173* 185 190* 214 219* 244 249* 273 278* 305 310* 340 345* 365 370* 395 401* 480 485* 508* 509 536 541* 571 575* 584 589* 598* P_code parameter fixed bin(35,0) dcl 679 in procedure "add_alias" set ref 675 683* 684 688* P_code parameter fixed bin(35,0) dcl 642 in procedure "find_update_entry" set ref 637 646* 649* 656* 657 670* P_dirname parameter char unaligned dcl 32 set ref 149 160* P_entry_ptr parameter pointer dcl 678 ref 675 683 687 P_entryname parameter char unaligned dcl 33 set ref 149 160* P_name parameter char unaligned dcl 716 in procedure "get_local_entry" set ref 712 722* P_name parameter char unaligned dcl 607 in procedure "find_local_entry" ref 604 614 P_name parameter char unaligned dcl 640 in procedure "find_update_entry" ref 637 647 P_num_entries parameter fixed bin(35,0) dcl 34 set ref 571 575* P_operation parameter fixed bin(17,0) dcl 744 in procedure "AUDIT_CHECK" ref 738 760 762 764 766 768 770 772 P_operation parameter fixed bin(17,0) dcl 791 in procedure "AUDIT_SETUP" ref 788 799 805 811 P_operation parameter fixed bin(17,0) dcl 934 in procedure "AUDIT_READ" set ref 929 937* P_operation parameter fixed bin(17,0) dcl 849 in procedure "AUDIT" ref 846 857 857 861 P_paep parameter pointer dcl 835 ref 829 838 839 840 841 842 P_password parameter char unaligned dcl 35 set ref 273 290 290 305 321 321 365 377* 381* P_person_id parameter char unaligned dcl 36 set ref 244 250* 273 279* 305 311* 340 346* 365 371* 480 494* 536 542* 560* 566* 584 591* 802 P_pnt_entry_ptr parameter pointer dcl 37 ref 185 205 214 232 244 257 273 296 305 331 340 350 395 400 480 486 P_pnt_info_ptr parameter pointer dcl 31 set ref 571 575* P_pnt_ptr parameter pointer dcl 38 set ref 149 160* 164 174* 185 188 214 217 244 247 273 276 305 308 340 343 365 368 395 398 480 483 494* 520* 536 539 560* 571 575* 584 587 P_pntep parameter pointer dcl 836 ref 829 838 839 840 841 842 P_record parameter fixed bin(35,0) dcl 715 set ref 712 722* P_record_no parameter fixed bin(35,0) dcl 39 set ref 185 191* 214 220* P_set_network_password parameter bit(1) dcl 41 ref 395 455 462 819 P_set_password parameter bit(1) dcl 40 ref 395 450 460 817 P_short_password parameter bit(1) dcl 42 set ref 365 378* 382* P_str_to_add parameter char unaligned dcl 919 ref 916 921 923 RING_1 000037 constant fixed bin(3,0) initial dcl 126 set ref 752 861* 940* access_audit_r1_$check_general 000010 constant entry external dcl 66 ref 782 access_audit_r1_$log_general 000012 constant entry external dcl 68 ref 861 940 access_operations_$pnt_entry_add 000052 external static bit(36) dcl 99 ref 760 access_operations_$pnt_entry_admin_read 000054 external static bit(36) dcl 101 ref 766 access_operations_$pnt_entry_delete 000056 external static bit(36) dcl 103 ref 762 access_operations_$pnt_entry_login_read 000060 external static bit(36) dcl 105 ref 772 access_operations_$pnt_entry_modify 000062 external static bit(36) dcl 107 ref 764 access_operations_$pnt_entry_network_read 000064 external static bit(36) dcl 109 ref 770 access_operations_$pnt_entry_priv_read 000066 external static bit(36) dcl 111 ref 768 add 1 000216 automatic bit(1) level 3 packed unaligned dcl 53 set ref 801* addr builtin function dcl 140 ref 436 436 517 517 803 803 803 803 809 809 809 809 815 815 815 815 816 816 816 816 861 861 admin_op 0(02) 000203 automatic bit(1) level 2 packed unaligned dcl 49 set ref 780* alias 1 based char(8) level 2 in structure "pnt_audit_entry" dcl 3-24 in procedure "pnt_db_util_" set ref 839* alias 32 based char(8) level 3 in structure "pnt_entry" dcl 4-22 in procedure "pnt_db_util_" set ref 432 445 445* 558 558* 683 839 alias 13 000216 automatic char(8) level 3 in structure "PAR" dcl 53 in procedure "pnt_db_util_" set ref 901 alias 32 based char(8) level 3 in structure "new_pnt_entry" dcl 62 in procedure "pnt_db_util_" set ref 408 408 432 434 alias 32 000266 automatic char(8) level 3 in structure "local_pnt_entry" dcl 58 in procedure "pnt_db_util_" set ref 515 alias 27 000216 automatic char(8) level 3 in structure "PAR" dcl 53 in procedure "pnt_db_util_" set ref 901 audit 74 based bit(36) level 3 dcl 4-22 set ref 842 audit_event_flags based structure level 1 dcl 2-5 audit_flag 000100 automatic bit(1) dcl 46 set ref 158* 172* 189* 218* 248* 277* 309* 344* 369* 399* 421 423* 424 468 484* 498 500* 501 527 540* 549 551* 552 564 574* 588* 824* 937* 938 audit_flags 40 000216 automatic bit(36) level 3 in structure "PAR" dcl 53 in procedure "pnt_db_util_" set ref 907 audit_flags 24 000216 automatic bit(36) level 3 in structure "PAR" dcl 53 in procedure "pnt_db_util_" set ref 907 audit_flags 12 based bit(36) level 2 in structure "pnt_audit_entry" dcl 3-24 in procedure "pnt_db_util_" set ref 842* authorization_range 15 000216 automatic bit(72) array level 3 in structure "PAR" dcl 53 in procedure "pnt_db_util_" set ref 903 905 authorization_range 31 000216 automatic bit(72) array level 3 in structure "PAR" dcl 53 in procedure "pnt_db_util_" set ref 903 905 authorization_range 3 based bit(72) array level 2 in structure "pnt_audit_entry" dcl 3-24 in procedure "pnt_db_util_" set ref 840* binary_info_size 000563 automatic fixed bin(21,0) dcl 853 set ref 857* 859* 861* brief_description 000101 automatic varying char(256) dcl 47 set ref 861* 894* 911 911* 921 921* 923* 923 change_clock 000456 automatic fixed bin(35,0) dcl 643 in procedure "find_update_entry" set ref 649* 660 change_clock 000512 automatic fixed bin(35,0) dcl 719 in procedure "get_local_entry" set ref 722* 732 change_clock 000436 automatic fixed bin(35,0) dcl 610 in procedure "find_local_entry" set ref 616* 626 code 000202 automatic fixed bin(35,0) dcl 48 set ref 160* 174* 191* 192 199* 220* 221 228* 250* 251 251 279* 280 288* 290* 311* 312 317* 325* 346* 347 347 371* 372 383* 404* 410* 414* 415 415* 418 439* 440 440* 465* 466 490* 494* 495 517* 518 542* 543 543* 546 560* 562 591* 592 592* 598 delete 1(01) 000216 automatic bit(1) level 3 packed unaligned dcl 53 set ref 807* error_table_$bad_arg 000070 external static fixed bin(35,0) dcl 113 ref 410 error_table_$bad_password 000072 external static fixed bin(35,0) dcl 114 ref 288 290 317 325 383 error_table_$checksum_failure 000074 external static fixed bin(35,0) dcl 116 ref 251 347 415 543 592 724 error_table_$no_record 000076 external static fixed bin(35,0) dcl 118 ref 199 228 error_table_$unimplemented_version 000100 external static fixed bin(35,0) dcl 119 ref 404 490 event_flags 000203 automatic structure level 1 dcl 49 set ref 778* 782 782 861 861 940 940 flags 40 based structure level 3 in structure "new_pnt_entry" dcl 62 in procedure "pnt_db_util_" flags 26 000216 automatic structure level 3 in structure "PAR" dcl 53 in procedure "pnt_db_util_" set ref 899 flags 40 based structure level 3 in structure "pnt_entry" dcl 4-22 in procedure "pnt_db_util_" set ref 838 flags based structure level 2 in structure "pnt_audit_entry" dcl 3-24 in procedure "pnt_db_util_" set ref 838* flags 1 000216 automatic structure level 2 in structure "PAR" packed unaligned dcl 53 in procedure "pnt_db_util_" set ref 797* flags 12 000216 automatic structure level 3 in structure "PAR" dcl 53 in procedure "pnt_db_util_" set ref 899 flags 40 000266 automatic structure level 3 in structure "local_pnt_entry" dcl 58 in procedure "pnt_db_util_" grant 0(01) 000203 automatic bit(1) level 2 packed unaligned dcl 49 set ref 779* has_network_password 40(01) based bit(1) level 4 in structure "new_pnt_entry" packed unaligned dcl 62 in procedure "pnt_db_util_" set ref 455 462 has_network_password 40(01) 000266 automatic bit(1) level 4 in structure "local_pnt_entry" packed unaligned dcl 58 in procedure "pnt_db_util_" set ref 315 375 has_password 40 based bit(1) level 4 in structure "pnt_entry" packed unaligned dcl 4-22 in procedure "pnt_db_util_" set ref 288 has_password 40 based bit(1) level 4 in structure "new_pnt_entry" packed unaligned dcl 62 in procedure "pnt_db_util_" set ref 450 460 hcs_$level_get 000014 constant entry external dcl 70 ref 751 key 000204 automatic char(32) unaligned dcl 50 set ref 191* 197 220* 226 local_pnt_entry 000266 automatic structure level 1 dcl 58 set ref 205 232 257 296 331 350 486* 507 517 517 621* 654* 727* 803 803 809 809 815 815 lock 40(03) based bit(1) level 4 in structure "new_pnt_entry" packed unaligned dcl 62 in procedure "pnt_db_util_" set ref 876 lock 40(03) 000266 automatic bit(1) level 4 in structure "local_pnt_entry" packed unaligned dcl 58 in procedure "pnt_db_util_" set ref 876 modify 1(02) 000216 automatic bit(1) level 3 packed unaligned dcl 53 set ref 813* ms_table_mgr_$abs_entry 000016 constant entry external dcl 71 ref 722 ms_table_mgr_$close 000020 constant entry external dcl 74 ref 174 ms_table_mgr_$delete_entry 000022 constant entry external dcl 75 ref 520 560 ms_table_mgr_$delete_entry_ignore_mylock 000024 constant entry external dcl 77 ref 698 ms_table_mgr_$find_entry 000026 constant entry external dcl 79 ref 616 649 670 ms_table_mgr_$get_change_clock 000030 constant entry external dcl 81 ref 622 656 728 ms_table_mgr_$new_entry 000032 constant entry external dcl 83 ref 494 ms_table_mgr_$new_entry_ignore_mylock 000034 constant entry external dcl 85 ref 683 ms_table_mgr_$open 000036 constant entry external dcl 87 ref 160 ms_table_mgr_$table_data 000040 constant entry external dcl 88 ref 575 ms_table_mgr_$unlock 000042 constant entry external dcl 90 ref 511 525 707 ms_table_mgr_$update_entry 000044 constant entry external dcl 91 ref 688 706 ms_table_mgr_$update_entry_dont_unlock 000046 constant entry external dcl 93 ref 508 name 000426 automatic char(32) unaligned dcl 609 in procedure "find_local_entry" set ref 614* 616* 629 631* name 000446 automatic char(32) unaligned dcl 641 in procedure "find_update_entry" set ref 647* 649* 663 665* 670* network_password 12 based char(32) level 3 in structure "pnt_entry" dcl 4-22 in procedure "pnt_db_util_" set ref 457* 462* 819 network_password 12 000266 automatic char(32) level 3 in structure "local_pnt_entry" dcl 58 in procedure "pnt_db_util_" set ref 203* 254* 294* 321 321 329* 377 network_password 12 based char(32) level 3 in structure "new_pnt_entry" dcl 62 in procedure "pnt_db_util_" set ref 457 819 network_password_changed 1(04) 000216 automatic bit(1) level 3 packed unaligned dcl 53 set ref 819* 897 new_change_clock 000457 automatic fixed bin(35,0) dcl 644 in procedure "find_update_entry" set ref 656* 660 new_change_clock 000437 automatic fixed bin(35,0) dcl 611 in procedure "find_local_entry" set ref 622* 626 new_change_clock 000513 automatic fixed bin(35,0) dcl 719 in procedure "get_local_entry" set ref 728* 732 new_pnt_entry based structure level 1 dcl 62 set ref 436 436 816 816 notify_as 000214 automatic bit(1) dcl 51 set ref 430* 470 null builtin function dcl 141 ref 160 575 618 651 940 940 object_name 000546 automatic char(50) unaligned dcl 851 in procedure "AUDIT" set ref 856* 861* object_name 000614 automatic char(50) unaligned dcl 935 in procedure "AUDIT_READ" set ref 939* 940* operation_code 000215 automatic bit(36) dcl 52 set ref 758* 760* 762* 764* 766* 768* 770* 772* 775 782* 861* 940* pad1 0(18) 000216 automatic bit(18) level 2 packed unaligned dcl 53 set ref 796* password 2 000266 automatic char(32) level 3 in structure "local_pnt_entry" dcl 58 in procedure "pnt_db_util_" set ref 203* 254* 290 294* 329* password 2 based char(32) level 3 in structure "new_pnt_entry" dcl 62 in procedure "pnt_db_util_" set ref 452 817 password 2 based char(32) level 3 in structure "pnt_entry" dcl 4-22 in procedure "pnt_db_util_" set ref 290 452* 460* 817 password_changed 1(03) 000216 automatic bit(1) level 3 packed unaligned dcl 53 set ref 817* 895 password_timelock 64 based fixed bin(71,0) level 3 in structure "pnt_entry" dcl 4-22 in procedure "pnt_db_util_" set ref 841 password_timelock 10 based fixed bin(71,0) level 2 in structure "pnt_audit_entry" dcl 3-24 in procedure "pnt_db_util_" set ref 841* password_timelock 36 000216 automatic fixed bin(71,0) level 3 in structure "PAR" dcl 53 in procedure "pnt_db_util_" set ref 909 password_timelock 22 000216 automatic fixed bin(71,0) level 3 in structure "PAR" dcl 53 in procedure "pnt_db_util_" set ref 909 pep 000466 automatic pointer dcl 681 set ref 683* 687 688* person_authorization 66 000266 automatic bit(72) array level 3 in structure "local_pnt_entry" dcl 58 in procedure "pnt_db_util_" set ref 878 880 person_authorization 66 based bit(72) array level 3 in structure "new_pnt_entry" dcl 62 in procedure "pnt_db_util_" set ref 878 880 person_authorization 66 based bit(72) array level 3 in structure "pnt_entry" dcl 4-22 in procedure "pnt_db_util_" set ref 840 pnt_audit_entry based structure level 1 dcl 3-24 set ref 857 pnt_audit_record based structure level 1 dcl 3-9 pnt_entry based structure level 1 dcl 4-22 set ref 205* 232* 257* 296* 331* 350* 486 507* 621 654 687* 687 727 pnt_entry_1 12 000216 automatic structure level 2 dcl 53 set ref 803 803 809 809 815 815 pnt_entry_2 26 000216 automatic structure level 2 dcl 53 set ref 816 816 pnt_entry_ptr 000260 automatic pointer dcl 54 set ref 400* 402 408 408 408 414 432 434 436 436 449 450 452 453 455 457 458 460 462 470 814 816 816 817 819 876 878 880 pnt_notify_as_ 000050 constant entry external dcl 95 ref 470 566 pnt_ptr 000262 automatic pointer dcl 55 set ref 188* 217* 247* 276* 308* 343* 368* 398* 483* 508* 511* 525* 539* 587* 616* 622* 649* 656* 670* 683* 688* 698* 706* 707* 722* 728* pntep 000406 automatic pointer dcl 4-21 set ref 288 290 432 445 445 449 452 453 457 458 460 462 494* 507 508* 558 558 616* 618 621 629 631 649* 651 654 663 665 670* 706* 722* 727 808 817 819 private 1 based structure level 2 in structure "pnt_entry" dcl 4-22 in procedure "pnt_db_util_" private 1 based structure level 2 in structure "new_pnt_entry" dcl 62 in procedure "pnt_db_util_" private 1 000266 automatic structure level 2 in structure "local_pnt_entry" dcl 58 in procedure "pnt_db_util_" public 22 based structure level 2 in structure "new_pnt_entry" dcl 62 in procedure "pnt_db_util_" set ref 449 public 22 000266 automatic structure level 2 in structure "local_pnt_entry" dcl 58 in procedure "pnt_db_util_" public 22 based structure level 2 in structure "pnt_entry" dcl 4-22 in procedure "pnt_db_util_" set ref 449* pw_flags 1 000266 automatic structure level 3 in structure "local_pnt_entry" dcl 58 in procedure "pnt_db_util_" pw_flags 1 based structure level 3 in structure "pnt_entry" dcl 4-22 in procedure "pnt_db_util_" pw_flags 1 based structure level 3 in structure "new_pnt_entry" dcl 62 in procedure "pnt_db_util_" short_network_pw 1(01) based bit(1) level 4 in structure "pnt_entry" packed unaligned dcl 4-22 in procedure "pnt_db_util_" set ref 458* short_network_pw 1(01) based bit(1) level 4 in structure "new_pnt_entry" packed unaligned dcl 62 in procedure "pnt_db_util_" set ref 458 short_network_pw 1(01) 000266 automatic bit(1) level 4 in structure "local_pnt_entry" packed unaligned dcl 58 in procedure "pnt_db_util_" set ref 204* 255* 295* 321 321 330* 378 short_pw 1 based bit(1) level 4 in structure "pnt_entry" packed unaligned dcl 4-22 in procedure "pnt_db_util_" set ref 453* short_pw 1 000266 automatic bit(1) level 4 in structure "local_pnt_entry" packed unaligned dcl 58 in procedure "pnt_db_util_" set ref 204* 255* 290 290 295* 330* short_pw 1 based bit(1) level 4 in structure "new_pnt_entry" packed unaligned dcl 62 in procedure "pnt_db_util_" set ref 453 size builtin function dcl 142 ref 857 857 859 string builtin function dcl 143 set ref 797* substr builtin function dcl 144 ref 290 290 321 321 tcode 000264 automatic fixed bin(35,0) dcl 56 set ref 436* 437 440 type 000216 automatic fixed bin(9,0) level 2 packed unsigned unaligned dcl 53 set ref 794* unspec builtin function dcl 145 set ref 778* 782 782 861 861 899 899 940 940 user_id 22 based char(32) level 3 in structure "new_pnt_entry" dcl 62 in procedure "pnt_db_util_" set ref 408 414 470 814 user_id 2 000216 automatic char(32) level 2 in structure "PAR" dcl 53 in procedure "pnt_db_util_" set ref 802* 808* 814* 856 user_id 22 000266 automatic char(32) level 3 in structure "local_pnt_entry" dcl 58 in procedure "pnt_db_util_" set ref 197 226 520 939 user_id 22 based char(32) level 3 in structure "pnt_entry" dcl 4-22 in procedure "pnt_db_util_" set ref 629 631 663 665 808 validation_level 000522 automatic fixed bin(3,0) dcl 748 set ref 751* 752 version based fixed bin(17,0) level 2 in structure "new_pnt_entry" dcl 62 in procedure "pnt_db_util_" set ref 402 version 0(09) 000216 automatic fixed bin(9,0) level 2 in structure "PAR" packed unsigned unaligned dcl 53 in procedure "pnt_db_util_" set ref 795* version 000266 automatic fixed bin(17,0) level 2 in structure "local_pnt_entry" dcl 58 in procedure "pnt_db_util_" set ref 488 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. AAB_channel internal static fixed bin(9,0) initial unsigned unaligned dcl 1-18 AAB_dial_service internal static fixed bin(9,0) initial unsigned unaligned dcl 1-18 AAB_ia_abs internal static fixed bin(9,0) initial unsigned unaligned dcl 1-18 AAB_ia_abs_proxy internal static fixed bin(9,0) initial unsigned unaligned dcl 1-18 AAB_ia_int_dmn internal static fixed bin(9,0) initial unsigned unaligned dcl 1-18 AAB_mseg_msg internal static fixed bin(9,0) initial unsigned unaligned dcl 1-18 AAB_rcp_object internal static fixed bin(9,0) initial unsigned unaligned dcl 1-18 AAB_ss_link internal static fixed bin(9,0) initial unsigned unaligned dcl 1-18 AAB_ss_object internal static fixed bin(9,0) initial unsigned unaligned dcl 1-18 PNT_VERSION_3 internal static fixed bin(17,0) initial dcl 5-14 audit_binary_expanders internal static varying char(13) initial array dcl 1-46 pnt_header based structure level 1 dcl 5-5 pnt_header_ptr automatic pointer dcl 5-4 NAMES DECLARED BY EXPLICIT CONTEXT. ADD_STRING 003766 constant entry internal dcl 916 ref 895 897 899 901 903 905 907 909 AUDIT 003444 constant entry internal dcl 846 ref 468 527 564 AUDIT_CHECK 003146 constant entry internal dcl 738 ref 423 500 551 937 AUDIT_READ 004056 constant entry internal dcl 929 ref 206 233 258 297 332 351 385 AUDIT_SETUP 003270 constant entry internal dcl 788 ref 424 501 552 CHECK_FOR_AS_NOTIFICATION 003573 constant entry internal dcl 867 ref 430 FILL_PNT_AUDIT_ENTRY 003420 constant entry internal dcl 829 ref 803 809 815 816 RETURN_TO_CALLER 002357 constant label dcl 598 ref 161 175 192 200 207 221 229 234 251 259 280 298 312 318 326 333 347 352 372 386 405 411 418 442 474 491 495 512 522 530 546 569 594 SETUP_BRIEF_DESCRIPTION 003631 constant entry internal dcl 887 ref 821 add_alias 002666 constant entry internal dcl 675 ref 436 517 add_entry 001613 constant entry external dcl 480 admin_get_entry 000461 constant entry external dcl 244 close 000223 constant entry external dcl 164 delete_alias 002750 constant entry internal dcl 692 ref 445 558 find_again 002401 constant label dcl 616 in procedure "find_local_entry" ref 626 632 find_again 002524 constant label dcl 649 in procedure "find_update_entry" ref 660 666 find_local_entry 002362 constant entry internal dcl 604 ref 250 279 311 346 371 542 591 find_update_entry 002505 constant entry internal dcl 637 ref 414 get_abs_entry 000262 constant entry external dcl 185 get_again 003046 constant label dcl 722 ref 732 get_local_entry 003035 constant entry internal dcl 712 ref 191 220 get_network_password 001170 constant entry external dcl 365 login_get_entry 000567 constant entry external dcl 273 network_get_entry 000731 constant entry external dcl 305 open 000121 constant entry external dcl 149 pnt_db_util_ 000106 constant entry external dcl 16 priv_get_abs_entry 000365 constant entry external dcl 214 priv_get_entry 001074 constant entry external dcl 340 remove_entry 002046 constant entry external dcl 536 replace_entry 003001 constant entry internal dcl 701 ref 439 465 table_data 002236 constant entry external dcl 571 update_entry 001307 constant entry external dcl 395 validate_entry 002302 constant entry external dcl 584 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5072 5174 4353 5102 Length 5576 4353 102 365 517 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME pnt_db_util_ 726 external procedure is an external procedure. find_local_entry internal procedure shares stack frame of external procedure pnt_db_util_. find_update_entry internal procedure shares stack frame of external procedure pnt_db_util_. add_alias internal procedure shares stack frame of external procedure pnt_db_util_. delete_alias internal procedure shares stack frame of external procedure pnt_db_util_. replace_entry internal procedure shares stack frame of external procedure pnt_db_util_. get_local_entry internal procedure shares stack frame of external procedure pnt_db_util_. AUDIT_CHECK internal procedure shares stack frame of external procedure pnt_db_util_. AUDIT_SETUP internal procedure shares stack frame of external procedure pnt_db_util_. FILL_PNT_AUDIT_ENTRY internal procedure shares stack frame of external procedure pnt_db_util_. AUDIT internal procedure shares stack frame of external procedure pnt_db_util_. CHECK_FOR_AS_NOTIFICATION internal procedure shares stack frame of external procedure pnt_db_util_. SETUP_BRIEF_DESCRIPTION internal procedure shares stack frame of external procedure pnt_db_util_. ADD_STRING internal procedure shares stack frame of external procedure pnt_db_util_. AUDIT_READ internal procedure shares stack frame of external procedure pnt_db_util_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME pnt_db_util_ 000100 audit_flag pnt_db_util_ 000101 brief_description pnt_db_util_ 000202 code pnt_db_util_ 000203 event_flags pnt_db_util_ 000204 key pnt_db_util_ 000214 notify_as pnt_db_util_ 000215 operation_code pnt_db_util_ 000216 PAR pnt_db_util_ 000260 pnt_entry_ptr pnt_db_util_ 000262 pnt_ptr pnt_db_util_ 000264 tcode pnt_db_util_ 000266 local_pnt_entry pnt_db_util_ 000406 pntep pnt_db_util_ 000426 name find_local_entry 000436 change_clock find_local_entry 000437 new_change_clock find_local_entry 000446 name find_update_entry 000456 change_clock find_update_entry 000457 new_change_clock find_update_entry 000466 pep add_alias 000512 change_clock get_local_entry 000513 new_change_clock get_local_entry 000522 validation_level AUDIT_CHECK 000546 object_name AUDIT 000563 binary_info_size AUDIT 000614 object_name AUDIT_READ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out return shorten_stack ext_entry ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. access_audit_r1_$check_general access_audit_r1_$log_general hcs_$level_get ms_table_mgr_$abs_entry ms_table_mgr_$close ms_table_mgr_$delete_entry ms_table_mgr_$delete_entry_ignore_mylock ms_table_mgr_$find_entry ms_table_mgr_$get_change_clock ms_table_mgr_$new_entry ms_table_mgr_$new_entry_ignore_mylock ms_table_mgr_$open ms_table_mgr_$table_data ms_table_mgr_$unlock ms_table_mgr_$update_entry ms_table_mgr_$update_entry_dont_unlock pnt_notify_as_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. access_operations_$pnt_entry_add access_operations_$pnt_entry_admin_read access_operations_$pnt_entry_delete access_operations_$pnt_entry_login_read access_operations_$pnt_entry_modify access_operations_$pnt_entry_network_read access_operations_$pnt_entry_priv_read error_table_$bad_arg error_table_$bad_password error_table_$checksum_failure error_table_$no_record error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 16 000105 19 000113 149 000114 158 000150 159 000153 160 000154 161 000216 164 000217 172 000237 173 000242 174 000243 175 000254 185 000255 188 000300 189 000303 190 000306 191 000307 192 000327 197 000331 199 000335 200 000340 203 000341 204 000347 205 000353 206 000360 207 000362 214 000363 217 000403 218 000406 219 000411 220 000412 221 000432 226 000434 228 000440 229 000443 232 000444 233 000451 234 000453 244 000454 247 000505 248 000510 249 000513 250 000514 251 000532 254 000537 255 000545 257 000551 258 000556 259 000560 273 000561 276 000620 277 000623 278 000626 279 000627 280 000645 288 000647 290 000657 294 000705 295 000713 296 000717 297 000724 298 000726 305 000727 308 000762 309 000765 310 000770 311 000771 312 001007 315 001011 317 001014 318 001017 321 001020 325 001044 326 001047 329 001050 330 001056 331 001062 332 001067 333 001071 340 001072 343 001120 344 001123 345 001126 346 001127 347 001145 350 001152 351 001157 352 001161 365 001162 368 001217 369 001222 370 001225 371 001226 372 001244 375 001246 377 001251 378 001257 379 001263 381 001264 382 001272 383 001273 385 001276 386 001300 395 001301 398 001325 399 001330 400 001333 401 001336 402 001337 404 001342 405 001345 408 001346 410 001360 411 001363 414 001364 415 001372 418 001377 421 001401 423 001404 424 001406 430 001413 432 001415 434 001425 436 001433 437 001437 439 001441 440 001443 442 001447 445 001450 449 001470 450 001475 452 001505 453 001510 455 001514 457 001523 458 001526 460 001532 462 001542 465 001552 466 001554 468 001556 470 001563 474 001610 480 001611 483 001637 484 001642 485 001645 486 001646 488 001653 490 001656 491 001661 494 001662 495 001710 498 001712 500 001715 501 001717 507 001724 508 001730 509 001743 511 001745 512 001757 515 001760 517 001764 518 001770 520 001772 522 002017 524 002020 525 002021 527 002033 530 002040 536 002041 539 002070 540 002073 541 002076 542 002077 543 002115 546 002122 549 002124 551 002127 552 002131 558 002136 560 002156 562 002201 564 002203 566 002210 569 002230 571 002231 574 002252 575 002255 576 002277 584 002300 587 002324 588 002327 589 002332 591 002333 592 002351 594 002356 598 002357 600 002361 604 002362 613 002373 614 002375 616 002401 618 002437 621 002444 622 002450 623 002464 626 002470 629 002473 631 002500 632 002503 635 002504 637 002505 646 002516 647 002520 649 002524 651 002562 654 002567 656 002573 657 002607 660 002613 663 002616 665 002623 666 002626 670 002627 672 002665 675 002666 683 002670 684 002722 687 002726 688 002734 689 002747 692 002750 698 002752 699 003000 701 003001 706 003003 707 003017 709 003034 712 003035 722 003046 724 003110 727 003117 728 003123 729 003136 732 003142 735 003145 738 003146 751 003150 752 003157 754 003162 755 003164 758 003165 760 003166 762 003176 764 003204 766 003212 768 003220 770 003226 772 003234 775 003241 778 003243 779 003244 780 003246 782 003250 783 003265 784 003266 785 003267 788 003270 794 003272 795 003274 796 003276 797 003300 799 003301 801 003304 802 003306 803 003314 804 003322 805 003323 807 003325 808 003327 809 003333 810 003341 811 003342 813 003344 814 003346 815 003352 816 003360 817 003366 819 003402 821 003414 823 003415 824 003416 826 003417 829 003420 838 003422 839 003427 840 003434 841 003437 842 003441 843 003443 846 003444 856 003446 857 003461 859 003473 861 003475 864 003572 867 003573 876 003575 878 003607 880 003617 883 003627 887 003631 894 003632 895 003633 897 003643 899 003655 901 003665 903 003700 905 003713 907 003726 909 003740 911 003754 913 003765 916 003766 921 003777 923 004016 925 004054 929 004056 937 004060 938 004070 939 004073 940 004106 942 004160 ----------------------------------------------------------- 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