003 File Manager
Current Path:
/usr/src/lib/libc/posix1e
usr
/
src
/
lib
/
libc
/
posix1e
/
📁
..
📄
Makefile.inc
(2.82 KB)
📄
Symbol.map
(1.39 KB)
📄
acl.3
(9.51 KB)
📄
acl_add_flag_np.3
(2.91 KB)
📄
acl_add_perm.3
(4.12 KB)
📄
acl_branding.c
(3.9 KB)
📄
acl_calc_mask.3
(2.7 KB)
📄
acl_calc_mask.c
(3.71 KB)
📄
acl_clear_flags_np.3
(2.35 KB)
📄
acl_clear_perms.3
(2.33 KB)
📄
acl_compat.c
(2.24 KB)
📄
acl_copy.c
(2.4 KB)
📄
acl_copy_entry.3
(2.35 KB)
📄
acl_create_entry.3
(2.83 KB)
📄
acl_delete.3
(4.28 KB)
📄
acl_delete.c
(2.33 KB)
📄
acl_delete_entry.3
(2.73 KB)
📄
acl_delete_entry.c
(4.25 KB)
📄
acl_delete_flag_np.3
(2.43 KB)
📄
acl_delete_perm.3
(2.42 KB)
📄
acl_dup.3
(3.19 KB)
📄
acl_entry.c
(3.58 KB)
📄
acl_flag.c
(3.08 KB)
📄
acl_free.3
(2.61 KB)
📄
acl_free.c
(1.83 KB)
📄
acl_from_text.3
(3.69 KB)
📄
acl_from_text.c
(6.9 KB)
📄
acl_from_text_nfs4.c
(6.53 KB)
📄
acl_get.3
(4.81 KB)
📄
acl_get.c
(5.01 KB)
📄
acl_get_brand_np.3
(2.69 KB)
📄
acl_get_entry.3
(3.62 KB)
📄
acl_get_entry_type_np.3
(2.49 KB)
📄
acl_get_flag_np.3
(2.63 KB)
📄
acl_get_flagset_np.3
(2.51 KB)
📄
acl_get_perm_np.3
(2.65 KB)
📄
acl_get_permset.3
(2.49 KB)
📄
acl_get_qualifier.3
(3.79 KB)
📄
acl_get_tag_type.3
(2.53 KB)
📄
acl_id_to_name.c
(2.91 KB)
📄
acl_init.3
(3.31 KB)
📄
acl_init.c
(2.64 KB)
📄
acl_is_trivial_np.3
(2.84 KB)
📄
acl_perm.c
(2.88 KB)
📄
acl_set.3
(4.53 KB)
📄
acl_set.c
(5.67 KB)
📄
acl_set_entry_type_np.3
(2.81 KB)
📄
acl_set_flagset_np.3
(2.51 KB)
📄
acl_set_permset.3
(2.38 KB)
📄
acl_set_qualifier.3
(2.61 KB)
📄
acl_set_tag_type.3
(3.08 KB)
📄
acl_strip.c
(5.17 KB)
📄
acl_strip_np.3
(3.18 KB)
📄
acl_support.c
(9.9 KB)
📄
acl_support.h
(3.14 KB)
📄
acl_support_nfs4.c
(6.48 KB)
📄
acl_to_text.3
(4.64 KB)
📄
acl_to_text.c
(6.73 KB)
📄
acl_to_text_nfs4.c
(5.91 KB)
📄
acl_valid.3
(4.96 KB)
📄
acl_valid.c
(3.38 KB)
📄
extattr.3
(3.34 KB)
📄
extattr.c
(2.38 KB)
📄
mac.3
(5.67 KB)
📄
mac.c
(9.21 KB)
📄
mac.conf
(507 B)
📄
mac.conf.5
(3.99 KB)
📄
mac_exec.c
(1.96 KB)
📄
mac_free.3
(3.06 KB)
📄
mac_get.3
(4.48 KB)
📄
mac_get.c
(2.6 KB)
📄
mac_is_present.3
(2.83 KB)
📄
mac_prepare.3
(3.96 KB)
📄
mac_set.3
(4.04 KB)
📄
mac_set.c
(2.29 KB)
📄
mac_text.3
(3.33 KB)
📄
posix1e.3
(3.53 KB)
Editing: acl_strip.c
/*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2001 Chris D. Faulhaber * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); #include <errno.h> #include <stdio.h> #include <assert.h> #include <sys/acl.h> #include <sys/stat.h> #include "acl_support.h" /* * These routines from sys/kern/subr_acl_nfs4.c are used by both kernel * and libc. */ void acl_nfs4_sync_mode_from_acl(mode_t *_mode, const struct acl *aclp); void acl_nfs4_trivial_from_mode_libc(struct acl *aclp, int file_owner_id, int canonical_six); static acl_t _nfs4_acl_strip_np(const acl_t aclp, int canonical_six) { acl_t newacl; mode_t mode = 0; newacl = acl_init(ACL_MAX_ENTRIES); if (newacl == NULL) { errno = ENOMEM; return (NULL); } _acl_brand_as(newacl, ACL_BRAND_NFS4); acl_nfs4_sync_mode_from_acl(&mode, &(aclp->ats_acl)); acl_nfs4_trivial_from_mode_libc(&(newacl->ats_acl), mode, canonical_six); return (newacl); } static acl_t _posix1e_acl_strip_np(const acl_t aclp, int recalculate_mask) { acl_t acl_new, acl_old; acl_entry_t entry, entry_new; acl_tag_t tag; int entry_id, have_mask_entry; assert(_acl_brand(aclp) == ACL_BRAND_POSIX); acl_old = acl_dup(aclp); if (acl_old == NULL) return (NULL); assert(_acl_brand(acl_old) == ACL_BRAND_POSIX); have_mask_entry = 0; acl_new = acl_init(ACL_MAX_ENTRIES); if (acl_new == NULL) { acl_free(acl_old); return (NULL); } tag = ACL_UNDEFINED_TAG; /* only save the default user/group/other entries */ entry_id = ACL_FIRST_ENTRY; while (acl_get_entry(acl_old, entry_id, &entry) == 1) { entry_id = ACL_NEXT_ENTRY; assert(_entry_brand(entry) == ACL_BRAND_POSIX); if (acl_get_tag_type(entry, &tag) == -1) goto fail; switch(tag) { case ACL_USER_OBJ: case ACL_GROUP_OBJ: case ACL_OTHER: if (acl_create_entry(&acl_new, &entry_new) == -1) goto fail; if (acl_copy_entry(entry_new, entry) == -1) goto fail; assert(_entry_brand(entry_new) == ACL_BRAND_POSIX); break; case ACL_MASK: have_mask_entry = 1; break; default: break; } } assert(_acl_brand(acl_new) == ACL_BRAND_POSIX); if (have_mask_entry && recalculate_mask) { if (acl_calc_mask(&acl_new) == -1) goto fail; } return (acl_new); fail: acl_free(acl_new); acl_free(acl_old); return (NULL); } acl_t acl_strip_np(const acl_t aclp, int recalculate_mask) { switch (_acl_brand(aclp)) { case ACL_BRAND_NFS4: return (_nfs4_acl_strip_np(aclp, 0)); case ACL_BRAND_POSIX: return (_posix1e_acl_strip_np(aclp, recalculate_mask)); default: errno = EINVAL; return (NULL); } } /* * Return 1, if ACL is trivial, 0 otherwise. * * ACL is trivial, iff its meaning could be fully expressed using just file * mode. In other words, ACL is trivial iff it doesn't have "+" to the right * of the mode bits in "ls -l" output ;-) */ int acl_is_trivial_np(const acl_t aclp, int *trivialp) { acl_t tmpacl; int differs; if (aclp == NULL || trivialp == NULL) { errno = EINVAL; return (-1); } switch (_acl_brand(aclp)) { case ACL_BRAND_POSIX: if (aclp->ats_acl.acl_cnt == 3) *trivialp = 1; else *trivialp = 0; return (0); case ACL_BRAND_NFS4: /* * If the ACL has more than canonical six entries, * it's non trivial by definition. */ if (aclp->ats_acl.acl_cnt > 6) { *trivialp = 0; return (0); } /* * Calculate trivial ACL - using acl_strip_np(3) - and compare * with the original. */ tmpacl = _nfs4_acl_strip_np(aclp, 0); if (tmpacl == NULL) return (-1); differs = _acl_differs(aclp, tmpacl); acl_free(tmpacl); if (differs == 0) { *trivialp = 1; return (0); } /* * Try again with an old-style, "canonical six" trivial ACL. */ tmpacl = _nfs4_acl_strip_np(aclp, 1); if (tmpacl == NULL) return (-1); differs = _acl_differs(aclp, tmpacl); acl_free(tmpacl); if (differs) *trivialp = 0; else *trivialp = 1; return (0); default: errno = EINVAL; return (-1); } }
Upload File
Create Folder