# acl_set_file

## NAME



           **acl_set_file** — set an ACL by filename
    


## LIBRARY



           Linux Access Control Lists library (libacl, -lacl).
    


## SYNOPSIS



           <_sys/types.h_ > <_sys/acl.h_ > _int_ **acl_set_file**(_const char *path_p_ ,
           _acl_type_t type_ , _acl_t acl_)
    


## DESCRIPTION



           The **acl_set_file**() function associates an access ACL with a file
           or directory, or associates a default ACL with a directory. The
           pathname for the file or directory is pointed to by the argument
           _path_p_.
    
           The effective user ID of the process must match the owner of the
           file or directory or the process must have the CAP_FOWNER
           capability for the request to succeed.
    
           The value of the argument _type_ is used to indicate whether the
           access ACL or the default ACL associated with _path_p_ is being set.
           If the _type_ parameter is ACL_TYPE_ACCESS, the access ACL of _path_p_
           shall be set. If the _type_ parameter is ACL_TYPE_DEFAULT, the
           default ACL of _path_p_ shall be set. If the argument _type_ specifies
           a type of ACL that cannot be associated with _path_p_ , then the
           function fails.
    
           The _acl_ parameter must reference a valid ACL according to the
           rules described on the _acl_valid_(3) manual page if the _type_
           parameter is ACL_TYPE_ACCESS, and must either reference a valid
           ACL or an ACL with zero ACL entries if the _type_ parameter is
           ACL_TYPE_DEFAULT. If the _acl_ parameter references an empty ACL,
           then the **acl_set_file**() function removes any default ACL
           associated with the directory referred to by the _path_p_ parameter.
    


## RETURN VALUE



           The **acl_set_file**() function returns the value 0 if successful;
           otherwise the value -1 is returned and the global variable _errno_
           is set to indicate the error.
    


## ERRORS



           If any of the following conditions occur, the **acl_set_file**()
           function returns **-1** and sets _errno_ to the corresponding value:
    
           [EACCES]           Search permission is denied for a component of
                              the path prefix or the object exists and the
                              process does not have appropriate access
                              rights.
    
                              Argument _type_ specifies a type of ACL that
                              cannot be associated with _path_p_.
    
           [EINVAL]           The argument _acl_ does not point to a valid ACL.
    
                              The ACL has more entries than the file referred
                              to by _path_p_ can obtain.
    
                              The _type_ parameter is not ACL_TYPE_ACCESS or
                              ACL_TYPE_DEFAULT.
    
                              The _type_ parameter is ACL_TYPE_DEFAULT, but the
                              file referred to by _path_p_ is not a directory.
    
           [ENAMETOOLONG]     The length of the argument _path_p_ is too long.
    
           [ENOENT]           The named object does not exist or the argument
                              _path_p_ points to an empty string.
    
           [ENOSPC]           The directory or file system that would contain
                              the new ACL cannot be extended or the file
                              system is out of file allocation resources.
    
           [ENOTDIR]          A component of the path prefix is not a
                              directory.
    
           [ENOTSUP]          The file identified by _path_p_ cannot be
                              associated with the ACL because the file system
                              on which the file is located does not support
                              this.
    
           [EPERM]            The process does not have appropriate privilege
                              to perform the operation to set the ACL.
    
           [EROFS]            This function requires modification of a file
                              system which is currently read-only.
    


## STANDARDS



           IEEE Std 1003.1e draft 17 (“POSIX.1e”, abandoned)
    
           The behavior of **acl_set_file**() when the _acl_ parameter refers to an
           empty ACL and the _type_ parameter is ACL_TYPE_DEFAULT is an
           extension in the Linux implementation, in order that all values
           returned by **acl_get_file**() can be passed to **acl_set_file**().  The
           POSIX.1e function for removing a default ACL is
           **acl_delete_def_file**().
    


* * *