Add or modify a FACL for the specified file(s)

    CLI Examples:

    .. code-block:: bash

        salt '*' acl.modfacl user myuser rwx /tmp/house/kitchen
        salt '*' acl.modfacl default:group mygroup rx /tmp/house/kitchen
        salt '*' acl.modfacl d:u myuser 7 /tmp/house/kitchen
        salt '*' acl.modfacl g mygroup 0 /tmp/house/kitchen /tmp/house/livingroom
        salt '*' acl.modfacl user myuser rwx /tmp/house/kitchen recursive=True
        salt '*' acl.modfacl user myuser rwx /tmp/house/kitchen raise_err=True

def modfacl(acl_type, acl_name='', perms='', *args, **kwargs):
    '''
    Add or modify a FACL for the specified file(s)

    CLI Examples:

    .. code-block:: bash

        salt '*' acl.modfacl user myuser rwx /tmp/house/kitchen
        salt '*' acl.modfacl default:group mygroup rx /tmp/house/kitchen
        salt '*' acl.modfacl d:u myuser 7 /tmp/house/kitchen
        salt '*' acl.modfacl g mygroup 0 /tmp/house/kitchen /tmp/house/livingroom
        salt '*' acl.modfacl user myuser rwx /tmp/house/kitchen recursive=True
        salt '*' acl.modfacl user myuser rwx /tmp/house/kitchen raise_err=True
    '''
    recursive = kwargs.pop('recursive', False)
    raise_err = kwargs.pop('raise_err', False)

    _raise_on_no_files(*args)

    cmd = 'setfacl'
    if recursive:
        cmd += ' -R'  # -R must come first as -m needs the acl_* arguments that come later

    cmd += ' -m'

    cmd = '{0} {1}:{2}:{3}'.format(cmd, _acl_prefix(acl_type), acl_name, perms)

    for dentry in args:
        cmd += ' "{0}"'.format(dentry)
    __salt__['cmd.run'](cmd, python_shell=False, raise_err=raise_err)
    return True