COMPILATION LISTING OF SEGMENT rcp_validate_ Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 0941.6 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 rcp_validate_: procedure (arg_rcp_id,arg_caller_level,arg_rcse_ptr,arg_ecode); 14 15 /* This program is an internal interface of RCP. 16** Created on 10/15/74 by Bill Silver. 17** 18** This program is called to validate an rcp_id. If the rcp_id 19** is valid rcp_validate_ will return a pointer to the device 20** entry associated with this rcp_id. The following tests are 21** made to validate the rcp_id. 22** 23** 1. Check that device offset is within valid bounds. 24** 2. Check that rcp_id matches the one in the device entry. 25** 3. Check that this is the process that has the device assigned. 26** 4. Check that the caller's validation level is not too high. 27** 5. Check that the RCS entry is in an active state. 28**/ 29 30 dcl arg_caller_level fixed bin; /* (I) Caller's validation level. */ 31 dcl arg_rcse_ptr ptr; /* (O) Pointer to valid rcse entry. */ 32 dcl arg_ecode fixed bin(35); /* (O) error_table_ code. */ 33 dcl arg_rcp_id bit(36) aligned; /* (I) rcp_id to validate. */ 34 35 dcl dcode fixed bin(35); /* Dummy error_table_ code. */ 36 dcl ecode fixed bin(35); /* error_table_ code. */ 37 dcl process_id bit(36); /* ID of calling process. */ 38 dcl rcp_id bit(36) aligned; /* rcp_id that we are to validate. */ 39 dcl rcse_off bit(18); /* RCS entry offset from rcp_id. */ 40 41 dcl ( addr, null, ptr, rel ) builtin; 42 43 dcl ( error_table_$bad_arg, 44 error_table_$force_unassign, 45 error_table_$bad_index, 46 error_table_$bad_processid, 47 error_table_$bad_ring_brackets, 48 error_table_$invalid_state ) fixed bin(35) external; 49 50 dcl get_process_id_ entry returns(bit(36)); 51 dcl rcp_pointers_$com_seg entry returns (ptr); 52 /* */ 1 1 /* Begin include file ... rcp_com_seg.incl.pl1 1 2* * 1 3* * Created on 11/20/74 by Bill Silver. 1 4* * Modified on 09/19/77 by R.J.C. Kissel to add label authentication bits. 1 5* * Modified on 12/09/78 by Michael R. Jordan to add removable media bit and label_type. 1 6* * Modified 1/79 by R.J.C. Kissel to add disk label authentication bits. 1 7* * Modified 2/79 by Michael R. Jordan to add volume_density. 1 8* * Modified 11/84 by Paul Farley to add fips flag. 1 9* * Modified 1/3/85 by Fawcett to allow room for mca device type 1 10* * Modified 02/85 by Paul Farley to add no_protect and opr_int_available flags. 1 11* * This include file defines the Resource Control Package communication segment. 1 12* * This segment is used to communicate requests between the various internal 1 13* * parts of RCP. 1 14**/ 1 15 1 16 /****^ HISTORY COMMENTS: 1 17* 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), 1 18* audit(85-12-09,CLJones), install(86-03-21,MR12.0-1033): 1 19* Support MCA and FIPS. 1 20* END HISTORY COMMENTS */ 1 21 1 22 dcl lock_info_ptr ptr; /* Pointer to lock info structure. */ 1 23 dcl rcs_ptr ptr; /* Pointer to base of RCS. */ 1 24 dcl rcse_ptr ptr; /* Pointer to an RCS entry. */ 1 25 1 26 dcl 1 based_rcp_id based aligned, /* Overlay of an rcp_id. */ 1 27 (2 id_count fixed bin (17), /* Unique count index. */ 1 28 2 rcse_off bit (18)) unaligned; /* Offset of rcp_com_seg entry. */ 1 29 1 30 dcl 1 rcs based (rcs_ptr) aligned, /* Begin at word zero of rcp_com_seg. */ 1 31 2 lock_info like lock_info, /* Data used to lock this segment. */ 1 32 2 ws_maxs (8) fixed bin (19), /* Max IOI workspace size in words. */ 1 33 2 ws_pmaxs (8) fixed bin (19), /* Max IOI workspace size for priv attachments. */ 1 34 2 to_maxs (8) fixed bin (71), /* Max IOI time-out intervals in microseconds. */ 1 35 2 sys_directory char (32), /* Directory used to define a system process. */ 1 36 2 sys_acs char (32), /* Entry name used to define a system process. */ 1 37 2 acs_directory char (32), /* Directory containing device ACSs. */ 1 38 2 id_count fixed bin (35), /* Counter used to form rcp_id. */ 1 39 2 max_entries fixed bin, /* Maximum number of entries allowed. */ 1 40 2 num_entries fixed bin, /* Total number of entries. */ 1 41 2 first_free_off bit (18), /* Offset of first free entry. */ 1 42 2 entry (0 refer (rcs.num_entries)) /* Array of request entries. */ 1 43 like rcse, /* See structure below. */ 1 44 2 end bit (36); /* End of rcp_com_seg. */ 1 45 1 46 dcl 1 lock_info based (lock_info_ptr) aligned, /* Used to meter locking. */ 1 47 2 lock bit (36), /* The lock itself. */ 1 48 2 num_locks fixed bin (35), /* Number of times locked. */ 1 49 2 num_lock_waits fixed bin (35), /* Number of lock waits. */ 1 50 2 time_of_lock fixed bin (71), /* Time of last lock. */ 1 51 2 tot_lock_time fixed bin (71), /* Total time locked. */ 1 52 2 tot_wait_time fixed bin (71), /* Total time waiting for lock. */ 1 53 2 starting_time fixed bin (71); /* Time metering started. */ 1 54 1 55 dcl 1 rcse based (rcse_ptr) aligned, /* Up to state must = rcpd.device. */ 1 56 2 device_name char (8), /* Name of device associated with this entry. */ 1 57 2 volume_name char (32), /* Volume name. Blank => no volume. */ 1 58 2 dtypex fixed bin, /* Device type index. */ 1 59 2 model fixed bin, /* Device model number. */ 1 60 2 num_qualifiers fixed bin, /* Number of device qualifiers. */ 1 61 2 qualifiers (4) fixed bin (35), /* Device qualifiers. */ 1 62 2 state_time fixed bin (71), /* Time device put into current state. */ 1 63 2 state fixed bin, /* 0 - free 1 - assigning 2 - assigned */ 1 64 /* 3 - attaching 4 - attached 5 - completed. */ 1 65 1 66 /* * * * * ** Following fields are unique to RCS entry. */ 1 67 2 kind fixed bin, /* 1 => attach, 2 => assign */ 1 68 2 free_off bit (18), /* Offset of next free entry. 0 => not free. */ 1 69 2 user_off bit (18), /* Offset of next entry in user list. */ 1 70 2 device_off bit (18), /* Offset of device entry in RCPD. */ 1 71 2 volume_off bit (18), /* Offset of volume entry in RCPD. */ 1 72 2 rcse_off bit (18), /* Offset of associated RCS entry. */ 1 73 2 caller_level fixed bin, /* Caller's validation level. */ 1 74 2 disposition bit (1), /* ON => retain, OFF => unassign. */ 1 75 2 flags, /* Special info flags. */ 1 76 (3 device bit (1), /* ON => assigning a specific device. */ 1 77 3 priv bit (1), /* ON => attached with IOI privilege. */ 1 78 3 system bit (1), /* ON => assigned to a system process. */ 1 79 3 t_and_d bit (1), /* ON => T&D attachment. */ 1 80 3 volume bit (1), /* ON => volume associated with this device. */ 1 81 3 writing bit (1), /* ON => writing on volume. */ 1 82 3 have_auth bit (1), /* ON => tape volume authenticated. */ 1 83 3 need_auth bit (1), /* ON => tape volume needs authentication. */ 1 84 3 auth_set bit (1), /* ON => "have_auth" has been set. */ 1 85 3 preload_allowed bit (1), /* ON => preloading of volumes is allowed. */ 1 86 3 preloaded bit (1), /* ON => volume may be loaded on device. */ 1 87 3 not_removable_media bit (1), /* ON => cannot remove volume from device. */ 1 88 3 disk_ss_pack bit (1), /* ON => disk is a storage system volume. */ 1 89 3 disk_copy_of_ss_pack bit (1), /* ON => disk is a copy of a storage system volume. */ 1 90 3 disk_io_pack bit (1), /* ON => disk has label but is not storage system. */ 1 91 3 disk_unregistered bit (1), /* ON => disk is unregistered storage system volume. */ 1 92 3 disk_unreadable bit (1), /* ON => io error reading disk label. */ 1 93 3 must_auto_register bit (1), /* ON => unregistered volume requested */ 1 94 3 fips bit (1), /* ON => FIPS device. */ 1 95 3 no_protect bit (1), /* ON => device has no protect sw. */ 1 96 3 opr_int_available bit (1), /* ON => device connected to MPC with OI button. */ 1 97 3 unused bit (6), 1 98 3 volume_density_index fixed bin (3) unsigned, /* Density of volume */ 1 99 3 label_type fixed bin (6) unsigned)unaligned, /* Type of label read by RCP. */ 1 100 2 rcp_id bit (36), /* ID of this entry. */ 1 101 2 event_id fixed bin (71), /* Caller's event channel ID. */ 1 102 2 process_id bit (36), /* ID of calling process. */ 1 103 2 group_id char (32), /* Group ID of calling process. */ 1 104 2 ecode fixed bin (35), /* Assignment error code. */ 1 105 2 version_num fixed bin, /* Device info version number. */ 1 106 2 workspace_max fixed bin (19), /* Max size of IOI workspace buffer. */ 1 107 2 timeout_max fixed bin (71), /* Max IOI time-out interval. */ 1 108 2 ioi_index fixed bin, /* IOI device index. */ 1 109 2 workspace_ptr ptr, /* Pointer to IOI workspace buffer. */ 1 110 2 caller_comment char (64); /* Caller's comment. */ 1 111 1 112 /* End of include file ... rcp_com_seg.incl.pl1 */ 53 54 /* */ 55 ecode = 0; /* Initialize. */ 56 rcp_id = arg_rcp_id; /* Get RCS entry offset from ID to test. */ 57 rcse_off = addr(rcp_id)->based_rcp_id.rcse_off; 58 rcs_ptr = rcp_pointers_$com_seg (); /* Get pointer to base of RCS. */ 59 60 if (rcse_off = "0"b) | /* Test 1: Check bounds. */ 61 (rcse_off > rel(addr(rcs.end))) 62 then do; /* Not a valid RCS entry offset. */ 63 ecode = error_table_$bad_index; 64 rcse_ptr = null(); 65 goto VALIDATE_RETURN; 66 end; 67 68 rcse_ptr = ptr(rcs_ptr,rcse_off); /* Get pointer to RCS entry. */ 69 if rcse.rcp_id ^= rcp_id /* Test 2: Does rcp_id match? */ 70 then do; /* No. */ 71 ecode = error_table_$bad_arg; 72 goto VALIDATE_RETURN; 73 end; 74 75 if rcse.process_id ^= get_process_id_() 76 then do; /* Test 3: Process ID invalid. */ 77 ecode = error_table_$bad_processid; 78 goto VALIDATE_RETURN; 79 end; 80 81 if rcse.caller_level < arg_caller_level 82 then do; /* Test 4: Level too high. */ 83 ecode = error_table_$bad_ring_brackets; 84 goto VALIDATE_RETURN; 85 end; 86 87 if rcse.state = 0 /* Test 5: RCS entry in invalid state. */ 88 then if rcse.ecode = error_table_$force_unassign then ecode = rcse.ecode; 89 else ecode = error_table_$invalid_state; 90 91 VALIDATE_RETURN: 92 arg_ecode = ecode; /* Return aguments. */ 93 arg_rcse_ptr = rcse_ptr; /* Return pointer to RCS entry. */ 94 95 end rcp_validate_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0806.7 rcp_validate_.pl1 >spec>install>1111>rcp_validate_.pl1 53 1 03/27/86 1120.0 rcp_com_seg.incl.pl1 >ldd>include>rcp_com_seg.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. addr builtin function dcl 41 ref 57 60 arg_caller_level parameter fixed bin(17,0) dcl 30 ref 13 81 arg_ecode parameter fixed bin(35,0) dcl 32 set ref 13 91* arg_rcp_id parameter bit(36) dcl 33 ref 13 56 arg_rcse_ptr parameter pointer dcl 31 set ref 13 93* based_rcp_id based structure level 1 dcl 1-26 caller_level 33 based fixed bin(17,0) level 2 dcl 1-55 ref 81 ecode 53 based fixed bin(35,0) level 2 in structure "rcse" dcl 1-55 in procedure "rcp_validate_" ref 87 87 ecode 000100 automatic fixed bin(35,0) dcl 36 in procedure "rcp_validate_" set ref 55* 63* 71* 77* 83* 87* 89* 91 end based bit(36) level 2 dcl 1-30 set ref 60 error_table_$bad_arg 000010 external static fixed bin(35,0) dcl 43 ref 71 error_table_$bad_index 000014 external static fixed bin(35,0) dcl 43 ref 63 error_table_$bad_processid 000016 external static fixed bin(35,0) dcl 43 ref 77 error_table_$bad_ring_brackets 000020 external static fixed bin(35,0) dcl 43 ref 83 error_table_$force_unassign 000012 external static fixed bin(35,0) dcl 43 ref 87 error_table_$invalid_state 000022 external static fixed bin(35,0) dcl 43 ref 89 get_process_id_ 000024 constant entry external dcl 50 ref 75 lock_info based structure level 1 dcl 1-46 null builtin function dcl 41 ref 64 num_entries 106 based fixed bin(17,0) level 2 dcl 1-30 ref 60 process_id 42 based bit(36) level 2 dcl 1-55 ref 75 ptr builtin function dcl 41 ref 68 rcp_id 000101 automatic bit(36) dcl 38 in procedure "rcp_validate_" set ref 56* 57 69 rcp_id 36 based bit(36) level 2 in structure "rcse" dcl 1-55 in procedure "rcp_validate_" ref 69 rcp_pointers_$com_seg 000026 constant entry external dcl 51 ref 58 rcs based structure level 1 dcl 1-30 rcs_ptr 000104 automatic pointer dcl 1-23 set ref 58* 60 68 rcse based structure level 1 dcl 1-55 rcse_off 000102 automatic bit(18) packed unaligned dcl 39 in procedure "rcp_validate_" set ref 57* 60 60 68 rcse_off 0(18) based bit(18) level 2 in structure "based_rcp_id" packed packed unaligned dcl 1-26 in procedure "rcp_validate_" ref 57 rcse_ptr 000106 automatic pointer dcl 1-24 set ref 64* 68* 69 75 81 87 87 87 93 rel builtin function dcl 41 ref 60 state 24 based fixed bin(17,0) level 2 dcl 1-55 ref 87 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. dcode automatic fixed bin(35,0) dcl 35 lock_info_ptr automatic pointer dcl 1-22 process_id automatic bit(36) packed unaligned dcl 37 NAMES DECLARED BY EXPLICIT CONTEXT. VALIDATE_RETURN 000133 constant label dcl 91 ref 65 72 78 84 rcp_validate_ 000015 constant entry external dcl 13 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 262 312 141 272 Length 504 141 30 156 121 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rcp_validate_ 79 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME rcp_validate_ 000100 ecode rcp_validate_ 000101 rcp_id rcp_validate_ 000102 rcse_off rcp_validate_ 000104 rcs_ptr rcp_validate_ 000106 rcse_ptr rcp_validate_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out return_mac ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. get_process_id_ rcp_pointers_$com_seg THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$bad_index error_table_$bad_processid error_table_$bad_ring_brackets error_table_$force_unassign error_table_$invalid_state LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 13 000010 55 000022 56 000023 57 000026 58 000031 60 000037 63 000051 64 000054 65 000056 68 000057 69 000063 71 000066 72 000071 75 000072 77 000105 78 000110 81 000111 83 000115 84 000120 87 000121 89 000131 91 000133 93 000136 95 000140 ----------------------------------------------------------- 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