COMPILATION LISTING OF SEGMENT merge_access_audit_flags_ Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 01/22/85 1524.9 mst Tue Options: optimize list 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 4* * * 5* *********************************************************** */ 6 7 /* format: style1,^inddcls,^indnoniterdo,insnl,linecom,indcomtxt */ 8 9 merge_access_audit_flags_: 10 proc (a_flags_1, a_flags_2) returns (bit (36) aligned); 11 12 /* format: off */ 13 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 14 /* */ 15 /* MERGE_ACCESS_AUDIT_FLAGS_ */ 16 /* */ 17 /* Function which merges two sets of access audit flags. The result is a *logical* sum */ 18 /* of the two arguments. For object levels, the result is the greater of the two. For */ 19 /* the event oriented flags, the result of the logical "or" of the two. */ 20 /* */ 21 /* This program is primarily for use by the process creation software. The access audit */ 22 /* flags of the project and user registration are merged to form the process access */ 23 /* audit flags. */ 24 /* */ 25 /* History: */ 26 /* 84-12-07 EJ Sharpe - minor upgrades 27* /* 84-11-19 EJ Sharpe - created */ 28 /* */ 29 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 30 /* format: on */ 31 32 dcl a_flags_1 bit (36) aligned parameter; 33 dcl a_flags_2 bit (36) aligned parameter; 34 35 dcl 1 flags_1 aligned like audit_flags_alt; 36 dcl 1 flags_2 aligned like audit_flags_alt; 37 dcl 1 result aligned like audit_flags_alt; 38 39 dcl object_index fixed bin; 40 dcl flag_index fixed bin; 41 42 dcl max builtin; 43 dcl unspec builtin; 44 45 46 unspec (flags_1) = a_flags_1; 47 unspec (flags_2) = a_flags_2; 48 unspec (result) = ""b; 49 50 do object_index = 1 to n_audit_objects; 51 result.objects (object_index).deny_level = max (flags_1.objects (object_index).deny_level, 52 flags_2.objects (object_index).deny_level); 53 result.objects (object_index).grant_level = max (flags_1.objects (object_index).grant_level, 54 flags_2.objects (object_index).grant_level); 55 end; 56 57 do flag_index = 1 to n_audit_flags; 58 result.flags (flag_index) = flags_1.flags (flag_index) | flags_2.flags (flag_index); 59 end; 60 61 return (unspec (result)); 62 63 1 1 /* begin include file - access_audit_flags.incl.pl1 */ 1 2 1 3 /* NOTE: All changes must be done also to access_audit_flags.incl.alm !!!!!! */ 1 4 1 5 /* Modified 85-01-14 by EJ Sharpe for n_audit_access_types, constants for 1 6* indexing into flags array */ 1 7 /* Modified 85-01-07 by EJ Sharpe for cleanup */ 1 8 /* Modified 84-11-16 by EJ Sharpe to add alternate dcl */ 1 9 1 10 /* The following structure describes the per-process audit 1 11*data which determines which events must be audited. */ 1 12 1 13 dcl 1 audit_flags based aligned, 1 14 2 objects (6) unal, /* n_audit_objects */ 1 15 3 grant_level fixed bin (2) uns unal, 1 16 3 deny_level fixed bin (2) uns unal, 1 17 2 pad bit (7) unal, 1 18 2 admin_ops bit (1) unal, 1 19 2 priv_ops bit (1) unal, 1 20 2 faults bit (1) unal, 1 21 2 cc_1_10 bit (1) unal, /* small channel */ 1 22 2 cc_10_100 bit (1) unal; /* moderate channel */ 1 23 1 24 dcl 1 audit_flags_alt based aligned, 1 25 2 objects (6) unal, /* n_audit_objects */ 1 26 3 grant_level fixed bin (2) uns unal, 1 27 3 deny_level fixed bin (2) uns unal, 1 28 2 pad bit (7) unal, 1 29 2 flags (5) bit (1) unal /* n_audit_flags */; 1 30 1 31 dcl n_audit_objects init (6) 1 32 fixed bin int static options (constant); 1 33 dcl n_audit_flags init (5) 1 34 fixed bin int static options (constant); 1 35 dcl n_audit_access_types init (3) 1 36 fixed bin int static options (constant); 1 37 1 38 /* constants for indexing into the "objects" array */ 1 39 dcl ( 1 40 FSOBJ_AUDIT_OBJECT_INDEX init (1), 1 41 FSATTR_AUDIT_OBJECT_INDEX init (2), 1 42 RCP_AUDIT_OBJECT_INDEX init (3), 1 43 ADMIN_AUDIT_OBJECT_INDEX init (4), 1 44 SPECIAL_AUDIT_OBJECT_INDEX init (5), 1 45 OTHER_AUDIT_OBJECT_INDEX init (6) 1 46 ) fixed bin int static options (constant); 1 47 1 48 /* constants for indexing into the flags array (in the alternate dcl) */ 1 49 dcl ( 1 50 ADMIN_OP_AUDIT_FLAG_INDEX init (1), 1 51 PRIV_OP_AUDIT_FLAG_INDEX init (2), 1 52 FAULTS_AUDIT_FLAG_INDEX init (3), 1 53 CC_1_10_AUDIT_FLAG_INDEX init (4), 1 54 CC_10_100_AUDIT_FLAG_INDEX init (5) 1 55 ) fixed bin int static options (constant); 1 56 1 57 /* constants which define the meaning of the level values / access types */ 1 58 dcl ( 1 59 NONE init (0), 1 60 MODIFY_ACCESS init (1), 1 61 MODIFY init (2), 1 62 READ init (3) 1 63 ) fixed bin (2) uns int static options (constant); 1 64 1 65 /* Note: "MODIFY" implies "MODIFY_ACCESS" as well; 1 66* "READ" implies "MODIFY" and "MODIFY_ACCESS" as well */ 1 67 1 68 /* Note: The size of the metering data in active_hardcore_data is 1 69* dependant upon the number of audit flags and objects. 1 70* Specifically, the number of metering buckets is: 1 71* n_audit_objects*2*n_audit_access_types+n_audit_flags+1 1 72* (the extra "1" is for debugging purposes) */ 1 73 1 74 /* end include file - access_audit_flags.incl.pl1 */ 64 65 66 67 68 end merge_access_audit_flags_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 01/22/85 1313.4 merge_access_audit_flags_.pl1 >spec>temp>41-5>merge_access_audit_flags_.pl1 64 1 01/22/85 1321.6 access_audit_flags.incl.pl1 >spec>temp>41-5>access_audit_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. a_flags_1 parameter bit(36) dcl 32 ref 9 46 a_flags_2 parameter bit(36) dcl 33 ref 9 47 audit_flags_alt based structure level 1 dcl 1-24 deny_level 0(02) 000102 automatic fixed bin(2,0) array level 3 in structure "result" packed unsigned unaligned dcl 37 in procedure "merge_access_audit_flags_" set ref 51* deny_level 0(02) 000100 automatic fixed bin(2,0) array level 3 in structure "flags_1" packed unsigned unaligned dcl 35 in procedure "merge_access_audit_flags_" set ref 51 deny_level 0(02) 000101 automatic fixed bin(2,0) array level 3 in structure "flags_2" packed unsigned unaligned dcl 36 in procedure "merge_access_audit_flags_" set ref 51 flag_index 000104 automatic fixed bin(17,0) dcl 40 set ref 57* 58 58 58* flags 0(31) 000100 automatic bit(1) array level 2 in structure "flags_1" packed unaligned dcl 35 in procedure "merge_access_audit_flags_" set ref 58 flags 0(31) 000102 automatic bit(1) array level 2 in structure "result" packed unaligned dcl 37 in procedure "merge_access_audit_flags_" set ref 58* flags 0(31) 000101 automatic bit(1) array level 2 in structure "flags_2" packed unaligned dcl 36 in procedure "merge_access_audit_flags_" set ref 58 flags_1 000100 automatic structure level 1 dcl 35 set ref 46* flags_2 000101 automatic structure level 1 dcl 36 set ref 47* grant_level 000102 automatic fixed bin(2,0) array level 3 in structure "result" packed unsigned unaligned dcl 37 in procedure "merge_access_audit_flags_" set ref 53* grant_level 000101 automatic fixed bin(2,0) array level 3 in structure "flags_2" packed unsigned unaligned dcl 36 in procedure "merge_access_audit_flags_" set ref 53 grant_level 000100 automatic fixed bin(2,0) array level 3 in structure "flags_1" packed unsigned unaligned dcl 35 in procedure "merge_access_audit_flags_" set ref 53 max builtin function dcl 42 ref 51 53 n_audit_flags constant fixed bin(17,0) initial dcl 1-33 ref 57 n_audit_objects constant fixed bin(17,0) initial dcl 1-31 ref 50 object_index 000103 automatic fixed bin(17,0) dcl 39 set ref 50* 51 51 51 53 53 53* objects 000102 automatic structure array level 2 in structure "result" packed unaligned dcl 37 in procedure "merge_access_audit_flags_" objects 000100 automatic structure array level 2 in structure "flags_1" packed unaligned dcl 35 in procedure "merge_access_audit_flags_" objects 000101 automatic structure array level 2 in structure "flags_2" packed unaligned dcl 36 in procedure "merge_access_audit_flags_" result 000102 automatic structure level 1 dcl 37 set ref 48* 61 unspec builtin function dcl 43 set ref 46* 47* 48* 61 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ADMIN_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 ADMIN_OP_AUDIT_FLAG_INDEX internal static fixed bin(17,0) initial dcl 1-49 CC_10_100_AUDIT_FLAG_INDEX internal static fixed bin(17,0) initial dcl 1-49 CC_1_10_AUDIT_FLAG_INDEX internal static fixed bin(17,0) initial dcl 1-49 FAULTS_AUDIT_FLAG_INDEX internal static fixed bin(17,0) initial dcl 1-49 FSATTR_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 FSOBJ_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 MODIFY internal static fixed bin(2,0) initial unsigned dcl 1-58 MODIFY_ACCESS internal static fixed bin(2,0) initial unsigned dcl 1-58 NONE internal static fixed bin(2,0) initial unsigned dcl 1-58 OTHER_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 PRIV_OP_AUDIT_FLAG_INDEX internal static fixed bin(17,0) initial dcl 1-49 RCP_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 READ internal static fixed bin(2,0) initial unsigned dcl 1-58 SPECIAL_AUDIT_OBJECT_INDEX internal static fixed bin(17,0) initial dcl 1-39 audit_flags based structure level 1 dcl 1-13 n_audit_access_types internal static fixed bin(17,0) initial dcl 1-35 NAME DECLARED BY EXPLICIT CONTEXT. merge_access_audit_flags_ 000005 constant entry external dcl 9 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 164 174 133 174 Length 364 133 10 153 30 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME merge_access_audit_flags_ 73 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME merge_access_audit_flags_ 000100 flags_1 merge_access_audit_flags_ 000101 flags_2 merge_access_audit_flags_ 000102 result merge_access_audit_flags_ 000103 object_index merge_access_audit_flags_ 000104 flag_index merge_access_audit_flags_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. return ext_entry NO EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. CONSTANTS 000000 aa 514000000044 BEGIN PROCEDURE merge_access_audit_flags_ ENTRY TO merge_access_audit_flags_ STATEMENT 1 ON LINE 9 merge_access_audit_flags_: proc (a_flags_1, a_flags_2) returns (bit (36) aligned); 000001 at 000003000000 000002 tt 000000000000 000003 ta 000001000000 000004 da 000024320000 000005 aa 000120 6270 00 eax7 80 000006 aa 7 00034 3521 20 epp2 pr7|28,* 000007 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000010 aa 000006000000 000011 aa 000000000000 STATEMENT 1 ON LINE 46 unspec (flags_1) = a_flags_1; 000012 aa 6 00032 3735 20 epp7 pr6|26,* 000013 aa 7 00002 2351 20 lda pr7|2,* a_flags_1 000014 aa 6 00100 7551 00 sta pr6|64 STATEMENT 1 ON LINE 47 unspec (flags_2) = a_flags_2; 000015 aa 7 00004 2351 20 lda pr7|4,* a_flags_2 000016 aa 6 00101 7551 00 sta pr6|65 STATEMENT 1 ON LINE 48 unspec (result) = ""b; 000017 aa 6 00102 4501 00 stz pr6|66 STATEMENT 1 ON LINE 50 do object_index = 1 to n_audit_objects; 000020 aa 000006 2360 07 ldq 6,dl 000021 aa 6 00105 7561 00 stq pr6|69 000022 aa 000001 2360 07 ldq 1,dl 000023 aa 6 00103 7561 00 stq pr6|67 object_index 000024 aa 6 00103 2361 00 ldq pr6|67 object_index 000025 aa 6 00105 1161 00 cmpq pr6|69 000026 aa 000053 6054 04 tpnz 43,ic 000101 STATEMENT 1 ON LINE 51 result.objects (object_index).deny_level = max (flags_1.objects (object_index).deny_level, flags_2.objects (object_index).deny_level); 000027 aa 000002 7360 00 qls 2 000030 aa 003 100 060 506 csl (pr,ql),(pr),fill(0),bool(move) 000031 aa 6 00100 67 0002 descb pr6|64(34),2 flags_2.deny_level 000032 aa 6 00056 00 0044 descb pr6|46,36 000033 aa 6 00056 2351 00 lda pr6|46 000034 aa 000000 6270 06 eax7 0,ql 000035 aa 000106 7730 00 lrl 70 000036 aa 6 00110 7561 00 stq pr6|72 flags_2.deny_level 000037 aa 003 100 060 517 csl (pr,x7),(pr),fill(0),bool(move) 000040 aa 6 00077 67 0002 descb pr6|63(34),2 flags_1.deny_level 000041 aa 6 00056 00 0044 descb pr6|46,36 000042 aa 6 00056 2351 00 lda pr6|46 000043 aa 000106 7730 00 lrl 70 000044 aa 6 00110 1161 00 cmpq pr6|72 flags_2.deny_level 000045 aa 000002 6050 04 tpl 2,ic 000047 000046 aa 6 00110 2361 00 ldq pr6|72 flags_2.deny_level 000047 aa 000106 7370 00 lls 70 000050 aa 6 00056 7551 00 sta pr6|46 000051 aa 003 117 060 500 csl (pr),(pr,x7),fill(0),bool(move) 000052 aa 6 00056 00 0002 descb pr6|46,2 000053 aa 6 00101 67 0002 descb pr6|65(34),2 result.deny_level STATEMENT 1 ON LINE 53 result.objects (object_index).grant_level = max (flags_1.objects (object_index).grant_level, flags_2.objects (object_index).grant_level); 000054 aa 003 100 060 517 csl (pr,x7),(pr),fill(0),bool(move) 000055 aa 6 00100 65 0002 descb pr6|64(32),2 flags_2.grant_level 000056 aa 6 00056 00 0044 descb pr6|46,36 000057 aa 6 00056 2351 00 lda pr6|46 000060 aa 000106 7730 00 lrl 70 000061 aa 6 00110 7561 00 stq pr6|72 flags_2.grant_level 000062 aa 003 100 060 517 csl (pr,x7),(pr),fill(0),bool(move) 000063 aa 6 00077 65 0002 descb pr6|63(32),2 flags_1.grant_level 000064 aa 6 00056 00 0044 descb pr6|46,36 000065 aa 6 00056 2351 00 lda pr6|46 000066 aa 000106 7730 00 lrl 70 000067 aa 6 00110 1161 00 cmpq pr6|72 flags_2.grant_level 000070 aa 000002 6050 04 tpl 2,ic 000072 000071 aa 6 00110 2361 00 ldq pr6|72 flags_2.grant_level 000072 aa 000106 7370 00 lls 70 000073 aa 6 00056 7551 00 sta pr6|46 000074 aa 003 117 060 500 csl (pr),(pr,x7),fill(0),bool(move) 000075 aa 6 00056 00 0002 descb pr6|46,2 000076 aa 6 00101 65 0002 descb pr6|65(32),2 result.grant_level STATEMENT 1 ON LINE 55 end; 000077 aa 6 00103 0541 00 aos pr6|67 object_index 000100 aa 777724 7100 04 tra -44,ic 000024 STATEMENT 1 ON LINE 57 do flag_index = 1 to n_audit_flags; 000101 aa 000005 2360 07 ldq 5,dl 000102 aa 6 00106 7561 00 stq pr6|70 000103 aa 000001 2360 07 ldq 1,dl 000104 aa 6 00104 7561 00 stq pr6|68 flag_index 000105 aa 000000 0110 03 nop 0,du 000106 aa 6 00104 2361 00 ldq pr6|68 flag_index 000107 aa 6 00106 1161 00 cmpq pr6|70 000110 aa 000017 6054 04 tpnz 15,ic 000127 STATEMENT 1 ON LINE 58 result.flags (flag_index) = flags_1.flags (flag_index) | flags_2.flags (flag_index); 000111 aa 003 100 060 506 csl (pr,ql),(pr),fill(0),bool(move) 000112 aa 6 00101 63 0001 descb pr6|65(30),1 flags_2.flags 000113 aa 6 00110 00 0044 descb pr6|72,36 flags_2.flags 000114 aa 003 100 060 506 csl (pr,ql),(pr),fill(0),bool(move) 000115 aa 6 00100 63 0001 descb pr6|64(30),1 flags_1.flags 000116 aa 6 00056 00 0044 descb pr6|46,36 000117 aa 6 00056 2351 00 lda pr6|46 000120 aa 6 00110 2751 00 ora pr6|72 flags_2.flags 000121 aa 6 00056 7551 00 sta pr6|46 000122 aa 003 106 060 500 csl (pr),(pr,ql),fill(0),bool(move) 000123 aa 6 00056 00 0001 descb pr6|46,1 000124 aa 6 00102 63 0001 descb pr6|66(30),1 result.flags STATEMENT 1 ON LINE 59 end; 000125 aa 6 00104 0541 00 aos pr6|68 flag_index 000126 aa 777760 7100 04 tra -16,ic 000106 STATEMENT 1 ON LINE 61 return (unspec (result)); 000127 aa 6 00102 2351 00 lda pr6|66 000130 aa 6 00032 3735 20 epp7 pr6|26,* 000131 aa 7 00006 7551 20 sta pr7|6,* 000132 aa 0 00631 7101 00 tra pr0|409 return STATEMENT 1 ON LINE 68 end merge_access_audit_flags_; END PROCEDURE merge_access_audit_flags_ ----------------------------------------------------------- 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