diff options
author | kientzle <kientzle@FreeBSD.org> | 2004-04-06 23:08:31 +0000 |
---|---|---|
committer | kientzle <kientzle@FreeBSD.org> | 2004-04-06 23:08:31 +0000 |
commit | a356af4fc799bfdc962b4e80af259fed267f5015 (patch) | |
tree | 2e6a6dbc7b0386d20d14ad18d24897719c8cb8b7 /usr.bin | |
parent | 361a4ffcb75f1a067cea29dde079fd33e39a3a43 (diff) | |
download | FreeBSD-src-a356af4fc799bfdc962b4e80af259fed267f5015.zip FreeBSD-src-a356af4fc799bfdc962b4e80af259fed267f5015.tar.gz |
Archive both access and default ACLs.
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/tar/write.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/usr.bin/tar/write.c b/usr.bin/tar/write.c index 4ad1509..6455a20 100644 --- a/usr.bin/tar/write.c +++ b/usr.bin/tar/write.c @@ -796,10 +796,27 @@ record_hardlink(struct bsdtar *bsdtar, struct archive_entry *entry, } #ifdef HAVE_POSIX_ACL +void setup_acl(struct bsdtar *bsdtar, + struct archive_entry *entry, const char *accpath, + int acl_type, int archive_entry_acl_type); + void setup_acls(struct bsdtar *bsdtar, struct archive_entry *entry, const char *accpath) { + archive_entry_acl_clear(entry); + + setup_acl(bsdtar, entry, accpath, + ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_TYPE_ACCESS); + /* XXX Don't bother with default for non-directories. XXX */ + setup_acl(bsdtar, entry, accpath, + ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT); +} + +void +setup_acl(struct bsdtar *bsdtar, struct archive_entry *entry, + const char *accpath, int acl_type, int archive_entry_acl_type) +{ acl_t acl; acl_tag_t acl_tag; acl_entry_t acl_entry; @@ -807,10 +824,8 @@ setup_acls(struct bsdtar *bsdtar, struct archive_entry *entry, int s, ae_id, ae_tag, ae_perm; const char *ae_name; - archive_entry_acl_clear(entry); - /* Retrieve access ACL from file. */ - acl = acl_get_file(accpath, ACL_TYPE_ACCESS); + acl = acl_get_file(accpath, acl_type); if (acl != NULL) { s = acl_get_entry(acl, ACL_FIRST_ENTRY, &acl_entry); while (s == 1) { @@ -849,15 +864,13 @@ setup_acls(struct bsdtar *bsdtar, struct archive_entry *entry, ae_perm |= ARCHIVE_ENTRY_ACL_WRITE; archive_entry_acl_add_entry(entry, - ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ae_perm, ae_tag, + archive_entry_acl_type, ae_perm, ae_tag, ae_id, ae_name); s = acl_get_entry(acl, ACL_NEXT_ENTRY, &acl_entry); } acl_free(acl); } - - /* XXX TODO: Default acl ?? XXX */ } #else void |