1 01/30/73  ACL primitives
  2 
  3      The following hcs_ entry points are available for reading and setting
  4 the ACL's of storage system branches (segments and directories):
  5 
  6 
  7 dcl hcs_$list_acl entry(char(*),char(*),ptr,ptr,ptr,
  8           fixed bin,fixed bin(35));
  9 call hcs_$list_acl(dir,entry,area_ptr,alloc_ptr,acl_ptr,
 10           acl_count,code);
 11 
 12 dcl hcs_$list_dir_acl entry(char(*),char(*),ptr,ptr,ptr,
 13           fixed bin,fixed bin(35));
 14 call hcs_$list_dir_acl(dir,entry,area_ptr,alloc_ptr,
 15           dir_acl_ptr,acl_count,code);
 16 
 17 dcl hcs_$add_acl_entries entry(char(*),char(*),ptr,
 18           fixed bin,fixed bin(35));
 19 call hcs_$add_acl_entries(dir,entry,acl_ptr,acl_count,
 20           code);
 21 
 22 dcl hcs_$add_dir_acl_entries entry(char(*),char(*),ptr,fixed bin,
 23           fixed bin(35));
 24 call hcs_$add_dir_acl_entries(dir,entry,dir_acl_ptr,
 25           acl_count,code);
 26 
 27 dcl hcs_$delete_acl_entries entry(char(*),char(*),ptr,
 28           fixed bin,fixed bin(35));
 29 call hcs_$delete_acl_entries(dir,entry,delete_acl_ptr,
 30           acl_count,code);
 31 
 32 dcl hcs_$delete_dir_acl_entries entry(char(*),char(*),ptr,
 33           fixed bin,fixed bin(35));
 34 call hcs_$delete_dir_acl_entries(dir,entry,delete_acl_ptr,
 35           acl_count, code);
 36 
 37 dcl hcs_$replace_acl entry(char(*),char(*),ptr,
 38           fixed bin,bit(1) aligned,fixed bin(35));
 39 call hcs_$replace_acl(dir,entry,acl_ptr,acl_count,
 40           no_sysdaemon_sw,code);
 41 
 42 dcl hcs_$replace_dir_acl entry(char(*),char(*),ptr,
 43           fixed bin,bit(1) aligned,fixed bin(35));
 44 call hcs_$replace_dir_acl(dir,entry,dir_acl_ptr,
 45           acl_count,no_sysdaemon_sw,code);
 46 
 47 
 48 Arguments:
 49           The arguments are similar in meaning to the old
 50 hcs_$acl_...arguments. Note that separate entries are
 51 provided for segments and directories, and that there are
 52 three structures: one for segments, one for directories,
 53 and one for deleting acls of both segments and directories.
 54 hcs_$list_acl and hcs_$list_dir_acl now take another
 55 argument, alloc_ptr, which is returned when listing the
 56 entire acl; otherwise, only the modes of the entries in the
 57 acl_ptr structure will be filled in (if found).
 58 To delete an entire acl, hcs_$replace_acl with
 59 an acl_count = 0 and no_sysdaemon_sw = "1"b can be used
 60 for segments.
 61 
 62 dir       char(168) pathname of the directory (Input).
 63 entry     char(32)  name of the entry in the dir (Input).
 64 acl_ptr   ptr       points to an acl structure (Input,
 65                     except in acl_list where if whole acl
 66                     is wanted it is set to null).
 67 dir_acl_ptr ptr     as acl_ptr except points to dir_acl
 68                     structure.
 69 acl_count fixed bin no. of acls in structure (Input
 70                     except when listing the entire acl,
 71                     then output).
 72 area_ptr ptr        points to area where acl list is to
 73                     be allocated when listing whole acl;
 74                     otherwise, it must be null.
 75 alloc_ptr           set to allocated list in area when
 76                     listing whole acl (Output).
 77 no_sysdaemon_sw bit(1) aligned
 78                     if "0"b then *.SysDaemon.* rwa (sma)
 79                     will be appended to top of replacement
 80                     list.(Lower list entries may overwrite
 81                     this). If "1"b then above isn't done.
 82 code      fixed bin(35)
 83                     standard error code. If not 0 then
 84                     function was not performed.
 85 
 86 
 87 List of structures used:
 88 
 89 dcl 1 acl(acl_count) based(acl_ptr) aligned,
 90     2 access_name char(32),
 91     2 mode bit(36),           bits 1-4 are (rewa)
 92                               rest must be 0.
 93     2 pad bit(36),            must be 0.
 94     2 error_code fixed bin(35);
 95 
 96 dcl 1 dir_acl(acl_count) based(dir_acl_ptr) aligned,
 97     2 access_name char(32),
 98     2 dir_mode bit(36)        bit 1-3 are (sma)
 99                               rest must be 0.
100     2 error_code fixed bin(35);
101 
102 dcl 1 del_acl(acl_count) based(del_acl_ptr) aligned,
103     2 access_name char(32),
104     2 error_code fixed bin(35);
105 
106 access_name is of the form Name.Project.Tag. Each of
107           the components must be present and may be "*".