COMPILATION LISTING OF SEGMENT gtss_verify_access_ Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 12/10/84 1300.0 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * * 4* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 5* * * 6* * * 7* *********************************************************** */ 8 9 /* ************************************************************* 10* * * 11* * Copyright (c) 1979 by Honeywell Information Systems, Inc. * 12* * * 13* ************************************************************* */ 14 gtss_verify_access_: proc (dname, ename, fn, permissions, gcos_status); 15 16 /* This program attempts to simulate the method in which GCOS propagates permissions 17* thru catalogs. On each catalog created by gtss, the 10-bit permissions word passed 18* to filact is converted to a character string and placed in the person field of an acl. 19* The project field is either "*" for general permissions or an all upper-case project 20* name for specific permissions. The tag field is always "g". On files, filact puts 21* the permissions in a more typical Multics acl with *.*.* for general and *.project.* 22* for specific, project again being all upper case. Because of the way GCOS does things, 23* and because of the way in which we have implemented this on Multics, it is possible 24* that a user may be able to access a file on which he does not have the appropriate 25* Multics access. In such a case, the appropriate access is forced for that individual 26* (person.project.*), a bit is set in the aft to indicate that this has been done, and 27* at gtss_ios_close_ time, a call is made to gtss_verify_access_$check_forced_access 28* who removes that forced access if it is there. 29* 30* Author: Paul W. Benjamin 12/14/79 31* 32* Change: Paul Benjamin 01/10/79 Resolve problems when accessing libraries. 33* Change: Paul Benjamin 04/03/80 Additional error checking. 34**/ 35 36 dcl (dname, ename) char (*) parameter; 37 dcl fn fixed bin (24) parameter; 38 dcl permissions bit (6) parameter; 39 dcl gcos_status bit (12) aligned parameter; 40 41 gtss_ext_$aft.aft_entry.forced (fn) = "0"b; 42 call user_info_ (person, umc, acct); 43 UMC = translate (umc, "QWERTYUIOPASDFGHJKLZXCVBNM", "qwertyuiopasdfghjklzxcvbnm"); 44 call hcs_$get_author ( 45 dname 46 , ename 47 , 1b 48 , originator 49 , code 50 ); 51 if code ^= 0 then do; 52 gcos_status = "4003"b3; 53 return; 54 end; 55 originator = substr (originator, index (originator, ".")+1); 56 originator = substr (originator, 1, index (originator, ".")-1); 57 if originator = umc then do; 58 a = empty (); 59 call msf_manager_$acl_list ( 60 fcb_ptr (fn) 61 , gtss_ext_$hcs_work_area_ptr 62 , sa_ptr 63 , null () 64 , sa_count 65 , code 66 ); 67 if code ^= 0 then do; 68 gcos_status = "4003"b3; 69 return; 70 end; 71 mu_need = "10"b||substr (permissions, 2, 1); 72 goto force_access; 73 end; 74 drm_len = length (rtrim (gtss_ext_$drm_path)); 75 temp_dir = gtss_ext_$drm_path; 76 temp_name = substr (dname, drm_len+2); 77 78 do i = 1 to 10; /* Find levels betwixt umc and files */ 79 if index (temp_name, ">") ^= 0 then do; 80 cat_dir (i) = temp_dir; 81 cat_name (i) = substr (temp_name, 1, index (temp_name, ">")-1); 82 temp_dir = rtrim (temp_dir)||">"||cat_name (i); 83 temp_name = substr (temp_name, index (temp_name, ">")+1); 84 end; 85 else do; 86 cat_dir (i) = temp_dir; 87 cat_name (i) = temp_name; 88 cat_dir (i+1) = ""; 89 cat_num = i; 90 i = 10; 91 end; 92 end; 93 94 do i = 1 to cat_num; /* Find propagation acls for general and specific at each level. */ 95 a = empty (); 96 call hcs_$list_dir_acl ( 97 cat_dir (i) 98 , cat_name (i) 99 , gtss_ext_$hcs_work_area_ptr 100 , da_ptr 101 , null () 102 , da_count 103 , code 104 ); 105 found_sp, found_gp = "0"b; 106 if code ^= 0 then do; 107 gcos_status = "4003"b3; 108 return; 109 end; 110 do j = 1 to da_count; 111 if index (da_name (j), "."||rtrim (UMC)||".g") ^= 0 then do; 112 cat.sp (i) = substr (da_name (j), 1, 10); 113 found_sp = "1"b; 114 end; 115 else if index (da_name (j), ".*.g") ^= 0 then do; 116 cat.gp (i) = substr (da_name (j), 1, 10); 117 found_gp = "1"b; 118 end; 119 if found_gp & found_sp then j = da_count; 120 if j = da_count & ^found_gp then cat.gp (i) = "NONE"; 121 if j = da_count & ^found_sp then cat.sp (i) = "NONE"; 122 end; 123 end; 124 gp_result, sp_result = "0000000000"b; /* Initialize accumulated permissions to empty. */ 125 exclude = "0"b; 126 127 do i = 1 to cat_num; /* Accumulate permissions thru each catalog level. */ 128 if cat.gp (i) ^= "NONE" then gp_result = bit (cat.gp (i), 10)|gp_result; 129 if cat.sp (i) ^= "NONE" then do; 130 if cat.sp (i) = "0000000000" then do; 131 exclude = "1"b; 132 sp_result = "0"b; 133 end; 134 else sp_result = bit (cat.sp (i), 10)|sp_result; 135 end; 136 end; 137 138 request = bin (permissions); /* Determine needed access. */ 139 goto check_request (request); 140 check_request (5): 141 check_request (6): 142 check_request (7): 143 check_request (9): 144 check_request (10): 145 check_request (11): 146 check_request (12): 147 check_request (13): 148 check_request (14): 149 check_request (15): 150 check_request (18): 151 check_request (19): 152 check_request (21): 153 check_request (22): 154 check_request (23): 155 check_request (24): 156 check_request (25): 157 check_request (26): 158 check_request (27): 159 check_request (28): 160 check_request (29): 161 check_request (30): 162 check_request (31): 163 check_request (34): 164 check_request (35): 165 check_request (36): 166 check_request (37): 167 check_request (38): 168 check_request (39): 169 check_request (41): 170 check_request (42): 171 check_request (43): 172 check_request (45): 173 check_request (46): 174 check_request (47): 175 check_request (50): 176 check_request (51): 177 check_request (52): 178 check_request (53): 179 check_request (54): 180 check_request (55): 181 check_request (56): 182 check_request (57): 183 check_request (58): 184 check_request (59): 185 check_request (61): 186 check_request (62): 187 check_request (63): 188 gcos_status = "4044"b3; /* Illegal options combination. */ 189 return; 190 check_request (0): 191 check_request (1): 192 check_request (2): 193 check_request (3): 194 check_request (32): 195 check_request (33): 196 check_request (44): 197 gc_need = "1000000000"b; /* GCOS r, Multics r */ 198 mu_need = "100"b; 199 goto check_end; 200 check_request (4): 201 gc_need = "0001000000"b; /* GCOS e, Multics r */ 202 mu_need = "100"b; 203 goto check_end; 204 check_request (8): 205 gc_need = "0010000000"b; /* GCOS a, Multics r */ 206 mu_need = "100"b; 207 goto check_end; 208 check_request (16): 209 check_request (17): 210 check_request (20): 211 check_request (48): 212 check_request (49): 213 gc_need = "0100000000"b; /* GCOS w, Multics rw */ 214 mu_need = "101"b; 215 goto check_end; 216 check_request (40): 217 gc_need = "1010000000"b; /* GCOS ra, Multics r */ 218 mu_need = "100"b; 219 goto check_end; 220 check_request (60): 221 gc_need = "0000000001"b; /* GCOS x, Multics rw */ 222 mu_need = "101"b; 223 check_end: 224 225 a = empty (); /* Look at segment acl */ 226 call msf_manager_$acl_list ( 227 fcb_ptr (fn) 228 , gtss_ext_$hcs_work_area_ptr 229 , sa_ptr 230 , null () 231 , sa_count 232 , code 233 ); 234 if code ^= 0 then do; 235 gcos_status = "4003"b3; 236 return; 237 end; 238 found_gp, found_sp = "0"b; 239 do i = 1 to sa_count; 240 if sa_name (i) = "*.*.*" then do; 241 sa_gp = substr (sa_modes (i), 1, 3); 242 found_gp = "1"b; 243 end; 244 else if sa_name (i) = "*."||rtrim (UMC)||".*" then do; 245 sa_sp = substr (sa_modes (i), 1, 3); 246 found_sp = "1"b; 247 end; 248 if found_gp & found_sp then i = sa_count; 249 end; 250 251 if exclude | sp_result ^= "0"b | found_sp then do; /* Must check SPECIFIC permissions. */ 252 253 if (^gc_need | sp_result) ^= "1111111111"b then do; /* Have NOT accumulated enough permission thru catalogs. */ 254 if (^(mu_need) | sa_sp) ^= "111"b then goto permission_denied; /* Haven't on file, either */ 255 else goto force_access; /* Do have access to file but acl may be upper case. */ 256 end; 257 /* HAVE accumulated enough permission thru catalogs */ 258 else if ^found_sp then goto force_access; /* But not on file, go force */ 259 else if sa_sp = "000"b then goto permission_denied; /* Specifically excluded from file */ 260 else if (^(mu_need) | sa_sp) ^= "111"b then goto force_access; /* Not enough on file, force */ 261 else goto force_access; /* Again acl may be upper case */ 262 end; 263 else do; /* Must check GENERAL permissions. */ 264 if (^gc_need | gp_result) ^= "1111111111"b then do; /* Have NOT accumulated enough permission thru catalogs. */ 265 if (^(mu_need) | sa_gp) ^= "111"b then goto permission_denied; /* Haven't on file either. */ 266 else goto permission_granted; /* Do have the access on the file */ 267 end; 268 /* HAVE accumulated enough permissions thru catalogs. */ 269 else if ^found_gp then goto force_access; 270 else if sa_gp = "000"b then goto permission_denied; /* Specifically excluded. */ 271 else if (^(mu_need) | sa_gp) ^= "111"b then goto force_access; /* Not enough on file, force. */ 272 goto permission_granted; /* Everything's cool */ 273 end; 274 permission_denied: 275 gcos_status = "4003"b3; /* Permissions denied. */ 276 return; 277 permission_granted: 278 gcos_status = "4000"b3; /* Successful. */ 279 return; 280 force_access: 281 gtss_ext_$aft.aft_entry.forced (fn) = "1"b; 282 do i = 1 to sa_count; /* Check for real (upper&lower case) acl */ 283 if sa_name (i) = "*.*.*" 284 | sa_name (i) = "*."||rtrim (umc)||".*" 285 | sa_name (i) = rtrim (person)||"."||rtrim (umc)||".*" 286 | sa_name (i) = rtrim (person)||".*.*" then do; 287 288 /* Found it and don't need to force access. */ 289 if (^(mu_need)|substr (sa_modes (i), 1, 3)) = "111"b then do; 290 gtss_ext_$aft.aft_entry.forced (fn) = "0"b; 291 i = sa_count; 292 end; 293 end; 294 end; 295 if gtss_ext_$aft.aft_entry.forced (fn) = "1"b then do; 296 sa_count = 1; 297 sa_name (1) = rtrim (person)||"."||rtrim (umc)||".*"; 298 sa_modes (1) = mu_need; 299 call msf_manager_$acl_add ( /* FORCE IT! */ 300 fcb_ptr (fn) 301 , sa_ptr 302 , 1 303 , code 304 ); 305 if code ^= 0 then goto permission_denied; 306 end; 307 goto permission_granted; 308 309 check_forced_access: entry (dname, ename, fn); 310 311 /* Remove forced acl, if set. */ 312 313 if gtss_ext_$aft.aft_entry.forced (fn) then do; 314 call user_info_ ( 315 person 316 , umc 317 , acct 318 ); 319 dl_name = rtrim (person)||"."||rtrim (umc)||".*"; 320 call msf_manager_$acl_delete ( 321 fcb_ptr (fn) 322 , addr (dl_array) 323 , 1 324 , code 325 ); 326 end; 327 return; 328 329 dcl a area (1000) based (gtss_ext_$hcs_work_area_ptr); 330 dcl acct char (32); 331 dcl 1 cat (7), 332 2 cat_dir char (168), 333 2 cat_name char (32), 334 2 gp char (10), 335 2 sp char (10); 336 dcl cat_num fixed; 337 dcl code fixed bin (35); 338 dcl 1 da_array (da_count) based (da_ptr), 339 2 da_name char (32), 340 2 da_modes bit (36), 341 2 da_code fixed bin (35); 342 dcl da_count fixed bin; 343 dcl da_ptr ptr; 344 dcl 1 dl_array, 345 2 dl_name char (32), 346 2 dl_code fixed bin (35); 347 dcl drm_len fixed; 348 dcl exclude bit (1); 349 dcl (found_gp, found_sp) bit (1); 350 dcl gc_need bit (10); 351 dcl gp_result bit (10); 352 dcl hcs_$get_author entry (char (*), char (*), fixed bin (1), char (*), fixed bin (35)); 353 dcl hcs_$list_dir_acl entry (char (*), char (*), ptr, ptr, ptr, fixed bin, fixed bin (35)); 354 dcl (i, j) fixed bin; 355 dcl msf_manager_$acl_add entry (ptr, ptr, fixed bin, fixed bin (35)); 356 dcl msf_manager_$acl_delete entry (ptr, ptr, fixed bin, fixed bin (35)); 357 dcl msf_manager_$acl_list entry (ptr, ptr, ptr, ptr, fixed bin, fixed bin (35)); 358 dcl mu_need bit (3); 359 dcl originator char (32); 360 dcl person char (22); 361 dcl request fixed bin; 362 dcl 1 sa_array (sa_count) based (sa_ptr), 363 2 sa_name char (32), 364 2 sa_modes bit (36), 365 2 sa_pad bit (36), 366 2 sa_code fixed bin (35); 367 dcl sa_count fixed bin; 368 dcl sa_gp bit (3); 369 dcl sa_ptr ptr; 370 dcl sa_sp bit (3); 371 dcl sp_result bit (10); 372 dcl temp_dir char (168); 373 dcl temp_name char (32); 374 dcl (umc, UMC) char (9); 375 dcl user_info_ entry (char (*), char (*), char (*)); 376 1 1 /* BEGIN INCLUDE FILE gtss_ext_.incl.pl1 */ 1 2 /* 1 3* Created: (Wardd Multics) 05/20/78 1307.6 mst Sat 1 4* Modified: Ward 1981 add suspended_process dcl 1 5* Modified: Ron Barstad 83-07-21 Fixed level number on mcfc to 3 1 6* Modified: Ron Barstad 83-07-25 Fixed derail range in statistics to 4js3 number 1 7**/ 1 8 dcl gtss_ext_$aem fixed bin static ext /* >0 Print "additional" error information. */; 1 9 dcl gtss_ext_$bad_drl_rtrn static ext label /* Default for drl_rtrn. */; 1 10 dcl gtss_ext_$db (72)bit(1)unal static ext; 1 11 dcl gtss_ext_$deferred_catalogs_ptr ptr ext; 1 12 dcl gtss_ext_$dispose_of_drl static ext label /* quit handlers for some derails use this label to abort */; 1 13 dcl gtss_ext_$drl_rtrn (4)static ext label /* where to return at subsystem end */; 1 14 dcl gtss_ext_$drm_path char(168)static ext /* gtss_expand_pathname_stores drm_path */; 1 15 dcl gtss_ext_$drun_jid char (5) static ext /* valid only for DRUN executing under absentee */; 1 16 dcl gtss_ext_$event_channel fixed bin (71) static ext /* used for DABT signals */; 1 17 dcl gtss_ext_$finished static ext label /* Return to gtss for normal conclusion. */; 1 18 dcl gtss_ext_$gdb_name char(8)ext /* Name H* module to debug. */; 1 19 dcl gtss_ext_$get_line entry(ptr,ptr,fixed bin(21),fixed bin(21),fixed bin(35))variable ext /* Build mode input procedure. */; 1 20 dcl gtss_ext_$gtss_slave_area_seg (4) ext static ptr /* pointer to gtss slave area segment */; 1 21 dcl gtss_ext_$hcs_work_area_ptr ptr ext static /* Temp seg for acl lists. */; 1 22 dcl gtss_ext_$homedir char (64) static ext /* user's home dir */; 1 23 dcl gtss_ext_$last_k_was_out bit (1)aligned ext static /* "1"b => last tty output was output. */; 1 24 dcl gtss_ext_$pdir char (168) varying ext static /* pathname of process directory */; 1 25 dcl gtss_ext_$popup_from_pi static ext label /* transfer to this label after pi simulates popup primitive */; 1 26 dcl gtss_ext_$process_type fixed bin (17) static ext; 1 27 dcl gtss_ext_$put_chars entry(ptr,ptr,fixed bin(24),fixed bin(35)) variable ext /* Terminal output procedure. */; 1 28 dcl gtss_ext_$restart_from_pi static ext label /* transfer to this label after pi restores machine conditions */; 1 29 dcl gtss_ext_$restart_seg_ptr ptr static ext /* points to DRUN restart file when exec under absentee */; 1 30 dcl gtss_ext_$sig_ptr ext static ptr /* saved ptr to signal_ */; 1 31 dcl gtss_ext_$stack_level_ fixed bin ext static; 1 32 dcl gtss_ext_$suspended_process bit(1) ext static; 1 33 dcl gtss_ext_$SYstarstar_file_no fixed bin (24) static ext; 1 34 dcl gtss_ext_$user_id char (26)var ext; 1 35 dcl gtss_ext_$work_area_ptr ptr ext; 1 36 1 37 dcl 1 gtss_ext_$CFP_bits aligned static external 1 38 , 3 no_input_yet bit (1) unaligned /* used in gtss_CFP_input_, gtss_read_starCFP_ */ 1 39 , 3 rtn_bits bit (4) unaligned /* used in gtss_CFP_input_, gtss_CFP_output_ */ 1 40 , 3 cpos_called bit (1) unaligned /* used in gtss_CFP_input_, gtss_drl_t_cfio_, gtss_abandon_CFP_ */ 1 41 , 3 cout_called bit (1) unaligned /* used in gtss_read_starCFP_, gtss_abandon_CFP_ */ 1 42 , 3 build_mode bit (1) unaligned /* used in gtss_build_, gtss_dsd_process_ */ 1 43 ; 1 44 1 45 dcl 1 gtss_ext_$com_reg aligned static ext, 1 46 3 tsdmx, 1 47 4 dst fixed bin (18) unsigned unaligned, 1 48 4 dit fixed bin (18) unsigned unaligned, 1 49 3 tsdpt fixed bin (36) unsigned unaligned, 1 50 3 tsddt fixed bin (36) unsigned unaligned, 1 51 3 tsdid bit (72) unaligned, 1 52 3 tsdsd bit (36) unaligned, 1 53 3 tsdst fixed bin (36) unsigned unaligned, 1 54 3 tsdjb fixed bin (35) unaligned, 1 55 3 tsdgt, 1 56 4 ust_loc fixed bin (18) unsigned unaligned, 1 57 4 gating_ctl fixed bin (18) unsigned unaligned, 1 58 3 tcdfr bit (36) unaligned; 1 59 1 60 dcl 1 gtss_ext_$flags aligned static ext 1 61 , 3 dispose_of_drl_on_pi bit (01) unal /* 1 => drl that should be aborted after quit-pi sequence */ 1 62 , 3 drl_in_progress bit (01) unal /* 1 => drl handler executing; 0 => gcos code executing */ 1 63 , 3 popup_from_pi bit (01) unal /* 1 => derail processor will simulate Gcos break instead of returning */ 1 64 , 3 unfinished_drl bit (01) unal /* 1 => subsystem is handling breaks and quit was raised during a drl */ 1 65 , 3 ss_time_limit_set bit (01) unal /* 1 => exec time limit set for subsystem */ 1 66 , 3 timer_ranout bit (01) unal /* 1 => user is executing timer runout code */ 1 67 , 3 gtss_com_err_sw bit (01) unal /* 1 => stop com_err_ string from going to terminal */ 1 68 , 3 available bit (65) unal 1 69 ; 1 70 1 71 1 72 dcl 1 gtss_ext_$statistics aligned static ext, /* Derail usage statistics */ 1 73 3 total_time (-10:71)fixed bin (71), 1 74 3 count (-10:71)fixed bin (17); 1 75 1 76 /* Declaration of Available File Table 1 77* */ 1 78 dcl 1 gtss_ext_$aft aligned ext, /* aft structure */ 1 79 1 80 3 start_list (0:102) fixed bin (24), /* >0 => 1st aft_entry row to start of next entry chain. */ 1 81 1 82 3 aft_entry (20), 1 83 4 altname char (8), /* altname name for attaching this file */ 1 84 4 next_entry fixed bin (24), /* Next aft_entry in hash chain. */ 1 85 4 previous_add fixed bin (24), /* Previously added entry. */ 1 86 4 next_add fixed bin (24), /* Entry added after this one. */ 1 87 4 used bit (1) unal, /* "1"b => aft_entry contains AFT value. */ 1 88 4 forced bit(1) unal, /* "1"b => gtss_verify_access_ forced access on this file. */ 1 89 1 90 3 free_space fixed bin (24), /* Index of start of free space list for aft entries. */ 1 91 3 first_added fixed bin (24), /* >0 => start of chain in add order. */ 1 92 3 last_added fixed bin (24) /* >0 => end of chain in added order. */; 1 93 1 94 dcl gtss_ext_$ppt ptr ext /* switch name for tapein drl */; 1 95 /** Data structure to provide access to installed 1 96* subsystems fast library load. 1 97* **/ 1 98 dcl 1 gtss_ext_$fast_lib aligned ext 1 99 , 3 fast_lib_fcb ptr /* Pointer to msf fcb. */ 1 100 , 3 fast_lib_ncp fixed bin (24) /* Number of components. */ 1 101 , 3 comp_ptr (0:9)ptr /* Pointer to component. */ 1 102 , 3 comp_wds (0:9)fixed bin (24) /* Component length (words). */ 1 103 ; 1 104 1 105 /* Pointers to segments to regulate multipler 1 106* callers to files. Same segments are used to regulate 1 107* all simulator callers. 1 108**/ 1 109 dcl 1 gtss_ext_$mcfc aligned ext, 1 110 3 multics_lock_id bit(36), 1 111 3 wait_time fixed bin, 1 112 3 files_ptr ptr, 1 113 3 names_ptr ptr, 1 114 3 callers_ptr (0:3)ptr 1 115 ; 1 116 1 117 /* END INCLUDE FILE gtss_ext_.incl.pl1 */ 377 378 2 1 /* BEGIN INCLUDE FILE gtss_dfd_ext_.incl.pl1 */ 2 2 /* 2 3* Created: (Wardd Multics) 06/09/78 1650.6 mst Fri 2 4**/ 2 5 2 6 dcl 1 gtss_dfd_ext_$disk_file_data (41) aligned ext, /* disk_file_data structure */ 2 7 2 8 3 gtss_disk, 2 9 4 dir_name char (168) unal, /* containing directory for file */ 2 10 4 entry_name char (32) unal, /* entry name for file */ 2 11 4 fcb_ptr ptr aligned, /* ptr to file control block */ 2 12 4 msf_array_ptr ptr, /* Pointer to an array of pointers for a msf. Each 2 13* component which has been accessed has a corresponding 2 14* initialized pointer. Currently 500 components 2 15* are supported. */ 2 16 4 single_segment_ptr ptr, /* Pointer to segment for single segment file */ 2 17 4 indicators aligned, /* one word of flags */ 2 18 2 19 5 msf bit (1) unaligned, /* 1=msf segment | 0= single segment */ 2 20 5 protected_file bit (1) unaligned, /* 1=file uses protections | 0= unprotected */ 2 21 5 fill bit (34) unal, 2 22 2 23 4 permissions aligned, 2 24 5 read bit (1) unaligned, /* 1=read permission */ 2 25 5 execute bit (1) unaligned, /* 1=execute permission */ 2 26 5 write bit (1) unaligned, /* 1=write permission */ 2 27 5 fill2 bit (33) unaligned, /* unused at this time */ 2 28 2 29 4 access_mode bit (6) aligned, /* contains the mode by which the file was accessed */ 2 30 4 component fixed bin, /* current component value (first component = 0) */ 2 31 4 offset fixed bin (24), /* current word offset in the component */ 2 32 4 file_position fixed bin (30), /* current file position in words */ 2 33 4 file_size fixed bin (30), /* size of file in words */ 2 34 4 no_components fixed bin (24), /* number of components for a msf */ 2 35 4 attributes_ptr ptr, /* Pointer to the attributes structure 2 36* for this file. (See gtss_file_attributes.incl.pl1) */ 2 37 2 38 4 pat_body, 2 39 2 40 5 word_0, 2 41 6 defective bit (1) unal, /* 1 = file has defective space */ 2 42 6 io_errors bit (1) unal, /* 1 = I/O errors encountered on file */ 2 43 6 reserved bit (2) unal, /* Reserved for GCOS */ 2 44 6 sct bit (12) unal, /* address of SCT for device on which 2 45* file begins or if cataloged, 2 46* for device with file catalog entry */ 2 47 6 reserved2 bit (2) unal, /* Reserved for GCOS */ 2 48 2 49 5 word_1, 2 50 6 io_time fixed bin (35), /* I/O time for this file */ 2 51 2 52 5 word_2, 2 53 6 protected bit (1) unal, /* 1 = file has protected allocation */ 2 54 6 hash_code bit (5) unal, /* hash code of user name under which 2 55* file is cataloged */ 2 56 6 not_cat bit (1) unal, /* 1 = file is not cataloged */ 2 57 6 last_desc bit (1) unal, /* 1 = last descriptor for file is not in memory */ 2 58 6 random bit (1) unal, /* 1 = access to file is random */ 2 59 6 perm bit (1) unal, /* 1 = file space is permanently assigned */ 2 60 6 first_desc bit (1) unal, /* 1 = first descriptor for file is not in memory */ 2 61 6 creator bit (1) unal, /* 1 = user is not creator of file */ 2 62 6 disposition bit (2) unal, /* Abort disposition code 2 63* 00 = Release 2 64* 01 = Dismount 2 65* 10 = Save 2 66* 11 = Continue */ 2 67 6 ids1 bit (1) unal, /* 1 = file is an I-D-S/I file */ 2 68 6 write_performed bit (1) unal, /* 1 = write was performed on file */ 2 69 6 unpermitted_access bit (1) unal, /* 1 = unpermitted access to file attempted or seek 2 70* attempted to part of file marked defective (only 2 71* for procted allocation) */ 2 72 6 purge bit (1) unal, /* 1 = file space to be purgedbefore deallocating file. */ 2 73 6 sector_number bit (18) unal, /* If cataloged file, sector number of file catalog 2 74* (on device with SCT referenced in word 0). If 2 75* cataloged file that is proctected (bit 0 ON in this 2 76* word), memory location of table in File Management 2 77* Supervisor Executive. If user temporary file, 2 78* largest size file has ever attained, in llinks. 2 79* If system value equals 777777 octal, it is system 2 80* file created by System Input. */ 2 81 2 82 5 word_3, 2 83 6 llink_size bit (14) unal, /* 0-13 ^= 0, Current total file size in llinks 2 84* 0-13 = 0, File size is greater than 16,383 llinks, 2 85* and if the file is cataloged, call to .MFS19,5 with 2 86* offset to PAT pointer in index 5 will cause bits 2 87* 14-35 of Q-register to be set to file size. (Unless 2 88* there is a Seek error on file catalog in which case 2 89* zero is returned. ) 2 90* */ 2 91 6 llink_position bit (22) unal, /* Relative llink position within the space descriptors 2 92* in memory. */ 2 93 2 94 5 word_4, 2 95 6 not_last_desc bit (1) unal, /* 1 = not last descriptor in memory */ 2 96 6 space_desc bit (1) unal, /* 0 = this is space descriptor */ 2 97 6 space_defective bit (1) unal, /* 1 = Space is defective */ 2 98 6 extent bit (15) unal, /* Number of llinks in this extent (area defined by this 2 99* descriptor) */ 2 100 6 origin bit (18) unal; /* device llinks number of origin of this extent */ 2 101 /* END INCLUDE FILE gtss_dfd_ext_.incl.pl1 */ 379 380 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 12/10/84 1043.8 gtss_verify_access_.pl1 >spec>on>7105>gtss_verify_access_.pl1 377 1 09/09/83 1713.8 gtss_ext_.incl.pl1 >ldd>include>gtss_ext_.incl.pl1 379 2 09/09/83 1713.2 gtss_dfd_ext_.incl.pl1 >ldd>include>gtss_dfd_ext_.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. UMC 001053 automatic char(9) unaligned dcl 374 set ref 43* 111 244 a based area(1000) dcl 329 set ref 58* 95* 223* acct 000100 automatic char(32) unaligned dcl 330 set ref 42* 314* aft_entry 147 000030 external static structure array level 2 dcl 1-78 cat 000110 automatic structure array level 1 packed unaligned dcl 331 cat_dir 000110 automatic char(168) array level 2 packed unaligned dcl 331 set ref 80* 86* 88* 96* cat_name 52 000110 automatic char(32) array level 2 packed unaligned dcl 331 set ref 81* 82 87* 96* cat_num 000711 automatic fixed bin(17,0) dcl 336 set ref 89* 94 127 code 000712 automatic fixed bin(35,0) dcl 337 set ref 44* 51 59* 67 96* 106 226* 234 299* 305 320* da_array based structure array level 1 unaligned dcl 338 da_count 000713 automatic fixed bin(17,0) dcl 342 set ref 96* 110 119 120 121 da_name based char(32) array level 2 packed unaligned dcl 338 ref 111 112 115 116 da_ptr 000714 automatic pointer dcl 343 set ref 96* 111 112 115 116 dl_array 000716 automatic structure level 1 unaligned dcl 344 set ref 320 320 dl_name 000716 automatic char(32) level 2 packed unaligned dcl 344 set ref 319* dname parameter char unaligned dcl 36 set ref 14 44* 76 309 drm_len 000727 automatic fixed bin(17,0) dcl 347 set ref 74* 76 ename parameter char unaligned dcl 36 set ref 14 44* 309 exclude 000730 automatic bit(1) unaligned dcl 348 set ref 125* 131* 251 fcb_ptr 62 000032 external static pointer array level 3 dcl 2-6 set ref 59* 226* 299* 320* fn parameter fixed bin(24,0) dcl 37 ref 14 41 59 226 280 290 295 299 309 313 320 forced 154(01) 000030 external static bit(1) array level 3 packed unaligned dcl 1-78 set ref 41* 280* 290* 295 313 found_gp 000731 automatic bit(1) unaligned dcl 349 set ref 105* 117* 119 120 238* 242* 248 269 found_sp 000732 automatic bit(1) unaligned dcl 349 set ref 105* 113* 119 121 238* 246* 248 251 258 gc_need 000733 automatic bit(10) unaligned dcl 350 set ref 190* 200* 204* 208* 216* 220* 253 264 gcos_status parameter bit(12) dcl 39 set ref 14 52* 68* 107* 140* 235* 274* 277* gp 62 000110 automatic char(10) array level 2 packed unaligned dcl 331 set ref 116* 120* 128 128 gp_result 000734 automatic bit(10) unaligned dcl 351 set ref 124* 128* 128 264 gtss_dfd_ext_$disk_file_data 000032 external static structure array level 1 dcl 2-6 gtss_disk 000032 external static structure array level 2 dcl 2-6 gtss_ext_$aft 000030 external static structure level 1 dcl 1-78 gtss_ext_$drm_path 000024 external static char(168) unaligned dcl 1-14 ref 74 75 gtss_ext_$hcs_work_area_ptr 000026 external static pointer dcl 1-21 set ref 58 59* 95 96* 223 226* hcs_$get_author 000010 constant entry external dcl 352 ref 44 hcs_$list_dir_acl 000012 constant entry external dcl 353 ref 96 i 000735 automatic fixed bin(17,0) dcl 354 set ref 78* 80 81 82 86 87 88 89 90* 94* 96 96 112 116 120 121* 127* 128 128 129 130 134* 239* 240 241 244 245 248* 282* 283 283 283 283 289 291* j 000736 automatic fixed bin(17,0) dcl 354 set ref 110* 111 112 115 116 119* 120 121* msf_manager_$acl_add 000014 constant entry external dcl 355 ref 299 msf_manager_$acl_delete 000016 constant entry external dcl 356 ref 320 msf_manager_$acl_list 000020 constant entry external dcl 357 ref 59 226 mu_need 000737 automatic bit(3) unaligned dcl 358 set ref 71* 198* 202* 206* 214* 218* 222* 254 260 265 271 289 298 originator 000740 automatic char(32) unaligned dcl 359 set ref 44* 55* 55 55 56* 56 56 57 permissions parameter bit(6) unaligned dcl 38 ref 14 71 138 person 000750 automatic char(22) unaligned dcl 360 set ref 42* 283 283 297 314* 319 request 000756 automatic fixed bin(17,0) dcl 361 set ref 138* 139 sa_array based structure array level 1 unaligned dcl 362 sa_count 000757 automatic fixed bin(17,0) dcl 367 set ref 59* 226* 239 248 282 291 296* sa_gp 000760 automatic bit(3) unaligned dcl 368 set ref 241* 265 270 271 sa_modes 10 based bit(36) array level 2 packed unaligned dcl 362 set ref 241 245 289 298* sa_name based char(32) array level 2 packed unaligned dcl 362 set ref 240 244 283 283 283 283 297* sa_ptr 000762 automatic pointer dcl 369 set ref 59* 226* 240 241 244 245 283 283 283 283 289 297 298 299* sa_sp 000764 automatic bit(3) unaligned dcl 370 set ref 245* 254 259 260 sp 64(18) 000110 automatic char(10) array level 2 packed unaligned dcl 331 set ref 112* 121* 129 130 134 sp_result 000765 automatic bit(10) unaligned dcl 371 set ref 124* 132* 134* 134 251 253 temp_dir 000766 automatic char(168) unaligned dcl 372 set ref 75* 80 82* 82 86 temp_name 001040 automatic char(32) unaligned dcl 373 set ref 76* 79 81 81 83* 83 83 87 umc 001050 automatic char(9) unaligned dcl 374 set ref 42* 43 57 283 283 297 314* 319 user_info_ 000022 constant entry external dcl 375 ref 42 314 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. gtss_ext_$CFP_bits external static structure level 1 dcl 1-37 gtss_ext_$SYstarstar_file_no external static fixed bin(24,0) dcl 1-33 gtss_ext_$aem external static fixed bin(17,0) dcl 1-8 gtss_ext_$bad_drl_rtrn external static label variable dcl 1-9 gtss_ext_$com_reg external static structure level 1 dcl 1-45 gtss_ext_$db external static bit(1) array unaligned dcl 1-10 gtss_ext_$deferred_catalogs_ptr external static pointer dcl 1-11 gtss_ext_$dispose_of_drl external static label variable dcl 1-12 gtss_ext_$drl_rtrn external static label variable array dcl 1-13 gtss_ext_$drun_jid external static char(5) unaligned dcl 1-15 gtss_ext_$event_channel external static fixed bin(71,0) dcl 1-16 gtss_ext_$fast_lib external static structure level 1 dcl 1-98 gtss_ext_$finished external static label variable dcl 1-17 gtss_ext_$flags external static structure level 1 dcl 1-60 gtss_ext_$gdb_name external static char(8) unaligned dcl 1-18 gtss_ext_$get_line external static entry variable dcl 1-19 gtss_ext_$gtss_slave_area_seg external static pointer array dcl 1-20 gtss_ext_$homedir external static char(64) unaligned dcl 1-22 gtss_ext_$last_k_was_out external static bit(1) dcl 1-23 gtss_ext_$mcfc external static structure level 1 dcl 1-109 gtss_ext_$pdir external static varying char(168) dcl 1-24 gtss_ext_$popup_from_pi external static label variable dcl 1-25 gtss_ext_$ppt external static pointer dcl 1-94 gtss_ext_$process_type external static fixed bin(17,0) dcl 1-26 gtss_ext_$put_chars external static entry variable dcl 1-27 gtss_ext_$restart_from_pi external static label variable dcl 1-28 gtss_ext_$restart_seg_ptr external static pointer dcl 1-29 gtss_ext_$sig_ptr external static pointer dcl 1-30 gtss_ext_$stack_level_ external static fixed bin(17,0) dcl 1-31 gtss_ext_$statistics external static structure level 1 dcl 1-72 gtss_ext_$suspended_process external static bit(1) unaligned dcl 1-32 gtss_ext_$user_id external static varying char(26) dcl 1-34 gtss_ext_$work_area_ptr external static pointer dcl 1-35 NAMES DECLARED BY EXPLICIT CONTEXT. check_end 001170 constant label dcl 223 ref 199 203 207 215 219 check_forced_access 001774 constant entry external dcl 309 check_request 000000 constant label array(0:63) dcl 140 ref 139 force_access 001432 constant label dcl 280 ref 72 255 258 260 261 269 271 gtss_verify_access_ 000147 constant entry external dcl 14 permission_denied 001422 constant label dcl 274 ref 254 259 265 270 305 permission_granted 001426 constant label dcl 277 ref 266 272 307 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 320 320 bin builtin function ref 138 bit builtin function ref 128 134 empty builtin function ref 58 95 223 index builtin function ref 55 56 79 81 83 111 115 length builtin function ref 74 null builtin function ref 59 59 96 96 226 226 rtrim builtin function ref 74 82 111 244 283 283 283 283 297 297 319 319 substr builtin function ref 55 56 71 76 81 83 112 116 241 245 289 translate builtin function ref 43 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2540 2574 2367 2550 Length 3022 2367 34 212 150 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME gtss_verify_access_ 801 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME gtss_verify_access_ 000100 acct gtss_verify_access_ 000110 cat gtss_verify_access_ 000711 cat_num gtss_verify_access_ 000712 code gtss_verify_access_ 000713 da_count gtss_verify_access_ 000714 da_ptr gtss_verify_access_ 000716 dl_array gtss_verify_access_ 000727 drm_len gtss_verify_access_ 000730 exclude gtss_verify_access_ 000731 found_gp gtss_verify_access_ 000732 found_sp gtss_verify_access_ 000733 gc_need gtss_verify_access_ 000734 gp_result gtss_verify_access_ 000735 i gtss_verify_access_ 000736 j gtss_verify_access_ 000737 mu_need gtss_verify_access_ 000740 originator gtss_verify_access_ 000750 person gtss_verify_access_ 000756 request gtss_verify_access_ 000757 sa_count gtss_verify_access_ 000760 sa_gp gtss_verify_access_ 000762 sa_ptr gtss_verify_access_ 000764 sa_sp gtss_verify_access_ 000765 sp_result gtss_verify_access_ 000766 temp_dir gtss_verify_access_ 001040 temp_name gtss_verify_access_ 001050 umc gtss_verify_access_ 001053 UMC gtss_verify_access_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out return shorten_stack ext_entry_desc set_cs_eis index_cs_eis any_to_any_tr empty THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. hcs_$get_author hcs_$list_dir_acl msf_manager_$acl_add msf_manager_$acl_delete msf_manager_$acl_list user_info_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. gtss_dfd_ext_$disk_file_data gtss_ext_$aft gtss_ext_$drm_path gtss_ext_$hcs_work_area_ptr LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 14 000142 41 000167 42 000175 43 000215 44 000221 51 000256 52 000260 53 000263 55 000264 56 000303 57 000315 58 000321 59 000326 67 000355 68 000357 69 000362 71 000363 72 000374 74 000375 75 000411 76 000414 78 000426 79 000433 80 000445 81 000453 82 000462 83 000521 84 000530 86 000531 87 000537 88 000543 89 000547 90 000551 92 000553 94 000555 95 000565 96 000572 105 000635 106 000637 107 000641 108 000644 110 000645 111 000655 112 000724 113 000737 114 000741 115 000742 116 000751 117 000763 119 000765 120 000773 121 001010 122 001022 123 001024 124 001026 125 001030 127 001031 128 001041 129 001062 130 001071 131 001075 132 001077 133 001100 134 001101 136 001115 138 001117 139 001127 140 001130 189 001132 190 001133 198 001135 199 001137 200 001140 202 001142 203 001144 204 001145 206 001147 207 001151 208 001152 214 001154 215 001156 216 001157 218 001161 219 001163 220 001164 222 001166 223 001170 226 001175 234 001224 235 001226 236 001231 238 001232 239 001234 240 001243 241 001253 242 001257 243 001261 244 001262 245 001322 246 001330 248 001332 249 001340 251 001342 253 001350 254 001355 255 001362 258 001363 259 001365 260 001367 261 001374 264 001375 265 001402 266 001407 269 001410 270 001412 271 001414 272 001421 274 001422 276 001425 277 001426 279 001431 280 001432 282 001441 283 001451 289 001613 290 001626 291 001635 294 001637 295 001641 296 001653 297 001655 298 001740 299 001743 305 001765 307 001767 309 001770 313 002014 314 002024 319 002044 320 002126 327 002155 ----------------------------------------------------------- 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