Exemplo n.º 1
0
/* reset an ACL */
static int
windows_acl_reset(struct windows_acl_info *w, const char *path)
{
	char *buf;
	struct stat st;
	acl_t acl, acl_new, tmp;

	if ((acl = acl_get_file(path, ACL_TYPE_NFS4)) == NULL)
		err(EX_OSERR, "%s: acl_get_filed() failed", path);

	/* remove extended entries */
	if ((tmp = acl_strip_np(acl, 0)) == NULL)
		err(EX_OSERR, "%s: acl_strip_np() failed", path);

	acl_free(acl);
	acl = tmp;

	bzero(&st, sizeof(st));
	if (stat(path, &st) < 0)
		err(EX_OSERR, "%s: acl_from_text() failed", path);

	acl_new = (S_ISDIR(st.st_mode) == 0) ? w->facl : w->dacl;

	/* merge the new acl with the existing acl */
	if (merge_acl(acl_new, &acl, path) < 0)
		warn("%s: merge_acl() failed", path);
	acl_free(acl);

	/* write out the acl to the file */
	if (acl_set_file(path, ACL_TYPE_NFS4, acl_new) < 0)
		warn("%s: acl_set_file() failed", path);

	return (0);
}
Exemplo n.º 2
0
/*
 * remove extended entries
 */
void
remove_ext(acl_t *prev_acl, const char *filename)
{
	acl_t acl_new;

	acl_new = acl_strip_np(*prev_acl, !n_flag);
	if (acl_new == NULL)
		err(1, "%s: acl_strip_np() failed", filename);

	acl_free(*prev_acl);
	*prev_acl = acl_new;
}