diff options
author | jedgar <jedgar@FreeBSD.org> | 2002-02-03 02:37:43 +0000 |
---|---|---|
committer | jedgar <jedgar@FreeBSD.org> | 2002-02-03 02:37:43 +0000 |
commit | 2547546bed043aa1f269555b72436419fb846c0d (patch) | |
tree | 61cb23f289f0e68fc9206706788cefa7d04c0684 /bin/setfacl | |
parent | 88092e8baf468031a1bbdfa2644f181000c7259c (diff) | |
download | FreeBSD-src-2547546bed043aa1f269555b72436419fb846c0d.zip FreeBSD-src-2547546bed043aa1f269555b72436419fb846c0d.tar.gz |
Use a more correct method of copying entire ACLs (fixes
operation under Linux).
Diffstat (limited to 'bin/setfacl')
-rw-r--r-- | bin/setfacl/mask.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/bin/setfacl/mask.c b/bin/setfacl/mask.c index 0851be1..d81cfb6 100644 --- a/bin/setfacl/mask.c +++ b/bin/setfacl/mask.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001 Chris D. Faulhaber + * Copyright (c) 2001-2002 Chris D. Faulhaber * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -41,7 +41,7 @@ int set_acl_mask(acl_t *prev_acl) { - acl_entry_t entry; + acl_entry_t entry, entry_new; acl_t acl; acl_tag_t tag; int entry_id; @@ -104,7 +104,20 @@ set_acl_mask(acl_t *prev_acl) return (0); } - **prev_acl = *acl; + acl_free(*prev_acl); + *prev_acl = acl_init(ACL_MAX_ENTRIES); + if (*prev_acl == NULL) + err(1, "acl_init() failed"); + + entry_id = ACL_FIRST_ENTRY; + while (acl_get_entry(acl, entry_id, &entry) == 1) { + entry_id = ACL_NEXT_ENTRY; + if (acl_create_entry(prev_acl, &entry_new) == -1) + err(1, "acl_create_entry() failed"); + if (acl_copy_entry(entry_new, entry) == -1) + err(1, "acl_copy_entry() failed"); + } + acl_free(acl); return (0); |