|
|
1.1 ! root 1: PROTOTYPE ACL LIBRARY ! 2: ! 3: Introduction ! 4: ! 5: An access control list (ACL) is a list of principals, where each ! 6: principal is is represented by a text string which cannot contain ! 7: whitespace. The library allows application programs to refer to named ! 8: access control lists to test membership and to atomically add and ! 9: delete principals using a natural and intuitive interface. At ! 10: present, the names of access control lists are required to be Unix ! 11: filenames, and refer to human-readable Unix files; in the future, when ! 12: a networked ACL server is implemented, the names may refer to a ! 13: different namespace specific to the ACL service. ! 14: ! 15: ! 16: Usage ! 17: ! 18: cc <files> -lacl -lkrb. ! 19: ! 20: ! 21: ! 22: Principal Names ! 23: ! 24: Principal names have the form ! 25: ! 26: <name>[.<instance>][@<realm>] ! 27: ! 28: e.g. ! 29: ! 30: asp ! 31: asp.root ! 32: [email protected] ! 33: [email protected] ! 34: [email protected] ! 35: ! 36: It is possible for principals to be underspecified. If instance is ! 37: missing, it is assumed to be "". If realm is missing, it is assumed ! 38: to be local_realm. The canonical form contains all of name, instance, ! 39: and realm; the acl_add and acl_delete routines will always ! 40: leave the file in that form. Note that the canonical form of ! 41: [email protected] is actually [email protected]. ! 42: ! 43: ! 44: Routines ! 45: ! 46: acl_canonicalize_principal(principal, buf) ! 47: char *principal; ! 48: char *buf; /*RETVAL*/ ! 49: ! 50: Store the canonical form of principal in buf. Buf must contain enough ! 51: space to store a principal, given the limits on the sizes of name, ! 52: instance, and realm specified in /usr/include/krb.h. ! 53: ! 54: acl_check(acl, principal) ! 55: char *acl; ! 56: char *principal; ! 57: ! 58: Returns nonzero if principal appears in acl. Returns 0 if principal ! 59: does not appear in acl, or if an error occurs. Canonicalizes ! 60: principal before checking, and allows the ACL to contain wildcards. ! 61: ! 62: acl_exact_match(acl, principal) ! 63: char *acl; ! 64: char *principal; ! 65: ! 66: Like acl_check, but does no canonicalization or wildcarding. ! 67: ! 68: acl_add(acl, principal) ! 69: char *acl; ! 70: char *principal; ! 71: ! 72: Atomically adds principal to acl. Returns 0 if successful, nonzero ! 73: otherwise. It is considered a failure if principal is already in acl. ! 74: This routine will canonicalize principal, but will treat wildcards ! 75: literally. ! 76: ! 77: acl_delete(acl, principal) ! 78: char *acl; ! 79: char *principal; ! 80: ! 81: Atomically deletes principal from acl. Returns 0 if successful, ! 82: nonzero otherwise. It is consider a failure if principal is not ! 83: already in acl. This routine will canonicalize principal, but will ! 84: treat wildcards literally. ! 85: ! 86: acl_initialize(acl, mode) ! 87: char *acl; ! 88: int mode; ! 89: ! 90: Initialize acl. If acl file does not exist, creates it with mode ! 91: mode. If acl exists, removes all members. Returns 0 if successful, ! 92: nonzero otherwise. WARNING: Mode argument is likely to change with ! 93: the eventual introduction of an ACL service. ! 94: ! 95: ! 96: Known problems ! 97: ! 98: In the presence of concurrency, there is a very small chance that ! 99: acl_add or acl_delete could report success even though it would have ! 100: had no effect. This is a necessary side effect of using lock files ! 101: for concurrency control rather than flock(2), which is not supported ! 102: by NFS. ! 103: ! 104: The current implementation caches ACLs in memory in a hash-table ! 105: format for increased efficiency in checking membership; one effect of ! 106: the caching scheme is that one file descriptor will be kept open for ! 107: each ACL cached, up to a maximum of 8.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.