THIS FILE IS DAMAGED ed |^* Brunbelle ed Multics Boughton  "T l Boughton ken OperDevel J^ sg ^T George sg Office ?MDWalker ~ Ԣ4 DWalker NMLPROD Q+.Q mQkrnoneWY50_80C QjGvan not be used with like */ 80 aligned, 81 2 version character (8) aligned, 82 2 count fixed binary, 83 2 entries (3) like general_extended_acl_entry; 84 85 dcl 1 cbi aligned like create_branch_info; 86 87 dcl 1 delete_all_others_acl 88 aligned like delete_acl_entry; 89 dcl delete_all_others_access 90 bit (1) aligned; 91 dcl delete_all_others_code 92 fixed binary (35); 93 94 dcl ext_mode bit (36) aligned; 95 96 dcl operation_specific_return 97 entry (fixed binary (35)) variable; 98 dcl operation_specific_abort 99 entry () variable; 100 dcl operation_name character (64); 101 102 dcl mseg_dir_name character (168); 103 dcl mseg_entryname character (32); 104 105 dcl rqo_detected bit (1) aligned; 106 107 dcl lock_code fixed binary (35); 108 109 dcl acl_idx fixed binary; 110 111 dcl 1 EMPTY_ACL aligned static options (constant), 112 2 version character (8) initial ("gxacl001"), 113 2 count fixed binary initial (0); 114 115 dcl ( 116 SYSDAEMONS initial ("*.SysDaemon.*"), 117 ALL_OTHERS initial ("*.*.*") 118 ) character (32) static options (constant); 119 120 dcl DONT_ADD_SYSDAEMONS bit (1) static options (constant) initial ("1"b); 121 122 dcl ( 123 error_table_$action_not_performed, 124 error_table_$argerr, 125 error_table_$bad_acl_mode, 126 error_table_$bad_mbx_acl_rs, 127 error_table_$bad_mbx_acl_awu, 128 error_table_$bad_subr_arg, 129 error_table_$invalid_lock_reset, 130 error_table_$locked_by_this_process, 131 error_table_$lock_wait_time_exceeded, 132 error_table_$noalloc, 133 error_table_$null_info_ptr, 134 error_table_$unimplemented_version, 135 error_table_$user_not_found 136 ) fixed binary (35) external; 137 138 dcl get_system_free_area_ 139 entry () returns (pointer); 140 dcl hcs_$add_acl_entries 141 entry (character (*), character (*), pointer, fixed binary, fixed binary (35)); 142 dcl hcs_$chname_file entry (character (*), character (*), character (*), character (*), fixed binary (35)); 143 dcl hcs_$chname_seg entry (pointer, character (*), character (*), fixed binary (35)); 144 dcl hcs_$create_branch_ entry (character (*), character (*), pointer, fixed binary (35)); 145 dcl hcs_$delentry_seg entry (pointer, fixed binary (35)); 146 dcl hcs_$delete_acl_entries 147 entry (character (*), character (*), pointer, fixed binary, fixed binary (35)); 148 dcl hcs_$list_acl entry (character (*), character (*), pointer, pointer, pointer, fixed binary, 149 fixed binary (35)); 150 dcl hcs_$replace_acl entry (character (*), character (*), pointer, fixed binary, bit (1), fixed binary (35)); 151 dcl hcs_$set_safety_sw entry (character (*), character (*), bit (1), fixed binary (35)); 152 dcl hcs_$set_safety_sw_seg 153 entry (pointer, bit (1), fixed binary (35)); 154 dcl mseg_index_$delete entry (pointer, pointer); 155 dcl mseg_utils_$abort_operation 156 entry (pointer); 157 dcl mseg_utils_$begin_operation 158 entry (bit (36) aligned, pointer, character (*), character (*), character (*), pointer, 159 bit (1) aligned, fixed binary (35)); 160 dcl mseg_utils_$finish_operation 161 entry (pointer); 162 dcl mseg_utils_$request_unlock_on_finish 163 entry (pointer); 164 dcl mseg_utils_$salvage_for_cause 165 entry (pointer, fixed binary (35)) options (variable); 166 dcl pathname_ entry (character (*), character (*)) returns (character (168)); 167 dcl sub_err_ entry () options (variable); 168 169 dcl (addr, after, before, bool, dimension, null, reverse, string) 170 builtin; 17 vVh6P SNetwork_Server Daemon Ovz+Scavenger @$ l, Scavenger SysDaemon t_initial_acl.entries (*).extended_mode = MSEG_QUEUE_INITIAL_ACL (*); 249 end; 250 251 else call sub_err_ (error_table_$bad_subr_arg, operation_name, ACTION_CANT_RESTART, 0, null (), 252 "No initial ACL supplied for ^a which is not a mailbox or queue message segment.", 253 pathname_ (mseg_dir_name, mseg_entryname)); 254 255 else call validate_acl (); /* caller has supplied the initial ACL */ 256 257 258 /*** Create the segment */ 259 260 cbi.version = create_branch_version_2; 261 string (cbi.switches) = ""b; 262 cbi.mbz2 = ""b; 263 cbi.bitcnt, cbi.quota, cbi.dir_quota = 0; 264 265 cbi.userid = "*.*.*"; /* give everyone real read/write access ... */ 266 cbi.mode = RW_ACCESS; 267 cbi.rings (*) = mseg_data_$execution_ring; /* ... but only in the current ring or below */ 268 269 if mseg_operation.call_admin_gate 270 then do; /* only make it a multiclass segment if running in ring 1 */ 271 cbi.priv_upgrade_sw = "1"b; 272 cbi.access_class = mseg_operation.caller.max_authorization; 273 end; 274 275 else do; /* create an ordinary segment if outside ring 1 */ 276 cbi.parent_ac_sw = "1"b; 277 cbi.access_class = ""b; /* ... this is ignored if parent_ac_sw is set */ 278 end; 279 280 call hcs_$create_branch_ (mseg_dir_name, mseg_entryname, addr (cbi), code); 281 if code ^= 0 282 then call return_from_operation (code); 283 284 285 /*** We have succesfully created the segment -- Set its initial ACL. We must use our replace_acl_seg primitive 286* rather than calling hcs_$replace_acl directly in case the caller has supplied an initial ACL without a 287* "*.*.*" term. Proper operation of the primitives require that all users have read/write real access to any 288* message segment. */ 289 290 on area call return_noalloc_from_operation (); 291 292 call replace_acl_seg (); /* it does the return_from_operation for us */ 293 294 /* Delete ACL entries */ 295 296 mseg_fs_interface_$delete_acl_entries_seg: 297 entry (P_mseg_operation_ptr, P_acl_ptr, P_code); 298 299 call setup_operation (); /* for cleanup handler */ 300 ring0_acl_ptr = null (); 301 operation_specific_return = return_from_delete_acl_entries_seg; 302 operation_specific_abort = abort_delete_acl_entries_seg; 303 304 on cleanup call operation_was_aborted (); 305 306 call begin_operation (mseg_operations_$delete_acl_entries_seg); 307 308 acl_ptr = P_acl_ptr; 309 310 if acl_ptr = null () 311 then do; /*** An empty general_delete_acl is translated into a request to delete the entire ACL. */ 312 acl_ptr = addr (EMPTY_ACL); 313 on area call return_noalloc_from_operation (); 314 call replace_acl_seg (); /* it does return_from_operation for us */ 315 end; 316 317 if general_delete_acl.version ^= GENERAL_DELETE_ACL_VERSION_1 318 then /*** Our caller, as opposed to the user's application, is responsible for creating the ACL structure. 319* Therefore, an incorrect version indicates a programming error in our caller. */ 320 call sub_err_ (error_table_$unimplemented_version, operation_name, ACTION_CANT_RESTART, null (), 0, 321 "general_delete_acl.version = ""^a"".", general_delete_acl.version); 322 323 324 /*** Examine the ACL entries to be deleted -- If the caller asks to delete the ACL term for "*.*.*", we will 325* actually not delete it. Instead, we will change its extended access to null as we must insure that all 326* users always have read/write real access to all message segments. */ 327 328 system_area_ptr = get_system_free_area_ (); 329 ring0_acl_count = general_delete_acl.count; 330 331 on area call return_noalloc_from_operation (); 332 allocate ring0_delete_acl in (system_area) set (ring0_acl_ptr); 333 revert area; 334 335 ring0_acl_count = 0; /* no entries in the ACL yet */ 336 delete_all_others_access = "0"b; 337 338 do acl_idx = 1 to general_delete_acl.count; 339 if general_delete_acl.entries (acl_idx).access_name = ALL_OTHERS 340 then delete_all_others_access = "1"b; 341 else do; 342 ring0_acl_count = ring0_acl_count + 1; 343 ring0_delete_acl.entries (ring0_acl_count).access_name = 344 general_delete_acl.entries (acl_idx).access_name; 345 end; 346 end; 347 348 349 /*** Delete the requested non "*.*.*" ACL entries */ 350 351 if ring0_acl_count ^= 0 352 then call hcs_$delete_acl_entries (mseg_dir_name, mseg_entryname, addr (ring0_delete_acl), ring0_acl_count, 353 code); 354 355 else code = 0; /* no non "*.*.*" terms to delete */ 356 357 358 /*** Remove the extended access for "*.*.*" if requested */ 359 360 if delete_all_others_access & ((code = 0) | (code = error_table_$argerr)) 361 then do; /* don't bother if ring 0 will complain */ 362 delete_all_others_acl.access_name = ALL_OTHERS; 363 call hcs_$delete_acl_entries (mseg_dir_name, mseg_entryname, addr (delete_all_others_acl), 1, 364 delete_all_others_code); 365 if delete_all_others_code = error_table_$argerr 366 then delete_all_others_code = delete_all_others_acl.status_code; 367 end; 368 369 else delete_all_others_code = error_table_$action_not_performed; 370 371 372 /*** Return the results of the above actions to our caller */ 373 374 ring0_acl_count = 0; 375 376 do acl_idx = 1 to general_delete_acl.count; 377 if general_delete_acl.entries (acl_idx).access_name = ALL_OTHERS 378 then general_delete_acl.entries (acl_idx).status_code = delete_all_others_code; 379 else do; 380 ring0_acl_count = ring0_acl_count + 1; 381 general_delete_acl.entries (acl_idx).status_code = 382 ring0_delete_acl.entries (ring0_acl_count).status_code; 383 end; 384 end; 385 386 if code = 0 /* all non "*.*.*" terms were deleted ... */ 387 then if delete_all_others_access & (delete_all_others_code ^= 0) 388 then code = error_table_$argerr; /* ... but the "*.*.*" deletion failed: let the caller know */ 389 390 call return_from_operation (code); 391 392 393 394 /* Special processing required upon the completion of a delete_acl_entries_seg operation */ 395 396 return_from_delete_acl_entries_seg: 397 procedure (p_code); 398 399 dcl p_code fixed binary (35) parameter; 400 401 if ring0_acl_ptr ^= null () 402 then do; 403 free ring0_delete_acl in (system_area); 404 ring0_acl_ptr = null (); 405 end; 406 407 return; 408 409 end return_from_delete_acl_entries_seg; 410 411 412 413 /* Special processing required upon abnormal termination of a delete_acl_entries_seg operation */ 414 415 abort_delete_acl_entries_seg: 416 procedure (); 417 418 if ring0_acl_ptr ^= null () 419 then do; 420 free ring0_delete_acl in (system_area); 421 ring0_acl_ptr = null (); 422 end; 423 424 return; 425 426 end abort_delete_acl_entries_seg; 427 428 /* Delete the segment -- We must try to delete even if we can't lock the segment due to RQO or connection failures. 429* Therefore, we only request mseg_utils_ to try to lock the segment but not to check the result@Apuzzo 8l\XR6~ Apuzzo fa Develcon !D LU9LLnoneVIP7400_DTR L%\"ng0_acl in (system_area); 524 ring0_acl_ptr = null (); 525 end; 526 527 if (acl_ptr ^= null ()) & (p_code ^= 0) 528 then do; /* we aren't going to return this ACL because of errors */ 529 free general_extended_acl in (system_area); 530 acl_ptr = null (); 531 end; 532 533 return; 534 535 end return_from_list_acl_seg; 536 537 538 539 /* Special processing required upon abnormal termination of a list_acl_seg operation */ 540 541 abort_list_acl_seg: 542 procedure (); 543 544 if ring0_acl_ptr ^= null () 545 then do; 546 free ring0_acl in (system_area); 547 ring0_acl_ptr = null (); 548 end; 549 550 if acl_ptr ^= null () 551 then do; 552 free general_extended_acl in (system_area); 553 acl_ptr = null (); 554 end; 555 556 return; 557 558 end abort_list_acl_seg; 559 560 /* List individual ACL entries */ 561 562 mseg_fs_interface_$list_acl_entries_seg: 563 entry (P_mseg_operation_ptr, P_acl_ptr, P_code); 564 565 call setup_operation (); /* for cleanup handler */ 566 on cleanup call operation_was_aborted (); 567 568 call begin_operation (mseg_operations_$list_acl_entries_seg); 569 570 571 /*** Our caller, as opposed to the user's application, is responsible for creating the ACL structure supplied 572* to all mseg_ entrypoints. Therefore, a missing structure or an incorrect version indicates a programming 573* error in our caller. */ 574 575 acl_ptr = P_acl_ptr; 576 577 if acl_ptr = null () 578 then call sub_err_ (error_table_$null_info_ptr, operation_name, ACTION_CANT_RESTART, null (), 0, 579 "general_extended_acl_ptr"); 580 581 if general_extended_acl.version ^= GENERAL_EXTENDED_ACL_VERSION_1 582 then call sub_err_ (error_table_$unimplemented_version, operation_name, ACTION_CANT_RESTART, null (), 0, 583 "general_extended_acl.version = ""^a"".", general_extended_acl.version); 584 585 586 /*** List the individual ACL entries -- If the caller asks to list the ACL term for "*.*.*" and its extended 587* mode is null, we will claim that "*.*.*" has no ACL term. We do this to hide from our caller the fact that 588* we must always insure that all users have read/write real access to all message segments. */ 589 590 call hcs_$list_acl (mseg_dir_name, mseg_entryname, null (), (null ()), addr (general_extended_acl.entries), 591 general_extended_acl.count, code); 592 593 if (code = 0) | (code = error_table_$argerr) 594 then do; /* only if ring 0 actually returned something */ 595 do acl_idx = 1 to general_extended_acl.count; 596 if (general_extended_acl.entries (acl_idx).access_name = ALL_OTHERS) 597 & (general_extended_acl.entries (acl_idx).extended_mode = MSEG_NULL_ACCESS) 598 then do; 599 general_extended_acl.entries (acl_idx).status_code = error_table_$user_not_found; 600 code = error_table_$argerr; 601 end; 602 end; 603 end; 604 605 call return_from_operation (code); 606 607 /* Replace the ACL */ 608 609 mseg_fs_interface_$replace_acl_seg: 610 entry (P_mseg_operation_ptr, P_acl_ptr, P_code); 611 612 call setup_operation (); /* for cleanup handler */ 613 on cleanup call operation_was_aborted (); 614 615 call begin_operation (mseg_operations_$replace_acl_seg); 616 617 if P_acl_ptr = null () 618 then acl_ptr = addr (EMPTY_ACL); /* we must have an ACL structure for proper operation */ 619 else call validate_acl (); /* insure the caller's ACL is OK */ 620 621 on area call return_noalloc_from_operation (); 622 623 call replace_acl_seg (); /* it does the return_from_operation for us */ 624 625 626 627 /* Actually replace the ACL -- This internal procedure is also used by create_seg and delete_acl_entries_seg. */ 628 629 replace_acl_seg: 630 procedure (); 631 632 dcl original_acl_ptr pointer; 633 dcl add_all_others_acl bit (1) aligned; 634 635 636 /*** Examine the new ACL -- If the new ACL does not contain an entry for "*.*.*", we will supply one with null 637* extended access. We do this to insure that we always have read/write access to all message segments. */ 638 639 add_all_others_acl = "1"b; /* until proven otherwise */ 640 641 do acl_idx = 1 to general_extended_acl.count while (add_all_others_acl); 642 if general_extended_acl.entries (acl_idx).access_name = ALL_OTHERS 643 then add_all_others_acl = "0"b; 644 end; 645 646 if add_all_others_acl 647 then do; 648 system_area_ptr = get_system_free_area_ (); 649 original_acl_ptr = acl_ptr; /* remember where our caller's ACL resides */ 650 651 acl_ptr = null (); /* for cleanup handler */ 652 operation_specific_return = return_from_replace_acl_seg; 653 operation_specific_abort = abort_replace_acl_seg; 654 655 acl_count = original_acl_ptr -> general_extended_acl.count + 1; 656 allocate general_extended_acl in (system_area) set (acl_ptr); 657 658 do acl_idx = 1 to original_acl_ptr -> general_extended_acl.count; 659 general_extended_acl.entries (acl_idx) = 660 original_acl_ptr -> general_extended_acl.entries (acl_idx); 661 end; 662 663 general_extended_acl.entries (acl_count).access_name = ALL_OTHERS; 664 general_extended_acl.entries (acl_count).mode = RW_ACCESS; 665 general_extended_acl.entries (acl_count).extended_mode = MSEG_NULL_ACCESS; 666 end; 667 668 669 /*** Replace the ACL */ 670 671 call hcs_$replace_acl (mseg_dir_name, mseg_entryname, addr (general_extended_acl.entries), 672 general_extended_acl.count, DONT_ADD_SYSDAEMONS, code); 673 674 call return_from_operation (code); 675 676 677 678 /* Special processing required upon the completion of a replace_acl_seg operation -- This entrypoint will only be invoked 679* if we created a copy of the caller's ACL with an extra entry for "*.*.*". This entrypoint will copy the per-ACL status 680* codes back into the caller's structure and free the copy. */ 681 682 return_from_replace_acl_seg: 683 procedure (p_code); 684 685 dcl p_code fixed binary (35) parameter; 686 687 do acl_idx = 1 to original_acl_ptr -> general_extended_acl.count; 688 original_acl_ptr -> general_extended_acl.entries (acl_idx).status_code = 689 general_extended_acl.entries (acl_idx).status_code; 690 end; 691 692 free general_extended_acl in (system_area); 693 acl_ptr = null (); 694 695 return; 696 697 end return_from_replace_acl_seg; 698 699 700 701 /* Special processing required upon abnormal termination of a replace_acl_seg operation -- This entrypoint will only be 702* invoked if we created a copy of the caller's ACL which we must now free. */ 703 704 abort_replace_acl_seg: 705 procedure (); 706 707 if acl_ptr ^= null () 708 then do; 709 free general_extended_acl in (system_area); 710 acl_ptr = null (); 711 end; 712 713 return; 714 715 end abort_replace_acl_seg; 716 717 end replace_acl_seg; 718 719 /* Set the safety switch */ 720 721 mseg_fs_interface_$set_safety_switch_seg: 722 entry (P_mseg_operation_ptr, P_safety_switch, P_code); 723 724 call setup_operation (); /* for cleanup handler */ 725 on cleanup call operation_was_aborted (); 726 727 call begin_operation (mseg_operations_$set_safety_switch_seg); 728 if code ^= 0 729 then call return_from_operation (code); 730 731 if mseg_ptr ^= null () /* use the pointer interface whenever possible */ 732 then call hcs_$set_safety_sw_seg (mseg_ptr, (P_safety_switch), code); 733 else call hcs_$set_safety_sw (mseg_dir_name, mseg_entryname, (P_safety_switch), code); 734 735 call return_from_operation (code); 736 737 /* Common initialization for all operations */ 738 739 setup_operation: 740 procedure (); 741 742 code = 0; 743 744 operation_specific_abort = nulle; /* nothing special when we abort or return (yet) */ 745 operation_specific_return = nulle; 746 747 mseg_operation_ptr = null (); 748 749 return; 750 751 end setup_operation; 752 753 754 755 /* Begin the operation -- This procedure isn't part of setup_operation so that we can be certain to have a cleanup handler 756* available at all times that the message segment may be in use. */ 757 758 begin_operation: 759 procedure (p_mseg_operation_id); 760 761 dcl p_mseg_operation_id bit (36) aligned parameter; 762 763 mseg_operation_ptr = P_mseg_operation_ptr; 764 765 call mseg_utils_$begin_operation (p_mseg_operation_id, mseg_operation_ptr, operation_name, mseg_dir_name, 766 mseg_entryname, mseg_ptr, rqo_detected, code); 767 768 return; 769 770 end begin_operation; 771 772 773 774 /* The "null" entry which indicates that there's no special abort/return processing for an operation */ 775 776 nulle: 777 procedure (); 778 779 return; 780 781 end nulle; 782 783 /* Return after completion of an operation */ 784 785 return_from_operation: 786 procedure (p_code); 787 788 dcl p_code fixed binary (35) parameter; 789 790 if operation_specific_return ^= nulle /* let the operation do anything special */ 791 then call operation_specific_return (p_code); 792 793 if mseg_operation_ptr ^= null () /* may be invoked before we've called begin_operation */ 794 then call mseg_utils_$finish_operation (mseg_operation_ptr); 795 796 P_code = p_code; /* set our caller's status code */ 797 go to RETURN_FROM_OPERATION; 798 799 end return_from_operation; 800 801 RETURN_FROM_OPERATION: 802 return; 803 804 805 806 /* Return error_table$_noalloc to our caller after an allocation failure */ 807 808 return_noalloc_from_operation: 809 procedure (); 810 811 if operation_specific_return ^= nulle /* let the operation do anything special */ 812 then call operation_specific_return (error_table_$noalloc); 813 814 call mseg_utils_$finish_operation (mseg_operation_ptr); 815 816 P_code = error_table_$noalloc; /* set our caller's status code */ 817 go to RETURN_FROM_OPERATION; 818 819 end return_noalloc_from_operation; 820 821 822 823 /* Abort an operation */ 824 825 operation_was_aborted: 826 procedure (); 827 828 if operation_specific_abort ^= nulle /* let the operation do anything special */ 829 then call operation_specific_abort (); 830 831 call mseg_utils_$abort_operation (mseg_operation_ptr); 832 833 return; 834 835 end operation_was_aborted; 836 837 /* Validate the ACL structure -- We force the real modes in the structure to RW_ACCESS as that access is required for 838* proper operation of the primitives. We also verify that the extended modes do not request any unused modes. */ 839 840 validate_acl: 841 procedure (); 842 843 dcl found_invalid_mode bit (1) aligned; 844 845 acl_ptr = P_acl_ptr; 846 847 /*** Our caller, as opposed to the user's application, is responsible for creating the ACL structure supplied 848* to all mseg_ entrypoints. Therefore, a missing structure or an incorrect version indicates a programming 849* error in our caller. */ 850 851 if acl_ptr = null () 852 then call sub_err_ (error_table_$null_info_ptr, operation_name, ACTION_CANT_RESTART, null (), 0, 853 "general_extended_acl_ptr"); 854 855 if general_extended_acl.version ^= GENERAL_EXTENDED_ACL_VERSION_1 856 then call sub_err_ (error_table_$unimplemented_version, operation_name, ACTION_CANT_RESTART, null (), 0, 857 "general_extended_acl.version = ""^a"".", general_extended_acl.version); 858 859 /* Check for invalid extended modes. The following requirements are enforced: 860* 1. No bits outside of MSEG_FULL_ACCESS may be on. 861* 2. If r permission is given, s permission must be given. 862* 3. If w permission is given, a permission must be given. 863* 4. If u permission is given, a permission must be given. */ 864 found_invalid_mode = "0"b; 865 866 do acl_idx = 1 to general_extended_acl.count; 867 general_extended_acl.entries (acl_idx).mode = RW_ACCESS; 868 ext_mode = general_extended_acl.entries (acl_idx).extended_mode; 869 if bool (ext_mode, MSEG_FULL_ACCESS, "0010"b) = ""b 870 & ^(((ext_mode & MSEG_R_ACCESS) ^= ""b) & ^((ext_mode & MSEG_S_ACCESS) ^= ""b)) 871 & ^(((ext_mode & MSEG_W_ACCESS) ^= ""b) & ^((ext_mode & MSEG_A_ACCESS) ^= ""b)) 872 & ^(((ext_mode & MSEG_U_ACCESS) ^= ""b) & ^((ext_mode & MSEG_A_ACCESS) ^= ""b)) 873 then general_extended_acl.entries (acl_idx).status_code = 0; 874 else do; 875 if (((ext_mode & MSEG_R_ACCESS) ^= ""b) & ^((ext_mode & MSEG_S_ACCESS) ^= ""b)) 876 then general_extended_acl.entries (acl_idx).status_code = error_table_$bad_mbx_acl_rs; 877 else if (((ext_mode & MSEG_W_ACCESS) ^= ""b) & ^((ext_mode & MSEG_A_ACCESS) ^= ""b)) 878 | (((ext_mode & MSEG_U_ACCESS) ^= ""b) & ^((ext_mode & MSEG_A_ACCESS) ^= ""b)) 879 then general_extended_acl.entries (acl_idx).status_code = error_table_$bad_mbx_acl_awu; 880 else general_extended_acl.entries (acl_idx).status_code = error_table_$bad_acl_mode; 881 found_invalid_mode = "1"b; 882 end; 883 end; 884 885 if found_invalid_mode /* error_table_$argerr => check the individual status_codes */ 886 then call return_from_operation (error_table_$argerr); 887 888 return; 889 890 end validate_acl; 891 892 /* format: off */ 893 /* Begin include file mseg_data_.incl.pl1 BIM 1985-04-15 */ 1 2 /* format: style4 */ 1 3 1 4 declare mseg_data_$lock_id bit (72) aligned external; 1 5 declare mseg_data_$block_size fixed bin (35) ext static; 1 6 declare mseg_data_$max_message_size fixed bin (35) ext static; 1 7 declare mseg_data_$template_operation bit (36) aligned external static; /* like mseg_operation */ 1 8 declare mseg_data_$admin_ring fixed binary (3) external; 1 9 declare mseg_data_$execution_ring fixed bin (3) ext static; 1 10 declare mseg_data_$process_max_authorization bit (72) aligned ext static; 1 11 declare mseg_data_$group_id char (32) unaligned external static; 1 12 1 13 /* End include file mseg_data_.incl.pl1 */ 893 894 /* BEGIN INCLUDE FILE ... mseg_operation.incl.pl1 */ 2 2 2 3 /* format: style3,idind30,linecom */ 2 4 2 5 /**** Created 1985-04-16, BIM: from Pandolf's mseg_access_operation */ 2 6 2 7 /**** NOTES: 2 8* The caller of mseg_ must set mseg_operation.access_operation to record 2 9* the type of access checking it has performed and which mseg_ should 2 10* perform when needed (i.e., for those entrypoints which operate on 2 11* messages like mseg_$read_message). 2 12* 2 13* mseg_operation.operation is reserved explicitly for use by mseg_ and 2 14* its underlying modules. 2 15* 2 16* You must also include entry_access_info, mseg_message_info, and 2 17* mbx_wakeup_state along with this include file. */ 2 18 2 19 dcl mseg_operation_ptr pointer; 2 20 dcl MSEG_OPERATION_VERSION_1 fixed bin internal static options (constant) init (1); 2 21 dcl MSEG_TYPE_MBX fixed bin init (1) internal static options (constant); 2 22 dcl MSEG_TYPE_MS fixed bin init (2) internal static options (constant); 2 23 2 24 dcl 1 mseg_operation based (mseg_operation_ptr) aligned, 2 25 2 version fixed binary, /* current version is MSEG_OPERATION_VERSION_1 */ 2 26 2 type fixed binary, /* MBX or MS */ 2 27 2 access_operation fixed binary, /* type of access checks required for the operation */ 2 28 2 operation bit (36) aligned, /* for use by mseg_ and underlying modules */ 2 29 2 caller aligned, /* always collected in gate target */ 2 30 3 validation_level fixed bin (3), 2 31 3 privileges bit (18) aligned, /* factored for speed */ 2 32 3 pad_align_double fixed bin (71), /* just to force alignment */ 2 33 3 authorization bit (72) aligned, /* must be 2word aligned */ 2 34 3 max_authorization bit (72) aligned, 2 35 3 group_id char (32) unaligned, 2 36 2 flags aligned, 2 37 3 mseg_pathname_valid bit (1) unaligned, 2 38 3 mseg_ptr_valid bit (1) unaligned, 2 39 3 mseg_index_valid bit (1) unaligned, 2 40 3 access_info_valid bit (1) unaligned, 2 41 3 md_ptr_valid bit (1) unaligned, 2 42 3 message_info_valid bit (1) unaligned, /* note -- for some operations not all fields are used */ 2 43 3 wakeup_state_valid bit (1) unaligned, 2 44 3 suppress_access_checks bit (1) unaligned, /* set by privileged interfaces, suppresses ALL access checking */ 2 45 3 call_admin_gate bit (1) unaligned, /* we is in ring 1, boss */ 2 46 3 only_own_access bit (1) unaligned, /* the user had o rather than r/d */ 2 47 3 add_message_info_all_valid 2 48 bit (1) unaligned, /* Believe ALL the fields in message info on an add */ 2 49 3 pad bit (24) unaligned, 2 50 2 dir_name char (168) unaligned, 2 51 2 entryname char (32) unaligned, 2 52 2 mseg_ptr pointer, 2 53 2 md_ptr pointer, /* message descriptor */ 2 54 2 mseg_index fixed bin, 2 55 2 access_info aligned like entry_access_info, 2 56 2 message_info aligned like mseg_message_info, 2 57 2 wakeup_state aligned like mseg_wakeup_state; 2 58 2 59 /* END INCLUDE FILE ... mseg_operation.incl.pl1 */ 894 895 /* BEGIN INCLUDE FILE . . . mseg_message_info.incl.pl1 BIM 1984-10-10 */ 3 2 /* format: style3,idind30 */ 3 3 3 4 /* structure returned when message is read from a message segment */ 3 5 3 6 3 7 dcl mseg_message_info_ptr pointer; 3 8 3 9 dcl 1 mseg_message_info based (mseg_message_info_ptr) aligned, 3 10 2 version char (8) aligned, 3 11 2 message_code fixed bin, 3 12 2 control_flags unaligned, 3 13 3 own bit (1), 3 14 3 delete bit (1), 3 15 3 pad bit (34), 3 16 2 ms_ptr ptr, /* pointer to message */ 3 17 2 ms_len fixed bin (24), /* length of message in bits */ 3 18 2 ms_id bit (72), /* unique ID of message */ 3 19 /* input in some cases */ 3 20 2 ms_access_class bit (72), /* message access class */ 3 21 2 sender_id char (32) unaligned,/* process-group ID of sender */ 3 22 2 sender_process_id bit (36) aligned, /* if nonzero, process that sent */ 3 23 2 sender_level fixed bin, /* validation level of sender */ 3 24 2 sender_authorization bit (72), /* access authorization of message sender */ 3 25 2 sender_max_authorization bit (72), /* max authorization of sending process */ 3 26 2 sender_audit bit (36) aligned; /* audit flags */ 3 27 3 28 declare MSEG_MESSAGE_INFO_V1 char (8) aligned init ("msegmi01") int static options (constant); 3 29 3 30 declare ( 3 31 MSEG_READ_FIRST init (1), 3 32 MSEG_READ_LAST init (2), 3 33 MSEG_READ_SPECIFIED init (3), 3 34 MSEG_READ_BEFORE_SPECIFIED init (4), 3 35 MSEG_READ_AFTER_SPECIFIED init (5)) 3 36 fixed bin int static options (constant); 3 37 3 38 declare (MSEG_READ_OWN init ("1"b), 3 39 MSEG_READ_DELETE init ("01"b) 3 40 ) bit (36) aligned internal static options (constant); 3 41 3 42 /* END INCLUDE FILE . . . mseg_message_info.incl.pl1 */ 895 896 /* BEGIN INCLUDE FILE ... mseg_wakeup_state.incl.pl1 */ 4 2 /* Created: April 1985 by G. Palter */ 4 3 4 4 /* format: style3,linecom */ 4 5 4 6 /* Description of the wakeup state of a message segment -- 4 7* 4 8* The wakeup state defines which process, if any, is willing to receive normal or urgent IPC wakeups when a message which 4 9* requests such a wakeup is added to a message segment. The process is allowed to separately accept or defer normal and 4 10* urgent wakeups. Note that deferring a wakeup is not the same as not accepting wakeups. A process is not allowed to 4 11* stop accepting wakeups once it has accepted them as to do so would introduce a relatively high badnwidth covert 4 12* channel. (In the present implementation, urgent wakeups are really no different from normal wakeups. Eventually, 4 13* urgent wakeups should be implemented using an IPS signal along with the IPC wakeup). 4 14* 4 15* mseg_$get_wakeup_state_seg requires that the caller supply the proper value for mseg_wakeup_state.version in the 4 16* mseg_operation. If there is no wakeup state recorded in the message segment, mseg_$get_wakeup_state_seg will return 4 17* the status code error_table_$messages_off. 4 18* 4 19* mseg_$set_wakeup_state_seg ignores the values of the access_class, process_id, and lock_id elements supplied by the 4 20* caller in the mseg_operation. mseg_$set_wakeup_state_seg will, instead, furnish the values of the process making the 4 21* call for these elements and will return these values to its caller. In other words, mseg_$set_wakeup_state_seg can not 4 22* be used by one process to accept/defer wakeups on behalf of another process. */ 4 23 4 24 declare 1 mseg_wakeup_state aligned based (mseg_wakeup_state_ptr), 4 25 2 version character (8) unaligned, 4 26 2 flags aligned, 4 27 3 accepting_normal_wakeups /* ON => process has accepted normal wakeups */ 4 28 bit (1) unaligned, /* OFF => process has deferred normal wakeups */ 4 29 3 accepting_urgent_wakeups /* ON => process has accepted urgent wakeups */ 4 30 bit (1) unaligned, /* OFF => process has deferred urgent wakeups */ 4 31 3 pad bit (34) unaligned, 4 32 2 pad bit (36) aligned, 4 33 2 event_channel fixed binary (71), /* IPC event channel on which to send normal/urgent wakeups */ 4 34 2 access_class bit (72) aligned, /* AIM access class of the process accepting wakeups */ 4 35 2 process_id bit (36) aligned, /* ID of the process accepting wakeups */ 4 36 2 lock_id bit (36) aligned; /* lock ID used to test if said process is still alive */ 4 37 4 38 declare mseg_wakeup_state_ptr 4 39 pointer; 4 40 4 41 declare MSEG_WAKEUP_STATE_VERSION_1 4 42 character (8) static options (constant) initial ("msegwkp1"); 4 43 4 44 /* END INCLUDE FILE ... mseg_wakeup_state.incl.pl1 */ 896 897 /* BEGIN INCLUDE FILE ... entry_access_info.incl.pl1 */ 5 2 5 3 /* 5 4* Written 03/22/85 by M. Pandolf 5 5* Modified 1985-04-19, BIM: added parent access class. 5 6**/ 5 7 5 8 dcl entry_access_info_ptr pointer; 5 9 dcl ENTRY_ACCESS_INFO_VERSION_1 char (8) internal static options (constant) 5 10 init ("eainf001"); 5 11 5 12 dcl 1 entry_access_info aligned based (entry_access_info_ptr), 5 13 2 version char (8), /* = ENTRY_ACCESS_INFO_VERSION_1 */ 5 14 2 type fixed bin, /* see status_structures.incl.pl1 */ 5 15 2 dir_name char (168) unaligned, /* parent of this entry */ 5 16 2 entryname char (32) unaligned, /* primary name of this entry */ 5 17 2 uid bit (36) aligned, 5 18 2 ring_brackets (3) fixed bin (3), /* for dirs, the dir ring brackets are here */ 5 19 2 extended_ring_brackets (3) fixed bin (3), /* not-yet-implemented x-rb's */ 5 20 2 effective_access_modes bit (36) aligned, /* for dirs, dir mode is here */ 5 21 2 extended_access_modes bit (36) aligned, /* always null for dirs */ 5 22 2 access_class bit (72) aligned, /* for multiclass, max access class */ 5 23 2 parent_access_class bit (72) aligned, /* for multiclass, this is effectively the min access class */ 5 24 2 multiclass bit (1) aligned; 5 25 5 26 /* END INCLUDE FILE ... entry_access_info.incl.pl1 */ 897 898 /* BEGIN INCLUDE FILE ... mseg_operations_.incl.pl1 */ 6 2 /* Created: April 1985 by G. Palter */ 6 3 6 4 /* format: style3,linecom */ 6 5 6 6 /* The defined message segment primitive operations (mseg_) */ 6 7 6 8 declare ( 6 9 mseg_operations_$add_acl_entries_seg, 6 10 mseg_operations_$add_message, 6 11 mseg_operations_$chname_seg, 6 12 mseg_operations_$close_seg, 6 13 mseg_operations_$compact_seg, 6 14 mseg_operations_$copy_seg_source, 6 15 mseg_operations_$copy_seg_target, 6 16 mseg_operations_$count_messages, 6 17 mseg_operations_$create_seg, 6 18 mseg_operations_$delete_acl_entries_seg, 6 19 mseg_operations_$delete_message, 6 20 mseg_operations_$delete_seg, 6 21 mseg_operations_$get_salvaged_flag_seg, 6 22 mseg_operations_$get_wakeup_state_seg, 6 23 mseg_operations_$initiate_seg, 6 24 mseg_operations_$list_acl_seg, 6 25 mseg_operations_$list_acl_entries_seg, 6 26 mseg_operations_$open_seg, 6 27 mseg_operations_$read_message, 6 28 mseg_operations_$replace_acl_seg, 6 29 mseg_operations_$reset_salvaged_flag_seg, 6 30 mseg_operations_$reset_wakeup_state_seg, 6 31 mseg_operations_$set_max_length_seg, 6 32 mseg_operations_$set_safety_switch_seg, 6 33 mseg_operations_$set_wakeup_state_seg, 6 34 mseg_operations_$update_message 6 35 ) bit (36) aligned external; 6 36 6 37 /* END INCLUDE FILE ... mseg_operations_.incl.pl1 */ 898 899 /* Begin include file -- acl_structures.incl.pl1 BIM 3/82 */ 7 2 /* format: style3,indcomtxt,idind30 */ 7 3 7 4 declare acl_ptr pointer; 7 5 declare acl_count fixed bin; 7 6 7 7 declare 1 general_acl aligned based (acl_ptr), /* for fs_util_ */ 7 8 2 version char (8) aligned, 7 9 2 count fixed bin, 7 10 2 entries (acl_count refer (general_acl.count)) aligned like general_acl_entry; 7 11 7 12 declare 1 general_acl_entry based, 7 13 2 access_name character (32) unaligned, 7 14 2 mode bit (36) aligned, 7 15 2 status_code fixed bin (35); 7 16 7 17 7 18 declare 1 general_extended_acl aligned based (acl_ptr), /* for fs_util_ */ 7 19 2 version char (8) aligned, 7 20 2 count fixed bin, 7 21 2 entries (acl_count refer (general_extended_acl.count)) aligned like general_extended_acl_entry; 7 22 7 23 declare 1 general_extended_acl_entry aligned based, 7 24 2 access_name character (32) unaligned, 7 25 2 mode bit (36) aligned, 7 26 2 extended_mode bit (36) aligned, 7 27 2 status_code fixed bin (35); 7 28 7 29 7 30 declare 1 general_delete_acl aligned based (acl_ptr), /* for file_system_ */ 7 31 2 version char (8) aligned, 7 32 2 count fixed bin, 7 33 2 entries (acl_count refer (general_delete_acl.count)) aligned like delete_acl_entry; 7 34 7 35 declare 1 general_delete_acl_entry aligned based, 7 36 2 access_name character (32) unaligned, 7 37 2 status_code fixed bin (35); 7 38 7 39 7 40 declare 1 segment_acl aligned based (acl_ptr), 7 41 2 version fixed bin, 7 42 2 count fixed bin, 7 43 2 entries (acl_count refer (segment_acl.count)) aligned like segment_acl_entry; 7 44 7 45 declare 1 segment_acl_entry like general_extended_acl_entry aligned based; 7 46 declare 1 segment_acl_array (acl_count) aligned like segment_acl_entry based (acl_ptr); 7 47 7 48 7 49 declare 1 directory_acl aligned based (acl_ptr), 7 50 2 version fixed bin, 7 51 2 count fixed bin, 7 52 2 entries (acl_count refer (directory_acl.count)) aligned like directory_acl_entry; 7 53 7 54 declare 1 directory_acl_entry like general_acl_entry aligned based; 7 55 declare 1 directory_acl_array (acl_count) aligned like directory_acl_entry based (acl_ptr); 7 56 7 57 7 58 declare 1 delete_acl based (acl_ptr) aligned, 7 59 2 version fixed bin, 7 60 2 count fixed bin, 7 61 2 entries (acl_count refer (delete_acl.count)) aligned like delete_acl_entry; 7 62 7 63 declare 1 delete_acl_entry like general_delete_acl_entry aligned based; 7 64 declare 1 delete_acl_array (acl_count) aligned like delete_acl_entry based (acl_ptr); 7 65 7 66 7 67 declare (SEG_ACL_VERSION_1 init ("sga1"), 7 68 DIR_ACL_VERSION_1 init ("dra1"), 7 69 DELETE_ACL_VERSION_1 init ("dla1")) 7 70 char (4) int static options (constant); 7 71 7 72 declare (GENERAL_ACL_VERSION_1 init ("gacl001"), 7 73 GENERAL_EXTENDED_ACL_VERSION_1 init ("gxacl001"), 7 74 GENERAL_DELETE_ACL_VERSION_1 init ("gdacl001")) 7 75 char (8) internal static options (constant); 7 76 7 77 declare ACL_VERSION_1 fixed bin init (1) int static options (constant); 7 78 7 79 /* End include file acl_structures.incl.pl1 */ 899 900 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 8 2* 8 3* Values for the "access mode" argument so often used in hardcore 8 4* James R. Davis 26 Jan 81 MCR 4844 8 5* Added constants for SM access 4/28/82 Jay Pattin 8 6* Added text strings 03/19/85 Chris Jones 8 7**/ 8 8 8 9 8 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 8 11 dcl ( 8 12 N_ACCESS init ("000"b), 8 13 R_ACCESS init ("100"b), 8 14 E_ACCESS init ("010"b), 8 15 W_ACCESS init ("001"b), 8 16 RE_ACCESS init ("110"b), 8 17 REW_ACCESS init ("111"b), 8 18 RW_ACCESS init ("101"b), 8 19 S_ACCESS init ("100"b), 8 20 M_ACCESS init ("010"b), 8 21 A_ACCESS init ("001"b), 8 22 SA_ACCESS init ("101"b), 8 23 SM_ACCESS init ("110"b), 8 24 SMA_ACCESS init ("111"b) 8 25 ) bit (3) internal static options (constant); 8 26 8 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 8 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 8 29 8 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 8 31 static options (constant); 8 32 8 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 8 34 static options (constant); 8 35 8 36 dcl ( 8 37 N_ACCESS_BIN init (00000b), 8 38 R_ACCESS_BIN init (01000b), 8 39 E_ACCESS_BIN init (00100b), 8 40 W_ACCESS_BIN init (00010b), 8 41 RW_ACCESS_BIN init (01010b), 8 42 RE_ACCESS_BIN init (01100b), 8 43 REW_ACCESS_BIN init (01110b), 8 44 S_ACCESS_BIN init (01000b), 8 45 M_ACCESS_BIN init (00010b), 8 46 A_ACCESS_BIN init (00001b), 8 47 SA_ACCESS_BIN init (01001b), 8 48 SM_ACCESS_BIN init (01010b), 8 49 SMA_ACCESS_BIN init (01011b) 8 50 ) fixed bin (5) internal static options (constant); 8 51 8 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 900 901 /* BEGIN INCLUDE FILE ... mseg_access_mode_values.incl.pl1 */ 9 2 9 3 9 4 /****^ HISTORY COMMENTS: 9 5* 1) change(85-04-01,Palter), approve(), audit(), install(): 9 6* Initial coding. 9 7* 2) change(87-04-08,GDixon), approve(87-07-14,MCR7706), 9 8* audit(87-07-14,Parisek), install(87-08-04,MR12.1-1056): 9 9* Add mseg queue access values for queue users and administrators. 9 10* END HISTORY COMMENTS */ 9 11 9 12 9 13 /* format: style3,linecom */ 9 14 9 15 /* Definition of the extended access modes implemented by the message segment primitives (mseg_) */ 9 16 9 17 declare ( 9 18 /*** The individual modes */ 9 19 MSEG_A_ACCESS initial ("400000000000"b3), /* add a message */ 9 20 MSEG_D_ACCESS initial ("200000000000"b3), /* delete/update any message, accept wakeups, etc. */ 9 21 MSEG_R_ACCESS initial ("100000000000"b3), /* read any message */ 9 22 MSEG_O_ACCESS initial ("040000000000"b3), /* read/delete your own messages */ 9 23 MSEG_S_ACCESS initial ("020000000000"b3), /* get the message count, salvaged flag, etc. */ 9 24 MSEG_W_ACCESS initial ("010000000000"b3), /* send a normal wakeup when adding a message */ 9 25 MSEG_U_ACCESS initial ("004000000000"b3) /* send an urgent wakeup when adding a message */ 9 26 ) bit (36) aligned static options (constant); 9 27 9 28 declare ( 9 29 /*** Common combinations of the modes */ 9 30 MSEG_NULL_ACCESS initial ("000000000000"b3), /* no access at all */ 9 31 MSEG_FULL_ACCESS initial ("774000000000"b3) /* all possible access */ 9 32 ) bit (36) aligned static options (constant); 9 33 9 34 /* format: idind40 */ 9 35 9 36 declare ( 9 37 /*** Initial extended access modes of a newly created mailbox -- The following constants yield the following ACL: 9 38* adrosw Person_id.*.* (or anonymous.Project_id.*) 9 39* aow *.SysDaemon.* 9 40* aow *.*.* */ 9 41 MSEG_MBX_INITIAL_ACL dimension (3) static options (constant) 9 42 initial ("770000000000"b3, "450000000000"b3, "450000000000"b3), 9 43 MSEG_MBX_CREATOR_INITIAL_ACCESS defined (MSEG_MBX_INITIAL_ACL (1)), 9 44 MSEG_MBX_SYSDAEMON_INITIAL_ACCESS defined (MSEG_MBX_INITIAL_ACL (2)), 9 45 MSEG_MBX_OTHERS_INITIAL_ACCESS defined (MSEG_MBX_INITIAL_ACL (3)) 9 46 ) bit (36) aligned; 9 47 9 48 declare ( 9 49 /*** Initial extended access modes of a newly created queue message segment -- The following constants yield the 9 50* following ACL: 9 51* adros Person_id.*.* (or anonymous.Project_id.*) 9 52* ao *.SysDaemon.* 9 53* null *.*.* */ 9 54 MSEG_QUEUE_INITIAL_ACL dimension (3) static options (constant) 9 55 initial ("760000000000"b3, "440000000000"b3, "000000000000"b3), 9 56 MSEG_QUEUE_CREATOR_INITIAL_ACCESS defined (MSEG_QUEUE_INITIAL_ACL (1)), 9 57 MSEG_QUEUE_SYSDAEMON_INITIAL_ACCESS defined (MSEG_QUEUE_INITIAL_ACL (2)), 9 58 MSEG_QUEUE_OTHERS_INITIAL_ACCESS defined (MSEG_QUEUE_INITIAL_ACL (3)) 9 59 ) bit (36) aligned; 9 60 9 61 declare ( 9 62 /*** Extended access modes of queue segment users and administrators: 9 63* ao Queue_User.*.* 9 64* aros Queue_Admin.*.* */ 9 65 MSEG_QUEUE_USER_ACCESS initial ("440000000000"b3), 9 66 MSEG_QUEUE_ADMIN_ACCESS initial ("560000000000"b3)) 9 67 bit (36) aligned int static options(constant); 9 68 9 69 /* END INCLUDE FILE ... mseg_access_mode_values.incl.pl1 */ 901 902 /* BEGIN INCLUDE FILE - - - create_branch_info.incl.pl1 - - - created January 1975 */ 10 2 10 3 10 4 /****^ HISTORY COMMENTS: 10 5* 1) change(89-01-16,TLNguyen), approve(89-01-16,MCR8049), 10 6* audit(89-02-03,Parisek), install(89-03-15,MR12.3-1025): 10 7* 1. Declare version constant properly. 10 8* 2. Remove version 1 since it was never referenced and to force 10 9* callers to upgrade their programs. 10 10* END HISTORY COMMENTS */ 10 11 10 12 10 13 /* Modified December 1984 for dir_quota, Keith Loepere. */ 10 14 10 15 /* this include files gives the argument structure for create_branch_ */ 10 16 10 17 dcl 1 create_branch_info aligned based, 10 18 2 version fixed bin, /* set this to the largest value given below */ 10 19 2 switches unaligned, 10 20 3 dir_sw bit (1) unaligned, /* if on, a directory branch is wanted */ 10 21 3 copy_sw bit (1) unaligned, /* if on, initiating segment will be done by copying */ 10 22 3 chase_sw bit (1) unaligned, /* if on, if pathname is a link, it will be chased */ 10 23 3 priv_upgrade_sw bit (1) unaligned, /* privileged creation (ring 1) of upgraded object */ 10 24 3 parent_ac_sw bit (1) unaligned, /* if on, use parent's access class for seg or dir created */ 10 25 3 mbz1 bit (31) unaligned, /* pad to full word */ 10 26 2 mode bit (3) unaligned, /* segment or directory for acl for userid */ 10 27 2 mbz2 bit (33) unaligned, /* pad to full word */ 10 28 2 rings (3) fixed bin (3), /* branch's ring brackets */ 10 29 2 userid char (32), /* user's access control name */ 10 30 2 bitcnt fixed bin (24), /* bit count of the segment */ 10 31 2 quota fixed bin (18), /* for directories, this am't of quota will be moved to it */ 10 32 2 access_class bit (72), /* is the access class of the body of the branch */ 10 33 2 dir_quota fixed bin (18); /* for dAWTaylor $8 AWTaylor awt Multics |R; TIET%mnoneVIP7400_DTR NݞMZAllen ކ ކ Allen NMLPROD QvQvQnoneWY50_80C QjEBHas  Smith as Develcon KY L&iFKiwnoneVIP7400_DTR initial dcl 9-28 ref 490 596 665 MSEG_QUEUE_INITIAL_ACL 000003 constant bit(36) initial array dcl 9-48 ref 247 MSEG_R_ACCESS constant bit(36) initial dcl 9-17 ref 869 875 MSEG_S_ACCESS constant bit(36) initial dcl 9-17 ref 869 875 MSEG_TYPE_MBX constant fixed bin(17,0) initial dcl 2-21 ref 231 245 MSEG_TYPE_MS constant fixed bin(17,0) initial dcl 2-22 ref 231 MSEG_U_ACCESS constant bit(36) initial dcl 9-17 ref 869 877 MSEG_W_ACCESS constant bit(36) initial dcl 9-17 ref 869 877 P_acl_ptr parameter pointer dcl 46 set ref 176 215 231 296 308 466 508* 562 575 609 617 845 P_code parameter fixed bin(35,0) dcl 44 set ref 176 195 215 296 432 466 562 609 721 796* 816* P_mseg_index_table_ptr parameter pointer dcl 56 set ref 432 447* P_mseg_operation_ptr parameter pointer dcl 42 ref 176 195 215 296 432 466 562 609 721 763 P_new_name parameter char packed unaligned dcl 54 set ref 195 205* 207* P_old_name parameter char packed unaligned dcl 53 set ref 195 205* 207* P_safety_switch parameter bit(1) dcl 59 ref 721 731 733 RW_ACCESS constant bit(3) initial packed unaligned dcl 8-11 ref 244 266 664 867 SYSDAEMONS 000026 constant char(32) initial packed unaligned dcl 115 ref 242 access_class 20 000153 automatic bit(72) level 2 dcl 85 set ref 272* 277* access_name 3 based char(32) array level 3 in structure "general_extended_acl" packed packed unaligned dcl 7-18 in procedure "mseg_fs_interface_" set ref 596 642 663* access_name 3 based char(32) array level 3 in structure "general_delete_acl" packed packed unaligned dcl 7-30 in procedure "mseg_fs_interface_" ref 339 343 377 access_name 3 000107 automatic char(32) array level 3 in structure "default_initial_acl" packed packed unaligned dcl 79 in procedure "mseg_fs_interface_" set ref 237* 240* 242* 243* access_name 000176 automatic char(32) level 2 in structure "delete_all_others_acl" packed packed unaligned dcl 87 in procedure "mseg_fs_interface_" set ref 362* access_name based char(32) array level 3 in structure "ring0_acl" packed packed unaligned dcl 72 in procedure "mseg_fs_interface_" ref 490 access_name based char(32) array level 3 in structure "ring0_delete_acl" packed packed unaligned dcl 74 in procedure "mseg_fs_interface_" set ref 343* acl_count 000350 automatic fixed bin(17,0) dcl 7-5 set ref 488* 490* 499 499 504 655* 656 656 663 664 665 acl_idx 000326 automatic fixed bin(17,0) dcl 109 set ref 338* 339 343* 376* 377 377 381* 504* 505 505* 595* 596 596 599* 641* 642* 658* 659 659* 687* 688 688* 866* 867 868 869 875 877 880* acl_ptr 000346 automatic pointer dcl 7-4 set ref 188 188 188 234* 308* 310 312* 317 317 329 338 339 343 376 377 377 381 470* 499* 502 505 508 527 529 530* 550 552 553* 575* 577 581 581 590 590 590 595 596 596 599 617* 641 642 649 651* 656* 659 663 664 665 671 671 671 688 692 693* 707 709 710* 845* 851 855 855 866 867 868 869 875 877 880 add_all_others_acl 000372 automatic bit(1) dcl 633 set ref 639* 641 642* 646 addr builtin function dcl 169 ref 188 188 234 280 280 312 351 351 363 363 590 590 617 671 671 after builtin function dcl 169 ref 237 area 000330 stack reference condition dcl 172 ref 290 313 331 333 498 500 621 before builtin function dcl 169 ref 237 240 bitcnt 16 000153 automatic fixed bin(24,0) level 2 dcl 85 set ref 263* bool builtin function dcl 169 ref 869 call_admin_gate 24(08) based bit(1) level 3 packed packed unaligned dcl 2-24 ref 269 caller 4 based structure level 2 dcl 2-24 cbi 000153 automatic structure level 1 dcl 85 set ref 280 280 cleanup 000336 stack reference condition dcl 172 ref 180 199 219 304 436 474 566 613 725 code 000100 automatic fixed bin(35,0) dcl 64 set ref 183 183* 188* 191* 202 202* 205* 207* 209* 222 222* 280* 281 281* 351* 355* 360 360 386 386* 390* 440 440* 443 445* 447 462* 480* 482 482* 590* 593 593 600* 605* 671* 674* 728 728* 731* 733* 735* 742* 765* count 2 based fixed bin(17,0) level 2 in structure "general_extended_acl" dcl 7-18 in procedure "mseg_fs_interface_" set ref 188* 499* 529 552 590* 595 641 655 656* 658 671* 687 692 709 866 count 2 000107 automatic fixed bin(17,0) level 2 in structure "default_initial_acl" dcl 79 in procedure "mseg_fs_interface_" set ref 236* count 2 based fixed bin(17,0) level 2 in structure "general_delete_acl" dcl 7-30 in procedure "mseg_fs_interface_" ref 329 338 376 create_branch_info based structure level 1 dcl 10-17 create_branch_version_2 constant fixed bin(17,0) initial dcl 10-35 ref 260 default_initial_acl 000107 automatic structure level 1 dcl 79 set ref 234 delete_acl_entry based structure level 1 dcl 7-63 delete_all_others_access 000207 automatic bit(1) dcl 89 set ref 336* 339* 360 386 delete_all_others_acl 000176 automatic structure level 1 dcl 87 set ref 363 363 delete_all_others_code 000210 automatic fixed bin(35,0) dcl 91 set ref 363* 365 365* 369* 377 386 dimension builtin function dcl 169 ref 236 dir_quota 22 000153 automatic fixed bin(18,0) level 2 dcl 85 set ref 263* directory_acl_entry based structure level 1 dcl 7-54 entries 3 based structure array level 2 in structure "general_delete_acl" dcl 7-30 in procedure "mseg_fs_interface_" entries 3 based structure array level 2 in structure "general_extended_acl" dcl 7-18 in procedure "mseg_fs_interface_" set ref 188 188 505* 590 590 659* 659 671 671 entries based structure array level 2 in structure "ring0_acl" dcl 72 in procedure "mseg_fs_interface_" ref 505 entries 3 000107 automatic structure array level 2 in structure "default_initial_acl" dcl 79 in procedure "mseg_fs_interface_" set ref 236 entries based structure array level 2 in structure "ring0_delete_acl" dcl 74 in procedure "mseg_fs_interface_" entry_access_info based structure level 1 dcl 5-12 error_table_$action_not_performed 000010 external static fixed bin(35,0) dcl 122 ref 369 error_table_$argerr 000012 external static fixed bin(35,0) dcl 122 set ref 360 365 386 593 600 885* error_table_$bad_acl_mode 000014 external static fixed bin(35,0) dcl 122 ref 880 error_table_$bad_mbx_acl_awu 000020 external static fixed bin(35,0) dcl 122 ref 877 error_table_$bad_mbx_acl_rs 000016 external static fixed bin(35,0) dcl 122 ref 875 error_table_$bad_subr_arg 000022 external static fixed bin(35,0) dcl 122 set ref 251* error_table_$invalid_lock_reset 000024 external static fixed bin(35,0) dcl 122 ref 454 error_table_$lock_wait_time_exceeded 000030 external static fixed bin(35,0) dcl 122 ref 440 error_table_$locked_by_this_process 000026 external static fixed bin(35,0) dcl 122 ref 454 error_table_$noalloc 000032 external static fixed bin(35,0) dcl 122 set ref 811* 816 error_table_$null_info_ptr 000034 external static fixed bin(35,0) dcl 122 set ref 577* 851* error_table_$unimplemented_version 000036 external static fixed bin(35,0) dcl 122 set ref 317* 581* 855* error_table_$user_not_found 000040 external static fixed bin(35,0) dcl 122 ref 599 ext_mode 000211 automatic bit(36) dcl 94 set ref 868* 869 869 869 869 869 869 869 875 875 877 877 877 877 extended_mode 11 based bit(36) array level 3 in structure "ring0_acl" dcl 72 in procedure "mseg_fs_interface_" ref 490 extended_mode 14 000107 automatic bit(36) array level 3 in structure "default_initial_acl" dcl 79 in procedure "mseg_fs_interface_" set ref 245* 247* extended_mode 14 based bit(36) array level 3 in structure "general_extended_acl" dcl 7-18 in procedure "mseg_fs_interface_" set ref 596 665* 868 flags 24 based structure level 2 dcl 2-24 found_invalid_mode 000426 automatic bit(1) dcl 843 set ref 864* 881* 885 general_acl_entry based structure level 1 unaligned dcl 7-12 general_delete_acl based structure level 1 dcl 7-30 general_delete_acl_entry based structure level 1 dcl 7-35 general_extended_acl based structure level 1 dcl 7-18 set ref 499 529 552 656 692 709 general_extended_acl_entry based structure level 1 dcl 7-23 get_system_free_area_ 000042 constant entry external dcl 138 ref 328 478 648 group_id 14 based char(32) level 3 packed packed unaligned dcl 2-24 ref 237 237 240 hcs_$add_acl_entries 000044 constant entry external dcl 140 ref 188 hcs_$chname_file 000046 constant entry external dcl 142 ref 207 hcs_$chname_seg 000050 constant entry external dcl 143 ref 205 hcs_$create_branch_ 000052 constant entry external dcl 144 ref 280 hcs_$delentry_seg 000054 constant entry external dcl 145 ref 445 hcs_$delete_acl_entries 000056 constant entry external dcl 146 ref 351 363 hcs_$list_acl 000060 constant entry external dcl 148 ref 480 590 hcs_$replace_acl 000062 constant entry external dcl 150 ref 671 hcs_$set_safety_sw 000064 constant entry external dcl 151 ref 733 hcs_$set_safety_sw_seg 000066 constant entry external dcl 152 ref 731 lock_code 000325 automatic fixed bin(35,0) dcl 107 set ref 443* 452 454 454 457* max_authorization 12 based bit(72) level 3 dcl 2-24 ref 272 mbz2 2(03) 000153 automatic bit(33) level 2 packed packed unaligned dcl 85 set ref 262* mode 13 based bit(36) array level 3 in structure "general_extended_acl" dcl 7-18 in procedure "mseg_fs_interface_" set ref 664* 867* mode 13 000107 automatic bit(36) array level 3 in structure "default_initial_acl" dcl 79 in procedure "mseg_fs_interface_" set ref 244* mode 2 000153 automatic bit(3) level 2 in structure "cbi" packed packed unaligned dcl 85 in procedure "mseg_fs_interface_" set ref 266* mseg_data_$execution_ring 000110 external static fixed bin(3,0) dcl 1-9 ref 267 mseg_dir_name 000242 automatic char(168) packed unaligned dcl 102 set ref 188* 207* 251* 251* 280* 351* 363* 480* 590* 671* 733* 765* mseg_entryname 000314 automatic char(32) packed unaligned dcl 103 set ref 188* 207* 251* 251* 280* 351* 363* 480* 590* 671* 733* 765* mseg_index_$delete 000070 constant entry external dcl 154 ref 447 mseg_message_info based structure level 1 dcl 3-9 mseg_operation based structure level 1 dcl 2-24 mseg_operation_ptr 000344 automatic pointer dcl 2-19 set ref 205 205 231 231 237 237 240 245 269 272 445 447* 452* 457* 458* 731 731 747* 763* 765* 765 793 793* 814* 831* mseg_operations_$add_acl_entries_seg 000112 external static bit(36) dcl 6-8 set ref 182* mseg_operations_$chname_seg 000114 external static bit(36) dcl 6-8 set ref 201* mseg_operations_$create_seg 000116 external static bit(36) dcl 6-8 set ref 221* mseg_operations_$delete_acl_entries_seg 000120 external static bit(36) dcl 6-8 set ref 306* mseg_operations_$delete_seg 000122 external static bit(36) dcl 6-8 set ref 438* mseg_operations_$list_acl_entries_seg 000126 external static bit(36) dcl 6-8 set ref 568* mseg_operations_$list_acl_seg 000124 external static bit(36) dcl 6-8 set ref 476* mseg_operations_$replace_acl_seg 000130 external static bit(36) dcl 6-8 set ref 615* mseg_operations_$set_safety_switch_seg 000132 external static bit(36) dcl 6-8 set ref 727* mseg_ptr 110 based pointer level 2 dcl 2-24 set ref 205 205* 445* 731 731* 765* mseg_utils_$abort_operation 000072 constant entry external dcl 155 ref 831 mseg_utils_$begin_operation 000074 constant entry މkj dz,>4& Jameson kj UOFC  Weaver ~2 Weaver Multics M M=tM[ noneVIP7400_DTR pdk fp~ Kertzner pdk Multics level 1 dcl 74 set ref 332 351 351 403 420 rings 3 000153 automatic fixed bin(3,0) array level 2 dcl 85 set ref 267* rqo_detected 000324 automatic bit(1) dcl 105 set ref 450 765* segment_acl_entry based structure level 1 dcl 7-45 status_code 10 based fixed bin(35,0) array level 3 in structure "ring0_delete_acl" dcl 74 in procedure "mseg_fs_interface_" set ref 381 status_code 15 based fixed bin(35,0) array level 3 in structure "general_extended_acl" dcl 7-18 in procedure "mseg_fs_interface_" set ref 599* 688* 688 869* 875* 877* 880* status_code 13 based fixed bin(35,0) array level 3 in structure "general_delete_acl" dcl 7-30 in procedure "mseg_fs_interface_" set ref 377* 381* status_code 10 000176 automatic fixed bin(35,0) level 2 in structure "delete_all_others_acl" dcl 87 in procedure "mseg_fs_interface_" set ref 365 string builtin function dcl 169 set ref 261* sub_err_ 000106 constant entry external dcl 167 ref 251 317 577 581 851 855 switches 1 000153 automatic structure level 2 packed packed unaligned dcl 85 set ref 261* system_area based area(1024) dcl 69 ref 332 403 420 499 523 529 546 552 656 692 709 system_area_ptr 000102 automatic pointer dcl 70 set ref 328* 332 403 420 478* 480* 499 523 529 546 552 648* 656 692 709 type 1 based fixed bin(17,0) level 2 dcl 2-24 ref 231 231 245 userid 6 000153 automatic char(32) level 2 dcl 85 set ref 265* version based char(8) level 2 in structure "general_delete_acl" dcl 7-30 in procedure "mseg_fs_interface_" set ref 317 317* version 000153 automatic fixed bin(17,0) level 2 in structure "cbi" dcl 85 in procedure "mseg_fs_interface_" set ref 260* version based char(8) level 2 in structure "general_extended_acl" dcl 7-18 in procedure "mseg_fs_interface_" set ref 502* 581 581* 855 855* version 000107 automatic char(8) level 2 in structure "default_initial_acl" dcl 79 in procedure "mseg_fs_interface_" set ref 235* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACL_VERSION_1 internal static fixed bin(17,0) initial dcl 7-77 ACTION_CAN_RESTART internal static bit(36) initial dcl 11-7 ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 11-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 11-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 11-7 A_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 DELETE_ACL_VERSION_1 internal static char(4) initial packed unaligned dcl 7-67 DIR_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 8-33 DIR_ACL_VERSION_1 internal static char(4) initial packed unaligned dcl 7-67 ENTRY_ACCESS_INFO_VERSION_1 internal static char(8) initial packed unaligned dcl 5-9 E_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 GENERAL_ACL_VERSION_1 internal static char(8) initial packed unaligned dcl 7-72 MSEG_D_ACCESS internal static bit(36) initial dcl 9-17 MSEG_MBX_CREATOR_INITIAL_ACCESS defined bit(36) dcl 9-36 MSEG_MBX_OTHERS_INITIAL_ACCESS defined bit(36) dcl 9-36 MSEG_MBX_SYSDAEMON_INITIAL_ACCESS defined bit(36) dcl 9-36 MSEG_MESSAGE_INFO_V1 internal static char(8) initial dcl 3-28 MSEG_OPERATION_VERSION_1 internal static fixed bin(17,0) initial dcl 2-20 MSEG_O_ACCESS internal static bit(36) initial dcl 9-17 MSEG_QUEUE_ADMIN_ACCESS internal static bit(36) initial dcl 9-61 MSEG_QUEUE_CREATOR_INITIAL_ACCESS defined bit(36) dcl 9-48 MSEG_QUEUE_OTHERS_INITIAL_ACCESS defined bit(36) dcl 9-48 MSEG_QUEUE_SYSDAEMON_INITIAL_ACCESS defined bit(36) dcl 9-48 MSEG_QUEUE_USER_ACCESS internal static bit(36) initial dcl 9-61 MSEG_READ_AFTER_SPECIFIED internal static fixed bin(17,0) initial dcl 3-30 MSEG_READ_BEFORE_SPECIFIED internal static fixed bin(17,0) initial dcl 3-30 MSEG_READ_DELETE internal static bit(36) initial dcl 3-38 MSEG_READ_FIRST internal static fixed bin(17,0) initial dcl 3-30 MSEG_READ_LAST internal static fixed bin(17,0) initial dcl 3-30 MSEG_READ_OWN internal static bit(36) initial dcl 3-38 MSEG_READ_SPECIFIED internal static fixed bin(17,0) initial dcl 3-30 MSEG_WAKEUP_STATE_VERSION_1 internal static char(8) initial packed unaligned dcl 4-41 M_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 N_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 REW_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 RE_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 R_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 SA_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 8-30 SEG_ACL_VERSION_1 internal static char(4) initial packed unaligned dcl 7-67 SMA_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 SM_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 S_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 W_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 delete_acl based structure level 1 dcl 7-58 delete_acl_array based structure array level 1 dcl 7-64 directory_acl based structure level 1 dcl 7-49 directory_acl_array based structure array level 1 dcl 7-55 entry_access_info_ptr automatic pointer dcl 5-8 general_acl based structure level 1 dcl 7-7 mseg_data_$admin_ring external static fixed bin(3,0) dcl 1-8 mseg_data_$block_size external static fixed bin(35,0) dcl 1-5 mseg_data_$group_id external static char(32) packed unaligned dcl 1-11 mseg_data_$lock_id external static bit(72) dcl 1-4 mseg_data_$max_message_size external static fixed bin(35,0) dcl 1-6 mseg_data_$process_max_authorization external static bit(72) dcl 1-10 mseg_data_$template_operation external static bit(36) dcl 1-7 mseg_message_info_ptr automatic pointer dcl 3-7 mseg_operations_$add_message external static bit(36) dcl 6-8 mseg_operations_$close_seg external static bit(36) dcl 6-8 mseg_operations_$compact_seg external static bit(36) dcl 6-8 mseg_operations_$copy_seg_source external static bit(36) dcl 6-8 mseg_operations_$copy_seg_target external static bit(36) dcl 6-8 mseg_operations_$count_messages external static bit(36) dcl 6-8 mseg_operations_$delete_message external static bit(36) dcl 6-8 mseg_operations_$get_salvaged_flag_seg external static bit(36) dcl 6-8 mseg_operations_$get_wakeup_state_seg external static bit(36) dcl 6-8 mseg_operations_$initiate_seg external static bit(36) dcl 6-8 mseg_operations_$open_seg external static bit(36) dcl 6-8 mseg_operations_$read_message external static bit(36) dcl 6-8 mseg_operations_$reset_salvaged_flag_seg external static bit(36) dcl 6-8 mseg_operations_$reset_wakeup_state_seg external static bit(36) dcl 6-8 mseg_operations_$set_max_length_seg external static bit(36) dcl 6-8 mseg_operations_$set_wakeup_state_seg external static bit(36) dcl 6-8 mseg_operations_$update_message external static bit(36) dcl 6-8 mseg_wakeup_state_ptr automatic pointer dcl 4-38 segment_acl based structure level 1 dcl 7-40 segment_acl_array based structure array level 1 dcl 7-46 NAMES DECLARED BY EXPLICIT CONTEXT. RETURN_FROM_OPERATION 002772 constant label dcl 801 ref 797 817 abort_delete_acl_entries_seg 003017 constant entry internal dcl 415 ref 302 abort_list_acl_seg 003105 constant entry internal dcl 541 ref 472 abort_replace_acl_seg 003377 constant entry internal dcl 704 ref 653 begin_operation 003435 constant entry internal dcl 758 ref 182 201 221 306 438 476 568 615 727 mseg_fs_interface_ 000152 constant entry external dcl 34 mseg_fs_interface_$add_acl_entries_seg 000164 constant entry external dcl 176 mseg_fs_interface_$chname_seg 000300 constant entry external dcl 195 mseg_fs_interface_$create_seg 000456 constant entry external dcl 215 mseg_fs_interface_$delete_acl_entries_seg 001140 constant entry external dcl 296 mseg_fs_interface_$delete_seg 001624 constant entry external dcl 432 mseg_fs_interface_$list_acl_entries_seg 002234 constant entry external dcl 562 mseg_fs_interface_$list_acl_seg 001773 constant entry external dcl 466 mseg_fs_interface_$replace_acl_seg 002541 constant entry external dcl 609 mseg_fs_interface_$set_safety_switch_seg 002644 constant entry external dcl 721 nulle 003511 constant entry internal dcl 776 ref 744 745 790 811 828 operation_was_aborted 003633 constant entry internal dcl 825 ref 180 199 219 304 436 474 566 613 725 replace_acl_seg 003144 constant entry internal dcl 629 ref 292 314 623 return_from_delete_acl_entries_seg 002774 constant entry internal dcl 396 ref 301 return_from_list_acl_seg 003042 constant entry internal dcl 516 ref 471 return_from_operation 003517 constant entry internal dcl 785 ref 183 191 202 209 222 281 390 440 462 482 510 605 674 728 735 885 return_from_replace_acl_seg 003335 constant entry internal dcl 682 ref 652 return_noalloc_from_operation 003563 constant entry internal dcl 808 ref 290 313 331 498 621 setup_operation 003423 constant entry internal dcl 739 ref 179 198 218 299 435 469 565 612 724 validate_acl 003672 constant entry internal dcl 840 ref 186 255 619 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5366 5522 4161 5376 Length 6334 4161 134 576 1204 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME mseg_fs_interface_ 546 external procedure is an external procedure. on unit on line 180 64 on unit on unit on line 199 64 on unit on unit on line 219 64 on unit on unit on line 290 64 on unit on unit on line 304 64 on unit on unit on line 313 64 on unit on unit on line 331 64 on unit return_from_delete_acl_entries_seg 64 internal procedure is assigned to an entry variable. abort_delete_acl_entries_seg 64 internal procedure is assigned to an entry variable. on unit on line 436 64 on unit on unit on line 474 64 on unit on unit on line 498 64 on unit return_from_list_acl_seg 64 internal procedure is assigned to an entry variable. abort_list_acl_seg 64 internal procedure is assigned to an entry variable. on unit on line 566 64 on unit on unit on line 613 64 on unit on unit on line 621 64 on unit replace_acl_seg internal procedure shares stack frame of external procedure mseg_fs_interface_. return_from_replace_acl_seg 66 internal procedure is assigned to an entry variable. abort_replace_acl_seg 64 internal procedure is assigned to an entry variable. on unit on line 725 64 on unit setup_operation internal procedure shares stack frame of external procedure mseg_fs_interface_. begin_operation internal procedure shares stack frame of external procedure mseg_fs_interface_. nulle 64 internal procedure is assigned to an entry variable. return_from_operation internal procedure shares stack frame of external procedure mseg_fs_interface_. return_noalloc_from_operation 70 internal procedure is called by several nonquick procedures. operation_was_aborted 68 internal procedure is called by several nonquick procedures. validate_acl internal procedure shares stack frame of external procedure mseg_fs_interface_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME mseg_fs_interface_ 000100 code mseg_fs_interface_ 000102 system_area_ptr mseg_fs_interface_ 000104 ring0_acl_ptr mseg_fs_interface_ 000106 ring0_acl_count mseg_fs_interface_ 000107 default_initial_acl mseg_fs_interface_ 000153 cbi mseg_fs_interface_ 000176 delete_all_others_acl mseg_fs_interface_ 000207 delete_all_others_access mseg_fs_interface_ 000210 delete_all_others_code mseg_fs_interface_ 000211 ext_mode mseg_fs_interface_ 000212 operation_specific_return mseg_fs_interface_ 000216 operation_specific_abort mseg_fs_interface_ 000222 operation_name mseg_fs_interface_ 000242 mseg_dir_name mseg_fs_interface_ 000314 mseg_entryname mseg_fs_interface_ 000324 rqo_detected mseg_fs_interface_ 000325 lock_code mseg_fs_interface_ 000326 acl_idx mseg_fs_interface_ 000344 mseg_operation_ptr mseg_fs_interface_ 000346 acl_ptr mseg_fs_interface_ 000350 acl_count mseg_fs_interface_ 000370 original_acl_ptr replace_acl_seg 000372 add_all_others_acl replace_acl_seg 000426 found_invalid_mode validate_acl THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as alloc_char_temp cat_realloc_chars call_ent_var call_ext_out_desc call_ext_out call_int_other return_mac make_label_var tra_ext_1 enable_op shorten_stack ext_entry ext_entry_desc int_entry reverse_cs set_chars_eis op_alloc_ op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. get_system_free_area_ hcs_$add_acl_entries hcs_$chname_file hcs_$chname_seg hcs_$create_branch_ hcs_$delentry_seg hcs_$delete_acl_entries hcs_$list_acl hcs_$replace_acl hcs_$set_safety_sw hcs_$set_safety_sw_seg mseg_index_$delete mseg_utils_$abort_operation mseg_utils_$begin_operation mseg_utils_$finish_operation mseg_utils_$request_unlock_on_finish mseg_utils_$salvage_for_cause pathname_ sub_err_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$argerr error_table_$bad_acl_mode error_table_$bad_mbx_acl_awu error_table_$bad_mbx_acl_rs error_table_$bad_subr_arg error_table_$invalid_lock_reset error_table_$lock_wait_time_exceeded error_table_$locked_by_this_process error_table_$noalloc error_table_$null_info_ptr error_table_$unimplemented_version error_table_$user_not_found mseg_data_$execution_ring mseg_operations_$add_acl_entries_seg mseg_operations_$chname_seg mseg_operations_$create_seg mseg_operations_$delete_acl_entries_seg mseg_operations_$delete_seg mseg_operations_$list_acl_entries_seg mseg_operations_$list_acl_seg mseg_operations_$replace_acl_seg mseg_operations_$set_safety_switch_seg LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 34 000151 37 000157 176 000160 179 000174 180 000175 182 000217 183 000226 186 000232 188 000233 191 000270 195 000272 198 000323 199 000324 201 000346 202 000355 205 000361 207 000416 209 000451 215 000453 218 000466 219 000467 221 000511 222 000520 231 000524 234 000537 235 000541 236 000544 237 000546 240 000624 242 000641 243 000645 244 000650 245 000662 247 000702 249 000715 251 000716 255 001006 260 001007 261 001011 262 001012 263 001014 265 001017 266 001022 267 001026 269 001040 271 001044 272 001046 273 001052 276 001053 277 001055 280 001060 281 001106 290 001112 292 001134 296 001135 299 001150 300 001151 301 001153 302 001156 304 001161 306 001203 308 001212 310 001216 312 001222 313 001224 314 001246 317 001247 328 001323 329 001332 331 001335 332 001357 333 001365 335 001366 336 001367 338 001370 339 001401 342 001414 343 001415 346 001424 351 001426 355 001464 360 001465 362 001474 363 001477 365 001534 367 001542 369 001543 374 001546 376 001547 377 001557 380 001574 381 001575 384 001604 386 001606 390 001617 432 001621 435 001634 436 001635 438 001657 440 001666 443 001674 445 001676 447 001710 450 001725 452 001730 454 001742 457 001747 458 001757 462 001766 466 001770 469 002003 470 002004 471 002007 472 002012 474 002015 476 002037 478 002046 480 002055 482 002116 488 002122 490 002124 498 002143 499 002165 500 002176 502 002177 504 002202 505 002211 506 002221 508 002223 510 002226 562 002231 565 002244 566 002245 568 002267 575 002276 577 002302 581 002351 590 002425 593 002473 595 002500 596 002511 599 002524 600 002530 602 002532 605 002534 609 002536 612 002551 613 002552 615 002574 617 002603 619 002613 621 002614 623 002636 721 002637 724 002654 725 002655 727 002677 728 002706 731 002712 733 002737 735 002770 801 002772 396 002773 401 003001 403 003006 404 003012 407 003015 415 003016 418 003024 420 003031 421 003035 424 003040 516 003041 521 003047 523 003054 524 003060 527 003063 529 003072 530 003100 533 003103 541 003104 544 003112 546 003117 547 003123 550 003126 552 003132 553 003140 556 003143 629 003144 639 003145 641 003147 642 003161 644 003171 646 003173 648 003175 649 003204 651 003206 652 003210 653 003213 655 003216 656 003222 658 003233 659 003243 661 003253 663 003255 664 003264 665 003266 671 003270 674 003331 717 003333 682 003334 687 003342 688 003354 690 003362 692 003364 693 003372 695 003375 704 003376 707 003404 709 003411 710 003417 713 003422 739 003423 742 003424 744 003425 745 003430 747 003432 749 003434 758 003435 763 003437 765 003443 768 003507 776 003510 779 003516 785 003517 790 003521 793 003543 796 003556 797 003561 808 003562 811 003570 814 003613 816 003623 817 003627 825 003632 828 003640 831 003661 833 003671 840 003672 845 003673 851 003677 855 003746 864 004022 866 004023 867 004033 868 004036 869 004041 875 004106 877 004115 880 004126 881 004132 883 004134 885 004136 888 004147 ----------------------------------------------------------- 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