COMPILATION LISTING OF SEGMENT check_gate_access_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/08/85 1149.1 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 4* * * 5* *********************************************************** */ 6 /* format: style2 */ 7 8 /**** CHECK_GATE_ACCESS_: This program exists to allow programs to avoid 9* referencing privileged gates when there are alternatives for 10* unprivileged users thereby preventing access violation audits. 11* This program takes a gate name as a parameter as well as a pointer 12* to be used for referencing directory determination and returns a 13* zero error code if the gate is located using the normal search 14* rules and if the user has execute access to this gate. If the 15* gate is found, but the user lacks sufficient access to call the gate, 16* error_table_$moderr is returned. If the gate is not located, then 17* error_table_$noentry is returned. 18**/ 19 20 /* Written 1984-08-30 by E. Swenson */ 21 22 check_gate_access_: 23 procedure (P_gate_name, P_reference_ptr, P_code); 24 25 /* Parameter */ 26 27 dcl P_code fixed bin (35) parameter; 28 dcl P_gate_name char (*) parameter; 29 dcl P_reference_ptr ptr parameter; 30 31 /* Automatic */ 32 33 dcl code fixed bin (35); 34 dcl found_with_bad_access bit (1) aligned; 35 dcl found_with_good_access bit (1) aligned; 36 dcl i fixed bin (17); 37 38 /**** There is no real include file for the search rules. So until we 39* create one and change all the programs which reference search rules 40* to use the include file, this program may as well use its own 41* declaration too. */ 42 43 dcl 1 search_rules aligned, 44 2 number fixed bin (17), 45 2 names (21) char (168); 46 47 /* External Entries */ 48 49 dcl get_pdir_ entry () returns (char (168)); 50 dcl hcs_$fs_get_path_name entry (ptr, char (*), fixed bin, char (*), fixed bin (35)); 51 dcl hcs_$fs_get_seg_ptr entry (char (*), ptr, fixed bin (35)); 52 dcl hcs_$fs_search_get_wdir 53 entry (ptr, fixed bin); 54 dcl hcs_$get_search_rules entry (ptr); 55 dcl hcs_$get_user_effmode entry (char (*), char (*), char (*), fixed bin, fixed bin (5), fixed bin (35)); 56 dcl hcs_$status_minf entry (char (*), char (*), fixed bin (1), fixed bin (2), fixed bin (24), 57 fixed bin (35)); 58 dcl ioa_ entry options (variable); 59 dcl sub_err_ entry () options (variable); 60 dcl user_info_$homedir entry (char (*)); 61 62 /* External Static */ 63 64 dcl error_table_$noentry fixed bin (35) external static; 65 dcl error_table_$moderr fixed bin (35) external static; 66 67 /* Constant */ 68 69 dcl ME char (32) initial ("check_gate_access_") internal static options (constant); 70 71 /* Program */ 72 73 call hcs_$get_search_rules (addr (search_rules)); 74 found_with_good_access = "0"b; 75 found_with_bad_access = "0"b; 76 do i = 1 to search_rules.number while (^found_with_good_access); 77 call TRY_TO_LOCATE_GATE ((search_rules.names (i))); 78 if code = 0 79 then found_with_good_access = "1"b; 80 else if code = error_table_$moderr 81 then found_with_bad_access = "1"b; /* remember we found, bud didn't have access. */ 82 end; 83 if found_with_good_access 84 then P_code = 0; 85 else if found_with_bad_access 86 then P_code = error_table_$moderr; 87 else P_code = code; 88 return; 89 90 TRY_TO_LOCATE_GATE: 91 procedure (search_rule_name); 92 93 dcl search_rule_name char (*) parameter; 94 95 dcl lth fixed bin; 96 dcl pathname char (168); 97 98 if substr (search_rule_name, 1, 1) = ">" 99 then call TRY_DIRECTORY (search_rule_name); 100 else if search_rule_name = "initiated_segments" 101 then call TRY_INITIATED_SEGMENTS (); 102 else if search_rule_name = "referencing_dir" 103 then call TRY_REFERENCING_DIR (P_reference_ptr); 104 else if search_rule_name = "working_dir" 105 then do; 106 call hcs_$fs_search_get_wdir (addr (pathname), lth); 107 if lth ^= 0 108 then call TRY_DIRECTORY (substr (pathname, 1, lth)); 109 else code = error_table_$noentry; 110 end; 111 else if search_rule_name = "home_dir" 112 then do; 113 call user_info_$homedir (pathname); 114 call TRY_DIRECTORY (pathname); 115 end; 116 else if search_rule_name = "process_dir" 117 then call TRY_DIRECTORY (get_pdir_ ()); 118 else call sub_err_ (0, ME, ACTION_DEFAULT_RESTART, null (), 0, "Invalid search rule name ^a", search_rule_name); 119 return; 120 121 end TRY_TO_LOCATE_GATE; 122 123 TRY_DIRECTORY: 124 procedure (dir_name); 125 126 dcl dir_name char (*) parameter; 127 128 dcl mode fixed bin (5); 129 dcl type fixed bin (2); 130 131 call hcs_$status_minf (dir_name, P_gate_name, /* no chase */ 132 0, type, (0), code); 133 if code ^= 0 134 then return; 135 136 if type ^= Segment 137 then do; 138 code = error_table_$noentry; 139 return; 140 end; 141 142 call hcs_$get_user_effmode (dir_name, P_gate_name, "" /* self */, -1 /* caller ring */, mode, code); 143 if code ^= 0 144 then return; 145 146 if mode ^= E_ACCESS_BIN & mode ^= RE_ACCESS_BIN & mode ^= REW_ACCESS_BIN 147 then code = error_table_$moderr; 148 149 return; 150 end TRY_DIRECTORY; 151 152 TRY_INITIATED_SEGMENTS: 153 procedure (); 154 155 dcl gate_ptr ptr; 156 157 call hcs_$fs_get_seg_ptr (P_gate_name, gate_ptr, code); 158 if code ^= 0 159 then code = error_table_$noentry; 160 return; 161 162 end TRY_INITIATED_SEGMENTS; 163 164 TRY_REFERENCING_DIR: 165 procedure (ref_ptr); 166 167 dcl ref_ptr ptr parameter; 168 dcl dn char (168); 169 dcl ldn fixed bin; 170 dcl en char (32); 171 172 if ref_ptr = null 173 then code = error_table_$noentry; 174 else do; 175 call hcs_$fs_get_path_name (ref_ptr, dn, ldn, en, code); 176 if code ^= 0 177 then code = error_table_$noentry; 178 179 else call TRY_DIRECTORY (substr (dn, 1, ldn)); 180 end; 181 return; 182 183 end TRY_REFERENCING_DIR; 184 185 /* format: off */ 186 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 1 2* 1 3* Values for the "access mode" argument so often used in hardcore 1 4* James R. Davis 26 Jan 81 MCR 4844 1 5* Added constants for SM access 4/28/82 Jay Pattin 1 6* Added text strings 03/19/85 Chris Jones 1 7**/ 1 8 1 9 1 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 11 dcl ( 1 12 N_ACCESS init ("000"b), 1 13 R_ACCESS init ("100"b), 1 14 E_ACCESS init ("010"b), 1 15 W_ACCESS init ("001"b), 1 16 RE_ACCESS init ("110"b), 1 17 REW_ACCESS init ("111"b), 1 18 RW_ACCESS init ("101"b), 1 19 S_ACCESS init ("100"b), 1 20 M_ACCESS init ("010"b), 1 21 A_ACCESS init ("001"b), 1 22 SA_ACCESS init ("101"b), 1 23 SM_ACCESS init ("110"b), 1 24 SMA_ACCESS init ("111"b) 1 25 ) bit (3) internal static options (constant); 1 26 1 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 1 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 1 29 1 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 1 31 static options (constant); 1 32 1 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 1 34 static options (constant); 1 35 1 36 dcl ( 1 37 N_ACCESS_BIN init (00000b), 1 38 R_ACCESS_BIN init (01000b), 1 39 E_ACCESS_BIN init (00100b), 1 40 W_ACCESS_BIN init (00010b), 1 41 RW_ACCESS_BIN init (01010b), 1 42 RE_ACCESS_BIN init (01100b), 1 43 REW_ACCESS_BIN init (01110b), 1 44 S_ACCESS_BIN init (01000b), 1 45 M_ACCESS_BIN init (00010b), 1 46 A_ACCESS_BIN init (00001b), 1 47 SA_ACCESS_BIN init (01001b), 1 48 SM_ACCESS_BIN init (01010b), 1 49 SMA_ACCESS_BIN init (01011b) 1 50 ) fixed bin (5) internal static options (constant); 1 51 1 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 186 187 /* --------------- BEGIN include file status_structures.incl.pl1 --------------- */ 2 2 2 3 /* Revised from existing include files 09/26/78 by C. D. Tavares */ 2 4 2 5 /* This include file contains branch and link structures returned by 2 6* hcs_$status_ and hcs_$status_long. */ 2 7 2 8 dcl 1 status_branch aligned based (status_ptr), 2 9 2 short aligned, 2 10 3 type fixed bin (2) unaligned unsigned, /* seg, dir, or link */ 2 11 3 nnames fixed bin (16) unaligned unsigned, /* number of names */ 2 12 3 names_relp bit (18) unaligned, /* see entry_names dcl */ 2 13 3 dtcm bit (36) unaligned, /* date/time contents last modified */ 2 14 3 dtu bit (36) unaligned, /* date/time last used */ 2 15 3 mode bit (5) unaligned, /* caller's effective access */ 2 16 3 raw_mode bit (5) unaligned, /* caller's raw "rew" modes */ 2 17 3 pad1 bit (8) unaligned, 2 18 3 records_used fixed bin (18) unaligned unsigned, /* number of NONZERO pages used */ 2 19 2 20 /* Limit of information returned by hcs_$status_ */ 2 21 2 22 2 long aligned, 2 23 3 dtd bit (36) unaligned, /* date/time last dumped */ 2 24 3 dtem bit (36) unaligned, /* date/time branch last modified */ 2 25 3 lvid bit (36) unaligned, /* logical volume ID */ 2 26 3 current_length fixed bin (12) unaligned unsigned, /* number of last page used */ 2 27 3 bit_count fixed bin (24) unaligned unsigned, /* reported length in bits */ 2 28 3 pad2 bit (8) unaligned, 2 29 3 copy_switch bit (1) unaligned, /* copy switch */ 2 30 3 tpd_switch bit (1) unaligned, /* transparent to paging device switch */ 2 31 3 mdir_switch bit (1) unaligned, /* is a master dir */ 2 32 3 damaged_switch bit (1) unaligned, /* salvager warned of possible damage */ 2 33 3 synchronized_switch bit (1) unaligned, /* DM synchronized file */ 2 34 3 pad3 bit (5) unaligned, 2 35 3 ring_brackets (0:2) fixed bin (6) unaligned unsigned, 2 36 3 uid bit (36) unaligned; /* unique ID */ 2 37 2 38 dcl 1 status_link aligned based (status_ptr), 2 39 2 type fixed bin (2) unaligned unsigned, /* as above */ 2 40 2 nnames fixed bin (16) unaligned unsigned, 2 41 2 names_relp bit (18) unaligned, 2 42 2 dtem bit (36) unaligned, 2 43 2 dtd bit (36) unaligned, 2 44 2 pathname_length fixed bin (17) unaligned, /* see pathname */ 2 45 2 pathname_relp bit (18) unaligned; /* see pathname */ 2 46 2 47 dcl status_entry_names (status_branch.nnames) character (32) aligned 2 48 based (pointer (status_area_ptr, status_branch.names_relp)), 2 49 /* array of names returned */ 2 50 status_pathname character (status_link.pathname_length) aligned 2 51 based (pointer (status_area_ptr, status_link.pathname_relp)), 2 52 /* link target path */ 2 53 status_area_ptr pointer, 2 54 status_ptr pointer; 2 55 2 56 dcl (Link initial (0), 2 57 Segment initial (1), 2 58 Directory initial (2)) fixed bin internal static options (constant); 2 59 /* values for type fields declared above */ 2 60 2 61 /* ---------------- END include file status_structures.incl.pl1 ---------------- */ 187 188 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 3 2 /* format: style3 */ 3 3 3 4 /* These constants are to be used for the flags argument of sub_err_ */ 3 5 /* They are just "string (condition_info_header.action_flags)" */ 3 6 3 7 declare ( 3 8 ACTION_CAN_RESTART init (""b), 3 9 ACTION_CANT_RESTART init ("1"b), 3 10 ACTION_DEFAULT_RESTART 3 11 init ("01"b), 3 12 ACTION_QUIET_RESTART 3 13 init ("001"b), 3 14 ACTION_SUPPORT_SIGNAL 3 15 init ("0001"b) 3 16 ) bit (36) aligned internal static options (constant); 3 17 3 18 /* End include file */ 188 189 /* format: on */ 190 191 end check_gate_access_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/08/85 1128.4 check_gate_access_.pl1 >spec>on>41-15>check_gate_access_.pl1 186 1 04/08/85 1113.3 access_mode_values.incl.pl1 >spec>on>41-15>access_mode_values.incl.pl1 187 2 11/22/82 0955.7 status_structures.incl.pl1 >ldd>include>status_structures.incl.pl1 188 3 04/16/82 0958.1 sub_err_flags.incl.pl1 >ldd>include>sub_err_flags.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. ACTION_DEFAULT_RESTART 000000 constant bit(36) initial dcl 3-7 set ref 118* E_ACCESS_BIN constant fixed bin(5,0) initial dcl 1-36 ref 146 ME 000001 constant char(32) initial unaligned dcl 69 set ref 118* P_code parameter fixed bin(35,0) dcl 27 set ref 22 83* 85* 87* P_gate_name parameter char unaligned dcl 28 set ref 22 131* 142* 157* P_reference_ptr parameter pointer dcl 29 set ref 22 102* REW_ACCESS_BIN constant fixed bin(5,0) initial dcl 1-36 ref 146 RE_ACCESS_BIN constant fixed bin(5,0) initial dcl 1-36 ref 146 Segment constant fixed bin(17,0) initial dcl 2-56 ref 136 code 000100 automatic fixed bin(35,0) dcl 33 set ref 78 80 87 109* 131* 133 138* 142* 143 146* 157* 158 158* 172* 175* 176 176* dir_name parameter char unaligned dcl 126 set ref 123 131* 142* dn 001770 automatic char(168) unaligned dcl 168 set ref 175* 179 179 en 002043 automatic char(32) unaligned dcl 170 set ref 175* error_table_$moderr 000034 external static fixed bin(35,0) dcl 65 ref 80 85 146 error_table_$noentry 000032 external static fixed bin(35,0) dcl 64 ref 109 138 158 172 176 found_with_bad_access 000101 automatic bit(1) dcl 34 set ref 75* 80* 85 found_with_good_access 000102 automatic bit(1) dcl 35 set ref 74* 76 78* 83 gate_ptr 001760 automatic pointer dcl 155 set ref 157* get_pdir_ 000010 constant entry external dcl 49 ref 116 116 hcs_$fs_get_path_name 000012 constant entry external dcl 50 ref 175 hcs_$fs_get_seg_ptr 000014 constant entry external dcl 51 ref 157 hcs_$fs_search_get_wdir 000016 constant entry external dcl 52 ref 106 hcs_$get_search_rules 000020 constant entry external dcl 54 ref 73 hcs_$get_user_effmode 000022 constant entry external dcl 55 ref 142 hcs_$status_minf 000024 constant entry external dcl 56 ref 131 i 000103 automatic fixed bin(17,0) dcl 36 set ref 76* 77* ldn 002042 automatic fixed bin(17,0) dcl 169 set ref 175* 179 179 lth 001676 automatic fixed bin(17,0) dcl 95 set ref 106* 107 107 107 mode 000100 automatic fixed bin(5,0) dcl 128 set ref 142* 146 146 146 names 1 000104 automatic char(168) array level 2 dcl 43 set ref 77 number 000104 automatic fixed bin(17,0) level 2 dcl 43 set ref 76 pathname 001677 automatic char(168) unaligned dcl 96 set ref 106 106 107 107 113* 114* ref_ptr parameter pointer dcl 167 set ref 164 172 175* search_rule_name parameter char unaligned dcl 93 set ref 90 98 98* 100 102 104 111 116 118* search_rules 000104 automatic structure level 1 dcl 43 set ref 73 73 sub_err_ 000026 constant entry external dcl 59 ref 118 type 000101 automatic fixed bin(2,0) dcl 129 set ref 131* 136 user_info_$homedir 000030 constant entry external dcl 60 ref 113 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CANT_RESTART internal static bit(36) initial dcl 3-7 ACTION_CAN_RESTART internal static bit(36) initial dcl 3-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 3-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 3-7 A_ACCESS internal static bit(3) initial unaligned dcl 1-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-33 Directory internal static fixed bin(17,0) initial dcl 2-56 E_ACCESS internal static bit(3) initial unaligned dcl 1-11 Link internal static fixed bin(17,0) initial dcl 2-56 M_ACCESS internal static bit(3) initial unaligned dcl 1-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 N_ACCESS internal static bit(3) initial unaligned dcl 1-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 REW_ACCESS internal static bit(3) initial unaligned dcl 1-11 RE_ACCESS internal static bit(3) initial unaligned dcl 1-11 RW_ACCESS internal static bit(3) initial unaligned dcl 1-11 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 R_ACCESS internal static bit(3) initial unaligned dcl 1-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SM_ACCESS internal static bit(3) initial unaligned dcl 1-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 S_ACCESS internal static bit(3) initial unaligned dcl 1-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 W_ACCESS internal static bit(3) initial unaligned dcl 1-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 ioa_ 000000 constant entry external dcl 58 status_area_ptr automatic pointer dcl 2-47 status_branch based structure level 1 dcl 2-8 status_entry_names based char(32) array dcl 2-47 status_link based structure level 1 dcl 2-38 status_pathname based char dcl 2-47 status_ptr automatic pointer dcl 2-47 NAMES DECLARED BY EXPLICIT CONTEXT. TRY_DIRECTORY 000435 constant entry internal dcl 123 ref 98 107 114 116 179 TRY_INITIATED_SEGMENTS 000605 constant entry internal dcl 152 ref 100 TRY_REFERENCING_DIR 000637 constant entry internal dcl 164 ref 102 TRY_TO_LOCATE_GATE 000171 constant entry internal dcl 90 ref 77 check_gate_access_ 000066 constant entry external dcl 22 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 73 73 106 106 null builtin function ref 118 118 172 substr builtin function ref 98 107 107 179 179 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1120 1156 741 1130 Length 1422 741 36 230 156 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME check_gate_access_ 1212 external procedure is an external procedure. TRY_TO_LOCATE_GATE internal procedure shares stack frame of external procedure check_gate_access_. TRY_DIRECTORY 96 internal procedure is called during a stack extension. TRY_INITIATED_SEGMENTS internal procedure shares stack frame of external procedure check_gate_access_. TRY_REFERENCING_DIR internal procedure shares stack frame of external procedure check_gate_access_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME TRY_DIRECTORY 000100 mode TRY_DIRECTORY 000101 type TRY_DIRECTORY check_gate_access_ 000100 code check_gate_access_ 000101 found_with_bad_access check_gate_access_ 000102 found_with_good_access check_gate_access_ 000103 i check_gate_access_ 000104 search_rules check_gate_access_ 001676 lth TRY_TO_LOCATE_GATE 001677 pathname TRY_TO_LOCATE_GATE 001760 gate_ptr TRY_INITIATED_SEGMENTS 001770 dn TRY_REFERENCING_DIR 002042 ldn TRY_REFERENCING_DIR 002043 en TRY_REFERENCING_DIR THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs call_ext_out_desc call_ext_out call_int_this_desc return shorten_stack ext_entry_desc int_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. get_pdir_ hcs_$fs_get_path_name hcs_$fs_get_seg_ptr hcs_$fs_search_get_wdir hcs_$get_search_rules hcs_$get_user_effmode hcs_$status_minf sub_err_ user_info_$homedir THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$moderr error_table_$noentry LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 22 000062 73 000101 74 000111 75 000112 76 000113 77 000125 78 000135 80 000142 82 000147 83 000151 85 000156 87 000165 88 000170 90 000171 98 000202 100 000222 102 000230 104 000244 106 000250 107 000263 109 000304 110 000310 111 000311 113 000315 114 000326 115 000336 116 000337 118 000363 119 000433 123 000434 131 000450 133 000512 136 000515 138 000520 139 000523 142 000524 143 000567 146 000572 149 000604 152 000605 157 000606 158 000631 160 000636 164 000637 172 000641 175 000651 176 000702 179 000710 180 000727 181 000730 ----------------------------------------------------------- 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