summaryrefslogtreecommitdiff
path: root/tar/read.c
diff options
context:
space:
mode:
authorTim Kientzle <kientzle@gmail.com>2010-05-01 17:18:38 -0400
committerTim Kientzle <kientzle@gmail.com>2010-05-01 17:18:38 -0400
commit9dd2a0e1cfc2bd542c99deee4b633c8b7e74a862 (patch)
tree8dfa910cde1c91188ff241a0bcf53682d5eab863 /tar/read.c
parentd02d052b496da3eeb14d0402574319d5ad743657 (diff)
downloadlibarchive-9dd2a0e1cfc2bd542c99deee4b633c8b7e74a862.tar.gz
Add --gid, --gname, --uid, --uname options to tar.
These allow you to override the user/group information both when creating an archive and when restoring an archive. I've also reimplemented --numeric-owner to be a synonym for --gname="" --uname="". Still needs tests... SVN-Revision: 2349
Diffstat (limited to 'tar/read.c')
-rw-r--r--tar/read.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/tar/read.c b/tar/read.c
index b6b4a7e9..d5520dcb 100644
--- a/tar/read.c
+++ b/tar/read.c
@@ -204,10 +204,18 @@ read_archive(struct bsdtar *bsdtar, char mode)
if (r == ARCHIVE_FATAL)
break;
- if (bsdtar->option_numeric_owner) {
+ if (bsdtar->uid >= 0) {
+ archive_entry_set_uid(entry, bsdtar->uid);
archive_entry_set_uname(entry, NULL);
+ }
+ if (bsdtar->gid >= 0) {
+ archive_entry_set_gid(entry, bsdtar->gid);
archive_entry_set_gname(entry, NULL);
}
+ if (bsdtar->uname)
+ archive_entry_set_uname(entry, bsdtar->uname);
+ if (bsdtar->gname >= 0)
+ archive_entry_set_gname(entry, bsdtar->gname);
/*
* Exclude entries that are too old.